Browse Source

Merged minor into default

Alex Szpakowski 10 years ago
parent
commit
17be869293
100 changed files with 40032 additions and 4040 deletions
  1. 5 16
      .hgignore
  2. 95 19
      CMakeLists.txt
  3. 51 0
      changes.txt
  4. BIN
      extra/windows/love.rc
  5. 1 4
      license.txt
  6. BIN
      platform/macosx/dmg/DS_Store
  7. BIN
      platform/macosx/dmg/VolumeIcon.icns
  8. BIN
      platform/macosx/dmg/backgroundImage.tiff
  9. 0 2595
      platform/macosx/love-framework.xcodeproj/project.pbxproj
  10. 0 508
      platform/macosx/love.xcodeproj/project.pbxproj
  11. 3 2
      platform/unix/configure.ac
  12. 6 6
      platform/unix/debian/control.in
  13. 2 2
      platform/unix/genmodules
  14. 128 0
      platform/xcode/ios/Images.xcassets/AppIcon.appiconset/Contents.json
  15. BIN
      platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]
  16. BIN
      platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]
  17. BIN
      platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]
  18. BIN
      platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]
  19. BIN
      platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]
  20. BIN
      platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]
  21. BIN
      platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]
  22. BIN
      platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]
  23. BIN
      platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]
  24. BIN
      platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]
  25. BIN
      platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]
  26. BIN
      platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]
  27. BIN
      platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]
  28. BIN
      platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]
  29. BIN
      platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]
  30. BIN
      platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]
  31. BIN
      platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]
  32. 142 0
      platform/xcode/ios/Images.xcassets/LaunchImage.launchimage/Contents.json
  33. 45 0
      platform/xcode/ios/Launch Screen.xib
  34. 102 0
      platform/xcode/ios/love-ios.plist
  35. 0 0
      platform/xcode/ios/lovedocument.icns
  36. 4108 0
      platform/xcode/liblove.xcodeproj/project.pbxproj
  37. 7 0
      platform/xcode/liblove.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  38. 0 0
      platform/xcode/love.xcodeproj/TemplateIcon.icns
  39. 0 0
      platform/xcode/love.xcodeproj/default.pbxuser
  40. 817 0
      platform/xcode/love.xcodeproj/project.pbxproj
  41. 7 0
      platform/xcode/love.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  42. 2 2
      platform/xcode/macosx/liblove-macosx.plist
  43. 16 4
      platform/xcode/macosx/love-macosx.plist
  44. 0 0
      platform/xcode/macosx/love.icns
  45. BIN
      platform/xcode/macosx/lovedocument.icns
  46. 1 1
      readme.md
  47. 0 22
      src/common/Matrix.cpp
  48. 25 1
      src/common/Matrix.h
  49. 1 0
      src/common/Module.h
  50. 7 1
      src/common/OSX.h
  51. 8 6
      src/common/OSX.mm
  52. 14 5
      src/common/Object.cpp
  53. 4 8
      src/common/Object.h
  54. 3 8
      src/common/Variant.cpp
  55. 0 1
      src/common/Variant.h
  56. 4 4
      src/common/Vector.h
  57. 9 3
      src/common/config.h
  58. 61 0
      src/common/iOS.h
  59. 320 0
      src/common/iOS.mm
  60. 21 2
      src/common/int.h
  61. 30 129
      src/common/runtime.cpp
  62. 43 32
      src/common/runtime.h
  63. 217 0
      src/common/types.cpp
  64. 9 81
      src/common/types.h
  65. 7 7
      src/common/version.h
  66. 2 2
      src/common/wrap_Data.cpp
  67. 6888 0
      src/libraries/glad/glad.cpp
  68. 8899 0
      src/libraries/glad/glad.hpp
  69. 2358 0
      src/libraries/glad/gladfuncs.hpp
  70. 6141 0
      src/libraries/lodepng/lodepng.cpp
  71. 1708 0
      src/libraries/lodepng/lodepng.h
  72. 6329 0
      src/libraries/stb/stb_image.h
  73. 38 5
      src/love.cpp
  74. 3 3
      src/modules/audio/Audio.cpp
  75. 5 0
      src/modules/audio/Source.cpp
  76. 2 1
      src/modules/audio/Source.h
  77. 0 5
      src/modules/audio/null/Source.cpp
  78. 0 1
      src/modules/audio/null/Source.h
  79. 6 1
      src/modules/audio/openal/Audio.h
  80. 3 1
      src/modules/audio/openal/Pool.cpp
  81. 8 1
      src/modules/audio/openal/Pool.h
  82. 96 44
      src/modules/audio/openal/Source.cpp
  83. 9 11
      src/modules/audio/openal/Source.h
  84. 10 10
      src/modules/audio/wrap_Audio.cpp
  85. 37 27
      src/modules/audio/wrap_Source.cpp
  86. 1 1
      src/modules/audio/wrap_Source.h
  87. 27 26
      src/modules/event/Event.cpp
  88. 13 8
      src/modules/event/Event.h
  89. 276 161
      src/modules/event/sdl/Event.cpp
  90. 3 7
      src/modules/event/wrap_Event.cpp
  91. 3 6
      src/modules/event/wrap_Event.h
  92. 252 0
      src/modules/filesystem/DroppedFile.cpp
  93. 83 0
      src/modules/filesystem/DroppedFile.h
  94. 66 4
      src/modules/filesystem/File.cpp
  95. 9 9
      src/modules/filesystem/File.h
  96. 62 0
      src/modules/filesystem/Filesystem.cpp
  97. 261 0
      src/modules/filesystem/Filesystem.h
  98. 31 98
      src/modules/filesystem/physfs/File.cpp
  99. 5 6
      src/modules/filesystem/physfs/File.h
  100. 77 133
      src/modules/filesystem/physfs/Filesystem.cpp

+ 5 - 16
.hgignore

@@ -1,7 +1,3 @@
-relre:platform/msvc2008/include/
-glob:platform/msvc2008/lib/
-relre:platform/msvc2008/(.*)txt
-relre:platform/msvc2008/(.*)suo
 glob:extra/reshax/Release/
 glob:extra/reshax/Debug/
 glob:extra/reshax/resources.h
@@ -22,23 +18,16 @@ glob:*.lib
 glob:*.ncb
 glob:*.exe
 glob:*.bat
-glob:platform/macosx/build
-glob:platform/macosx/Build
-glob:platform/macosx/DerivedData
-glob:platform/macosx/*.xcodeproj/bill*
-glob:platform/macosx/*.xcodeproj/xcuserdata
-glob:platform/macosx/*.xcodeproj/project.xcworkspace
+glob:platform/xcode/Build
+glob:platform/xcode/DerivedData
+glob:platform/xcode/ios/include
+glob:platform/xcode/ios/libraries
+glob:*xcuserdata*
 glob:*.DS_Store
 glob:*.dylib
 glob:*.dmg*
 glob:demos
 glob:*.orig
-relre:platform/msvc2010/include/
-glob:platform/msvc2010/lib/
-relre:platform/msvc2010/(.*)txt
-relre:platform/msvc2010/(.*)suo
-relre:platform/msvc2010/(.*)sdf
-relre:platform/msvc2010/(.*)ipch
 glob:.*.swp
 glob:autom4te.cache/
 glob:src/.libs/

+ 95 - 19
CMakeLists.txt

@@ -102,6 +102,7 @@ set(LOVE_SRC_COMMON
 	src/common/runtime.cpp
 	src/common/runtime.h
 	src/common/StringMap.h
+	src/common/types.cpp
 	src/common/types.h
 	src/common/utf8.cpp
 	src/common/utf8.h
@@ -164,13 +165,13 @@ source_group("modules\\audio\\openal" FILES ${LOVE_SRC_MODULE_AUDIO_OPENAL})
 set(LOVE_SRC_MODULE_EVENT_ROOT
 	src/modules/event/Event.cpp
 	src/modules/event/Event.h
+	src/modules/event/wrap_Event.cpp
+	src/modules/event/wrap_Event.h
 )
 
 set(LOVE_SRC_MODULE_EVENT_SDL
 	src/modules/event/sdl/Event.cpp
 	src/modules/event/sdl/Event.h
-	src/modules/event/sdl/wrap_Event.cpp
-	src/modules/event/sdl/wrap_Event.h
 )
 
 set(LOVE_SRC_MODULE_EVENT
@@ -186,10 +187,16 @@ source_group("modules\\event\\sdl" FILES ${LOVE_SRC_MODULE_EVENT_SDL})
 #
 
 set(LOVE_SRC_MODULE_FILESYSTEM_ROOT
+	src/modules/filesystem/DroppedFile.cpp
+	src/modules/filesystem/DroppedFile.h
 	src/modules/filesystem/File.cpp
 	src/modules/filesystem/File.h
 	src/modules/filesystem/FileData.cpp
 	src/modules/filesystem/FileData.h
+	src/modules/filesystem/Filesystem.cpp
+	src/modules/filesystem/Filesystem.h
+	src/modules/filesystem/wrap_DroppedFile.cpp
+	src/modules/filesystem/wrap_DroppedFile.h
 	src/modules/filesystem/wrap_File.cpp
 	src/modules/filesystem/wrap_File.h
 	src/modules/filesystem/wrap_FileData.cpp
@@ -218,6 +225,9 @@ source_group("modules\\filesystem\\physfs" FILES ${LOVE_SRC_MODULE_FILESYSTEM_PH
 #
 
 set(LOVE_SRC_MODULE_FONT_ROOT
+	src/modules/font/BMFontRasterizer.cpp
+	src/modules/font/BMFontRasterizer.h
+	src/modules/font/Font.cpp
 	src/modules/font/Font.h
 	src/modules/font/GlyphData.cpp
 	src/modules/font/GlyphData.h
@@ -225,6 +235,8 @@ set(LOVE_SRC_MODULE_FONT_ROOT
 	src/modules/font/ImageRasterizer.h
 	src/modules/font/Rasterizer.cpp
 	src/modules/font/Rasterizer.h
+	src/modules/font/wrap_Font.cpp
+	src/modules/font/wrap_Font.h
 	src/modules/font/wrap_GlyphData.cpp
 	src/modules/font/wrap_GlyphData.h
 	src/modules/font/wrap_Rasterizer.cpp
@@ -236,8 +248,6 @@ set(LOVE_SRC_MODULE_FONT_FREETYPE
 	src/modules/font/freetype/Font.h
 	src/modules/font/freetype/TrueTypeRasterizer.cpp
 	src/modules/font/freetype/TrueTypeRasterizer.h
-	src/modules/font/freetype/wrap_Font.cpp
-	src/modules/font/freetype/wrap_Font.h
 )
 
 set(LOVE_SRC_MODULE_FONT
@@ -263,6 +273,10 @@ set(LOVE_SRC_MODULE_GRAPHICS_ROOT
 	src/modules/graphics/Texture.h
 	src/modules/graphics/Volatile.cpp
 	src/modules/graphics/Volatile.h
+	src/modules/graphics/wrap_Quad.cpp
+	src/modules/graphics/wrap_Quad.h
+	src/modules/graphics/wrap_Texture.cpp
+	src/modules/graphics/wrap_Texture.h
 )
 
 set(LOVE_SRC_MODULE_GRAPHICS_OPENGL
@@ -270,8 +284,6 @@ set(LOVE_SRC_MODULE_GRAPHICS_OPENGL
 	src/modules/graphics/opengl/Canvas.h
 	src/modules/graphics/opengl/Font.cpp
 	src/modules/graphics/opengl/Font.h
-	src/modules/graphics/opengl/GLee.c
-	src/modules/graphics/opengl/GLee.h
 	src/modules/graphics/opengl/Graphics.cpp
 	src/modules/graphics/opengl/Graphics.h
 	src/modules/graphics/opengl/Image.cpp
@@ -288,7 +300,8 @@ set(LOVE_SRC_MODULE_GRAPHICS_OPENGL
 	src/modules/graphics/opengl/Shader.h
 	src/modules/graphics/opengl/SpriteBatch.cpp
 	src/modules/graphics/opengl/SpriteBatch.h
-	src/modules/graphics/opengl/Texture.h
+	src/modules/graphics/opengl/Text.cpp
+	src/modules/graphics/opengl/Text.h
 	src/modules/graphics/opengl/VertexBuffer.cpp
 	src/modules/graphics/opengl/VertexBuffer.h
 	src/modules/graphics/opengl/wrap_Canvas.cpp
@@ -303,14 +316,12 @@ set(LOVE_SRC_MODULE_GRAPHICS_OPENGL
 	src/modules/graphics/opengl/wrap_Mesh.h
 	src/modules/graphics/opengl/wrap_ParticleSystem.cpp
 	src/modules/graphics/opengl/wrap_ParticleSystem.h
-	src/modules/graphics/opengl/wrap_Quad.cpp
-	src/modules/graphics/opengl/wrap_Quad.h
 	src/modules/graphics/opengl/wrap_Shader.cpp
 	src/modules/graphics/opengl/wrap_Shader.h
 	src/modules/graphics/opengl/wrap_SpriteBatch.cpp
 	src/modules/graphics/opengl/wrap_SpriteBatch.h
-	src/modules/graphics/opengl/wrap_Texture.cpp
-	src/modules/graphics/opengl/wrap_Texture.h
+	src/modules/graphics/opengl/wrap_Text.cpp
+	src/modules/graphics/opengl/wrap_Text.h
 )
 
 set(LOVE_SRC_MODULE_GRAPHICS
@@ -342,16 +353,27 @@ set(LOVE_SRC_MODULE_IMAGE_ROOT
 set(LOVE_SRC_MODULE_IMAGE_MAGPIE
 	src/modules/image/magpie/CompressedData.cpp
 	src/modules/image/magpie/CompressedData.h
+	src/modules/image/magpie/CompressedFormatHandler.h
 	src/modules/image/magpie/ddsHandler.cpp
 	src/modules/image/magpie/ddsHandler.h
-	src/modules/image/magpie/DevilHandler.cpp
-	src/modules/image/magpie/DevilHandler.h
 	src/modules/image/magpie/FormatHandler.cpp
 	src/modules/image/magpie/FormatHandler.h
 	src/modules/image/magpie/Image.cpp
 	src/modules/image/magpie/Image.h
 	src/modules/image/magpie/ImageData.cpp
 	src/modules/image/magpie/ImageData.h
+	src/modules/image/magpie/JPEGHandler.cpp
+	src/modules/image/magpie/JPEGHandler.h
+	src/modules/image/magpie/KTXHandler.cpp
+	src/modules/image/magpie/KTXHandler.h
+	src/modules/image/magpie/PKMHandler.cpp
+	src/modules/image/magpie/PKMHandler.h
+	src/modules/image/magpie/PNGHandler.cpp
+	src/modules/image/magpie/PNGHandler.h
+	src/modules/image/magpie/PVRHandler.cpp
+	src/modules/image/magpie/PVRHandler.h
+	src/modules/image/magpie/STBHandler.cpp
+	src/modules/image/magpie/STBHandler.h
 )
 
 set(LOVE_SRC_MODULE_IMAGE
@@ -723,6 +745,29 @@ set(LOVE_SRC_MODULE_TIMER
 source_group("modules\\timer" FILES ${LOVE_SRC_MODULE_TIMER_ROOT})
 source_group("modules\\timer\\sdl" FILES ${LOVE_SRC_MODULE_TIMER_SDL})
 
+#
+# love.touch
+#
+
+set(LOVE_SRC_MODULE_TOUCH_ROOT
+	src/modules/touch/Touch.h
+	src/modules/touch/wrap_Touch.cpp
+	src/modules/touch/wrap_Touch.h
+)
+
+set(LOVE_SRC_MODULE_TOUCH_SDL
+	src/modules/touch/sdl/Touch.cpp
+	src/modules/touch/sdl/Touch.h
+)
+
+set(LOVE_SRC_MODULE_TOUCH
+	${LOVE_SRC_MODULE_TOUCH_ROOT}
+	${LOVE_SRC_MODULE_TOUCH_SDL}
+)
+
+source_group("modules\\touch" FILES ${LOVE_SRC_MODULE_TOUCH_ROOT})
+source_group("modules\\touch\\sdl" FILES ${LOVE_SRC_MODULE_TOUCH_SDL})
+
 #
 # love.window
 #
@@ -939,6 +984,29 @@ add_library(love_3p_enet ${LOVE_SRC_3P_ENET})
 target_link_libraries(love_3p_enet ${MEGA_LUA})
 target_include_directories(love_3p_enet PUBLIC src/libraries/enet/libenet/include)
 
+#
+# GLAD
+#
+
+set(LOVE_SRC_3P_GLAD
+	src/libraries/glad/glad.cpp
+	src/libraries/glad/glad.hpp
+	src/libraries/glad/gladfuncs.hpp
+)
+
+add_library(love_3p_glad ${LOVE_SRC_3P_GLAD})
+
+#
+# LodePNG
+#
+
+set(LOVE_SRC_3P_LODEPNG
+	src/libraries/lodepng/lodepng.cpp
+	src/libraries/lodepng/lodepng.h
+)
+
+add_library(love_3p_lodepng ${LOVE_SRC_3P_LODEPNG})
+
 #
 # luasocket
 #
@@ -1024,6 +1092,16 @@ set(LOVE_SRC_3P_NOISE1234
 
 add_library(love_3p_noise1234 ${LOVE_SRC_3P_NOISE1234})
 
+#
+# stb_image
+#
+
+set(LOVE_SRC_3P_STB
+	src/libraries/stb/stb_image.h
+)
+
+# stb_image has no implementation files of its own.
+
 #
 # utf8
 #
@@ -1065,6 +1143,8 @@ set(LOVE_3P
 	love_3p_box2d
 	love_3p_ddsparse
 	love_3p_enet
+	love_3p_glad
+	love_3p_lodepng
 	love_3p_luasocket
 	love_3p_luautf8
 	love_3p_noise1234
@@ -1095,6 +1175,7 @@ set(LOVE_LIB_SRC
 	${LOVE_SRC_MODULE_SYSTEM}
 	${LOVE_SRC_MODULE_THREAD}
 	${LOVE_SRC_MODULE_TIMER}
+	${LOVE_SRC_MODULE_TOUCH}
 	${LOVE_SRC_MODULE_WINDOW}
 )
 
@@ -1110,12 +1191,9 @@ include_directories(
 link_directories(${SDL_LINK_DIR})
 
 set(LOVE_MEGA_3P
-	${MEGA_DEVIL}
 	${MEGA_FREETYPE}
-	${MEGA_JASPER}
-	${MEGA_JPEG}
+	${MEGA_JPEG_TURBO}
 	${MEGA_LIBOGG}
-	${MEGA_LIBPNG}
 	${MEGA_LIBVORBISFILE}
 	${MEGA_LIBVORBIS}
 	${MEGA_LUA}
@@ -1124,7 +1202,6 @@ set(LOVE_MEGA_3P
 	${MEGA_PHYSFS}
 	${MEGA_SDL2MAIN}
 	${MEGA_SDL2}
-	${MEGA_TIFF}
 	${MEGA_ZLIB}
 )
 
@@ -1181,7 +1258,6 @@ endif()
 
 add_move_dll(love ${MEGA_SDL2})
 add_move_dll(love ${MEGA_OPENAL})
-add_move_dll(love ${MEGA_DEVIL})
 
 if(LOVE_JIT)
 	add_move_file(love ${MEGA_LUAJIT_DLL})

+ 51 - 0
changes.txt

@@ -1,3 +1,54 @@
+LOVE 0.10.0 []
+--------------
+
+Released: N/A
+
+  * Added love.filesystem.setRequirePath and love.filesystem.getRequirePath.
+  * Added love.filedropped and love.directorydropped event callback functions.
+  * Added love.wheelmoved event callback function (replaces "wu" and "wd" constants for love.mousepressed.)
+  * Added Source:getType (replaces Source:isStatic.)
+  * Added love.graphics.getSupported (replaces love.graphics.isSupported.)
+  * Added love.graphics.getSystemLimits (replaces love.graphics.getSystemLimit.)
+  * Added love.graphics.stencil and love.graphics.setStencilTest (replaces love.graphics.setStencil.)
+  * Added optional x/y/width/height arguments to Image:refresh.
+  * Added support for OpenGL ES.
+  * Added support for loading ETC1/2, EAC, and PVRTC compressed textures.
+  * Added Text objects and love.graphics.newText.
+  * Added BMFont bitmap font file support to love.graphics.newFont and love.font.
+
+  * Removed love.filesystem.exists (use love.filesystem.isFile or love.filesystem.isDirectory instead.)
+  * Removed the "wu" and "wd" constants for love.mousepressed (replaced by love.wheelmoved.)
+  * Removed Source:isStatic (replaced by Source:getType.)
+  * Removed image loading support for all (non-compressed texture) file formats except for PNG, JPEG, TGA, and BMP.
+  * Removed love.graphics.setPointStyle and love.graphics.getPointStyle.
+  * Removed love.graphics.isSupported (replaced by love.graphics.getSupported.)
+  * Removed love.graphics.getSystemLimit (replaced by love.graphics.getSystemLimits.)
+  * Removed love.graphics.setStencil (replaced by love.graphics.stencil and love.graphics.setStencilTest.)
+  * Removed the "canvas", "shader", "npot", "subtractive", and "mipmap" Graphics Feature enums.
+  * Removed functions deprecated in LOVE 0.9.x:
+    * Removed Canvas:getType (replaced by Canvas:getFormat.)
+    * Removed love.graphics.getMaxTextureSize/getMaxImageSize (replaced by love.graphics.getSystemLimits.)
+    * Removed love.graphics.getMaxPointSize (replaced by love.graphics.getSystemLimits.)
+    * Removed Mesh:set/getImage, SpriteBatch:set/getImage, and ParticleSystem:set/getImage (replaced by set/getTexture.)
+    * Removed SpriteBatch:bind/unbind.
+    * Removed Canvas:getFSAA and the "fsaa" flag in love.conf and love.window.setMode (replaced by Canvas:getMSAA and "msaa".)
+    * Removed the "dxt" and "bc5" Graphics Feature enums (replaced by love.graphics.getCompressedImageFormats.)
+    * Removed the "hdrcanvas" Graphics Feature enum (replaced by love.graphics.getCanvasFormats.)
+    * Removed love.window.getWidth/getHeight (use love.graphics.getWidth/getHeight or love.window.getMode instead.)
+
+  * Renamed the fullscreen type "normal" to "exclusive".
+  * Renamed the Distance Model enums "inverse clamped", "linear clamped", and "exponent clamped" to "inverseclamped", "linearclamped", and "exponentclamped".
+  * Renamed blend modes "additive", "subtractive", and "multiplicative" to "add", "subtract", and "multiply".
+
+  * Updated love.math.setRandomSeed and RandomGenerator:setSeed to produce better results for the first few random() calls.
+  * Updated Source methods that deal with spatial audio to error rather than failing silently if the Source isn't mono.
+  * Updated ImageFonts to no longer treat separator pixels as spacing.
+  * Updated the minimum runtime system requirements of LOVE to require OpenGL 2.1 support.
+  * Updated the pixel shader effect function so screen_coords.y is 0 at the top of the screen instead of the bottom.
+  * Updated love.graphics.newImage's optional second argument to be a table of flags (flags are "mipmaps" and "srgb".)
+  * Updated Images to require setting the mipmaps flag to true on creation in order to use mipmaps.
+  * Updated Images to allow mipmaps for non-power-of-two sizes.
+
 LOVE 0.9.2 [Baby Inspector]
 ---------------------------
 

BIN
extra/windows/love.rc


+ 1 - 4
license.txt

@@ -123,7 +123,7 @@ DEALINGS IN THE SOFTWARE.
 
 ---------
 
-This software uses the following LGPL libraries:
+This software uses the following LGPL libraries on Windows, Mac OS X, and Linux:
 
  - libmpg123
      Website: http://www.mpg123.de/
@@ -131,9 +131,6 @@ This software uses the following LGPL libraries:
  - OpenAL Soft
      Website: http://kcat.strangesoft.net/openal.html
      Source download: http://kcat.strangesoft.net/openal.html#download
- - DevIL
-     Website: http://openil.sourceforge.net/
-     Source download: http://downloads.sourceforge.net/openil/DevIL-1.7.8.tar.gz
 
 Following are the LGPL and GPL license texts:
 

BIN
platform/macosx/dmg/DS_Store


BIN
platform/macosx/dmg/VolumeIcon.icns


BIN
platform/macosx/dmg/backgroundImage.tiff


+ 0 - 2595
platform/macosx/love-framework.xcodeproj/project.pbxproj

@@ -1,2595 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 46;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		FA01BE1E1878E35B00640047 /* wrap_Texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA01BE1C1878E35B00640047 /* wrap_Texture.cpp */; };
-		FA01BE1F1878E35B00640047 /* wrap_Texture.h in Headers */ = {isa = PBXBuildFile; fileRef = FA01BE1D1878E35B00640047 /* wrap_Texture.h */; };
-		FA03546C1731F3A700284828 /* simplexnoise1234.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA03546A1731F3A700284828 /* simplexnoise1234.cpp */; };
-		FA03546D1731F3A700284828 /* simplexnoise1234.h in Headers */ = {isa = PBXBuildFile; fileRef = FA03546B1731F3A700284828 /* simplexnoise1234.h */; };
-		FA08F5B016C752F900F007B5 /* Source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2FB732687B1669402408356D /* Source.cpp */; };
-		FA08F5B116C752F900F007B5 /* wrap_Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 02CA1BE908D91B104EB9590F /* wrap_Audio.cpp */; };
-		FA08F5B216C752F900F007B5 /* wrap_Source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 02662CBC29B954295A634A39 /* wrap_Source.cpp */; };
-		FA08F5B316C752FC00F007B5 /* Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1839744763625B5D64EC70AC /* Audio.cpp */; };
-		FA08F5B416C7530100F007B5 /* Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC5707C79175FA6427B3D62 /* Audio.cpp */; };
-		FA08F5B516C7530100F007B5 /* Source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A304E384AF2119905C01504 /* Source.cpp */; };
-		FA08F5B616C7530A00F007B5 /* Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6CB1193233FA78EE646A17A1 /* Audio.cpp */; };
-		FA08F5B716C7530A00F007B5 /* Pool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 601E6A56345412E87E1D396B /* Pool.cpp */; };
-		FA08F5B816C7530A00F007B5 /* Source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 28024635525B077E08A73D9B /* Source.cpp */; };
-		FA08F5B916C7532A00F007B5 /* b64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D383DA1468545C30E7B5805 /* b64.cpp */; };
-		FA08F5BA16C7532A00F007B5 /* delay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36437CE95936736320710513 /* delay.cpp */; };
-		FA08F5BB16C7532A00F007B5 /* Exception.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3746164716797CF80D6B0CEE /* Exception.cpp */; };
-		FA08F5BD16C7532A00F007B5 /* Matrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0CB6025618505B055A4E75DD /* Matrix.cpp */; };
-		FA08F5BE16C7532A00F007B5 /* Memoizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40A0593B616A223A4CEF07C9 /* Memoizer.cpp */; };
-		FA08F5BF16C7532A00F007B5 /* Module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 30E466F441EE727658716873 /* Module.cpp */; };
-		FA08F5C016C7532A00F007B5 /* Object.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 411B061C49172C971C622125 /* Object.cpp */; };
-		FA08F5C116C7532A00F007B5 /* Reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 35B31EBC4DDB6F994BCA46B6 /* Reference.cpp */; };
-		FA08F5C216C7532A00F007B5 /* runtime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 45E761A0072E0EF92BD66EA9 /* runtime.cpp */; };
-		FA08F5C316C7532A00F007B5 /* utf8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7D9B03C2438B748D0DE93DD5 /* utf8.cpp */; };
-		FA08F5C416C7532A00F007B5 /* Variant.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C56375F752B7A9779DD37EC /* Variant.cpp */; };
-		FA08F5C516C7532A00F007B5 /* Vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A2A61843B753E3F5B330703 /* Vector.cpp */; };
-		FA08F5C616C7532A00F007B5 /* wrap_Data.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5ED732200E1B2E5F79831DDA /* wrap_Data.cpp */; };
-		FA08F5C716C7533C00F007B5 /* b2BroadPhase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B5F4DF8110020A96B5D3EAB /* b2BroadPhase.cpp */; };
-		FA08F5C816C7533C00F007B5 /* b2CollideCircle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7E7A068041FD553876712F05 /* b2CollideCircle.cpp */; };
-		FA08F5C916C7533C00F007B5 /* b2CollideEdge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B036C7C5A8832AE53BB1C06 /* b2CollideEdge.cpp */; };
-		FA08F5CA16C7533C00F007B5 /* b2CollidePolygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 427B4B2517C0516844370E3D /* b2CollidePolygon.cpp */; };
-		FA08F5CB16C7533C00F007B5 /* b2Collision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32CC11481CD9164455455D72 /* b2Collision.cpp */; };
-		FA08F5CC16C7533C00F007B5 /* b2Distance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 175A1B8D733B2D4803F64AC1 /* b2Distance.cpp */; };
-		FA08F5CD16C7533C00F007B5 /* b2DynamicTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59D27EA33E8E62E15C185948 /* b2DynamicTree.cpp */; };
-		FA08F5CE16C7533C00F007B5 /* b2TimeOfImpact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1F0D375C38A245E403E53DB5 /* b2TimeOfImpact.cpp */; };
-		FA08F5CF16C7534400F007B5 /* b2ChainShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4E6705C154C34FBD143F465E /* b2ChainShape.cpp */; };
-		FA08F5D016C7534400F007B5 /* b2CircleShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08AA5965073A1C520A7A6833 /* b2CircleShape.cpp */; };
-		FA08F5D116C7534400F007B5 /* b2EdgeShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 633E37194CB535AE41A00092 /* b2EdgeShape.cpp */; };
-		FA08F5D216C7534400F007B5 /* b2PolygonShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08983C025D0655270DF81A5B /* b2PolygonShape.cpp */; };
-		FA08F5D316C7535000F007B5 /* b2BlockAllocator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55A759CE711E157339930E58 /* b2BlockAllocator.cpp */; };
-		FA08F5D416C7535000F007B5 /* b2Draw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12390CBC115B00D06EF951DD /* b2Draw.cpp */; };
-		FA08F5D516C7535000F007B5 /* b2Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2C78323D7D5C628A53EC6931 /* b2Math.cpp */; };
-		FA08F5D616C7535000F007B5 /* b2Settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6FF15DF4423F6426224024C9 /* b2Settings.cpp */; };
-		FA08F5D716C7535000F007B5 /* b2StackAllocator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 780D5B6358096BEB1F1336EE /* b2StackAllocator.cpp */; };
-		FA08F5D816C7535000F007B5 /* b2Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 239054AE7475433E39747DA9 /* b2Timer.cpp */; };
-		FA08F5D916C7536C00F007B5 /* b2Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 120B391518206E964493126C /* b2Body.cpp */; };
-		FA08F5DA16C7536C00F007B5 /* b2ContactManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2A6150F7479D21346EC54B68 /* b2ContactManager.cpp */; };
-		FA08F5DB16C7536C00F007B5 /* b2Fixture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 059C04C13F3A7C05570F2987 /* b2Fixture.cpp */; };
-		FA08F5DC16C7536C00F007B5 /* b2Island.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59BE634A2ACE722F14B86F89 /* b2Island.cpp */; };
-		FA08F5DD16C7536C00F007B5 /* b2World.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0D6F00D95C4407BB26E71E02 /* b2World.cpp */; };
-		FA08F5DE16C7536C00F007B5 /* b2WorldCallbacks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F8D03F1544476B57CA97B01 /* b2WorldCallbacks.cpp */; };
-		FA08F5DF16C7537B00F007B5 /* b2ChainAndCircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 468F7A0A484820DE79CE76D2 /* b2ChainAndCircleContact.cpp */; };
-		FA08F5E016C7537B00F007B5 /* b2ChainAndPolygonContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 60C95C7F507A381D0A483B3F /* b2ChainAndPolygonContact.cpp */; };
-		FA08F5E116C7537B00F007B5 /* b2CircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 58792BC1126C2917432D706B /* b2CircleContact.cpp */; };
-		FA08F5E216C7537B00F007B5 /* b2Contact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 71F878E2440A021B68D93ABC /* b2Contact.cpp */; };
-		FA08F5E316C7537B00F007B5 /* b2ContactSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E9E4F657DEC2772493B79CC /* b2ContactSolver.cpp */; };
-		FA08F5E416C7537B00F007B5 /* b2EdgeAndCircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1108594E361A22D90D6022E8 /* b2EdgeAndCircleContact.cpp */; };
-		FA08F5E516C7537B00F007B5 /* b2EdgeAndPolygonContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 243E18977E2A37CC6FDD55A5 /* b2EdgeAndPolygonContact.cpp */; };
-		FA08F5E616C7537B00F007B5 /* b2PolygonAndCircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 31871B8B7E1A697A73576040 /* b2PolygonAndCircleContact.cpp */; };
-		FA08F5E716C7537B00F007B5 /* b2PolygonContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1F4E747212DE41716BC245C9 /* b2PolygonContact.cpp */; };
-		FA08F5E816C7538F00F007B5 /* b2DistanceJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 33627AE97E66147E76804EF9 /* b2DistanceJoint.cpp */; };
-		FA08F5E916C7538F00F007B5 /* b2FrictionJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 13093ADC78426C5009DF3B13 /* b2FrictionJoint.cpp */; };
-		FA08F5EA16C7538F00F007B5 /* b2GearJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 69A01D71103275D451F965B2 /* b2GearJoint.cpp */; };
-		FA08F5EB16C7538F00F007B5 /* b2Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6F1B61350B6B36AF216C57D7 /* b2Joint.cpp */; };
-		FA08F5EC16C7538F00F007B5 /* b2MouseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A47384208BE218F688C4EFA /* b2MouseJoint.cpp */; };
-		FA08F5ED16C7538F00F007B5 /* b2PrismaticJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E27263847302FCA1F843B47 /* b2PrismaticJoint.cpp */; };
-		FA08F5EE16C7538F00F007B5 /* b2PulleyJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 66EC3C0463A703A97445193B /* b2PulleyJoint.cpp */; };
-		FA08F5EF16C7538F00F007B5 /* b2RevoluteJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 11D62E873092729B497B447F /* b2RevoluteJoint.cpp */; };
-		FA08F5F016C7538F00F007B5 /* b2RopeJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 38AF72D4790619BB022E2AEF /* b2RopeJoint.cpp */; };
-		FA08F5F116C7538F00F007B5 /* b2WeldJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5BCC49F529F726385CD41FA6 /* b2WeldJoint.cpp */; };
-		FA08F5F216C7538F00F007B5 /* b2WheelJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0602250B7E4664E43CA113DC /* b2WheelJoint.cpp */; };
-		FA08F5F316C7539B00F007B5 /* b2Rope.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4832527C02C105776536438A /* b2Rope.cpp */; };
-		FA08F5F416C753A400F007B5 /* luasocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2DC90F3C6160198256795C75 /* luasocket.cpp */; };
-		FA08F5F516C753B800F007B5 /* auxiliar.c in Sources */ = {isa = PBXBuildFile; fileRef = 1CD02D1975803957282F28AB /* auxiliar.c */; };
-		FA08F5F616C753B800F007B5 /* buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 21B25A7E333315172B754D4F /* buffer.c */; };
-		FA08F5F716C753B800F007B5 /* except.c in Sources */ = {isa = PBXBuildFile; fileRef = 49496EAF3305281B19223C22 /* except.c */; };
-		FA08F5F816C753B800F007B5 /* inet.c in Sources */ = {isa = PBXBuildFile; fileRef = 610B475400DE0F7213352BC3 /* inet.c */; };
-		FA08F5F916C753B800F007B5 /* io.c in Sources */ = {isa = PBXBuildFile; fileRef = 135801A6483528800C676492 /* io.c */; };
-		FA08F5FA16C753B800F007B5 /* luasocket.c in Sources */ = {isa = PBXBuildFile; fileRef = 5FAE2A9679C97F2C2792182D /* luasocket.c */; };
-		FA08F5FB16C753B800F007B5 /* mime.c in Sources */ = {isa = PBXBuildFile; fileRef = 00393E4930202C2B6E381F68 /* mime.c */; };
-		FA08F5FC16C753B800F007B5 /* options.c in Sources */ = {isa = PBXBuildFile; fileRef = 5F846B49240D52C10F6F76E5 /* options.c */; };
-		FA08F5FD16C753B800F007B5 /* select.c in Sources */ = {isa = PBXBuildFile; fileRef = 415E1438178736BE0EA908D5 /* select.c */; };
-		FA08F5FE16C753B800F007B5 /* tcp.c in Sources */ = {isa = PBXBuildFile; fileRef = 22256CC12B7C7D0D1B430D46 /* tcp.c */; };
-		FA08F5FF16C753B800F007B5 /* timeout.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B41232F7AF7793540F46C58 /* timeout.c */; };
-		FA08F60016C753B800F007B5 /* udp.c in Sources */ = {isa = PBXBuildFile; fileRef = 2E2675AF3DAA24CE0728042C /* udp.c */; };
-		FA08F60116C753B800F007B5 /* unix.c in Sources */ = {isa = PBXBuildFile; fileRef = 734947AA28AF36E436D242FD /* unix.c */; };
-		FA08F60216C753B800F007B5 /* usocket.c in Sources */ = {isa = PBXBuildFile; fileRef = 041672ED2CF51FC62F532FDB /* usocket.c */; };
-		FA08F60316C753CE00F007B5 /* Event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 24265680279E30A40DF81946 /* Event.cpp */; };
-		FA08F60416C753CE00F007B5 /* Event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3BA712260D725FEB72EB3CDE /* Event.cpp */; };
-		FA08F60516C753CE00F007B5 /* wrap_Event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 691C5C5828550E2F60754EF2 /* wrap_Event.cpp */; };
-		FA08F60616C753DB00F007B5 /* File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 11D141087979064B441B787D /* File.cpp */; };
-		FA08F60716C753DB00F007B5 /* FileData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 62370A494F9D6E2D570065EB /* FileData.cpp */; };
-		FA08F60816C753DB00F007B5 /* File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4E0F565B03D05C3722496F27 /* File.cpp */; };
-		FA08F60916C753DB00F007B5 /* Filesystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6DE3129F3A0B2D9C178118F3 /* Filesystem.cpp */; };
-		FA08F60A16C753DB00F007B5 /* wrap_File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6C367AE309C453C412D91363 /* wrap_File.cpp */; };
-		FA08F60B16C753DB00F007B5 /* wrap_FileData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 597478A255B82B56488B4717 /* wrap_FileData.cpp */; };
-		FA08F60C16C753DB00F007B5 /* wrap_Filesystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E827AE8548C52493ED95629 /* wrap_Filesystem.cpp */; };
-		FA08F60D16C753E700F007B5 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 714251EE742346DC17103357 /* Font.cpp */; };
-		FA08F60E16C753E700F007B5 /* TrueTypeRasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C30420F7FD3038C721223A5 /* TrueTypeRasterizer.cpp */; };
-		FA08F60F16C753E700F007B5 /* wrap_Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 232D67C67BEE54B776420682 /* wrap_Font.cpp */; };
-		FA08F61016C753E700F007B5 /* GlyphData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74003CB27FA762A021183AD5 /* GlyphData.cpp */; };
-		FA08F61116C753E700F007B5 /* ImageRasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D016F4C27EF506C13FE3058 /* ImageRasterizer.cpp */; };
-		FA08F61216C753E700F007B5 /* Rasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B1C4E4D288A1D2F29E57B1B /* Rasterizer.cpp */; };
-		FA08F61316C753E700F007B5 /* wrap_GlyphData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B4E22F1388E2B2E76E3377B /* wrap_GlyphData.cpp */; };
-		FA08F61416C753E700F007B5 /* wrap_Rasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 11745DE315E859F71E881D76 /* wrap_Rasterizer.cpp */; };
-		FA08F61716C753F600F007B5 /* Graphics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 03F17FF546D637744E263961 /* Graphics.cpp */; };
-		FA08F61816C753F600F007B5 /* Texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 58CC50E70A375FDF53EF01B6 /* Texture.cpp */; };
-		FA08F61A16C753F600F007B5 /* Volatile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B731754147B27AF73AC5358 /* Volatile.cpp */; };
-		FA08F61B16C7541400F007B5 /* Canvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4AD52074367950B735707CE1 /* Canvas.cpp */; };
-		FA08F61C16C7541400F007B5 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 583037E9238A6EF00DD20B1A /* Font.cpp */; };
-		FA08F61D16C7541400F007B5 /* GLee.c in Sources */ = {isa = PBXBuildFile; fileRef = 5725505310E75ECC5044583A /* GLee.c */; };
-		FA08F61E16C7541400F007B5 /* Graphics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 11773415762F3A38421C6DB3 /* Graphics.cpp */; };
-		FA08F61F16C7541400F007B5 /* Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56D6030A0B8F7397715062B9 /* Image.cpp */; };
-		FA08F62016C7541400F007B5 /* OpenGL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E406F8328543EC63EB922C6 /* OpenGL.cpp */; };
-		FA08F62116C7541400F007B5 /* ParticleSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48A206C9004150640C432100 /* ParticleSystem.cpp */; };
-		FA08F62316C7541400F007B5 /* Shader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA577A8516C71CF000860150 /* Shader.cpp */; };
-		FA08F62416C7541400F007B5 /* SpriteBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D700D182EAA46273D1E2CC4 /* SpriteBatch.cpp */; };
-		FA08F62516C7541400F007B5 /* VertexBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 426B1C4475DC54505B824B7F /* VertexBuffer.cpp */; };
-		FA08F62616C7541400F007B5 /* wrap_Canvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4E3251027026699A1D4D310D /* wrap_Canvas.cpp */; };
-		FA08F62716C7541400F007B5 /* wrap_Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A3B52AF1FBE73FC36AD50C8 /* wrap_Font.cpp */; };
-		FA08F62816C7541400F007B5 /* wrap_Graphics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A9810F758AC1D1E4B6431FD /* wrap_Graphics.cpp */; };
-		FA08F62916C7541400F007B5 /* wrap_Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14AE68E14C2C74526A612FA0 /* wrap_Image.cpp */; };
-		FA08F62A16C7541400F007B5 /* wrap_ParticleSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5F42052D7C8271A1105541DE /* wrap_ParticleSystem.cpp */; };
-		FA08F62C16C7541400F007B5 /* wrap_Shader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA577A8716C71CF000860150 /* wrap_Shader.cpp */; };
-		FA08F62D16C7541400F007B5 /* wrap_SpriteBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 02C16FDB537A702F4D42534E /* wrap_SpriteBatch.cpp */; };
-		FA08F62E16C7542600F007B5 /* ImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 78115E763B723C0C40AD47CF /* ImageData.cpp */; };
-		FA08F62F16C7542600F007B5 /* Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 505F23A73BFE250833D650E4 /* Image.cpp */; };
-		FA08F63016C7542600F007B5 /* DevilHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AA7781A230065F346E2313A /* DevilHandler.cpp */; };
-		FA08F63116C7542600F007B5 /* wrap_Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0B0728FA73B107B37A956A09 /* wrap_Image.cpp */; };
-		FA08F63216C7542600F007B5 /* wrap_ImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 076840774B0B6E721D0C18D0 /* wrap_ImageData.cpp */; };
-		FA08F63416C7542D00F007B5 /* JoystickModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B425307C0C1C4B3EFC3A5F /* JoystickModule.cpp */; };
-		FA08F63516C7542D00F007B5 /* wrap_JoystickModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 139411436818381E493F00F5 /* wrap_JoystickModule.cpp */; };
-		FA08F63616C7543400F007B5 /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 524741891BB93848039F4174 /* Keyboard.cpp */; };
-		FA08F63716C7543400F007B5 /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43BC2B1C505E5EFF650C31E3 /* Keyboard.cpp */; };
-		FA08F63816C7543400F007B5 /* wrap_Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 19F40DF6507028212FEB1D77 /* wrap_Keyboard.cpp */; };
-		FA08F63916C7543A00F007B5 /* love.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 19ED419874B46EC16F927524 /* love.cpp */; };
-		FA08F63A16C7544300F007B5 /* Mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 31E0110E5797041465FF5F95 /* Mouse.cpp */; };
-		FA08F63B16C7544300F007B5 /* Mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 584E16AE09E12536206C46FE /* Mouse.cpp */; };
-		FA08F63C16C7544300F007B5 /* wrap_Mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22EF17981EBD442773FE41B6 /* wrap_Mouse.cpp */; };
-		FA08F63D16C7544B00F007B5 /* Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2DCE45C868A0091B762C7377 /* Body.cpp */; };
-		FA08F63E16C7544B00F007B5 /* Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 69DB4423147C7E3362941E75 /* Joint.cpp */; };
-		FA08F63F16C7544B00F007B5 /* Shape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70F425B5336E1CD652827FD0 /* Shape.cpp */; };
-		FA08F64016C7546400F007B5 /* Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 089B1AC1248B21D336594457 /* Body.cpp */; };
-		FA08F64116C7546400F007B5 /* ChainShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0959542C4B54320B1DDD5911 /* ChainShape.cpp */; };
-		FA08F64216C7546400F007B5 /* CircleShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DAB28A9235E2CBE75F56848 /* CircleShape.cpp */; };
-		FA08F64316C7546400F007B5 /* Contact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 02CD63315FF902E336AB4657 /* Contact.cpp */; };
-		FA08F64416C7546400F007B5 /* DistanceJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34A36BB617BC5CCA5B870EA6 /* DistanceJoint.cpp */; };
-		FA08F64516C7546400F007B5 /* EdgeShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 755C2B980C106EA7423E7E5E /* EdgeShape.cpp */; };
-		FA08F64616C7546400F007B5 /* Fixture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 47C77F6032FA77E046AA6810 /* Fixture.cpp */; };
-		FA08F64716C7546400F007B5 /* FrictionJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E22646A710E5EFC27FE3932 /* FrictionJoint.cpp */; };
-		FA08F64816C7546400F007B5 /* GearJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6F4D478A52A0408765095920 /* GearJoint.cpp */; };
-		FA08F64916C7546400F007B5 /* Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3EA80A4E0CE0014052076037 /* Joint.cpp */; };
-		FA08F64A16C7546400F007B5 /* MouseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C0B06AF6B5326C840477B18 /* MouseJoint.cpp */; };
-		FA08F64B16C7546400F007B5 /* Physics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 370D76DC224F2EB300CB4E2F /* Physics.cpp */; };
-		FA08F64C16C7546400F007B5 /* PolygonShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 54E85987318206E93DC8189F /* PolygonShape.cpp */; };
-		FA08F64D16C7546400F007B5 /* PrismaticJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0AE5755936E84C247FB56C65 /* PrismaticJoint.cpp */; };
-		FA08F64E16C7546400F007B5 /* PulleyJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5CB720BA493D7D995E0E20DD /* PulleyJoint.cpp */; };
-		FA08F64F16C7546400F007B5 /* RevoluteJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36DD053F754B2D29719B1F80 /* RevoluteJoint.cpp */; };
-		FA08F65016C7546400F007B5 /* RopeJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 53C4064801456193163E4631 /* RopeJoint.cpp */; };
-		FA08F65116C7546400F007B5 /* Shape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61E64F07028039774F502D69 /* Shape.cpp */; };
-		FA08F65216C7547300F007B5 /* WeldJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 78E50525407567F863476E27 /* WeldJoint.cpp */; };
-		FA08F65316C7547300F007B5 /* WheelJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 44DE79C879CC0074510A2403 /* WheelJoint.cpp */; };
-		FA08F65416C7547300F007B5 /* World.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 644D0C953C3439FC57C03FC6 /* World.cpp */; };
-		FA08F65516C7547300F007B5 /* wrap_Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 64694F91593478085859666F /* wrap_Body.cpp */; };
-		FA08F65616C7547300F007B5 /* wrap_ChainShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CAA69E00D0808BA2108238B /* wrap_ChainShape.cpp */; };
-		FA08F65716C7547300F007B5 /* wrap_CircleShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6EF321185C2B1F1E1AF54F64 /* wrap_CircleShape.cpp */; };
-		FA08F65816C7547300F007B5 /* wrap_Contact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3BB22A142670197B0DBD0BED /* wrap_Contact.cpp */; };
-		FA08F65916C7547300F007B5 /* wrap_DistanceJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 69967D2323404E1F0ED21F11 /* wrap_DistanceJoint.cpp */; };
-		FA08F65A16C7547300F007B5 /* wrap_EdgeShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40F412FF29F65F5A3D511B98 /* wrap_EdgeShape.cpp */; };
-		FA08F65B16C7547300F007B5 /* wrap_Fixture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7F796B7A3362196075C62E61 /* wrap_Fixture.cpp */; };
-		FA08F65C16C7547300F007B5 /* wrap_FrictionJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 340345481F165F8945C716AE /* wrap_FrictionJoint.cpp */; };
-		FA08F65D16C7548200F007B5 /* wrap_GearJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 50B67F2D0CC511706810302E /* wrap_GearJoint.cpp */; };
-		FA08F65E16C7548200F007B5 /* wrap_Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 71810207414B52F8340D7797 /* wrap_Joint.cpp */; };
-		FA08F65F16C7548200F007B5 /* wrap_MouseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4D81102E7ABD1C282BE42CE3 /* wrap_MouseJoint.cpp */; };
-		FA08F66016C7548200F007B5 /* wrap_Physics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6CEB48E969FC42C53F9432B1 /* wrap_Physics.cpp */; };
-		FA08F66116C7548200F007B5 /* wrap_PolygonShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AD03C7A77C546ED07BE4C06 /* wrap_PolygonShape.cpp */; };
-		FA08F66216C7548200F007B5 /* wrap_PrismaticJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0B4020CD058D70F569DF6129 /* wrap_PrismaticJoint.cpp */; };
-		FA08F66316C7548200F007B5 /* wrap_PulleyJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E840AF84AB61C6410E26634 /* wrap_PulleyJoint.cpp */; };
-		FA08F66416C7548200F007B5 /* wrap_RevoluteJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1F3A277A44141DBF7BCF146A /* wrap_RevoluteJoint.cpp */; };
-		FA08F66516C7548200F007B5 /* wrap_RopeJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0E3E13BC3E3A7C0C7DBE7DF8 /* wrap_RopeJoint.cpp */; };
-		FA08F66616C7548200F007B5 /* wrap_Shape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 124E716E0BCA055534A60AD2 /* wrap_Shape.cpp */; };
-		FA08F66716C7548200F007B5 /* wrap_WeldJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3DFF31EE26405E554C610C8F /* wrap_WeldJoint.cpp */; };
-		FA08F66816C7548200F007B5 /* wrap_WheelJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73473B3C698B538002540A5D /* wrap_WheelJoint.cpp */; };
-		FA08F66916C7548200F007B5 /* wrap_World.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36324E12371E518E6E9C61B5 /* wrap_World.cpp */; };
-		FA08F66A16C7549200F007B5 /* Sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 30ED4BB03C5F11254AF12E98 /* Sound.cpp */; };
-		FA08F66B16C7549200F007B5 /* SoundData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C5C6C6E47851D1308411DE6 /* SoundData.cpp */; };
-		FA08F66C16C7549200F007B5 /* wrap_Decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5CF629B94C7802D446D61C45 /* wrap_Decoder.cpp */; };
-		FA08F66D16C7549200F007B5 /* wrap_Sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 385902BD584E7D73154E4EBB /* wrap_Sound.cpp */; };
-		FA08F66E16C7549200F007B5 /* wrap_SoundData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DC3617831763D2760335D87 /* wrap_SoundData.cpp */; };
-		FA08F66F16C754A100F007B5 /* Decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4E15567759041CC379292BE6 /* Decoder.cpp */; };
-		FA08F67016C754A100F007B5 /* FLACDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A774BC26B7235E410D40C8E /* FLACDecoder.cpp */; };
-		FA08F67116C754A100F007B5 /* GmeDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 02F0197227150E1B28D9425B /* GmeDecoder.cpp */; };
-		FA08F67216C754A100F007B5 /* ModPlugDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 407422E8589417B6683D1042 /* ModPlugDecoder.cpp */; };
-		FA08F67316C754A100F007B5 /* Mpg123Decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1F875B224C4E1B9E35854766 /* Mpg123Decoder.cpp */; };
-		FA08F67416C754A100F007B5 /* Sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2A5F7DCB40652F9B7D61073A /* Sound.cpp */; };
-		FA08F67516C754A100F007B5 /* VorbisDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 727648E06CD863A2582F798F /* VorbisDecoder.cpp */; };
-		FA08F67716C754A900F007B5 /* threads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B3565203A1778431F8A5409 /* threads.cpp */; };
-		FA08F67916C754B100F007B5 /* Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 113269E55FCF208D2D6754BC /* Timer.cpp */; };
-		FA08F67A16C754B100F007B5 /* wrap_Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 695E4ED13AA0689E64280573 /* wrap_Timer.cpp */; };
-		FA08F67B16C754BA00F007B5 /* Window.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 351B09E51FDC338622F44624 /* Window.cpp */; };
-		FA08F67C16C754BA00F007B5 /* Window.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6CDD4F3320303D222C180CD0 /* Window.cpp */; };
-		FA0A4BF0182E0C2800E1E4D2 /* b2MotorJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0A4BEE182E0C2800E1E4D2 /* b2MotorJoint.cpp */; };
-		FA0A4BF1182E0C2800E1E4D2 /* b2MotorJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0A4BEF182E0C2800E1E4D2 /* b2MotorJoint.h */; };
-		FA0A4BF4182E1AD600E1E4D2 /* MotorJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0A4BF2182E1AD600E1E4D2 /* MotorJoint.cpp */; };
-		FA0A4BF5182E1AD600E1E4D2 /* MotorJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0A4BF3182E1AD600E1E4D2 /* MotorJoint.h */; };
-		FA0A4BF9182E260200E1E4D2 /* wrap_MotorJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0A4BF7182E260200E1E4D2 /* wrap_MotorJoint.h */; };
-		FA0A4BFA182E26F500E1E4D2 /* wrap_MotorJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0A4BF6182E260200E1E4D2 /* wrap_MotorJoint.cpp */; };
-		FA0CDE3D1710F9A50056E8D7 /* FormatHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0CDE3B1710F9A50056E8D7 /* FormatHandler.h */; };
-		FA1EF7C41799FEAC00FF380C /* wrap_System.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA34E7D4174B55AF00E04D3F /* wrap_System.cpp */; };
-		FA1EF7C51799FEB200FF380C /* wrap_System.h in Headers */ = {isa = PBXBuildFile; fileRef = FA34E7D5174B55AF00E04D3F /* wrap_System.h */; };
-		FA34E7CD174B513F00E04D3F /* System.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA34E7CB174B513F00E04D3F /* System.cpp */; };
-		FA34E7CE174B513F00E04D3F /* System.h in Headers */ = {isa = PBXBuildFile; fileRef = FA34E7CC174B513F00E04D3F /* System.h */; };
-		FA34E7D2174B515D00E04D3F /* System.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA34E7D0174B515D00E04D3F /* System.cpp */; };
-		FA34E7D3174B515D00E04D3F /* System.h in Headers */ = {isa = PBXBuildFile; fileRef = FA34E7D1174B515D00E04D3F /* System.h */; };
-		FA3D9E0D16E68DE600CA6630 /* Cursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA3D9E0B16E68DE600CA6630 /* Cursor.cpp */; };
-		FA3D9E0E16E68DE600CA6630 /* Cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = FA3D9E0C16E68DE600CA6630 /* Cursor.h */; };
-		FA3D9E1116E68EAE00CA6630 /* Cursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA3D9E0F16E68EAE00CA6630 /* Cursor.cpp */; };
-		FA3D9E1216E68EAE00CA6630 /* Cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = FA3D9E1016E68EAE00CA6630 /* Cursor.h */; };
-		FA3D9E1516E6D41100CA6630 /* wrap_Cursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA3D9E1316E6D41000CA6630 /* wrap_Cursor.cpp */; };
-		FA3D9E1616E6D41100CA6630 /* wrap_Cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = FA3D9E1416E6D41000CA6630 /* wrap_Cursor.h */; };
-		FA435EA317B36E9C004C3F22 /* Polyline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA435EA117B36E9C004C3F22 /* Polyline.cpp */; };
-		FA435EA417B36E9C004C3F22 /* Polyline.h in Headers */ = {isa = PBXBuildFile; fileRef = FA435EA217B36E9C004C3F22 /* Polyline.h */; };
-		FA5454C216F1310000D30303 /* MathModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA5454C016F1310000D30303 /* MathModule.cpp */; };
-		FA5454C316F1310000D30303 /* MathModule.h in Headers */ = {isa = PBXBuildFile; fileRef = FA5454C116F1310000D30303 /* MathModule.h */; };
-		FA577AB016C7507900860150 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A7916C71A1700860150 /* Cocoa.framework */; };
-		FA577AC216C7512D00860150 /* FreeType.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A6716C719D900860150 /* FreeType.framework */; };
-		FA577AC416C7513200860150 /* IL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A6916C719DE00860150 /* IL.framework */; };
-		FA577AC516C7513400860150 /* libmodplug.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A8216C71A5300860150 /* libmodplug.framework */; };
-		FA577AC716C7513A00860150 /* mpg123.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A6F16C719F000860150 /* mpg123.framework */; };
-		FA577AC816C7513C00860150 /* Ogg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A7116C719F400860150 /* Ogg.framework */; };
-		FA577ACA16C7514100860150 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A7C16C71A2600860150 /* OpenGL.framework */; };
-		FA577ACB16C7514400860150 /* physfs.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A7316C719F900860150 /* physfs.framework */; };
-		FA577ACD16C7514C00860150 /* Vorbis.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A7716C71A0800860150 /* Vorbis.framework */; };
-		FA5FDC791788D548002F0ED2 /* enet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA5FDC5F1788D548002F0ED2 /* enet.cpp */; };
-		FA5FDC7A1788D548002F0ED2 /* callbacks.c in Sources */ = {isa = PBXBuildFile; fileRef = FA5FDC611788D548002F0ED2 /* callbacks.c */; };
-		FA5FDC7C1788D548002F0ED2 /* compress.c in Sources */ = {isa = PBXBuildFile; fileRef = FA5FDC631788D548002F0ED2 /* compress.c */; };
-		FA5FDC7D1788D548002F0ED2 /* host.c in Sources */ = {isa = PBXBuildFile; fileRef = FA5FDC641788D548002F0ED2 /* host.c */; };
-		FA5FDC7E1788D548002F0ED2 /* callbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = FA5FDC671788D548002F0ED2 /* callbacks.h */; };
-		FA5FDC7F1788D548002F0ED2 /* enet.h in Headers */ = {isa = PBXBuildFile; fileRef = FA5FDC681788D548002F0ED2 /* enet.h */; };
-		FA5FDC801788D548002F0ED2 /* list.h in Headers */ = {isa = PBXBuildFile; fileRef = FA5FDC691788D548002F0ED2 /* list.h */; };
-		FA5FDC811788D548002F0ED2 /* protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = FA5FDC6A1788D548002F0ED2 /* protocol.h */; };
-		FA5FDC821788D548002F0ED2 /* time.h in Headers */ = {isa = PBXBuildFile; fileRef = FA5FDC6B1788D548002F0ED2 /* time.h */; };
-		FA5FDC831788D548002F0ED2 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = FA5FDC6C1788D548002F0ED2 /* types.h */; };
-		FA5FDC841788D548002F0ED2 /* unix.h in Headers */ = {isa = PBXBuildFile; fileRef = FA5FDC6D1788D548002F0ED2 /* unix.h */; };
-		FA5FDC851788D548002F0ED2 /* utility.h in Headers */ = {isa = PBXBuildFile; fileRef = FA5FDC6E1788D548002F0ED2 /* utility.h */; };
-		FA5FDC861788D548002F0ED2 /* win32.h in Headers */ = {isa = PBXBuildFile; fileRef = FA5FDC6F1788D548002F0ED2 /* win32.h */; };
-		FA5FDC881788D548002F0ED2 /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = FA5FDC711788D548002F0ED2 /* list.c */; };
-		FA5FDC891788D548002F0ED2 /* packet.c in Sources */ = {isa = PBXBuildFile; fileRef = FA5FDC721788D548002F0ED2 /* packet.c */; };
-		FA5FDC8A1788D548002F0ED2 /* peer.c in Sources */ = {isa = PBXBuildFile; fileRef = FA5FDC731788D548002F0ED2 /* peer.c */; };
-		FA5FDC8B1788D548002F0ED2 /* protocol.c in Sources */ = {isa = PBXBuildFile; fileRef = FA5FDC741788D548002F0ED2 /* protocol.c */; };
-		FA5FDC8D1788D548002F0ED2 /* unix.c in Sources */ = {isa = PBXBuildFile; fileRef = FA5FDC761788D548002F0ED2 /* unix.c */; };
-		FA5FDC8E1788D548002F0ED2 /* win32.c in Sources */ = {isa = PBXBuildFile; fileRef = FA5FDC771788D548002F0ED2 /* win32.c */; };
-		FA5FDC8F1788D548002F0ED2 /* lua-enet.h in Headers */ = {isa = PBXBuildFile; fileRef = FA5FDC781788D548002F0ED2 /* lua-enet.h */; };
-		FA636D8A171B70920065623F /* RandomGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA636D88171B70920065623F /* RandomGenerator.cpp */; };
-		FA636D8B171B70920065623F /* RandomGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = FA636D89171B70920065623F /* RandomGenerator.h */; };
-		FA636D8E171B72A70065623F /* wrap_RandomGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA636D8C171B72A70065623F /* wrap_RandomGenerator.cpp */; };
-		FA636D8F171B72A70065623F /* wrap_RandomGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = FA636D8D171B72A70065623F /* wrap_RandomGenerator.h */; };
-		FA7175AA178E8418001FE7FE /* lua.h in Headers */ = {isa = PBXBuildFile; fileRef = FA7175A9178E8418001FE7FE /* lua.h */; };
-		FA7AA59217F6AC1F00704BE2 /* wrap_Mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA7AA59017F6AC1F00704BE2 /* wrap_Mesh.cpp */; };
-		FA7AA59317F6AC1F00704BE2 /* wrap_Mesh.h in Headers */ = {isa = PBXBuildFile; fileRef = FA7AA59117F6AC1F00704BE2 /* wrap_Mesh.h */; };
-		FA7C937A16DCC6C2006F2BEE /* wrap_Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA7C937516DCC6C2006F2BEE /* wrap_Math.cpp */; };
-		FA7C937B16DCC6C2006F2BEE /* wrap_Math.h in Headers */ = {isa = PBXBuildFile; fileRef = FA7C937616DCC6C2006F2BEE /* wrap_Math.h */; };
-		FA9B492A1875EFB900201DA9 /* Texture.h in Headers */ = {isa = PBXBuildFile; fileRef = FA9B49281875EFB900201DA9 /* Texture.h */; };
-		FA9B4A0816E1578300074F42 /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA9B4A0716E1578300074F42 /* SDL2.framework */; };
-		FA9FC0B0173D6E3E005027FF /* wrap_Window.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA9FC0AE173D6E3E005027FF /* wrap_Window.cpp */; };
-		FA9FC0B1173D6E3E005027FF /* wrap_Window.h in Headers */ = {isa = PBXBuildFile; fileRef = FA9FC0AF173D6E3E005027FF /* wrap_Window.h */; };
-		FAA0A45E1A704016009487CB /* lprefix.h in Headers */ = {isa = PBXBuildFile; fileRef = FAA0A45C1A704016009487CB /* lprefix.h */; };
-		FAA0A45F1A704016009487CB /* lutf8lib.c in Sources */ = {isa = PBXBuildFile; fileRef = FAA0A45D1A704016009487CB /* lutf8lib.c */; };
-		FAA0A4611A70431A009487CB /* lutf8lib.h in Headers */ = {isa = PBXBuildFile; fileRef = FAA0A4601A70431A009487CB /* lutf8lib.h */; };
-		FAA627CE18E7E1560080752D /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FAA627CD18E7E1560080752D /* CoreServices.framework */; };
-		FAAC6B02170A373B008A61C5 /* CompressedData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAAC6B00170A373A008A61C5 /* CompressedData.cpp */; };
-		FAAC6B03170A373B008A61C5 /* CompressedData.h in Headers */ = {isa = PBXBuildFile; fileRef = FAAC6B01170A373A008A61C5 /* CompressedData.h */; };
-		FAAFF04416CB11C700CCDE45 /* OpenAL-Soft.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FAAFF04316CB11C700CCDE45 /* OpenAL-Soft.framework */; };
-		FAB0078F1740C12D00A9664D /* Joystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAB0078D1740C12D00A9664D /* Joystick.cpp */; };
-		FAB007901740C12D00A9664D /* Joystick.h in Headers */ = {isa = PBXBuildFile; fileRef = FAB0078E1740C12D00A9664D /* Joystick.h */; };
-		FAB007931740C28900A9664D /* Joystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAB007911740C28900A9664D /* Joystick.cpp */; };
-		FAB007941740C28900A9664D /* Joystick.h in Headers */ = {isa = PBXBuildFile; fileRef = FAB007921740C28900A9664D /* Joystick.h */; };
-		FAB007971740C87D00A9664D /* wrap_Joystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAB007951740C87D00A9664D /* wrap_Joystick.cpp */; };
-		FAB007981740C87D00A9664D /* wrap_Joystick.h in Headers */ = {isa = PBXBuildFile; fileRef = FAB007961740C87D00A9664D /* wrap_Joystick.h */; };
-		FAC5710017402D1100D147E4 /* BezierCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAC570FC17402D1100D147E4 /* BezierCurve.cpp */; };
-		FAC5710117402D1100D147E4 /* BezierCurve.h in Headers */ = {isa = PBXBuildFile; fileRef = FAC570FD17402D1100D147E4 /* BezierCurve.h */; };
-		FAC5710217402D1100D147E4 /* wrap_BezierCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAC570FE17402D1100D147E4 /* wrap_BezierCurve.cpp */; };
-		FAC5710317402D1100D147E4 /* wrap_BezierCurve.h in Headers */ = {isa = PBXBuildFile; fileRef = FAC570FF17402D1100D147E4 /* wrap_BezierCurve.h */; };
-		FAC86E631724552C00EED715 /* wrap_Quad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAC86E611724552C00EED715 /* wrap_Quad.cpp */; };
-		FAC86E641724552C00EED715 /* wrap_Quad.h in Headers */ = {isa = PBXBuildFile; fileRef = FAC86E621724552C00EED715 /* wrap_Quad.h */; };
-		FAC86E6B1724555D00EED715 /* Quad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAC86E671724555D00EED715 /* Quad.cpp */; };
-		FAC86E6C1724555D00EED715 /* Quad.h in Headers */ = {isa = PBXBuildFile; fileRef = FAC86E681724555D00EED715 /* Quad.h */; };
-		FAD8E84F1A7C949B0084E24D /* Vera.ttf.h in Headers */ = {isa = PBXBuildFile; fileRef = FAD8E84E1A7C949B0084E24D /* Vera.ttf.h */; };
-		FADD58DD18C30367005FC3BF /* FormatHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FADD58DC18C30367005FC3BF /* FormatHandler.cpp */; };
-		FAE010DB170DDE99006F29D0 /* ddsinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = FAE010D8170DDE99006F29D0 /* ddsinfo.h */; };
-		FAE010DC170DDE99006F29D0 /* ddsparse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAE010D9170DDE99006F29D0 /* ddsparse.cpp */; };
-		FAE010DD170DDE99006F29D0 /* ddsparse.h in Headers */ = {isa = PBXBuildFile; fileRef = FAE010DA170DDE99006F29D0 /* ddsparse.h */; };
-		FAE010E0170DE25E006F29D0 /* ddsHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAE010DE170DE25E006F29D0 /* ddsHandler.cpp */; };
-		FAE010E1170DE25E006F29D0 /* ddsHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = FAE010DF170DE25E006F29D0 /* ddsHandler.h */; };
-		FAE010E4170DF75C006F29D0 /* wrap_CompressedData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAE010E2170DF75B006F29D0 /* wrap_CompressedData.cpp */; };
-		FAE010E5170DF75C006F29D0 /* wrap_CompressedData.h in Headers */ = {isa = PBXBuildFile; fileRef = FAE010E3170DF75C006F29D0 /* wrap_CompressedData.h */; };
-		FAEC808A1710FEA60057279A /* ImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAEC80881710FEA60057279A /* ImageData.cpp */; };
-		FAEC808B1710FEA60057279A /* ImageData.h in Headers */ = {isa = PBXBuildFile; fileRef = FAEC80891710FEA60057279A /* ImageData.h */; };
-		FAEC808E1711E76C0057279A /* CompressedData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAEC808C1711E76C0057279A /* CompressedData.cpp */; };
-		FAEC808F1711E76C0057279A /* CompressedData.h in Headers */ = {isa = PBXBuildFile; fileRef = FAEC808D1711E76C0057279A /* CompressedData.h */; };
-		FAF272A416E3D44400CC193A /* Channel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAF2729816E3D44400CC193A /* Channel.cpp */; };
-		FAF272A516E3D44400CC193A /* Channel.h in Headers */ = {isa = PBXBuildFile; fileRef = FAF2729916E3D44400CC193A /* Channel.h */; };
-		FAF272A616E3D44400CC193A /* LuaThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAF2729A16E3D44400CC193A /* LuaThread.cpp */; };
-		FAF272A716E3D44400CC193A /* LuaThread.h in Headers */ = {isa = PBXBuildFile; fileRef = FAF2729B16E3D44400CC193A /* LuaThread.h */; };
-		FAF272A816E3D44400CC193A /* ThreadModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAF2729C16E3D44400CC193A /* ThreadModule.cpp */; };
-		FAF272A916E3D44400CC193A /* ThreadModule.h in Headers */ = {isa = PBXBuildFile; fileRef = FAF2729D16E3D44400CC193A /* ThreadModule.h */; };
-		FAF272AA16E3D44400CC193A /* wrap_Channel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAF2729E16E3D44400CC193A /* wrap_Channel.cpp */; };
-		FAF272AB16E3D44400CC193A /* wrap_Channel.h in Headers */ = {isa = PBXBuildFile; fileRef = FAF2729F16E3D44400CC193A /* wrap_Channel.h */; };
-		FAF272AC16E3D44400CC193A /* wrap_LuaThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAF272A016E3D44400CC193A /* wrap_LuaThread.cpp */; };
-		FAF272AD16E3D44400CC193A /* wrap_LuaThread.h in Headers */ = {isa = PBXBuildFile; fileRef = FAF272A116E3D44400CC193A /* wrap_LuaThread.h */; };
-		FAF272AE16E3D44400CC193A /* wrap_ThreadModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAF272A216E3D44400CC193A /* wrap_ThreadModule.cpp */; };
-		FAF272AF16E3D44400CC193A /* wrap_ThreadModule.h in Headers */ = {isa = PBXBuildFile; fileRef = FAF272A316E3D44400CC193A /* wrap_ThreadModule.h */; };
-		FAF272B516E3D46400CC193A /* Thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAF272B116E3D46400CC193A /* Thread.cpp */; };
-		FAF272B616E3D46400CC193A /* Thread.h in Headers */ = {isa = PBXBuildFile; fileRef = FAF272B216E3D46400CC193A /* Thread.h */; };
-		FAF272B716E3D46400CC193A /* threads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAF272B316E3D46400CC193A /* threads.cpp */; };
-		FAF272B816E3D46400CC193A /* threads.h in Headers */ = {isa = PBXBuildFile; fileRef = FAF272B416E3D46400CC193A /* threads.h */; };
-		FAF4376F17F4AC530074F9E2 /* Mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAF4376D17F4AC530074F9E2 /* Mesh.cpp */; };
-		FAF4377017F4AC530074F9E2 /* Mesh.h in Headers */ = {isa = PBXBuildFile; fileRef = FAF4376E17F4AC530074F9E2 /* Mesh.h */; };
-		FAF6704C18184FF800DBDEEA /* wuff.c in Sources */ = {isa = PBXBuildFile; fileRef = FAF6704418184FF800DBDEEA /* wuff.c */; };
-		FAF6704D18184FF800DBDEEA /* wuff.h in Headers */ = {isa = PBXBuildFile; fileRef = FAF6704518184FF800DBDEEA /* wuff.h */; };
-		FAF6704E18184FF800DBDEEA /* wuff_config.h in Headers */ = {isa = PBXBuildFile; fileRef = FAF6704618184FF800DBDEEA /* wuff_config.h */; };
-		FAF6704F18184FF800DBDEEA /* wuff_convert.c in Sources */ = {isa = PBXBuildFile; fileRef = FAF6704718184FF800DBDEEA /* wuff_convert.c */; };
-		FAF6705018184FF800DBDEEA /* wuff_convert.h in Headers */ = {isa = PBXBuildFile; fileRef = FAF6704818184FF800DBDEEA /* wuff_convert.h */; };
-		FAF6705118184FF800DBDEEA /* wuff_internal.c in Sources */ = {isa = PBXBuildFile; fileRef = FAF6704918184FF800DBDEEA /* wuff_internal.c */; };
-		FAF6705218184FF800DBDEEA /* wuff_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = FAF6704A18184FF800DBDEEA /* wuff_internal.h */; };
-		FAF6705318184FF800DBDEEA /* wuff_memory.c in Sources */ = {isa = PBXBuildFile; fileRef = FAF6704B18184FF800DBDEEA /* wuff_memory.c */; };
-		FAF670561818501300DBDEEA /* WaveDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAF670541818501300DBDEEA /* WaveDecoder.cpp */; };
-		FAF670571818501300DBDEEA /* WaveDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FAF670551818501300DBDEEA /* WaveDecoder.h */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXFileReference section */
-		001F02BC119E349012652C17 /* wrap_Data.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Data.h; sourceTree = "<group>"; };
-		003142374F3D40A518716024 /* wrap_Keyboard.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Keyboard.h; sourceTree = "<group>"; };
-		00393E4930202C2B6E381F68 /* mime.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = mime.c; sourceTree = "<group>"; };
-		006B015320155B4D42B43B61 /* wrap_Image.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Image.h; sourceTree = "<group>"; };
-		00744BD73BFE3F591537728F /* Shape.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Shape.h; sourceTree = "<group>"; };
-		00D329851B1E7F6A3AF9614E /* tcp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tcp.h; sourceTree = "<group>"; };
-		02662CBC29B954295A634A39 /* wrap_Source.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Source.cpp; sourceTree = "<group>"; };
-		02C16FDB537A702F4D42534E /* wrap_SpriteBatch.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_SpriteBatch.cpp; sourceTree = "<group>"; };
-		02CA1BE908D91B104EB9590F /* wrap_Audio.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Audio.cpp; sourceTree = "<group>"; };
-		02CD63315FF902E336AB4657 /* Contact.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Contact.cpp; sourceTree = "<group>"; };
-		02F0197227150E1B28D9425B /* GmeDecoder.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GmeDecoder.cpp; sourceTree = "<group>"; };
-		02F064F5202E34F5718352B8 /* wrap_Shape.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Shape.h; sourceTree = "<group>"; };
-		034144EE6C33421377674516 /* b2Distance.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2Distance.h; sourceTree = "<group>"; };
-		03F17FF546D637744E263961 /* Graphics.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Graphics.cpp; sourceTree = "<group>"; };
-		041672ED2CF51FC62F532FDB /* usocket.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = usocket.c; sourceTree = "<group>"; };
-		047815B73C1C5373551442A6 /* wrap_Joint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Joint.h; sourceTree = "<group>"; };
-		048C39D14DA05F5843FE08CA /* ftp.lua.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ftp.lua.h; sourceTree = "<group>"; };
-		057A3770539D25AE6C8F20D3 /* Keyboard.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Keyboard.h; sourceTree = "<group>"; };
-		059C04C13F3A7C05570F2987 /* b2Fixture.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2Fixture.cpp; sourceTree = "<group>"; };
-		05DF237B657042515F3B4E52 /* wrap_Graphics.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Graphics.h; sourceTree = "<group>"; };
-		0602250B7E4664E43CA113DC /* b2WheelJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2WheelJoint.cpp; sourceTree = "<group>"; };
-		065364DB7A29396C777213D0 /* Joint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Joint.h; sourceTree = "<group>"; };
-		076840774B0B6E721D0C18D0 /* wrap_ImageData.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_ImageData.cpp; sourceTree = "<group>"; };
-		079504CB332E415D4B27797B /* b2Body.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2Body.h; sourceTree = "<group>"; };
-		07B301984BE42246402F7D27 /* ImageData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageData.h; sourceTree = "<group>"; };
-		085B376E3FBB254F0FD37958 /* Matrix.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Matrix.h; sourceTree = "<group>"; };
-		086B4A4E025B4B5F606747A2 /* b2DistanceJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2DistanceJoint.h; sourceTree = "<group>"; };
-		08983C025D0655270DF81A5B /* b2PolygonShape.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2PolygonShape.cpp; sourceTree = "<group>"; };
-		089B1AC1248B21D336594457 /* Body.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Body.cpp; sourceTree = "<group>"; };
-		08AA5965073A1C520A7A6833 /* b2CircleShape.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2CircleShape.cpp; sourceTree = "<group>"; };
-		08D24B70441A2496160C0849 /* Rasterizer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Rasterizer.h; sourceTree = "<group>"; };
-		090F537B70DA06EA0B29593F /* b2Settings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2Settings.h; sourceTree = "<group>"; };
-		0959542C4B54320B1DDD5911 /* ChainShape.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ChainShape.cpp; sourceTree = "<group>"; };
-		09C71F9D7DC45F5765B2462B /* socket.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = socket.h; sourceTree = "<group>"; };
-		0A063D006D52330E67FF4B3A /* b2PolygonContact.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2PolygonContact.h; sourceTree = "<group>"; };
-		0A0A2DA4094130187F655E52 /* b2Math.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2Math.h; sourceTree = "<group>"; };
-		0A420541704C1C2D718A4D20 /* b2EdgeAndCircleContact.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2EdgeAndCircleContact.h; sourceTree = "<group>"; };
-		0A936C83344E2CF84E703059 /* PulleyJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PulleyJoint.h; sourceTree = "<group>"; };
-		0AA1539E66B2641B66130709 /* b2MouseJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2MouseJoint.h; sourceTree = "<group>"; };
-		0AE5755936E84C247FB56C65 /* PrismaticJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = PrismaticJoint.cpp; sourceTree = "<group>"; };
-		0AFB7DA45B2D6913110A5AAB /* wrap_WheelJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_WheelJoint.h; sourceTree = "<group>"; };
-		0B0728FA73B107B37A956A09 /* wrap_Image.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Image.cpp; sourceTree = "<group>"; };
-		0B4020CD058D70F569DF6129 /* wrap_PrismaticJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_PrismaticJoint.cpp; sourceTree = "<group>"; };
-		0B727D416262392743091BC3 /* TrueTypeRasterizer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TrueTypeRasterizer.h; sourceTree = "<group>"; };
-		0B930B8571276AA86AB87D80 /* GLee.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GLee.h; sourceTree = "<group>"; };
-		0BEB72033ACA25550ADA76C4 /* b64.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b64.h; sourceTree = "<group>"; };
-		0C30420F7FD3038C721223A5 /* TrueTypeRasterizer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TrueTypeRasterizer.cpp; sourceTree = "<group>"; };
-		0C5C6C6E47851D1308411DE6 /* SoundData.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SoundData.cpp; sourceTree = "<group>"; };
-		0CB6025618505B055A4E75DD /* Matrix.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Matrix.cpp; sourceTree = "<group>"; };
-		0CFF64090F0F4F481BB80CF0 /* Volatile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Volatile.h; sourceTree = "<group>"; };
-		0D6F00D95C4407BB26E71E02 /* b2World.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2World.cpp; sourceTree = "<group>"; };
-		0E3E13BC3E3A7C0C7DBE7DF8 /* wrap_RopeJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_RopeJoint.cpp; sourceTree = "<group>"; };
-		0E755DCF691828CE11444877 /* b2PolygonShape.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2PolygonShape.h; sourceTree = "<group>"; };
-		0EA87794395D3B287C5949AA /* wrap_FrictionJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_FrictionJoint.h; sourceTree = "<group>"; };
-		0EB870A1180261FD424A41B3 /* Shape.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Shape.h; sourceTree = "<group>"; };
-		0F0E666B7C790BB870477994 /* b2BlockAllocator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2BlockAllocator.h; sourceTree = "<group>"; };
-		0F8D03F1544476B57CA97B01 /* b2WorldCallbacks.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2WorldCallbacks.cpp; sourceTree = "<group>"; };
-		104144AB73A974BC04A03131 /* graphics.lua.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = graphics.lua.h; sourceTree = "<group>"; };
-		104D5534669B772556942891 /* PrismaticJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PrismaticJoint.h; sourceTree = "<group>"; };
-		104D567660003ADE696D341A /* Source.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Source.h; sourceTree = "<group>"; };
-		10A608C96F067F972C962EFB /* love.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = love.h; sourceTree = "<group>"; };
-		10F83B5848B77A937C250FEB /* b2Joint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2Joint.h; sourceTree = "<group>"; };
-		1108594E361A22D90D6022E8 /* b2EdgeAndCircleContact.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2EdgeAndCircleContact.cpp; sourceTree = "<group>"; };
-		112814480BBF2ED06EED15BF /* GlyphData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GlyphData.h; sourceTree = "<group>"; };
-		113269E55FCF208D2D6754BC /* Timer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Timer.cpp; sourceTree = "<group>"; };
-		11745DE315E859F71E881D76 /* wrap_Rasterizer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Rasterizer.cpp; sourceTree = "<group>"; };
-		11773415762F3A38421C6DB3 /* Graphics.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Graphics.cpp; sourceTree = "<group>"; };
-		11CF30E73CEA2D8D0A1B17D3 /* b2DynamicTree.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2DynamicTree.h; sourceTree = "<group>"; };
-		11D141087979064B441B787D /* File.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = File.cpp; sourceTree = "<group>"; };
-		11D62E873092729B497B447F /* b2RevoluteJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2RevoluteJoint.cpp; sourceTree = "<group>"; };
-		120B391518206E964493126C /* b2Body.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2Body.cpp; sourceTree = "<group>"; };
-		12390CBC115B00D06EF951DD /* b2Draw.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2Draw.cpp; sourceTree = "<group>"; };
-		124E716E0BCA055534A60AD2 /* wrap_Shape.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Shape.cpp; sourceTree = "<group>"; };
-		13093ADC78426C5009DF3B13 /* b2FrictionJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2FrictionJoint.cpp; sourceTree = "<group>"; };
-		131F69C3368C4B8A55EE0DAD /* wrap_WeldJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_WeldJoint.h; sourceTree = "<group>"; };
-		135801A6483528800C676492 /* io.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = io.c; sourceTree = "<group>"; };
-		138913BE5126483748FA43D0 /* Joint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Joint.h; sourceTree = "<group>"; };
-		139411436818381E493F00F5 /* wrap_JoystickModule.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_JoystickModule.cpp; sourceTree = "<group>"; };
-		14AE68E14C2C74526A612FA0 /* wrap_Image.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Image.cpp; sourceTree = "<group>"; };
-		15093E1B1A14176374C81299 /* wrap_CircleShape.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_CircleShape.h; sourceTree = "<group>"; };
-		153957EB332E1269671E7F4A /* b2CircleShape.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2CircleShape.h; sourceTree = "<group>"; };
-		16C36B3C59A10CDC7ACE0DD4 /* http.lua.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = http.lua.h; sourceTree = "<group>"; };
-		174D472C1AFE594D77A0322B /* b2ChainAndCircleContact.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2ChainAndCircleContact.h; sourceTree = "<group>"; };
-		175A1B8D733B2D4803F64AC1 /* b2Distance.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2Distance.cpp; sourceTree = "<group>"; };
-		17C730CB1DA01B8F0A11217C /* except.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = except.h; sourceTree = "<group>"; };
-		17E9544103AE376210ED5BAA /* select.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = select.h; sourceTree = "<group>"; };
-		182A781C7A2D3D2B6B8904A8 /* Data.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Data.h; sourceTree = "<group>"; };
-		1839744763625B5D64EC70AC /* Audio.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Audio.cpp; sourceTree = "<group>"; };
-		18E0492204644DE929B96486 /* wrap_DistanceJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_DistanceJoint.h; sourceTree = "<group>"; };
-		1916112F57AF56A173727464 /* Audio.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Audio.h; sourceTree = "<group>"; };
-		198A44BD71BB61EE517C2A39 /* Mouse.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Mouse.h; sourceTree = "<group>"; };
-		19ED419874B46EC16F927524 /* love.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = love.cpp; sourceTree = "<group>"; };
-		19F40DF6507028212FEB1D77 /* wrap_Keyboard.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Keyboard.cpp; sourceTree = "<group>"; };
-		1A2A61843B753E3F5B330703 /* Vector.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Vector.cpp; sourceTree = "<group>"; };
-		1A304E384AF2119905C01504 /* Source.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Source.cpp; sourceTree = "<group>"; };
-		1A311FC16B9C0F8D7A41580E /* wrap_Body.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Body.h; sourceTree = "<group>"; };
-		1A95437F513E662113AC154A /* b2Rope.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2Rope.h; sourceTree = "<group>"; };
-		1A9810F758AC1D1E4B6431FD /* wrap_Graphics.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Graphics.cpp; sourceTree = "<group>"; };
-		1AA213FC158815FA77C40330 /* ChainShape.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ChainShape.h; sourceTree = "<group>"; };
-		1AA7781A230065F346E2313A /* DevilHandler.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DevilHandler.cpp; sourceTree = "<group>"; };
-		1B036C7C5A8832AE53BB1C06 /* b2CollideEdge.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2CollideEdge.cpp; sourceTree = "<group>"; };
-		1B1C4E4D288A1D2F29E57B1B /* Rasterizer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Rasterizer.cpp; sourceTree = "<group>"; };
-		1B4E22F1388E2B2E76E3377B /* wrap_GlyphData.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_GlyphData.cpp; sourceTree = "<group>"; };
-		1BCD6EE50EB8791E5A870135 /* utf8.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = utf8.h; sourceTree = "<group>"; };
-		1C5B57F87B315E39005B119F /* b2TimeOfImpact.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2TimeOfImpact.h; sourceTree = "<group>"; };
-		1CAA69E00D0808BA2108238B /* wrap_ChainShape.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_ChainShape.cpp; sourceTree = "<group>"; };
-		1CD02D1975803957282F28AB /* auxiliar.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = auxiliar.c; sourceTree = "<group>"; };
-		1CE84F1F19BC2AA412C638B1 /* timeout.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = timeout.h; sourceTree = "<group>"; };
-		1DA41DFF0869489411A71AFC /* Texture.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Texture.h; sourceTree = "<group>"; };
-		1E22646A710E5EFC27FE3932 /* FrictionJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FrictionJoint.cpp; sourceTree = "<group>"; };
-		1E27263847302FCA1F843B47 /* b2PrismaticJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2PrismaticJoint.cpp; sourceTree = "<group>"; };
-		1E827AE8548C52493ED95629 /* wrap_Filesystem.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Filesystem.cpp; sourceTree = "<group>"; };
-		1E840AF84AB61C6410E26634 /* wrap_PulleyJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_PulleyJoint.cpp; sourceTree = "<group>"; };
-		1E9E4F657DEC2772493B79CC /* b2ContactSolver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2ContactSolver.cpp; sourceTree = "<group>"; };
-		1F0D375C38A245E403E53DB5 /* b2TimeOfImpact.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2TimeOfImpact.cpp; sourceTree = "<group>"; };
-		1F3A277A44141DBF7BCF146A /* wrap_RevoluteJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_RevoluteJoint.cpp; sourceTree = "<group>"; };
-		1F4E747212DE41716BC245C9 /* b2PolygonContact.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2PolygonContact.cpp; sourceTree = "<group>"; };
-		1F6F652A57F8098E5CCA6F9A /* auxiliar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = auxiliar.h; sourceTree = "<group>"; };
-		1F875B224C4E1B9E35854766 /* Mpg123Decoder.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Mpg123Decoder.cpp; sourceTree = "<group>"; };
-		202650DE4F267CD3082A1B30 /* wrap_Font.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Font.h; sourceTree = "<group>"; };
-		208275724C9421035EA145A4 /* MouseJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MouseJoint.h; sourceTree = "<group>"; };
-		21124F915912499179A42115 /* b2CircleContact.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2CircleContact.h; sourceTree = "<group>"; };
-		219636CF6780074F7871463D /* Filesystem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Filesystem.h; sourceTree = "<group>"; };
-		21B25A7E333315172B754D4F /* buffer.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = buffer.c; sourceTree = "<group>"; };
-		21E975B81E8D701F2147658C /* wrap_Contact.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Contact.h; sourceTree = "<group>"; };
-		22256CC12B7C7D0D1B430D46 /* tcp.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = tcp.c; sourceTree = "<group>"; };
-		22EF17981EBD442773FE41B6 /* wrap_Mouse.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Mouse.cpp; sourceTree = "<group>"; };
-		232D67C67BEE54B776420682 /* wrap_Font.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Font.cpp; sourceTree = "<group>"; };
-		23573F2F4F7D56312E663E24 /* Canvas.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Canvas.h; sourceTree = "<group>"; };
-		239054AE7475433E39747DA9 /* b2Timer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2Timer.cpp; sourceTree = "<group>"; };
-		23985AB32E7B463A2CB87E2C /* Sound.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Sound.h; sourceTree = "<group>"; };
-		23A266CD4FC729355E23606E /* b2WheelJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2WheelJoint.h; sourceTree = "<group>"; };
-		24265680279E30A40DF81946 /* Event.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Event.cpp; sourceTree = "<group>"; };
-		243E18977E2A37CC6FDD55A5 /* b2EdgeAndPolygonContact.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2EdgeAndPolygonContact.cpp; sourceTree = "<group>"; };
-		249015D170563D85709D7B6D /* options.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = options.h; sourceTree = "<group>"; };
-		24D758D262EA18DC15187A12 /* delay.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = delay.h; sourceTree = "<group>"; };
-		24EE059E03D8155F4BFF64D6 /* Audio.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Audio.h; sourceTree = "<group>"; };
-		25C325DC2128769F6C6A54C3 /* Image.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Image.h; sourceTree = "<group>"; };
-		25CE236F66F70EB3444A7CC8 /* GearJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GearJoint.h; sourceTree = "<group>"; };
-		276C3474657D0A246F64221C /* wrap_EdgeShape.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_EdgeShape.h; sourceTree = "<group>"; };
-		27F777AB188D674F30BC1829 /* wrap_World.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_World.h; sourceTree = "<group>"; };
-		28016C9B51FE1A893DC35B66 /* Variant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Variant.h; sourceTree = "<group>"; };
-		28024635525B077E08A73D9B /* Source.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Source.cpp; sourceTree = "<group>"; };
-		283342E174613897621A43F1 /* DevilHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DevilHandler.h; sourceTree = "<group>"; };
-		286660042F9654F61AB90D7A /* Body.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Body.h; sourceTree = "<group>"; };
-		2912092853050AF9785F39BE /* wrap_RevoluteJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_RevoluteJoint.h; sourceTree = "<group>"; };
-		295C665B1E0B6B2D03CC4937 /* wrap_Event.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Event.h; sourceTree = "<group>"; };
-		2A5F7DCB40652F9B7D61073A /* Sound.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Sound.cpp; sourceTree = "<group>"; };
-		2A6150F7479D21346EC54B68 /* b2ContactManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2ContactManager.cpp; sourceTree = "<group>"; };
-		2B8C245A21A515E86636725A /* wrap_PrismaticJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_PrismaticJoint.h; sourceTree = "<group>"; };
-		2BE75A693BE206B22DAE1B2E /* wrap_SpriteBatch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_SpriteBatch.h; sourceTree = "<group>"; };
-		2C78323D7D5C628A53EC6931 /* b2Math.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2Math.cpp; sourceTree = "<group>"; };
-		2C87695707B046B536F347D8 /* OpenGL.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OpenGL.h; sourceTree = "<group>"; };
-		2C970EA7229F20934C72581D /* b2RopeJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2RopeJoint.h; sourceTree = "<group>"; };
-		2CAE75B079B828FE6892684A /* udp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = udp.h; sourceTree = "<group>"; };
-		2CEC5ED5211174C7583849AD /* Reference.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Reference.h; sourceTree = "<group>"; };
-		2D290E902C451D6849051FEF /* b2WeldJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2WeldJoint.h; sourceTree = "<group>"; };
-		2D7B7DEC4FC87878332E41B3 /* wrap_JoystickModule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_JoystickModule.h; sourceTree = "<group>"; };
-		2D8E6FAE2A100B5866E96BFF /* runtime.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = runtime.h; sourceTree = "<group>"; };
-		2D9475890CDA3D3776435622 /* Timer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Timer.h; sourceTree = "<group>"; };
-		2DC90F3C6160198256795C75 /* luasocket.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = luasocket.cpp; sourceTree = "<group>"; };
-		2DCE45C868A0091B762C7377 /* Body.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Body.cpp; sourceTree = "<group>"; };
-		2E2675AF3DAA24CE0728042C /* udp.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = udp.c; sourceTree = "<group>"; };
-		2E406F8328543EC63EB922C6 /* OpenGL.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = OpenGL.cpp; sourceTree = "<group>"; };
-		2E5C2A2F05417B294ED655E8 /* Audio.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Audio.h; sourceTree = "<group>"; };
-		2E9B5D9926034F9172215D5E /* Font.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Font.h; sourceTree = "<group>"; };
-		2FB732687B1669402408356D /* Source.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Source.cpp; sourceTree = "<group>"; };
-		2FD366F113387BC95125133D /* b2Shape.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2Shape.h; sourceTree = "<group>"; };
-		2FF26CC52C28773750B812D9 /* PolygonShape.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PolygonShape.h; sourceTree = "<group>"; };
-		30E466F441EE727658716873 /* Module.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Module.cpp; sourceTree = "<group>"; };
-		30ED4BB03C5F11254AF12E98 /* Sound.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Sound.cpp; sourceTree = "<group>"; };
-		31871B8B7E1A697A73576040 /* b2PolygonAndCircleContact.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2PolygonAndCircleContact.cpp; sourceTree = "<group>"; };
-		31A444CF0B4E6DA450120730 /* File.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = File.h; sourceTree = "<group>"; };
-		31B85B507F466FE158A3718E /* wrap_ImageData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_ImageData.h; sourceTree = "<group>"; };
-		31C84D0129AE5F6044A94AC2 /* ModPlugDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ModPlugDecoder.h; sourceTree = "<group>"; };
-		31E0110E5797041465FF5F95 /* Mouse.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Mouse.cpp; sourceTree = "<group>"; };
-		325E60A57F2624766A524423 /* b2World.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2World.h; sourceTree = "<group>"; };
-		329915E84B0B6D025DDC34A9 /* luasocket.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = luasocket.h; sourceTree = "<group>"; };
-		32CC11481CD9164455455D72 /* b2Collision.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2Collision.cpp; sourceTree = "<group>"; };
-		32FD3FEE52FD1911405B3C59 /* b2BroadPhase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2BroadPhase.h; sourceTree = "<group>"; };
-		330F59B11A5B5D1B44DC07BF /* wrap_Source.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Source.h; sourceTree = "<group>"; };
-		33627AE97E66147E76804EF9 /* b2DistanceJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2DistanceJoint.cpp; sourceTree = "<group>"; };
-		33FD508B0754314530A35EF3 /* StringMap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StringMap.h; sourceTree = "<group>"; };
-		340345481F165F8945C716AE /* wrap_FrictionJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_FrictionJoint.cpp; sourceTree = "<group>"; };
-		343E66751EBA75264C3400FA /* b2Draw.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2Draw.h; sourceTree = "<group>"; };
-		34A36BB617BC5CCA5B870EA6 /* DistanceJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DistanceJoint.cpp; sourceTree = "<group>"; };
-		350C47C774835EA552130431 /* Object.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Object.h; sourceTree = "<group>"; };
-		3512460642B046876D687B22 /* wrap_FileData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_FileData.h; sourceTree = "<group>"; };
-		351B09E51FDC338622F44624 /* Window.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Window.cpp; sourceTree = "<group>"; };
-		3547706F2E7D43212CB40D04 /* wrap_GlyphData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_GlyphData.h; sourceTree = "<group>"; };
-		35B31EBC4DDB6F994BCA46B6 /* Reference.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Reference.cpp; sourceTree = "<group>"; };
-		36324E12371E518E6E9C61B5 /* wrap_World.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_World.cpp; sourceTree = "<group>"; };
-		36437CE95936736320710513 /* delay.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = delay.cpp; sourceTree = "<group>"; };
-		36465ABA28FB06F4333C3F07 /* ImageRasterizer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageRasterizer.h; sourceTree = "<group>"; };
-		36DD053F754B2D29719B1F80 /* RevoluteJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RevoluteJoint.cpp; sourceTree = "<group>"; };
-		370D76DC224F2EB300CB4E2F /* Physics.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Physics.cpp; sourceTree = "<group>"; };
-		37224F6B30CA5D800B1F41F1 /* wrap_Rasterizer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Rasterizer.h; sourceTree = "<group>"; };
-		3746164716797CF80D6B0CEE /* Exception.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Exception.cpp; sourceTree = "<group>"; };
-		385902BD584E7D73154E4EBB /* wrap_Sound.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Sound.cpp; sourceTree = "<group>"; };
-		386430B43A081E2A617B05F1 /* EnumMap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EnumMap.h; sourceTree = "<group>"; };
-		389E3CEC356050A27784290E /* Graphics.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Graphics.h; sourceTree = "<group>"; };
-		38AF72D4790619BB022E2AEF /* b2RopeJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2RopeJoint.cpp; sourceTree = "<group>"; };
-		3960064616E26C0213E323E2 /* wrap_Sound.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Sound.h; sourceTree = "<group>"; };
-		3A430C846C642DBC14975C7C /* utf8.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = utf8.h; sourceTree = "<group>"; };
-		3AC7627D7E1458AA0D8E0522 /* b2GrowableStack.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2GrowableStack.h; sourceTree = "<group>"; };
-		3AD03C7A77C546ED07BE4C06 /* wrap_PolygonShape.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_PolygonShape.cpp; sourceTree = "<group>"; };
-		3AFB3A18384A2D22352262B1 /* wrap_Canvas.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Canvas.h; sourceTree = "<group>"; };
-		3BA712260D725FEB72EB3CDE /* Event.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Event.cpp; sourceTree = "<group>"; };
-		3BB22A142670197B0DBD0BED /* wrap_Contact.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Contact.cpp; sourceTree = "<group>"; };
-		3C0B06AF6B5326C840477B18 /* MouseJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MouseJoint.cpp; sourceTree = "<group>"; };
-		3C4D70E82FC12A9A15EC39BA /* checked.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = checked.h; sourceTree = "<group>"; };
-		3C56375F752B7A9779DD37EC /* Variant.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Variant.cpp; sourceTree = "<group>"; };
-		3C9253C8152355E1274814B7 /* FLACDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FLACDecoder.h; sourceTree = "<group>"; };
-		3C965422252F672D3FF6598C /* CircleShape.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CircleShape.h; sourceTree = "<group>"; };
-		3CDA3E9B364F17A902384AAC /* wrap_Font.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Font.h; sourceTree = "<group>"; };
-		3CFE5C4A12D5675E7C9C7BF9 /* Image.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Image.h; sourceTree = "<group>"; };
-		3D8460B2486A372825213933 /* Vector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Vector.h; sourceTree = "<group>"; };
-		3DFF31EE26405E554C610C8F /* wrap_WeldJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_WeldJoint.cpp; sourceTree = "<group>"; };
-		3EA80A4E0CE0014052076037 /* Joint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Joint.cpp; sourceTree = "<group>"; };
-		407422E8589417B6683D1042 /* ModPlugDecoder.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ModPlugDecoder.cpp; sourceTree = "<group>"; };
-		40A0593B616A223A4CEF07C9 /* Memoizer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Memoizer.cpp; sourceTree = "<group>"; };
-		40BC14C607396F8B1B084012 /* int.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = int.h; sourceTree = "<group>"; };
-		40F412FF29F65F5A3D511B98 /* wrap_EdgeShape.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_EdgeShape.cpp; sourceTree = "<group>"; };
-		411B061C49172C971C622125 /* Object.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Object.cpp; sourceTree = "<group>"; };
-		415E1438178736BE0EA908D5 /* select.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = select.c; sourceTree = "<group>"; };
-		426B1C4475DC54505B824B7F /* VertexBuffer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = VertexBuffer.cpp; sourceTree = "<group>"; };
-		427B4B2517C0516844370E3D /* b2CollidePolygon.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2CollidePolygon.cpp; sourceTree = "<group>"; };
-		439E46D768A266780E894800 /* JoystickModule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JoystickModule.h; sourceTree = "<group>"; };
-		43A258C229C75C15238E520C /* Decoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Decoder.h; sourceTree = "<group>"; };
-		43BC2B1C505E5EFF650C31E3 /* Keyboard.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Keyboard.cpp; sourceTree = "<group>"; };
-		448C492C7AEB7840504F1C9D /* b2EdgeShape.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2EdgeShape.h; sourceTree = "<group>"; };
-		44DE79C879CC0074510A2403 /* WheelJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WheelJoint.cpp; sourceTree = "<group>"; };
-		44E85D982F01082F5E1346B6 /* b2ChainAndPolygonContact.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2ChainAndPolygonContact.h; sourceTree = "<group>"; };
-		457674E43FF71E974D990C00 /* DistanceJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DistanceJoint.h; sourceTree = "<group>"; };
-		459946CA7F4406B026E80501 /* inet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = inet.h; sourceTree = "<group>"; };
-		45DC20A760FC42341E5762F7 /* FrictionJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FrictionJoint.h; sourceTree = "<group>"; };
-		45E761A0072E0EF92BD66EA9 /* runtime.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = runtime.cpp; sourceTree = "<group>"; };
-		465D0438379342C4589E2B1C /* WeldJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WeldJoint.h; sourceTree = "<group>"; };
-		468F7A0A484820DE79CE76D2 /* b2ChainAndCircleContact.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2ChainAndCircleContact.cpp; sourceTree = "<group>"; };
-		46CA2B6B17C32BBE55772268 /* Source.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Source.h; sourceTree = "<group>"; };
-		473D2247745F4901155A75DB /* config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; };
-		47C77F6032FA77E046AA6810 /* Fixture.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Fixture.cpp; sourceTree = "<group>"; };
-		47D46915001F342A3CD23E86 /* File.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = File.h; sourceTree = "<group>"; };
-		4832527C02C105776536438A /* b2Rope.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2Rope.cpp; sourceTree = "<group>"; };
-		485645C663D372A96DFD33F7 /* mime.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mime.h; sourceTree = "<group>"; };
-		48A206C9004150640C432100 /* ParticleSystem.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ParticleSystem.cpp; sourceTree = "<group>"; };
-		4941079838020ECA049B5C21 /* Color.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Color.h; sourceTree = "<group>"; };
-		49496EAF3305281B19223C22 /* except.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = except.c; sourceTree = "<group>"; };
-		4A1D6DAE45E627BD12903B52 /* b2PolygonAndCircleContact.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2PolygonAndCircleContact.h; sourceTree = "<group>"; };
-		4A47384208BE218F688C4EFA /* b2MouseJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2MouseJoint.cpp; sourceTree = "<group>"; };
-		4A774BC26B7235E410D40C8E /* FLACDecoder.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FLACDecoder.cpp; sourceTree = "<group>"; };
-		4A80315175C5625804AA4A56 /* VorbisDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VorbisDecoder.h; sourceTree = "<group>"; };
-		4ABD4A7B5CB6678E39490982 /* io.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = io.h; sourceTree = "<group>"; };
-		4AD52074367950B735707CE1 /* Canvas.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Canvas.cpp; sourceTree = "<group>"; };
-		4B002CBD52493ED9347C6EBA /* url.lua.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = url.lua.h; sourceTree = "<group>"; };
-		4B41232F7AF7793540F46C58 /* timeout.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = timeout.c; sourceTree = "<group>"; };
-		4B5F4DF8110020A96B5D3EAB /* b2BroadPhase.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2BroadPhase.cpp; sourceTree = "<group>"; };
-		4B731754147B27AF73AC5358 /* Volatile.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Volatile.cpp; sourceTree = "<group>"; };
-		4C606AEC342457600C3F0741 /* JoystickModule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JoystickModule.h; sourceTree = "<group>"; };
-		4D700D182EAA46273D1E2CC4 /* SpriteBatch.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SpriteBatch.cpp; sourceTree = "<group>"; };
-		4D81102E7ABD1C282BE42CE3 /* wrap_MouseJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_MouseJoint.cpp; sourceTree = "<group>"; };
-		4DAB28A9235E2CBE75F56848 /* CircleShape.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CircleShape.cpp; sourceTree = "<group>"; };
-		4DC3617831763D2760335D87 /* wrap_SoundData.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_SoundData.cpp; sourceTree = "<group>"; };
-		4E0F565B03D05C3722496F27 /* File.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = File.cpp; sourceTree = "<group>"; };
-		4E15567759041CC379292BE6 /* Decoder.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Decoder.cpp; sourceTree = "<group>"; };
-		4E3251027026699A1D4D310D /* wrap_Canvas.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Canvas.cpp; sourceTree = "<group>"; };
-		4E6705C154C34FBD143F465E /* b2ChainShape.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2ChainShape.cpp; sourceTree = "<group>"; };
-		4E972C114A6C25A63B5B6EF2 /* wrap_Mouse.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Mouse.h; sourceTree = "<group>"; };
-		4F1862D324C9429157A27A2E /* Event.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Event.h; sourceTree = "<group>"; };
-		4F34010A575C02E66D400CE2 /* RopeJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RopeJoint.h; sourceTree = "<group>"; };
-		4F3E12BD4A646D0366792FC9 /* b2WorldCallbacks.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2WorldCallbacks.h; sourceTree = "<group>"; };
-		503971A86B7167A91B670FBA /* boot.lua.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = boot.lua.h; sourceTree = "<group>"; };
-		505F23A73BFE250833D650E4 /* Image.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Image.cpp; sourceTree = "<group>"; };
-		50B67F2D0CC511706810302E /* wrap_GearJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_GearJoint.cpp; sourceTree = "<group>"; };
-		50EC67CE3ED71F5D13304FD4 /* b2Contact.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2Contact.h; sourceTree = "<group>"; };
-		50F0575E16561864699E41F5 /* b2Fixture.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2Fixture.h; sourceTree = "<group>"; };
-		5100177E5D8A14366C5B0BC5 /* b2Island.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2Island.h; sourceTree = "<group>"; };
-		524741891BB93848039F4174 /* Keyboard.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Keyboard.cpp; sourceTree = "<group>"; };
-		525A4D633D9B0D8B225936D4 /* b2Timer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2Timer.h; sourceTree = "<group>"; };
-		52D130DF3DC82D9D4C867B61 /* math.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = math.h; sourceTree = "<group>"; };
-		52E15B702C40593D3BF431DF /* wrap_File.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_File.h; sourceTree = "<group>"; };
-		53C4064801456193163E4631 /* RopeJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RopeJoint.cpp; sourceTree = "<group>"; };
-		53C6151E07FB1E3471590CB9 /* ltn12.lua.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ltn12.lua.h; sourceTree = "<group>"; };
-		53EE57FF4DBD52BB22701160 /* ParticleSystem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ParticleSystem.h; sourceTree = "<group>"; };
-		54A13C2209F945671BC27974 /* FileData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FileData.h; sourceTree = "<group>"; };
-		54E653E84E8873D467C750FC /* mime.lua.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mime.lua.h; sourceTree = "<group>"; };
-		54E85987318206E93DC8189F /* PolygonShape.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = PolygonShape.cpp; sourceTree = "<group>"; };
-		55A759CE711E157339930E58 /* b2BlockAllocator.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2BlockAllocator.cpp; sourceTree = "<group>"; };
-		55AE226405CC1A55462E1D89 /* threads.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = threads.h; sourceTree = "<group>"; };
-		55B425307C0C1C4B3EFC3A5F /* JoystickModule.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JoystickModule.cpp; sourceTree = "<group>"; };
-		561D4A4722E36BAA16D17CC8 /* EdgeShape.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EdgeShape.h; sourceTree = "<group>"; };
-		567C0A0C58931DE54733011B /* b2StackAllocator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2StackAllocator.h; sourceTree = "<group>"; };
-		56D6030A0B8F7397715062B9 /* Image.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Image.cpp; sourceTree = "<group>"; };
-		5725505310E75ECC5044583A /* GLee.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = GLee.c; sourceTree = "<group>"; };
-		577B66502A5360AE60733B10 /* VertexBuffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VertexBuffer.h; sourceTree = "<group>"; };
-		57E6429235C547BE26B73C6C /* version.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = "<group>"; };
-		583037E9238A6EF00DD20B1A /* Font.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Font.cpp; sourceTree = "<group>"; };
-		584E16AE09E12536206C46FE /* Mouse.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Mouse.cpp; sourceTree = "<group>"; };
-		58792BC1126C2917432D706B /* b2CircleContact.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2CircleContact.cpp; sourceTree = "<group>"; };
-		58CC50E70A375FDF53EF01B6 /* Texture.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Texture.cpp; sourceTree = "<group>"; };
-		58CD093F254501E37CA47CA8 /* types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = "<group>"; };
-		597478A255B82B56488B4717 /* wrap_FileData.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_FileData.cpp; sourceTree = "<group>"; };
-		59BE634A2ACE722F14B86F89 /* b2Island.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2Island.cpp; sourceTree = "<group>"; };
-		59D27EA33E8E62E15C185948 /* b2DynamicTree.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2DynamicTree.cpp; sourceTree = "<group>"; };
-		5A1C77401B1B32CE326332A1 /* b2ContactSolver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2ContactSolver.h; sourceTree = "<group>"; };
-		5B3306B5587A708557EE4D4F /* Source.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Source.h; sourceTree = "<group>"; };
-		5B5A0BEC36BE007E6E491396 /* wrap_SoundData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_SoundData.h; sourceTree = "<group>"; };
-		5BCC49F529F726385CD41FA6 /* b2WeldJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2WeldJoint.cpp; sourceTree = "<group>"; };
-		5CB720BA493D7D995E0E20DD /* PulleyJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = PulleyJoint.cpp; sourceTree = "<group>"; };
-		5CE0167703887B376F2368FD /* RevoluteJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RevoluteJoint.h; sourceTree = "<group>"; };
-		5CE370672B1234B10F9532FA /* Physics.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Physics.h; sourceTree = "<group>"; };
-		5CF629B94C7802D446D61C45 /* wrap_Decoder.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Decoder.cpp; sourceTree = "<group>"; };
-		5D016F4C27EF506C13FE3058 /* ImageRasterizer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ImageRasterizer.cpp; sourceTree = "<group>"; };
-		5D383DA1468545C30E7B5805 /* b64.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b64.cpp; sourceTree = "<group>"; };
-		5D590ACE5E237B7D5B556AD0 /* Contact.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Contact.h; sourceTree = "<group>"; };
-		5D93601669875EE06721689E /* Drawable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Drawable.h; sourceTree = "<group>"; };
-		5DA322AC59AD7E43183577CB /* b2EdgeAndPolygonContact.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2EdgeAndPolygonContact.h; sourceTree = "<group>"; };
-		5DC271240F0119AE16FA1B8E /* wrap_Filesystem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Filesystem.h; sourceTree = "<group>"; };
-		5ED732200E1B2E5F79831DDA /* wrap_Data.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Data.cpp; sourceTree = "<group>"; };
-		5F1F169C7FC633EF292E26DF /* wrap_Fixture.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Fixture.h; sourceTree = "<group>"; };
-		5F42052D7C8271A1105541DE /* wrap_ParticleSystem.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_ParticleSystem.cpp; sourceTree = "<group>"; };
-		5F846B49240D52C10F6F76E5 /* options.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = options.c; sourceTree = "<group>"; };
-		5FAE2A9679C97F2C2792182D /* luasocket.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = luasocket.c; sourceTree = "<group>"; };
-		5FF97D522B8872947DED611C /* wrap_Audio.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Audio.h; sourceTree = "<group>"; };
-		601E6A56345412E87E1D396B /* Pool.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Pool.cpp; sourceTree = "<group>"; };
-		60840050412A459D5D21518F /* Fixture.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Fixture.h; sourceTree = "<group>"; };
-		60C95C7F507A381D0A483B3F /* b2ChainAndPolygonContact.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2ChainAndPolygonContact.cpp; sourceTree = "<group>"; };
-		610B475400DE0F7213352BC3 /* inet.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = inet.c; sourceTree = "<group>"; };
-		615E0F450F2B7BA25EE679A6 /* Font.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Font.h; sourceTree = "<group>"; };
-		61E64F07028039774F502D69 /* Shape.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Shape.cpp; sourceTree = "<group>"; };
-		62370A494F9D6E2D570065EB /* FileData.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FileData.cpp; sourceTree = "<group>"; };
-		62E121F35BEB622029324F25 /* Pool.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Pool.h; sourceTree = "<group>"; };
-		63024AF52EE3658260BE116B /* Module.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Module.h; sourceTree = "<group>"; };
-		633E37194CB535AE41A00092 /* b2EdgeShape.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2EdgeShape.cpp; sourceTree = "<group>"; };
-		63936FF81D4E14F6534A43BB /* usocket.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = usocket.h; sourceTree = "<group>"; };
-		63A63DFB339266AC401B545A /* Mouse.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Mouse.h; sourceTree = "<group>"; };
-		64491E98483728D601110EF0 /* b2PrismaticJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2PrismaticJoint.h; sourceTree = "<group>"; };
-		644D0C953C3439FC57C03FC6 /* World.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = World.cpp; sourceTree = "<group>"; };
-		64694F91593478085859666F /* wrap_Body.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Body.cpp; sourceTree = "<group>"; };
-		64AC15B600F2473651823D40 /* GmeDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GmeDecoder.h; sourceTree = "<group>"; };
-		64BA1CE328FF17144B475111 /* wrap_MouseJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_MouseJoint.h; sourceTree = "<group>"; };
-		6590063A6E4B3AEF4550443C /* b2GearJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2GearJoint.h; sourceTree = "<group>"; };
-		66EC3C0463A703A97445193B /* b2PulleyJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2PulleyJoint.cpp; sourceTree = "<group>"; };
-		66F8479E6D2D587A592F2024 /* socket.lua.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = socket.lua.h; sourceTree = "<group>"; };
-		678E42771C9B415628A3234D /* wrap_ParticleSystem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_ParticleSystem.h; sourceTree = "<group>"; };
-		68616BD516DB124312B47EB3 /* Image.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Image.h; sourceTree = "<group>"; };
-		691C5C5828550E2F60754EF2 /* wrap_Event.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Event.cpp; sourceTree = "<group>"; };
-		695E4ED13AA0689E64280573 /* wrap_Timer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Timer.cpp; sourceTree = "<group>"; };
-		69967D2323404E1F0ED21F11 /* wrap_DistanceJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_DistanceJoint.cpp; sourceTree = "<group>"; };
-		69A01D71103275D451F965B2 /* b2GearJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2GearJoint.cpp; sourceTree = "<group>"; };
-		69DB4423147C7E3362941E75 /* Joint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Joint.cpp; sourceTree = "<group>"; };
-		6AA03CE31B942DC660045FE9 /* WheelJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WheelJoint.h; sourceTree = "<group>"; };
-		6B255FFC4A2C404E50512CB5 /* Mpg123Decoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Mpg123Decoder.h; sourceTree = "<group>"; };
-		6B2E52E6185E6980660F1374 /* luasocket.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = luasocket.h; sourceTree = "<group>"; };
-		6B3565203A1778431F8A5409 /* threads.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = threads.cpp; sourceTree = "<group>"; };
-		6BEE6511475F641A70A0591E /* Timer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Timer.h; sourceTree = "<group>"; };
-		6C367AE309C453C412D91363 /* wrap_File.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_File.cpp; sourceTree = "<group>"; };
-		6C7E6C3F1CCA1CF6164123F6 /* b2ChainShape.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2ChainShape.h; sourceTree = "<group>"; };
-		6C981DA13E3D42DA06891046 /* Keyboard.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Keyboard.h; sourceTree = "<group>"; };
-		6CB1193233FA78EE646A17A1 /* Audio.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Audio.cpp; sourceTree = "<group>"; };
-		6CDD4F3320303D222C180CD0 /* Window.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Window.cpp; sourceTree = "<group>"; };
-		6CEB48E969FC42C53F9432B1 /* wrap_Physics.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Physics.cpp; sourceTree = "<group>"; };
-		6D822D830EF049417D184372 /* b2TimeStep.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2TimeStep.h; sourceTree = "<group>"; };
-		6DE3129F3A0B2D9C178118F3 /* Filesystem.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Filesystem.cpp; sourceTree = "<group>"; };
-		6E682862758051BF7C0A10AA /* tp.lua.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tp.lua.h; sourceTree = "<group>"; };
-		6E6D5AB27B71488D405526C3 /* Body.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Body.h; sourceTree = "<group>"; };
-		6EF321185C2B1F1E1AF54F64 /* wrap_CircleShape.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_CircleShape.cpp; sourceTree = "<group>"; };
-		6F1B61350B6B36AF216C57D7 /* b2Joint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2Joint.cpp; sourceTree = "<group>"; };
-		6F4D478A52A0408765095920 /* GearJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GearJoint.cpp; sourceTree = "<group>"; };
-		6FF15DF4423F6426224024C9 /* b2Settings.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2Settings.cpp; sourceTree = "<group>"; };
-		70564CC32DEC209F2A615F44 /* wrap_ChainShape.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_ChainShape.h; sourceTree = "<group>"; };
-		70F425B5336E1CD652827FD0 /* Shape.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Shape.cpp; sourceTree = "<group>"; };
-		714251EE742346DC17103357 /* Font.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Font.cpp; sourceTree = "<group>"; };
-		71810207414B52F8340D7797 /* wrap_Joint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Joint.cpp; sourceTree = "<group>"; };
-		71C579A557640A3E2A696518 /* wrap_Physics.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Physics.h; sourceTree = "<group>"; };
-		71F878E2440A021B68D93ABC /* b2Contact.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2Contact.cpp; sourceTree = "<group>"; };
-		727648E06CD863A2582F798F /* VorbisDecoder.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = VorbisDecoder.cpp; sourceTree = "<group>"; };
-		727D23FA1CC755B902471A45 /* SpriteBatch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SpriteBatch.h; sourceTree = "<group>"; };
-		733758E8028B20BB799A7BE6 /* Decoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Decoder.h; sourceTree = "<group>"; };
-		73473B3C698B538002540A5D /* wrap_WheelJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_WheelJoint.cpp; sourceTree = "<group>"; };
-		734947AA28AF36E436D242FD /* unix.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = unix.c; sourceTree = "<group>"; };
-		74003CB27FA762A021183AD5 /* GlyphData.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GlyphData.cpp; sourceTree = "<group>"; };
-		74215662418726B35C581E55 /* Thread.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Thread.h; sourceTree = "<group>"; };
-		7423362764CF57574BB16CDA /* Window.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Window.h; sourceTree = "<group>"; };
-		74EE403977734BA53DDF16F0 /* core.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = core.h; sourceTree = "<group>"; };
-		753F0B42534106D6545926C8 /* Memoizer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Memoizer.h; sourceTree = "<group>"; };
-		755C2B980C106EA7423E7E5E /* EdgeShape.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = EdgeShape.cpp; sourceTree = "<group>"; };
-		75C0197971FE16926CDA624A /* wrap_RopeJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_RopeJoint.h; sourceTree = "<group>"; };
-		762E57DE65A626FA1F6D4305 /* wrap_PulleyJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_PulleyJoint.h; sourceTree = "<group>"; };
-		77234CEE2EFE633537975850 /* Sound.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Sound.h; sourceTree = "<group>"; };
-		774434E1581A23EC1B0F1E6F /* b2RevoluteJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2RevoluteJoint.h; sourceTree = "<group>"; };
-		777352284E262F48543E6E7F /* Graphics.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Graphics.h; sourceTree = "<group>"; };
-		78073FEB0F54031B1A3A56FD /* wrap_PolygonShape.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_PolygonShape.h; sourceTree = "<group>"; };
-		780D5B6358096BEB1F1336EE /* b2StackAllocator.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2StackAllocator.cpp; sourceTree = "<group>"; };
-		78115E763B723C0C40AD47CF /* ImageData.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ImageData.cpp; sourceTree = "<group>"; };
-		782A153A1E6314CB583250E0 /* wrap_Decoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Decoder.h; sourceTree = "<group>"; };
-		785D31764A1D6CDE21BC6404 /* SoundData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SoundData.h; sourceTree = "<group>"; };
-		78A2127828793F7A778D7932 /* wrap_Image.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Image.h; sourceTree = "<group>"; };
-		78C0420E2548523B241E3D61 /* b2FrictionJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2FrictionJoint.h; sourceTree = "<group>"; };
-		78E50525407567F863476E27 /* WeldJoint.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WeldJoint.cpp; sourceTree = "<group>"; };
-		79A9038A15A324B450010E8B /* unix.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = unix.h; sourceTree = "<group>"; };
-		7A0A2BB707F44CAD12694679 /* buffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = buffer.h; sourceTree = "<group>"; };
-		7A3B52AF1FBE73FC36AD50C8 /* wrap_Font.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Font.cpp; sourceTree = "<group>"; };
-		7A5C32955F016AB85EB55519 /* Exception.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Exception.h; sourceTree = "<group>"; };
-		7A707F7A60B47A091107144B /* World.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = World.h; sourceTree = "<group>"; };
-		7A840CB020803B7C6C097CD1 /* b2PulleyJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2PulleyJoint.h; sourceTree = "<group>"; };
-		7B7A47F267D77A570D995658 /* Box2D.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Box2D.h; sourceTree = "<group>"; };
-		7BAB25936D207169591A666A /* wrap_GearJoint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_GearJoint.h; sourceTree = "<group>"; };
-		7CA02BF51EBA65C263E15250 /* unchecked.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = unchecked.h; sourceTree = "<group>"; };
-		7CC5707C79175FA6427B3D62 /* Audio.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Audio.cpp; sourceTree = "<group>"; };
-		7D48236B78EA06D346A86E3F /* smtp.lua.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = smtp.lua.h; sourceTree = "<group>"; };
-		7D9B03C2438B748D0DE93DD5 /* utf8.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = utf8.cpp; sourceTree = "<group>"; };
-		7E4B280637927B532B456D5E /* Event.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Event.h; sourceTree = "<group>"; };
-		7E7A068041FD553876712F05 /* b2CollideCircle.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = b2CollideCircle.cpp; sourceTree = "<group>"; };
-		7EC570BC74C369747ED0183A /* Window.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Window.h; sourceTree = "<group>"; };
-		7EFA04373ADC5CC24DCB5824 /* Font.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Font.h; sourceTree = "<group>"; };
-		7F4B2A3860273D89294A44F4 /* b2ContactManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2ContactManager.h; sourceTree = "<group>"; };
-		7F575BE9573C654B5ED44CC1 /* wrap_Timer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wrap_Timer.h; sourceTree = "<group>"; };
-		7F796B7A3362196075C62E61 /* wrap_Fixture.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Fixture.cpp; sourceTree = "<group>"; };
-		7F911CF2107B22F44C5B2542 /* b2Collision.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = b2Collision.h; sourceTree = "<group>"; };
-		FA01BE1C1878E35B00640047 /* wrap_Texture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Texture.cpp; sourceTree = "<group>"; };
-		FA01BE1D1878E35B00640047 /* wrap_Texture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Texture.h; sourceTree = "<group>"; };
-		FA03546A1731F3A700284828 /* simplexnoise1234.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simplexnoise1234.cpp; sourceTree = "<group>"; };
-		FA03546B1731F3A700284828 /* simplexnoise1234.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simplexnoise1234.h; sourceTree = "<group>"; };
-		FA08F5AE16C7525600F007B5 /* Info-Framework.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Info-Framework.plist"; sourceTree = "<group>"; };
-		FA0A4BEE182E0C2800E1E4D2 /* b2MotorJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2MotorJoint.cpp; sourceTree = "<group>"; };
-		FA0A4BEF182E0C2800E1E4D2 /* b2MotorJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2MotorJoint.h; sourceTree = "<group>"; };
-		FA0A4BF2182E1AD600E1E4D2 /* MotorJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MotorJoint.cpp; sourceTree = "<group>"; };
-		FA0A4BF3182E1AD600E1E4D2 /* MotorJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MotorJoint.h; sourceTree = "<group>"; };
-		FA0A4BF6182E260200E1E4D2 /* wrap_MotorJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_MotorJoint.cpp; sourceTree = "<group>"; };
-		FA0A4BF7182E260200E1E4D2 /* wrap_MotorJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_MotorJoint.h; sourceTree = "<group>"; };
-		FA0CDE3B1710F9A50056E8D7 /* FormatHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FormatHandler.h; sourceTree = "<group>"; };
-		FA34E7CB174B513F00E04D3F /* System.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = System.cpp; sourceTree = "<group>"; };
-		FA34E7CC174B513F00E04D3F /* System.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = System.h; sourceTree = "<group>"; };
-		FA34E7D0174B515D00E04D3F /* System.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = System.cpp; sourceTree = "<group>"; };
-		FA34E7D1174B515D00E04D3F /* System.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = System.h; sourceTree = "<group>"; };
-		FA34E7D4174B55AF00E04D3F /* wrap_System.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_System.cpp; sourceTree = "<group>"; };
-		FA34E7D5174B55AF00E04D3F /* wrap_System.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_System.h; sourceTree = "<group>"; };
-		FA3D9E0B16E68DE600CA6630 /* Cursor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Cursor.cpp; sourceTree = "<group>"; };
-		FA3D9E0C16E68DE600CA6630 /* Cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Cursor.h; sourceTree = "<group>"; };
-		FA3D9E0F16E68EAE00CA6630 /* Cursor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Cursor.cpp; sourceTree = "<group>"; };
-		FA3D9E1016E68EAE00CA6630 /* Cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Cursor.h; sourceTree = "<group>"; };
-		FA3D9E1316E6D41000CA6630 /* wrap_Cursor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Cursor.cpp; sourceTree = "<group>"; };
-		FA3D9E1416E6D41000CA6630 /* wrap_Cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Cursor.h; sourceTree = "<group>"; };
-		FA435EA117B36E9C004C3F22 /* Polyline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Polyline.cpp; sourceTree = "<group>"; };
-		FA435EA217B36E9C004C3F22 /* Polyline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Polyline.h; sourceTree = "<group>"; };
-		FA5454C016F1310000D30303 /* MathModule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MathModule.cpp; sourceTree = "<group>"; };
-		FA5454C116F1310000D30303 /* MathModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MathModule.h; sourceTree = "<group>"; };
-		FA577A6716C719D900860150 /* FreeType.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FreeType.framework; path = /Library/Frameworks/FreeType.framework; sourceTree = "<absolute>"; };
-		FA577A6916C719DE00860150 /* IL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IL.framework; path = /Library/Frameworks/IL.framework; sourceTree = "<absolute>"; };
-		FA577A6D16C719EA00860150 /* Lua.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Lua.framework; path = /Library/Frameworks/Lua.framework; sourceTree = "<absolute>"; };
-		FA577A6F16C719F000860150 /* mpg123.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = mpg123.framework; path = /Library/Frameworks/mpg123.framework; sourceTree = "<absolute>"; };
-		FA577A7116C719F400860150 /* Ogg.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Ogg.framework; path = /Library/Frameworks/Ogg.framework; sourceTree = "<absolute>"; };
-		FA577A7316C719F900860150 /* physfs.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = physfs.framework; path = /Library/Frameworks/physfs.framework; sourceTree = "<absolute>"; };
-		FA577A7716C71A0800860150 /* Vorbis.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Vorbis.framework; path = /Library/Frameworks/Vorbis.framework; sourceTree = "<absolute>"; };
-		FA577A7916C71A1700860150 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
-		FA577A7C16C71A2600860150 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
-		FA577A8216C71A5300860150 /* libmodplug.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = libmodplug.framework; path = /Library/Frameworks/libmodplug.framework; sourceTree = "<absolute>"; };
-		FA577A8516C71CF000860150 /* Shader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Shader.cpp; sourceTree = "<group>"; };
-		FA577A8616C71CF000860150 /* Shader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Shader.h; sourceTree = "<group>"; };
-		FA577A8716C71CF000860150 /* wrap_Shader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Shader.cpp; sourceTree = "<group>"; };
-		FA577A8816C71CF000860150 /* wrap_Shader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Shader.h; sourceTree = "<group>"; };
-		FA577A8C16C71D3600860150 /* auto.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = auto.lua; sourceTree = "<group>"; };
-		FA577A8D16C71D3600860150 /* boot.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = boot.lua; sourceTree = "<group>"; };
-		FA577A8E16C71D3600860150 /* graphics.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = graphics.lua; sourceTree = "<group>"; };
-		FA577AAF16C7507900860150 /* love.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = love.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		FA5FDC5F1788D548002F0ED2 /* enet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = enet.cpp; sourceTree = "<group>"; };
-		FA5FDC611788D548002F0ED2 /* callbacks.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = callbacks.c; sourceTree = "<group>"; };
-		FA5FDC631788D548002F0ED2 /* compress.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = compress.c; sourceTree = "<group>"; };
-		FA5FDC641788D548002F0ED2 /* host.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = host.c; sourceTree = "<group>"; };
-		FA5FDC671788D548002F0ED2 /* callbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = callbacks.h; sourceTree = "<group>"; };
-		FA5FDC681788D548002F0ED2 /* enet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = enet.h; sourceTree = "<group>"; };
-		FA5FDC691788D548002F0ED2 /* list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = list.h; sourceTree = "<group>"; };
-		FA5FDC6A1788D548002F0ED2 /* protocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = protocol.h; sourceTree = "<group>"; };
-		FA5FDC6B1788D548002F0ED2 /* time.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = time.h; sourceTree = "<group>"; };
-		FA5FDC6C1788D548002F0ED2 /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = "<group>"; };
-		FA5FDC6D1788D548002F0ED2 /* unix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unix.h; sourceTree = "<group>"; };
-		FA5FDC6E1788D548002F0ED2 /* utility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utility.h; sourceTree = "<group>"; };
-		FA5FDC6F1788D548002F0ED2 /* win32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = win32.h; sourceTree = "<group>"; };
-		FA5FDC711788D548002F0ED2 /* list.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = list.c; sourceTree = "<group>"; };
-		FA5FDC721788D548002F0ED2 /* packet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = packet.c; sourceTree = "<group>"; };
-		FA5FDC731788D548002F0ED2 /* peer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = peer.c; sourceTree = "<group>"; };
-		FA5FDC741788D548002F0ED2 /* protocol.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = protocol.c; sourceTree = "<group>"; };
-		FA5FDC761788D548002F0ED2 /* unix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = unix.c; sourceTree = "<group>"; };
-		FA5FDC771788D548002F0ED2 /* win32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = win32.c; sourceTree = "<group>"; };
-		FA5FDC781788D548002F0ED2 /* lua-enet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "lua-enet.h"; sourceTree = "<group>"; };
-		FA636D88171B70920065623F /* RandomGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RandomGenerator.cpp; sourceTree = "<group>"; };
-		FA636D89171B70920065623F /* RandomGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RandomGenerator.h; sourceTree = "<group>"; };
-		FA636D8C171B72A70065623F /* wrap_RandomGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_RandomGenerator.cpp; sourceTree = "<group>"; };
-		FA636D8D171B72A70065623F /* wrap_RandomGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_RandomGenerator.h; sourceTree = "<group>"; };
-		FA7175A9178E8418001FE7FE /* lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua.h; sourceTree = "<group>"; };
-		FA7AA59017F6AC1F00704BE2 /* wrap_Mesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Mesh.cpp; sourceTree = "<group>"; };
-		FA7AA59117F6AC1F00704BE2 /* wrap_Mesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Mesh.h; sourceTree = "<group>"; };
-		FA7C937516DCC6C2006F2BEE /* wrap_Math.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Math.cpp; sourceTree = "<group>"; };
-		FA7C937616DCC6C2006F2BEE /* wrap_Math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Math.h; sourceTree = "<group>"; };
-		FA9B49281875EFB900201DA9 /* Texture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Texture.h; sourceTree = "<group>"; };
-		FA9B4A0716E1578300074F42 /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = /Library/Frameworks/SDL2.framework; sourceTree = "<absolute>"; };
-		FA9FC0AE173D6E3E005027FF /* wrap_Window.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Window.cpp; sourceTree = "<group>"; };
-		FA9FC0AF173D6E3E005027FF /* wrap_Window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Window.h; sourceTree = "<group>"; };
-		FAA0A45C1A704016009487CB /* lprefix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lprefix.h; sourceTree = "<group>"; };
-		FAA0A45D1A704016009487CB /* lutf8lib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lutf8lib.c; sourceTree = "<group>"; };
-		FAA0A4601A70431A009487CB /* lutf8lib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lutf8lib.h; sourceTree = "<group>"; };
-		FAA627CD18E7E1560080752D /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; };
-		FAAC6B00170A373A008A61C5 /* CompressedData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CompressedData.cpp; sourceTree = "<group>"; };
-		FAAC6B01170A373A008A61C5 /* CompressedData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CompressedData.h; sourceTree = "<group>"; };
-		FAAFF04316CB11C700CCDE45 /* OpenAL-Soft.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = "OpenAL-Soft.framework"; path = "/Library/Frameworks/OpenAL-Soft.framework"; sourceTree = "<absolute>"; };
-		FAB0078D1740C12D00A9664D /* Joystick.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Joystick.cpp; sourceTree = "<group>"; };
-		FAB0078E1740C12D00A9664D /* Joystick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Joystick.h; sourceTree = "<group>"; };
-		FAB007911740C28900A9664D /* Joystick.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Joystick.cpp; sourceTree = "<group>"; };
-		FAB007921740C28900A9664D /* Joystick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Joystick.h; sourceTree = "<group>"; };
-		FAB007951740C87D00A9664D /* wrap_Joystick.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Joystick.cpp; sourceTree = "<group>"; };
-		FAB007961740C87D00A9664D /* wrap_Joystick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Joystick.h; sourceTree = "<group>"; };
-		FAC570FC17402D1100D147E4 /* BezierCurve.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BezierCurve.cpp; sourceTree = "<group>"; };
-		FAC570FD17402D1100D147E4 /* BezierCurve.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BezierCurve.h; sourceTree = "<group>"; };
-		FAC570FE17402D1100D147E4 /* wrap_BezierCurve.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_BezierCurve.cpp; sourceTree = "<group>"; };
-		FAC570FF17402D1100D147E4 /* wrap_BezierCurve.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_BezierCurve.h; sourceTree = "<group>"; };
-		FAC86E611724552C00EED715 /* wrap_Quad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Quad.cpp; sourceTree = "<group>"; };
-		FAC86E621724552C00EED715 /* wrap_Quad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Quad.h; sourceTree = "<group>"; };
-		FAC86E671724555D00EED715 /* Quad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Quad.cpp; sourceTree = "<group>"; };
-		FAC86E681724555D00EED715 /* Quad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Quad.h; sourceTree = "<group>"; };
-		FAD8E84E1A7C949B0084E24D /* Vera.ttf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Vera.ttf.h; sourceTree = "<group>"; };
-		FADD58DC18C30367005FC3BF /* FormatHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FormatHandler.cpp; sourceTree = "<group>"; };
-		FAE010D8170DDE99006F29D0 /* ddsinfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ddsinfo.h; sourceTree = "<group>"; };
-		FAE010D9170DDE99006F29D0 /* ddsparse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ddsparse.cpp; sourceTree = "<group>"; };
-		FAE010DA170DDE99006F29D0 /* ddsparse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ddsparse.h; sourceTree = "<group>"; };
-		FAE010DE170DE25E006F29D0 /* ddsHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ddsHandler.cpp; sourceTree = "<group>"; };
-		FAE010DF170DE25E006F29D0 /* ddsHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ddsHandler.h; sourceTree = "<group>"; };
-		FAE010E2170DF75B006F29D0 /* wrap_CompressedData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_CompressedData.cpp; sourceTree = "<group>"; };
-		FAE010E3170DF75C006F29D0 /* wrap_CompressedData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_CompressedData.h; sourceTree = "<group>"; };
-		FAEC80881710FEA60057279A /* ImageData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageData.cpp; sourceTree = "<group>"; };
-		FAEC80891710FEA60057279A /* ImageData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageData.h; sourceTree = "<group>"; };
-		FAEC808C1711E76C0057279A /* CompressedData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CompressedData.cpp; sourceTree = "<group>"; };
-		FAEC808D1711E76C0057279A /* CompressedData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CompressedData.h; sourceTree = "<group>"; };
-		FAF2729816E3D44400CC193A /* Channel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Channel.cpp; sourceTree = "<group>"; };
-		FAF2729916E3D44400CC193A /* Channel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Channel.h; sourceTree = "<group>"; };
-		FAF2729A16E3D44400CC193A /* LuaThread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LuaThread.cpp; sourceTree = "<group>"; };
-		FAF2729B16E3D44400CC193A /* LuaThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LuaThread.h; sourceTree = "<group>"; };
-		FAF2729C16E3D44400CC193A /* ThreadModule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ThreadModule.cpp; sourceTree = "<group>"; };
-		FAF2729D16E3D44400CC193A /* ThreadModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThreadModule.h; sourceTree = "<group>"; };
-		FAF2729E16E3D44400CC193A /* wrap_Channel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Channel.cpp; sourceTree = "<group>"; };
-		FAF2729F16E3D44400CC193A /* wrap_Channel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Channel.h; sourceTree = "<group>"; };
-		FAF272A016E3D44400CC193A /* wrap_LuaThread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_LuaThread.cpp; sourceTree = "<group>"; };
-		FAF272A116E3D44400CC193A /* wrap_LuaThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_LuaThread.h; sourceTree = "<group>"; };
-		FAF272A216E3D44400CC193A /* wrap_ThreadModule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_ThreadModule.cpp; sourceTree = "<group>"; };
-		FAF272A316E3D44400CC193A /* wrap_ThreadModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_ThreadModule.h; sourceTree = "<group>"; };
-		FAF272B116E3D46400CC193A /* Thread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Thread.cpp; sourceTree = "<group>"; };
-		FAF272B216E3D46400CC193A /* Thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Thread.h; sourceTree = "<group>"; };
-		FAF272B316E3D46400CC193A /* threads.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = threads.cpp; sourceTree = "<group>"; };
-		FAF272B416E3D46400CC193A /* threads.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = threads.h; sourceTree = "<group>"; };
-		FAF4376D17F4AC530074F9E2 /* Mesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mesh.cpp; sourceTree = "<group>"; };
-		FAF4376E17F4AC530074F9E2 /* Mesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mesh.h; sourceTree = "<group>"; };
-		FAF6704418184FF800DBDEEA /* wuff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wuff.c; sourceTree = "<group>"; };
-		FAF6704518184FF800DBDEEA /* wuff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wuff.h; sourceTree = "<group>"; };
-		FAF6704618184FF800DBDEEA /* wuff_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wuff_config.h; sourceTree = "<group>"; };
-		FAF6704718184FF800DBDEEA /* wuff_convert.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wuff_convert.c; sourceTree = "<group>"; };
-		FAF6704818184FF800DBDEEA /* wuff_convert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wuff_convert.h; sourceTree = "<group>"; };
-		FAF6704918184FF800DBDEEA /* wuff_internal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wuff_internal.c; sourceTree = "<group>"; };
-		FAF6704A18184FF800DBDEEA /* wuff_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wuff_internal.h; sourceTree = "<group>"; };
-		FAF6704B18184FF800DBDEEA /* wuff_memory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wuff_memory.c; sourceTree = "<group>"; };
-		FAF670541818501300DBDEEA /* WaveDecoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WaveDecoder.cpp; sourceTree = "<group>"; };
-		FAF670551818501300DBDEEA /* WaveDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WaveDecoder.h; sourceTree = "<group>"; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		FA577AAB16C7507900860150 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				FAA627CE18E7E1560080752D /* CoreServices.framework in Frameworks */,
-				FA9B4A0816E1578300074F42 /* SDL2.framework in Frameworks */,
-				FAAFF04416CB11C700CCDE45 /* OpenAL-Soft.framework in Frameworks */,
-				FA577AB016C7507900860150 /* Cocoa.framework in Frameworks */,
-				FA577AC216C7512D00860150 /* FreeType.framework in Frameworks */,
-				FA577AC416C7513200860150 /* IL.framework in Frameworks */,
-				FA577AC516C7513400860150 /* libmodplug.framework in Frameworks */,
-				FA577AC716C7513A00860150 /* mpg123.framework in Frameworks */,
-				FA577AC816C7513C00860150 /* Ogg.framework in Frameworks */,
-				FA577ACA16C7514100860150 /* OpenGL.framework in Frameworks */,
-				FA577ACB16C7514400860150 /* physfs.framework in Frameworks */,
-				FA577ACD16C7514C00860150 /* Vorbis.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		003F4BA82B6046BC133B3F0F /* image */ = {
-			isa = PBXGroup;
-			children = (
-				FAAC6B00170A373A008A61C5 /* CompressedData.cpp */,
-				FAAC6B01170A373A008A61C5 /* CompressedData.h */,
-				25C325DC2128769F6C6A54C3 /* Image.h */,
-				78115E763B723C0C40AD47CF /* ImageData.cpp */,
-				07B301984BE42246402F7D27 /* ImageData.h */,
-				13730AB030E309FF6E2961F1 /* magpie */,
-				FAE010E2170DF75B006F29D0 /* wrap_CompressedData.cpp */,
-				FAE010E3170DF75C006F29D0 /* wrap_CompressedData.h */,
-				0B0728FA73B107B37A956A09 /* wrap_Image.cpp */,
-				006B015320155B4D42B43B61 /* wrap_Image.h */,
-				076840774B0B6E721D0C18D0 /* wrap_ImageData.cpp */,
-				31B85B507F466FE158A3718E /* wrap_ImageData.h */,
-			);
-			path = image;
-			sourceTree = "<group>";
-		};
-		02E0744773D13AD65E7C49DC /* thread */ = {
-			isa = PBXGroup;
-			children = (
-				FAF2729816E3D44400CC193A /* Channel.cpp */,
-				FAF2729916E3D44400CC193A /* Channel.h */,
-				FAF2729A16E3D44400CC193A /* LuaThread.cpp */,
-				FAF2729B16E3D44400CC193A /* LuaThread.h */,
-				FAF272B016E3D46400CC193A /* sdl */,
-				74215662418726B35C581E55 /* Thread.h */,
-				FAF2729C16E3D44400CC193A /* ThreadModule.cpp */,
-				FAF2729D16E3D44400CC193A /* ThreadModule.h */,
-				6B3565203A1778431F8A5409 /* threads.cpp */,
-				55AE226405CC1A55462E1D89 /* threads.h */,
-				FAF2729E16E3D44400CC193A /* wrap_Channel.cpp */,
-				FAF2729F16E3D44400CC193A /* wrap_Channel.h */,
-				FAF272A016E3D44400CC193A /* wrap_LuaThread.cpp */,
-				FAF272A116E3D44400CC193A /* wrap_LuaThread.h */,
-				FAF272A216E3D44400CC193A /* wrap_ThreadModule.cpp */,
-				FAF272A316E3D44400CC193A /* wrap_ThreadModule.h */,
-			);
-			path = thread;
-			sourceTree = "<group>";
-		};
-		07571BBD29A9184E2F465E28 /* common */ = {
-			isa = PBXGroup;
-			children = (
-				5D383DA1468545C30E7B5805 /* b64.cpp */,
-				0BEB72033ACA25550ADA76C4 /* b64.h */,
-				473D2247745F4901155A75DB /* config.h */,
-				182A781C7A2D3D2B6B8904A8 /* Data.h */,
-				36437CE95936736320710513 /* delay.cpp */,
-				24D758D262EA18DC15187A12 /* delay.h */,
-				386430B43A081E2A617B05F1 /* EnumMap.h */,
-				3746164716797CF80D6B0CEE /* Exception.cpp */,
-				7A5C32955F016AB85EB55519 /* Exception.h */,
-				40BC14C607396F8B1B084012 /* int.h */,
-				52D130DF3DC82D9D4C867B61 /* math.h */,
-				0CB6025618505B055A4E75DD /* Matrix.cpp */,
-				085B376E3FBB254F0FD37958 /* Matrix.h */,
-				40A0593B616A223A4CEF07C9 /* Memoizer.cpp */,
-				753F0B42534106D6545926C8 /* Memoizer.h */,
-				30E466F441EE727658716873 /* Module.cpp */,
-				63024AF52EE3658260BE116B /* Module.h */,
-				411B061C49172C971C622125 /* Object.cpp */,
-				350C47C774835EA552130431 /* Object.h */,
-				35B31EBC4DDB6F994BCA46B6 /* Reference.cpp */,
-				2CEC5ED5211174C7583849AD /* Reference.h */,
-				45E761A0072E0EF92BD66EA9 /* runtime.cpp */,
-				2D8E6FAE2A100B5866E96BFF /* runtime.h */,
-				33FD508B0754314530A35EF3 /* StringMap.h */,
-				58CD093F254501E37CA47CA8 /* types.h */,
-				7D9B03C2438B748D0DE93DD5 /* utf8.cpp */,
-				3A430C846C642DBC14975C7C /* utf8.h */,
-				3C56375F752B7A9779DD37EC /* Variant.cpp */,
-				28016C9B51FE1A893DC35B66 /* Variant.h */,
-				1A2A61843B753E3F5B330703 /* Vector.cpp */,
-				3D8460B2486A372825213933 /* Vector.h */,
-				57E6429235C547BE26B73C6C /* version.h */,
-				5ED732200E1B2E5F79831DDA /* wrap_Data.cpp */,
-				001F02BC119E349012652C17 /* wrap_Data.h */,
-			);
-			name = common;
-			path = ../../src/common;
-			sourceTree = "<group>";
-		};
-		09000F404D44660029EF38F0 /* sdl */ = {
-			isa = PBXGroup;
-			children = (
-				3BA712260D725FEB72EB3CDE /* Event.cpp */,
-				7E4B280637927B532B456D5E /* Event.h */,
-				691C5C5828550E2F60754EF2 /* wrap_Event.cpp */,
-				295C665B1E0B6B2D03CC4937 /* wrap_Event.h */,
-			);
-			path = sdl;
-			sourceTree = "<group>";
-		};
-		12BB56F127170B3709670896 /* freetype */ = {
-			isa = PBXGroup;
-			children = (
-				714251EE742346DC17103357 /* Font.cpp */,
-				615E0F450F2B7BA25EE679A6 /* Font.h */,
-				0C30420F7FD3038C721223A5 /* TrueTypeRasterizer.cpp */,
-				0B727D416262392743091BC3 /* TrueTypeRasterizer.h */,
-				232D67C67BEE54B776420682 /* wrap_Font.cpp */,
-				202650DE4F267CD3082A1B30 /* wrap_Font.h */,
-			);
-			path = freetype;
-			sourceTree = "<group>";
-		};
-		130737AF4BD12D0356A65C87 /* mouse */ = {
-			isa = PBXGroup;
-			children = (
-				FA3D9E0B16E68DE600CA6630 /* Cursor.cpp */,
-				FA3D9E0C16E68DE600CA6630 /* Cursor.h */,
-				31E0110E5797041465FF5F95 /* Mouse.cpp */,
-				63A63DFB339266AC401B545A /* Mouse.h */,
-				1E017A8673D531394B5A3B16 /* sdl */,
-				FA3D9E1316E6D41000CA6630 /* wrap_Cursor.cpp */,
-				FA3D9E1416E6D41000CA6630 /* wrap_Cursor.h */,
-				22EF17981EBD442773FE41B6 /* wrap_Mouse.cpp */,
-				4E972C114A6C25A63B5B6EF2 /* wrap_Mouse.h */,
-			);
-			path = mouse;
-			sourceTree = "<group>";
-		};
-		1350109F709C227D4AFD423C /* libluasocket */ = {
-			isa = PBXGroup;
-			children = (
-				FA7175A9178E8418001FE7FE /* lua.h */,
-				1CD02D1975803957282F28AB /* auxiliar.c */,
-				1F6F652A57F8098E5CCA6F9A /* auxiliar.h */,
-				21B25A7E333315172B754D4F /* buffer.c */,
-				7A0A2BB707F44CAD12694679 /* buffer.h */,
-				49496EAF3305281B19223C22 /* except.c */,
-				17C730CB1DA01B8F0A11217C /* except.h */,
-				048C39D14DA05F5843FE08CA /* ftp.lua.h */,
-				16C36B3C59A10CDC7ACE0DD4 /* http.lua.h */,
-				610B475400DE0F7213352BC3 /* inet.c */,
-				459946CA7F4406B026E80501 /* inet.h */,
-				135801A6483528800C676492 /* io.c */,
-				4ABD4A7B5CB6678E39490982 /* io.h */,
-				53C6151E07FB1E3471590CB9 /* ltn12.lua.h */,
-				5FAE2A9679C97F2C2792182D /* luasocket.c */,
-				329915E84B0B6D025DDC34A9 /* luasocket.h */,
-				00393E4930202C2B6E381F68 /* mime.c */,
-				485645C663D372A96DFD33F7 /* mime.h */,
-				54E653E84E8873D467C750FC /* mime.lua.h */,
-				5F846B49240D52C10F6F76E5 /* options.c */,
-				249015D170563D85709D7B6D /* options.h */,
-				415E1438178736BE0EA908D5 /* select.c */,
-				17E9544103AE376210ED5BAA /* select.h */,
-				7D48236B78EA06D346A86E3F /* smtp.lua.h */,
-				09C71F9D7DC45F5765B2462B /* socket.h */,
-				66F8479E6D2D587A592F2024 /* socket.lua.h */,
-				22256CC12B7C7D0D1B430D46 /* tcp.c */,
-				00D329851B1E7F6A3AF9614E /* tcp.h */,
-				4B41232F7AF7793540F46C58 /* timeout.c */,
-				1CE84F1F19BC2AA412C638B1 /* timeout.h */,
-				6E682862758051BF7C0A10AA /* tp.lua.h */,
-				2E2675AF3DAA24CE0728042C /* udp.c */,
-				2CAE75B079B828FE6892684A /* udp.h */,
-				734947AA28AF36E436D242FD /* unix.c */,
-				79A9038A15A324B450010E8B /* unix.h */,
-				4B002CBD52493ED9347C6EBA /* url.lua.h */,
-				041672ED2CF51FC62F532FDB /* usocket.c */,
-				63936FF81D4E14F6534A43BB /* usocket.h */,
-			);
-			path = libluasocket;
-			sourceTree = "<group>";
-		};
-		13730AB030E309FF6E2961F1 /* magpie */ = {
-			isa = PBXGroup;
-			children = (
-				FAEC808C1711E76C0057279A /* CompressedData.cpp */,
-				FAEC808D1711E76C0057279A /* CompressedData.h */,
-				FAE010DE170DE25E006F29D0 /* ddsHandler.cpp */,
-				FAE010DF170DE25E006F29D0 /* ddsHandler.h */,
-				1AA7781A230065F346E2313A /* DevilHandler.cpp */,
-				283342E174613897621A43F1 /* DevilHandler.h */,
-				FADD58DC18C30367005FC3BF /* FormatHandler.cpp */,
-				FA0CDE3B1710F9A50056E8D7 /* FormatHandler.h */,
-				505F23A73BFE250833D650E4 /* Image.cpp */,
-				68616BD516DB124312B47EB3 /* Image.h */,
-				FAEC80881710FEA60057279A /* ImageData.cpp */,
-				FAEC80891710FEA60057279A /* ImageData.h */,
-			);
-			path = magpie;
-			sourceTree = "<group>";
-		};
-		153D76205F7A4ACD12FB4C0E /* window */ = {
-			isa = PBXGroup;
-			children = (
-				63082CBA23A6046C60DA1C6F /* sdl */,
-				351B09E51FDC338622F44624 /* Window.cpp */,
-				7423362764CF57574BB16CDA /* Window.h */,
-				FA9FC0AE173D6E3E005027FF /* wrap_Window.cpp */,
-				FA9FC0AF173D6E3E005027FF /* wrap_Window.h */,
-			);
-			path = window;
-			sourceTree = "<group>";
-		};
-		18AF317B298302545C386404 /* Dynamics */ = {
-			isa = PBXGroup;
-			children = (
-				7DE032B3334E559969264529 /* Contacts */,
-				68027AB25AAF234679615C14 /* Joints */,
-				120B391518206E964493126C /* b2Body.cpp */,
-				079504CB332E415D4B27797B /* b2Body.h */,
-				2A6150F7479D21346EC54B68 /* b2ContactManager.cpp */,
-				7F4B2A3860273D89294A44F4 /* b2ContactManager.h */,
-				059C04C13F3A7C05570F2987 /* b2Fixture.cpp */,
-				50F0575E16561864699E41F5 /* b2Fixture.h */,
-				59BE634A2ACE722F14B86F89 /* b2Island.cpp */,
-				5100177E5D8A14366C5B0BC5 /* b2Island.h */,
-				6D822D830EF049417D184372 /* b2TimeStep.h */,
-				0D6F00D95C4407BB26E71E02 /* b2World.cpp */,
-				325E60A57F2624766A524423 /* b2World.h */,
-				0F8D03F1544476B57CA97B01 /* b2WorldCallbacks.cpp */,
-				4F3E12BD4A646D0366792FC9 /* b2WorldCallbacks.h */,
-			);
-			path = Dynamics;
-			sourceTree = "<group>";
-		};
-		196B6B2E1BC81F47771E6467 /* font */ = {
-			isa = PBXGroup;
-			children = (
-				2E9B5D9926034F9172215D5E /* Font.h */,
-				12BB56F127170B3709670896 /* freetype */,
-				74003CB27FA762A021183AD5 /* GlyphData.cpp */,
-				112814480BBF2ED06EED15BF /* GlyphData.h */,
-				5D016F4C27EF506C13FE3058 /* ImageRasterizer.cpp */,
-				36465ABA28FB06F4333C3F07 /* ImageRasterizer.h */,
-				1B1C4E4D288A1D2F29E57B1B /* Rasterizer.cpp */,
-				08D24B70441A2496160C0849 /* Rasterizer.h */,
-				FAD8E84E1A7C949B0084E24D /* Vera.ttf.h */,
-				1B4E22F1388E2B2E76E3377B /* wrap_GlyphData.cpp */,
-				3547706F2E7D43212CB40D04 /* wrap_GlyphData.h */,
-				11745DE315E859F71E881D76 /* wrap_Rasterizer.cpp */,
-				37224F6B30CA5D800B1F41F1 /* wrap_Rasterizer.h */,
-			);
-			path = font;
-			sourceTree = "<group>";
-		};
-		1E017A8673D531394B5A3B16 /* sdl */ = {
-			isa = PBXGroup;
-			children = (
-				FA3D9E0F16E68EAE00CA6630 /* Cursor.cpp */,
-				FA3D9E1016E68EAE00CA6630 /* Cursor.h */,
-				584E16AE09E12536206C46FE /* Mouse.cpp */,
-				198A44BD71BB61EE517C2A39 /* Mouse.h */,
-			);
-			path = sdl;
-			sourceTree = "<group>";
-		};
-		20A8288624E9654322DC388D /* sdl */ = {
-			isa = PBXGroup;
-			children = (
-				43BC2B1C505E5EFF650C31E3 /* Keyboard.cpp */,
-				057A3770539D25AE6C8F20D3 /* Keyboard.h */,
-			);
-			path = sdl;
-			sourceTree = "<group>";
-		};
-		264B1FF46F2C68D26B7B158D /* openal */ = {
-			isa = PBXGroup;
-			children = (
-				6CB1193233FA78EE646A17A1 /* Audio.cpp */,
-				1916112F57AF56A173727464 /* Audio.h */,
-				601E6A56345412E87E1D396B /* Pool.cpp */,
-				62E121F35BEB622029324F25 /* Pool.h */,
-				28024635525B077E08A73D9B /* Source.cpp */,
-				5B3306B5587A708557EE4D4F /* Source.h */,
-			);
-			path = openal;
-			sourceTree = "<group>";
-		};
-		2F654C0235EB60C744A22507 /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				FA577AAF16C7507900860150 /* love.framework */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		34067FA94AEA4D7C3E103A64 /* box2d */ = {
-			isa = PBXGroup;
-			children = (
-				089B1AC1248B21D336594457 /* Body.cpp */,
-				6E6D5AB27B71488D405526C3 /* Body.h */,
-				0959542C4B54320B1DDD5911 /* ChainShape.cpp */,
-				1AA213FC158815FA77C40330 /* ChainShape.h */,
-				4DAB28A9235E2CBE75F56848 /* CircleShape.cpp */,
-				3C965422252F672D3FF6598C /* CircleShape.h */,
-				02CD63315FF902E336AB4657 /* Contact.cpp */,
-				5D590ACE5E237B7D5B556AD0 /* Contact.h */,
-				34A36BB617BC5CCA5B870EA6 /* DistanceJoint.cpp */,
-				457674E43FF71E974D990C00 /* DistanceJoint.h */,
-				755C2B980C106EA7423E7E5E /* EdgeShape.cpp */,
-				561D4A4722E36BAA16D17CC8 /* EdgeShape.h */,
-				47C77F6032FA77E046AA6810 /* Fixture.cpp */,
-				60840050412A459D5D21518F /* Fixture.h */,
-				1E22646A710E5EFC27FE3932 /* FrictionJoint.cpp */,
-				45DC20A760FC42341E5762F7 /* FrictionJoint.h */,
-				6F4D478A52A0408765095920 /* GearJoint.cpp */,
-				25CE236F66F70EB3444A7CC8 /* GearJoint.h */,
-				3EA80A4E0CE0014052076037 /* Joint.cpp */,
-				138913BE5126483748FA43D0 /* Joint.h */,
-				FA0A4BF2182E1AD600E1E4D2 /* MotorJoint.cpp */,
-				FA0A4BF3182E1AD600E1E4D2 /* MotorJoint.h */,
-				3C0B06AF6B5326C840477B18 /* MouseJoint.cpp */,
-				208275724C9421035EA145A4 /* MouseJoint.h */,
-				370D76DC224F2EB300CB4E2F /* Physics.cpp */,
-				5CE370672B1234B10F9532FA /* Physics.h */,
-				54E85987318206E93DC8189F /* PolygonShape.cpp */,
-				2FF26CC52C28773750B812D9 /* PolygonShape.h */,
-				0AE5755936E84C247FB56C65 /* PrismaticJoint.cpp */,
-				104D5534669B772556942891 /* PrismaticJoint.h */,
-				5CB720BA493D7D995E0E20DD /* PulleyJoint.cpp */,
-				0A936C83344E2CF84E703059 /* PulleyJoint.h */,
-				36DD053F754B2D29719B1F80 /* RevoluteJoint.cpp */,
-				5CE0167703887B376F2368FD /* RevoluteJoint.h */,
-				53C4064801456193163E4631 /* RopeJoint.cpp */,
-				4F34010A575C02E66D400CE2 /* RopeJoint.h */,
-				61E64F07028039774F502D69 /* Shape.cpp */,
-				0EB870A1180261FD424A41B3 /* Shape.h */,
-				78E50525407567F863476E27 /* WeldJoint.cpp */,
-				465D0438379342C4589E2B1C /* WeldJoint.h */,
-				44DE79C879CC0074510A2403 /* WheelJoint.cpp */,
-				6AA03CE31B942DC660045FE9 /* WheelJoint.h */,
-				644D0C953C3439FC57C03FC6 /* World.cpp */,
-				7A707F7A60B47A091107144B /* World.h */,
-				64694F91593478085859666F /* wrap_Body.cpp */,
-				1A311FC16B9C0F8D7A41580E /* wrap_Body.h */,
-				1CAA69E00D0808BA2108238B /* wrap_ChainShape.cpp */,
-				70564CC32DEC209F2A615F44 /* wrap_ChainShape.h */,
-				6EF321185C2B1F1E1AF54F64 /* wrap_CircleShape.cpp */,
-				15093E1B1A14176374C81299 /* wrap_CircleShape.h */,
-				3BB22A142670197B0DBD0BED /* wrap_Contact.cpp */,
-				21E975B81E8D701F2147658C /* wrap_Contact.h */,
-				69967D2323404E1F0ED21F11 /* wrap_DistanceJoint.cpp */,
-				18E0492204644DE929B96486 /* wrap_DistanceJoint.h */,
-				40F412FF29F65F5A3D511B98 /* wrap_EdgeShape.cpp */,
-				276C3474657D0A246F64221C /* wrap_EdgeShape.h */,
-				7F796B7A3362196075C62E61 /* wrap_Fixture.cpp */,
-				5F1F169C7FC633EF292E26DF /* wrap_Fixture.h */,
-				340345481F165F8945C716AE /* wrap_FrictionJoint.cpp */,
-				0EA87794395D3B287C5949AA /* wrap_FrictionJoint.h */,
-				50B67F2D0CC511706810302E /* wrap_GearJoint.cpp */,
-				7BAB25936D207169591A666A /* wrap_GearJoint.h */,
-				71810207414B52F8340D7797 /* wrap_Joint.cpp */,
-				047815B73C1C5373551442A6 /* wrap_Joint.h */,
-				FA0A4BF6182E260200E1E4D2 /* wrap_MotorJoint.cpp */,
-				FA0A4BF7182E260200E1E4D2 /* wrap_MotorJoint.h */,
-				4D81102E7ABD1C282BE42CE3 /* wrap_MouseJoint.cpp */,
-				64BA1CE328FF17144B475111 /* wrap_MouseJoint.h */,
-				6CEB48E969FC42C53F9432B1 /* wrap_Physics.cpp */,
-				71C579A557640A3E2A696518 /* wrap_Physics.h */,
-				3AD03C7A77C546ED07BE4C06 /* wrap_PolygonShape.cpp */,
-				78073FEB0F54031B1A3A56FD /* wrap_PolygonShape.h */,
-				0B4020CD058D70F569DF6129 /* wrap_PrismaticJoint.cpp */,
-				2B8C245A21A515E86636725A /* wrap_PrismaticJoint.h */,
-				1E840AF84AB61C6410E26634 /* wrap_PulleyJoint.cpp */,
-				762E57DE65A626FA1F6D4305 /* wrap_PulleyJoint.h */,
-				1F3A277A44141DBF7BCF146A /* wrap_RevoluteJoint.cpp */,
-				2912092853050AF9785F39BE /* wrap_RevoluteJoint.h */,
-				0E3E13BC3E3A7C0C7DBE7DF8 /* wrap_RopeJoint.cpp */,
-				75C0197971FE16926CDA624A /* wrap_RopeJoint.h */,
-				124E716E0BCA055534A60AD2 /* wrap_Shape.cpp */,
-				02F064F5202E34F5718352B8 /* wrap_Shape.h */,
-				3DFF31EE26405E554C610C8F /* wrap_WeldJoint.cpp */,
-				131F69C3368C4B8A55EE0DAD /* wrap_WeldJoint.h */,
-				73473B3C698B538002540A5D /* wrap_WheelJoint.cpp */,
-				0AFB7DA45B2D6913110A5AAB /* wrap_WheelJoint.h */,
-				36324E12371E518E6E9C61B5 /* wrap_World.cpp */,
-				27F777AB188D674F30BC1829 /* wrap_World.h */,
-			);
-			path = box2d;
-			sourceTree = "<group>";
-		};
-		352E6C5F6F8A681766EB5299 /* scripts */ = {
-			isa = PBXGroup;
-			children = (
-				FA577A8C16C71D3600860150 /* auto.lua */,
-				FA577A8D16C71D3600860150 /* boot.lua */,
-				503971A86B7167A91B670FBA /* boot.lua.h */,
-				FA577A8E16C71D3600860150 /* graphics.lua */,
-				104144AB73A974BC04A03131 /* graphics.lua.h */,
-			);
-			name = scripts;
-			path = ../../src/scripts;
-			sourceTree = "<group>";
-		};
-		36C14C81334735EC54E33637 /* utf8 */ = {
-			isa = PBXGroup;
-			children = (
-				5CB1063C6DF04E2E409F2DB0 /* utf8 */,
-				1BCD6EE50EB8791E5A870135 /* utf8.h */,
-			);
-			path = utf8;
-			sourceTree = "<group>";
-		};
-		36DA23075AF92B22676D34C9 /* audio */ = {
-			isa = PBXGroup;
-			children = (
-				1839744763625B5D64EC70AC /* Audio.cpp */,
-				24EE059E03D8155F4BFF64D6 /* Audio.h */,
-				7DB6750C1F01062849171B8B /* null */,
-				264B1FF46F2C68D26B7B158D /* openal */,
-				2FB732687B1669402408356D /* Source.cpp */,
-				46CA2B6B17C32BBE55772268 /* Source.h */,
-				02CA1BE908D91B104EB9590F /* wrap_Audio.cpp */,
-				5FF97D522B8872947DED611C /* wrap_Audio.h */,
-				02662CBC29B954295A634A39 /* wrap_Source.cpp */,
-				330F59B11A5B5D1B44DC07BF /* wrap_Source.h */,
-			);
-			path = audio;
-			sourceTree = "<group>";
-		};
-		3AED1DE005A53DDB07902760 /* luasocket */ = {
-			isa = PBXGroup;
-			children = (
-				1350109F709C227D4AFD423C /* libluasocket */,
-				2DC90F3C6160198256795C75 /* luasocket.cpp */,
-				6B2E52E6185E6980660F1374 /* luasocket.h */,
-			);
-			path = luasocket;
-			sourceTree = "<group>";
-		};
-		3D490B3A36B935BD14B05986 /* Collision */ = {
-			isa = PBXGroup;
-			children = (
-				7BC957592F43649453A57B23 /* Shapes */,
-				4B5F4DF8110020A96B5D3EAB /* b2BroadPhase.cpp */,
-				32FD3FEE52FD1911405B3C59 /* b2BroadPhase.h */,
-				7E7A068041FD553876712F05 /* b2CollideCircle.cpp */,
-				1B036C7C5A8832AE53BB1C06 /* b2CollideEdge.cpp */,
-				427B4B2517C0516844370E3D /* b2CollidePolygon.cpp */,
-				32CC11481CD9164455455D72 /* b2Collision.cpp */,
-				7F911CF2107B22F44C5B2542 /* b2Collision.h */,
-				175A1B8D733B2D4803F64AC1 /* b2Distance.cpp */,
-				034144EE6C33421377674516 /* b2Distance.h */,
-				59D27EA33E8E62E15C185948 /* b2DynamicTree.cpp */,
-				11CF30E73CEA2D8D0A1B17D3 /* b2DynamicTree.h */,
-				1F0D375C38A245E403E53DB5 /* b2TimeOfImpact.cpp */,
-				1C5B57F87B315E39005B119F /* b2TimeOfImpact.h */,
-			);
-			path = Collision;
-			sourceTree = "<group>";
-		};
-		47217E6729AC72E74FF651E3 /* lullaby */ = {
-			isa = PBXGroup;
-			children = (
-				4E15567759041CC379292BE6 /* Decoder.cpp */,
-				733758E8028B20BB799A7BE6 /* Decoder.h */,
-				4A774BC26B7235E410D40C8E /* FLACDecoder.cpp */,
-				3C9253C8152355E1274814B7 /* FLACDecoder.h */,
-				02F0197227150E1B28D9425B /* GmeDecoder.cpp */,
-				64AC15B600F2473651823D40 /* GmeDecoder.h */,
-				407422E8589417B6683D1042 /* ModPlugDecoder.cpp */,
-				31C84D0129AE5F6044A94AC2 /* ModPlugDecoder.h */,
-				1F875B224C4E1B9E35854766 /* Mpg123Decoder.cpp */,
-				6B255FFC4A2C404E50512CB5 /* Mpg123Decoder.h */,
-				2A5F7DCB40652F9B7D61073A /* Sound.cpp */,
-				77234CEE2EFE633537975850 /* Sound.h */,
-				727648E06CD863A2582F798F /* VorbisDecoder.cpp */,
-				4A80315175C5625804AA4A56 /* VorbisDecoder.h */,
-				FAF670541818501300DBDEEA /* WaveDecoder.cpp */,
-				FAF670551818501300DBDEEA /* WaveDecoder.h */,
-			);
-			path = lullaby;
-			sourceTree = "<group>";
-		};
-		48DE0A5A52042D0361883E40 /* libraries */ = {
-			isa = PBXGroup;
-			children = (
-				63287ED84D0F2EEB65D249A3 /* Box2D */,
-				FAE010D7170DDE99006F29D0 /* ddsparse */,
-				FA5FDC5E1788D548002F0ED2 /* enet */,
-				3AED1DE005A53DDB07902760 /* luasocket */,
-				FAA0A45B1A704016009487CB /* luautf8 */,
-				FA0354691731F3A700284828 /* noise1234 */,
-				36C14C81334735EC54E33637 /* utf8 */,
-				FAF6704318184FF800DBDEEA /* Wuff */,
-			);
-			name = libraries;
-			path = ../../src/libraries;
-			sourceTree = "<group>";
-		};
-		4BAB08EE4A6B4A1A01DA50A4 /* sound */ = {
-			isa = PBXGroup;
-			children = (
-				43A258C229C75C15238E520C /* Decoder.h */,
-				47217E6729AC72E74FF651E3 /* lullaby */,
-				30ED4BB03C5F11254AF12E98 /* Sound.cpp */,
-				23985AB32E7B463A2CB87E2C /* Sound.h */,
-				0C5C6C6E47851D1308411DE6 /* SoundData.cpp */,
-				785D31764A1D6CDE21BC6404 /* SoundData.h */,
-				5CF629B94C7802D446D61C45 /* wrap_Decoder.cpp */,
-				782A153A1E6314CB583250E0 /* wrap_Decoder.h */,
-				385902BD584E7D73154E4EBB /* wrap_Sound.cpp */,
-				3960064616E26C0213E323E2 /* wrap_Sound.h */,
-				4DC3617831763D2760335D87 /* wrap_SoundData.cpp */,
-				5B5A0BEC36BE007E6E491396 /* wrap_SoundData.h */,
-			);
-			path = sound;
-			sourceTree = "<group>";
-		};
-		4E2517690E6C64EB07D164F7 /* event */ = {
-			isa = PBXGroup;
-			children = (
-				24265680279E30A40DF81946 /* Event.cpp */,
-				4F1862D324C9429157A27A2E /* Event.h */,
-				09000F404D44660029EF38F0 /* sdl */,
-			);
-			path = event;
-			sourceTree = "<group>";
-		};
-		501126AD67DC2A4B527654EA /* joystick */ = {
-			isa = PBXGroup;
-			children = (
-				FAB0078D1740C12D00A9664D /* Joystick.cpp */,
-				FAB0078E1740C12D00A9664D /* Joystick.h */,
-				4C606AEC342457600C3F0741 /* JoystickModule.h */,
-				687216AD6FA406C838284B91 /* sdl */,
-				FAB007951740C87D00A9664D /* wrap_Joystick.cpp */,
-				FAB007961740C87D00A9664D /* wrap_Joystick.h */,
-				139411436818381E493F00F5 /* wrap_JoystickModule.cpp */,
-				2D7B7DEC4FC87878332E41B3 /* wrap_JoystickModule.h */,
-			);
-			path = joystick;
-			sourceTree = "<group>";
-		};
-		54067CFB7D564E5764FA17DC /* love */ = {
-			isa = PBXGroup;
-			children = (
-				07571BBD29A9184E2F465E28 /* common */,
-				48DE0A5A52042D0361883E40 /* libraries */,
-				548A533617C45319431D3ECF /* modules */,
-				352E6C5F6F8A681766EB5299 /* scripts */,
-				FA577A6616C7199700860150 /* Frameworks */,
-				FA08F5AC16C751BA00F007B5 /* Resources */,
-				2F654C0235EB60C744A22507 /* Products */,
-			);
-			name = love;
-			sourceTree = "<group>";
-			usesTabs = 1;
-		};
-		548A533617C45319431D3ECF /* modules */ = {
-			isa = PBXGroup;
-			children = (
-				36DA23075AF92B22676D34C9 /* audio */,
-				4E2517690E6C64EB07D164F7 /* event */,
-				7B0734182055607468261A5E /* filesystem */,
-				196B6B2E1BC81F47771E6467 /* font */,
-				586900D11BD011D949F45D7D /* graphics */,
-				003F4BA82B6046BC133B3F0F /* image */,
-				501126AD67DC2A4B527654EA /* joystick */,
-				752A4B4672B6166A2CA30E85 /* keyboard */,
-				70C250C41ADF59C0697925C2 /* love */,
-				FA7C937116DCC6C2006F2BEE /* math */,
-				130737AF4BD12D0356A65C87 /* mouse */,
-				67F10C1D58A96C1C53563B5C /* physics */,
-				4BAB08EE4A6B4A1A01DA50A4 /* sound */,
-				FA34E7CA174B512200E04D3F /* system */,
-				02E0744773D13AD65E7C49DC /* thread */,
-				6D590DDD41E72A60262E4A4F /* timer */,
-				153D76205F7A4ACD12FB4C0E /* window */,
-			);
-			name = modules;
-			path = ../../src/modules;
-			sourceTree = "<group>";
-		};
-		586900D11BD011D949F45D7D /* graphics */ = {
-			isa = PBXGroup;
-			children = (
-				4941079838020ECA049B5C21 /* Color.h */,
-				5D93601669875EE06721689E /* Drawable.h */,
-				03F17FF546D637744E263961 /* Graphics.cpp */,
-				777352284E262F48543E6E7F /* Graphics.h */,
-				75093EE94918576801F50993 /* opengl */,
-				FAC86E671724555D00EED715 /* Quad.cpp */,
-				FAC86E681724555D00EED715 /* Quad.h */,
-				58CC50E70A375FDF53EF01B6 /* Texture.cpp */,
-				1DA41DFF0869489411A71AFC /* Texture.h */,
-				4B731754147B27AF73AC5358 /* Volatile.cpp */,
-				0CFF64090F0F4F481BB80CF0 /* Volatile.h */,
-			);
-			path = graphics;
-			sourceTree = "<group>";
-		};
-		59207AEF0DE97A632CE30FE6 /* Rope */ = {
-			isa = PBXGroup;
-			children = (
-				4832527C02C105776536438A /* b2Rope.cpp */,
-				1A95437F513E662113AC154A /* b2Rope.h */,
-			);
-			path = Rope;
-			sourceTree = "<group>";
-		};
-		5CB1063C6DF04E2E409F2DB0 /* utf8 */ = {
-			isa = PBXGroup;
-			children = (
-				3C4D70E82FC12A9A15EC39BA /* checked.h */,
-				74EE403977734BA53DDF16F0 /* core.h */,
-				7CA02BF51EBA65C263E15250 /* unchecked.h */,
-			);
-			path = utf8;
-			sourceTree = "<group>";
-		};
-		5CFF12567FFB5C5166631693 /* sdl */ = {
-			isa = PBXGroup;
-			children = (
-				113269E55FCF208D2D6754BC /* Timer.cpp */,
-				6BEE6511475F641A70A0591E /* Timer.h */,
-			);
-			path = sdl;
-			sourceTree = "<group>";
-		};
-		63082CBA23A6046C60DA1C6F /* sdl */ = {
-			isa = PBXGroup;
-			children = (
-				6CDD4F3320303D222C180CD0 /* Window.cpp */,
-				7EC570BC74C369747ED0183A /* Window.h */,
-			);
-			path = sdl;
-			sourceTree = "<group>";
-		};
-		63287ED84D0F2EEB65D249A3 /* Box2D */ = {
-			isa = PBXGroup;
-			children = (
-				7B7A47F267D77A570D995658 /* Box2D.h */,
-				3D490B3A36B935BD14B05986 /* Collision */,
-				71F67B4A51CC637C6D113715 /* Common */,
-				18AF317B298302545C386404 /* Dynamics */,
-				59207AEF0DE97A632CE30FE6 /* Rope */,
-			);
-			path = Box2D;
-			sourceTree = "<group>";
-		};
-		64DD03B45BF6265723662DAF /* physfs */ = {
-			isa = PBXGroup;
-			children = (
-				4E0F565B03D05C3722496F27 /* File.cpp */,
-				47D46915001F342A3CD23E86 /* File.h */,
-				6DE3129F3A0B2D9C178118F3 /* Filesystem.cpp */,
-				219636CF6780074F7871463D /* Filesystem.h */,
-			);
-			path = physfs;
-			sourceTree = "<group>";
-		};
-		67F10C1D58A96C1C53563B5C /* physics */ = {
-			isa = PBXGroup;
-			children = (
-				2DCE45C868A0091B762C7377 /* Body.cpp */,
-				286660042F9654F61AB90D7A /* Body.h */,
-				69DB4423147C7E3362941E75 /* Joint.cpp */,
-				065364DB7A29396C777213D0 /* Joint.h */,
-				70F425B5336E1CD652827FD0 /* Shape.cpp */,
-				00744BD73BFE3F591537728F /* Shape.h */,
-				34067FA94AEA4D7C3E103A64 /* box2d */,
-			);
-			path = physics;
-			sourceTree = "<group>";
-		};
-		68027AB25AAF234679615C14 /* Joints */ = {
-			isa = PBXGroup;
-			children = (
-				33627AE97E66147E76804EF9 /* b2DistanceJoint.cpp */,
-				086B4A4E025B4B5F606747A2 /* b2DistanceJoint.h */,
-				13093ADC78426C5009DF3B13 /* b2FrictionJoint.cpp */,
-				78C0420E2548523B241E3D61 /* b2FrictionJoint.h */,
-				69A01D71103275D451F965B2 /* b2GearJoint.cpp */,
-				6590063A6E4B3AEF4550443C /* b2GearJoint.h */,
-				6F1B61350B6B36AF216C57D7 /* b2Joint.cpp */,
-				10F83B5848B77A937C250FEB /* b2Joint.h */,
-				FA0A4BEE182E0C2800E1E4D2 /* b2MotorJoint.cpp */,
-				FA0A4BEF182E0C2800E1E4D2 /* b2MotorJoint.h */,
-				4A47384208BE218F688C4EFA /* b2MouseJoint.cpp */,
-				0AA1539E66B2641B66130709 /* b2MouseJoint.h */,
-				1E27263847302FCA1F843B47 /* b2PrismaticJoint.cpp */,
-				64491E98483728D601110EF0 /* b2PrismaticJoint.h */,
-				66EC3C0463A703A97445193B /* b2PulleyJoint.cpp */,
-				7A840CB020803B7C6C097CD1 /* b2PulleyJoint.h */,
-				11D62E873092729B497B447F /* b2RevoluteJoint.cpp */,
-				774434E1581A23EC1B0F1E6F /* b2RevoluteJoint.h */,
-				38AF72D4790619BB022E2AEF /* b2RopeJoint.cpp */,
-				2C970EA7229F20934C72581D /* b2RopeJoint.h */,
-				5BCC49F529F726385CD41FA6 /* b2WeldJoint.cpp */,
-				2D290E902C451D6849051FEF /* b2WeldJoint.h */,
-				0602250B7E4664E43CA113DC /* b2WheelJoint.cpp */,
-				23A266CD4FC729355E23606E /* b2WheelJoint.h */,
-			);
-			path = Joints;
-			sourceTree = "<group>";
-		};
-		687216AD6FA406C838284B91 /* sdl */ = {
-			isa = PBXGroup;
-			children = (
-				FAB007911740C28900A9664D /* Joystick.cpp */,
-				FAB007921740C28900A9664D /* Joystick.h */,
-				55B425307C0C1C4B3EFC3A5F /* JoystickModule.cpp */,
-				439E46D768A266780E894800 /* JoystickModule.h */,
-			);
-			path = sdl;
-			sourceTree = "<group>";
-		};
-		6D590DDD41E72A60262E4A4F /* timer */ = {
-			isa = PBXGroup;
-			children = (
-				5CFF12567FFB5C5166631693 /* sdl */,
-				2D9475890CDA3D3776435622 /* Timer.h */,
-				695E4ED13AA0689E64280573 /* wrap_Timer.cpp */,
-				7F575BE9573C654B5ED44CC1 /* wrap_Timer.h */,
-			);
-			path = timer;
-			sourceTree = "<group>";
-		};
-		70C250C41ADF59C0697925C2 /* love */ = {
-			isa = PBXGroup;
-			children = (
-				19ED419874B46EC16F927524 /* love.cpp */,
-				10A608C96F067F972C962EFB /* love.h */,
-			);
-			path = love;
-			sourceTree = "<group>";
-		};
-		71F67B4A51CC637C6D113715 /* Common */ = {
-			isa = PBXGroup;
-			children = (
-				55A759CE711E157339930E58 /* b2BlockAllocator.cpp */,
-				0F0E666B7C790BB870477994 /* b2BlockAllocator.h */,
-				12390CBC115B00D06EF951DD /* b2Draw.cpp */,
-				343E66751EBA75264C3400FA /* b2Draw.h */,
-				3AC7627D7E1458AA0D8E0522 /* b2GrowableStack.h */,
-				2C78323D7D5C628A53EC6931 /* b2Math.cpp */,
-				0A0A2DA4094130187F655E52 /* b2Math.h */,
-				6FF15DF4423F6426224024C9 /* b2Settings.cpp */,
-				090F537B70DA06EA0B29593F /* b2Settings.h */,
-				780D5B6358096BEB1F1336EE /* b2StackAllocator.cpp */,
-				567C0A0C58931DE54733011B /* b2StackAllocator.h */,
-				239054AE7475433E39747DA9 /* b2Timer.cpp */,
-				525A4D633D9B0D8B225936D4 /* b2Timer.h */,
-			);
-			path = Common;
-			sourceTree = "<group>";
-		};
-		75093EE94918576801F50993 /* opengl */ = {
-			isa = PBXGroup;
-			children = (
-				4AD52074367950B735707CE1 /* Canvas.cpp */,
-				23573F2F4F7D56312E663E24 /* Canvas.h */,
-				583037E9238A6EF00DD20B1A /* Font.cpp */,
-				7EFA04373ADC5CC24DCB5824 /* Font.h */,
-				5725505310E75ECC5044583A /* GLee.c */,
-				0B930B8571276AA86AB87D80 /* GLee.h */,
-				11773415762F3A38421C6DB3 /* Graphics.cpp */,
-				389E3CEC356050A27784290E /* Graphics.h */,
-				56D6030A0B8F7397715062B9 /* Image.cpp */,
-				3CFE5C4A12D5675E7C9C7BF9 /* Image.h */,
-				FAF4376D17F4AC530074F9E2 /* Mesh.cpp */,
-				FAF4376E17F4AC530074F9E2 /* Mesh.h */,
-				2E406F8328543EC63EB922C6 /* OpenGL.cpp */,
-				2C87695707B046B536F347D8 /* OpenGL.h */,
-				48A206C9004150640C432100 /* ParticleSystem.cpp */,
-				53EE57FF4DBD52BB22701160 /* ParticleSystem.h */,
-				FA435EA117B36E9C004C3F22 /* Polyline.cpp */,
-				FA435EA217B36E9C004C3F22 /* Polyline.h */,
-				FA577A8516C71CF000860150 /* Shader.cpp */,
-				FA577A8616C71CF000860150 /* Shader.h */,
-				4D700D182EAA46273D1E2CC4 /* SpriteBatch.cpp */,
-				727D23FA1CC755B902471A45 /* SpriteBatch.h */,
-				FA9B49281875EFB900201DA9 /* Texture.h */,
-				426B1C4475DC54505B824B7F /* VertexBuffer.cpp */,
-				577B66502A5360AE60733B10 /* VertexBuffer.h */,
-				4E3251027026699A1D4D310D /* wrap_Canvas.cpp */,
-				3AFB3A18384A2D22352262B1 /* wrap_Canvas.h */,
-				7A3B52AF1FBE73FC36AD50C8 /* wrap_Font.cpp */,
-				3CDA3E9B364F17A902384AAC /* wrap_Font.h */,
-				1A9810F758AC1D1E4B6431FD /* wrap_Graphics.cpp */,
-				05DF237B657042515F3B4E52 /* wrap_Graphics.h */,
-				14AE68E14C2C74526A612FA0 /* wrap_Image.cpp */,
-				78A2127828793F7A778D7932 /* wrap_Image.h */,
-				FA7AA59017F6AC1F00704BE2 /* wrap_Mesh.cpp */,
-				FA7AA59117F6AC1F00704BE2 /* wrap_Mesh.h */,
-				5F42052D7C8271A1105541DE /* wrap_ParticleSystem.cpp */,
-				678E42771C9B415628A3234D /* wrap_ParticleSystem.h */,
-				FAC86E611724552C00EED715 /* wrap_Quad.cpp */,
-				FAC86E621724552C00EED715 /* wrap_Quad.h */,
-				FA577A8716C71CF000860150 /* wrap_Shader.cpp */,
-				FA577A8816C71CF000860150 /* wrap_Shader.h */,
-				02C16FDB537A702F4D42534E /* wrap_SpriteBatch.cpp */,
-				2BE75A693BE206B22DAE1B2E /* wrap_SpriteBatch.h */,
-				FA01BE1C1878E35B00640047 /* wrap_Texture.cpp */,
-				FA01BE1D1878E35B00640047 /* wrap_Texture.h */,
-			);
-			path = opengl;
-			sourceTree = "<group>";
-		};
-		752A4B4672B6166A2CA30E85 /* keyboard */ = {
-			isa = PBXGroup;
-			children = (
-				524741891BB93848039F4174 /* Keyboard.cpp */,
-				6C981DA13E3D42DA06891046 /* Keyboard.h */,
-				20A8288624E9654322DC388D /* sdl */,
-				19F40DF6507028212FEB1D77 /* wrap_Keyboard.cpp */,
-				003142374F3D40A518716024 /* wrap_Keyboard.h */,
-			);
-			path = keyboard;
-			sourceTree = "<group>";
-		};
-		7B0734182055607468261A5E /* filesystem */ = {
-			isa = PBXGroup;
-			children = (
-				11D141087979064B441B787D /* File.cpp */,
-				31A444CF0B4E6DA450120730 /* File.h */,
-				62370A494F9D6E2D570065EB /* FileData.cpp */,
-				54A13C2209F945671BC27974 /* FileData.h */,
-				64DD03B45BF6265723662DAF /* physfs */,
-				6C367AE309C453C412D91363 /* wrap_File.cpp */,
-				52E15B702C40593D3BF431DF /* wrap_File.h */,
-				597478A255B82B56488B4717 /* wrap_FileData.cpp */,
-				3512460642B046876D687B22 /* wrap_FileData.h */,
-				1E827AE8548C52493ED95629 /* wrap_Filesystem.cpp */,
-				5DC271240F0119AE16FA1B8E /* wrap_Filesystem.h */,
-			);
-			path = filesystem;
-			sourceTree = "<group>";
-		};
-		7BC957592F43649453A57B23 /* Shapes */ = {
-			isa = PBXGroup;
-			children = (
-				4E6705C154C34FBD143F465E /* b2ChainShape.cpp */,
-				6C7E6C3F1CCA1CF6164123F6 /* b2ChainShape.h */,
-				08AA5965073A1C520A7A6833 /* b2CircleShape.cpp */,
-				153957EB332E1269671E7F4A /* b2CircleShape.h */,
-				633E37194CB535AE41A00092 /* b2EdgeShape.cpp */,
-				448C492C7AEB7840504F1C9D /* b2EdgeShape.h */,
-				08983C025D0655270DF81A5B /* b2PolygonShape.cpp */,
-				0E755DCF691828CE11444877 /* b2PolygonShape.h */,
-				2FD366F113387BC95125133D /* b2Shape.h */,
-			);
-			path = Shapes;
-			sourceTree = "<group>";
-		};
-		7DB6750C1F01062849171B8B /* null */ = {
-			isa = PBXGroup;
-			children = (
-				7CC5707C79175FA6427B3D62 /* Audio.cpp */,
-				2E5C2A2F05417B294ED655E8 /* Audio.h */,
-				1A304E384AF2119905C01504 /* Source.cpp */,
-				104D567660003ADE696D341A /* Source.h */,
-			);
-			path = null;
-			sourceTree = "<group>";
-		};
-		7DE032B3334E559969264529 /* Contacts */ = {
-			isa = PBXGroup;
-			children = (
-				468F7A0A484820DE79CE76D2 /* b2ChainAndCircleContact.cpp */,
-				174D472C1AFE594D77A0322B /* b2ChainAndCircleContact.h */,
-				60C95C7F507A381D0A483B3F /* b2ChainAndPolygonContact.cpp */,
-				44E85D982F01082F5E1346B6 /* b2ChainAndPolygonContact.h */,
-				58792BC1126C2917432D706B /* b2CircleContact.cpp */,
-				21124F915912499179A42115 /* b2CircleContact.h */,
-				71F878E2440A021B68D93ABC /* b2Contact.cpp */,
-				50EC67CE3ED71F5D13304FD4 /* b2Contact.h */,
-				1E9E4F657DEC2772493B79CC /* b2ContactSolver.cpp */,
-				5A1C77401B1B32CE326332A1 /* b2ContactSolver.h */,
-				1108594E361A22D90D6022E8 /* b2EdgeAndCircleContact.cpp */,
-				0A420541704C1C2D718A4D20 /* b2EdgeAndCircleContact.h */,
-				243E18977E2A37CC6FDD55A5 /* b2EdgeAndPolygonContact.cpp */,
-				5DA322AC59AD7E43183577CB /* b2EdgeAndPolygonContact.h */,
-				31871B8B7E1A697A73576040 /* b2PolygonAndCircleContact.cpp */,
-				4A1D6DAE45E627BD12903B52 /* b2PolygonAndCircleContact.h */,
-				1F4E747212DE41716BC245C9 /* b2PolygonContact.cpp */,
-				0A063D006D52330E67FF4B3A /* b2PolygonContact.h */,
-			);
-			path = Contacts;
-			sourceTree = "<group>";
-		};
-		FA0354691731F3A700284828 /* noise1234 */ = {
-			isa = PBXGroup;
-			children = (
-				FA03546A1731F3A700284828 /* simplexnoise1234.cpp */,
-				FA03546B1731F3A700284828 /* simplexnoise1234.h */,
-			);
-			path = noise1234;
-			sourceTree = "<group>";
-		};
-		FA08F5AC16C751BA00F007B5 /* Resources */ = {
-			isa = PBXGroup;
-			children = (
-				FA08F5AE16C7525600F007B5 /* Info-Framework.plist */,
-			);
-			name = Resources;
-			sourceTree = "<group>";
-		};
-		FA34E7CA174B512200E04D3F /* system */ = {
-			isa = PBXGroup;
-			children = (
-				FA34E7CF174B514F00E04D3F /* sdl */,
-				FA34E7CB174B513F00E04D3F /* System.cpp */,
-				FA34E7CC174B513F00E04D3F /* System.h */,
-				FA34E7D4174B55AF00E04D3F /* wrap_System.cpp */,
-				FA34E7D5174B55AF00E04D3F /* wrap_System.h */,
-			);
-			path = system;
-			sourceTree = "<group>";
-		};
-		FA34E7CF174B514F00E04D3F /* sdl */ = {
-			isa = PBXGroup;
-			children = (
-				FA34E7D0174B515D00E04D3F /* System.cpp */,
-				FA34E7D1174B515D00E04D3F /* System.h */,
-			);
-			path = sdl;
-			sourceTree = "<group>";
-		};
-		FA577A6616C7199700860150 /* Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				FA577A7916C71A1700860150 /* Cocoa.framework */,
-				FAA627CD18E7E1560080752D /* CoreServices.framework */,
-				FA577A6716C719D900860150 /* FreeType.framework */,
-				FA577A6916C719DE00860150 /* IL.framework */,
-				FA577A8216C71A5300860150 /* libmodplug.framework */,
-				FA577A6D16C719EA00860150 /* Lua.framework */,
-				FA577A6F16C719F000860150 /* mpg123.framework */,
-				FA577A7116C719F400860150 /* Ogg.framework */,
-				FAAFF04316CB11C700CCDE45 /* OpenAL-Soft.framework */,
-				FA577A7C16C71A2600860150 /* OpenGL.framework */,
-				FA577A7316C719F900860150 /* physfs.framework */,
-				FA9B4A0716E1578300074F42 /* SDL2.framework */,
-				FA577A7716C71A0800860150 /* Vorbis.framework */,
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-		FA5FDC5E1788D548002F0ED2 /* enet */ = {
-			isa = PBXGroup;
-			children = (
-				FA5FDC5F1788D548002F0ED2 /* enet.cpp */,
-				FA5FDC601788D548002F0ED2 /* libenet */,
-				FA5FDC781788D548002F0ED2 /* lua-enet.h */,
-			);
-			path = enet;
-			sourceTree = "<group>";
-		};
-		FA5FDC601788D548002F0ED2 /* libenet */ = {
-			isa = PBXGroup;
-			children = (
-				FA5FDC611788D548002F0ED2 /* callbacks.c */,
-				FA5FDC631788D548002F0ED2 /* compress.c */,
-				FA5FDC641788D548002F0ED2 /* host.c */,
-				FA5FDC651788D548002F0ED2 /* include */,
-				FA5FDC711788D548002F0ED2 /* list.c */,
-				FA5FDC721788D548002F0ED2 /* packet.c */,
-				FA5FDC731788D548002F0ED2 /* peer.c */,
-				FA5FDC741788D548002F0ED2 /* protocol.c */,
-				FA5FDC761788D548002F0ED2 /* unix.c */,
-				FA5FDC771788D548002F0ED2 /* win32.c */,
-			);
-			path = libenet;
-			sourceTree = "<group>";
-		};
-		FA5FDC651788D548002F0ED2 /* include */ = {
-			isa = PBXGroup;
-			children = (
-				FA5FDC661788D548002F0ED2 /* enet */,
-			);
-			path = include;
-			sourceTree = "<group>";
-		};
-		FA5FDC661788D548002F0ED2 /* enet */ = {
-			isa = PBXGroup;
-			children = (
-				FA5FDC671788D548002F0ED2 /* callbacks.h */,
-				FA5FDC681788D548002F0ED2 /* enet.h */,
-				FA5FDC691788D548002F0ED2 /* list.h */,
-				FA5FDC6A1788D548002F0ED2 /* protocol.h */,
-				FA5FDC6B1788D548002F0ED2 /* time.h */,
-				FA5FDC6C1788D548002F0ED2 /* types.h */,
-				FA5FDC6D1788D548002F0ED2 /* unix.h */,
-				FA5FDC6E1788D548002F0ED2 /* utility.h */,
-				FA5FDC6F1788D548002F0ED2 /* win32.h */,
-			);
-			path = enet;
-			sourceTree = "<group>";
-		};
-		FA7C937116DCC6C2006F2BEE /* math */ = {
-			isa = PBXGroup;
-			children = (
-				FAC570FC17402D1100D147E4 /* BezierCurve.cpp */,
-				FAC570FD17402D1100D147E4 /* BezierCurve.h */,
-				FA5454C016F1310000D30303 /* MathModule.cpp */,
-				FA5454C116F1310000D30303 /* MathModule.h */,
-				FA636D88171B70920065623F /* RandomGenerator.cpp */,
-				FA636D89171B70920065623F /* RandomGenerator.h */,
-				FAC570FE17402D1100D147E4 /* wrap_BezierCurve.cpp */,
-				FAC570FF17402D1100D147E4 /* wrap_BezierCurve.h */,
-				FA7C937516DCC6C2006F2BEE /* wrap_Math.cpp */,
-				FA7C937616DCC6C2006F2BEE /* wrap_Math.h */,
-				FA636D8C171B72A70065623F /* wrap_RandomGenerator.cpp */,
-				FA636D8D171B72A70065623F /* wrap_RandomGenerator.h */,
-			);
-			path = math;
-			sourceTree = "<group>";
-		};
-		FAA0A45B1A704016009487CB /* luautf8 */ = {
-			isa = PBXGroup;
-			children = (
-				FAA0A45C1A704016009487CB /* lprefix.h */,
-				FAA0A45D1A704016009487CB /* lutf8lib.c */,
-				FAA0A4601A70431A009487CB /* lutf8lib.h */,
-			);
-			path = luautf8;
-			sourceTree = "<group>";
-		};
-		FAE010D7170DDE99006F29D0 /* ddsparse */ = {
-			isa = PBXGroup;
-			children = (
-				FAE010D8170DDE99006F29D0 /* ddsinfo.h */,
-				FAE010D9170DDE99006F29D0 /* ddsparse.cpp */,
-				FAE010DA170DDE99006F29D0 /* ddsparse.h */,
-			);
-			path = ddsparse;
-			sourceTree = "<group>";
-		};
-		FAF272B016E3D46400CC193A /* sdl */ = {
-			isa = PBXGroup;
-			children = (
-				FAF272B116E3D46400CC193A /* Thread.cpp */,
-				FAF272B216E3D46400CC193A /* Thread.h */,
-				FAF272B316E3D46400CC193A /* threads.cpp */,
-				FAF272B416E3D46400CC193A /* threads.h */,
-			);
-			path = sdl;
-			sourceTree = "<group>";
-		};
-		FAF6704318184FF800DBDEEA /* Wuff */ = {
-			isa = PBXGroup;
-			children = (
-				FAF6704418184FF800DBDEEA /* wuff.c */,
-				FAF6704518184FF800DBDEEA /* wuff.h */,
-				FAF6704618184FF800DBDEEA /* wuff_config.h */,
-				FAF6704718184FF800DBDEEA /* wuff_convert.c */,
-				FAF6704818184FF800DBDEEA /* wuff_convert.h */,
-				FAF6704918184FF800DBDEEA /* wuff_internal.c */,
-				FAF6704A18184FF800DBDEEA /* wuff_internal.h */,
-				FAF6704B18184FF800DBDEEA /* wuff_memory.c */,
-			);
-			path = Wuff;
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXHeadersBuildPhase section */
-		FA577AAC16C7507900860150 /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				FA7C937B16DCC6C2006F2BEE /* wrap_Math.h in Headers */,
-				FAF272A516E3D44400CC193A /* Channel.h in Headers */,
-				FAF272A716E3D44400CC193A /* LuaThread.h in Headers */,
-				FAF4377017F4AC530074F9E2 /* Mesh.h in Headers */,
-				FAF272A916E3D44400CC193A /* ThreadModule.h in Headers */,
-				FAF6705018184FF800DBDEEA /* wuff_convert.h in Headers */,
-				FAF272AB16E3D44400CC193A /* wrap_Channel.h in Headers */,
-				FA0A4BF9182E260200E1E4D2 /* wrap_MotorJoint.h in Headers */,
-				FAF272AD16E3D44400CC193A /* wrap_LuaThread.h in Headers */,
-				FAF272AF16E3D44400CC193A /* wrap_ThreadModule.h in Headers */,
-				FAF272B616E3D46400CC193A /* Thread.h in Headers */,
-				FAF272B816E3D46400CC193A /* threads.h in Headers */,
-				FA5454C316F1310000D30303 /* MathModule.h in Headers */,
-				FAA0A45E1A704016009487CB /* lprefix.h in Headers */,
-				FAAC6B03170A373B008A61C5 /* CompressedData.h in Headers */,
-				FAE010DB170DDE99006F29D0 /* ddsinfo.h in Headers */,
-				FAE010DD170DDE99006F29D0 /* ddsparse.h in Headers */,
-				FAE010E1170DE25E006F29D0 /* ddsHandler.h in Headers */,
-				FAE010E5170DF75C006F29D0 /* wrap_CompressedData.h in Headers */,
-				FAF6704E18184FF800DBDEEA /* wuff_config.h in Headers */,
-				FA0CDE3D1710F9A50056E8D7 /* FormatHandler.h in Headers */,
-				FA7AA59317F6AC1F00704BE2 /* wrap_Mesh.h in Headers */,
-				FA01BE1F1878E35B00640047 /* wrap_Texture.h in Headers */,
-				FAEC808B1710FEA60057279A /* ImageData.h in Headers */,
-				FAD8E84F1A7C949B0084E24D /* Vera.ttf.h in Headers */,
-				FAEC808F1711E76C0057279A /* CompressedData.h in Headers */,
-				FA636D8B171B70920065623F /* RandomGenerator.h in Headers */,
-				FA636D8F171B72A70065623F /* wrap_RandomGenerator.h in Headers */,
-				FAC86E641724552C00EED715 /* wrap_Quad.h in Headers */,
-				FAC86E6C1724555D00EED715 /* Quad.h in Headers */,
-				FA03546D1731F3A700284828 /* simplexnoise1234.h in Headers */,
-				FA3D9E0E16E68DE600CA6630 /* Cursor.h in Headers */,
-				FA3D9E1216E68EAE00CA6630 /* Cursor.h in Headers */,
-				FA3D9E1616E6D41100CA6630 /* wrap_Cursor.h in Headers */,
-				FA9FC0B1173D6E3E005027FF /* wrap_Window.h in Headers */,
-				FAB007901740C12D00A9664D /* Joystick.h in Headers */,
-				FAF6705218184FF800DBDEEA /* wuff_internal.h in Headers */,
-				FAB007941740C28900A9664D /* Joystick.h in Headers */,
-				FAB007981740C87D00A9664D /* wrap_Joystick.h in Headers */,
-				FA9B492A1875EFB900201DA9 /* Texture.h in Headers */,
-				FAC5710117402D1100D147E4 /* BezierCurve.h in Headers */,
-				FAC5710317402D1100D147E4 /* wrap_BezierCurve.h in Headers */,
-				FA5FDC7E1788D548002F0ED2 /* callbacks.h in Headers */,
-				FA5FDC7F1788D548002F0ED2 /* enet.h in Headers */,
-				FA5FDC801788D548002F0ED2 /* list.h in Headers */,
-				FA5FDC811788D548002F0ED2 /* protocol.h in Headers */,
-				FA5FDC821788D548002F0ED2 /* time.h in Headers */,
-				FA5FDC831788D548002F0ED2 /* types.h in Headers */,
-				FA0A4BF5182E1AD600E1E4D2 /* MotorJoint.h in Headers */,
-				FA5FDC841788D548002F0ED2 /* unix.h in Headers */,
-				FAA0A4611A70431A009487CB /* lutf8lib.h in Headers */,
-				FA0A4BF1182E0C2800E1E4D2 /* b2MotorJoint.h in Headers */,
-				FA5FDC851788D548002F0ED2 /* utility.h in Headers */,
-				FAF6704D18184FF800DBDEEA /* wuff.h in Headers */,
-				FA5FDC861788D548002F0ED2 /* win32.h in Headers */,
-				FA5FDC8F1788D548002F0ED2 /* lua-enet.h in Headers */,
-				FA7175AA178E8418001FE7FE /* lua.h in Headers */,
-				FA34E7CE174B513F00E04D3F /* System.h in Headers */,
-				FA34E7D3174B515D00E04D3F /* System.h in Headers */,
-				FAF670571818501300DBDEEA /* WaveDecoder.h in Headers */,
-				FA1EF7C51799FEB200FF380C /* wrap_System.h in Headers */,
-				FA435EA417B36E9C004C3F22 /* Polyline.h in Headers */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXHeadersBuildPhase section */
-
-/* Begin PBXNativeTarget section */
-		FA577AAE16C7507900860150 /* Framework */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = FA577ABF16C7507900860150 /* Build configuration list for PBXNativeTarget "Framework" */;
-			buildPhases = (
-				FA577AAA16C7507900860150 /* Sources */,
-				FA577AAB16C7507900860150 /* Frameworks */,
-				FA577AAC16C7507900860150 /* Headers */,
-				FA577AAD16C7507900860150 /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = Framework;
-			productName = love;
-			productReference = FA577AAF16C7507900860150 /* love.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		08FB7793FE84155DC02AAC07 /* Project object */ = {
-			isa = PBXProject;
-			attributes = {
-				LastUpgradeCheck = 0510;
-			};
-			buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "love-framework" */;
-			compatibilityVersion = "Xcode 3.2";
-			developmentRegion = English;
-			hasScannedForEncodings = 1;
-			knownRegions = (
-				en,
-			);
-			mainGroup = 54067CFB7D564E5764FA17DC /* love */;
-			projectDirPath = "";
-			projectRoot = "";
-			targets = (
-				FA577AAE16C7507900860150 /* Framework */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
-		FA577AAD16C7507900860150 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-		FA577AAA16C7507900860150 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				FA08F5B016C752F900F007B5 /* Source.cpp in Sources */,
-				FA08F5B116C752F900F007B5 /* wrap_Audio.cpp in Sources */,
-				FA08F5B216C752F900F007B5 /* wrap_Source.cpp in Sources */,
-				FA08F5B316C752FC00F007B5 /* Audio.cpp in Sources */,
-				FA08F5B416C7530100F007B5 /* Audio.cpp in Sources */,
-				FA08F5B516C7530100F007B5 /* Source.cpp in Sources */,
-				FAF6705118184FF800DBDEEA /* wuff_internal.c in Sources */,
-				FA08F5B616C7530A00F007B5 /* Audio.cpp in Sources */,
-				FA08F5B716C7530A00F007B5 /* Pool.cpp in Sources */,
-				FA08F5B816C7530A00F007B5 /* Source.cpp in Sources */,
-				FA08F5B916C7532A00F007B5 /* b64.cpp in Sources */,
-				FA08F5BA16C7532A00F007B5 /* delay.cpp in Sources */,
-				FA08F5BB16C7532A00F007B5 /* Exception.cpp in Sources */,
-				FA08F5BD16C7532A00F007B5 /* Matrix.cpp in Sources */,
-				FA08F5BE16C7532A00F007B5 /* Memoizer.cpp in Sources */,
-				FA08F5BF16C7532A00F007B5 /* Module.cpp in Sources */,
-				FA08F5C016C7532A00F007B5 /* Object.cpp in Sources */,
-				FAF670561818501300DBDEEA /* WaveDecoder.cpp in Sources */,
-				FA08F5C116C7532A00F007B5 /* Reference.cpp in Sources */,
-				FA08F5C216C7532A00F007B5 /* runtime.cpp in Sources */,
-				FA08F5C316C7532A00F007B5 /* utf8.cpp in Sources */,
-				FA08F5C416C7532A00F007B5 /* Variant.cpp in Sources */,
-				FA08F5C516C7532A00F007B5 /* Vector.cpp in Sources */,
-				FA08F5C616C7532A00F007B5 /* wrap_Data.cpp in Sources */,
-				FA08F5C716C7533C00F007B5 /* b2BroadPhase.cpp in Sources */,
-				FA08F5C816C7533C00F007B5 /* b2CollideCircle.cpp in Sources */,
-				FA08F5C916C7533C00F007B5 /* b2CollideEdge.cpp in Sources */,
-				FA08F5CA16C7533C00F007B5 /* b2CollidePolygon.cpp in Sources */,
-				FA08F5CB16C7533C00F007B5 /* b2Collision.cpp in Sources */,
-				FA08F5CC16C7533C00F007B5 /* b2Distance.cpp in Sources */,
-				FA08F5CD16C7533C00F007B5 /* b2DynamicTree.cpp in Sources */,
-				FA08F5CE16C7533C00F007B5 /* b2TimeOfImpact.cpp in Sources */,
-				FA08F5CF16C7534400F007B5 /* b2ChainShape.cpp in Sources */,
-				FA08F5D016C7534400F007B5 /* b2CircleShape.cpp in Sources */,
-				FA08F5D116C7534400F007B5 /* b2EdgeShape.cpp in Sources */,
-				FA08F5D216C7534400F007B5 /* b2PolygonShape.cpp in Sources */,
-				FA08F5D316C7535000F007B5 /* b2BlockAllocator.cpp in Sources */,
-				FA08F5D416C7535000F007B5 /* b2Draw.cpp in Sources */,
-				FA0A4BF4182E1AD600E1E4D2 /* MotorJoint.cpp in Sources */,
-				FA08F5D516C7535000F007B5 /* b2Math.cpp in Sources */,
-				FA08F5D616C7535000F007B5 /* b2Settings.cpp in Sources */,
-				FA08F5D716C7535000F007B5 /* b2StackAllocator.cpp in Sources */,
-				FA08F5D816C7535000F007B5 /* b2Timer.cpp in Sources */,
-				FA08F5D916C7536C00F007B5 /* b2Body.cpp in Sources */,
-				FA08F5DA16C7536C00F007B5 /* b2ContactManager.cpp in Sources */,
-				FA08F5DB16C7536C00F007B5 /* b2Fixture.cpp in Sources */,
-				FA08F5DC16C7536C00F007B5 /* b2Island.cpp in Sources */,
-				FA08F5DD16C7536C00F007B5 /* b2World.cpp in Sources */,
-				FA08F5DE16C7536C00F007B5 /* b2WorldCallbacks.cpp in Sources */,
-				FA08F5DF16C7537B00F007B5 /* b2ChainAndCircleContact.cpp in Sources */,
-				FA08F5E016C7537B00F007B5 /* b2ChainAndPolygonContact.cpp in Sources */,
-				FA08F5E116C7537B00F007B5 /* b2CircleContact.cpp in Sources */,
-				FA08F5E216C7537B00F007B5 /* b2Contact.cpp in Sources */,
-				FA08F5E316C7537B00F007B5 /* b2ContactSolver.cpp in Sources */,
-				FA08F5E416C7537B00F007B5 /* b2EdgeAndCircleContact.cpp in Sources */,
-				FA08F5E516C7537B00F007B5 /* b2EdgeAndPolygonContact.cpp in Sources */,
-				FA08F5E616C7537B00F007B5 /* b2PolygonAndCircleContact.cpp in Sources */,
-				FA08F5E716C7537B00F007B5 /* b2PolygonContact.cpp in Sources */,
-				FA08F5E816C7538F00F007B5 /* b2DistanceJoint.cpp in Sources */,
-				FA08F5E916C7538F00F007B5 /* b2FrictionJoint.cpp in Sources */,
-				FA08F5EA16C7538F00F007B5 /* b2GearJoint.cpp in Sources */,
-				FA08F5EB16C7538F00F007B5 /* b2Joint.cpp in Sources */,
-				FA08F5EC16C7538F00F007B5 /* b2MouseJoint.cpp in Sources */,
-				FA08F5ED16C7538F00F007B5 /* b2PrismaticJoint.cpp in Sources */,
-				FAF6705318184FF800DBDEEA /* wuff_memory.c in Sources */,
-				FA08F5EE16C7538F00F007B5 /* b2PulleyJoint.cpp in Sources */,
-				FA08F5EF16C7538F00F007B5 /* b2RevoluteJoint.cpp in Sources */,
-				FA08F5F016C7538F00F007B5 /* b2RopeJoint.cpp in Sources */,
-				FA08F5F116C7538F00F007B5 /* b2WeldJoint.cpp in Sources */,
-				FA08F5F216C7538F00F007B5 /* b2WheelJoint.cpp in Sources */,
-				FA08F5F316C7539B00F007B5 /* b2Rope.cpp in Sources */,
-				FA08F5F416C753A400F007B5 /* luasocket.cpp in Sources */,
-				FA08F5F516C753B800F007B5 /* auxiliar.c in Sources */,
-				FA08F5F616C753B800F007B5 /* buffer.c in Sources */,
-				FAF6704F18184FF800DBDEEA /* wuff_convert.c in Sources */,
-				FA08F5F716C753B800F007B5 /* except.c in Sources */,
-				FA08F5F816C753B800F007B5 /* inet.c in Sources */,
-				FA08F5F916C753B800F007B5 /* io.c in Sources */,
-				FA08F5FA16C753B800F007B5 /* luasocket.c in Sources */,
-				FA08F5FB16C753B800F007B5 /* mime.c in Sources */,
-				FA08F5FC16C753B800F007B5 /* options.c in Sources */,
-				FA08F5FD16C753B800F007B5 /* select.c in Sources */,
-				FA08F5FE16C753B800F007B5 /* tcp.c in Sources */,
-				FA08F5FF16C753B800F007B5 /* timeout.c in Sources */,
-				FA08F60016C753B800F007B5 /* udp.c in Sources */,
-				FA08F60116C753B800F007B5 /* unix.c in Sources */,
-				FA08F60216C753B800F007B5 /* usocket.c in Sources */,
-				FA08F60316C753CE00F007B5 /* Event.cpp in Sources */,
-				FA08F60416C753CE00F007B5 /* Event.cpp in Sources */,
-				FA08F60516C753CE00F007B5 /* wrap_Event.cpp in Sources */,
-				FA08F60616C753DB00F007B5 /* File.cpp in Sources */,
-				FA08F60716C753DB00F007B5 /* FileData.cpp in Sources */,
-				FA08F60816C753DB00F007B5 /* File.cpp in Sources */,
-				FA08F60916C753DB00F007B5 /* Filesystem.cpp in Sources */,
-				FA08F60A16C753DB00F007B5 /* wrap_File.cpp in Sources */,
-				FA08F60B16C753DB00F007B5 /* wrap_FileData.cpp in Sources */,
-				FA08F60C16C753DB00F007B5 /* wrap_Filesystem.cpp in Sources */,
-				FA08F60D16C753E700F007B5 /* Font.cpp in Sources */,
-				FA08F60E16C753E700F007B5 /* TrueTypeRasterizer.cpp in Sources */,
-				FA08F60F16C753E700F007B5 /* wrap_Font.cpp in Sources */,
-				FA08F61016C753E700F007B5 /* GlyphData.cpp in Sources */,
-				FA08F61116C753E700F007B5 /* ImageRasterizer.cpp in Sources */,
-				FA08F61216C753E700F007B5 /* Rasterizer.cpp in Sources */,
-				FA08F61316C753E700F007B5 /* wrap_GlyphData.cpp in Sources */,
-				FA08F61416C753E700F007B5 /* wrap_Rasterizer.cpp in Sources */,
-				FA08F61716C753F600F007B5 /* Graphics.cpp in Sources */,
-				FA08F61816C753F600F007B5 /* Texture.cpp in Sources */,
-				FA08F61A16C753F600F007B5 /* Volatile.cpp in Sources */,
-				FA08F61B16C7541400F007B5 /* Canvas.cpp in Sources */,
-				FA08F61C16C7541400F007B5 /* Font.cpp in Sources */,
-				FA08F61D16C7541400F007B5 /* GLee.c in Sources */,
-				FA08F61E16C7541400F007B5 /* Graphics.cpp in Sources */,
-				FAF4376F17F4AC530074F9E2 /* Mesh.cpp in Sources */,
-				FA08F61F16C7541400F007B5 /* Image.cpp in Sources */,
-				FA08F62016C7541400F007B5 /* OpenGL.cpp in Sources */,
-				FA08F62116C7541400F007B5 /* ParticleSystem.cpp in Sources */,
-				FA08F62316C7541400F007B5 /* Shader.cpp in Sources */,
-				FA08F62416C7541400F007B5 /* SpriteBatch.cpp in Sources */,
-				FA08F62516C7541400F007B5 /* VertexBuffer.cpp in Sources */,
-				FA08F62616C7541400F007B5 /* wrap_Canvas.cpp in Sources */,
-				FA08F62716C7541400F007B5 /* wrap_Font.cpp in Sources */,
-				FA08F62816C7541400F007B5 /* wrap_Graphics.cpp in Sources */,
-				FA08F62916C7541400F007B5 /* wrap_Image.cpp in Sources */,
-				FA08F62A16C7541400F007B5 /* wrap_ParticleSystem.cpp in Sources */,
-				FA08F62C16C7541400F007B5 /* wrap_Shader.cpp in Sources */,
-				FA0A4BFA182E26F500E1E4D2 /* wrap_MotorJoint.cpp in Sources */,
-				FA08F62D16C7541400F007B5 /* wrap_SpriteBatch.cpp in Sources */,
-				FA08F62E16C7542600F007B5 /* ImageData.cpp in Sources */,
-				FA08F62F16C7542600F007B5 /* Image.cpp in Sources */,
-				FA08F63016C7542600F007B5 /* DevilHandler.cpp in Sources */,
-				FA08F63116C7542600F007B5 /* wrap_Image.cpp in Sources */,
-				FA08F63216C7542600F007B5 /* wrap_ImageData.cpp in Sources */,
-				FA08F63416C7542D00F007B5 /* JoystickModule.cpp in Sources */,
-				FA7AA59217F6AC1F00704BE2 /* wrap_Mesh.cpp in Sources */,
-				FA08F63516C7542D00F007B5 /* wrap_JoystickModule.cpp in Sources */,
-				FA08F63616C7543400F007B5 /* Keyboard.cpp in Sources */,
-				FA08F63716C7543400F007B5 /* Keyboard.cpp in Sources */,
-				FA08F63816C7543400F007B5 /* wrap_Keyboard.cpp in Sources */,
-				FA08F63916C7543A00F007B5 /* love.cpp in Sources */,
-				FA08F63A16C7544300F007B5 /* Mouse.cpp in Sources */,
-				FA08F63B16C7544300F007B5 /* Mouse.cpp in Sources */,
-				FA08F63C16C7544300F007B5 /* wrap_Mouse.cpp in Sources */,
-				FA08F63D16C7544B00F007B5 /* Body.cpp in Sources */,
-				FA08F63E16C7544B00F007B5 /* Joint.cpp in Sources */,
-				FA08F63F16C7544B00F007B5 /* Shape.cpp in Sources */,
-				FA08F64016C7546400F007B5 /* Body.cpp in Sources */,
-				FA08F64116C7546400F007B5 /* ChainShape.cpp in Sources */,
-				FA08F64216C7546400F007B5 /* CircleShape.cpp in Sources */,
-				FA08F64316C7546400F007B5 /* Contact.cpp in Sources */,
-				FA08F64416C7546400F007B5 /* DistanceJoint.cpp in Sources */,
-				FA08F64516C7546400F007B5 /* EdgeShape.cpp in Sources */,
-				FA08F64616C7546400F007B5 /* Fixture.cpp in Sources */,
-				FA08F64716C7546400F007B5 /* FrictionJoint.cpp in Sources */,
-				FA08F64816C7546400F007B5 /* GearJoint.cpp in Sources */,
-				FA08F64916C7546400F007B5 /* Joint.cpp in Sources */,
-				FA08F64A16C7546400F007B5 /* MouseJoint.cpp in Sources */,
-				FA08F64B16C7546400F007B5 /* Physics.cpp in Sources */,
-				FA08F64C16C7546400F007B5 /* PolygonShape.cpp in Sources */,
-				FA08F64D16C7546400F007B5 /* PrismaticJoint.cpp in Sources */,
-				FA08F64E16C7546400F007B5 /* PulleyJoint.cpp in Sources */,
-				FA08F64F16C7546400F007B5 /* RevoluteJoint.cpp in Sources */,
-				FA08F65016C7546400F007B5 /* RopeJoint.cpp in Sources */,
-				FA08F65116C7546400F007B5 /* Shape.cpp in Sources */,
-				FA08F65216C7547300F007B5 /* WeldJoint.cpp in Sources */,
-				FAF6704C18184FF800DBDEEA /* wuff.c in Sources */,
-				FA08F65316C7547300F007B5 /* WheelJoint.cpp in Sources */,
-				FA08F65416C7547300F007B5 /* World.cpp in Sources */,
-				FA08F65516C7547300F007B5 /* wrap_Body.cpp in Sources */,
-				FA08F65616C7547300F007B5 /* wrap_ChainShape.cpp in Sources */,
-				FA08F65716C7547300F007B5 /* wrap_CircleShape.cpp in Sources */,
-				FA08F65816C7547300F007B5 /* wrap_Contact.cpp in Sources */,
-				FA08F65916C7547300F007B5 /* wrap_DistanceJoint.cpp in Sources */,
-				FA08F65A16C7547300F007B5 /* wrap_EdgeShape.cpp in Sources */,
-				FA08F65B16C7547300F007B5 /* wrap_Fixture.cpp in Sources */,
-				FA08F65C16C7547300F007B5 /* wrap_FrictionJoint.cpp in Sources */,
-				FA08F65D16C7548200F007B5 /* wrap_GearJoint.cpp in Sources */,
-				FA08F65E16C7548200F007B5 /* wrap_Joint.cpp in Sources */,
-				FA08F65F16C7548200F007B5 /* wrap_MouseJoint.cpp in Sources */,
-				FA08F66016C7548200F007B5 /* wrap_Physics.cpp in Sources */,
-				FA08F66116C7548200F007B5 /* wrap_PolygonShape.cpp in Sources */,
-				FA08F66216C7548200F007B5 /* wrap_PrismaticJoint.cpp in Sources */,
-				FA08F66316C7548200F007B5 /* wrap_PulleyJoint.cpp in Sources */,
-				FA08F66416C7548200F007B5 /* wrap_RevoluteJoint.cpp in Sources */,
-				FA08F66516C7548200F007B5 /* wrap_RopeJoint.cpp in Sources */,
-				FA08F66616C7548200F007B5 /* wrap_Shape.cpp in Sources */,
-				FA08F66716C7548200F007B5 /* wrap_WeldJoint.cpp in Sources */,
-				FA08F66816C7548200F007B5 /* wrap_WheelJoint.cpp in Sources */,
-				FA08F66916C7548200F007B5 /* wrap_World.cpp in Sources */,
-				FA08F66A16C7549200F007B5 /* Sound.cpp in Sources */,
-				FADD58DD18C30367005FC3BF /* FormatHandler.cpp in Sources */,
-				FA08F66B16C7549200F007B5 /* SoundData.cpp in Sources */,
-				FA08F66C16C7549200F007B5 /* wrap_Decoder.cpp in Sources */,
-				FA08F66D16C7549200F007B5 /* wrap_Sound.cpp in Sources */,
-				FA08F66E16C7549200F007B5 /* wrap_SoundData.cpp in Sources */,
-				FA08F66F16C754A100F007B5 /* Decoder.cpp in Sources */,
-				FA08F67016C754A100F007B5 /* FLACDecoder.cpp in Sources */,
-				FA08F67116C754A100F007B5 /* GmeDecoder.cpp in Sources */,
-				FA08F67216C754A100F007B5 /* ModPlugDecoder.cpp in Sources */,
-				FA08F67316C754A100F007B5 /* Mpg123Decoder.cpp in Sources */,
-				FA08F67416C754A100F007B5 /* Sound.cpp in Sources */,
-				FA08F67516C754A100F007B5 /* VorbisDecoder.cpp in Sources */,
-				FA08F67716C754A900F007B5 /* threads.cpp in Sources */,
-				FA08F67916C754B100F007B5 /* Timer.cpp in Sources */,
-				FA08F67A16C754B100F007B5 /* wrap_Timer.cpp in Sources */,
-				FA08F67B16C754BA00F007B5 /* Window.cpp in Sources */,
-				FA08F67C16C754BA00F007B5 /* Window.cpp in Sources */,
-				FA7C937A16DCC6C2006F2BEE /* wrap_Math.cpp in Sources */,
-				FAF272A416E3D44400CC193A /* Channel.cpp in Sources */,
-				FAF272A616E3D44400CC193A /* LuaThread.cpp in Sources */,
-				FA0A4BF0182E0C2800E1E4D2 /* b2MotorJoint.cpp in Sources */,
-				FAF272A816E3D44400CC193A /* ThreadModule.cpp in Sources */,
-				FA01BE1E1878E35B00640047 /* wrap_Texture.cpp in Sources */,
-				FAF272AA16E3D44400CC193A /* wrap_Channel.cpp in Sources */,
-				FAF272AC16E3D44400CC193A /* wrap_LuaThread.cpp in Sources */,
-				FAF272AE16E3D44400CC193A /* wrap_ThreadModule.cpp in Sources */,
-				FAF272B516E3D46400CC193A /* Thread.cpp in Sources */,
-				FAF272B716E3D46400CC193A /* threads.cpp in Sources */,
-				FA5454C216F1310000D30303 /* MathModule.cpp in Sources */,
-				FAAC6B02170A373B008A61C5 /* CompressedData.cpp in Sources */,
-				FAE010DC170DDE99006F29D0 /* ddsparse.cpp in Sources */,
-				FAE010E0170DE25E006F29D0 /* ddsHandler.cpp in Sources */,
-				FAE010E4170DF75C006F29D0 /* wrap_CompressedData.cpp in Sources */,
-				FAEC808A1710FEA60057279A /* ImageData.cpp in Sources */,
-				FAEC808E1711E76C0057279A /* CompressedData.cpp in Sources */,
-				FA636D8A171B70920065623F /* RandomGenerator.cpp in Sources */,
-				FA636D8E171B72A70065623F /* wrap_RandomGenerator.cpp in Sources */,
-				FAC86E631724552C00EED715 /* wrap_Quad.cpp in Sources */,
-				FAC86E6B1724555D00EED715 /* Quad.cpp in Sources */,
-				FA03546C1731F3A700284828 /* simplexnoise1234.cpp in Sources */,
-				FA3D9E0D16E68DE600CA6630 /* Cursor.cpp in Sources */,
-				FA3D9E1116E68EAE00CA6630 /* Cursor.cpp in Sources */,
-				FA3D9E1516E6D41100CA6630 /* wrap_Cursor.cpp in Sources */,
-				FA9FC0B0173D6E3E005027FF /* wrap_Window.cpp in Sources */,
-				FAB0078F1740C12D00A9664D /* Joystick.cpp in Sources */,
-				FAB007931740C28900A9664D /* Joystick.cpp in Sources */,
-				FAA0A45F1A704016009487CB /* lutf8lib.c in Sources */,
-				FAB007971740C87D00A9664D /* wrap_Joystick.cpp in Sources */,
-				FAC5710017402D1100D147E4 /* BezierCurve.cpp in Sources */,
-				FAC5710217402D1100D147E4 /* wrap_BezierCurve.cpp in Sources */,
-				FA5FDC791788D548002F0ED2 /* enet.cpp in Sources */,
-				FA5FDC7A1788D548002F0ED2 /* callbacks.c in Sources */,
-				FA5FDC7C1788D548002F0ED2 /* compress.c in Sources */,
-				FA5FDC7D1788D548002F0ED2 /* host.c in Sources */,
-				FA5FDC881788D548002F0ED2 /* list.c in Sources */,
-				FA5FDC891788D548002F0ED2 /* packet.c in Sources */,
-				FA5FDC8A1788D548002F0ED2 /* peer.c in Sources */,
-				FA5FDC8B1788D548002F0ED2 /* protocol.c in Sources */,
-				FA5FDC8D1788D548002F0ED2 /* unix.c in Sources */,
-				FA5FDC8E1788D548002F0ED2 /* win32.c in Sources */,
-				FA34E7CD174B513F00E04D3F /* System.cpp in Sources */,
-				FA34E7D2174B515D00E04D3F /* System.cpp in Sources */,
-				FA1EF7C41799FEAC00FF380C /* wrap_System.cpp in Sources */,
-				FA435EA317B36E9C004C3F22 /* Polyline.cpp in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin XCBuildConfiguration section */
-		10D5479E63C26BB35EB5482E /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
-				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
-				CLANG_ENABLE_MODULES = YES;
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
-				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INT_CONVERSION = YES;
-				DEAD_CODE_STRIPPING = YES;
-				FRAMEWORK_SEARCH_PATHS = /Library/Frameworks;
-				GCC_OPTIMIZATION_LEVEL = 3;
-				GCC_PREPROCESSOR_DEFINITIONS = LOVE_MACOSX_USE_FRAMEWORKS;
-				GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
-				GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
-				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
-				GCC_WARN_SIGN_COMPARE = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES;
-				GCC_WARN_UNUSED_PARAMETER = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				HEADER_SEARCH_PATHS = (
-					"\"$(SRCROOT)/../../src\"",
-					"\"$(SRCROOT)/../../src/libraries\"",
-					"\"$(SRCROOT)/../../src/modules\"",
-					"\"$(SRCROOT)/../../src/libraries/enet/libenet/include\"",
-					/Library/Frameworks/FreeType.framework/Headers,
-					/Library/Frameworks/Lua.framework/Headers,
-					/Library/Frameworks/SDL2.framework/Headers,
-				);
-				LD_RUNPATH_SEARCH_PATHS = "@rpath";
-				LIBRARY_SEARCH_PATHS = "";
-				MACOSX_DEPLOYMENT_TARGET = 10.6;
-				ONLY_ACTIVE_ARCH = NO;
-				SDKROOT = macosx;
-				USE_HEADERMAP = NO;
-				WARNING_CFLAGS = "-Wall";
-			};
-			name = Release;
-		};
-		64274E785071353E1A1D0D4B /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
-				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
-				CLANG_ENABLE_MODULES = YES;
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
-				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INT_CONVERSION = YES;
-				COPY_PHASE_STRIP = NO;
-				FRAMEWORK_SEARCH_PATHS = /Library/Frameworks;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PREPROCESSOR_DEFINITIONS = LOVE_MACOSX_USE_FRAMEWORKS;
-				GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
-				GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
-				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
-				GCC_WARN_SIGN_COMPARE = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES;
-				GCC_WARN_UNUSED_PARAMETER = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				HEADER_SEARCH_PATHS = (
-					"\"$(SRCROOT)/../../src\"",
-					"\"$(SRCROOT)/../../src/libraries\"",
-					"\"$(SRCROOT)/../../src/modules\"",
-					"\"$(SRCROOT)/../../src/libraries/enet/libenet/include\"",
-					/Library/Frameworks/FreeType.framework/Headers,
-					/Library/Frameworks/Lua.framework/Headers,
-					/Library/Frameworks/SDL2.framework/Headers,
-				);
-				LD_RUNPATH_SEARCH_PATHS = "@rpath";
-				LIBRARY_SEARCH_PATHS = "";
-				MACOSX_DEPLOYMENT_TARGET = 10.6;
-				ONLY_ACTIVE_ARCH = YES;
-				SDKROOT = macosx;
-				USE_HEADERMAP = NO;
-				WARNING_CFLAGS = "-Wall";
-			};
-			name = Debug;
-		};
-		FA5326C4189719C700F7BBF4 /* Distribution */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
-				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
-				CLANG_ENABLE_MODULES = YES;
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
-				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INT_CONVERSION = YES;
-				DEAD_CODE_STRIPPING = YES;
-				FRAMEWORK_SEARCH_PATHS = /Library/Frameworks;
-				GCC_OPTIMIZATION_LEVEL = 3;
-				GCC_PREPROCESSOR_DEFINITIONS = LOVE_MACOSX_USE_FRAMEWORKS;
-				GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
-				GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
-				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
-				GCC_WARN_SIGN_COMPARE = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES;
-				GCC_WARN_UNUSED_PARAMETER = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				HEADER_SEARCH_PATHS = (
-					"\"$(SRCROOT)/../../src\"",
-					"\"$(SRCROOT)/../../src/libraries\"",
-					"\"$(SRCROOT)/../../src/modules\"",
-					"\"$(SRCROOT)/../../src/libraries/enet/libenet/include\"",
-					/Library/Frameworks/FreeType.framework/Headers,
-					/Library/Frameworks/Lua.framework/Headers,
-					/Library/Frameworks/SDL2.framework/Headers,
-				);
-				LD_RUNPATH_SEARCH_PATHS = "@rpath";
-				LIBRARY_SEARCH_PATHS = "";
-				LLVM_LTO = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.6;
-				ONLY_ACTIVE_ARCH = NO;
-				SDKROOT = macosx;
-				USE_HEADERMAP = NO;
-				WARNING_CFLAGS = "-Wall";
-			};
-			name = Distribution;
-		};
-		FA5326C5189719C700F7BBF4 /* Distribution */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_ENABLE_MODULES = NO;
-				COMBINE_HIDPI_IMAGES = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				DYLIB_COMPATIBILITY_VERSION = 9.0;
-				DYLIB_CURRENT_VERSION = 9.0;
-				FRAMEWORK_VERSION = A;
-				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-				INFOPLIST_FILE = "Info-Framework.plist";
-				LD_DYLIB_INSTALL_NAME = "@rpath/$(EXECUTABLE_PATH)";
-				OTHER_LDFLAGS = (
-					"-undefined",
-					dynamic_lookup,
-				);
-				PRODUCT_NAME = love;
-				SKIP_INSTALL = YES;
-				WRAPPER_EXTENSION = framework;
-			};
-			name = Distribution;
-		};
-		FA577AC016C7507900860150 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_ENABLE_MODULES = NO;
-				COMBINE_HIDPI_IMAGES = YES;
-				DYLIB_COMPATIBILITY_VERSION = 9.0;
-				DYLIB_CURRENT_VERSION = 9.0;
-				FRAMEWORK_VERSION = A;
-				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-				GCC_PREPROCESSOR_DEFINITIONS = (
-					"DEBUG=1",
-					"$(inherited)",
-				);
-				INFOPLIST_FILE = "Info-Framework.plist";
-				LD_DYLIB_INSTALL_NAME = "@rpath/$(EXECUTABLE_PATH)";
-				OTHER_LDFLAGS = (
-					"-undefined",
-					dynamic_lookup,
-				);
-				PRODUCT_NAME = love;
-				SKIP_INSTALL = YES;
-				WRAPPER_EXTENSION = framework;
-			};
-			name = Debug;
-		};
-		FA577AC116C7507900860150 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_ENABLE_MODULES = NO;
-				COMBINE_HIDPI_IMAGES = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				DYLIB_COMPATIBILITY_VERSION = 9.0;
-				DYLIB_CURRENT_VERSION = 9.0;
-				FRAMEWORK_VERSION = A;
-				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
-				INFOPLIST_FILE = "Info-Framework.plist";
-				LD_DYLIB_INSTALL_NAME = "@rpath/$(EXECUTABLE_PATH)";
-				OTHER_LDFLAGS = (
-					"-undefined",
-					dynamic_lookup,
-				);
-				PRODUCT_NAME = love;
-				SKIP_INSTALL = YES;
-				WRAPPER_EXTENSION = framework;
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "love-framework" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				64274E785071353E1A1D0D4B /* Debug */,
-				10D5479E63C26BB35EB5482E /* Release */,
-				FA5326C4189719C700F7BBF4 /* Distribution */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		FA577ABF16C7507900860150 /* Build configuration list for PBXNativeTarget "Framework" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				FA577AC016C7507900860150 /* Debug */,
-				FA577AC116C7507900860150 /* Release */,
-				FA5326C5189719C700F7BBF4 /* Distribution */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
-}

+ 0 - 508
platform/macosx/love.xcodeproj/project.pbxproj

@@ -1,508 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 46;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
-		A9255DD11043183600BA1496 /* FreeType.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A93E6E4810420B4A007D418B /* FreeType.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
-		A9255DD31043183600BA1496 /* Lua.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A93E6E5310420B57007D418B /* Lua.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
-		A9255E031043195A00BA1496 /* Vorbis.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A9255E021043195A00BA1496 /* Vorbis.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
-		A9255F431043240F00BA1496 /* IL.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A9255F421043240F00BA1496 /* IL.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
-		A9255F58104324E100BA1496 /* Ogg.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A9255F51104324D700BA1496 /* Ogg.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
-		A93E6E5510420B57007D418B /* Lua.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A93E6E5310420B57007D418B /* Lua.framework */; };
-		A93E6EED10420BA8007D418B /* love.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E6A3410420AC0007D418B /* love.cpp */; };
-		A9D307F2106635D3004FEDF8 /* physfs.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A9D307E9106635C3004FEDF8 /* physfs.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
-		A9DEC1C11046EFA70049C70C /* Love.icns in Resources */ = {isa = PBXBuildFile; fileRef = A9DEC1BF1046EFA60049C70C /* Love.icns */; };
-		A9DEC1C21046EFA70049C70C /* LoveDocument.icns in Resources */ = {isa = PBXBuildFile; fileRef = A9DEC1C01046EFA70049C70C /* LoveDocument.icns */; };
-		A9F169AC109E825000FC83D1 /* mpg123.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A9F169A6109E824900FC83D1 /* mpg123.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
-		A9F169AD109E825000FC83D1 /* libmodplug.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A9F16926109E7BAD00FC83D1 /* libmodplug.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
-		FA08F69616C766E000F007B5 /* love.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA08F69116C765A200F007B5 /* love.framework */; };
-		FA08F69716C766E700F007B5 /* love.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = FA08F69116C765A200F007B5 /* love.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
-		FA9B4A0A16E1579F00074F42 /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA9B4A0916E1579F00074F42 /* SDL2.framework */; };
-		FA9B4A0B16E157B500074F42 /* SDL2.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = FA9B4A0916E1579F00074F42 /* SDL2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
-		FAAFF04716CB120000CCDE45 /* OpenAL-Soft.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = FAAFF04616CB120000CCDE45 /* OpenAL-Soft.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
-		FAC1A449196F5DC600125284 /* license.txt in Resources */ = {isa = PBXBuildFile; fileRef = FAC1A448196F5DC600125284 /* license.txt */; };
-		FAC8E8D416F3C468004DADF3 /* OSX.mm in Sources */ = {isa = PBXBuildFile; fileRef = FAC8E8D316F3C468004DADF3 /* OSX.mm */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
-		FA08F6A616C77A4300F007B5 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = FA577A9316C7217800860150 /* love-framework.xcodeproj */;
-			proxyType = 2;
-			remoteGlobalIDString = FA577AAF16C7507900860150;
-			remoteInfo = "love framework";
-		};
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXCopyFilesBuildPhase section */
-		A9255DDE1043185300BA1496 /* Copy Frameworks */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				FA08F69716C766E700F007B5 /* love.framework in Copy Frameworks */,
-				FA9B4A0B16E157B500074F42 /* SDL2.framework in Copy Frameworks */,
-				FAAFF04716CB120000CCDE45 /* OpenAL-Soft.framework in Copy Frameworks */,
-				A9F169AC109E825000FC83D1 /* mpg123.framework in Copy Frameworks */,
-				A9F169AD109E825000FC83D1 /* libmodplug.framework in Copy Frameworks */,
-				A9D307F2106635D3004FEDF8 /* physfs.framework in Copy Frameworks */,
-				A9255F58104324E100BA1496 /* Ogg.framework in Copy Frameworks */,
-				A9255F431043240F00BA1496 /* IL.framework in Copy Frameworks */,
-				A9255E031043195A00BA1496 /* Vorbis.framework in Copy Frameworks */,
-				A9255DD11043183600BA1496 /* FreeType.framework in Copy Frameworks */,
-				A9255DD31043183600BA1496 /* Lua.framework in Copy Frameworks */,
-			);
-			name = "Copy Frameworks";
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
-		1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
-		8D1107320486CEB800E47090 /* love.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = love.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		A9255E021043195A00BA1496 /* Vorbis.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Vorbis.framework; path = /Library/Frameworks/Vorbis.framework; sourceTree = "<absolute>"; };
-		A9255F421043240F00BA1496 /* IL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IL.framework; path = /Library/Frameworks/IL.framework; sourceTree = "<absolute>"; };
-		A9255F51104324D700BA1496 /* Ogg.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Ogg.framework; path = /Library/Frameworks/Ogg.framework; sourceTree = "<absolute>"; };
-		A93E6A3410420AC0007D418B /* love.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = love.cpp; path = ../../src/love.cpp; sourceTree = "<group>"; };
-		A93E6E4710420B4A007D418B /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
-		A93E6E4810420B4A007D418B /* FreeType.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FreeType.framework; path = /Library/Frameworks/FreeType.framework; sourceTree = "<absolute>"; };
-		A93E6E5310420B57007D418B /* Lua.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Lua.framework; path = /Library/Frameworks/Lua.framework; sourceTree = "<absolute>"; };
-		A97E3842132A9EDE00198A2F /* love-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "love-Info.plist"; sourceTree = "<group>"; };
-		A9D307E9106635C3004FEDF8 /* physfs.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = physfs.framework; path = /Library/Frameworks/physfs.framework; sourceTree = "<absolute>"; };
-		A9DEC1BF1046EFA60049C70C /* Love.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = Love.icns; path = icons/Love.icns; sourceTree = "<group>"; };
-		A9DEC1C01046EFA70049C70C /* LoveDocument.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = LoveDocument.icns; path = icons/LoveDocument.icns; sourceTree = "<group>"; };
-		A9F16926109E7BAD00FC83D1 /* libmodplug.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = libmodplug.framework; path = /Library/Frameworks/libmodplug.framework; sourceTree = "<absolute>"; };
-		A9F169A6109E824900FC83D1 /* mpg123.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = mpg123.framework; path = /Library/Frameworks/mpg123.framework; sourceTree = "<absolute>"; };
-		FA08F69116C765A200F007B5 /* love.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = love.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		FA577A9316C7217800860150 /* love-framework.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = "love-framework.xcodeproj"; sourceTree = "<group>"; };
-		FA9B4A0916E1579F00074F42 /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = /Library/Frameworks/SDL2.framework; sourceTree = "<absolute>"; };
-		FAAFF04616CB120000CCDE45 /* OpenAL-Soft.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = "OpenAL-Soft.framework"; path = "/Library/Frameworks/OpenAL-Soft.framework"; sourceTree = "<absolute>"; };
-		FAC1A448196F5DC600125284 /* license.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = license.txt; path = ../../license.txt; sourceTree = "<group>"; };
-		FAC8E8D316F3C468004DADF3 /* OSX.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OSX.mm; sourceTree = "<group>"; };
-		FAC8E8D616F3C46E004DADF3 /* OSX.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSX.h; sourceTree = "<group>"; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		8D11072E0486CEB800E47090 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				FA08F69616C766E000F007B5 /* love.framework in Frameworks */,
-				8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
-				A93E6E5510420B57007D418B /* Lua.framework in Frameworks */,
-				FA9B4A0A16E1579F00074F42 /* SDL2.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		1058C7A0FEA54F0111CA2CBB /* Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				FA9B4A0916E1579F00074F42 /* SDL2.framework */,
-				1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
-				A93E6E4810420B4A007D418B /* FreeType.framework */,
-				A9255F421043240F00BA1496 /* IL.framework */,
-				A9F16926109E7BAD00FC83D1 /* libmodplug.framework */,
-				FA08F69116C765A200F007B5 /* love.framework */,
-				A93E6E5310420B57007D418B /* Lua.framework */,
-				A9F169A6109E824900FC83D1 /* mpg123.framework */,
-				A9255F51104324D700BA1496 /* Ogg.framework */,
-				FAAFF04616CB120000CCDE45 /* OpenAL-Soft.framework */,
-				A93E6E4710420B4A007D418B /* OpenGL.framework */,
-				A9D307E9106635C3004FEDF8 /* physfs.framework */,
-				A9255E021043195A00BA1496 /* Vorbis.framework */,
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-		19C28FACFE9D520D11CA2CBB /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				8D1107320486CEB800E47090 /* love.app */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		29B97314FDCFA39411CA2CEA /* love */ = {
-			isa = PBXGroup;
-			children = (
-				FA577A9D16C7262E00860150 /* Source */,
-				1058C7A0FEA54F0111CA2CBB /* Frameworks */,
-				29B97317FDCFA39411CA2CEA /* Resources */,
-				19C28FACFE9D520D11CA2CBB /* Products */,
-				FA577A9316C7217800860150 /* love-framework.xcodeproj */,
-			);
-			name = love;
-			sourceTree = "<group>";
-			usesTabs = 1;
-		};
-		29B97317FDCFA39411CA2CEA /* Resources */ = {
-			isa = PBXGroup;
-			children = (
-				FAC1A448196F5DC600125284 /* license.txt */,
-				A97E3842132A9EDE00198A2F /* love-Info.plist */,
-				A9DEC1BF1046EFA60049C70C /* Love.icns */,
-				A9DEC1C01046EFA70049C70C /* LoveDocument.icns */,
-			);
-			name = Resources;
-			sourceTree = "<group>";
-		};
-		FA08F6A316C77A4300F007B5 /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				FA08F6A716C77A4300F007B5 /* love.framework */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		FA577A9D16C7262E00860150 /* Source */ = {
-			isa = PBXGroup;
-			children = (
-				A93E6A3410420AC0007D418B /* love.cpp */,
-				FAC8E8D616F3C46E004DADF3 /* OSX.h */,
-				FAC8E8D316F3C468004DADF3 /* OSX.mm */,
-			);
-			name = Source;
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
-		8D1107260486CEB800E47090 /* love */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "love" */;
-			buildPhases = (
-				8D1107290486CEB800E47090 /* Resources */,
-				8D11072C0486CEB800E47090 /* Sources */,
-				A9255DDE1043185300BA1496 /* Copy Frameworks */,
-				8D11072E0486CEB800E47090 /* Frameworks */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = love;
-			productInstallPath = "$(HOME)/Applications";
-			productName = love;
-			productReference = 8D1107320486CEB800E47090 /* love.app */;
-			productType = "com.apple.product-type.application";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		29B97313FDCFA39411CA2CEA /* Project object */ = {
-			isa = PBXProject;
-			attributes = {
-				LastUpgradeCheck = 0610;
-			};
-			buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "love" */;
-			compatibilityVersion = "Xcode 3.2";
-			developmentRegion = English;
-			hasScannedForEncodings = 1;
-			knownRegions = (
-				English,
-				Japanese,
-				French,
-				German,
-			);
-			mainGroup = 29B97314FDCFA39411CA2CEA /* love */;
-			projectDirPath = "";
-			projectReferences = (
-				{
-					ProductGroup = FA08F6A316C77A4300F007B5 /* Products */;
-					ProjectRef = FA577A9316C7217800860150 /* love-framework.xcodeproj */;
-				},
-			);
-			projectRoot = "";
-			targets = (
-				8D1107260486CEB800E47090 /* love */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXReferenceProxy section */
-		FA08F6A716C77A4300F007B5 /* love.framework */ = {
-			isa = PBXReferenceProxy;
-			fileType = wrapper.framework;
-			path = love.framework;
-			remoteRef = FA08F6A616C77A4300F007B5 /* PBXContainerItemProxy */;
-			sourceTree = BUILT_PRODUCTS_DIR;
-		};
-/* End PBXReferenceProxy section */
-
-/* Begin PBXResourcesBuildPhase section */
-		8D1107290486CEB800E47090 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				FAC1A449196F5DC600125284 /* license.txt in Resources */,
-				A9DEC1C11046EFA70049C70C /* Love.icns in Resources */,
-				A9DEC1C21046EFA70049C70C /* LoveDocument.icns in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-		8D11072C0486CEB800E47090 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A93E6EED10420BA8007D418B /* love.cpp in Sources */,
-				FAC8E8D416F3C468004DADF3 /* OSX.mm in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin XCBuildConfiguration section */
-		C01FCF4B08A954540054247B /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				COMBINE_HIDPI_IMAGES = YES;
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(inherited)",
-					"\"$(SRCROOT)/build/Release\"",
-					"\"$(SRCROOT)/build/Debug\"",
-				);
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				INSTALL_PATH = /Applications;
-				PRODUCT_NAME = love;
-			};
-			name = Debug;
-		};
-		C01FCF4C08A954540054247B /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				COMBINE_HIDPI_IMAGES = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(inherited)",
-					"\"$(SRCROOT)/build/Release\"",
-					"\"$(SRCROOT)/build/Debug\"",
-				);
-				INSTALL_PATH = /Applications;
-				PRODUCT_NAME = love;
-			};
-			name = Release;
-		};
-		C01FCF4F08A954540054247B /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
-				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
-				CLANG_ENABLE_MODULES = YES;
-				FRAMEWORK_SEARCH_PATHS = /Library/Frameworks;
-				GCC_INCREASE_PRECOMPILED_HEADER_SHARING = YES;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PREPROCESSOR_DEFINITIONS = LOVE_MACOSX_USE_FRAMEWORKS;
-				GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = NO;
-				GCC_WARN_ABOUT_MISSING_NEWLINE = NO;
-				GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
-				GCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = NO;
-				GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
-				GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
-				GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
-				GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO;
-				GCC_WARN_MISSING_PARENTHESES = NO;
-				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO;
-				GCC_WARN_PEDANTIC = NO;
-				GCC_WARN_SHADOW = NO;
-				GCC_WARN_SIGN_COMPARE = YES;
-				GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				HEADER_SEARCH_PATHS = (
-					"\"$(SRCROOT)/../../src\"",
-					"\"$(SRCROOT)/../../src/libraries\"",
-					"\"$(SRCROOT)/../../src/modules\"",
-					/Library/Frameworks/Lua.framework/Headers,
-					/Library/Frameworks/SDL2.framework/Headers,
-				);
-				INFOPLIST_FILE = "love-Info.plist";
-				LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks";
-				MACOSX_DEPLOYMENT_TARGET = 10.6;
-				ONLY_ACTIVE_ARCH = YES;
-				OTHER_LDFLAGS = "";
-				"OTHER_LDFLAGS[arch=x86_64]" = (
-					"-pagezero_size",
-					10000,
-					"-image_base",
-					100000000,
-				);
-				PRODUCT_NAME = love;
-				WARNING_CFLAGS = (
-					"-Wall",
-					"-W",
-				);
-			};
-			name = Debug;
-		};
-		C01FCF5008A954540054247B /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
-				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
-				CLANG_ENABLE_MODULES = YES;
-				DEPLOYMENT_POSTPROCESSING = NO;
-				FRAMEWORK_SEARCH_PATHS = /Library/Frameworks;
-				GCC_INPUT_FILETYPE = automatic;
-				GCC_OPTIMIZATION_LEVEL = 3;
-				GCC_PREPROCESSOR_DEFINITIONS = LOVE_MACOSX_USE_FRAMEWORKS;
-				GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = NO;
-				GCC_WARN_ABOUT_MISSING_NEWLINE = NO;
-				GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
-				GCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = NO;
-				GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
-				GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
-				GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
-				GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO;
-				GCC_WARN_MISSING_PARENTHESES = NO;
-				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO;
-				GCC_WARN_PEDANTIC = NO;
-				GCC_WARN_SHADOW = NO;
-				GCC_WARN_SIGN_COMPARE = YES;
-				GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO;
-				GCC_WARN_UNUSED_PARAMETER = NO;
-				GCC_WARN_UNUSED_VALUE = NO;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				HEADER_SEARCH_PATHS = (
-					"\"$(SRCROOT)/../../src\"",
-					"\"$(SRCROOT)/../../src/libraries\"",
-					"\"$(SRCROOT)/../../src/modules\"",
-					/Library/Frameworks/Lua.framework/Headers,
-					/Library/Frameworks/SDL2.framework/Headers,
-				);
-				INFOPLIST_FILE = "love-Info.plist";
-				LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks";
-				LLVM_LTO = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.6;
-				ONLY_ACTIVE_ARCH = NO;
-				OTHER_LDFLAGS = "";
-				"OTHER_LDFLAGS[arch=x86_64]" = (
-					"-pagezero_size",
-					10000,
-					"-image_base",
-					100000000,
-				);
-				PRODUCT_NAME = love;
-				SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = YES;
-				WARNING_CFLAGS = (
-					"-Wall",
-					"-W",
-				);
-			};
-			name = Release;
-		};
-		FA5326C618971A0900F7BBF4 /* Distribution */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
-				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
-				CLANG_ENABLE_MODULES = YES;
-				DEPLOYMENT_POSTPROCESSING = NO;
-				FRAMEWORK_SEARCH_PATHS = /Library/Frameworks;
-				GCC_INPUT_FILETYPE = automatic;
-				GCC_OPTIMIZATION_LEVEL = 3;
-				GCC_PREPROCESSOR_DEFINITIONS = LOVE_MACOSX_USE_FRAMEWORKS;
-				GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = NO;
-				GCC_WARN_ABOUT_MISSING_NEWLINE = NO;
-				GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
-				GCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = NO;
-				GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
-				GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
-				GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
-				GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO;
-				GCC_WARN_MISSING_PARENTHESES = NO;
-				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO;
-				GCC_WARN_PEDANTIC = NO;
-				GCC_WARN_SHADOW = NO;
-				GCC_WARN_SIGN_COMPARE = YES;
-				GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO;
-				GCC_WARN_UNUSED_PARAMETER = NO;
-				GCC_WARN_UNUSED_VALUE = NO;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				HEADER_SEARCH_PATHS = (
-					"\"$(SRCROOT)/../../src\"",
-					"\"$(SRCROOT)/../../src/libraries\"",
-					"\"$(SRCROOT)/../../src/modules\"",
-					/Library/Frameworks/Lua.framework/Headers,
-					/Library/Frameworks/SDL2.framework/Headers,
-				);
-				INFOPLIST_FILE = "love-Info.plist";
-				LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks";
-				LLVM_LTO = YES;
-				MACOSX_DEPLOYMENT_TARGET = 10.6;
-				ONLY_ACTIVE_ARCH = NO;
-				OTHER_LDFLAGS = "";
-				"OTHER_LDFLAGS[arch=x86_64]" = (
-					"-pagezero_size",
-					10000,
-					"-image_base",
-					100000000,
-				);
-				PRODUCT_NAME = love;
-				SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = YES;
-				WARNING_CFLAGS = (
-					"-Wall",
-					"-W",
-				);
-			};
-			name = Distribution;
-		};
-		FA5326C718971A0900F7BBF4 /* Distribution */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				COMBINE_HIDPI_IMAGES = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				FRAMEWORK_SEARCH_PATHS = (
-					"$(inherited)",
-					"\"$(SRCROOT)/build/Release\"",
-					"\"$(SRCROOT)/build/Debug\"",
-				);
-				INSTALL_PATH = /Applications;
-				PRODUCT_NAME = love;
-			};
-			name = Distribution;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "love" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				C01FCF4B08A954540054247B /* Debug */,
-				C01FCF4C08A954540054247B /* Release */,
-				FA5326C718971A0900F7BBF4 /* Distribution */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		C01FCF4E08A954540054247B /* Build configuration list for PBXProject "love" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				C01FCF4F08A954540054247B /* Debug */,
-				C01FCF5008A954540054247B /* Release */,
-				FA5326C618971A0900F7BBF4 /* Distribution */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
-}

+ 3 - 2
platform/unix/configure.ac

@@ -56,14 +56,15 @@ PKG_CHECK_MODULES([lua], [${with_lua}${with_luaversion}], [lua_found=yes],
 				  [PKG_CHECK_MODULES([lua], [${with_lua}], [lua_found=yes], [lua_found=no])])
 PKG_CHECK_MODULES([freetype2], [freetype2], [], [LOVE_MSG_ERROR([FreeType2])])
 PKG_CHECK_MODULES([openal], [openal], [], [LOVE_MSG_ERROR([OpenAL])])
-PKG_CHECK_MODULES([devil], [IL], [], [LOVE_MSG_ERROR([DevIL])])
 PKG_CHECK_MODULES([libmodplug], [libmodplug], [], [LOVE_MSG_ERROR([libmodplug])])
 PKG_CHECK_MODULES([vorbisfile], [vorbisfile], [], [LOVE_MSG_ERROR([libvorbis and libvorbisfile])])
+PKG_CHECK_MODULES([zlib], [zlib], [], [LOVE_MSG_ERROR([zlib])])
 
 # Other libraries
 AC_SEARCH_LIBS([sqrt], [m], [], [LOVE_MSG_ERROR([the C math library])])
 AC_SEARCH_LIBS([PHYSFS_init], [physfs], [], [LOVE_MSG_ERROR([PhysicsFS])])
-AC_SEARCH_LIBS([glLoadIdentity], [GL], [], [LOVE_MSG_ERROR([OpenGL])])
+AC_SEARCH_LIBS([glDrawArrays], [GL], [], [LOVE_MSG_ERROR([OpenGL])])
+AC_SEARCH_LIBS([tjInitCompress], [turbojpeg], [], [LOVE_MSG_ERROR([TurboJPEG])])
 
 # Lua, treated seperately because of --with-lua
 AS_VAR_IF([with_luaversion], [5.2], [luatest=lua_version], [luatest=lua_pcall]) # use lua_version for 5.2

+ 6 - 6
platform/unix/debian/control.in

@@ -8,7 +8,6 @@ Build-Depends: debhelper (>= 9),
                automake,
                libtool,
                pkg-config,
-               libdevil-dev,
                libfreetype6-dev,
                libluajit-5.1-dev,
                libphysfs-dev,
@@ -16,10 +15,10 @@ Build-Depends: debhelper (>= 9),
                libopenal-dev,
                libogg-dev,
                libvorbis-dev,
-               libflac-dev,
-               libflac++-dev,
                libmodplug-dev,
-               libmpg123-dev
+               libmpg123-dev,
+               zlib1g-dev,
+               libjpeg-turbo8-dev
 Standards-Version: 3.9.5
 Homepage: http://love2d.org
 
@@ -29,7 +28,6 @@ Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends},
          ${shlibs:Depends},
-         libdevil1c2,
          libfreetype6,
          libgl1-mesa-glx,
          libluajit-5.1-2,
@@ -40,7 +38,9 @@ Depends: ${misc:Depends},
          libvorbis0a,
          libvorbisfile3,
          libmodplug1,
-         libmpg123-0
+         libmpg123-0,
+         zlib1g,
+         libjpeg-turbo8
 Description: LOVE is a free 2D game engine which enables easy game creation in Lua.
 
 Package: love@LOVE_SUFFIX@

+ 2 - 2
platform/unix/genmodules

@@ -113,7 +113,7 @@ inc_libraries="$inc_current/libraries"
 cat > src/Makefile.am << EOF
 AM_CPPFLAGS = -I$inc_current -I$inc_modules -I$inc_libraries -I$inc_libraries/enet/libenet/include \$(LOVE_INCLUDES) \$(FILE_OFFSET)\
 	\$(SDL_CFLAGS) \$(lua_CFLAGS) \$(freetype2_CFLAGS)\
-	\$(openal_CFLAGS) \$(devil_CFLAGS) \$(libmodplug_CFLAGS)\
+	\$(openal_CFLAGS) \$(zlib_CFLAGS) \$(libmodplug_CFLAGS)\
 	\$(vorbisfile_CFLAGS)
 AUTOMAKE_OPTIONS = subdir-objects
 SUBDIRS =
@@ -146,7 +146,7 @@ lib_LTLIBRARIES = liblove${love_suffix}.la
 liblove${love_amsuffix}_la_LDFLAGS = -module -export-dynamic \$(LDFLAGS)
 liblove${love_amsuffix}_la_LIBADD = \
 	\$(SDL_LIBS) \$(freetype2_LIBS) \$(lua_LIBS)\
-	\$(openal_LIBS) \$(devil_LIBS) \$(libmodplug_LIBS)\
+	\$(openal_LIBS) \$(zlib_LIBS) \$(libmodplug_LIBS)\
 	\$(vorbisfile_LIBS)
 EOF
 

+ 128 - 0
platform/xcode/ios/Images.xcassets/AppIcon.appiconset/Contents.json

@@ -0,0 +1,128 @@
+{
+  "images" : [
+    {
+      "size" : "29x29",
+      "idiom" : "iphone",
+      "filename" : "[email protected]",
+      "scale" : "1x"
+    },
+    {
+      "size" : "29x29",
+      "idiom" : "iphone",
+      "filename" : "[email protected]",
+      "scale" : "2x"
+    },
+    {
+      "size" : "29x29",
+      "idiom" : "iphone",
+      "filename" : "[email protected]",
+      "scale" : "3x"
+    },
+    {
+      "size" : "40x40",
+      "idiom" : "iphone",
+      "filename" : "[email protected]",
+      "scale" : "2x"
+    },
+    {
+      "size" : "40x40",
+      "idiom" : "iphone",
+      "filename" : "[email protected]",
+      "scale" : "3x"
+    },
+    {
+      "size" : "57x57",
+      "idiom" : "iphone",
+      "filename" : "[email protected]",
+      "scale" : "1x"
+    },
+    {
+      "size" : "57x57",
+      "idiom" : "iphone",
+      "filename" : "[email protected]",
+      "scale" : "2x"
+    },
+    {
+      "size" : "60x60",
+      "idiom" : "iphone",
+      "filename" : "[email protected]",
+      "scale" : "2x"
+    },
+    {
+      "size" : "60x60",
+      "idiom" : "iphone",
+      "filename" : "[email protected]",
+      "scale" : "3x"
+    },
+    {
+      "size" : "29x29",
+      "idiom" : "ipad",
+      "filename" : "[email protected]",
+      "scale" : "1x"
+    },
+    {
+      "size" : "29x29",
+      "idiom" : "ipad",
+      "filename" : "[email protected]",
+      "scale" : "2x"
+    },
+    {
+      "size" : "40x40",
+      "idiom" : "ipad",
+      "filename" : "[email protected]",
+      "scale" : "1x"
+    },
+    {
+      "size" : "40x40",
+      "idiom" : "ipad",
+      "filename" : "[email protected]",
+      "scale" : "2x"
+    },
+    {
+      "size" : "50x50",
+      "idiom" : "ipad",
+      "filename" : "[email protected]",
+      "scale" : "1x"
+    },
+    {
+      "size" : "50x50",
+      "idiom" : "ipad",
+      "filename" : "[email protected]",
+      "scale" : "2x"
+    },
+    {
+      "size" : "72x72",
+      "idiom" : "ipad",
+      "filename" : "[email protected]",
+      "scale" : "1x"
+    },
+    {
+      "size" : "72x72",
+      "idiom" : "ipad",
+      "filename" : "[email protected]",
+      "scale" : "2x"
+    },
+    {
+      "size" : "76x76",
+      "idiom" : "ipad",
+      "filename" : "[email protected]",
+      "scale" : "1x"
+    },
+    {
+      "size" : "76x76",
+      "idiom" : "ipad",
+      "filename" : "[email protected]",
+      "scale" : "2x"
+    },
+    {
+      "size" : "120x120",
+      "idiom" : "car",
+      "filename" : "[email protected]",
+      "scale" : "1x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]


BIN
platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]


BIN
platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]


BIN
platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]


BIN
platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]


BIN
platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]


BIN
platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]


BIN
platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]


BIN
platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]


BIN
platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]


BIN
platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]


BIN
platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]


BIN
platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]


BIN
platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]


BIN
platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]


BIN
platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]


BIN
platform/xcode/ios/Images.xcassets/AppIcon.appiconset/[email protected]


+ 142 - 0
platform/xcode/ios/Images.xcassets/LaunchImage.launchimage/Contents.json

@@ -0,0 +1,142 @@
+{
+  "images" : [
+    {
+      "orientation" : "portrait",
+      "idiom" : "iphone",
+      "extent" : "full-screen",
+      "minimum-system-version" : "8.0",
+      "subtype" : "736h",
+      "scale" : "3x"
+    },
+    {
+      "orientation" : "landscape",
+      "idiom" : "iphone",
+      "extent" : "full-screen",
+      "minimum-system-version" : "8.0",
+      "subtype" : "736h",
+      "scale" : "3x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "iphone",
+      "extent" : "full-screen",
+      "minimum-system-version" : "8.0",
+      "subtype" : "667h",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "iphone",
+      "extent" : "full-screen",
+      "minimum-system-version" : "7.0",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "iphone",
+      "extent" : "full-screen",
+      "minimum-system-version" : "7.0",
+      "subtype" : "retina4",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "ipad",
+      "extent" : "full-screen",
+      "minimum-system-version" : "7.0",
+      "scale" : "1x"
+    },
+    {
+      "orientation" : "landscape",
+      "idiom" : "ipad",
+      "extent" : "full-screen",
+      "minimum-system-version" : "7.0",
+      "scale" : "1x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "ipad",
+      "extent" : "full-screen",
+      "minimum-system-version" : "7.0",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "landscape",
+      "idiom" : "ipad",
+      "extent" : "full-screen",
+      "minimum-system-version" : "7.0",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "iphone",
+      "extent" : "full-screen",
+      "scale" : "1x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "iphone",
+      "extent" : "full-screen",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "iphone",
+      "extent" : "full-screen",
+      "subtype" : "retina4",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "ipad",
+      "extent" : "to-status-bar",
+      "scale" : "1x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "ipad",
+      "extent" : "full-screen",
+      "scale" : "1x"
+    },
+    {
+      "orientation" : "landscape",
+      "idiom" : "ipad",
+      "extent" : "to-status-bar",
+      "scale" : "1x"
+    },
+    {
+      "orientation" : "landscape",
+      "idiom" : "ipad",
+      "extent" : "full-screen",
+      "scale" : "1x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "ipad",
+      "extent" : "to-status-bar",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "ipad",
+      "extent" : "full-screen",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "landscape",
+      "idiom" : "ipad",
+      "extent" : "to-status-bar",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "landscape",
+      "idiom" : "ipad",
+      "extent" : "full-screen",
+      "scale" : "2x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 45 - 0
platform/xcode/ios/Launch Screen.xib

@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6254" systemVersion="14C109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6247"/>
+        <capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB">
+            <rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
+                    <rect key="frame" x="20" y="439" width="441" height="21"/>
+                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                    <nil key="highlightedColor"/>
+                    <variation key="widthClass=compact">
+                        <fontDescription key="fontDescription" type="system" pointSize="11"/>
+                    </variation>
+                </label>
+                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="LÖVE" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
+                    <rect key="frame" x="20" y="140" width="441" height="43"/>
+                    <fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
+                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                    <nil key="highlightedColor"/>
+                </label>
+            </subviews>
+            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+            <constraints>
+                <constraint firstItem="kId-c2-rCX" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="bottom" multiplier="1/3" constant="1" id="Kid-kn-2rF"/>
+                <constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk"/>
+                <constraint firstAttribute="bottom" secondItem="8ie-xW-0ye" secondAttribute="bottom" constant="20" id="Kzo-t9-V3l"/>
+                <constraint firstItem="8ie-xW-0ye" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="MfP-vx-nX0"/>
+                <constraint firstAttribute="centerX" secondItem="8ie-xW-0ye" secondAttribute="centerX" id="ZEH-qu-HZ9"/>
+                <constraint firstItem="kId-c2-rCX" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="fvb-Df-36g"/>
+            </constraints>
+            <nil key="simulatedStatusBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="404" y="445"/>
+        </view>
+    </objects>
+</document>

+ 102 - 0
platform/xcode/ios/love-ios.plist

@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleDisplayName</key>
+	<string>${PRODUCT_NAME}</string>
+	<key>CFBundleDocumentTypes</key>
+	<array>
+		<dict>
+			<key>CFBundleTypeIconFiles</key>
+			<array>
+				<string>LoveDocument.icns</string>
+			</array>
+			<key>CFBundleTypeName</key>
+			<string>LÖVE Project</string>
+			<key>CFBundleTypeRole</key>
+			<string>Viewer</string>
+			<key>LSHandlerRank</key>
+			<string>Owner</string>
+			<key>LSItemContentTypes</key>
+			<array>
+				<string>org.love2d.love-game</string>
+			</array>
+		</dict>
+	</array>
+	<key>CFBundleExecutable</key>
+	<string>${EXECUTABLE_NAME}</string>
+	<key>CFBundleIcons</key>
+	<dict/>
+	<key>CFBundleIcons~ipad</key>
+	<dict/>
+	<key>CFBundleIdentifier</key>
+	<string>love.${PRODUCT_NAME:rfc1034identifier}</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>${PRODUCT_NAME}</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1.0</string>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
+	<key>UIFileSharingEnabled</key>
+	<true/>
+	<key>UILaunchStoryboardName</key>
+	<string>Launch Screen</string>
+	<key>UIRequiredDeviceCapabilities</key>
+	<array>
+		<string>opengles-2</string>
+	</array>
+	<key>UIStatusBarStyle</key>
+	<string>UIStatusBarStyleLightContent</string>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+	<key>UISupportedInterfaceOrientations~ipad</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationPortraitUpsideDown</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+	<key>UTExportedTypeDeclarations</key>
+	<array>
+		<dict>
+			<key>UTTypeConformsTo</key>
+			<array>
+				<string>com.pkware.zip-archive</string>
+			</array>
+			<key>UTTypeDescription</key>
+			<string>LÖVE Project</string>
+			<key>UTTypeIdentifier</key>
+			<string>org.love2d.love-game</string>
+			<key>UTTypeSize320IconFile</key>
+			<string>LoveDocument</string>
+			<key>UTTypeSize64IconFile</key>
+			<string>LoveDocument</string>
+			<key>UTTypeTagSpecification</key>
+			<dict>
+				<key>com.apple.ostype</key>
+				<string>LOVE</string>
+				<key>public.filename-extension</key>
+				<array>
+					<string>love</string>
+				</array>
+				<key>public.mime-type</key>
+				<string>application/x-love-game</string>
+			</dict>
+		</dict>
+	</array>
+</dict>
+</plist>

+ 0 - 0
platform/macosx/icons/LoveDocument.icns → platform/xcode/ios/lovedocument.icns


+ 4108 - 0
platform/xcode/liblove.xcodeproj/project.pbxproj

@@ -0,0 +1,4108 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		FA0B791B1A958E3B000E1D17 /* b64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B78F71A958E3B000E1D17 /* b64.cpp */; };
+		FA0B791C1A958E3B000E1D17 /* b64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B78F71A958E3B000E1D17 /* b64.cpp */; };
+		FA0B791D1A958E3B000E1D17 /* b64.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B78F81A958E3B000E1D17 /* b64.h */; };
+		FA0B791E1A958E3B000E1D17 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B78F91A958E3B000E1D17 /* config.h */; };
+		FA0B791F1A958E3B000E1D17 /* Data.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B78FA1A958E3B000E1D17 /* Data.h */; };
+		FA0B79201A958E3B000E1D17 /* delay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B78FB1A958E3B000E1D17 /* delay.cpp */; };
+		FA0B79211A958E3B000E1D17 /* delay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B78FB1A958E3B000E1D17 /* delay.cpp */; };
+		FA0B79221A958E3B000E1D17 /* delay.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B78FC1A958E3B000E1D17 /* delay.h */; };
+		FA0B79231A958E3B000E1D17 /* EnumMap.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B78FD1A958E3B000E1D17 /* EnumMap.h */; };
+		FA0B79241A958E3B000E1D17 /* Exception.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B78FE1A958E3B000E1D17 /* Exception.cpp */; };
+		FA0B79251A958E3B000E1D17 /* Exception.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B78FE1A958E3B000E1D17 /* Exception.cpp */; };
+		FA0B79261A958E3B000E1D17 /* Exception.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B78FF1A958E3B000E1D17 /* Exception.h */; };
+		FA0B79271A958E3B000E1D17 /* int.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79001A958E3B000E1D17 /* int.h */; };
+		FA0B79281A958E3B000E1D17 /* math.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79011A958E3B000E1D17 /* math.h */; };
+		FA0B79291A958E3B000E1D17 /* Matrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79021A958E3B000E1D17 /* Matrix.cpp */; };
+		FA0B792A1A958E3B000E1D17 /* Matrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79021A958E3B000E1D17 /* Matrix.cpp */; };
+		FA0B792B1A958E3B000E1D17 /* Matrix.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79031A958E3B000E1D17 /* Matrix.h */; };
+		FA0B792C1A958E3B000E1D17 /* Memoizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79041A958E3B000E1D17 /* Memoizer.cpp */; };
+		FA0B792D1A958E3B000E1D17 /* Memoizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79041A958E3B000E1D17 /* Memoizer.cpp */; };
+		FA0B792E1A958E3B000E1D17 /* Memoizer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79051A958E3B000E1D17 /* Memoizer.h */; };
+		FA0B792F1A958E3B000E1D17 /* Module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79061A958E3B000E1D17 /* Module.cpp */; };
+		FA0B79301A958E3B000E1D17 /* Module.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79061A958E3B000E1D17 /* Module.cpp */; };
+		FA0B79311A958E3B000E1D17 /* Module.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79071A958E3B000E1D17 /* Module.h */; };
+		FA0B79321A958E3B000E1D17 /* Object.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79081A958E3B000E1D17 /* Object.cpp */; };
+		FA0B79331A958E3B000E1D17 /* Object.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79081A958E3B000E1D17 /* Object.cpp */; };
+		FA0B79341A958E3B000E1D17 /* Object.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79091A958E3B000E1D17 /* Object.h */; };
+		FA0B79351A958E3B000E1D17 /* OSX.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B790A1A958E3B000E1D17 /* OSX.h */; };
+		FA0B79361A958E3B000E1D17 /* OSX.mm in Sources */ = {isa = PBXBuildFile; fileRef = FA0B790B1A958E3B000E1D17 /* OSX.mm */; };
+		FA0B79371A958E3B000E1D17 /* OSX.mm in Sources */ = {isa = PBXBuildFile; fileRef = FA0B790B1A958E3B000E1D17 /* OSX.mm */; };
+		FA0B79381A958E3B000E1D17 /* Reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B790C1A958E3B000E1D17 /* Reference.cpp */; };
+		FA0B79391A958E3B000E1D17 /* Reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B790C1A958E3B000E1D17 /* Reference.cpp */; };
+		FA0B793A1A958E3B000E1D17 /* Reference.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B790D1A958E3B000E1D17 /* Reference.h */; };
+		FA0B793B1A958E3B000E1D17 /* runtime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B790E1A958E3B000E1D17 /* runtime.cpp */; };
+		FA0B793C1A958E3B000E1D17 /* runtime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B790E1A958E3B000E1D17 /* runtime.cpp */; };
+		FA0B793D1A958E3B000E1D17 /* runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B790F1A958E3B000E1D17 /* runtime.h */; };
+		FA0B793E1A958E3B000E1D17 /* StringMap.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79101A958E3B000E1D17 /* StringMap.h */; };
+		FA0B793F1A958E3B000E1D17 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79111A958E3B000E1D17 /* types.h */; };
+		FA0B79401A958E3B000E1D17 /* utf8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79121A958E3B000E1D17 /* utf8.cpp */; };
+		FA0B79411A958E3B000E1D17 /* utf8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79121A958E3B000E1D17 /* utf8.cpp */; };
+		FA0B79421A958E3B000E1D17 /* utf8.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79131A958E3B000E1D17 /* utf8.h */; };
+		FA0B79431A958E3B000E1D17 /* Variant.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79141A958E3B000E1D17 /* Variant.cpp */; };
+		FA0B79441A958E3B000E1D17 /* Variant.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79141A958E3B000E1D17 /* Variant.cpp */; };
+		FA0B79451A958E3B000E1D17 /* Variant.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79151A958E3B000E1D17 /* Variant.h */; };
+		FA0B79461A958E3B000E1D17 /* Vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79161A958E3B000E1D17 /* Vector.cpp */; };
+		FA0B79471A958E3B000E1D17 /* Vector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79161A958E3B000E1D17 /* Vector.cpp */; };
+		FA0B79481A958E3B000E1D17 /* Vector.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79171A958E3B000E1D17 /* Vector.h */; };
+		FA0B79491A958E3B000E1D17 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79181A958E3B000E1D17 /* version.h */; };
+		FA0B794A1A958E3B000E1D17 /* wrap_Data.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79191A958E3B000E1D17 /* wrap_Data.cpp */; };
+		FA0B794B1A958E3B000E1D17 /* wrap_Data.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79191A958E3B000E1D17 /* wrap_Data.cpp */; };
+		FA0B794C1A958E3B000E1D17 /* wrap_Data.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B791A1A958E3B000E1D17 /* wrap_Data.h */; };
+		FA0B7A281A958EA3000E1D17 /* Box2D.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B794F1A958EA3000E1D17 /* Box2D.h */; };
+		FA0B7A291A958EA3000E1D17 /* b2BroadPhase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79511A958EA3000E1D17 /* b2BroadPhase.cpp */; };
+		FA0B7A2A1A958EA3000E1D17 /* b2BroadPhase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79511A958EA3000E1D17 /* b2BroadPhase.cpp */; };
+		FA0B7A2B1A958EA3000E1D17 /* b2BroadPhase.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79521A958EA3000E1D17 /* b2BroadPhase.h */; };
+		FA0B7A2C1A958EA3000E1D17 /* b2CollideCircle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79531A958EA3000E1D17 /* b2CollideCircle.cpp */; };
+		FA0B7A2D1A958EA3000E1D17 /* b2CollideCircle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79531A958EA3000E1D17 /* b2CollideCircle.cpp */; };
+		FA0B7A2E1A958EA3000E1D17 /* b2CollideEdge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79541A958EA3000E1D17 /* b2CollideEdge.cpp */; };
+		FA0B7A2F1A958EA3000E1D17 /* b2CollideEdge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79541A958EA3000E1D17 /* b2CollideEdge.cpp */; };
+		FA0B7A301A958EA3000E1D17 /* b2CollidePolygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79551A958EA3000E1D17 /* b2CollidePolygon.cpp */; };
+		FA0B7A311A958EA3000E1D17 /* b2CollidePolygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79551A958EA3000E1D17 /* b2CollidePolygon.cpp */; };
+		FA0B7A321A958EA3000E1D17 /* b2Collision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79561A958EA3000E1D17 /* b2Collision.cpp */; };
+		FA0B7A331A958EA3000E1D17 /* b2Collision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79561A958EA3000E1D17 /* b2Collision.cpp */; };
+		FA0B7A341A958EA3000E1D17 /* b2Collision.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79571A958EA3000E1D17 /* b2Collision.h */; };
+		FA0B7A351A958EA3000E1D17 /* b2Distance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79581A958EA3000E1D17 /* b2Distance.cpp */; };
+		FA0B7A361A958EA3000E1D17 /* b2Distance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79581A958EA3000E1D17 /* b2Distance.cpp */; };
+		FA0B7A371A958EA3000E1D17 /* b2Distance.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79591A958EA3000E1D17 /* b2Distance.h */; };
+		FA0B7A381A958EA3000E1D17 /* b2DynamicTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B795A1A958EA3000E1D17 /* b2DynamicTree.cpp */; };
+		FA0B7A391A958EA3000E1D17 /* b2DynamicTree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B795A1A958EA3000E1D17 /* b2DynamicTree.cpp */; };
+		FA0B7A3A1A958EA3000E1D17 /* b2DynamicTree.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B795B1A958EA3000E1D17 /* b2DynamicTree.h */; };
+		FA0B7A3B1A958EA3000E1D17 /* b2TimeOfImpact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B795C1A958EA3000E1D17 /* b2TimeOfImpact.cpp */; };
+		FA0B7A3C1A958EA3000E1D17 /* b2TimeOfImpact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B795C1A958EA3000E1D17 /* b2TimeOfImpact.cpp */; };
+		FA0B7A3D1A958EA3000E1D17 /* b2TimeOfImpact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B795D1A958EA3000E1D17 /* b2TimeOfImpact.h */; };
+		FA0B7A3E1A958EA3000E1D17 /* b2ChainShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B795F1A958EA3000E1D17 /* b2ChainShape.cpp */; };
+		FA0B7A3F1A958EA3000E1D17 /* b2ChainShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B795F1A958EA3000E1D17 /* b2ChainShape.cpp */; };
+		FA0B7A401A958EA3000E1D17 /* b2ChainShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79601A958EA3000E1D17 /* b2ChainShape.h */; };
+		FA0B7A411A958EA3000E1D17 /* b2CircleShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79611A958EA3000E1D17 /* b2CircleShape.cpp */; };
+		FA0B7A421A958EA3000E1D17 /* b2CircleShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79611A958EA3000E1D17 /* b2CircleShape.cpp */; };
+		FA0B7A431A958EA3000E1D17 /* b2CircleShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79621A958EA3000E1D17 /* b2CircleShape.h */; };
+		FA0B7A441A958EA3000E1D17 /* b2EdgeShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79631A958EA3000E1D17 /* b2EdgeShape.cpp */; };
+		FA0B7A451A958EA3000E1D17 /* b2EdgeShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79631A958EA3000E1D17 /* b2EdgeShape.cpp */; };
+		FA0B7A461A958EA3000E1D17 /* b2EdgeShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79641A958EA3000E1D17 /* b2EdgeShape.h */; };
+		FA0B7A471A958EA3000E1D17 /* b2PolygonShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79651A958EA3000E1D17 /* b2PolygonShape.cpp */; };
+		FA0B7A481A958EA3000E1D17 /* b2PolygonShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79651A958EA3000E1D17 /* b2PolygonShape.cpp */; };
+		FA0B7A491A958EA3000E1D17 /* b2PolygonShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79661A958EA3000E1D17 /* b2PolygonShape.h */; };
+		FA0B7A4A1A958EA3000E1D17 /* b2Shape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79671A958EA3000E1D17 /* b2Shape.h */; };
+		FA0B7A4B1A958EA3000E1D17 /* b2BlockAllocator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79691A958EA3000E1D17 /* b2BlockAllocator.cpp */; };
+		FA0B7A4C1A958EA3000E1D17 /* b2BlockAllocator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79691A958EA3000E1D17 /* b2BlockAllocator.cpp */; };
+		FA0B7A4D1A958EA3000E1D17 /* b2BlockAllocator.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B796A1A958EA3000E1D17 /* b2BlockAllocator.h */; };
+		FA0B7A4E1A958EA3000E1D17 /* b2Draw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B796B1A958EA3000E1D17 /* b2Draw.cpp */; };
+		FA0B7A4F1A958EA3000E1D17 /* b2Draw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B796B1A958EA3000E1D17 /* b2Draw.cpp */; };
+		FA0B7A501A958EA3000E1D17 /* b2Draw.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B796C1A958EA3000E1D17 /* b2Draw.h */; };
+		FA0B7A511A958EA3000E1D17 /* b2GrowableStack.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B796D1A958EA3000E1D17 /* b2GrowableStack.h */; };
+		FA0B7A521A958EA3000E1D17 /* b2Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B796E1A958EA3000E1D17 /* b2Math.cpp */; };
+		FA0B7A531A958EA3000E1D17 /* b2Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B796E1A958EA3000E1D17 /* b2Math.cpp */; };
+		FA0B7A541A958EA3000E1D17 /* b2Math.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B796F1A958EA3000E1D17 /* b2Math.h */; };
+		FA0B7A551A958EA3000E1D17 /* b2Settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79701A958EA3000E1D17 /* b2Settings.cpp */; };
+		FA0B7A561A958EA3000E1D17 /* b2Settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79701A958EA3000E1D17 /* b2Settings.cpp */; };
+		FA0B7A571A958EA3000E1D17 /* b2Settings.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79711A958EA3000E1D17 /* b2Settings.h */; };
+		FA0B7A581A958EA3000E1D17 /* b2StackAllocator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79721A958EA3000E1D17 /* b2StackAllocator.cpp */; };
+		FA0B7A591A958EA3000E1D17 /* b2StackAllocator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79721A958EA3000E1D17 /* b2StackAllocator.cpp */; };
+		FA0B7A5A1A958EA3000E1D17 /* b2StackAllocator.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79731A958EA3000E1D17 /* b2StackAllocator.h */; };
+		FA0B7A5B1A958EA3000E1D17 /* b2Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79741A958EA3000E1D17 /* b2Timer.cpp */; };
+		FA0B7A5C1A958EA3000E1D17 /* b2Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79741A958EA3000E1D17 /* b2Timer.cpp */; };
+		FA0B7A5D1A958EA3000E1D17 /* b2Timer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79751A958EA3000E1D17 /* b2Timer.h */; };
+		FA0B7A5E1A958EA3000E1D17 /* b2Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79771A958EA3000E1D17 /* b2Body.cpp */; };
+		FA0B7A5F1A958EA3000E1D17 /* b2Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79771A958EA3000E1D17 /* b2Body.cpp */; };
+		FA0B7A601A958EA3000E1D17 /* b2Body.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79781A958EA3000E1D17 /* b2Body.h */; };
+		FA0B7A611A958EA3000E1D17 /* b2ContactManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79791A958EA3000E1D17 /* b2ContactManager.cpp */; };
+		FA0B7A621A958EA3000E1D17 /* b2ContactManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79791A958EA3000E1D17 /* b2ContactManager.cpp */; };
+		FA0B7A631A958EA3000E1D17 /* b2ContactManager.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B797A1A958EA3000E1D17 /* b2ContactManager.h */; };
+		FA0B7A641A958EA3000E1D17 /* b2Fixture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B797B1A958EA3000E1D17 /* b2Fixture.cpp */; };
+		FA0B7A651A958EA3000E1D17 /* b2Fixture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B797B1A958EA3000E1D17 /* b2Fixture.cpp */; };
+		FA0B7A661A958EA3000E1D17 /* b2Fixture.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B797C1A958EA3000E1D17 /* b2Fixture.h */; };
+		FA0B7A671A958EA3000E1D17 /* b2Island.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B797D1A958EA3000E1D17 /* b2Island.cpp */; };
+		FA0B7A681A958EA3000E1D17 /* b2Island.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B797D1A958EA3000E1D17 /* b2Island.cpp */; };
+		FA0B7A691A958EA3000E1D17 /* b2Island.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B797E1A958EA3000E1D17 /* b2Island.h */; };
+		FA0B7A6A1A958EA3000E1D17 /* b2TimeStep.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B797F1A958EA3000E1D17 /* b2TimeStep.h */; };
+		FA0B7A6B1A958EA3000E1D17 /* b2World.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79801A958EA3000E1D17 /* b2World.cpp */; };
+		FA0B7A6C1A958EA3000E1D17 /* b2World.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79801A958EA3000E1D17 /* b2World.cpp */; };
+		FA0B7A6D1A958EA3000E1D17 /* b2World.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79811A958EA3000E1D17 /* b2World.h */; };
+		FA0B7A6E1A958EA3000E1D17 /* b2WorldCallbacks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79821A958EA3000E1D17 /* b2WorldCallbacks.cpp */; };
+		FA0B7A6F1A958EA3000E1D17 /* b2WorldCallbacks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79821A958EA3000E1D17 /* b2WorldCallbacks.cpp */; };
+		FA0B7A701A958EA3000E1D17 /* b2WorldCallbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79831A958EA3000E1D17 /* b2WorldCallbacks.h */; };
+		FA0B7A711A958EA3000E1D17 /* b2ChainAndCircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79851A958EA3000E1D17 /* b2ChainAndCircleContact.cpp */; };
+		FA0B7A721A958EA3000E1D17 /* b2ChainAndCircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79851A958EA3000E1D17 /* b2ChainAndCircleContact.cpp */; };
+		FA0B7A731A958EA3000E1D17 /* b2ChainAndCircleContact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79861A958EA3000E1D17 /* b2ChainAndCircleContact.h */; };
+		FA0B7A741A958EA3000E1D17 /* b2ChainAndPolygonContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79871A958EA3000E1D17 /* b2ChainAndPolygonContact.cpp */; };
+		FA0B7A751A958EA3000E1D17 /* b2ChainAndPolygonContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79871A958EA3000E1D17 /* b2ChainAndPolygonContact.cpp */; };
+		FA0B7A761A958EA3000E1D17 /* b2ChainAndPolygonContact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79881A958EA3000E1D17 /* b2ChainAndPolygonContact.h */; };
+		FA0B7A771A958EA3000E1D17 /* b2CircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79891A958EA3000E1D17 /* b2CircleContact.cpp */; };
+		FA0B7A781A958EA3000E1D17 /* b2CircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79891A958EA3000E1D17 /* b2CircleContact.cpp */; };
+		FA0B7A791A958EA3000E1D17 /* b2CircleContact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B798A1A958EA3000E1D17 /* b2CircleContact.h */; };
+		FA0B7A7A1A958EA3000E1D17 /* b2Contact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B798B1A958EA3000E1D17 /* b2Contact.cpp */; };
+		FA0B7A7B1A958EA3000E1D17 /* b2Contact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B798B1A958EA3000E1D17 /* b2Contact.cpp */; };
+		FA0B7A7C1A958EA3000E1D17 /* b2Contact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B798C1A958EA3000E1D17 /* b2Contact.h */; };
+		FA0B7A7D1A958EA3000E1D17 /* b2ContactSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B798D1A958EA3000E1D17 /* b2ContactSolver.cpp */; };
+		FA0B7A7E1A958EA3000E1D17 /* b2ContactSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B798D1A958EA3000E1D17 /* b2ContactSolver.cpp */; };
+		FA0B7A7F1A958EA3000E1D17 /* b2ContactSolver.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B798E1A958EA3000E1D17 /* b2ContactSolver.h */; };
+		FA0B7A801A958EA3000E1D17 /* b2EdgeAndCircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B798F1A958EA3000E1D17 /* b2EdgeAndCircleContact.cpp */; };
+		FA0B7A811A958EA3000E1D17 /* b2EdgeAndCircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B798F1A958EA3000E1D17 /* b2EdgeAndCircleContact.cpp */; };
+		FA0B7A821A958EA3000E1D17 /* b2EdgeAndCircleContact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79901A958EA3000E1D17 /* b2EdgeAndCircleContact.h */; };
+		FA0B7A831A958EA3000E1D17 /* b2EdgeAndPolygonContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79911A958EA3000E1D17 /* b2EdgeAndPolygonContact.cpp */; };
+		FA0B7A841A958EA3000E1D17 /* b2EdgeAndPolygonContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79911A958EA3000E1D17 /* b2EdgeAndPolygonContact.cpp */; };
+		FA0B7A851A958EA3000E1D17 /* b2EdgeAndPolygonContact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79921A958EA3000E1D17 /* b2EdgeAndPolygonContact.h */; };
+		FA0B7A861A958EA3000E1D17 /* b2PolygonAndCircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79931A958EA3000E1D17 /* b2PolygonAndCircleContact.cpp */; };
+		FA0B7A871A958EA3000E1D17 /* b2PolygonAndCircleContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79931A958EA3000E1D17 /* b2PolygonAndCircleContact.cpp */; };
+		FA0B7A881A958EA3000E1D17 /* b2PolygonAndCircleContact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79941A958EA3000E1D17 /* b2PolygonAndCircleContact.h */; };
+		FA0B7A891A958EA3000E1D17 /* b2PolygonContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79951A958EA3000E1D17 /* b2PolygonContact.cpp */; };
+		FA0B7A8A1A958EA3000E1D17 /* b2PolygonContact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79951A958EA3000E1D17 /* b2PolygonContact.cpp */; };
+		FA0B7A8B1A958EA3000E1D17 /* b2PolygonContact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79961A958EA3000E1D17 /* b2PolygonContact.h */; };
+		FA0B7A8C1A958EA3000E1D17 /* b2DistanceJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79981A958EA3000E1D17 /* b2DistanceJoint.cpp */; };
+		FA0B7A8D1A958EA3000E1D17 /* b2DistanceJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79981A958EA3000E1D17 /* b2DistanceJoint.cpp */; };
+		FA0B7A8E1A958EA3000E1D17 /* b2DistanceJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79991A958EA3000E1D17 /* b2DistanceJoint.h */; };
+		FA0B7A8F1A958EA3000E1D17 /* b2FrictionJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B799A1A958EA3000E1D17 /* b2FrictionJoint.cpp */; };
+		FA0B7A901A958EA3000E1D17 /* b2FrictionJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B799A1A958EA3000E1D17 /* b2FrictionJoint.cpp */; };
+		FA0B7A911A958EA3000E1D17 /* b2FrictionJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B799B1A958EA3000E1D17 /* b2FrictionJoint.h */; };
+		FA0B7A921A958EA3000E1D17 /* b2GearJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B799C1A958EA3000E1D17 /* b2GearJoint.cpp */; };
+		FA0B7A931A958EA3000E1D17 /* b2GearJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B799C1A958EA3000E1D17 /* b2GearJoint.cpp */; };
+		FA0B7A941A958EA3000E1D17 /* b2GearJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B799D1A958EA3000E1D17 /* b2GearJoint.h */; };
+		FA0B7A951A958EA3000E1D17 /* b2Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B799E1A958EA3000E1D17 /* b2Joint.cpp */; };
+		FA0B7A961A958EA3000E1D17 /* b2Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B799E1A958EA3000E1D17 /* b2Joint.cpp */; };
+		FA0B7A971A958EA3000E1D17 /* b2Joint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B799F1A958EA3000E1D17 /* b2Joint.h */; };
+		FA0B7A981A958EA3000E1D17 /* b2MotorJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79A01A958EA3000E1D17 /* b2MotorJoint.cpp */; };
+		FA0B7A991A958EA3000E1D17 /* b2MotorJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79A01A958EA3000E1D17 /* b2MotorJoint.cpp */; };
+		FA0B7A9A1A958EA3000E1D17 /* b2MotorJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79A11A958EA3000E1D17 /* b2MotorJoint.h */; };
+		FA0B7A9B1A958EA3000E1D17 /* b2MouseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79A21A958EA3000E1D17 /* b2MouseJoint.cpp */; };
+		FA0B7A9C1A958EA3000E1D17 /* b2MouseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79A21A958EA3000E1D17 /* b2MouseJoint.cpp */; };
+		FA0B7A9D1A958EA3000E1D17 /* b2MouseJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79A31A958EA3000E1D17 /* b2MouseJoint.h */; };
+		FA0B7A9E1A958EA3000E1D17 /* b2PrismaticJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79A41A958EA3000E1D17 /* b2PrismaticJoint.cpp */; };
+		FA0B7A9F1A958EA3000E1D17 /* b2PrismaticJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79A41A958EA3000E1D17 /* b2PrismaticJoint.cpp */; };
+		FA0B7AA01A958EA3000E1D17 /* b2PrismaticJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79A51A958EA3000E1D17 /* b2PrismaticJoint.h */; };
+		FA0B7AA11A958EA3000E1D17 /* b2PulleyJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79A61A958EA3000E1D17 /* b2PulleyJoint.cpp */; };
+		FA0B7AA21A958EA3000E1D17 /* b2PulleyJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79A61A958EA3000E1D17 /* b2PulleyJoint.cpp */; };
+		FA0B7AA31A958EA3000E1D17 /* b2PulleyJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79A71A958EA3000E1D17 /* b2PulleyJoint.h */; };
+		FA0B7AA41A958EA3000E1D17 /* b2RevoluteJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79A81A958EA3000E1D17 /* b2RevoluteJoint.cpp */; };
+		FA0B7AA51A958EA3000E1D17 /* b2RevoluteJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79A81A958EA3000E1D17 /* b2RevoluteJoint.cpp */; };
+		FA0B7AA61A958EA3000E1D17 /* b2RevoluteJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79A91A958EA3000E1D17 /* b2RevoluteJoint.h */; };
+		FA0B7AA71A958EA3000E1D17 /* b2RopeJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79AA1A958EA3000E1D17 /* b2RopeJoint.cpp */; };
+		FA0B7AA81A958EA3000E1D17 /* b2RopeJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79AA1A958EA3000E1D17 /* b2RopeJoint.cpp */; };
+		FA0B7AA91A958EA3000E1D17 /* b2RopeJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79AB1A958EA3000E1D17 /* b2RopeJoint.h */; };
+		FA0B7AAA1A958EA3000E1D17 /* b2WeldJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79AC1A958EA3000E1D17 /* b2WeldJoint.cpp */; };
+		FA0B7AAB1A958EA3000E1D17 /* b2WeldJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79AC1A958EA3000E1D17 /* b2WeldJoint.cpp */; };
+		FA0B7AAC1A958EA3000E1D17 /* b2WeldJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79AD1A958EA3000E1D17 /* b2WeldJoint.h */; };
+		FA0B7AAD1A958EA3000E1D17 /* b2WheelJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79AE1A958EA3000E1D17 /* b2WheelJoint.cpp */; };
+		FA0B7AAE1A958EA3000E1D17 /* b2WheelJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79AE1A958EA3000E1D17 /* b2WheelJoint.cpp */; };
+		FA0B7AAF1A958EA3000E1D17 /* b2WheelJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79AF1A958EA3000E1D17 /* b2WheelJoint.h */; };
+		FA0B7AB11A958EA3000E1D17 /* b2Rope.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79B21A958EA3000E1D17 /* b2Rope.cpp */; };
+		FA0B7AB21A958EA3000E1D17 /* b2Rope.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79B21A958EA3000E1D17 /* b2Rope.cpp */; };
+		FA0B7AB31A958EA3000E1D17 /* b2Rope.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79B31A958EA3000E1D17 /* b2Rope.h */; };
+		FA0B7AB41A958EA3000E1D17 /* ddsinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79B51A958EA3000E1D17 /* ddsinfo.h */; };
+		FA0B7AB51A958EA3000E1D17 /* ddsparse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79B61A958EA3000E1D17 /* ddsparse.cpp */; };
+		FA0B7AB61A958EA3000E1D17 /* ddsparse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79B61A958EA3000E1D17 /* ddsparse.cpp */; };
+		FA0B7AB71A958EA3000E1D17 /* ddsparse.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79B71A958EA3000E1D17 /* ddsparse.h */; };
+		FA0B7AB81A958EA3000E1D17 /* enet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79B91A958EA3000E1D17 /* enet.cpp */; };
+		FA0B7AB91A958EA3000E1D17 /* enet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79B91A958EA3000E1D17 /* enet.cpp */; };
+		FA0B7ABA1A958EA3000E1D17 /* callbacks.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79BB1A958EA3000E1D17 /* callbacks.c */; };
+		FA0B7ABB1A958EA3000E1D17 /* callbacks.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79BB1A958EA3000E1D17 /* callbacks.c */; };
+		FA0B7ABD1A958EA3000E1D17 /* compress.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79BD1A958EA3000E1D17 /* compress.c */; };
+		FA0B7ABE1A958EA3000E1D17 /* compress.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79BD1A958EA3000E1D17 /* compress.c */; };
+		FA0B7ABF1A958EA3000E1D17 /* host.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79BE1A958EA3000E1D17 /* host.c */; };
+		FA0B7AC01A958EA3000E1D17 /* host.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79BE1A958EA3000E1D17 /* host.c */; };
+		FA0B7AC11A958EA3000E1D17 /* callbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79C11A958EA3000E1D17 /* callbacks.h */; };
+		FA0B7AC21A958EA3000E1D17 /* enet.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79C21A958EA3000E1D17 /* enet.h */; };
+		FA0B7AC31A958EA3000E1D17 /* list.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79C31A958EA3000E1D17 /* list.h */; };
+		FA0B7AC41A958EA3000E1D17 /* protocol.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79C41A958EA3000E1D17 /* protocol.h */; };
+		FA0B7AC51A958EA3000E1D17 /* time.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79C51A958EA3000E1D17 /* time.h */; };
+		FA0B7AC61A958EA3000E1D17 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79C61A958EA3000E1D17 /* types.h */; };
+		FA0B7AC71A958EA3000E1D17 /* unix.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79C71A958EA3000E1D17 /* unix.h */; };
+		FA0B7AC81A958EA3000E1D17 /* utility.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79C81A958EA3000E1D17 /* utility.h */; };
+		FA0B7AC91A958EA3000E1D17 /* win32.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79C91A958EA3000E1D17 /* win32.h */; };
+		FA0B7ACB1A958EA3000E1D17 /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79CB1A958EA3000E1D17 /* list.c */; };
+		FA0B7ACC1A958EA3000E1D17 /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79CB1A958EA3000E1D17 /* list.c */; };
+		FA0B7ACD1A958EA3000E1D17 /* packet.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79CC1A958EA3000E1D17 /* packet.c */; };
+		FA0B7ACE1A958EA3000E1D17 /* packet.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79CC1A958EA3000E1D17 /* packet.c */; };
+		FA0B7ACF1A958EA3000E1D17 /* peer.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79CD1A958EA3000E1D17 /* peer.c */; };
+		FA0B7AD01A958EA3000E1D17 /* peer.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79CD1A958EA3000E1D17 /* peer.c */; };
+		FA0B7AD11A958EA3000E1D17 /* protocol.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79CE1A958EA3000E1D17 /* protocol.c */; };
+		FA0B7AD21A958EA3000E1D17 /* protocol.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79CE1A958EA3000E1D17 /* protocol.c */; };
+		FA0B7AD41A958EA3000E1D17 /* unix.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79D01A958EA3000E1D17 /* unix.c */; };
+		FA0B7AD51A958EA3000E1D17 /* unix.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79D01A958EA3000E1D17 /* unix.c */; };
+		FA0B7AD61A958EA3000E1D17 /* win32.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79D11A958EA3000E1D17 /* win32.c */; };
+		FA0B7AD71A958EA3000E1D17 /* win32.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79D11A958EA3000E1D17 /* win32.c */; };
+		FA0B7AD81A958EA3000E1D17 /* lua-enet.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79D21A958EA3000E1D17 /* lua-enet.h */; };
+		FA0B7AD91A958EA3000E1D17 /* glad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79D41A958EA3000E1D17 /* glad.cpp */; };
+		FA0B7ADA1A958EA3000E1D17 /* glad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79D41A958EA3000E1D17 /* glad.cpp */; };
+		FA0B7ADC1A958EA3000E1D17 /* glad.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79D61A958EA3000E1D17 /* glad.hpp */; };
+		FA0B7ADD1A958EA3000E1D17 /* gladfuncs.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79D71A958EA3000E1D17 /* gladfuncs.hpp */; };
+		FA0B7ADE1A958EA3000E1D17 /* lodepng.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79D91A958EA3000E1D17 /* lodepng.cpp */; };
+		FA0B7ADF1A958EA3000E1D17 /* lodepng.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79D91A958EA3000E1D17 /* lodepng.cpp */; };
+		FA0B7AE01A958EA3000E1D17 /* lodepng.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B79DA1A958EA3000E1D17 /* lodepng.h */; };
+		FA0B7AE11A958EA3000E1D17 /* auxiliar.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79DD1A958EA3000E1D17 /* auxiliar.c */; };
+		FA0B7AE21A958EA3000E1D17 /* auxiliar.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79DD1A958EA3000E1D17 /* auxiliar.c */; };
+		FA0B7AE41A958EA3000E1D17 /* buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79DF1A958EA3000E1D17 /* buffer.c */; };
+		FA0B7AE51A958EA3000E1D17 /* buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79DF1A958EA3000E1D17 /* buffer.c */; };
+		FA0B7AE71A958EA3000E1D17 /* except.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79E11A958EA3000E1D17 /* except.c */; };
+		FA0B7AE81A958EA3000E1D17 /* except.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79E11A958EA3000E1D17 /* except.c */; };
+		FA0B7AEE1A958EA3000E1D17 /* inet.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79E71A958EA3000E1D17 /* inet.c */; };
+		FA0B7AEF1A958EA3000E1D17 /* inet.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79E71A958EA3000E1D17 /* inet.c */; };
+		FA0B7AF11A958EA3000E1D17 /* io.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79E91A958EA3000E1D17 /* io.c */; };
+		FA0B7AF21A958EA3000E1D17 /* io.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79E91A958EA3000E1D17 /* io.c */; };
+		FA0B7AF71A958EA3000E1D17 /* luasocket.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79EE1A958EA3000E1D17 /* luasocket.c */; };
+		FA0B7AF81A958EA3000E1D17 /* luasocket.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79EE1A958EA3000E1D17 /* luasocket.c */; };
+		FA0B7AFA1A958EA3000E1D17 /* mime.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79F01A958EA3000E1D17 /* mime.c */; };
+		FA0B7AFB1A958EA3000E1D17 /* mime.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79F01A958EA3000E1D17 /* mime.c */; };
+		FA0B7AFF1A958EA3000E1D17 /* options.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79F41A958EA3000E1D17 /* options.c */; };
+		FA0B7B001A958EA3000E1D17 /* options.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79F41A958EA3000E1D17 /* options.c */; };
+		FA0B7B031A958EA3000E1D17 /* select.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79F71A958EA3000E1D17 /* select.c */; };
+		FA0B7B041A958EA3000E1D17 /* select.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79F71A958EA3000E1D17 /* select.c */; };
+		FA0B7B0B1A958EA3000E1D17 /* tcp.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79FE1A958EA3000E1D17 /* tcp.c */; };
+		FA0B7B0C1A958EA3000E1D17 /* tcp.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B79FE1A958EA3000E1D17 /* tcp.c */; };
+		FA0B7B0E1A958EA3000E1D17 /* timeout.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A001A958EA3000E1D17 /* timeout.c */; };
+		FA0B7B0F1A958EA3000E1D17 /* timeout.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A001A958EA3000E1D17 /* timeout.c */; };
+		FA0B7B131A958EA3000E1D17 /* udp.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A041A958EA3000E1D17 /* udp.c */; };
+		FA0B7B141A958EA3000E1D17 /* udp.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A041A958EA3000E1D17 /* udp.c */; };
+		FA0B7B161A958EA3000E1D17 /* unix.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A061A958EA3000E1D17 /* unix.c */; };
+		FA0B7B171A958EA3000E1D17 /* unix.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A061A958EA3000E1D17 /* unix.c */; };
+		FA0B7B1B1A958EA3000E1D17 /* usocket.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A0A1A958EA3000E1D17 /* usocket.c */; };
+		FA0B7B1C1A958EA3000E1D17 /* usocket.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A0A1A958EA3000E1D17 /* usocket.c */; };
+		FA0B7B211A958EA3000E1D17 /* luasocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A0E1A958EA3000E1D17 /* luasocket.cpp */; };
+		FA0B7B221A958EA3000E1D17 /* luasocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A0E1A958EA3000E1D17 /* luasocket.cpp */; };
+		FA0B7B231A958EA3000E1D17 /* luasocket.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A0F1A958EA3000E1D17 /* luasocket.h */; };
+		FA0B7B241A958EA3000E1D17 /* lprefix.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A111A958EA3000E1D17 /* lprefix.h */; };
+		FA0B7B251A958EA3000E1D17 /* lutf8lib.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A121A958EA3000E1D17 /* lutf8lib.c */; };
+		FA0B7B261A958EA3000E1D17 /* lutf8lib.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A121A958EA3000E1D17 /* lutf8lib.c */; };
+		FA0B7B271A958EA3000E1D17 /* lutf8lib.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A131A958EA3000E1D17 /* lutf8lib.h */; };
+		FA0B7B281A958EA3000E1D17 /* simplexnoise1234.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A151A958EA3000E1D17 /* simplexnoise1234.cpp */; };
+		FA0B7B291A958EA3000E1D17 /* simplexnoise1234.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A151A958EA3000E1D17 /* simplexnoise1234.cpp */; };
+		FA0B7B2A1A958EA3000E1D17 /* simplexnoise1234.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A161A958EA3000E1D17 /* simplexnoise1234.h */; };
+		FA0B7B2B1A958EA3000E1D17 /* stb_image.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A181A958EA3000E1D17 /* stb_image.h */; };
+		FA0B7B2C1A958EA3000E1D17 /* checked.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A1B1A958EA3000E1D17 /* checked.h */; };
+		FA0B7B2D1A958EA3000E1D17 /* core.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A1C1A958EA3000E1D17 /* core.h */; };
+		FA0B7B2E1A958EA3000E1D17 /* unchecked.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A1D1A958EA3000E1D17 /* unchecked.h */; };
+		FA0B7B2F1A958EA3000E1D17 /* utf8.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A1E1A958EA3000E1D17 /* utf8.h */; };
+		FA0B7B301A958EA3000E1D17 /* wuff.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A201A958EA3000E1D17 /* wuff.c */; };
+		FA0B7B311A958EA3000E1D17 /* wuff.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A201A958EA3000E1D17 /* wuff.c */; };
+		FA0B7B321A958EA3000E1D17 /* wuff.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A211A958EA3000E1D17 /* wuff.h */; };
+		FA0B7B331A958EA3000E1D17 /* wuff_config.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A221A958EA3000E1D17 /* wuff_config.h */; };
+		FA0B7B341A958EA3000E1D17 /* wuff_convert.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A231A958EA3000E1D17 /* wuff_convert.c */; };
+		FA0B7B351A958EA3000E1D17 /* wuff_convert.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A231A958EA3000E1D17 /* wuff_convert.c */; };
+		FA0B7B361A958EA3000E1D17 /* wuff_convert.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A241A958EA3000E1D17 /* wuff_convert.h */; };
+		FA0B7B371A958EA3000E1D17 /* wuff_internal.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A251A958EA3000E1D17 /* wuff_internal.c */; };
+		FA0B7B381A958EA3000E1D17 /* wuff_internal.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A251A958EA3000E1D17 /* wuff_internal.c */; };
+		FA0B7B391A958EA3000E1D17 /* wuff_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7A261A958EA3000E1D17 /* wuff_internal.h */; };
+		FA0B7B3A1A958EA3000E1D17 /* wuff_memory.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A271A958EA3000E1D17 /* wuff_memory.c */; };
+		FA0B7B3B1A958EA3000E1D17 /* wuff_memory.c in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7A271A958EA3000E1D17 /* wuff_memory.c */; };
+		FA0B7CCD1A95902C000E1D17 /* Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B3E1A95902C000E1D17 /* Audio.cpp */; };
+		FA0B7CCE1A95902C000E1D17 /* Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B3E1A95902C000E1D17 /* Audio.cpp */; };
+		FA0B7CCF1A95902C000E1D17 /* Audio.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B3F1A95902C000E1D17 /* Audio.h */; };
+		FA0B7CD01A95902C000E1D17 /* Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B411A95902C000E1D17 /* Audio.cpp */; };
+		FA0B7CD11A95902C000E1D17 /* Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B411A95902C000E1D17 /* Audio.cpp */; };
+		FA0B7CD21A95902C000E1D17 /* Audio.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B421A95902C000E1D17 /* Audio.h */; };
+		FA0B7CD31A95902C000E1D17 /* Source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B431A95902C000E1D17 /* Source.cpp */; };
+		FA0B7CD41A95902C000E1D17 /* Source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B431A95902C000E1D17 /* Source.cpp */; };
+		FA0B7CD51A95902C000E1D17 /* Source.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B441A95902C000E1D17 /* Source.h */; };
+		FA0B7CD61A95902C000E1D17 /* Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B461A95902C000E1D17 /* Audio.cpp */; };
+		FA0B7CD71A95902C000E1D17 /* Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B461A95902C000E1D17 /* Audio.cpp */; };
+		FA0B7CD81A95902C000E1D17 /* Audio.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B471A95902C000E1D17 /* Audio.h */; };
+		FA0B7CD91A95902C000E1D17 /* Pool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B481A95902C000E1D17 /* Pool.cpp */; };
+		FA0B7CDA1A95902C000E1D17 /* Pool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B481A95902C000E1D17 /* Pool.cpp */; };
+		FA0B7CDB1A95902C000E1D17 /* Pool.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B491A95902C000E1D17 /* Pool.h */; };
+		FA0B7CDC1A95902C000E1D17 /* Source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B4A1A95902C000E1D17 /* Source.cpp */; };
+		FA0B7CDD1A95902C000E1D17 /* Source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B4A1A95902C000E1D17 /* Source.cpp */; };
+		FA0B7CDE1A95902C000E1D17 /* Source.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B4B1A95902C000E1D17 /* Source.h */; };
+		FA0B7CDF1A95902C000E1D17 /* Source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B4C1A95902C000E1D17 /* Source.cpp */; };
+		FA0B7CE01A95902C000E1D17 /* Source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B4C1A95902C000E1D17 /* Source.cpp */; };
+		FA0B7CE11A95902C000E1D17 /* Source.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B4D1A95902C000E1D17 /* Source.h */; };
+		FA0B7CE21A95902C000E1D17 /* wrap_Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B4E1A95902C000E1D17 /* wrap_Audio.cpp */; };
+		FA0B7CE31A95902C000E1D17 /* wrap_Audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B4E1A95902C000E1D17 /* wrap_Audio.cpp */; };
+		FA0B7CE41A95902C000E1D17 /* wrap_Audio.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B4F1A95902C000E1D17 /* wrap_Audio.h */; };
+		FA0B7CE51A95902C000E1D17 /* wrap_Source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B501A95902C000E1D17 /* wrap_Source.cpp */; };
+		FA0B7CE61A95902C000E1D17 /* wrap_Source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B501A95902C000E1D17 /* wrap_Source.cpp */; };
+		FA0B7CE71A95902C000E1D17 /* wrap_Source.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B511A95902C000E1D17 /* wrap_Source.h */; };
+		FA0B7CE81A95902C000E1D17 /* Event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B531A95902C000E1D17 /* Event.cpp */; };
+		FA0B7CE91A95902C000E1D17 /* Event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B531A95902C000E1D17 /* Event.cpp */; };
+		FA0B7CEA1A95902C000E1D17 /* Event.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B541A95902C000E1D17 /* Event.h */; };
+		FA0B7CEB1A95902C000E1D17 /* Event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B561A95902C000E1D17 /* Event.cpp */; };
+		FA0B7CEC1A95902C000E1D17 /* Event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B561A95902C000E1D17 /* Event.cpp */; };
+		FA0B7CED1A95902C000E1D17 /* Event.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B571A95902C000E1D17 /* Event.h */; };
+		FA0B7CF11A95902C000E1D17 /* DroppedFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B5B1A95902C000E1D17 /* DroppedFile.cpp */; };
+		FA0B7CF21A95902C000E1D17 /* DroppedFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B5B1A95902C000E1D17 /* DroppedFile.cpp */; };
+		FA0B7CF31A95902C000E1D17 /* DroppedFile.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B5C1A95902C000E1D17 /* DroppedFile.h */; };
+		FA0B7CF41A95902C000E1D17 /* File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B5D1A95902C000E1D17 /* File.cpp */; };
+		FA0B7CF51A95902C000E1D17 /* File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B5D1A95902C000E1D17 /* File.cpp */; };
+		FA0B7CF61A95902C000E1D17 /* File.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B5E1A95902C000E1D17 /* File.h */; };
+		FA0B7CF71A95902C000E1D17 /* FileData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B5F1A95902C000E1D17 /* FileData.cpp */; };
+		FA0B7CF81A95902C000E1D17 /* FileData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B5F1A95902C000E1D17 /* FileData.cpp */; };
+		FA0B7CF91A95902C000E1D17 /* FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B601A95902C000E1D17 /* FileData.h */; };
+		FA0B7CFA1A95902C000E1D17 /* Filesystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B611A95902C000E1D17 /* Filesystem.cpp */; };
+		FA0B7CFB1A95902C000E1D17 /* Filesystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B611A95902C000E1D17 /* Filesystem.cpp */; };
+		FA0B7CFC1A95902C000E1D17 /* Filesystem.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B621A95902C000E1D17 /* Filesystem.h */; };
+		FA0B7CFD1A95902C000E1D17 /* File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B641A95902C000E1D17 /* File.cpp */; };
+		FA0B7CFE1A95902C000E1D17 /* File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B641A95902C000E1D17 /* File.cpp */; };
+		FA0B7CFF1A95902C000E1D17 /* File.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B651A95902C000E1D17 /* File.h */; };
+		FA0B7D001A95902C000E1D17 /* Filesystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B661A95902C000E1D17 /* Filesystem.cpp */; };
+		FA0B7D011A95902C000E1D17 /* Filesystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B661A95902C000E1D17 /* Filesystem.cpp */; };
+		FA0B7D021A95902C000E1D17 /* Filesystem.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B671A95902C000E1D17 /* Filesystem.h */; };
+		FA0B7D031A95902C000E1D17 /* wrap_DroppedFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B681A95902C000E1D17 /* wrap_DroppedFile.cpp */; };
+		FA0B7D041A95902C000E1D17 /* wrap_DroppedFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B681A95902C000E1D17 /* wrap_DroppedFile.cpp */; };
+		FA0B7D051A95902C000E1D17 /* wrap_DroppedFile.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B691A95902C000E1D17 /* wrap_DroppedFile.h */; };
+		FA0B7D061A95902C000E1D17 /* wrap_File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B6A1A95902C000E1D17 /* wrap_File.cpp */; };
+		FA0B7D071A95902C000E1D17 /* wrap_File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B6A1A95902C000E1D17 /* wrap_File.cpp */; };
+		FA0B7D081A95902C000E1D17 /* wrap_File.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B6B1A95902C000E1D17 /* wrap_File.h */; };
+		FA0B7D091A95902C000E1D17 /* wrap_FileData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B6C1A95902C000E1D17 /* wrap_FileData.cpp */; };
+		FA0B7D0A1A95902C000E1D17 /* wrap_FileData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B6C1A95902C000E1D17 /* wrap_FileData.cpp */; };
+		FA0B7D0B1A95902C000E1D17 /* wrap_FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B6D1A95902C000E1D17 /* wrap_FileData.h */; };
+		FA0B7D0C1A95902C000E1D17 /* wrap_Filesystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B6E1A95902C000E1D17 /* wrap_Filesystem.cpp */; };
+		FA0B7D0D1A95902C000E1D17 /* wrap_Filesystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B6E1A95902C000E1D17 /* wrap_Filesystem.cpp */; };
+		FA0B7D0E1A95902C000E1D17 /* wrap_Filesystem.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B6F1A95902C000E1D17 /* wrap_Filesystem.h */; };
+		FA0B7D0F1A95902C000E1D17 /* BMFontRasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B711A95902C000E1D17 /* BMFontRasterizer.cpp */; };
+		FA0B7D101A95902C000E1D17 /* BMFontRasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B711A95902C000E1D17 /* BMFontRasterizer.cpp */; };
+		FA0B7D111A95902C000E1D17 /* BMFontRasterizer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B721A95902C000E1D17 /* BMFontRasterizer.h */; };
+		FA0B7D121A95902C000E1D17 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B731A95902C000E1D17 /* Font.cpp */; };
+		FA0B7D131A95902C000E1D17 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B731A95902C000E1D17 /* Font.cpp */; };
+		FA0B7D141A95902C000E1D17 /* Font.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B741A95902C000E1D17 /* Font.h */; };
+		FA0B7D151A95902C000E1D17 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B761A95902C000E1D17 /* Font.cpp */; };
+		FA0B7D161A95902C000E1D17 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B761A95902C000E1D17 /* Font.cpp */; };
+		FA0B7D171A95902C000E1D17 /* Font.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B771A95902C000E1D17 /* Font.h */; };
+		FA0B7D181A95902C000E1D17 /* TrueTypeRasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B781A95902C000E1D17 /* TrueTypeRasterizer.cpp */; };
+		FA0B7D191A95902C000E1D17 /* TrueTypeRasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B781A95902C000E1D17 /* TrueTypeRasterizer.cpp */; };
+		FA0B7D1A1A95902C000E1D17 /* TrueTypeRasterizer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B791A95902C000E1D17 /* TrueTypeRasterizer.h */; };
+		FA0B7D1B1A95902C000E1D17 /* GlyphData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B7A1A95902C000E1D17 /* GlyphData.cpp */; };
+		FA0B7D1C1A95902C000E1D17 /* GlyphData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B7A1A95902C000E1D17 /* GlyphData.cpp */; };
+		FA0B7D1D1A95902C000E1D17 /* GlyphData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B7B1A95902C000E1D17 /* GlyphData.h */; };
+		FA0B7D1E1A95902C000E1D17 /* ImageRasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B7C1A95902C000E1D17 /* ImageRasterizer.cpp */; };
+		FA0B7D1F1A95902C000E1D17 /* ImageRasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B7C1A95902C000E1D17 /* ImageRasterizer.cpp */; };
+		FA0B7D201A95902C000E1D17 /* ImageRasterizer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B7D1A95902C000E1D17 /* ImageRasterizer.h */; };
+		FA0B7D211A95902C000E1D17 /* Rasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B7E1A95902C000E1D17 /* Rasterizer.cpp */; };
+		FA0B7D221A95902C000E1D17 /* Rasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B7E1A95902C000E1D17 /* Rasterizer.cpp */; };
+		FA0B7D231A95902C000E1D17 /* Rasterizer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B7F1A95902C000E1D17 /* Rasterizer.h */; };
+		FA0B7D241A95902C000E1D17 /* Vera.ttf.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B801A95902C000E1D17 /* Vera.ttf.h */; };
+		FA0B7D251A95902C000E1D17 /* wrap_Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B811A95902C000E1D17 /* wrap_Font.cpp */; };
+		FA0B7D261A95902C000E1D17 /* wrap_Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B811A95902C000E1D17 /* wrap_Font.cpp */; };
+		FA0B7D271A95902C000E1D17 /* wrap_Font.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B821A95902C000E1D17 /* wrap_Font.h */; };
+		FA0B7D281A95902C000E1D17 /* wrap_GlyphData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B831A95902C000E1D17 /* wrap_GlyphData.cpp */; };
+		FA0B7D291A95902C000E1D17 /* wrap_GlyphData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B831A95902C000E1D17 /* wrap_GlyphData.cpp */; };
+		FA0B7D2A1A95902C000E1D17 /* wrap_GlyphData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B841A95902C000E1D17 /* wrap_GlyphData.h */; };
+		FA0B7D2B1A95902C000E1D17 /* wrap_Rasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B851A95902C000E1D17 /* wrap_Rasterizer.cpp */; };
+		FA0B7D2C1A95902C000E1D17 /* wrap_Rasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B851A95902C000E1D17 /* wrap_Rasterizer.cpp */; };
+		FA0B7D2D1A95902C000E1D17 /* wrap_Rasterizer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B861A95902C000E1D17 /* wrap_Rasterizer.h */; };
+		FA0B7D2E1A95902C000E1D17 /* Color.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B881A95902C000E1D17 /* Color.h */; };
+		FA0B7D2F1A95902C000E1D17 /* Drawable.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B891A95902C000E1D17 /* Drawable.h */; };
+		FA0B7D301A95902C000E1D17 /* Graphics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B8A1A95902C000E1D17 /* Graphics.cpp */; };
+		FA0B7D311A95902C000E1D17 /* Graphics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B8A1A95902C000E1D17 /* Graphics.cpp */; };
+		FA0B7D321A95902C000E1D17 /* Graphics.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B8B1A95902C000E1D17 /* Graphics.h */; };
+		FA0B7D331A95902C000E1D17 /* Canvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B8D1A95902C000E1D17 /* Canvas.cpp */; };
+		FA0B7D341A95902C000E1D17 /* Canvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B8D1A95902C000E1D17 /* Canvas.cpp */; };
+		FA0B7D351A95902C000E1D17 /* Canvas.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B8E1A95902C000E1D17 /* Canvas.h */; };
+		FA0B7D361A95902C000E1D17 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B8F1A95902C000E1D17 /* Font.cpp */; };
+		FA0B7D371A95902C000E1D17 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B8F1A95902C000E1D17 /* Font.cpp */; };
+		FA0B7D381A95902C000E1D17 /* Font.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B901A95902C000E1D17 /* Font.h */; };
+		FA0B7D391A95902C000E1D17 /* Graphics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B911A95902C000E1D17 /* Graphics.cpp */; };
+		FA0B7D3A1A95902C000E1D17 /* Graphics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B911A95902C000E1D17 /* Graphics.cpp */; };
+		FA0B7D3B1A95902C000E1D17 /* Graphics.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B921A95902C000E1D17 /* Graphics.h */; };
+		FA0B7D3C1A95902C000E1D17 /* Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B931A95902C000E1D17 /* Image.cpp */; };
+		FA0B7D3D1A95902C000E1D17 /* Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B931A95902C000E1D17 /* Image.cpp */; };
+		FA0B7D3E1A95902C000E1D17 /* Image.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B941A95902C000E1D17 /* Image.h */; };
+		FA0B7D3F1A95902C000E1D17 /* Mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B951A95902C000E1D17 /* Mesh.cpp */; };
+		FA0B7D401A95902C000E1D17 /* Mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B951A95902C000E1D17 /* Mesh.cpp */; };
+		FA0B7D411A95902C000E1D17 /* Mesh.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B961A95902C000E1D17 /* Mesh.h */; };
+		FA0B7D421A95902C000E1D17 /* OpenGL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B971A95902C000E1D17 /* OpenGL.cpp */; };
+		FA0B7D431A95902C000E1D17 /* OpenGL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B971A95902C000E1D17 /* OpenGL.cpp */; };
+		FA0B7D441A95902C000E1D17 /* OpenGL.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B981A95902C000E1D17 /* OpenGL.h */; };
+		FA0B7D451A95902C000E1D17 /* ParticleSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B991A95902C000E1D17 /* ParticleSystem.cpp */; };
+		FA0B7D461A95902C000E1D17 /* ParticleSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B991A95902C000E1D17 /* ParticleSystem.cpp */; };
+		FA0B7D471A95902C000E1D17 /* ParticleSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B9A1A95902C000E1D17 /* ParticleSystem.h */; };
+		FA0B7D481A95902C000E1D17 /* Polyline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B9B1A95902C000E1D17 /* Polyline.cpp */; };
+		FA0B7D491A95902C000E1D17 /* Polyline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B9B1A95902C000E1D17 /* Polyline.cpp */; };
+		FA0B7D4A1A95902C000E1D17 /* Polyline.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B9C1A95902C000E1D17 /* Polyline.h */; };
+		FA0B7D4B1A95902C000E1D17 /* Shader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B9D1A95902C000E1D17 /* Shader.cpp */; };
+		FA0B7D4C1A95902C000E1D17 /* Shader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B9D1A95902C000E1D17 /* Shader.cpp */; };
+		FA0B7D4D1A95902C000E1D17 /* Shader.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7B9E1A95902C000E1D17 /* Shader.h */; };
+		FA0B7D4E1A95902C000E1D17 /* SpriteBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B9F1A95902C000E1D17 /* SpriteBatch.cpp */; };
+		FA0B7D4F1A95902C000E1D17 /* SpriteBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7B9F1A95902C000E1D17 /* SpriteBatch.cpp */; };
+		FA0B7D501A95902C000E1D17 /* SpriteBatch.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BA01A95902C000E1D17 /* SpriteBatch.h */; };
+		FA0B7D511A95902C000E1D17 /* Text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BA11A95902C000E1D17 /* Text.cpp */; };
+		FA0B7D521A95902C000E1D17 /* Text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BA11A95902C000E1D17 /* Text.cpp */; };
+		FA0B7D531A95902C000E1D17 /* Text.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BA21A95902C000E1D17 /* Text.h */; };
+		FA0B7D551A95902C000E1D17 /* VertexBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BA41A95902C000E1D17 /* VertexBuffer.cpp */; };
+		FA0B7D561A95902C000E1D17 /* VertexBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BA41A95902C000E1D17 /* VertexBuffer.cpp */; };
+		FA0B7D571A95902C000E1D17 /* VertexBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BA51A95902C000E1D17 /* VertexBuffer.h */; };
+		FA0B7D581A95902C000E1D17 /* wrap_Canvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BA61A95902C000E1D17 /* wrap_Canvas.cpp */; };
+		FA0B7D591A95902C000E1D17 /* wrap_Canvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BA61A95902C000E1D17 /* wrap_Canvas.cpp */; };
+		FA0B7D5A1A95902C000E1D17 /* wrap_Canvas.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BA71A95902C000E1D17 /* wrap_Canvas.h */; };
+		FA0B7D5B1A95902C000E1D17 /* wrap_Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BA81A95902C000E1D17 /* wrap_Font.cpp */; };
+		FA0B7D5C1A95902C000E1D17 /* wrap_Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BA81A95902C000E1D17 /* wrap_Font.cpp */; };
+		FA0B7D5D1A95902C000E1D17 /* wrap_Font.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BA91A95902C000E1D17 /* wrap_Font.h */; };
+		FA0B7D5E1A95902C000E1D17 /* wrap_Graphics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BAA1A95902C000E1D17 /* wrap_Graphics.cpp */; };
+		FA0B7D5F1A95902C000E1D17 /* wrap_Graphics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BAA1A95902C000E1D17 /* wrap_Graphics.cpp */; };
+		FA0B7D601A95902C000E1D17 /* wrap_Graphics.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BAB1A95902C000E1D17 /* wrap_Graphics.h */; };
+		FA0B7D611A95902C000E1D17 /* wrap_Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BAC1A95902C000E1D17 /* wrap_Image.cpp */; };
+		FA0B7D621A95902C000E1D17 /* wrap_Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BAC1A95902C000E1D17 /* wrap_Image.cpp */; };
+		FA0B7D631A95902C000E1D17 /* wrap_Image.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BAD1A95902C000E1D17 /* wrap_Image.h */; };
+		FA0B7D641A95902C000E1D17 /* wrap_Mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BAE1A95902C000E1D17 /* wrap_Mesh.cpp */; };
+		FA0B7D651A95902C000E1D17 /* wrap_Mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BAE1A95902C000E1D17 /* wrap_Mesh.cpp */; };
+		FA0B7D661A95902C000E1D17 /* wrap_Mesh.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BAF1A95902C000E1D17 /* wrap_Mesh.h */; };
+		FA0B7D671A95902C000E1D17 /* wrap_ParticleSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BB01A95902C000E1D17 /* wrap_ParticleSystem.cpp */; };
+		FA0B7D681A95902C000E1D17 /* wrap_ParticleSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BB01A95902C000E1D17 /* wrap_ParticleSystem.cpp */; };
+		FA0B7D691A95902C000E1D17 /* wrap_ParticleSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BB11A95902C000E1D17 /* wrap_ParticleSystem.h */; };
+		FA0B7D6D1A95902C000E1D17 /* wrap_Shader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BB41A95902C000E1D17 /* wrap_Shader.cpp */; };
+		FA0B7D6E1A95902C000E1D17 /* wrap_Shader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BB41A95902C000E1D17 /* wrap_Shader.cpp */; };
+		FA0B7D6F1A95902C000E1D17 /* wrap_Shader.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BB51A95902C000E1D17 /* wrap_Shader.h */; };
+		FA0B7D701A95902C000E1D17 /* wrap_SpriteBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BB61A95902C000E1D17 /* wrap_SpriteBatch.cpp */; };
+		FA0B7D711A95902C000E1D17 /* wrap_SpriteBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BB61A95902C000E1D17 /* wrap_SpriteBatch.cpp */; };
+		FA0B7D721A95902C000E1D17 /* wrap_SpriteBatch.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BB71A95902C000E1D17 /* wrap_SpriteBatch.h */; };
+		FA0B7D731A95902C000E1D17 /* wrap_Text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BB81A95902C000E1D17 /* wrap_Text.cpp */; };
+		FA0B7D741A95902C000E1D17 /* wrap_Text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BB81A95902C000E1D17 /* wrap_Text.cpp */; };
+		FA0B7D751A95902C000E1D17 /* wrap_Text.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BB91A95902C000E1D17 /* wrap_Text.h */; };
+		FA0B7D791A95902C000E1D17 /* Quad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BBC1A95902C000E1D17 /* Quad.cpp */; };
+		FA0B7D7A1A95902C000E1D17 /* Quad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BBC1A95902C000E1D17 /* Quad.cpp */; };
+		FA0B7D7B1A95902C000E1D17 /* Quad.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BBD1A95902C000E1D17 /* Quad.h */; };
+		FA0B7D7C1A95902C000E1D17 /* Texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BBE1A95902C000E1D17 /* Texture.cpp */; };
+		FA0B7D7D1A95902C000E1D17 /* Texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BBE1A95902C000E1D17 /* Texture.cpp */; };
+		FA0B7D7E1A95902C000E1D17 /* Texture.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BBF1A95902C000E1D17 /* Texture.h */; };
+		FA0B7D7F1A95902C000E1D17 /* Volatile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BC01A95902C000E1D17 /* Volatile.cpp */; };
+		FA0B7D801A95902C000E1D17 /* Volatile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BC01A95902C000E1D17 /* Volatile.cpp */; };
+		FA0B7D811A95902C000E1D17 /* Volatile.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BC11A95902C000E1D17 /* Volatile.h */; };
+		FA0B7D821A95902C000E1D17 /* CompressedData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BC31A95902C000E1D17 /* CompressedData.cpp */; };
+		FA0B7D831A95902C000E1D17 /* CompressedData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BC31A95902C000E1D17 /* CompressedData.cpp */; };
+		FA0B7D841A95902C000E1D17 /* CompressedData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BC41A95902C000E1D17 /* CompressedData.h */; };
+		FA0B7D851A95902C000E1D17 /* Image.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BC51A95902C000E1D17 /* Image.h */; };
+		FA0B7D861A95902C000E1D17 /* ImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BC61A95902C000E1D17 /* ImageData.cpp */; };
+		FA0B7D871A95902C000E1D17 /* ImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BC61A95902C000E1D17 /* ImageData.cpp */; };
+		FA0B7D881A95902C000E1D17 /* ImageData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BC71A95902C000E1D17 /* ImageData.h */; };
+		FA0B7D891A95902C000E1D17 /* CompressedData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BC91A95902C000E1D17 /* CompressedData.cpp */; };
+		FA0B7D8A1A95902C000E1D17 /* CompressedData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BC91A95902C000E1D17 /* CompressedData.cpp */; };
+		FA0B7D8B1A95902C000E1D17 /* CompressedData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BCA1A95902C000E1D17 /* CompressedData.h */; };
+		FA0B7D8C1A95902C000E1D17 /* CompressedFormatHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BCB1A95902C000E1D17 /* CompressedFormatHandler.h */; };
+		FA0B7D8D1A95902C000E1D17 /* ddsHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BCC1A95902C000E1D17 /* ddsHandler.cpp */; };
+		FA0B7D8E1A95902C000E1D17 /* ddsHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BCC1A95902C000E1D17 /* ddsHandler.cpp */; };
+		FA0B7D8F1A95902C000E1D17 /* ddsHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BCD1A95902C000E1D17 /* ddsHandler.h */; };
+		FA0B7D901A95902C000E1D17 /* FormatHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BCE1A95902C000E1D17 /* FormatHandler.cpp */; };
+		FA0B7D911A95902C000E1D17 /* FormatHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BCE1A95902C000E1D17 /* FormatHandler.cpp */; };
+		FA0B7D921A95902C000E1D17 /* FormatHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BCF1A95902C000E1D17 /* FormatHandler.h */; };
+		FA0B7D931A95902C000E1D17 /* Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BD01A95902C000E1D17 /* Image.cpp */; };
+		FA0B7D941A95902C000E1D17 /* Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BD01A95902C000E1D17 /* Image.cpp */; };
+		FA0B7D951A95902C000E1D17 /* Image.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BD11A95902C000E1D17 /* Image.h */; };
+		FA0B7D961A95902C000E1D17 /* ImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BD21A95902C000E1D17 /* ImageData.cpp */; };
+		FA0B7D971A95902C000E1D17 /* ImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BD21A95902C000E1D17 /* ImageData.cpp */; };
+		FA0B7D981A95902C000E1D17 /* ImageData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BD31A95902C000E1D17 /* ImageData.h */; };
+		FA0B7D991A95902C000E1D17 /* ImageIOHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BD41A95902C000E1D17 /* ImageIOHandler.cpp */; };
+		FA0B7D9A1A95902C000E1D17 /* ImageIOHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BD41A95902C000E1D17 /* ImageIOHandler.cpp */; };
+		FA0B7D9B1A95902C000E1D17 /* ImageIOHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BD51A95902C000E1D17 /* ImageIOHandler.h */; };
+		FA0B7D9C1A95902C000E1D17 /* JPEGHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BD61A95902C000E1D17 /* JPEGHandler.cpp */; };
+		FA0B7D9D1A95902C000E1D17 /* JPEGHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BD61A95902C000E1D17 /* JPEGHandler.cpp */; };
+		FA0B7D9E1A95902C000E1D17 /* JPEGHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BD71A95902C000E1D17 /* JPEGHandler.h */; };
+		FA0B7D9F1A95902C000E1D17 /* KTXHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BD81A95902C000E1D17 /* KTXHandler.cpp */; };
+		FA0B7DA01A95902C000E1D17 /* KTXHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BD81A95902C000E1D17 /* KTXHandler.cpp */; };
+		FA0B7DA11A95902C000E1D17 /* KTXHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BD91A95902C000E1D17 /* KTXHandler.h */; };
+		FA0B7DA21A95902C000E1D17 /* PKMHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BDA1A95902C000E1D17 /* PKMHandler.cpp */; };
+		FA0B7DA31A95902C000E1D17 /* PKMHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BDA1A95902C000E1D17 /* PKMHandler.cpp */; };
+		FA0B7DA41A95902C000E1D17 /* PKMHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BDB1A95902C000E1D17 /* PKMHandler.h */; };
+		FA0B7DA51A95902C000E1D17 /* PNGHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BDC1A95902C000E1D17 /* PNGHandler.cpp */; };
+		FA0B7DA61A95902C000E1D17 /* PNGHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BDC1A95902C000E1D17 /* PNGHandler.cpp */; };
+		FA0B7DA71A95902C000E1D17 /* PNGHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BDD1A95902C000E1D17 /* PNGHandler.h */; };
+		FA0B7DA81A95902C000E1D17 /* PVRHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BDE1A95902C000E1D17 /* PVRHandler.cpp */; };
+		FA0B7DA91A95902C000E1D17 /* PVRHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BDE1A95902C000E1D17 /* PVRHandler.cpp */; };
+		FA0B7DAA1A95902C000E1D17 /* PVRHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BDF1A95902C000E1D17 /* PVRHandler.h */; };
+		FA0B7DAB1A95902C000E1D17 /* STBHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BE01A95902C000E1D17 /* STBHandler.cpp */; };
+		FA0B7DAC1A95902C000E1D17 /* STBHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BE01A95902C000E1D17 /* STBHandler.cpp */; };
+		FA0B7DAD1A95902C000E1D17 /* STBHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BE11A95902C000E1D17 /* STBHandler.h */; };
+		FA0B7DAE1A95902C000E1D17 /* wrap_CompressedData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BE21A95902C000E1D17 /* wrap_CompressedData.cpp */; };
+		FA0B7DAF1A95902C000E1D17 /* wrap_CompressedData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BE21A95902C000E1D17 /* wrap_CompressedData.cpp */; };
+		FA0B7DB01A95902C000E1D17 /* wrap_CompressedData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BE31A95902C000E1D17 /* wrap_CompressedData.h */; };
+		FA0B7DB11A95902C000E1D17 /* wrap_Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BE41A95902C000E1D17 /* wrap_Image.cpp */; };
+		FA0B7DB21A95902C000E1D17 /* wrap_Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BE41A95902C000E1D17 /* wrap_Image.cpp */; };
+		FA0B7DB31A95902C000E1D17 /* wrap_Image.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BE51A95902C000E1D17 /* wrap_Image.h */; };
+		FA0B7DB41A95902C000E1D17 /* wrap_ImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BE61A95902C000E1D17 /* wrap_ImageData.cpp */; };
+		FA0B7DB51A95902C000E1D17 /* wrap_ImageData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BE61A95902C000E1D17 /* wrap_ImageData.cpp */; };
+		FA0B7DB61A95902C000E1D17 /* wrap_ImageData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BE71A95902C000E1D17 /* wrap_ImageData.h */; };
+		FA0B7DB71A95902C000E1D17 /* Joystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BE91A95902C000E1D17 /* Joystick.cpp */; };
+		FA0B7DB81A95902C000E1D17 /* Joystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BE91A95902C000E1D17 /* Joystick.cpp */; };
+		FA0B7DB91A95902C000E1D17 /* Joystick.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BEA1A95902C000E1D17 /* Joystick.h */; };
+		FA0B7DBA1A95902C000E1D17 /* JoystickModule.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BEB1A95902C000E1D17 /* JoystickModule.h */; };
+		FA0B7DBB1A95902C000E1D17 /* Joystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BED1A95902C000E1D17 /* Joystick.cpp */; };
+		FA0B7DBC1A95902C000E1D17 /* Joystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BED1A95902C000E1D17 /* Joystick.cpp */; };
+		FA0B7DBD1A95902C000E1D17 /* Joystick.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BEE1A95902C000E1D17 /* Joystick.h */; };
+		FA0B7DBE1A95902C000E1D17 /* JoystickModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BEF1A95902C000E1D17 /* JoystickModule.cpp */; };
+		FA0B7DBF1A95902C000E1D17 /* JoystickModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BEF1A95902C000E1D17 /* JoystickModule.cpp */; };
+		FA0B7DC01A95902C000E1D17 /* JoystickModule.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BF01A95902C000E1D17 /* JoystickModule.h */; };
+		FA0B7DC11A95902C000E1D17 /* wrap_Joystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BF11A95902C000E1D17 /* wrap_Joystick.cpp */; };
+		FA0B7DC21A95902C000E1D17 /* wrap_Joystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BF11A95902C000E1D17 /* wrap_Joystick.cpp */; };
+		FA0B7DC31A95902C000E1D17 /* wrap_Joystick.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BF21A95902C000E1D17 /* wrap_Joystick.h */; };
+		FA0B7DC41A95902C000E1D17 /* wrap_JoystickModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BF31A95902C000E1D17 /* wrap_JoystickModule.cpp */; };
+		FA0B7DC51A95902C000E1D17 /* wrap_JoystickModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BF31A95902C000E1D17 /* wrap_JoystickModule.cpp */; };
+		FA0B7DC61A95902C000E1D17 /* wrap_JoystickModule.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BF41A95902C000E1D17 /* wrap_JoystickModule.h */; };
+		FA0B7DC71A95902C000E1D17 /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BF61A95902C000E1D17 /* Keyboard.cpp */; };
+		FA0B7DC81A95902C000E1D17 /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BF61A95902C000E1D17 /* Keyboard.cpp */; };
+		FA0B7DC91A95902C000E1D17 /* Keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BF71A95902C000E1D17 /* Keyboard.h */; };
+		FA0B7DCA1A95902C000E1D17 /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BF91A95902C000E1D17 /* Keyboard.cpp */; };
+		FA0B7DCB1A95902C000E1D17 /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BF91A95902C000E1D17 /* Keyboard.cpp */; };
+		FA0B7DCC1A95902C000E1D17 /* Keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BFA1A95902C000E1D17 /* Keyboard.h */; };
+		FA0B7DCD1A95902C000E1D17 /* wrap_Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BFB1A95902C000E1D17 /* wrap_Keyboard.cpp */; };
+		FA0B7DCE1A95902C000E1D17 /* wrap_Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BFB1A95902C000E1D17 /* wrap_Keyboard.cpp */; };
+		FA0B7DCF1A95902C000E1D17 /* wrap_Keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BFC1A95902C000E1D17 /* wrap_Keyboard.h */; };
+		FA0B7DD01A95902C000E1D17 /* love.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BFE1A95902C000E1D17 /* love.cpp */; };
+		FA0B7DD11A95902C000E1D17 /* love.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7BFE1A95902C000E1D17 /* love.cpp */; };
+		FA0B7DD21A95902C000E1D17 /* love.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7BFF1A95902C000E1D17 /* love.h */; };
+		FA0B7DD31A95902C000E1D17 /* BezierCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C011A95902C000E1D17 /* BezierCurve.cpp */; };
+		FA0B7DD41A95902C000E1D17 /* BezierCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C011A95902C000E1D17 /* BezierCurve.cpp */; };
+		FA0B7DD51A95902C000E1D17 /* BezierCurve.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C021A95902C000E1D17 /* BezierCurve.h */; };
+		FA0B7DD61A95902C000E1D17 /* MathModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C031A95902C000E1D17 /* MathModule.cpp */; };
+		FA0B7DD71A95902C000E1D17 /* MathModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C031A95902C000E1D17 /* MathModule.cpp */; };
+		FA0B7DD81A95902C000E1D17 /* MathModule.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C041A95902C000E1D17 /* MathModule.h */; };
+		FA0B7DD91A95902C000E1D17 /* RandomGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C051A95902C000E1D17 /* RandomGenerator.cpp */; };
+		FA0B7DDA1A95902C000E1D17 /* RandomGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C051A95902C000E1D17 /* RandomGenerator.cpp */; };
+		FA0B7DDB1A95902C000E1D17 /* RandomGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C061A95902C000E1D17 /* RandomGenerator.h */; };
+		FA0B7DDC1A95902C000E1D17 /* wrap_BezierCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C071A95902C000E1D17 /* wrap_BezierCurve.cpp */; };
+		FA0B7DDD1A95902C000E1D17 /* wrap_BezierCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C071A95902C000E1D17 /* wrap_BezierCurve.cpp */; };
+		FA0B7DDE1A95902C000E1D17 /* wrap_BezierCurve.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C081A95902C000E1D17 /* wrap_BezierCurve.h */; };
+		FA0B7DDF1A95902C000E1D17 /* wrap_Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C091A95902C000E1D17 /* wrap_Math.cpp */; };
+		FA0B7DE01A95902C000E1D17 /* wrap_Math.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C091A95902C000E1D17 /* wrap_Math.cpp */; };
+		FA0B7DE11A95902C000E1D17 /* wrap_Math.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C0A1A95902C000E1D17 /* wrap_Math.h */; };
+		FA0B7DE21A95902C000E1D17 /* wrap_RandomGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C0B1A95902C000E1D17 /* wrap_RandomGenerator.cpp */; };
+		FA0B7DE31A95902C000E1D17 /* wrap_RandomGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C0B1A95902C000E1D17 /* wrap_RandomGenerator.cpp */; };
+		FA0B7DE41A95902C000E1D17 /* wrap_RandomGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C0C1A95902C000E1D17 /* wrap_RandomGenerator.h */; };
+		FA0B7DE51A95902C000E1D17 /* Cursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C0E1A95902C000E1D17 /* Cursor.cpp */; };
+		FA0B7DE61A95902C000E1D17 /* Cursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C0E1A95902C000E1D17 /* Cursor.cpp */; };
+		FA0B7DE71A95902C000E1D17 /* Cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C0F1A95902C000E1D17 /* Cursor.h */; };
+		FA0B7DE81A95902C000E1D17 /* Mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C101A95902C000E1D17 /* Mouse.cpp */; };
+		FA0B7DE91A95902C000E1D17 /* Mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C101A95902C000E1D17 /* Mouse.cpp */; };
+		FA0B7DEA1A95902C000E1D17 /* Mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C111A95902C000E1D17 /* Mouse.h */; };
+		FA0B7DEB1A95902C000E1D17 /* Cursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C131A95902C000E1D17 /* Cursor.cpp */; };
+		FA0B7DEC1A95902C000E1D17 /* Cursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C131A95902C000E1D17 /* Cursor.cpp */; };
+		FA0B7DED1A95902C000E1D17 /* Cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C141A95902C000E1D17 /* Cursor.h */; };
+		FA0B7DEE1A95902C000E1D17 /* Mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C151A95902C000E1D17 /* Mouse.cpp */; };
+		FA0B7DEF1A95902C000E1D17 /* Mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C151A95902C000E1D17 /* Mouse.cpp */; };
+		FA0B7DF01A95902C000E1D17 /* Mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C161A95902C000E1D17 /* Mouse.h */; };
+		FA0B7DF11A95902C000E1D17 /* wrap_Cursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C171A95902C000E1D17 /* wrap_Cursor.cpp */; };
+		FA0B7DF21A95902C000E1D17 /* wrap_Cursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C171A95902C000E1D17 /* wrap_Cursor.cpp */; };
+		FA0B7DF31A95902C000E1D17 /* wrap_Cursor.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C181A95902C000E1D17 /* wrap_Cursor.h */; };
+		FA0B7DF41A95902C000E1D17 /* wrap_Mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C191A95902C000E1D17 /* wrap_Mouse.cpp */; };
+		FA0B7DF51A95902C000E1D17 /* wrap_Mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C191A95902C000E1D17 /* wrap_Mouse.cpp */; };
+		FA0B7DF61A95902C000E1D17 /* wrap_Mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C1A1A95902C000E1D17 /* wrap_Mouse.h */; };
+		FA0B7DF71A95902C000E1D17 /* Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C1C1A95902C000E1D17 /* Body.cpp */; };
+		FA0B7DF81A95902C000E1D17 /* Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C1C1A95902C000E1D17 /* Body.cpp */; };
+		FA0B7DF91A95902C000E1D17 /* Body.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C1D1A95902C000E1D17 /* Body.h */; };
+		FA0B7DFA1A95902C000E1D17 /* Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C1F1A95902C000E1D17 /* Body.cpp */; };
+		FA0B7DFB1A95902C000E1D17 /* Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C1F1A95902C000E1D17 /* Body.cpp */; };
+		FA0B7DFC1A95902C000E1D17 /* Body.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C201A95902C000E1D17 /* Body.h */; };
+		FA0B7DFD1A95902C000E1D17 /* ChainShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C211A95902C000E1D17 /* ChainShape.cpp */; };
+		FA0B7DFE1A95902C000E1D17 /* ChainShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C211A95902C000E1D17 /* ChainShape.cpp */; };
+		FA0B7DFF1A95902C000E1D17 /* ChainShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C221A95902C000E1D17 /* ChainShape.h */; };
+		FA0B7E001A95902C000E1D17 /* CircleShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C231A95902C000E1D17 /* CircleShape.cpp */; };
+		FA0B7E011A95902C000E1D17 /* CircleShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C231A95902C000E1D17 /* CircleShape.cpp */; };
+		FA0B7E021A95902C000E1D17 /* CircleShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C241A95902C000E1D17 /* CircleShape.h */; };
+		FA0B7E031A95902C000E1D17 /* Contact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C251A95902C000E1D17 /* Contact.cpp */; };
+		FA0B7E041A95902C000E1D17 /* Contact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C251A95902C000E1D17 /* Contact.cpp */; };
+		FA0B7E051A95902C000E1D17 /* Contact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C261A95902C000E1D17 /* Contact.h */; };
+		FA0B7E061A95902C000E1D17 /* DistanceJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C271A95902C000E1D17 /* DistanceJoint.cpp */; };
+		FA0B7E071A95902C000E1D17 /* DistanceJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C271A95902C000E1D17 /* DistanceJoint.cpp */; };
+		FA0B7E081A95902C000E1D17 /* DistanceJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C281A95902C000E1D17 /* DistanceJoint.h */; };
+		FA0B7E091A95902C000E1D17 /* EdgeShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C291A95902C000E1D17 /* EdgeShape.cpp */; };
+		FA0B7E0A1A95902C000E1D17 /* EdgeShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C291A95902C000E1D17 /* EdgeShape.cpp */; };
+		FA0B7E0B1A95902C000E1D17 /* EdgeShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C2A1A95902C000E1D17 /* EdgeShape.h */; };
+		FA0B7E0C1A95902C000E1D17 /* Fixture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C2B1A95902C000E1D17 /* Fixture.cpp */; };
+		FA0B7E0D1A95902C000E1D17 /* Fixture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C2B1A95902C000E1D17 /* Fixture.cpp */; };
+		FA0B7E0E1A95902C000E1D17 /* Fixture.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C2C1A95902C000E1D17 /* Fixture.h */; };
+		FA0B7E0F1A95902C000E1D17 /* FrictionJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C2D1A95902C000E1D17 /* FrictionJoint.cpp */; };
+		FA0B7E101A95902C000E1D17 /* FrictionJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C2D1A95902C000E1D17 /* FrictionJoint.cpp */; };
+		FA0B7E111A95902C000E1D17 /* FrictionJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C2E1A95902C000E1D17 /* FrictionJoint.h */; };
+		FA0B7E121A95902C000E1D17 /* GearJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C2F1A95902C000E1D17 /* GearJoint.cpp */; };
+		FA0B7E131A95902C000E1D17 /* GearJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C2F1A95902C000E1D17 /* GearJoint.cpp */; };
+		FA0B7E141A95902C000E1D17 /* GearJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C301A95902C000E1D17 /* GearJoint.h */; };
+		FA0B7E151A95902C000E1D17 /* Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C311A95902C000E1D17 /* Joint.cpp */; };
+		FA0B7E161A95902C000E1D17 /* Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C311A95902C000E1D17 /* Joint.cpp */; };
+		FA0B7E171A95902C000E1D17 /* Joint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C321A95902C000E1D17 /* Joint.h */; };
+		FA0B7E181A95902C000E1D17 /* MotorJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C331A95902C000E1D17 /* MotorJoint.cpp */; };
+		FA0B7E191A95902C000E1D17 /* MotorJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C331A95902C000E1D17 /* MotorJoint.cpp */; };
+		FA0B7E1A1A95902C000E1D17 /* MotorJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C341A95902C000E1D17 /* MotorJoint.h */; };
+		FA0B7E1B1A95902C000E1D17 /* MouseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C351A95902C000E1D17 /* MouseJoint.cpp */; };
+		FA0B7E1C1A95902C000E1D17 /* MouseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C351A95902C000E1D17 /* MouseJoint.cpp */; };
+		FA0B7E1D1A95902C000E1D17 /* MouseJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C361A95902C000E1D17 /* MouseJoint.h */; };
+		FA0B7E1E1A95902C000E1D17 /* Physics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C371A95902C000E1D17 /* Physics.cpp */; };
+		FA0B7E1F1A95902C000E1D17 /* Physics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C371A95902C000E1D17 /* Physics.cpp */; };
+		FA0B7E201A95902C000E1D17 /* Physics.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C381A95902C000E1D17 /* Physics.h */; };
+		FA0B7E211A95902C000E1D17 /* PolygonShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C391A95902C000E1D17 /* PolygonShape.cpp */; };
+		FA0B7E221A95902C000E1D17 /* PolygonShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C391A95902C000E1D17 /* PolygonShape.cpp */; };
+		FA0B7E231A95902C000E1D17 /* PolygonShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C3A1A95902C000E1D17 /* PolygonShape.h */; };
+		FA0B7E241A95902C000E1D17 /* PrismaticJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C3B1A95902C000E1D17 /* PrismaticJoint.cpp */; };
+		FA0B7E251A95902C000E1D17 /* PrismaticJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C3B1A95902C000E1D17 /* PrismaticJoint.cpp */; };
+		FA0B7E261A95902C000E1D17 /* PrismaticJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C3C1A95902C000E1D17 /* PrismaticJoint.h */; };
+		FA0B7E271A95902C000E1D17 /* PulleyJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C3D1A95902C000E1D17 /* PulleyJoint.cpp */; };
+		FA0B7E281A95902C000E1D17 /* PulleyJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C3D1A95902C000E1D17 /* PulleyJoint.cpp */; };
+		FA0B7E291A95902C000E1D17 /* PulleyJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C3E1A95902C000E1D17 /* PulleyJoint.h */; };
+		FA0B7E2A1A95902C000E1D17 /* RevoluteJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C3F1A95902C000E1D17 /* RevoluteJoint.cpp */; };
+		FA0B7E2B1A95902C000E1D17 /* RevoluteJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C3F1A95902C000E1D17 /* RevoluteJoint.cpp */; };
+		FA0B7E2C1A95902C000E1D17 /* RevoluteJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C401A95902C000E1D17 /* RevoluteJoint.h */; };
+		FA0B7E2D1A95902C000E1D17 /* RopeJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C411A95902C000E1D17 /* RopeJoint.cpp */; };
+		FA0B7E2E1A95902C000E1D17 /* RopeJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C411A95902C000E1D17 /* RopeJoint.cpp */; };
+		FA0B7E2F1A95902C000E1D17 /* RopeJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C421A95902C000E1D17 /* RopeJoint.h */; };
+		FA0B7E301A95902C000E1D17 /* Shape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C431A95902C000E1D17 /* Shape.cpp */; };
+		FA0B7E311A95902C000E1D17 /* Shape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C431A95902C000E1D17 /* Shape.cpp */; };
+		FA0B7E321A95902C000E1D17 /* Shape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C441A95902C000E1D17 /* Shape.h */; };
+		FA0B7E331A95902C000E1D17 /* WeldJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C451A95902C000E1D17 /* WeldJoint.cpp */; };
+		FA0B7E341A95902C000E1D17 /* WeldJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C451A95902C000E1D17 /* WeldJoint.cpp */; };
+		FA0B7E351A95902C000E1D17 /* WeldJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C461A95902C000E1D17 /* WeldJoint.h */; };
+		FA0B7E361A95902C000E1D17 /* WheelJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C471A95902C000E1D17 /* WheelJoint.cpp */; };
+		FA0B7E371A95902C000E1D17 /* WheelJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C471A95902C000E1D17 /* WheelJoint.cpp */; };
+		FA0B7E381A95902C000E1D17 /* WheelJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C481A95902C000E1D17 /* WheelJoint.h */; };
+		FA0B7E391A95902C000E1D17 /* World.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C491A95902C000E1D17 /* World.cpp */; };
+		FA0B7E3A1A95902C000E1D17 /* World.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C491A95902C000E1D17 /* World.cpp */; };
+		FA0B7E3B1A95902C000E1D17 /* World.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C4A1A95902C000E1D17 /* World.h */; };
+		FA0B7E3C1A95902C000E1D17 /* wrap_Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C4B1A95902C000E1D17 /* wrap_Body.cpp */; };
+		FA0B7E3D1A95902C000E1D17 /* wrap_Body.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C4B1A95902C000E1D17 /* wrap_Body.cpp */; };
+		FA0B7E3E1A95902C000E1D17 /* wrap_Body.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C4C1A95902C000E1D17 /* wrap_Body.h */; };
+		FA0B7E3F1A95902C000E1D17 /* wrap_ChainShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C4D1A95902C000E1D17 /* wrap_ChainShape.cpp */; };
+		FA0B7E401A95902C000E1D17 /* wrap_ChainShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C4D1A95902C000E1D17 /* wrap_ChainShape.cpp */; };
+		FA0B7E411A95902C000E1D17 /* wrap_ChainShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C4E1A95902C000E1D17 /* wrap_ChainShape.h */; };
+		FA0B7E421A95902C000E1D17 /* wrap_CircleShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C4F1A95902C000E1D17 /* wrap_CircleShape.cpp */; };
+		FA0B7E431A95902C000E1D17 /* wrap_CircleShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C4F1A95902C000E1D17 /* wrap_CircleShape.cpp */; };
+		FA0B7E441A95902C000E1D17 /* wrap_CircleShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C501A95902C000E1D17 /* wrap_CircleShape.h */; };
+		FA0B7E451A95902C000E1D17 /* wrap_Contact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C511A95902C000E1D17 /* wrap_Contact.cpp */; };
+		FA0B7E461A95902C000E1D17 /* wrap_Contact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C511A95902C000E1D17 /* wrap_Contact.cpp */; };
+		FA0B7E471A95902C000E1D17 /* wrap_Contact.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C521A95902C000E1D17 /* wrap_Contact.h */; };
+		FA0B7E481A95902C000E1D17 /* wrap_DistanceJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C531A95902C000E1D17 /* wrap_DistanceJoint.cpp */; };
+		FA0B7E491A95902C000E1D17 /* wrap_DistanceJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C531A95902C000E1D17 /* wrap_DistanceJoint.cpp */; };
+		FA0B7E4A1A95902C000E1D17 /* wrap_DistanceJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C541A95902C000E1D17 /* wrap_DistanceJoint.h */; };
+		FA0B7E4B1A95902C000E1D17 /* wrap_EdgeShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C551A95902C000E1D17 /* wrap_EdgeShape.cpp */; };
+		FA0B7E4C1A95902C000E1D17 /* wrap_EdgeShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C551A95902C000E1D17 /* wrap_EdgeShape.cpp */; };
+		FA0B7E4D1A95902C000E1D17 /* wrap_EdgeShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C561A95902C000E1D17 /* wrap_EdgeShape.h */; };
+		FA0B7E4E1A95902C000E1D17 /* wrap_Fixture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C571A95902C000E1D17 /* wrap_Fixture.cpp */; };
+		FA0B7E4F1A95902C000E1D17 /* wrap_Fixture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C571A95902C000E1D17 /* wrap_Fixture.cpp */; };
+		FA0B7E501A95902C000E1D17 /* wrap_Fixture.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C581A95902C000E1D17 /* wrap_Fixture.h */; };
+		FA0B7E511A95902C000E1D17 /* wrap_FrictionJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C591A95902C000E1D17 /* wrap_FrictionJoint.cpp */; };
+		FA0B7E521A95902C000E1D17 /* wrap_FrictionJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C591A95902C000E1D17 /* wrap_FrictionJoint.cpp */; };
+		FA0B7E531A95902C000E1D17 /* wrap_FrictionJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C5A1A95902C000E1D17 /* wrap_FrictionJoint.h */; };
+		FA0B7E541A95902C000E1D17 /* wrap_GearJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C5B1A95902C000E1D17 /* wrap_GearJoint.cpp */; };
+		FA0B7E551A95902C000E1D17 /* wrap_GearJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C5B1A95902C000E1D17 /* wrap_GearJoint.cpp */; };
+		FA0B7E561A95902C000E1D17 /* wrap_GearJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C5C1A95902C000E1D17 /* wrap_GearJoint.h */; };
+		FA0B7E571A95902C000E1D17 /* wrap_Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C5D1A95902C000E1D17 /* wrap_Joint.cpp */; };
+		FA0B7E581A95902C000E1D17 /* wrap_Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C5D1A95902C000E1D17 /* wrap_Joint.cpp */; };
+		FA0B7E591A95902C000E1D17 /* wrap_Joint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C5E1A95902C000E1D17 /* wrap_Joint.h */; };
+		FA0B7E5A1A95902C000E1D17 /* wrap_MotorJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C5F1A95902C000E1D17 /* wrap_MotorJoint.cpp */; };
+		FA0B7E5B1A95902C000E1D17 /* wrap_MotorJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C5F1A95902C000E1D17 /* wrap_MotorJoint.cpp */; };
+		FA0B7E5C1A95902C000E1D17 /* wrap_MotorJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C601A95902C000E1D17 /* wrap_MotorJoint.h */; };
+		FA0B7E5D1A95902C000E1D17 /* wrap_MouseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C611A95902C000E1D17 /* wrap_MouseJoint.cpp */; };
+		FA0B7E5E1A95902C000E1D17 /* wrap_MouseJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C611A95902C000E1D17 /* wrap_MouseJoint.cpp */; };
+		FA0B7E5F1A95902C000E1D17 /* wrap_MouseJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C621A95902C000E1D17 /* wrap_MouseJoint.h */; };
+		FA0B7E601A95902C000E1D17 /* wrap_Physics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C631A95902C000E1D17 /* wrap_Physics.cpp */; };
+		FA0B7E611A95902C000E1D17 /* wrap_Physics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C631A95902C000E1D17 /* wrap_Physics.cpp */; };
+		FA0B7E621A95902C000E1D17 /* wrap_Physics.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C641A95902C000E1D17 /* wrap_Physics.h */; };
+		FA0B7E631A95902C000E1D17 /* wrap_PolygonShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C651A95902C000E1D17 /* wrap_PolygonShape.cpp */; };
+		FA0B7E641A95902C000E1D17 /* wrap_PolygonShape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C651A95902C000E1D17 /* wrap_PolygonShape.cpp */; };
+		FA0B7E651A95902C000E1D17 /* wrap_PolygonShape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C661A95902C000E1D17 /* wrap_PolygonShape.h */; };
+		FA0B7E661A95902C000E1D17 /* wrap_PrismaticJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C671A95902C000E1D17 /* wrap_PrismaticJoint.cpp */; };
+		FA0B7E671A95902C000E1D17 /* wrap_PrismaticJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C671A95902C000E1D17 /* wrap_PrismaticJoint.cpp */; };
+		FA0B7E681A95902C000E1D17 /* wrap_PrismaticJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C681A95902C000E1D17 /* wrap_PrismaticJoint.h */; };
+		FA0B7E691A95902C000E1D17 /* wrap_PulleyJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C691A95902C000E1D17 /* wrap_PulleyJoint.cpp */; };
+		FA0B7E6A1A95902C000E1D17 /* wrap_PulleyJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C691A95902C000E1D17 /* wrap_PulleyJoint.cpp */; };
+		FA0B7E6B1A95902C000E1D17 /* wrap_PulleyJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C6A1A95902C000E1D17 /* wrap_PulleyJoint.h */; };
+		FA0B7E6C1A95902C000E1D17 /* wrap_RevoluteJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C6B1A95902C000E1D17 /* wrap_RevoluteJoint.cpp */; };
+		FA0B7E6D1A95902C000E1D17 /* wrap_RevoluteJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C6B1A95902C000E1D17 /* wrap_RevoluteJoint.cpp */; };
+		FA0B7E6E1A95902C000E1D17 /* wrap_RevoluteJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C6C1A95902C000E1D17 /* wrap_RevoluteJoint.h */; };
+		FA0B7E6F1A95902C000E1D17 /* wrap_RopeJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C6D1A95902C000E1D17 /* wrap_RopeJoint.cpp */; };
+		FA0B7E701A95902C000E1D17 /* wrap_RopeJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C6D1A95902C000E1D17 /* wrap_RopeJoint.cpp */; };
+		FA0B7E711A95902C000E1D17 /* wrap_RopeJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C6E1A95902C000E1D17 /* wrap_RopeJoint.h */; };
+		FA0B7E721A95902C000E1D17 /* wrap_Shape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C6F1A95902C000E1D17 /* wrap_Shape.cpp */; };
+		FA0B7E731A95902C000E1D17 /* wrap_Shape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C6F1A95902C000E1D17 /* wrap_Shape.cpp */; };
+		FA0B7E741A95902C000E1D17 /* wrap_Shape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C701A95902C000E1D17 /* wrap_Shape.h */; };
+		FA0B7E751A95902C000E1D17 /* wrap_WeldJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C711A95902C000E1D17 /* wrap_WeldJoint.cpp */; };
+		FA0B7E761A95902C000E1D17 /* wrap_WeldJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C711A95902C000E1D17 /* wrap_WeldJoint.cpp */; };
+		FA0B7E771A95902C000E1D17 /* wrap_WeldJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C721A95902C000E1D17 /* wrap_WeldJoint.h */; };
+		FA0B7E781A95902C000E1D17 /* wrap_WheelJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C731A95902C000E1D17 /* wrap_WheelJoint.cpp */; };
+		FA0B7E791A95902C000E1D17 /* wrap_WheelJoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C731A95902C000E1D17 /* wrap_WheelJoint.cpp */; };
+		FA0B7E7A1A95902C000E1D17 /* wrap_WheelJoint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C741A95902C000E1D17 /* wrap_WheelJoint.h */; };
+		FA0B7E7B1A95902C000E1D17 /* wrap_World.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C751A95902C000E1D17 /* wrap_World.cpp */; };
+		FA0B7E7C1A95902C000E1D17 /* wrap_World.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C751A95902C000E1D17 /* wrap_World.cpp */; };
+		FA0B7E7D1A95902C000E1D17 /* wrap_World.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C761A95902C000E1D17 /* wrap_World.h */; };
+		FA0B7E7E1A95902C000E1D17 /* Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C771A95902C000E1D17 /* Joint.cpp */; };
+		FA0B7E7F1A95902C000E1D17 /* Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C771A95902C000E1D17 /* Joint.cpp */; };
+		FA0B7E801A95902C000E1D17 /* Joint.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C781A95902C000E1D17 /* Joint.h */; };
+		FA0B7E811A95902C000E1D17 /* Shape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C791A95902C000E1D17 /* Shape.cpp */; };
+		FA0B7E821A95902C000E1D17 /* Shape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C791A95902C000E1D17 /* Shape.cpp */; };
+		FA0B7E831A95902C000E1D17 /* Shape.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C7A1A95902C000E1D17 /* Shape.h */; };
+		FA0B7E841A95902C000E1D17 /* Decoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C7C1A95902C000E1D17 /* Decoder.h */; };
+		FA0B7E851A95902C000E1D17 /* CoreAudioDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C7E1A95902C000E1D17 /* CoreAudioDecoder.cpp */; };
+		FA0B7E861A95902C000E1D17 /* CoreAudioDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C7E1A95902C000E1D17 /* CoreAudioDecoder.cpp */; };
+		FA0B7E871A95902C000E1D17 /* CoreAudioDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C7F1A95902C000E1D17 /* CoreAudioDecoder.h */; };
+		FA0B7E881A95902C000E1D17 /* Decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C801A95902C000E1D17 /* Decoder.cpp */; };
+		FA0B7E891A95902C000E1D17 /* Decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C801A95902C000E1D17 /* Decoder.cpp */; };
+		FA0B7E8A1A95902C000E1D17 /* Decoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C811A95902C000E1D17 /* Decoder.h */; };
+		FA0B7E8B1A95902C000E1D17 /* FLACDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C821A95902C000E1D17 /* FLACDecoder.cpp */; };
+		FA0B7E8C1A95902C000E1D17 /* FLACDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C821A95902C000E1D17 /* FLACDecoder.cpp */; };
+		FA0B7E8D1A95902C000E1D17 /* FLACDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C831A95902C000E1D17 /* FLACDecoder.h */; };
+		FA0B7E8E1A95902C000E1D17 /* GmeDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C841A95902C000E1D17 /* GmeDecoder.cpp */; };
+		FA0B7E8F1A95902C000E1D17 /* GmeDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C841A95902C000E1D17 /* GmeDecoder.cpp */; };
+		FA0B7E901A95902C000E1D17 /* GmeDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C851A95902C000E1D17 /* GmeDecoder.h */; };
+		FA0B7E911A95902C000E1D17 /* ModPlugDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C861A95902C000E1D17 /* ModPlugDecoder.cpp */; };
+		FA0B7E921A95902C000E1D17 /* ModPlugDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C861A95902C000E1D17 /* ModPlugDecoder.cpp */; };
+		FA0B7E931A95902C000E1D17 /* ModPlugDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C871A95902C000E1D17 /* ModPlugDecoder.h */; };
+		FA0B7E941A95902C000E1D17 /* Mpg123Decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C881A95902C000E1D17 /* Mpg123Decoder.cpp */; };
+		FA0B7E961A95902C000E1D17 /* Mpg123Decoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C891A95902C000E1D17 /* Mpg123Decoder.h */; };
+		FA0B7E971A95902C000E1D17 /* Sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C8A1A95902C000E1D17 /* Sound.cpp */; };
+		FA0B7E981A95902C000E1D17 /* Sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C8A1A95902C000E1D17 /* Sound.cpp */; };
+		FA0B7E991A95902C000E1D17 /* Sound.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C8B1A95902C000E1D17 /* Sound.h */; };
+		FA0B7E9A1A95902C000E1D17 /* VorbisDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C8C1A95902C000E1D17 /* VorbisDecoder.cpp */; };
+		FA0B7E9B1A95902C000E1D17 /* VorbisDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C8C1A95902C000E1D17 /* VorbisDecoder.cpp */; };
+		FA0B7E9C1A95902C000E1D17 /* VorbisDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C8D1A95902C000E1D17 /* VorbisDecoder.h */; };
+		FA0B7E9D1A95902C000E1D17 /* WaveDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C8E1A95902C000E1D17 /* WaveDecoder.cpp */; };
+		FA0B7E9E1A95902C000E1D17 /* WaveDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C8E1A95902C000E1D17 /* WaveDecoder.cpp */; };
+		FA0B7E9F1A95902C000E1D17 /* WaveDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C8F1A95902C000E1D17 /* WaveDecoder.h */; };
+		FA0B7EA01A95902C000E1D17 /* Sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C901A95902C000E1D17 /* Sound.cpp */; };
+		FA0B7EA11A95902C000E1D17 /* Sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C901A95902C000E1D17 /* Sound.cpp */; };
+		FA0B7EA21A95902C000E1D17 /* Sound.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C911A95902C000E1D17 /* Sound.h */; };
+		FA0B7EA31A95902C000E1D17 /* SoundData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C921A95902C000E1D17 /* SoundData.cpp */; };
+		FA0B7EA41A95902C000E1D17 /* SoundData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C921A95902C000E1D17 /* SoundData.cpp */; };
+		FA0B7EA51A95902C000E1D17 /* SoundData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C931A95902C000E1D17 /* SoundData.h */; };
+		FA0B7EA61A95902C000E1D17 /* wrap_Decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C941A95902C000E1D17 /* wrap_Decoder.cpp */; };
+		FA0B7EA71A95902C000E1D17 /* wrap_Decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C941A95902C000E1D17 /* wrap_Decoder.cpp */; };
+		FA0B7EA81A95902C000E1D17 /* wrap_Decoder.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C951A95902C000E1D17 /* wrap_Decoder.h */; };
+		FA0B7EA91A95902C000E1D17 /* wrap_Sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C961A95902C000E1D17 /* wrap_Sound.cpp */; };
+		FA0B7EAA1A95902C000E1D17 /* wrap_Sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C961A95902C000E1D17 /* wrap_Sound.cpp */; };
+		FA0B7EAB1A95902C000E1D17 /* wrap_Sound.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C971A95902C000E1D17 /* wrap_Sound.h */; };
+		FA0B7EAC1A95902C000E1D17 /* wrap_SoundData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C981A95902C000E1D17 /* wrap_SoundData.cpp */; };
+		FA0B7EAD1A95902C000E1D17 /* wrap_SoundData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C981A95902C000E1D17 /* wrap_SoundData.cpp */; };
+		FA0B7EAE1A95902C000E1D17 /* wrap_SoundData.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C991A95902C000E1D17 /* wrap_SoundData.h */; };
+		FA0B7EAF1A95902C000E1D17 /* System.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C9C1A95902C000E1D17 /* System.cpp */; };
+		FA0B7EB01A95902C000E1D17 /* System.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C9C1A95902C000E1D17 /* System.cpp */; };
+		FA0B7EB11A95902C000E1D17 /* System.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C9D1A95902C000E1D17 /* System.h */; };
+		FA0B7EB21A95902C000E1D17 /* System.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C9E1A95902C000E1D17 /* System.cpp */; };
+		FA0B7EB31A95902C000E1D17 /* System.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C9E1A95902C000E1D17 /* System.cpp */; };
+		FA0B7EB41A95902C000E1D17 /* System.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7C9F1A95902C000E1D17 /* System.h */; };
+		FA0B7EB51A95902C000E1D17 /* wrap_System.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CA01A95902C000E1D17 /* wrap_System.cpp */; };
+		FA0B7EB61A95902C000E1D17 /* wrap_System.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CA01A95902C000E1D17 /* wrap_System.cpp */; };
+		FA0B7EB71A95902C000E1D17 /* wrap_System.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CA11A95902C000E1D17 /* wrap_System.h */; };
+		FA0B7EB81A95902C000E1D17 /* Channel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CA31A95902C000E1D17 /* Channel.cpp */; };
+		FA0B7EB91A95902C000E1D17 /* Channel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CA31A95902C000E1D17 /* Channel.cpp */; };
+		FA0B7EBA1A95902C000E1D17 /* Channel.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CA41A95902C000E1D17 /* Channel.h */; };
+		FA0B7EBB1A95902C000E1D17 /* LuaThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CA51A95902C000E1D17 /* LuaThread.cpp */; };
+		FA0B7EBC1A95902C000E1D17 /* LuaThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CA51A95902C000E1D17 /* LuaThread.cpp */; };
+		FA0B7EBD1A95902C000E1D17 /* LuaThread.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CA61A95902C000E1D17 /* LuaThread.h */; };
+		FA0B7EBE1A95902C000E1D17 /* Thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CA81A95902C000E1D17 /* Thread.cpp */; };
+		FA0B7EBF1A95902C000E1D17 /* Thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CA81A95902C000E1D17 /* Thread.cpp */; };
+		FA0B7EC01A95902C000E1D17 /* Thread.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CA91A95902C000E1D17 /* Thread.h */; };
+		FA0B7EC11A95902C000E1D17 /* threads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CAA1A95902C000E1D17 /* threads.cpp */; };
+		FA0B7EC21A95902C000E1D17 /* threads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CAA1A95902C000E1D17 /* threads.cpp */; };
+		FA0B7EC31A95902C000E1D17 /* threads.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CAB1A95902C000E1D17 /* threads.h */; };
+		FA0B7EC41A95902C000E1D17 /* Thread.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CAC1A95902C000E1D17 /* Thread.h */; };
+		FA0B7EC51A95902C000E1D17 /* ThreadModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CAD1A95902C000E1D17 /* ThreadModule.cpp */; };
+		FA0B7EC61A95902C000E1D17 /* ThreadModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CAD1A95902C000E1D17 /* ThreadModule.cpp */; };
+		FA0B7EC71A95902C000E1D17 /* ThreadModule.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CAE1A95902C000E1D17 /* ThreadModule.h */; };
+		FA0B7EC81A95902C000E1D17 /* threads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CAF1A95902C000E1D17 /* threads.cpp */; };
+		FA0B7EC91A95902C000E1D17 /* threads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CAF1A95902C000E1D17 /* threads.cpp */; };
+		FA0B7ECA1A95902C000E1D17 /* threads.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CB01A95902C000E1D17 /* threads.h */; };
+		FA0B7ECB1A95902C000E1D17 /* wrap_Channel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CB11A95902C000E1D17 /* wrap_Channel.cpp */; };
+		FA0B7ECC1A95902C000E1D17 /* wrap_Channel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CB11A95902C000E1D17 /* wrap_Channel.cpp */; };
+		FA0B7ECD1A95902C000E1D17 /* wrap_Channel.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CB21A95902C000E1D17 /* wrap_Channel.h */; };
+		FA0B7ECE1A95902C000E1D17 /* wrap_LuaThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CB31A95902C000E1D17 /* wrap_LuaThread.cpp */; };
+		FA0B7ECF1A95902C000E1D17 /* wrap_LuaThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CB31A95902C000E1D17 /* wrap_LuaThread.cpp */; };
+		FA0B7ED01A95902C000E1D17 /* wrap_LuaThread.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CB41A95902C000E1D17 /* wrap_LuaThread.h */; };
+		FA0B7ED11A95902C000E1D17 /* wrap_ThreadModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CB51A95902C000E1D17 /* wrap_ThreadModule.cpp */; };
+		FA0B7ED21A95902C000E1D17 /* wrap_ThreadModule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CB51A95902C000E1D17 /* wrap_ThreadModule.cpp */; };
+		FA0B7ED31A95902C000E1D17 /* wrap_ThreadModule.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CB61A95902C000E1D17 /* wrap_ThreadModule.h */; };
+		FA0B7ED41A95902D000E1D17 /* Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CB91A95902C000E1D17 /* Timer.cpp */; };
+		FA0B7ED51A95902D000E1D17 /* Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CB91A95902C000E1D17 /* Timer.cpp */; };
+		FA0B7ED61A95902D000E1D17 /* Timer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CBA1A95902C000E1D17 /* Timer.h */; };
+		FA0B7ED71A95902D000E1D17 /* Timer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CBB1A95902C000E1D17 /* Timer.h */; };
+		FA0B7ED81A95902D000E1D17 /* wrap_Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CBC1A95902C000E1D17 /* wrap_Timer.cpp */; };
+		FA0B7ED91A95902D000E1D17 /* wrap_Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CBC1A95902C000E1D17 /* wrap_Timer.cpp */; };
+		FA0B7EDA1A95902D000E1D17 /* wrap_Timer.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CBD1A95902C000E1D17 /* wrap_Timer.h */; };
+		FA0B7EDB1A95902D000E1D17 /* Touch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CC01A95902C000E1D17 /* Touch.cpp */; };
+		FA0B7EDC1A95902D000E1D17 /* Touch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CC01A95902C000E1D17 /* Touch.cpp */; };
+		FA0B7EDD1A95902D000E1D17 /* Touch.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CC11A95902C000E1D17 /* Touch.h */; };
+		FA0B7EDE1A95902D000E1D17 /* Touch.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CC21A95902C000E1D17 /* Touch.h */; };
+		FA0B7EDF1A95902D000E1D17 /* wrap_Touch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CC31A95902C000E1D17 /* wrap_Touch.cpp */; };
+		FA0B7EE01A95902D000E1D17 /* wrap_Touch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CC31A95902C000E1D17 /* wrap_Touch.cpp */; };
+		FA0B7EE11A95902D000E1D17 /* wrap_Touch.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CC41A95902C000E1D17 /* wrap_Touch.h */; };
+		FA0B7EE21A95902D000E1D17 /* Window.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CC71A95902C000E1D17 /* Window.cpp */; };
+		FA0B7EE31A95902D000E1D17 /* Window.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CC71A95902C000E1D17 /* Window.cpp */; };
+		FA0B7EE41A95902D000E1D17 /* Window.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CC81A95902C000E1D17 /* Window.h */; };
+		FA0B7EE51A95902D000E1D17 /* Window.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CC91A95902C000E1D17 /* Window.cpp */; };
+		FA0B7EE61A95902D000E1D17 /* Window.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CC91A95902C000E1D17 /* Window.cpp */; };
+		FA0B7EE71A95902D000E1D17 /* Window.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CCA1A95902C000E1D17 /* Window.h */; };
+		FA0B7EE81A95902D000E1D17 /* wrap_Window.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CCB1A95902C000E1D17 /* wrap_Window.cpp */; };
+		FA0B7EE91A95902D000E1D17 /* wrap_Window.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7CCB1A95902C000E1D17 /* wrap_Window.cpp */; };
+		FA0B7EEA1A95902D000E1D17 /* wrap_Window.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B7CCC1A95902C000E1D17 /* wrap_Window.h */; };
+		FA0B7EF21A959D2C000E1D17 /* iOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7EF11A959D2C000E1D17 /* iOS.mm */; };
+		FA317EBA18F28B6D00B0BCD7 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FA317EB918F28B6D00B0BCD7 /* libz.dylib */; };
+		FA48E43918F10D6C007CF0BD /* jpeg-turbo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA48E43818F10D6C007CF0BD /* jpeg-turbo.framework */; };
+		FA577AB016C7507900860150 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A7916C71A1700860150 /* Cocoa.framework */; };
+		FA577AC216C7512D00860150 /* FreeType.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A6716C719D900860150 /* FreeType.framework */; };
+		FA577AC516C7513400860150 /* libmodplug.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A8216C71A5300860150 /* libmodplug.framework */; };
+		FA577AC716C7513A00860150 /* mpg123.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A6F16C719F000860150 /* mpg123.framework */; };
+		FA577AC816C7513C00860150 /* Ogg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A7116C719F400860150 /* Ogg.framework */; };
+		FA577ACA16C7514100860150 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A7C16C71A2600860150 /* OpenGL.framework */; };
+		FA577ACB16C7514400860150 /* physfs.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A7316C719F900860150 /* physfs.framework */; };
+		FA577ACD16C7514C00860150 /* Vorbis.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA577A7716C71A0800860150 /* Vorbis.framework */; };
+		FA5D24B01A96D2EC00C6FC8F /* libFreetype2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24A51A96D2EC00C6FC8F /* libFreetype2.a */; };
+		FA5D24B21A96D2EC00C6FC8F /* libluajit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24A91A96D2EC00C6FC8F /* libluajit.a */; };
+		FA5D24B31A96D2EC00C6FC8F /* libogg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24AB1A96D2EC00C6FC8F /* libogg.a */; };
+		FA5D24B41A96D2EC00C6FC8F /* libphysfs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24AD1A96D2EC00C6FC8F /* libphysfs.a */; };
+		FA5D24B51A96D2EC00C6FC8F /* libvorbis.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24AF1A96D2EC00C6FC8F /* libvorbis.a */; };
+		FA5D24CF1A96E68300C6FC8F /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24CD1A96E63D00C6FC8F /* libSDL2.a */; };
+		FA620A321AA2F8DB005DB4C2 /* wrap_Quad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA620A2E1AA2F8DB005DB4C2 /* wrap_Quad.cpp */; };
+		FA620A331AA2F8DB005DB4C2 /* wrap_Quad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA620A2E1AA2F8DB005DB4C2 /* wrap_Quad.cpp */; };
+		FA620A341AA2F8DB005DB4C2 /* wrap_Quad.h in Headers */ = {isa = PBXBuildFile; fileRef = FA620A2F1AA2F8DB005DB4C2 /* wrap_Quad.h */; };
+		FA620A351AA2F8DB005DB4C2 /* wrap_Texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA620A301AA2F8DB005DB4C2 /* wrap_Texture.cpp */; };
+		FA620A361AA2F8DB005DB4C2 /* wrap_Texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA620A301AA2F8DB005DB4C2 /* wrap_Texture.cpp */; };
+		FA620A371AA2F8DB005DB4C2 /* wrap_Texture.h in Headers */ = {isa = PBXBuildFile; fileRef = FA620A311AA2F8DB005DB4C2 /* wrap_Texture.h */; };
+		FA620A3A1AA305F6005DB4C2 /* types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA620A391AA305F6005DB4C2 /* types.cpp */; };
+		FA620A3B1AA305F6005DB4C2 /* types.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA620A391AA305F6005DB4C2 /* types.cpp */; };
+		FA8951A21AA2EDF300EC385A /* wrap_Event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA8951A01AA2EDF300EC385A /* wrap_Event.cpp */; };
+		FA8951A31AA2EDF300EC385A /* wrap_Event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA8951A01AA2EDF300EC385A /* wrap_Event.cpp */; };
+		FA8951A41AA2EDF300EC385A /* wrap_Event.h in Headers */ = {isa = PBXBuildFile; fileRef = FA8951A11AA2EDF300EC385A /* wrap_Event.h */; };
+		FA9B4A0816E1578300074F42 /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA9B4A0716E1578300074F42 /* SDL2.framework */; };
+		FAA627CE18E7E1560080752D /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FAA627CD18E7E1560080752D /* CoreServices.framework */; };
+		FAAFF04416CB11C700CCDE45 /* OpenAL-Soft.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FAAFF04316CB11C700CCDE45 /* OpenAL-Soft.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		FA0B78DB1A958B90000E1D17 /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "include/$(PRODUCT_NAME)";
+			dstSubfolderSpec = 16;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		104144AB73A974BC04A03131 /* graphics.lua.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = graphics.lua.h; sourceTree = "<group>"; };
+		503971A86B7167A91B670FBA /* boot.lua.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = boot.lua.h; sourceTree = "<group>"; };
+		FA08F5AE16C7525600F007B5 /* liblove-macosx.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "liblove-macosx.plist"; path = "macosx/liblove-macosx.plist"; sourceTree = "<group>"; };
+		FA0B78DD1A958B90000E1D17 /* liblove.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = liblove.a; sourceTree = BUILT_PRODUCTS_DIR; };
+		FA0B78F71A958E3B000E1D17 /* b64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b64.cpp; sourceTree = "<group>"; };
+		FA0B78F81A958E3B000E1D17 /* b64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b64.h; sourceTree = "<group>"; };
+		FA0B78F91A958E3B000E1D17 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; };
+		FA0B78FA1A958E3B000E1D17 /* Data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Data.h; sourceTree = "<group>"; };
+		FA0B78FB1A958E3B000E1D17 /* delay.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = delay.cpp; sourceTree = "<group>"; };
+		FA0B78FC1A958E3B000E1D17 /* delay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = delay.h; sourceTree = "<group>"; };
+		FA0B78FD1A958E3B000E1D17 /* EnumMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EnumMap.h; sourceTree = "<group>"; };
+		FA0B78FE1A958E3B000E1D17 /* Exception.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Exception.cpp; sourceTree = "<group>"; };
+		FA0B78FF1A958E3B000E1D17 /* Exception.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Exception.h; sourceTree = "<group>"; };
+		FA0B79001A958E3B000E1D17 /* int.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = int.h; sourceTree = "<group>"; };
+		FA0B79011A958E3B000E1D17 /* math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = math.h; sourceTree = "<group>"; };
+		FA0B79021A958E3B000E1D17 /* Matrix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Matrix.cpp; sourceTree = "<group>"; };
+		FA0B79031A958E3B000E1D17 /* Matrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Matrix.h; sourceTree = "<group>"; };
+		FA0B79041A958E3B000E1D17 /* Memoizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Memoizer.cpp; sourceTree = "<group>"; };
+		FA0B79051A958E3B000E1D17 /* Memoizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Memoizer.h; sourceTree = "<group>"; };
+		FA0B79061A958E3B000E1D17 /* Module.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Module.cpp; sourceTree = "<group>"; };
+		FA0B79071A958E3B000E1D17 /* Module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Module.h; sourceTree = "<group>"; };
+		FA0B79081A958E3B000E1D17 /* Object.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Object.cpp; sourceTree = "<group>"; };
+		FA0B79091A958E3B000E1D17 /* Object.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Object.h; sourceTree = "<group>"; };
+		FA0B790A1A958E3B000E1D17 /* OSX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OSX.h; sourceTree = "<group>"; };
+		FA0B790B1A958E3B000E1D17 /* OSX.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OSX.mm; sourceTree = "<group>"; };
+		FA0B790C1A958E3B000E1D17 /* Reference.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Reference.cpp; sourceTree = "<group>"; };
+		FA0B790D1A958E3B000E1D17 /* Reference.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Reference.h; sourceTree = "<group>"; };
+		FA0B790E1A958E3B000E1D17 /* runtime.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = runtime.cpp; sourceTree = "<group>"; };
+		FA0B790F1A958E3B000E1D17 /* runtime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = runtime.h; sourceTree = "<group>"; };
+		FA0B79101A958E3B000E1D17 /* StringMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StringMap.h; sourceTree = "<group>"; };
+		FA0B79111A958E3B000E1D17 /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = "<group>"; };
+		FA0B79121A958E3B000E1D17 /* utf8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = utf8.cpp; sourceTree = "<group>"; };
+		FA0B79131A958E3B000E1D17 /* utf8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utf8.h; sourceTree = "<group>"; };
+		FA0B79141A958E3B000E1D17 /* Variant.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Variant.cpp; sourceTree = "<group>"; };
+		FA0B79151A958E3B000E1D17 /* Variant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Variant.h; sourceTree = "<group>"; };
+		FA0B79161A958E3B000E1D17 /* Vector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Vector.cpp; sourceTree = "<group>"; };
+		FA0B79171A958E3B000E1D17 /* Vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Vector.h; sourceTree = "<group>"; };
+		FA0B79181A958E3B000E1D17 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = "<group>"; };
+		FA0B79191A958E3B000E1D17 /* wrap_Data.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Data.cpp; sourceTree = "<group>"; };
+		FA0B791A1A958E3B000E1D17 /* wrap_Data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Data.h; sourceTree = "<group>"; };
+		FA0B794F1A958EA3000E1D17 /* Box2D.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Box2D.h; sourceTree = "<group>"; };
+		FA0B79511A958EA3000E1D17 /* b2BroadPhase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2BroadPhase.cpp; sourceTree = "<group>"; };
+		FA0B79521A958EA3000E1D17 /* b2BroadPhase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2BroadPhase.h; sourceTree = "<group>"; };
+		FA0B79531A958EA3000E1D17 /* b2CollideCircle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2CollideCircle.cpp; sourceTree = "<group>"; };
+		FA0B79541A958EA3000E1D17 /* b2CollideEdge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2CollideEdge.cpp; sourceTree = "<group>"; };
+		FA0B79551A958EA3000E1D17 /* b2CollidePolygon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2CollidePolygon.cpp; sourceTree = "<group>"; };
+		FA0B79561A958EA3000E1D17 /* b2Collision.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Collision.cpp; sourceTree = "<group>"; };
+		FA0B79571A958EA3000E1D17 /* b2Collision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Collision.h; sourceTree = "<group>"; };
+		FA0B79581A958EA3000E1D17 /* b2Distance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Distance.cpp; sourceTree = "<group>"; };
+		FA0B79591A958EA3000E1D17 /* b2Distance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Distance.h; sourceTree = "<group>"; };
+		FA0B795A1A958EA3000E1D17 /* b2DynamicTree.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2DynamicTree.cpp; sourceTree = "<group>"; };
+		FA0B795B1A958EA3000E1D17 /* b2DynamicTree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2DynamicTree.h; sourceTree = "<group>"; };
+		FA0B795C1A958EA3000E1D17 /* b2TimeOfImpact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2TimeOfImpact.cpp; sourceTree = "<group>"; };
+		FA0B795D1A958EA3000E1D17 /* b2TimeOfImpact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2TimeOfImpact.h; sourceTree = "<group>"; };
+		FA0B795F1A958EA3000E1D17 /* b2ChainShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2ChainShape.cpp; sourceTree = "<group>"; };
+		FA0B79601A958EA3000E1D17 /* b2ChainShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2ChainShape.h; sourceTree = "<group>"; };
+		FA0B79611A958EA3000E1D17 /* b2CircleShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2CircleShape.cpp; sourceTree = "<group>"; };
+		FA0B79621A958EA3000E1D17 /* b2CircleShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2CircleShape.h; sourceTree = "<group>"; };
+		FA0B79631A958EA3000E1D17 /* b2EdgeShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2EdgeShape.cpp; sourceTree = "<group>"; };
+		FA0B79641A958EA3000E1D17 /* b2EdgeShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2EdgeShape.h; sourceTree = "<group>"; };
+		FA0B79651A958EA3000E1D17 /* b2PolygonShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2PolygonShape.cpp; sourceTree = "<group>"; };
+		FA0B79661A958EA3000E1D17 /* b2PolygonShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2PolygonShape.h; sourceTree = "<group>"; };
+		FA0B79671A958EA3000E1D17 /* b2Shape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Shape.h; sourceTree = "<group>"; };
+		FA0B79691A958EA3000E1D17 /* b2BlockAllocator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2BlockAllocator.cpp; sourceTree = "<group>"; };
+		FA0B796A1A958EA3000E1D17 /* b2BlockAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2BlockAllocator.h; sourceTree = "<group>"; };
+		FA0B796B1A958EA3000E1D17 /* b2Draw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Draw.cpp; sourceTree = "<group>"; };
+		FA0B796C1A958EA3000E1D17 /* b2Draw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Draw.h; sourceTree = "<group>"; };
+		FA0B796D1A958EA3000E1D17 /* b2GrowableStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2GrowableStack.h; sourceTree = "<group>"; };
+		FA0B796E1A958EA3000E1D17 /* b2Math.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Math.cpp; sourceTree = "<group>"; };
+		FA0B796F1A958EA3000E1D17 /* b2Math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Math.h; sourceTree = "<group>"; };
+		FA0B79701A958EA3000E1D17 /* b2Settings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Settings.cpp; sourceTree = "<group>"; };
+		FA0B79711A958EA3000E1D17 /* b2Settings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Settings.h; sourceTree = "<group>"; };
+		FA0B79721A958EA3000E1D17 /* b2StackAllocator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2StackAllocator.cpp; sourceTree = "<group>"; };
+		FA0B79731A958EA3000E1D17 /* b2StackAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2StackAllocator.h; sourceTree = "<group>"; };
+		FA0B79741A958EA3000E1D17 /* b2Timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Timer.cpp; sourceTree = "<group>"; };
+		FA0B79751A958EA3000E1D17 /* b2Timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Timer.h; sourceTree = "<group>"; };
+		FA0B79771A958EA3000E1D17 /* b2Body.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Body.cpp; sourceTree = "<group>"; };
+		FA0B79781A958EA3000E1D17 /* b2Body.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Body.h; sourceTree = "<group>"; };
+		FA0B79791A958EA3000E1D17 /* b2ContactManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2ContactManager.cpp; sourceTree = "<group>"; };
+		FA0B797A1A958EA3000E1D17 /* b2ContactManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2ContactManager.h; sourceTree = "<group>"; };
+		FA0B797B1A958EA3000E1D17 /* b2Fixture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Fixture.cpp; sourceTree = "<group>"; };
+		FA0B797C1A958EA3000E1D17 /* b2Fixture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Fixture.h; sourceTree = "<group>"; };
+		FA0B797D1A958EA3000E1D17 /* b2Island.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Island.cpp; sourceTree = "<group>"; };
+		FA0B797E1A958EA3000E1D17 /* b2Island.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Island.h; sourceTree = "<group>"; };
+		FA0B797F1A958EA3000E1D17 /* b2TimeStep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2TimeStep.h; sourceTree = "<group>"; };
+		FA0B79801A958EA3000E1D17 /* b2World.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2World.cpp; sourceTree = "<group>"; };
+		FA0B79811A958EA3000E1D17 /* b2World.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2World.h; sourceTree = "<group>"; };
+		FA0B79821A958EA3000E1D17 /* b2WorldCallbacks.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2WorldCallbacks.cpp; sourceTree = "<group>"; };
+		FA0B79831A958EA3000E1D17 /* b2WorldCallbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2WorldCallbacks.h; sourceTree = "<group>"; };
+		FA0B79851A958EA3000E1D17 /* b2ChainAndCircleContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2ChainAndCircleContact.cpp; sourceTree = "<group>"; };
+		FA0B79861A958EA3000E1D17 /* b2ChainAndCircleContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2ChainAndCircleContact.h; sourceTree = "<group>"; };
+		FA0B79871A958EA3000E1D17 /* b2ChainAndPolygonContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2ChainAndPolygonContact.cpp; sourceTree = "<group>"; };
+		FA0B79881A958EA3000E1D17 /* b2ChainAndPolygonContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2ChainAndPolygonContact.h; sourceTree = "<group>"; };
+		FA0B79891A958EA3000E1D17 /* b2CircleContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2CircleContact.cpp; sourceTree = "<group>"; };
+		FA0B798A1A958EA3000E1D17 /* b2CircleContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2CircleContact.h; sourceTree = "<group>"; };
+		FA0B798B1A958EA3000E1D17 /* b2Contact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Contact.cpp; sourceTree = "<group>"; };
+		FA0B798C1A958EA3000E1D17 /* b2Contact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Contact.h; sourceTree = "<group>"; };
+		FA0B798D1A958EA3000E1D17 /* b2ContactSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2ContactSolver.cpp; sourceTree = "<group>"; };
+		FA0B798E1A958EA3000E1D17 /* b2ContactSolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2ContactSolver.h; sourceTree = "<group>"; };
+		FA0B798F1A958EA3000E1D17 /* b2EdgeAndCircleContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2EdgeAndCircleContact.cpp; sourceTree = "<group>"; };
+		FA0B79901A958EA3000E1D17 /* b2EdgeAndCircleContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2EdgeAndCircleContact.h; sourceTree = "<group>"; };
+		FA0B79911A958EA3000E1D17 /* b2EdgeAndPolygonContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2EdgeAndPolygonContact.cpp; sourceTree = "<group>"; };
+		FA0B79921A958EA3000E1D17 /* b2EdgeAndPolygonContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2EdgeAndPolygonContact.h; sourceTree = "<group>"; };
+		FA0B79931A958EA3000E1D17 /* b2PolygonAndCircleContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2PolygonAndCircleContact.cpp; sourceTree = "<group>"; };
+		FA0B79941A958EA3000E1D17 /* b2PolygonAndCircleContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2PolygonAndCircleContact.h; sourceTree = "<group>"; };
+		FA0B79951A958EA3000E1D17 /* b2PolygonContact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2PolygonContact.cpp; sourceTree = "<group>"; };
+		FA0B79961A958EA3000E1D17 /* b2PolygonContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2PolygonContact.h; sourceTree = "<group>"; };
+		FA0B79981A958EA3000E1D17 /* b2DistanceJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2DistanceJoint.cpp; sourceTree = "<group>"; };
+		FA0B79991A958EA3000E1D17 /* b2DistanceJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2DistanceJoint.h; sourceTree = "<group>"; };
+		FA0B799A1A958EA3000E1D17 /* b2FrictionJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2FrictionJoint.cpp; sourceTree = "<group>"; };
+		FA0B799B1A958EA3000E1D17 /* b2FrictionJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2FrictionJoint.h; sourceTree = "<group>"; };
+		FA0B799C1A958EA3000E1D17 /* b2GearJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2GearJoint.cpp; sourceTree = "<group>"; };
+		FA0B799D1A958EA3000E1D17 /* b2GearJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2GearJoint.h; sourceTree = "<group>"; };
+		FA0B799E1A958EA3000E1D17 /* b2Joint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Joint.cpp; sourceTree = "<group>"; };
+		FA0B799F1A958EA3000E1D17 /* b2Joint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Joint.h; sourceTree = "<group>"; };
+		FA0B79A01A958EA3000E1D17 /* b2MotorJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2MotorJoint.cpp; sourceTree = "<group>"; };
+		FA0B79A11A958EA3000E1D17 /* b2MotorJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2MotorJoint.h; sourceTree = "<group>"; };
+		FA0B79A21A958EA3000E1D17 /* b2MouseJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2MouseJoint.cpp; sourceTree = "<group>"; };
+		FA0B79A31A958EA3000E1D17 /* b2MouseJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2MouseJoint.h; sourceTree = "<group>"; };
+		FA0B79A41A958EA3000E1D17 /* b2PrismaticJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2PrismaticJoint.cpp; sourceTree = "<group>"; };
+		FA0B79A51A958EA3000E1D17 /* b2PrismaticJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2PrismaticJoint.h; sourceTree = "<group>"; };
+		FA0B79A61A958EA3000E1D17 /* b2PulleyJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2PulleyJoint.cpp; sourceTree = "<group>"; };
+		FA0B79A71A958EA3000E1D17 /* b2PulleyJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2PulleyJoint.h; sourceTree = "<group>"; };
+		FA0B79A81A958EA3000E1D17 /* b2RevoluteJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2RevoluteJoint.cpp; sourceTree = "<group>"; };
+		FA0B79A91A958EA3000E1D17 /* b2RevoluteJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2RevoluteJoint.h; sourceTree = "<group>"; };
+		FA0B79AA1A958EA3000E1D17 /* b2RopeJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2RopeJoint.cpp; sourceTree = "<group>"; };
+		FA0B79AB1A958EA3000E1D17 /* b2RopeJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2RopeJoint.h; sourceTree = "<group>"; };
+		FA0B79AC1A958EA3000E1D17 /* b2WeldJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2WeldJoint.cpp; sourceTree = "<group>"; };
+		FA0B79AD1A958EA3000E1D17 /* b2WeldJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2WeldJoint.h; sourceTree = "<group>"; };
+		FA0B79AE1A958EA3000E1D17 /* b2WheelJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2WheelJoint.cpp; sourceTree = "<group>"; };
+		FA0B79AF1A958EA3000E1D17 /* b2WheelJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2WheelJoint.h; sourceTree = "<group>"; };
+		FA0B79B21A958EA3000E1D17 /* b2Rope.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = b2Rope.cpp; sourceTree = "<group>"; };
+		FA0B79B31A958EA3000E1D17 /* b2Rope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2Rope.h; sourceTree = "<group>"; };
+		FA0B79B51A958EA3000E1D17 /* ddsinfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ddsinfo.h; sourceTree = "<group>"; };
+		FA0B79B61A958EA3000E1D17 /* ddsparse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ddsparse.cpp; sourceTree = "<group>"; };
+		FA0B79B71A958EA3000E1D17 /* ddsparse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ddsparse.h; sourceTree = "<group>"; };
+		FA0B79B91A958EA3000E1D17 /* enet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = enet.cpp; sourceTree = "<group>"; };
+		FA0B79BB1A958EA3000E1D17 /* callbacks.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = callbacks.c; sourceTree = "<group>"; };
+		FA0B79BD1A958EA3000E1D17 /* compress.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = compress.c; sourceTree = "<group>"; };
+		FA0B79BE1A958EA3000E1D17 /* host.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = host.c; sourceTree = "<group>"; };
+		FA0B79C11A958EA3000E1D17 /* callbacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = callbacks.h; sourceTree = "<group>"; };
+		FA0B79C21A958EA3000E1D17 /* enet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = enet.h; sourceTree = "<group>"; };
+		FA0B79C31A958EA3000E1D17 /* list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = list.h; sourceTree = "<group>"; };
+		FA0B79C41A958EA3000E1D17 /* protocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = protocol.h; sourceTree = "<group>"; };
+		FA0B79C51A958EA3000E1D17 /* time.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = time.h; sourceTree = "<group>"; };
+		FA0B79C61A958EA3000E1D17 /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = "<group>"; };
+		FA0B79C71A958EA3000E1D17 /* unix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unix.h; sourceTree = "<group>"; };
+		FA0B79C81A958EA3000E1D17 /* utility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utility.h; sourceTree = "<group>"; };
+		FA0B79C91A958EA3000E1D17 /* win32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = win32.h; sourceTree = "<group>"; };
+		FA0B79CB1A958EA3000E1D17 /* list.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = list.c; sourceTree = "<group>"; };
+		FA0B79CC1A958EA3000E1D17 /* packet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = packet.c; sourceTree = "<group>"; };
+		FA0B79CD1A958EA3000E1D17 /* peer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = peer.c; sourceTree = "<group>"; };
+		FA0B79CE1A958EA3000E1D17 /* protocol.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = protocol.c; sourceTree = "<group>"; };
+		FA0B79D01A958EA3000E1D17 /* unix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = unix.c; sourceTree = "<group>"; };
+		FA0B79D11A958EA3000E1D17 /* win32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = win32.c; sourceTree = "<group>"; };
+		FA0B79D21A958EA3000E1D17 /* lua-enet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "lua-enet.h"; sourceTree = "<group>"; };
+		FA0B79D41A958EA3000E1D17 /* glad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = glad.cpp; sourceTree = "<group>"; };
+		FA0B79D61A958EA3000E1D17 /* glad.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = glad.hpp; sourceTree = "<group>"; };
+		FA0B79D71A958EA3000E1D17 /* gladfuncs.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = gladfuncs.hpp; sourceTree = "<group>"; };
+		FA0B79D91A958EA3000E1D17 /* lodepng.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lodepng.cpp; sourceTree = "<group>"; };
+		FA0B79DA1A958EA3000E1D17 /* lodepng.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lodepng.h; sourceTree = "<group>"; };
+		FA0B79DD1A958EA3000E1D17 /* auxiliar.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = auxiliar.c; sourceTree = "<group>"; };
+		FA0B79DE1A958EA3000E1D17 /* auxiliar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = auxiliar.h; sourceTree = "<group>"; };
+		FA0B79DF1A958EA3000E1D17 /* buffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = buffer.c; sourceTree = "<group>"; };
+		FA0B79E01A958EA3000E1D17 /* buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buffer.h; sourceTree = "<group>"; };
+		FA0B79E11A958EA3000E1D17 /* except.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = except.c; sourceTree = "<group>"; };
+		FA0B79E21A958EA3000E1D17 /* except.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = except.h; sourceTree = "<group>"; };
+		FA0B79E31A958EA3000E1D17 /* ftp.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ftp.lua; sourceTree = "<group>"; };
+		FA0B79E41A958EA3000E1D17 /* ftp.lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ftp.lua.h; sourceTree = "<group>"; };
+		FA0B79E51A958EA3000E1D17 /* http.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = http.lua; sourceTree = "<group>"; };
+		FA0B79E61A958EA3000E1D17 /* http.lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = http.lua.h; sourceTree = "<group>"; };
+		FA0B79E71A958EA3000E1D17 /* inet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = inet.c; sourceTree = "<group>"; };
+		FA0B79E81A958EA3000E1D17 /* inet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inet.h; sourceTree = "<group>"; };
+		FA0B79E91A958EA3000E1D17 /* io.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = io.c; sourceTree = "<group>"; };
+		FA0B79EA1A958EA3000E1D17 /* io.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = io.h; sourceTree = "<group>"; };
+		FA0B79EB1A958EA3000E1D17 /* ltn12.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ltn12.lua; sourceTree = "<group>"; };
+		FA0B79EC1A958EA3000E1D17 /* ltn12.lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ltn12.lua.h; sourceTree = "<group>"; };
+		FA0B79ED1A958EA3000E1D17 /* lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lua.h; sourceTree = "<group>"; };
+		FA0B79EE1A958EA3000E1D17 /* luasocket.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = luasocket.c; sourceTree = "<group>"; };
+		FA0B79EF1A958EA3000E1D17 /* luasocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = luasocket.h; sourceTree = "<group>"; };
+		FA0B79F01A958EA3000E1D17 /* mime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mime.c; sourceTree = "<group>"; };
+		FA0B79F11A958EA3000E1D17 /* mime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mime.h; sourceTree = "<group>"; };
+		FA0B79F21A958EA3000E1D17 /* mime.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mime.lua; sourceTree = "<group>"; };
+		FA0B79F31A958EA3000E1D17 /* mime.lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mime.lua.h; sourceTree = "<group>"; };
+		FA0B79F41A958EA3000E1D17 /* options.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = options.c; sourceTree = "<group>"; };
+		FA0B79F51A958EA3000E1D17 /* options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = options.h; sourceTree = "<group>"; };
+		FA0B79F61A958EA3000E1D17 /* pre.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = pre.lua; sourceTree = "<group>"; };
+		FA0B79F71A958EA3000E1D17 /* select.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = select.c; sourceTree = "<group>"; };
+		FA0B79F81A958EA3000E1D17 /* select.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = select.h; sourceTree = "<group>"; };
+		FA0B79F91A958EA3000E1D17 /* smtp.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = smtp.lua; sourceTree = "<group>"; };
+		FA0B79FA1A958EA3000E1D17 /* smtp.lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smtp.lua.h; sourceTree = "<group>"; };
+		FA0B79FB1A958EA3000E1D17 /* socket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = socket.h; sourceTree = "<group>"; };
+		FA0B79FC1A958EA3000E1D17 /* socket.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = socket.lua; sourceTree = "<group>"; };
+		FA0B79FD1A958EA3000E1D17 /* socket.lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = socket.lua.h; sourceTree = "<group>"; };
+		FA0B79FE1A958EA3000E1D17 /* tcp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tcp.c; sourceTree = "<group>"; };
+		FA0B79FF1A958EA3000E1D17 /* tcp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tcp.h; sourceTree = "<group>"; };
+		FA0B7A001A958EA3000E1D17 /* timeout.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = timeout.c; sourceTree = "<group>"; };
+		FA0B7A011A958EA3000E1D17 /* timeout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timeout.h; sourceTree = "<group>"; };
+		FA0B7A021A958EA3000E1D17 /* tp.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tp.lua; sourceTree = "<group>"; };
+		FA0B7A031A958EA3000E1D17 /* tp.lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tp.lua.h; sourceTree = "<group>"; };
+		FA0B7A041A958EA3000E1D17 /* udp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = udp.c; sourceTree = "<group>"; };
+		FA0B7A051A958EA3000E1D17 /* udp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = udp.h; sourceTree = "<group>"; };
+		FA0B7A061A958EA3000E1D17 /* unix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = unix.c; sourceTree = "<group>"; };
+		FA0B7A071A958EA3000E1D17 /* unix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unix.h; sourceTree = "<group>"; };
+		FA0B7A081A958EA3000E1D17 /* url.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = url.lua; sourceTree = "<group>"; };
+		FA0B7A091A958EA3000E1D17 /* url.lua.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = url.lua.h; sourceTree = "<group>"; };
+		FA0B7A0A1A958EA3000E1D17 /* usocket.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = usocket.c; sourceTree = "<group>"; };
+		FA0B7A0B1A958EA3000E1D17 /* usocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = usocket.h; sourceTree = "<group>"; };
+		FA0B7A0E1A958EA3000E1D17 /* luasocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = luasocket.cpp; sourceTree = "<group>"; };
+		FA0B7A0F1A958EA3000E1D17 /* luasocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = luasocket.h; sourceTree = "<group>"; };
+		FA0B7A111A958EA3000E1D17 /* lprefix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lprefix.h; sourceTree = "<group>"; };
+		FA0B7A121A958EA3000E1D17 /* lutf8lib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lutf8lib.c; sourceTree = "<group>"; };
+		FA0B7A131A958EA3000E1D17 /* lutf8lib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lutf8lib.h; sourceTree = "<group>"; };
+		FA0B7A151A958EA3000E1D17 /* simplexnoise1234.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simplexnoise1234.cpp; sourceTree = "<group>"; };
+		FA0B7A161A958EA3000E1D17 /* simplexnoise1234.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simplexnoise1234.h; sourceTree = "<group>"; };
+		FA0B7A181A958EA3000E1D17 /* stb_image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stb_image.h; sourceTree = "<group>"; };
+		FA0B7A1B1A958EA3000E1D17 /* checked.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = checked.h; sourceTree = "<group>"; };
+		FA0B7A1C1A958EA3000E1D17 /* core.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = core.h; sourceTree = "<group>"; };
+		FA0B7A1D1A958EA3000E1D17 /* unchecked.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unchecked.h; sourceTree = "<group>"; };
+		FA0B7A1E1A958EA3000E1D17 /* utf8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utf8.h; sourceTree = "<group>"; };
+		FA0B7A201A958EA3000E1D17 /* wuff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wuff.c; sourceTree = "<group>"; };
+		FA0B7A211A958EA3000E1D17 /* wuff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wuff.h; sourceTree = "<group>"; };
+		FA0B7A221A958EA3000E1D17 /* wuff_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wuff_config.h; sourceTree = "<group>"; };
+		FA0B7A231A958EA3000E1D17 /* wuff_convert.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wuff_convert.c; sourceTree = "<group>"; };
+		FA0B7A241A958EA3000E1D17 /* wuff_convert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wuff_convert.h; sourceTree = "<group>"; };
+		FA0B7A251A958EA3000E1D17 /* wuff_internal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wuff_internal.c; sourceTree = "<group>"; };
+		FA0B7A261A958EA3000E1D17 /* wuff_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wuff_internal.h; sourceTree = "<group>"; };
+		FA0B7A271A958EA3000E1D17 /* wuff_memory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wuff_memory.c; sourceTree = "<group>"; };
+		FA0B7B3E1A95902C000E1D17 /* Audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Audio.cpp; sourceTree = "<group>"; };
+		FA0B7B3F1A95902C000E1D17 /* Audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Audio.h; sourceTree = "<group>"; };
+		FA0B7B411A95902C000E1D17 /* Audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Audio.cpp; sourceTree = "<group>"; };
+		FA0B7B421A95902C000E1D17 /* Audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Audio.h; sourceTree = "<group>"; };
+		FA0B7B431A95902C000E1D17 /* Source.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Source.cpp; sourceTree = "<group>"; };
+		FA0B7B441A95902C000E1D17 /* Source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Source.h; sourceTree = "<group>"; };
+		FA0B7B461A95902C000E1D17 /* Audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Audio.cpp; sourceTree = "<group>"; };
+		FA0B7B471A95902C000E1D17 /* Audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Audio.h; sourceTree = "<group>"; };
+		FA0B7B481A95902C000E1D17 /* Pool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Pool.cpp; sourceTree = "<group>"; };
+		FA0B7B491A95902C000E1D17 /* Pool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Pool.h; sourceTree = "<group>"; };
+		FA0B7B4A1A95902C000E1D17 /* Source.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Source.cpp; sourceTree = "<group>"; };
+		FA0B7B4B1A95902C000E1D17 /* Source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Source.h; sourceTree = "<group>"; };
+		FA0B7B4C1A95902C000E1D17 /* Source.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Source.cpp; sourceTree = "<group>"; };
+		FA0B7B4D1A95902C000E1D17 /* Source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Source.h; sourceTree = "<group>"; };
+		FA0B7B4E1A95902C000E1D17 /* wrap_Audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Audio.cpp; sourceTree = "<group>"; };
+		FA0B7B4F1A95902C000E1D17 /* wrap_Audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Audio.h; sourceTree = "<group>"; };
+		FA0B7B501A95902C000E1D17 /* wrap_Source.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Source.cpp; sourceTree = "<group>"; };
+		FA0B7B511A95902C000E1D17 /* wrap_Source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Source.h; sourceTree = "<group>"; };
+		FA0B7B531A95902C000E1D17 /* Event.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Event.cpp; sourceTree = "<group>"; };
+		FA0B7B541A95902C000E1D17 /* Event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Event.h; sourceTree = "<group>"; };
+		FA0B7B561A95902C000E1D17 /* Event.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Event.cpp; sourceTree = "<group>"; };
+		FA0B7B571A95902C000E1D17 /* Event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Event.h; sourceTree = "<group>"; };
+		FA0B7B5B1A95902C000E1D17 /* DroppedFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DroppedFile.cpp; sourceTree = "<group>"; };
+		FA0B7B5C1A95902C000E1D17 /* DroppedFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DroppedFile.h; sourceTree = "<group>"; };
+		FA0B7B5D1A95902C000E1D17 /* File.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = File.cpp; sourceTree = "<group>"; };
+		FA0B7B5E1A95902C000E1D17 /* File.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = File.h; sourceTree = "<group>"; };
+		FA0B7B5F1A95902C000E1D17 /* FileData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileData.cpp; sourceTree = "<group>"; };
+		FA0B7B601A95902C000E1D17 /* FileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileData.h; sourceTree = "<group>"; };
+		FA0B7B611A95902C000E1D17 /* Filesystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Filesystem.cpp; sourceTree = "<group>"; };
+		FA0B7B621A95902C000E1D17 /* Filesystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Filesystem.h; sourceTree = "<group>"; };
+		FA0B7B641A95902C000E1D17 /* File.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = File.cpp; sourceTree = "<group>"; };
+		FA0B7B651A95902C000E1D17 /* File.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = File.h; sourceTree = "<group>"; };
+		FA0B7B661A95902C000E1D17 /* Filesystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Filesystem.cpp; sourceTree = "<group>"; };
+		FA0B7B671A95902C000E1D17 /* Filesystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Filesystem.h; sourceTree = "<group>"; };
+		FA0B7B681A95902C000E1D17 /* wrap_DroppedFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_DroppedFile.cpp; sourceTree = "<group>"; };
+		FA0B7B691A95902C000E1D17 /* wrap_DroppedFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_DroppedFile.h; sourceTree = "<group>"; };
+		FA0B7B6A1A95902C000E1D17 /* wrap_File.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_File.cpp; sourceTree = "<group>"; };
+		FA0B7B6B1A95902C000E1D17 /* wrap_File.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_File.h; sourceTree = "<group>"; };
+		FA0B7B6C1A95902C000E1D17 /* wrap_FileData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_FileData.cpp; sourceTree = "<group>"; };
+		FA0B7B6D1A95902C000E1D17 /* wrap_FileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_FileData.h; sourceTree = "<group>"; };
+		FA0B7B6E1A95902C000E1D17 /* wrap_Filesystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Filesystem.cpp; sourceTree = "<group>"; };
+		FA0B7B6F1A95902C000E1D17 /* wrap_Filesystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Filesystem.h; sourceTree = "<group>"; };
+		FA0B7B711A95902C000E1D17 /* BMFontRasterizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BMFontRasterizer.cpp; sourceTree = "<group>"; };
+		FA0B7B721A95902C000E1D17 /* BMFontRasterizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BMFontRasterizer.h; sourceTree = "<group>"; };
+		FA0B7B731A95902C000E1D17 /* Font.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Font.cpp; sourceTree = "<group>"; };
+		FA0B7B741A95902C000E1D17 /* Font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Font.h; sourceTree = "<group>"; };
+		FA0B7B761A95902C000E1D17 /* Font.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Font.cpp; sourceTree = "<group>"; };
+		FA0B7B771A95902C000E1D17 /* Font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Font.h; sourceTree = "<group>"; };
+		FA0B7B781A95902C000E1D17 /* TrueTypeRasterizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TrueTypeRasterizer.cpp; sourceTree = "<group>"; };
+		FA0B7B791A95902C000E1D17 /* TrueTypeRasterizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TrueTypeRasterizer.h; sourceTree = "<group>"; };
+		FA0B7B7A1A95902C000E1D17 /* GlyphData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GlyphData.cpp; sourceTree = "<group>"; };
+		FA0B7B7B1A95902C000E1D17 /* GlyphData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GlyphData.h; sourceTree = "<group>"; };
+		FA0B7B7C1A95902C000E1D17 /* ImageRasterizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageRasterizer.cpp; sourceTree = "<group>"; };
+		FA0B7B7D1A95902C000E1D17 /* ImageRasterizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageRasterizer.h; sourceTree = "<group>"; };
+		FA0B7B7E1A95902C000E1D17 /* Rasterizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Rasterizer.cpp; sourceTree = "<group>"; };
+		FA0B7B7F1A95902C000E1D17 /* Rasterizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Rasterizer.h; sourceTree = "<group>"; };
+		FA0B7B801A95902C000E1D17 /* Vera.ttf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Vera.ttf.h; sourceTree = "<group>"; };
+		FA0B7B811A95902C000E1D17 /* wrap_Font.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Font.cpp; sourceTree = "<group>"; };
+		FA0B7B821A95902C000E1D17 /* wrap_Font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Font.h; sourceTree = "<group>"; };
+		FA0B7B831A95902C000E1D17 /* wrap_GlyphData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_GlyphData.cpp; sourceTree = "<group>"; };
+		FA0B7B841A95902C000E1D17 /* wrap_GlyphData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_GlyphData.h; sourceTree = "<group>"; };
+		FA0B7B851A95902C000E1D17 /* wrap_Rasterizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Rasterizer.cpp; sourceTree = "<group>"; };
+		FA0B7B861A95902C000E1D17 /* wrap_Rasterizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Rasterizer.h; sourceTree = "<group>"; };
+		FA0B7B881A95902C000E1D17 /* Color.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Color.h; sourceTree = "<group>"; };
+		FA0B7B891A95902C000E1D17 /* Drawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Drawable.h; sourceTree = "<group>"; };
+		FA0B7B8A1A95902C000E1D17 /* Graphics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Graphics.cpp; sourceTree = "<group>"; };
+		FA0B7B8B1A95902C000E1D17 /* Graphics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Graphics.h; sourceTree = "<group>"; };
+		FA0B7B8D1A95902C000E1D17 /* Canvas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Canvas.cpp; sourceTree = "<group>"; };
+		FA0B7B8E1A95902C000E1D17 /* Canvas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Canvas.h; sourceTree = "<group>"; };
+		FA0B7B8F1A95902C000E1D17 /* Font.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Font.cpp; sourceTree = "<group>"; };
+		FA0B7B901A95902C000E1D17 /* Font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Font.h; sourceTree = "<group>"; };
+		FA0B7B911A95902C000E1D17 /* Graphics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Graphics.cpp; sourceTree = "<group>"; };
+		FA0B7B921A95902C000E1D17 /* Graphics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Graphics.h; sourceTree = "<group>"; };
+		FA0B7B931A95902C000E1D17 /* Image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Image.cpp; sourceTree = "<group>"; };
+		FA0B7B941A95902C000E1D17 /* Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Image.h; sourceTree = "<group>"; };
+		FA0B7B951A95902C000E1D17 /* Mesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mesh.cpp; sourceTree = "<group>"; };
+		FA0B7B961A95902C000E1D17 /* Mesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mesh.h; sourceTree = "<group>"; };
+		FA0B7B971A95902C000E1D17 /* OpenGL.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OpenGL.cpp; sourceTree = "<group>"; };
+		FA0B7B981A95902C000E1D17 /* OpenGL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenGL.h; sourceTree = "<group>"; };
+		FA0B7B991A95902C000E1D17 /* ParticleSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParticleSystem.cpp; sourceTree = "<group>"; };
+		FA0B7B9A1A95902C000E1D17 /* ParticleSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParticleSystem.h; sourceTree = "<group>"; };
+		FA0B7B9B1A95902C000E1D17 /* Polyline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Polyline.cpp; sourceTree = "<group>"; };
+		FA0B7B9C1A95902C000E1D17 /* Polyline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Polyline.h; sourceTree = "<group>"; };
+		FA0B7B9D1A95902C000E1D17 /* Shader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Shader.cpp; sourceTree = "<group>"; };
+		FA0B7B9E1A95902C000E1D17 /* Shader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Shader.h; sourceTree = "<group>"; };
+		FA0B7B9F1A95902C000E1D17 /* SpriteBatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpriteBatch.cpp; sourceTree = "<group>"; };
+		FA0B7BA01A95902C000E1D17 /* SpriteBatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpriteBatch.h; sourceTree = "<group>"; };
+		FA0B7BA11A95902C000E1D17 /* Text.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Text.cpp; sourceTree = "<group>"; };
+		FA0B7BA21A95902C000E1D17 /* Text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Text.h; sourceTree = "<group>"; };
+		FA0B7BA41A95902C000E1D17 /* VertexBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VertexBuffer.cpp; sourceTree = "<group>"; };
+		FA0B7BA51A95902C000E1D17 /* VertexBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexBuffer.h; sourceTree = "<group>"; };
+		FA0B7BA61A95902C000E1D17 /* wrap_Canvas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Canvas.cpp; sourceTree = "<group>"; };
+		FA0B7BA71A95902C000E1D17 /* wrap_Canvas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Canvas.h; sourceTree = "<group>"; };
+		FA0B7BA81A95902C000E1D17 /* wrap_Font.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Font.cpp; sourceTree = "<group>"; };
+		FA0B7BA91A95902C000E1D17 /* wrap_Font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Font.h; sourceTree = "<group>"; };
+		FA0B7BAA1A95902C000E1D17 /* wrap_Graphics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Graphics.cpp; sourceTree = "<group>"; };
+		FA0B7BAB1A95902C000E1D17 /* wrap_Graphics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Graphics.h; sourceTree = "<group>"; };
+		FA0B7BAC1A95902C000E1D17 /* wrap_Image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Image.cpp; sourceTree = "<group>"; };
+		FA0B7BAD1A95902C000E1D17 /* wrap_Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Image.h; sourceTree = "<group>"; };
+		FA0B7BAE1A95902C000E1D17 /* wrap_Mesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Mesh.cpp; sourceTree = "<group>"; };
+		FA0B7BAF1A95902C000E1D17 /* wrap_Mesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Mesh.h; sourceTree = "<group>"; };
+		FA0B7BB01A95902C000E1D17 /* wrap_ParticleSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_ParticleSystem.cpp; sourceTree = "<group>"; };
+		FA0B7BB11A95902C000E1D17 /* wrap_ParticleSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_ParticleSystem.h; sourceTree = "<group>"; };
+		FA0B7BB41A95902C000E1D17 /* wrap_Shader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Shader.cpp; sourceTree = "<group>"; };
+		FA0B7BB51A95902C000E1D17 /* wrap_Shader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Shader.h; sourceTree = "<group>"; };
+		FA0B7BB61A95902C000E1D17 /* wrap_SpriteBatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_SpriteBatch.cpp; sourceTree = "<group>"; };
+		FA0B7BB71A95902C000E1D17 /* wrap_SpriteBatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_SpriteBatch.h; sourceTree = "<group>"; };
+		FA0B7BB81A95902C000E1D17 /* wrap_Text.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Text.cpp; sourceTree = "<group>"; };
+		FA0B7BB91A95902C000E1D17 /* wrap_Text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Text.h; sourceTree = "<group>"; };
+		FA0B7BBC1A95902C000E1D17 /* Quad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Quad.cpp; sourceTree = "<group>"; };
+		FA0B7BBD1A95902C000E1D17 /* Quad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Quad.h; sourceTree = "<group>"; };
+		FA0B7BBE1A95902C000E1D17 /* Texture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Texture.cpp; sourceTree = "<group>"; };
+		FA0B7BBF1A95902C000E1D17 /* Texture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Texture.h; sourceTree = "<group>"; };
+		FA0B7BC01A95902C000E1D17 /* Volatile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Volatile.cpp; sourceTree = "<group>"; };
+		FA0B7BC11A95902C000E1D17 /* Volatile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Volatile.h; sourceTree = "<group>"; };
+		FA0B7BC31A95902C000E1D17 /* CompressedData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CompressedData.cpp; sourceTree = "<group>"; };
+		FA0B7BC41A95902C000E1D17 /* CompressedData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CompressedData.h; sourceTree = "<group>"; };
+		FA0B7BC51A95902C000E1D17 /* Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Image.h; sourceTree = "<group>"; };
+		FA0B7BC61A95902C000E1D17 /* ImageData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageData.cpp; sourceTree = "<group>"; };
+		FA0B7BC71A95902C000E1D17 /* ImageData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageData.h; sourceTree = "<group>"; };
+		FA0B7BC91A95902C000E1D17 /* CompressedData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CompressedData.cpp; sourceTree = "<group>"; };
+		FA0B7BCA1A95902C000E1D17 /* CompressedData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CompressedData.h; sourceTree = "<group>"; };
+		FA0B7BCB1A95902C000E1D17 /* CompressedFormatHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CompressedFormatHandler.h; sourceTree = "<group>"; };
+		FA0B7BCC1A95902C000E1D17 /* ddsHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ddsHandler.cpp; sourceTree = "<group>"; };
+		FA0B7BCD1A95902C000E1D17 /* ddsHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ddsHandler.h; sourceTree = "<group>"; };
+		FA0B7BCE1A95902C000E1D17 /* FormatHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FormatHandler.cpp; sourceTree = "<group>"; };
+		FA0B7BCF1A95902C000E1D17 /* FormatHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FormatHandler.h; sourceTree = "<group>"; };
+		FA0B7BD01A95902C000E1D17 /* Image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Image.cpp; sourceTree = "<group>"; };
+		FA0B7BD11A95902C000E1D17 /* Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Image.h; sourceTree = "<group>"; };
+		FA0B7BD21A95902C000E1D17 /* ImageData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageData.cpp; sourceTree = "<group>"; };
+		FA0B7BD31A95902C000E1D17 /* ImageData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageData.h; sourceTree = "<group>"; };
+		FA0B7BD41A95902C000E1D17 /* ImageIOHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageIOHandler.cpp; sourceTree = "<group>"; };
+		FA0B7BD51A95902C000E1D17 /* ImageIOHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageIOHandler.h; sourceTree = "<group>"; };
+		FA0B7BD61A95902C000E1D17 /* JPEGHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JPEGHandler.cpp; sourceTree = "<group>"; };
+		FA0B7BD71A95902C000E1D17 /* JPEGHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JPEGHandler.h; sourceTree = "<group>"; };
+		FA0B7BD81A95902C000E1D17 /* KTXHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KTXHandler.cpp; sourceTree = "<group>"; };
+		FA0B7BD91A95902C000E1D17 /* KTXHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KTXHandler.h; sourceTree = "<group>"; };
+		FA0B7BDA1A95902C000E1D17 /* PKMHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PKMHandler.cpp; sourceTree = "<group>"; };
+		FA0B7BDB1A95902C000E1D17 /* PKMHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PKMHandler.h; sourceTree = "<group>"; };
+		FA0B7BDC1A95902C000E1D17 /* PNGHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PNGHandler.cpp; sourceTree = "<group>"; };
+		FA0B7BDD1A95902C000E1D17 /* PNGHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PNGHandler.h; sourceTree = "<group>"; };
+		FA0B7BDE1A95902C000E1D17 /* PVRHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PVRHandler.cpp; sourceTree = "<group>"; };
+		FA0B7BDF1A95902C000E1D17 /* PVRHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PVRHandler.h; sourceTree = "<group>"; };
+		FA0B7BE01A95902C000E1D17 /* STBHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = STBHandler.cpp; sourceTree = "<group>"; };
+		FA0B7BE11A95902C000E1D17 /* STBHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = STBHandler.h; sourceTree = "<group>"; };
+		FA0B7BE21A95902C000E1D17 /* wrap_CompressedData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_CompressedData.cpp; sourceTree = "<group>"; };
+		FA0B7BE31A95902C000E1D17 /* wrap_CompressedData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_CompressedData.h; sourceTree = "<group>"; };
+		FA0B7BE41A95902C000E1D17 /* wrap_Image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Image.cpp; sourceTree = "<group>"; };
+		FA0B7BE51A95902C000E1D17 /* wrap_Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Image.h; sourceTree = "<group>"; };
+		FA0B7BE61A95902C000E1D17 /* wrap_ImageData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_ImageData.cpp; sourceTree = "<group>"; };
+		FA0B7BE71A95902C000E1D17 /* wrap_ImageData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_ImageData.h; sourceTree = "<group>"; };
+		FA0B7BE91A95902C000E1D17 /* Joystick.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Joystick.cpp; sourceTree = "<group>"; };
+		FA0B7BEA1A95902C000E1D17 /* Joystick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Joystick.h; sourceTree = "<group>"; };
+		FA0B7BEB1A95902C000E1D17 /* JoystickModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JoystickModule.h; sourceTree = "<group>"; };
+		FA0B7BED1A95902C000E1D17 /* Joystick.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Joystick.cpp; sourceTree = "<group>"; };
+		FA0B7BEE1A95902C000E1D17 /* Joystick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Joystick.h; sourceTree = "<group>"; };
+		FA0B7BEF1A95902C000E1D17 /* JoystickModule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JoystickModule.cpp; sourceTree = "<group>"; };
+		FA0B7BF01A95902C000E1D17 /* JoystickModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JoystickModule.h; sourceTree = "<group>"; };
+		FA0B7BF11A95902C000E1D17 /* wrap_Joystick.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Joystick.cpp; sourceTree = "<group>"; };
+		FA0B7BF21A95902C000E1D17 /* wrap_Joystick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Joystick.h; sourceTree = "<group>"; };
+		FA0B7BF31A95902C000E1D17 /* wrap_JoystickModule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_JoystickModule.cpp; sourceTree = "<group>"; };
+		FA0B7BF41A95902C000E1D17 /* wrap_JoystickModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_JoystickModule.h; sourceTree = "<group>"; };
+		FA0B7BF61A95902C000E1D17 /* Keyboard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Keyboard.cpp; sourceTree = "<group>"; };
+		FA0B7BF71A95902C000E1D17 /* Keyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Keyboard.h; sourceTree = "<group>"; };
+		FA0B7BF91A95902C000E1D17 /* Keyboard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Keyboard.cpp; sourceTree = "<group>"; };
+		FA0B7BFA1A95902C000E1D17 /* Keyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Keyboard.h; sourceTree = "<group>"; };
+		FA0B7BFB1A95902C000E1D17 /* wrap_Keyboard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Keyboard.cpp; sourceTree = "<group>"; };
+		FA0B7BFC1A95902C000E1D17 /* wrap_Keyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Keyboard.h; sourceTree = "<group>"; };
+		FA0B7BFE1A95902C000E1D17 /* love.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = love.cpp; sourceTree = "<group>"; };
+		FA0B7BFF1A95902C000E1D17 /* love.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = love.h; sourceTree = "<group>"; };
+		FA0B7C011A95902C000E1D17 /* BezierCurve.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BezierCurve.cpp; sourceTree = "<group>"; };
+		FA0B7C021A95902C000E1D17 /* BezierCurve.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BezierCurve.h; sourceTree = "<group>"; };
+		FA0B7C031A95902C000E1D17 /* MathModule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MathModule.cpp; sourceTree = "<group>"; };
+		FA0B7C041A95902C000E1D17 /* MathModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MathModule.h; sourceTree = "<group>"; };
+		FA0B7C051A95902C000E1D17 /* RandomGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RandomGenerator.cpp; sourceTree = "<group>"; };
+		FA0B7C061A95902C000E1D17 /* RandomGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RandomGenerator.h; sourceTree = "<group>"; };
+		FA0B7C071A95902C000E1D17 /* wrap_BezierCurve.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_BezierCurve.cpp; sourceTree = "<group>"; };
+		FA0B7C081A95902C000E1D17 /* wrap_BezierCurve.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_BezierCurve.h; sourceTree = "<group>"; };
+		FA0B7C091A95902C000E1D17 /* wrap_Math.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Math.cpp; sourceTree = "<group>"; };
+		FA0B7C0A1A95902C000E1D17 /* wrap_Math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Math.h; sourceTree = "<group>"; };
+		FA0B7C0B1A95902C000E1D17 /* wrap_RandomGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_RandomGenerator.cpp; sourceTree = "<group>"; };
+		FA0B7C0C1A95902C000E1D17 /* wrap_RandomGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_RandomGenerator.h; sourceTree = "<group>"; };
+		FA0B7C0E1A95902C000E1D17 /* Cursor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Cursor.cpp; sourceTree = "<group>"; };
+		FA0B7C0F1A95902C000E1D17 /* Cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Cursor.h; sourceTree = "<group>"; };
+		FA0B7C101A95902C000E1D17 /* Mouse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mouse.cpp; sourceTree = "<group>"; };
+		FA0B7C111A95902C000E1D17 /* Mouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mouse.h; sourceTree = "<group>"; };
+		FA0B7C131A95902C000E1D17 /* Cursor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Cursor.cpp; sourceTree = "<group>"; };
+		FA0B7C141A95902C000E1D17 /* Cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Cursor.h; sourceTree = "<group>"; };
+		FA0B7C151A95902C000E1D17 /* Mouse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mouse.cpp; sourceTree = "<group>"; };
+		FA0B7C161A95902C000E1D17 /* Mouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mouse.h; sourceTree = "<group>"; };
+		FA0B7C171A95902C000E1D17 /* wrap_Cursor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Cursor.cpp; sourceTree = "<group>"; };
+		FA0B7C181A95902C000E1D17 /* wrap_Cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Cursor.h; sourceTree = "<group>"; };
+		FA0B7C191A95902C000E1D17 /* wrap_Mouse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Mouse.cpp; sourceTree = "<group>"; };
+		FA0B7C1A1A95902C000E1D17 /* wrap_Mouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Mouse.h; sourceTree = "<group>"; };
+		FA0B7C1C1A95902C000E1D17 /* Body.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Body.cpp; sourceTree = "<group>"; };
+		FA0B7C1D1A95902C000E1D17 /* Body.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Body.h; sourceTree = "<group>"; };
+		FA0B7C1F1A95902C000E1D17 /* Body.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Body.cpp; sourceTree = "<group>"; };
+		FA0B7C201A95902C000E1D17 /* Body.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Body.h; sourceTree = "<group>"; };
+		FA0B7C211A95902C000E1D17 /* ChainShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ChainShape.cpp; sourceTree = "<group>"; };
+		FA0B7C221A95902C000E1D17 /* ChainShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChainShape.h; sourceTree = "<group>"; };
+		FA0B7C231A95902C000E1D17 /* CircleShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CircleShape.cpp; sourceTree = "<group>"; };
+		FA0B7C241A95902C000E1D17 /* CircleShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CircleShape.h; sourceTree = "<group>"; };
+		FA0B7C251A95902C000E1D17 /* Contact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Contact.cpp; sourceTree = "<group>"; };
+		FA0B7C261A95902C000E1D17 /* Contact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Contact.h; sourceTree = "<group>"; };
+		FA0B7C271A95902C000E1D17 /* DistanceJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DistanceJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C281A95902C000E1D17 /* DistanceJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DistanceJoint.h; sourceTree = "<group>"; };
+		FA0B7C291A95902C000E1D17 /* EdgeShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EdgeShape.cpp; sourceTree = "<group>"; };
+		FA0B7C2A1A95902C000E1D17 /* EdgeShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EdgeShape.h; sourceTree = "<group>"; };
+		FA0B7C2B1A95902C000E1D17 /* Fixture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Fixture.cpp; sourceTree = "<group>"; };
+		FA0B7C2C1A95902C000E1D17 /* Fixture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Fixture.h; sourceTree = "<group>"; };
+		FA0B7C2D1A95902C000E1D17 /* FrictionJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FrictionJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C2E1A95902C000E1D17 /* FrictionJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FrictionJoint.h; sourceTree = "<group>"; };
+		FA0B7C2F1A95902C000E1D17 /* GearJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GearJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C301A95902C000E1D17 /* GearJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GearJoint.h; sourceTree = "<group>"; };
+		FA0B7C311A95902C000E1D17 /* Joint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Joint.cpp; sourceTree = "<group>"; };
+		FA0B7C321A95902C000E1D17 /* Joint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Joint.h; sourceTree = "<group>"; };
+		FA0B7C331A95902C000E1D17 /* MotorJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MotorJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C341A95902C000E1D17 /* MotorJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MotorJoint.h; sourceTree = "<group>"; };
+		FA0B7C351A95902C000E1D17 /* MouseJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MouseJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C361A95902C000E1D17 /* MouseJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MouseJoint.h; sourceTree = "<group>"; };
+		FA0B7C371A95902C000E1D17 /* Physics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Physics.cpp; sourceTree = "<group>"; };
+		FA0B7C381A95902C000E1D17 /* Physics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Physics.h; sourceTree = "<group>"; };
+		FA0B7C391A95902C000E1D17 /* PolygonShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PolygonShape.cpp; sourceTree = "<group>"; };
+		FA0B7C3A1A95902C000E1D17 /* PolygonShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolygonShape.h; sourceTree = "<group>"; };
+		FA0B7C3B1A95902C000E1D17 /* PrismaticJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PrismaticJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C3C1A95902C000E1D17 /* PrismaticJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrismaticJoint.h; sourceTree = "<group>"; };
+		FA0B7C3D1A95902C000E1D17 /* PulleyJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PulleyJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C3E1A95902C000E1D17 /* PulleyJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PulleyJoint.h; sourceTree = "<group>"; };
+		FA0B7C3F1A95902C000E1D17 /* RevoluteJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RevoluteJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C401A95902C000E1D17 /* RevoluteJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RevoluteJoint.h; sourceTree = "<group>"; };
+		FA0B7C411A95902C000E1D17 /* RopeJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RopeJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C421A95902C000E1D17 /* RopeJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RopeJoint.h; sourceTree = "<group>"; };
+		FA0B7C431A95902C000E1D17 /* Shape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Shape.cpp; sourceTree = "<group>"; };
+		FA0B7C441A95902C000E1D17 /* Shape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Shape.h; sourceTree = "<group>"; };
+		FA0B7C451A95902C000E1D17 /* WeldJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WeldJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C461A95902C000E1D17 /* WeldJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeldJoint.h; sourceTree = "<group>"; };
+		FA0B7C471A95902C000E1D17 /* WheelJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WheelJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C481A95902C000E1D17 /* WheelJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WheelJoint.h; sourceTree = "<group>"; };
+		FA0B7C491A95902C000E1D17 /* World.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = World.cpp; sourceTree = "<group>"; };
+		FA0B7C4A1A95902C000E1D17 /* World.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = World.h; sourceTree = "<group>"; };
+		FA0B7C4B1A95902C000E1D17 /* wrap_Body.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Body.cpp; sourceTree = "<group>"; };
+		FA0B7C4C1A95902C000E1D17 /* wrap_Body.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Body.h; sourceTree = "<group>"; };
+		FA0B7C4D1A95902C000E1D17 /* wrap_ChainShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_ChainShape.cpp; sourceTree = "<group>"; };
+		FA0B7C4E1A95902C000E1D17 /* wrap_ChainShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_ChainShape.h; sourceTree = "<group>"; };
+		FA0B7C4F1A95902C000E1D17 /* wrap_CircleShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_CircleShape.cpp; sourceTree = "<group>"; };
+		FA0B7C501A95902C000E1D17 /* wrap_CircleShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_CircleShape.h; sourceTree = "<group>"; };
+		FA0B7C511A95902C000E1D17 /* wrap_Contact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Contact.cpp; sourceTree = "<group>"; };
+		FA0B7C521A95902C000E1D17 /* wrap_Contact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Contact.h; sourceTree = "<group>"; };
+		FA0B7C531A95902C000E1D17 /* wrap_DistanceJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_DistanceJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C541A95902C000E1D17 /* wrap_DistanceJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_DistanceJoint.h; sourceTree = "<group>"; };
+		FA0B7C551A95902C000E1D17 /* wrap_EdgeShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_EdgeShape.cpp; sourceTree = "<group>"; };
+		FA0B7C561A95902C000E1D17 /* wrap_EdgeShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_EdgeShape.h; sourceTree = "<group>"; };
+		FA0B7C571A95902C000E1D17 /* wrap_Fixture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Fixture.cpp; sourceTree = "<group>"; };
+		FA0B7C581A95902C000E1D17 /* wrap_Fixture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Fixture.h; sourceTree = "<group>"; };
+		FA0B7C591A95902C000E1D17 /* wrap_FrictionJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_FrictionJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C5A1A95902C000E1D17 /* wrap_FrictionJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_FrictionJoint.h; sourceTree = "<group>"; };
+		FA0B7C5B1A95902C000E1D17 /* wrap_GearJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_GearJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C5C1A95902C000E1D17 /* wrap_GearJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_GearJoint.h; sourceTree = "<group>"; };
+		FA0B7C5D1A95902C000E1D17 /* wrap_Joint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Joint.cpp; sourceTree = "<group>"; };
+		FA0B7C5E1A95902C000E1D17 /* wrap_Joint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Joint.h; sourceTree = "<group>"; };
+		FA0B7C5F1A95902C000E1D17 /* wrap_MotorJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_MotorJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C601A95902C000E1D17 /* wrap_MotorJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_MotorJoint.h; sourceTree = "<group>"; };
+		FA0B7C611A95902C000E1D17 /* wrap_MouseJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_MouseJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C621A95902C000E1D17 /* wrap_MouseJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_MouseJoint.h; sourceTree = "<group>"; };
+		FA0B7C631A95902C000E1D17 /* wrap_Physics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Physics.cpp; sourceTree = "<group>"; };
+		FA0B7C641A95902C000E1D17 /* wrap_Physics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Physics.h; sourceTree = "<group>"; };
+		FA0B7C651A95902C000E1D17 /* wrap_PolygonShape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_PolygonShape.cpp; sourceTree = "<group>"; };
+		FA0B7C661A95902C000E1D17 /* wrap_PolygonShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_PolygonShape.h; sourceTree = "<group>"; };
+		FA0B7C671A95902C000E1D17 /* wrap_PrismaticJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_PrismaticJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C681A95902C000E1D17 /* wrap_PrismaticJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_PrismaticJoint.h; sourceTree = "<group>"; };
+		FA0B7C691A95902C000E1D17 /* wrap_PulleyJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_PulleyJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C6A1A95902C000E1D17 /* wrap_PulleyJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_PulleyJoint.h; sourceTree = "<group>"; };
+		FA0B7C6B1A95902C000E1D17 /* wrap_RevoluteJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_RevoluteJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C6C1A95902C000E1D17 /* wrap_RevoluteJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_RevoluteJoint.h; sourceTree = "<group>"; };
+		FA0B7C6D1A95902C000E1D17 /* wrap_RopeJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_RopeJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C6E1A95902C000E1D17 /* wrap_RopeJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_RopeJoint.h; sourceTree = "<group>"; };
+		FA0B7C6F1A95902C000E1D17 /* wrap_Shape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Shape.cpp; sourceTree = "<group>"; };
+		FA0B7C701A95902C000E1D17 /* wrap_Shape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Shape.h; sourceTree = "<group>"; };
+		FA0B7C711A95902C000E1D17 /* wrap_WeldJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_WeldJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C721A95902C000E1D17 /* wrap_WeldJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_WeldJoint.h; sourceTree = "<group>"; };
+		FA0B7C731A95902C000E1D17 /* wrap_WheelJoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_WheelJoint.cpp; sourceTree = "<group>"; };
+		FA0B7C741A95902C000E1D17 /* wrap_WheelJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_WheelJoint.h; sourceTree = "<group>"; };
+		FA0B7C751A95902C000E1D17 /* wrap_World.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_World.cpp; sourceTree = "<group>"; };
+		FA0B7C761A95902C000E1D17 /* wrap_World.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_World.h; sourceTree = "<group>"; };
+		FA0B7C771A95902C000E1D17 /* Joint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Joint.cpp; sourceTree = "<group>"; };
+		FA0B7C781A95902C000E1D17 /* Joint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Joint.h; sourceTree = "<group>"; };
+		FA0B7C791A95902C000E1D17 /* Shape.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Shape.cpp; sourceTree = "<group>"; };
+		FA0B7C7A1A95902C000E1D17 /* Shape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Shape.h; sourceTree = "<group>"; };
+		FA0B7C7C1A95902C000E1D17 /* Decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Decoder.h; sourceTree = "<group>"; };
+		FA0B7C7E1A95902C000E1D17 /* CoreAudioDecoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CoreAudioDecoder.cpp; sourceTree = "<group>"; };
+		FA0B7C7F1A95902C000E1D17 /* CoreAudioDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CoreAudioDecoder.h; sourceTree = "<group>"; };
+		FA0B7C801A95902C000E1D17 /* Decoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Decoder.cpp; sourceTree = "<group>"; };
+		FA0B7C811A95902C000E1D17 /* Decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Decoder.h; sourceTree = "<group>"; };
+		FA0B7C821A95902C000E1D17 /* FLACDecoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FLACDecoder.cpp; sourceTree = "<group>"; };
+		FA0B7C831A95902C000E1D17 /* FLACDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FLACDecoder.h; sourceTree = "<group>"; };
+		FA0B7C841A95902C000E1D17 /* GmeDecoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GmeDecoder.cpp; sourceTree = "<group>"; };
+		FA0B7C851A95902C000E1D17 /* GmeDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GmeDecoder.h; sourceTree = "<group>"; };
+		FA0B7C861A95902C000E1D17 /* ModPlugDecoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ModPlugDecoder.cpp; sourceTree = "<group>"; };
+		FA0B7C871A95902C000E1D17 /* ModPlugDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModPlugDecoder.h; sourceTree = "<group>"; };
+		FA0B7C881A95902C000E1D17 /* Mpg123Decoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mpg123Decoder.cpp; sourceTree = "<group>"; };
+		FA0B7C891A95902C000E1D17 /* Mpg123Decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mpg123Decoder.h; sourceTree = "<group>"; };
+		FA0B7C8A1A95902C000E1D17 /* Sound.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Sound.cpp; sourceTree = "<group>"; };
+		FA0B7C8B1A95902C000E1D17 /* Sound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Sound.h; sourceTree = "<group>"; };
+		FA0B7C8C1A95902C000E1D17 /* VorbisDecoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VorbisDecoder.cpp; sourceTree = "<group>"; };
+		FA0B7C8D1A95902C000E1D17 /* VorbisDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VorbisDecoder.h; sourceTree = "<group>"; };
+		FA0B7C8E1A95902C000E1D17 /* WaveDecoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WaveDecoder.cpp; sourceTree = "<group>"; };
+		FA0B7C8F1A95902C000E1D17 /* WaveDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WaveDecoder.h; sourceTree = "<group>"; };
+		FA0B7C901A95902C000E1D17 /* Sound.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Sound.cpp; sourceTree = "<group>"; };
+		FA0B7C911A95902C000E1D17 /* Sound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Sound.h; sourceTree = "<group>"; };
+		FA0B7C921A95902C000E1D17 /* SoundData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SoundData.cpp; sourceTree = "<group>"; };
+		FA0B7C931A95902C000E1D17 /* SoundData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SoundData.h; sourceTree = "<group>"; };
+		FA0B7C941A95902C000E1D17 /* wrap_Decoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Decoder.cpp; sourceTree = "<group>"; };
+		FA0B7C951A95902C000E1D17 /* wrap_Decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Decoder.h; sourceTree = "<group>"; };
+		FA0B7C961A95902C000E1D17 /* wrap_Sound.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Sound.cpp; sourceTree = "<group>"; };
+		FA0B7C971A95902C000E1D17 /* wrap_Sound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Sound.h; sourceTree = "<group>"; };
+		FA0B7C981A95902C000E1D17 /* wrap_SoundData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_SoundData.cpp; sourceTree = "<group>"; };
+		FA0B7C991A95902C000E1D17 /* wrap_SoundData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_SoundData.h; sourceTree = "<group>"; };
+		FA0B7C9C1A95902C000E1D17 /* System.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = System.cpp; sourceTree = "<group>"; };
+		FA0B7C9D1A95902C000E1D17 /* System.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = System.h; sourceTree = "<group>"; };
+		FA0B7C9E1A95902C000E1D17 /* System.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = System.cpp; sourceTree = "<group>"; };
+		FA0B7C9F1A95902C000E1D17 /* System.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = System.h; sourceTree = "<group>"; };
+		FA0B7CA01A95902C000E1D17 /* wrap_System.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_System.cpp; sourceTree = "<group>"; };
+		FA0B7CA11A95902C000E1D17 /* wrap_System.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_System.h; sourceTree = "<group>"; };
+		FA0B7CA31A95902C000E1D17 /* Channel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Channel.cpp; sourceTree = "<group>"; };
+		FA0B7CA41A95902C000E1D17 /* Channel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Channel.h; sourceTree = "<group>"; };
+		FA0B7CA51A95902C000E1D17 /* LuaThread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LuaThread.cpp; sourceTree = "<group>"; };
+		FA0B7CA61A95902C000E1D17 /* LuaThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LuaThread.h; sourceTree = "<group>"; };
+		FA0B7CA81A95902C000E1D17 /* Thread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Thread.cpp; sourceTree = "<group>"; };
+		FA0B7CA91A95902C000E1D17 /* Thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Thread.h; sourceTree = "<group>"; };
+		FA0B7CAA1A95902C000E1D17 /* threads.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = threads.cpp; sourceTree = "<group>"; };
+		FA0B7CAB1A95902C000E1D17 /* threads.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = threads.h; sourceTree = "<group>"; };
+		FA0B7CAC1A95902C000E1D17 /* Thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Thread.h; sourceTree = "<group>"; };
+		FA0B7CAD1A95902C000E1D17 /* ThreadModule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ThreadModule.cpp; sourceTree = "<group>"; };
+		FA0B7CAE1A95902C000E1D17 /* ThreadModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThreadModule.h; sourceTree = "<group>"; };
+		FA0B7CAF1A95902C000E1D17 /* threads.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = threads.cpp; sourceTree = "<group>"; };
+		FA0B7CB01A95902C000E1D17 /* threads.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = threads.h; sourceTree = "<group>"; };
+		FA0B7CB11A95902C000E1D17 /* wrap_Channel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Channel.cpp; sourceTree = "<group>"; };
+		FA0B7CB21A95902C000E1D17 /* wrap_Channel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Channel.h; sourceTree = "<group>"; };
+		FA0B7CB31A95902C000E1D17 /* wrap_LuaThread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_LuaThread.cpp; sourceTree = "<group>"; };
+		FA0B7CB41A95902C000E1D17 /* wrap_LuaThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_LuaThread.h; sourceTree = "<group>"; };
+		FA0B7CB51A95902C000E1D17 /* wrap_ThreadModule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_ThreadModule.cpp; sourceTree = "<group>"; };
+		FA0B7CB61A95902C000E1D17 /* wrap_ThreadModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_ThreadModule.h; sourceTree = "<group>"; };
+		FA0B7CB91A95902C000E1D17 /* Timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Timer.cpp; sourceTree = "<group>"; };
+		FA0B7CBA1A95902C000E1D17 /* Timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Timer.h; sourceTree = "<group>"; };
+		FA0B7CBB1A95902C000E1D17 /* Timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Timer.h; sourceTree = "<group>"; };
+		FA0B7CBC1A95902C000E1D17 /* wrap_Timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Timer.cpp; sourceTree = "<group>"; };
+		FA0B7CBD1A95902C000E1D17 /* wrap_Timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Timer.h; sourceTree = "<group>"; };
+		FA0B7CC01A95902C000E1D17 /* Touch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Touch.cpp; sourceTree = "<group>"; };
+		FA0B7CC11A95902C000E1D17 /* Touch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Touch.h; sourceTree = "<group>"; };
+		FA0B7CC21A95902C000E1D17 /* Touch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Touch.h; sourceTree = "<group>"; };
+		FA0B7CC31A95902C000E1D17 /* wrap_Touch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Touch.cpp; sourceTree = "<group>"; };
+		FA0B7CC41A95902C000E1D17 /* wrap_Touch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Touch.h; sourceTree = "<group>"; };
+		FA0B7CC71A95902C000E1D17 /* Window.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Window.cpp; sourceTree = "<group>"; };
+		FA0B7CC81A95902C000E1D17 /* Window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Window.h; sourceTree = "<group>"; };
+		FA0B7CC91A95902C000E1D17 /* Window.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Window.cpp; sourceTree = "<group>"; };
+		FA0B7CCA1A95902C000E1D17 /* Window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Window.h; sourceTree = "<group>"; };
+		FA0B7CCB1A95902C000E1D17 /* wrap_Window.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Window.cpp; sourceTree = "<group>"; };
+		FA0B7CCC1A95902C000E1D17 /* wrap_Window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Window.h; sourceTree = "<group>"; };
+		FA0B7EF01A959D2C000E1D17 /* iOS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iOS.h; sourceTree = "<group>"; };
+		FA0B7EF11A959D2C000E1D17 /* iOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = iOS.mm; sourceTree = "<group>"; };
+		FA317EB918F28B6D00B0BCD7 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
+		FA48E43818F10D6C007CF0BD /* jpeg-turbo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = "jpeg-turbo.framework"; path = "/Library/Frameworks/jpeg-turbo.framework"; sourceTree = "<absolute>"; };
+		FA577A6716C719D900860150 /* FreeType.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FreeType.framework; path = /Library/Frameworks/FreeType.framework; sourceTree = "<absolute>"; };
+		FA577A6D16C719EA00860150 /* Lua.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Lua.framework; path = /Library/Frameworks/Lua.framework; sourceTree = "<absolute>"; };
+		FA577A6F16C719F000860150 /* mpg123.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = mpg123.framework; path = /Library/Frameworks/mpg123.framework; sourceTree = "<absolute>"; };
+		FA577A7116C719F400860150 /* Ogg.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Ogg.framework; path = /Library/Frameworks/Ogg.framework; sourceTree = "<absolute>"; };
+		FA577A7316C719F900860150 /* physfs.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = physfs.framework; path = /Library/Frameworks/physfs.framework; sourceTree = "<absolute>"; };
+		FA577A7716C71A0800860150 /* Vorbis.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Vorbis.framework; path = /Library/Frameworks/Vorbis.framework; sourceTree = "<absolute>"; };
+		FA577A7916C71A1700860150 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
+		FA577A7C16C71A2600860150 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
+		FA577A8216C71A5300860150 /* libmodplug.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = libmodplug.framework; path = /Library/Frameworks/libmodplug.framework; sourceTree = "<absolute>"; };
+		FA577A8C16C71D3600860150 /* auto.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = auto.lua; sourceTree = "<group>"; };
+		FA577A8D16C71D3600860150 /* boot.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = boot.lua; sourceTree = "<group>"; };
+		FA577A8E16C71D3600860150 /* graphics.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = graphics.lua; sourceTree = "<group>"; };
+		FA577AAF16C7507900860150 /* love.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = love.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		FA5D24A51A96D2EC00C6FC8F /* libFreetype2.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libFreetype2.a; sourceTree = "<group>"; };
+		FA5D24A91A96D2EC00C6FC8F /* libluajit.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libluajit.a; sourceTree = "<group>"; };
+		FA5D24AB1A96D2EC00C6FC8F /* libogg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libogg.a; sourceTree = "<group>"; };
+		FA5D24AD1A96D2EC00C6FC8F /* libphysfs.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libphysfs.a; sourceTree = "<group>"; };
+		FA5D24AF1A96D2EC00C6FC8F /* libvorbis.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbis.a; sourceTree = "<group>"; };
+		FA5D24CD1A96E63D00C6FC8F /* libSDL2.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libSDL2.a; sourceTree = "<group>"; };
+		FA620A2E1AA2F8DB005DB4C2 /* wrap_Quad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Quad.cpp; sourceTree = "<group>"; };
+		FA620A2F1AA2F8DB005DB4C2 /* wrap_Quad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Quad.h; sourceTree = "<group>"; };
+		FA620A301AA2F8DB005DB4C2 /* wrap_Texture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Texture.cpp; sourceTree = "<group>"; };
+		FA620A311AA2F8DB005DB4C2 /* wrap_Texture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Texture.h; sourceTree = "<group>"; };
+		FA620A391AA305F6005DB4C2 /* types.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = types.cpp; sourceTree = "<group>"; };
+		FA8951A01AA2EDF300EC385A /* wrap_Event.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wrap_Event.cpp; sourceTree = "<group>"; };
+		FA8951A11AA2EDF300EC385A /* wrap_Event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrap_Event.h; sourceTree = "<group>"; };
+		FA9B4A0716E1578300074F42 /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = /Library/Frameworks/SDL2.framework; sourceTree = "<absolute>"; };
+		FAA627CD18E7E1560080752D /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; };
+		FAAFF04316CB11C700CCDE45 /* OpenAL-Soft.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = "OpenAL-Soft.framework"; path = "/Library/Frameworks/OpenAL-Soft.framework"; sourceTree = "<absolute>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		FA0B78DA1A958B90000E1D17 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				FA5D24B51A96D2EC00C6FC8F /* libvorbis.a in Frameworks */,
+				FA5D24B21A96D2EC00C6FC8F /* libluajit.a in Frameworks */,
+				FA5D24B01A96D2EC00C6FC8F /* libFreetype2.a in Frameworks */,
+				FA5D24B41A96D2EC00C6FC8F /* libphysfs.a in Frameworks */,
+				FA5D24B31A96D2EC00C6FC8F /* libogg.a in Frameworks */,
+				FA5D24CF1A96E68300C6FC8F /* libSDL2.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		FA577AAB16C7507900860150 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				FA317EBA18F28B6D00B0BCD7 /* libz.dylib in Frameworks */,
+				FA48E43918F10D6C007CF0BD /* jpeg-turbo.framework in Frameworks */,
+				FAA627CE18E7E1560080752D /* CoreServices.framework in Frameworks */,
+				FA9B4A0816E1578300074F42 /* SDL2.framework in Frameworks */,
+				FAAFF04416CB11C700CCDE45 /* OpenAL-Soft.framework in Frameworks */,
+				FA577AB016C7507900860150 /* Cocoa.framework in Frameworks */,
+				FA577AC216C7512D00860150 /* FreeType.framework in Frameworks */,
+				FA577AC516C7513400860150 /* libmodplug.framework in Frameworks */,
+				FA577AC716C7513A00860150 /* mpg123.framework in Frameworks */,
+				FA577AC816C7513C00860150 /* Ogg.framework in Frameworks */,
+				FA577ACA16C7514100860150 /* OpenGL.framework in Frameworks */,
+				FA577ACB16C7514400860150 /* physfs.framework in Frameworks */,
+				FA577ACD16C7514C00860150 /* Vorbis.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		2F654C0235EB60C744A22507 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				FA577AAF16C7507900860150 /* love.framework */,
+				FA0B78DD1A958B90000E1D17 /* liblove.a */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		352E6C5F6F8A681766EB5299 /* scripts */ = {
+			isa = PBXGroup;
+			children = (
+				FA577A8C16C71D3600860150 /* auto.lua */,
+				FA577A8D16C71D3600860150 /* boot.lua */,
+				503971A86B7167A91B670FBA /* boot.lua.h */,
+				FA577A8E16C71D3600860150 /* graphics.lua */,
+				104144AB73A974BC04A03131 /* graphics.lua.h */,
+			);
+			name = scripts;
+			path = ../../src/scripts;
+			sourceTree = "<group>";
+		};
+		54067CFB7D564E5764FA17DC /* love */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B78F61A958E3B000E1D17 /* common */,
+				FA0B794D1A958EA3000E1D17 /* libraries */,
+				FA0B7B3C1A95902C000E1D17 /* modules */,
+				352E6C5F6F8A681766EB5299 /* scripts */,
+				FA577A6616C7199700860150 /* Frameworks */,
+				FA5D24A11A96D24500C6FC8F /* Libraries */,
+				FA08F5AC16C751BA00F007B5 /* Resources */,
+				2F654C0235EB60C744A22507 /* Products */,
+			);
+			name = love;
+			sourceTree = "<group>";
+			usesTabs = 1;
+		};
+		FA08F5AC16C751BA00F007B5 /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+				FA08F5AE16C7525600F007B5 /* liblove-macosx.plist */,
+			);
+			name = Resources;
+			sourceTree = "<group>";
+		};
+		FA0B78F61A958E3B000E1D17 /* common */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B78F71A958E3B000E1D17 /* b64.cpp */,
+				FA0B78F81A958E3B000E1D17 /* b64.h */,
+				FA0B78F91A958E3B000E1D17 /* config.h */,
+				FA0B78FA1A958E3B000E1D17 /* Data.h */,
+				FA0B78FB1A958E3B000E1D17 /* delay.cpp */,
+				FA0B78FC1A958E3B000E1D17 /* delay.h */,
+				FA0B78FD1A958E3B000E1D17 /* EnumMap.h */,
+				FA0B78FE1A958E3B000E1D17 /* Exception.cpp */,
+				FA0B78FF1A958E3B000E1D17 /* Exception.h */,
+				FA0B79001A958E3B000E1D17 /* int.h */,
+				FA0B7EF01A959D2C000E1D17 /* iOS.h */,
+				FA0B7EF11A959D2C000E1D17 /* iOS.mm */,
+				FA0B79011A958E3B000E1D17 /* math.h */,
+				FA0B79021A958E3B000E1D17 /* Matrix.cpp */,
+				FA0B79031A958E3B000E1D17 /* Matrix.h */,
+				FA0B79041A958E3B000E1D17 /* Memoizer.cpp */,
+				FA0B79051A958E3B000E1D17 /* Memoizer.h */,
+				FA0B79061A958E3B000E1D17 /* Module.cpp */,
+				FA0B79071A958E3B000E1D17 /* Module.h */,
+				FA0B79081A958E3B000E1D17 /* Object.cpp */,
+				FA0B79091A958E3B000E1D17 /* Object.h */,
+				FA0B790A1A958E3B000E1D17 /* OSX.h */,
+				FA0B790B1A958E3B000E1D17 /* OSX.mm */,
+				FA0B790C1A958E3B000E1D17 /* Reference.cpp */,
+				FA0B790D1A958E3B000E1D17 /* Reference.h */,
+				FA0B790E1A958E3B000E1D17 /* runtime.cpp */,
+				FA0B790F1A958E3B000E1D17 /* runtime.h */,
+				FA0B79101A958E3B000E1D17 /* StringMap.h */,
+				FA620A391AA305F6005DB4C2 /* types.cpp */,
+				FA0B79111A958E3B000E1D17 /* types.h */,
+				FA0B79121A958E3B000E1D17 /* utf8.cpp */,
+				FA0B79131A958E3B000E1D17 /* utf8.h */,
+				FA0B79141A958E3B000E1D17 /* Variant.cpp */,
+				FA0B79151A958E3B000E1D17 /* Variant.h */,
+				FA0B79161A958E3B000E1D17 /* Vector.cpp */,
+				FA0B79171A958E3B000E1D17 /* Vector.h */,
+				FA0B79181A958E3B000E1D17 /* version.h */,
+				FA0B79191A958E3B000E1D17 /* wrap_Data.cpp */,
+				FA0B791A1A958E3B000E1D17 /* wrap_Data.h */,
+			);
+			name = common;
+			path = ../../src/common;
+			sourceTree = "<group>";
+		};
+		FA0B794D1A958EA3000E1D17 /* libraries */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B794E1A958EA3000E1D17 /* Box2D */,
+				FA0B79B41A958EA3000E1D17 /* ddsparse */,
+				FA0B79B81A958EA3000E1D17 /* enet */,
+				FA0B79D31A958EA3000E1D17 /* glad */,
+				FA0B79D81A958EA3000E1D17 /* lodepng */,
+				FA0B79DB1A958EA3000E1D17 /* luasocket */,
+				FA0B7A101A958EA3000E1D17 /* luautf8 */,
+				FA0B7A141A958EA3000E1D17 /* noise1234 */,
+				FA0B7A171A958EA3000E1D17 /* stb */,
+				FA0B7A191A958EA3000E1D17 /* utf8 */,
+				FA0B7A1F1A958EA3000E1D17 /* Wuff */,
+			);
+			name = libraries;
+			path = ../../src/libraries;
+			sourceTree = "<group>";
+		};
+		FA0B794E1A958EA3000E1D17 /* Box2D */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B794F1A958EA3000E1D17 /* Box2D.h */,
+				FA0B79501A958EA3000E1D17 /* Collision */,
+				FA0B79681A958EA3000E1D17 /* Common */,
+				FA0B79761A958EA3000E1D17 /* Dynamics */,
+				FA0B79B11A958EA3000E1D17 /* Rope */,
+			);
+			path = Box2D;
+			sourceTree = "<group>";
+		};
+		FA0B79501A958EA3000E1D17 /* Collision */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B79511A958EA3000E1D17 /* b2BroadPhase.cpp */,
+				FA0B79521A958EA3000E1D17 /* b2BroadPhase.h */,
+				FA0B79531A958EA3000E1D17 /* b2CollideCircle.cpp */,
+				FA0B79541A958EA3000E1D17 /* b2CollideEdge.cpp */,
+				FA0B79551A958EA3000E1D17 /* b2CollidePolygon.cpp */,
+				FA0B79561A958EA3000E1D17 /* b2Collision.cpp */,
+				FA0B79571A958EA3000E1D17 /* b2Collision.h */,
+				FA0B79581A958EA3000E1D17 /* b2Distance.cpp */,
+				FA0B79591A958EA3000E1D17 /* b2Distance.h */,
+				FA0B795A1A958EA3000E1D17 /* b2DynamicTree.cpp */,
+				FA0B795B1A958EA3000E1D17 /* b2DynamicTree.h */,
+				FA0B795C1A958EA3000E1D17 /* b2TimeOfImpact.cpp */,
+				FA0B795D1A958EA3000E1D17 /* b2TimeOfImpact.h */,
+				FA0B795E1A958EA3000E1D17 /* Shapes */,
+			);
+			path = Collision;
+			sourceTree = "<group>";
+		};
+		FA0B795E1A958EA3000E1D17 /* Shapes */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B795F1A958EA3000E1D17 /* b2ChainShape.cpp */,
+				FA0B79601A958EA3000E1D17 /* b2ChainShape.h */,
+				FA0B79611A958EA3000E1D17 /* b2CircleShape.cpp */,
+				FA0B79621A958EA3000E1D17 /* b2CircleShape.h */,
+				FA0B79631A958EA3000E1D17 /* b2EdgeShape.cpp */,
+				FA0B79641A958EA3000E1D17 /* b2EdgeShape.h */,
+				FA0B79651A958EA3000E1D17 /* b2PolygonShape.cpp */,
+				FA0B79661A958EA3000E1D17 /* b2PolygonShape.h */,
+				FA0B79671A958EA3000E1D17 /* b2Shape.h */,
+			);
+			path = Shapes;
+			sourceTree = "<group>";
+		};
+		FA0B79681A958EA3000E1D17 /* Common */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B79691A958EA3000E1D17 /* b2BlockAllocator.cpp */,
+				FA0B796A1A958EA3000E1D17 /* b2BlockAllocator.h */,
+				FA0B796B1A958EA3000E1D17 /* b2Draw.cpp */,
+				FA0B796C1A958EA3000E1D17 /* b2Draw.h */,
+				FA0B796D1A958EA3000E1D17 /* b2GrowableStack.h */,
+				FA0B796E1A958EA3000E1D17 /* b2Math.cpp */,
+				FA0B796F1A958EA3000E1D17 /* b2Math.h */,
+				FA0B79701A958EA3000E1D17 /* b2Settings.cpp */,
+				FA0B79711A958EA3000E1D17 /* b2Settings.h */,
+				FA0B79721A958EA3000E1D17 /* b2StackAllocator.cpp */,
+				FA0B79731A958EA3000E1D17 /* b2StackAllocator.h */,
+				FA0B79741A958EA3000E1D17 /* b2Timer.cpp */,
+				FA0B79751A958EA3000E1D17 /* b2Timer.h */,
+			);
+			path = Common;
+			sourceTree = "<group>";
+		};
+		FA0B79761A958EA3000E1D17 /* Dynamics */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B79771A958EA3000E1D17 /* b2Body.cpp */,
+				FA0B79781A958EA3000E1D17 /* b2Body.h */,
+				FA0B79791A958EA3000E1D17 /* b2ContactManager.cpp */,
+				FA0B797A1A958EA3000E1D17 /* b2ContactManager.h */,
+				FA0B797B1A958EA3000E1D17 /* b2Fixture.cpp */,
+				FA0B797C1A958EA3000E1D17 /* b2Fixture.h */,
+				FA0B797D1A958EA3000E1D17 /* b2Island.cpp */,
+				FA0B797E1A958EA3000E1D17 /* b2Island.h */,
+				FA0B797F1A958EA3000E1D17 /* b2TimeStep.h */,
+				FA0B79801A958EA3000E1D17 /* b2World.cpp */,
+				FA0B79811A958EA3000E1D17 /* b2World.h */,
+				FA0B79821A958EA3000E1D17 /* b2WorldCallbacks.cpp */,
+				FA0B79831A958EA3000E1D17 /* b2WorldCallbacks.h */,
+				FA0B79841A958EA3000E1D17 /* Contacts */,
+				FA0B79971A958EA3000E1D17 /* Joints */,
+			);
+			path = Dynamics;
+			sourceTree = "<group>";
+		};
+		FA0B79841A958EA3000E1D17 /* Contacts */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B79851A958EA3000E1D17 /* b2ChainAndCircleContact.cpp */,
+				FA0B79861A958EA3000E1D17 /* b2ChainAndCircleContact.h */,
+				FA0B79871A958EA3000E1D17 /* b2ChainAndPolygonContact.cpp */,
+				FA0B79881A958EA3000E1D17 /* b2ChainAndPolygonContact.h */,
+				FA0B79891A958EA3000E1D17 /* b2CircleContact.cpp */,
+				FA0B798A1A958EA3000E1D17 /* b2CircleContact.h */,
+				FA0B798B1A958EA3000E1D17 /* b2Contact.cpp */,
+				FA0B798C1A958EA3000E1D17 /* b2Contact.h */,
+				FA0B798D1A958EA3000E1D17 /* b2ContactSolver.cpp */,
+				FA0B798E1A958EA3000E1D17 /* b2ContactSolver.h */,
+				FA0B798F1A958EA3000E1D17 /* b2EdgeAndCircleContact.cpp */,
+				FA0B79901A958EA3000E1D17 /* b2EdgeAndCircleContact.h */,
+				FA0B79911A958EA3000E1D17 /* b2EdgeAndPolygonContact.cpp */,
+				FA0B79921A958EA3000E1D17 /* b2EdgeAndPolygonContact.h */,
+				FA0B79931A958EA3000E1D17 /* b2PolygonAndCircleContact.cpp */,
+				FA0B79941A958EA3000E1D17 /* b2PolygonAndCircleContact.h */,
+				FA0B79951A958EA3000E1D17 /* b2PolygonContact.cpp */,
+				FA0B79961A958EA3000E1D17 /* b2PolygonContact.h */,
+			);
+			path = Contacts;
+			sourceTree = "<group>";
+		};
+		FA0B79971A958EA3000E1D17 /* Joints */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B79981A958EA3000E1D17 /* b2DistanceJoint.cpp */,
+				FA0B79991A958EA3000E1D17 /* b2DistanceJoint.h */,
+				FA0B799A1A958EA3000E1D17 /* b2FrictionJoint.cpp */,
+				FA0B799B1A958EA3000E1D17 /* b2FrictionJoint.h */,
+				FA0B799C1A958EA3000E1D17 /* b2GearJoint.cpp */,
+				FA0B799D1A958EA3000E1D17 /* b2GearJoint.h */,
+				FA0B799E1A958EA3000E1D17 /* b2Joint.cpp */,
+				FA0B799F1A958EA3000E1D17 /* b2Joint.h */,
+				FA0B79A01A958EA3000E1D17 /* b2MotorJoint.cpp */,
+				FA0B79A11A958EA3000E1D17 /* b2MotorJoint.h */,
+				FA0B79A21A958EA3000E1D17 /* b2MouseJoint.cpp */,
+				FA0B79A31A958EA3000E1D17 /* b2MouseJoint.h */,
+				FA0B79A41A958EA3000E1D17 /* b2PrismaticJoint.cpp */,
+				FA0B79A51A958EA3000E1D17 /* b2PrismaticJoint.h */,
+				FA0B79A61A958EA3000E1D17 /* b2PulleyJoint.cpp */,
+				FA0B79A71A958EA3000E1D17 /* b2PulleyJoint.h */,
+				FA0B79A81A958EA3000E1D17 /* b2RevoluteJoint.cpp */,
+				FA0B79A91A958EA3000E1D17 /* b2RevoluteJoint.h */,
+				FA0B79AA1A958EA3000E1D17 /* b2RopeJoint.cpp */,
+				FA0B79AB1A958EA3000E1D17 /* b2RopeJoint.h */,
+				FA0B79AC1A958EA3000E1D17 /* b2WeldJoint.cpp */,
+				FA0B79AD1A958EA3000E1D17 /* b2WeldJoint.h */,
+				FA0B79AE1A958EA3000E1D17 /* b2WheelJoint.cpp */,
+				FA0B79AF1A958EA3000E1D17 /* b2WheelJoint.h */,
+			);
+			path = Joints;
+			sourceTree = "<group>";
+		};
+		FA0B79B11A958EA3000E1D17 /* Rope */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B79B21A958EA3000E1D17 /* b2Rope.cpp */,
+				FA0B79B31A958EA3000E1D17 /* b2Rope.h */,
+			);
+			path = Rope;
+			sourceTree = "<group>";
+		};
+		FA0B79B41A958EA3000E1D17 /* ddsparse */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B79B51A958EA3000E1D17 /* ddsinfo.h */,
+				FA0B79B61A958EA3000E1D17 /* ddsparse.cpp */,
+				FA0B79B71A958EA3000E1D17 /* ddsparse.h */,
+			);
+			path = ddsparse;
+			sourceTree = "<group>";
+		};
+		FA0B79B81A958EA3000E1D17 /* enet */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B79B91A958EA3000E1D17 /* enet.cpp */,
+				FA0B79BA1A958EA3000E1D17 /* libenet */,
+				FA0B79D21A958EA3000E1D17 /* lua-enet.h */,
+			);
+			path = enet;
+			sourceTree = "<group>";
+		};
+		FA0B79BA1A958EA3000E1D17 /* libenet */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B79BB1A958EA3000E1D17 /* callbacks.c */,
+				FA0B79BD1A958EA3000E1D17 /* compress.c */,
+				FA0B79BE1A958EA3000E1D17 /* host.c */,
+				FA0B79BF1A958EA3000E1D17 /* include */,
+				FA0B79CB1A958EA3000E1D17 /* list.c */,
+				FA0B79CC1A958EA3000E1D17 /* packet.c */,
+				FA0B79CD1A958EA3000E1D17 /* peer.c */,
+				FA0B79CE1A958EA3000E1D17 /* protocol.c */,
+				FA0B79D01A958EA3000E1D17 /* unix.c */,
+				FA0B79D11A958EA3000E1D17 /* win32.c */,
+			);
+			path = libenet;
+			sourceTree = "<group>";
+		};
+		FA0B79BF1A958EA3000E1D17 /* include */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B79C01A958EA3000E1D17 /* enet */,
+			);
+			path = include;
+			sourceTree = "<group>";
+		};
+		FA0B79C01A958EA3000E1D17 /* enet */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B79C11A958EA3000E1D17 /* callbacks.h */,
+				FA0B79C21A958EA3000E1D17 /* enet.h */,
+				FA0B79C31A958EA3000E1D17 /* list.h */,
+				FA0B79C41A958EA3000E1D17 /* protocol.h */,
+				FA0B79C51A958EA3000E1D17 /* time.h */,
+				FA0B79C61A958EA3000E1D17 /* types.h */,
+				FA0B79C71A958EA3000E1D17 /* unix.h */,
+				FA0B79C81A958EA3000E1D17 /* utility.h */,
+				FA0B79C91A958EA3000E1D17 /* win32.h */,
+			);
+			path = enet;
+			sourceTree = "<group>";
+		};
+		FA0B79D31A958EA3000E1D17 /* glad */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B79D41A958EA3000E1D17 /* glad.cpp */,
+				FA0B79D61A958EA3000E1D17 /* glad.hpp */,
+				FA0B79D71A958EA3000E1D17 /* gladfuncs.hpp */,
+			);
+			path = glad;
+			sourceTree = "<group>";
+		};
+		FA0B79D81A958EA3000E1D17 /* lodepng */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B79D91A958EA3000E1D17 /* lodepng.cpp */,
+				FA0B79DA1A958EA3000E1D17 /* lodepng.h */,
+			);
+			path = lodepng;
+			sourceTree = "<group>";
+		};
+		FA0B79DB1A958EA3000E1D17 /* luasocket */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B79DC1A958EA3000E1D17 /* libluasocket */,
+				FA0B7A0E1A958EA3000E1D17 /* luasocket.cpp */,
+				FA0B7A0F1A958EA3000E1D17 /* luasocket.h */,
+			);
+			path = luasocket;
+			sourceTree = "<group>";
+		};
+		FA0B79DC1A958EA3000E1D17 /* libluasocket */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B79DD1A958EA3000E1D17 /* auxiliar.c */,
+				FA0B79DE1A958EA3000E1D17 /* auxiliar.h */,
+				FA0B79DF1A958EA3000E1D17 /* buffer.c */,
+				FA0B79E01A958EA3000E1D17 /* buffer.h */,
+				FA0B79E11A958EA3000E1D17 /* except.c */,
+				FA0B79E21A958EA3000E1D17 /* except.h */,
+				FA0B79E31A958EA3000E1D17 /* ftp.lua */,
+				FA0B79E41A958EA3000E1D17 /* ftp.lua.h */,
+				FA0B79E51A958EA3000E1D17 /* http.lua */,
+				FA0B79E61A958EA3000E1D17 /* http.lua.h */,
+				FA0B79E71A958EA3000E1D17 /* inet.c */,
+				FA0B79E81A958EA3000E1D17 /* inet.h */,
+				FA0B79E91A958EA3000E1D17 /* io.c */,
+				FA0B79EA1A958EA3000E1D17 /* io.h */,
+				FA0B79EB1A958EA3000E1D17 /* ltn12.lua */,
+				FA0B79EC1A958EA3000E1D17 /* ltn12.lua.h */,
+				FA0B79ED1A958EA3000E1D17 /* lua.h */,
+				FA0B79EE1A958EA3000E1D17 /* luasocket.c */,
+				FA0B79EF1A958EA3000E1D17 /* luasocket.h */,
+				FA0B79F01A958EA3000E1D17 /* mime.c */,
+				FA0B79F11A958EA3000E1D17 /* mime.h */,
+				FA0B79F21A958EA3000E1D17 /* mime.lua */,
+				FA0B79F31A958EA3000E1D17 /* mime.lua.h */,
+				FA0B79F41A958EA3000E1D17 /* options.c */,
+				FA0B79F51A958EA3000E1D17 /* options.h */,
+				FA0B79F61A958EA3000E1D17 /* pre.lua */,
+				FA0B79F71A958EA3000E1D17 /* select.c */,
+				FA0B79F81A958EA3000E1D17 /* select.h */,
+				FA0B79F91A958EA3000E1D17 /* smtp.lua */,
+				FA0B79FA1A958EA3000E1D17 /* smtp.lua.h */,
+				FA0B79FB1A958EA3000E1D17 /* socket.h */,
+				FA0B79FC1A958EA3000E1D17 /* socket.lua */,
+				FA0B79FD1A958EA3000E1D17 /* socket.lua.h */,
+				FA0B79FE1A958EA3000E1D17 /* tcp.c */,
+				FA0B79FF1A958EA3000E1D17 /* tcp.h */,
+				FA0B7A001A958EA3000E1D17 /* timeout.c */,
+				FA0B7A011A958EA3000E1D17 /* timeout.h */,
+				FA0B7A021A958EA3000E1D17 /* tp.lua */,
+				FA0B7A031A958EA3000E1D17 /* tp.lua.h */,
+				FA0B7A041A958EA3000E1D17 /* udp.c */,
+				FA0B7A051A958EA3000E1D17 /* udp.h */,
+				FA0B7A061A958EA3000E1D17 /* unix.c */,
+				FA0B7A071A958EA3000E1D17 /* unix.h */,
+				FA0B7A081A958EA3000E1D17 /* url.lua */,
+				FA0B7A091A958EA3000E1D17 /* url.lua.h */,
+				FA0B7A0A1A958EA3000E1D17 /* usocket.c */,
+				FA0B7A0B1A958EA3000E1D17 /* usocket.h */,
+			);
+			path = libluasocket;
+			sourceTree = "<group>";
+		};
+		FA0B7A101A958EA3000E1D17 /* luautf8 */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7A111A958EA3000E1D17 /* lprefix.h */,
+				FA0B7A121A958EA3000E1D17 /* lutf8lib.c */,
+				FA0B7A131A958EA3000E1D17 /* lutf8lib.h */,
+			);
+			path = luautf8;
+			sourceTree = "<group>";
+		};
+		FA0B7A141A958EA3000E1D17 /* noise1234 */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7A151A958EA3000E1D17 /* simplexnoise1234.cpp */,
+				FA0B7A161A958EA3000E1D17 /* simplexnoise1234.h */,
+			);
+			path = noise1234;
+			sourceTree = "<group>";
+		};
+		FA0B7A171A958EA3000E1D17 /* stb */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7A181A958EA3000E1D17 /* stb_image.h */,
+			);
+			path = stb;
+			sourceTree = "<group>";
+		};
+		FA0B7A191A958EA3000E1D17 /* utf8 */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7A1A1A958EA3000E1D17 /* utf8 */,
+				FA0B7A1E1A958EA3000E1D17 /* utf8.h */,
+			);
+			path = utf8;
+			sourceTree = "<group>";
+		};
+		FA0B7A1A1A958EA3000E1D17 /* utf8 */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7A1B1A958EA3000E1D17 /* checked.h */,
+				FA0B7A1C1A958EA3000E1D17 /* core.h */,
+				FA0B7A1D1A958EA3000E1D17 /* unchecked.h */,
+			);
+			path = utf8;
+			sourceTree = "<group>";
+		};
+		FA0B7A1F1A958EA3000E1D17 /* Wuff */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7A201A958EA3000E1D17 /* wuff.c */,
+				FA0B7A211A958EA3000E1D17 /* wuff.h */,
+				FA0B7A221A958EA3000E1D17 /* wuff_config.h */,
+				FA0B7A231A958EA3000E1D17 /* wuff_convert.c */,
+				FA0B7A241A958EA3000E1D17 /* wuff_convert.h */,
+				FA0B7A251A958EA3000E1D17 /* wuff_internal.c */,
+				FA0B7A261A958EA3000E1D17 /* wuff_internal.h */,
+				FA0B7A271A958EA3000E1D17 /* wuff_memory.c */,
+			);
+			path = Wuff;
+			sourceTree = "<group>";
+		};
+		FA0B7B3C1A95902C000E1D17 /* modules */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7B3D1A95902C000E1D17 /* audio */,
+				FA0B7B521A95902C000E1D17 /* event */,
+				FA0B7B5A1A95902C000E1D17 /* filesystem */,
+				FA0B7B701A95902C000E1D17 /* font */,
+				FA0B7B871A95902C000E1D17 /* graphics */,
+				FA0B7BC21A95902C000E1D17 /* image */,
+				FA0B7BE81A95902C000E1D17 /* joystick */,
+				FA0B7BF51A95902C000E1D17 /* keyboard */,
+				FA0B7BFD1A95902C000E1D17 /* love */,
+				FA0B7C001A95902C000E1D17 /* math */,
+				FA0B7C0D1A95902C000E1D17 /* mouse */,
+				FA0B7C1B1A95902C000E1D17 /* physics */,
+				FA0B7C7B1A95902C000E1D17 /* sound */,
+				FA0B7C9A1A95902C000E1D17 /* system */,
+				FA0B7CA21A95902C000E1D17 /* thread */,
+				FA0B7CB71A95902C000E1D17 /* timer */,
+				FA0B7CBE1A95902C000E1D17 /* touch */,
+				FA0B7CC51A95902C000E1D17 /* window */,
+			);
+			name = modules;
+			path = ../../src/modules;
+			sourceTree = "<group>";
+		};
+		FA0B7B3D1A95902C000E1D17 /* audio */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7B3E1A95902C000E1D17 /* Audio.cpp */,
+				FA0B7B3F1A95902C000E1D17 /* Audio.h */,
+				FA0B7B401A95902C000E1D17 /* null */,
+				FA0B7B451A95902C000E1D17 /* openal */,
+				FA0B7B4C1A95902C000E1D17 /* Source.cpp */,
+				FA0B7B4D1A95902C000E1D17 /* Source.h */,
+				FA0B7B4E1A95902C000E1D17 /* wrap_Audio.cpp */,
+				FA0B7B4F1A95902C000E1D17 /* wrap_Audio.h */,
+				FA0B7B501A95902C000E1D17 /* wrap_Source.cpp */,
+				FA0B7B511A95902C000E1D17 /* wrap_Source.h */,
+			);
+			path = audio;
+			sourceTree = "<group>";
+		};
+		FA0B7B401A95902C000E1D17 /* null */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7B411A95902C000E1D17 /* Audio.cpp */,
+				FA0B7B421A95902C000E1D17 /* Audio.h */,
+				FA0B7B431A95902C000E1D17 /* Source.cpp */,
+				FA0B7B441A95902C000E1D17 /* Source.h */,
+			);
+			path = null;
+			sourceTree = "<group>";
+		};
+		FA0B7B451A95902C000E1D17 /* openal */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7B461A95902C000E1D17 /* Audio.cpp */,
+				FA0B7B471A95902C000E1D17 /* Audio.h */,
+				FA0B7B481A95902C000E1D17 /* Pool.cpp */,
+				FA0B7B491A95902C000E1D17 /* Pool.h */,
+				FA0B7B4A1A95902C000E1D17 /* Source.cpp */,
+				FA0B7B4B1A95902C000E1D17 /* Source.h */,
+			);
+			path = openal;
+			sourceTree = "<group>";
+		};
+		FA0B7B521A95902C000E1D17 /* event */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7B531A95902C000E1D17 /* Event.cpp */,
+				FA0B7B541A95902C000E1D17 /* Event.h */,
+				FA0B7B551A95902C000E1D17 /* sdl */,
+				FA8951A01AA2EDF300EC385A /* wrap_Event.cpp */,
+				FA8951A11AA2EDF300EC385A /* wrap_Event.h */,
+			);
+			path = event;
+			sourceTree = "<group>";
+		};
+		FA0B7B551A95902C000E1D17 /* sdl */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7B561A95902C000E1D17 /* Event.cpp */,
+				FA0B7B571A95902C000E1D17 /* Event.h */,
+			);
+			path = sdl;
+			sourceTree = "<group>";
+		};
+		FA0B7B5A1A95902C000E1D17 /* filesystem */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7B5B1A95902C000E1D17 /* DroppedFile.cpp */,
+				FA0B7B5C1A95902C000E1D17 /* DroppedFile.h */,
+				FA0B7B5D1A95902C000E1D17 /* File.cpp */,
+				FA0B7B5E1A95902C000E1D17 /* File.h */,
+				FA0B7B5F1A95902C000E1D17 /* FileData.cpp */,
+				FA0B7B601A95902C000E1D17 /* FileData.h */,
+				FA0B7B611A95902C000E1D17 /* Filesystem.cpp */,
+				FA0B7B621A95902C000E1D17 /* Filesystem.h */,
+				FA0B7B631A95902C000E1D17 /* physfs */,
+				FA0B7B681A95902C000E1D17 /* wrap_DroppedFile.cpp */,
+				FA0B7B691A95902C000E1D17 /* wrap_DroppedFile.h */,
+				FA0B7B6A1A95902C000E1D17 /* wrap_File.cpp */,
+				FA0B7B6B1A95902C000E1D17 /* wrap_File.h */,
+				FA0B7B6C1A95902C000E1D17 /* wrap_FileData.cpp */,
+				FA0B7B6D1A95902C000E1D17 /* wrap_FileData.h */,
+				FA0B7B6E1A95902C000E1D17 /* wrap_Filesystem.cpp */,
+				FA0B7B6F1A95902C000E1D17 /* wrap_Filesystem.h */,
+			);
+			path = filesystem;
+			sourceTree = "<group>";
+		};
+		FA0B7B631A95902C000E1D17 /* physfs */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7B641A95902C000E1D17 /* File.cpp */,
+				FA0B7B651A95902C000E1D17 /* File.h */,
+				FA0B7B661A95902C000E1D17 /* Filesystem.cpp */,
+				FA0B7B671A95902C000E1D17 /* Filesystem.h */,
+			);
+			path = physfs;
+			sourceTree = "<group>";
+		};
+		FA0B7B701A95902C000E1D17 /* font */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7B711A95902C000E1D17 /* BMFontRasterizer.cpp */,
+				FA0B7B721A95902C000E1D17 /* BMFontRasterizer.h */,
+				FA0B7B731A95902C000E1D17 /* Font.cpp */,
+				FA0B7B741A95902C000E1D17 /* Font.h */,
+				FA0B7B751A95902C000E1D17 /* freetype */,
+				FA0B7B7A1A95902C000E1D17 /* GlyphData.cpp */,
+				FA0B7B7B1A95902C000E1D17 /* GlyphData.h */,
+				FA0B7B7C1A95902C000E1D17 /* ImageRasterizer.cpp */,
+				FA0B7B7D1A95902C000E1D17 /* ImageRasterizer.h */,
+				FA0B7B7E1A95902C000E1D17 /* Rasterizer.cpp */,
+				FA0B7B7F1A95902C000E1D17 /* Rasterizer.h */,
+				FA0B7B801A95902C000E1D17 /* Vera.ttf.h */,
+				FA0B7B811A95902C000E1D17 /* wrap_Font.cpp */,
+				FA0B7B821A95902C000E1D17 /* wrap_Font.h */,
+				FA0B7B831A95902C000E1D17 /* wrap_GlyphData.cpp */,
+				FA0B7B841A95902C000E1D17 /* wrap_GlyphData.h */,
+				FA0B7B851A95902C000E1D17 /* wrap_Rasterizer.cpp */,
+				FA0B7B861A95902C000E1D17 /* wrap_Rasterizer.h */,
+			);
+			path = font;
+			sourceTree = "<group>";
+		};
+		FA0B7B751A95902C000E1D17 /* freetype */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7B761A95902C000E1D17 /* Font.cpp */,
+				FA0B7B771A95902C000E1D17 /* Font.h */,
+				FA0B7B781A95902C000E1D17 /* TrueTypeRasterizer.cpp */,
+				FA0B7B791A95902C000E1D17 /* TrueTypeRasterizer.h */,
+			);
+			path = freetype;
+			sourceTree = "<group>";
+		};
+		FA0B7B871A95902C000E1D17 /* graphics */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7B881A95902C000E1D17 /* Color.h */,
+				FA0B7B891A95902C000E1D17 /* Drawable.h */,
+				FA0B7B8A1A95902C000E1D17 /* Graphics.cpp */,
+				FA0B7B8B1A95902C000E1D17 /* Graphics.h */,
+				FA0B7B8C1A95902C000E1D17 /* opengl */,
+				FA0B7BBC1A95902C000E1D17 /* Quad.cpp */,
+				FA0B7BBD1A95902C000E1D17 /* Quad.h */,
+				FA0B7BBE1A95902C000E1D17 /* Texture.cpp */,
+				FA0B7BBF1A95902C000E1D17 /* Texture.h */,
+				FA0B7BC01A95902C000E1D17 /* Volatile.cpp */,
+				FA0B7BC11A95902C000E1D17 /* Volatile.h */,
+				FA620A2E1AA2F8DB005DB4C2 /* wrap_Quad.cpp */,
+				FA620A2F1AA2F8DB005DB4C2 /* wrap_Quad.h */,
+				FA620A301AA2F8DB005DB4C2 /* wrap_Texture.cpp */,
+				FA620A311AA2F8DB005DB4C2 /* wrap_Texture.h */,
+			);
+			path = graphics;
+			sourceTree = "<group>";
+		};
+		FA0B7B8C1A95902C000E1D17 /* opengl */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7B8D1A95902C000E1D17 /* Canvas.cpp */,
+				FA0B7B8E1A95902C000E1D17 /* Canvas.h */,
+				FA0B7B8F1A95902C000E1D17 /* Font.cpp */,
+				FA0B7B901A95902C000E1D17 /* Font.h */,
+				FA0B7B911A95902C000E1D17 /* Graphics.cpp */,
+				FA0B7B921A95902C000E1D17 /* Graphics.h */,
+				FA0B7B931A95902C000E1D17 /* Image.cpp */,
+				FA0B7B941A95902C000E1D17 /* Image.h */,
+				FA0B7B951A95902C000E1D17 /* Mesh.cpp */,
+				FA0B7B961A95902C000E1D17 /* Mesh.h */,
+				FA0B7B971A95902C000E1D17 /* OpenGL.cpp */,
+				FA0B7B981A95902C000E1D17 /* OpenGL.h */,
+				FA0B7B991A95902C000E1D17 /* ParticleSystem.cpp */,
+				FA0B7B9A1A95902C000E1D17 /* ParticleSystem.h */,
+				FA0B7B9B1A95902C000E1D17 /* Polyline.cpp */,
+				FA0B7B9C1A95902C000E1D17 /* Polyline.h */,
+				FA0B7B9D1A95902C000E1D17 /* Shader.cpp */,
+				FA0B7B9E1A95902C000E1D17 /* Shader.h */,
+				FA0B7B9F1A95902C000E1D17 /* SpriteBatch.cpp */,
+				FA0B7BA01A95902C000E1D17 /* SpriteBatch.h */,
+				FA0B7BA11A95902C000E1D17 /* Text.cpp */,
+				FA0B7BA21A95902C000E1D17 /* Text.h */,
+				FA0B7BA41A95902C000E1D17 /* VertexBuffer.cpp */,
+				FA0B7BA51A95902C000E1D17 /* VertexBuffer.h */,
+				FA0B7BA61A95902C000E1D17 /* wrap_Canvas.cpp */,
+				FA0B7BA71A95902C000E1D17 /* wrap_Canvas.h */,
+				FA0B7BA81A95902C000E1D17 /* wrap_Font.cpp */,
+				FA0B7BA91A95902C000E1D17 /* wrap_Font.h */,
+				FA0B7BAA1A95902C000E1D17 /* wrap_Graphics.cpp */,
+				FA0B7BAB1A95902C000E1D17 /* wrap_Graphics.h */,
+				FA0B7BAC1A95902C000E1D17 /* wrap_Image.cpp */,
+				FA0B7BAD1A95902C000E1D17 /* wrap_Image.h */,
+				FA0B7BAE1A95902C000E1D17 /* wrap_Mesh.cpp */,
+				FA0B7BAF1A95902C000E1D17 /* wrap_Mesh.h */,
+				FA0B7BB01A95902C000E1D17 /* wrap_ParticleSystem.cpp */,
+				FA0B7BB11A95902C000E1D17 /* wrap_ParticleSystem.h */,
+				FA0B7BB41A95902C000E1D17 /* wrap_Shader.cpp */,
+				FA0B7BB51A95902C000E1D17 /* wrap_Shader.h */,
+				FA0B7BB61A95902C000E1D17 /* wrap_SpriteBatch.cpp */,
+				FA0B7BB71A95902C000E1D17 /* wrap_SpriteBatch.h */,
+				FA0B7BB81A95902C000E1D17 /* wrap_Text.cpp */,
+				FA0B7BB91A95902C000E1D17 /* wrap_Text.h */,
+			);
+			path = opengl;
+			sourceTree = "<group>";
+		};
+		FA0B7BC21A95902C000E1D17 /* image */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7BC31A95902C000E1D17 /* CompressedData.cpp */,
+				FA0B7BC41A95902C000E1D17 /* CompressedData.h */,
+				FA0B7BC51A95902C000E1D17 /* Image.h */,
+				FA0B7BC61A95902C000E1D17 /* ImageData.cpp */,
+				FA0B7BC71A95902C000E1D17 /* ImageData.h */,
+				FA0B7BC81A95902C000E1D17 /* magpie */,
+				FA0B7BE21A95902C000E1D17 /* wrap_CompressedData.cpp */,
+				FA0B7BE31A95902C000E1D17 /* wrap_CompressedData.h */,
+				FA0B7BE41A95902C000E1D17 /* wrap_Image.cpp */,
+				FA0B7BE51A95902C000E1D17 /* wrap_Image.h */,
+				FA0B7BE61A95902C000E1D17 /* wrap_ImageData.cpp */,
+				FA0B7BE71A95902C000E1D17 /* wrap_ImageData.h */,
+			);
+			path = image;
+			sourceTree = "<group>";
+		};
+		FA0B7BC81A95902C000E1D17 /* magpie */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7BC91A95902C000E1D17 /* CompressedData.cpp */,
+				FA0B7BCA1A95902C000E1D17 /* CompressedData.h */,
+				FA0B7BCB1A95902C000E1D17 /* CompressedFormatHandler.h */,
+				FA0B7BCC1A95902C000E1D17 /* ddsHandler.cpp */,
+				FA0B7BCD1A95902C000E1D17 /* ddsHandler.h */,
+				FA0B7BCE1A95902C000E1D17 /* FormatHandler.cpp */,
+				FA0B7BCF1A95902C000E1D17 /* FormatHandler.h */,
+				FA0B7BD01A95902C000E1D17 /* Image.cpp */,
+				FA0B7BD11A95902C000E1D17 /* Image.h */,
+				FA0B7BD21A95902C000E1D17 /* ImageData.cpp */,
+				FA0B7BD31A95902C000E1D17 /* ImageData.h */,
+				FA0B7BD41A95902C000E1D17 /* ImageIOHandler.cpp */,
+				FA0B7BD51A95902C000E1D17 /* ImageIOHandler.h */,
+				FA0B7BD61A95902C000E1D17 /* JPEGHandler.cpp */,
+				FA0B7BD71A95902C000E1D17 /* JPEGHandler.h */,
+				FA0B7BD81A95902C000E1D17 /* KTXHandler.cpp */,
+				FA0B7BD91A95902C000E1D17 /* KTXHandler.h */,
+				FA0B7BDA1A95902C000E1D17 /* PKMHandler.cpp */,
+				FA0B7BDB1A95902C000E1D17 /* PKMHandler.h */,
+				FA0B7BDC1A95902C000E1D17 /* PNGHandler.cpp */,
+				FA0B7BDD1A95902C000E1D17 /* PNGHandler.h */,
+				FA0B7BDE1A95902C000E1D17 /* PVRHandler.cpp */,
+				FA0B7BDF1A95902C000E1D17 /* PVRHandler.h */,
+				FA0B7BE01A95902C000E1D17 /* STBHandler.cpp */,
+				FA0B7BE11A95902C000E1D17 /* STBHandler.h */,
+			);
+			path = magpie;
+			sourceTree = "<group>";
+		};
+		FA0B7BE81A95902C000E1D17 /* joystick */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7BE91A95902C000E1D17 /* Joystick.cpp */,
+				FA0B7BEA1A95902C000E1D17 /* Joystick.h */,
+				FA0B7BEB1A95902C000E1D17 /* JoystickModule.h */,
+				FA0B7BEC1A95902C000E1D17 /* sdl */,
+				FA0B7BF11A95902C000E1D17 /* wrap_Joystick.cpp */,
+				FA0B7BF21A95902C000E1D17 /* wrap_Joystick.h */,
+				FA0B7BF31A95902C000E1D17 /* wrap_JoystickModule.cpp */,
+				FA0B7BF41A95902C000E1D17 /* wrap_JoystickModule.h */,
+			);
+			path = joystick;
+			sourceTree = "<group>";
+		};
+		FA0B7BEC1A95902C000E1D17 /* sdl */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7BED1A95902C000E1D17 /* Joystick.cpp */,
+				FA0B7BEE1A95902C000E1D17 /* Joystick.h */,
+				FA0B7BEF1A95902C000E1D17 /* JoystickModule.cpp */,
+				FA0B7BF01A95902C000E1D17 /* JoystickModule.h */,
+			);
+			path = sdl;
+			sourceTree = "<group>";
+		};
+		FA0B7BF51A95902C000E1D17 /* keyboard */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7BF61A95902C000E1D17 /* Keyboard.cpp */,
+				FA0B7BF71A95902C000E1D17 /* Keyboard.h */,
+				FA0B7BF81A95902C000E1D17 /* sdl */,
+				FA0B7BFB1A95902C000E1D17 /* wrap_Keyboard.cpp */,
+				FA0B7BFC1A95902C000E1D17 /* wrap_Keyboard.h */,
+			);
+			path = keyboard;
+			sourceTree = "<group>";
+		};
+		FA0B7BF81A95902C000E1D17 /* sdl */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7BF91A95902C000E1D17 /* Keyboard.cpp */,
+				FA0B7BFA1A95902C000E1D17 /* Keyboard.h */,
+			);
+			path = sdl;
+			sourceTree = "<group>";
+		};
+		FA0B7BFD1A95902C000E1D17 /* love */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7BFE1A95902C000E1D17 /* love.cpp */,
+				FA0B7BFF1A95902C000E1D17 /* love.h */,
+			);
+			path = love;
+			sourceTree = "<group>";
+		};
+		FA0B7C001A95902C000E1D17 /* math */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7C011A95902C000E1D17 /* BezierCurve.cpp */,
+				FA0B7C021A95902C000E1D17 /* BezierCurve.h */,
+				FA0B7C031A95902C000E1D17 /* MathModule.cpp */,
+				FA0B7C041A95902C000E1D17 /* MathModule.h */,
+				FA0B7C051A95902C000E1D17 /* RandomGenerator.cpp */,
+				FA0B7C061A95902C000E1D17 /* RandomGenerator.h */,
+				FA0B7C071A95902C000E1D17 /* wrap_BezierCurve.cpp */,
+				FA0B7C081A95902C000E1D17 /* wrap_BezierCurve.h */,
+				FA0B7C091A95902C000E1D17 /* wrap_Math.cpp */,
+				FA0B7C0A1A95902C000E1D17 /* wrap_Math.h */,
+				FA0B7C0B1A95902C000E1D17 /* wrap_RandomGenerator.cpp */,
+				FA0B7C0C1A95902C000E1D17 /* wrap_RandomGenerator.h */,
+			);
+			path = math;
+			sourceTree = "<group>";
+		};
+		FA0B7C0D1A95902C000E1D17 /* mouse */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7C0E1A95902C000E1D17 /* Cursor.cpp */,
+				FA0B7C0F1A95902C000E1D17 /* Cursor.h */,
+				FA0B7C101A95902C000E1D17 /* Mouse.cpp */,
+				FA0B7C111A95902C000E1D17 /* Mouse.h */,
+				FA0B7C121A95902C000E1D17 /* sdl */,
+				FA0B7C171A95902C000E1D17 /* wrap_Cursor.cpp */,
+				FA0B7C181A95902C000E1D17 /* wrap_Cursor.h */,
+				FA0B7C191A95902C000E1D17 /* wrap_Mouse.cpp */,
+				FA0B7C1A1A95902C000E1D17 /* wrap_Mouse.h */,
+			);
+			path = mouse;
+			sourceTree = "<group>";
+		};
+		FA0B7C121A95902C000E1D17 /* sdl */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7C131A95902C000E1D17 /* Cursor.cpp */,
+				FA0B7C141A95902C000E1D17 /* Cursor.h */,
+				FA0B7C151A95902C000E1D17 /* Mouse.cpp */,
+				FA0B7C161A95902C000E1D17 /* Mouse.h */,
+			);
+			path = sdl;
+			sourceTree = "<group>";
+		};
+		FA0B7C1B1A95902C000E1D17 /* physics */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7C1C1A95902C000E1D17 /* Body.cpp */,
+				FA0B7C1D1A95902C000E1D17 /* Body.h */,
+				FA0B7C1E1A95902C000E1D17 /* box2d */,
+				FA0B7C771A95902C000E1D17 /* Joint.cpp */,
+				FA0B7C781A95902C000E1D17 /* Joint.h */,
+				FA0B7C791A95902C000E1D17 /* Shape.cpp */,
+				FA0B7C7A1A95902C000E1D17 /* Shape.h */,
+			);
+			path = physics;
+			sourceTree = "<group>";
+		};
+		FA0B7C1E1A95902C000E1D17 /* box2d */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7C1F1A95902C000E1D17 /* Body.cpp */,
+				FA0B7C201A95902C000E1D17 /* Body.h */,
+				FA0B7C211A95902C000E1D17 /* ChainShape.cpp */,
+				FA0B7C221A95902C000E1D17 /* ChainShape.h */,
+				FA0B7C231A95902C000E1D17 /* CircleShape.cpp */,
+				FA0B7C241A95902C000E1D17 /* CircleShape.h */,
+				FA0B7C251A95902C000E1D17 /* Contact.cpp */,
+				FA0B7C261A95902C000E1D17 /* Contact.h */,
+				FA0B7C271A95902C000E1D17 /* DistanceJoint.cpp */,
+				FA0B7C281A95902C000E1D17 /* DistanceJoint.h */,
+				FA0B7C291A95902C000E1D17 /* EdgeShape.cpp */,
+				FA0B7C2A1A95902C000E1D17 /* EdgeShape.h */,
+				FA0B7C2B1A95902C000E1D17 /* Fixture.cpp */,
+				FA0B7C2C1A95902C000E1D17 /* Fixture.h */,
+				FA0B7C2D1A95902C000E1D17 /* FrictionJoint.cpp */,
+				FA0B7C2E1A95902C000E1D17 /* FrictionJoint.h */,
+				FA0B7C2F1A95902C000E1D17 /* GearJoint.cpp */,
+				FA0B7C301A95902C000E1D17 /* GearJoint.h */,
+				FA0B7C311A95902C000E1D17 /* Joint.cpp */,
+				FA0B7C321A95902C000E1D17 /* Joint.h */,
+				FA0B7C331A95902C000E1D17 /* MotorJoint.cpp */,
+				FA0B7C341A95902C000E1D17 /* MotorJoint.h */,
+				FA0B7C351A95902C000E1D17 /* MouseJoint.cpp */,
+				FA0B7C361A95902C000E1D17 /* MouseJoint.h */,
+				FA0B7C371A95902C000E1D17 /* Physics.cpp */,
+				FA0B7C381A95902C000E1D17 /* Physics.h */,
+				FA0B7C391A95902C000E1D17 /* PolygonShape.cpp */,
+				FA0B7C3A1A95902C000E1D17 /* PolygonShape.h */,
+				FA0B7C3B1A95902C000E1D17 /* PrismaticJoint.cpp */,
+				FA0B7C3C1A95902C000E1D17 /* PrismaticJoint.h */,
+				FA0B7C3D1A95902C000E1D17 /* PulleyJoint.cpp */,
+				FA0B7C3E1A95902C000E1D17 /* PulleyJoint.h */,
+				FA0B7C3F1A95902C000E1D17 /* RevoluteJoint.cpp */,
+				FA0B7C401A95902C000E1D17 /* RevoluteJoint.h */,
+				FA0B7C411A95902C000E1D17 /* RopeJoint.cpp */,
+				FA0B7C421A95902C000E1D17 /* RopeJoint.h */,
+				FA0B7C431A95902C000E1D17 /* Shape.cpp */,
+				FA0B7C441A95902C000E1D17 /* Shape.h */,
+				FA0B7C451A95902C000E1D17 /* WeldJoint.cpp */,
+				FA0B7C461A95902C000E1D17 /* WeldJoint.h */,
+				FA0B7C471A95902C000E1D17 /* WheelJoint.cpp */,
+				FA0B7C481A95902C000E1D17 /* WheelJoint.h */,
+				FA0B7C491A95902C000E1D17 /* World.cpp */,
+				FA0B7C4A1A95902C000E1D17 /* World.h */,
+				FA0B7C4B1A95902C000E1D17 /* wrap_Body.cpp */,
+				FA0B7C4C1A95902C000E1D17 /* wrap_Body.h */,
+				FA0B7C4D1A95902C000E1D17 /* wrap_ChainShape.cpp */,
+				FA0B7C4E1A95902C000E1D17 /* wrap_ChainShape.h */,
+				FA0B7C4F1A95902C000E1D17 /* wrap_CircleShape.cpp */,
+				FA0B7C501A95902C000E1D17 /* wrap_CircleShape.h */,
+				FA0B7C511A95902C000E1D17 /* wrap_Contact.cpp */,
+				FA0B7C521A95902C000E1D17 /* wrap_Contact.h */,
+				FA0B7C531A95902C000E1D17 /* wrap_DistanceJoint.cpp */,
+				FA0B7C541A95902C000E1D17 /* wrap_DistanceJoint.h */,
+				FA0B7C551A95902C000E1D17 /* wrap_EdgeShape.cpp */,
+				FA0B7C561A95902C000E1D17 /* wrap_EdgeShape.h */,
+				FA0B7C571A95902C000E1D17 /* wrap_Fixture.cpp */,
+				FA0B7C581A95902C000E1D17 /* wrap_Fixture.h */,
+				FA0B7C591A95902C000E1D17 /* wrap_FrictionJoint.cpp */,
+				FA0B7C5A1A95902C000E1D17 /* wrap_FrictionJoint.h */,
+				FA0B7C5B1A95902C000E1D17 /* wrap_GearJoint.cpp */,
+				FA0B7C5C1A95902C000E1D17 /* wrap_GearJoint.h */,
+				FA0B7C5D1A95902C000E1D17 /* wrap_Joint.cpp */,
+				FA0B7C5E1A95902C000E1D17 /* wrap_Joint.h */,
+				FA0B7C5F1A95902C000E1D17 /* wrap_MotorJoint.cpp */,
+				FA0B7C601A95902C000E1D17 /* wrap_MotorJoint.h */,
+				FA0B7C611A95902C000E1D17 /* wrap_MouseJoint.cpp */,
+				FA0B7C621A95902C000E1D17 /* wrap_MouseJoint.h */,
+				FA0B7C631A95902C000E1D17 /* wrap_Physics.cpp */,
+				FA0B7C641A95902C000E1D17 /* wrap_Physics.h */,
+				FA0B7C651A95902C000E1D17 /* wrap_PolygonShape.cpp */,
+				FA0B7C661A95902C000E1D17 /* wrap_PolygonShape.h */,
+				FA0B7C671A95902C000E1D17 /* wrap_PrismaticJoint.cpp */,
+				FA0B7C681A95902C000E1D17 /* wrap_PrismaticJoint.h */,
+				FA0B7C691A95902C000E1D17 /* wrap_PulleyJoint.cpp */,
+				FA0B7C6A1A95902C000E1D17 /* wrap_PulleyJoint.h */,
+				FA0B7C6B1A95902C000E1D17 /* wrap_RevoluteJoint.cpp */,
+				FA0B7C6C1A95902C000E1D17 /* wrap_RevoluteJoint.h */,
+				FA0B7C6D1A95902C000E1D17 /* wrap_RopeJoint.cpp */,
+				FA0B7C6E1A95902C000E1D17 /* wrap_RopeJoint.h */,
+				FA0B7C6F1A95902C000E1D17 /* wrap_Shape.cpp */,
+				FA0B7C701A95902C000E1D17 /* wrap_Shape.h */,
+				FA0B7C711A95902C000E1D17 /* wrap_WeldJoint.cpp */,
+				FA0B7C721A95902C000E1D17 /* wrap_WeldJoint.h */,
+				FA0B7C731A95902C000E1D17 /* wrap_WheelJoint.cpp */,
+				FA0B7C741A95902C000E1D17 /* wrap_WheelJoint.h */,
+				FA0B7C751A95902C000E1D17 /* wrap_World.cpp */,
+				FA0B7C761A95902C000E1D17 /* wrap_World.h */,
+			);
+			path = box2d;
+			sourceTree = "<group>";
+		};
+		FA0B7C7B1A95902C000E1D17 /* sound */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7C7C1A95902C000E1D17 /* Decoder.h */,
+				FA0B7C7D1A95902C000E1D17 /* lullaby */,
+				FA0B7C901A95902C000E1D17 /* Sound.cpp */,
+				FA0B7C911A95902C000E1D17 /* Sound.h */,
+				FA0B7C921A95902C000E1D17 /* SoundData.cpp */,
+				FA0B7C931A95902C000E1D17 /* SoundData.h */,
+				FA0B7C941A95902C000E1D17 /* wrap_Decoder.cpp */,
+				FA0B7C951A95902C000E1D17 /* wrap_Decoder.h */,
+				FA0B7C961A95902C000E1D17 /* wrap_Sound.cpp */,
+				FA0B7C971A95902C000E1D17 /* wrap_Sound.h */,
+				FA0B7C981A95902C000E1D17 /* wrap_SoundData.cpp */,
+				FA0B7C991A95902C000E1D17 /* wrap_SoundData.h */,
+			);
+			path = sound;
+			sourceTree = "<group>";
+		};
+		FA0B7C7D1A95902C000E1D17 /* lullaby */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7C7E1A95902C000E1D17 /* CoreAudioDecoder.cpp */,
+				FA0B7C7F1A95902C000E1D17 /* CoreAudioDecoder.h */,
+				FA0B7C801A95902C000E1D17 /* Decoder.cpp */,
+				FA0B7C811A95902C000E1D17 /* Decoder.h */,
+				FA0B7C821A95902C000E1D17 /* FLACDecoder.cpp */,
+				FA0B7C831A95902C000E1D17 /* FLACDecoder.h */,
+				FA0B7C841A95902C000E1D17 /* GmeDecoder.cpp */,
+				FA0B7C851A95902C000E1D17 /* GmeDecoder.h */,
+				FA0B7C861A95902C000E1D17 /* ModPlugDecoder.cpp */,
+				FA0B7C871A95902C000E1D17 /* ModPlugDecoder.h */,
+				FA0B7C881A95902C000E1D17 /* Mpg123Decoder.cpp */,
+				FA0B7C891A95902C000E1D17 /* Mpg123Decoder.h */,
+				FA0B7C8A1A95902C000E1D17 /* Sound.cpp */,
+				FA0B7C8B1A95902C000E1D17 /* Sound.h */,
+				FA0B7C8C1A95902C000E1D17 /* VorbisDecoder.cpp */,
+				FA0B7C8D1A95902C000E1D17 /* VorbisDecoder.h */,
+				FA0B7C8E1A95902C000E1D17 /* WaveDecoder.cpp */,
+				FA0B7C8F1A95902C000E1D17 /* WaveDecoder.h */,
+			);
+			path = lullaby;
+			sourceTree = "<group>";
+		};
+		FA0B7C9A1A95902C000E1D17 /* system */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7C9B1A95902C000E1D17 /* sdl */,
+				FA0B7C9E1A95902C000E1D17 /* System.cpp */,
+				FA0B7C9F1A95902C000E1D17 /* System.h */,
+				FA0B7CA01A95902C000E1D17 /* wrap_System.cpp */,
+				FA0B7CA11A95902C000E1D17 /* wrap_System.h */,
+			);
+			path = system;
+			sourceTree = "<group>";
+		};
+		FA0B7C9B1A95902C000E1D17 /* sdl */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7C9C1A95902C000E1D17 /* System.cpp */,
+				FA0B7C9D1A95902C000E1D17 /* System.h */,
+			);
+			path = sdl;
+			sourceTree = "<group>";
+		};
+		FA0B7CA21A95902C000E1D17 /* thread */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7CA31A95902C000E1D17 /* Channel.cpp */,
+				FA0B7CA41A95902C000E1D17 /* Channel.h */,
+				FA0B7CA51A95902C000E1D17 /* LuaThread.cpp */,
+				FA0B7CA61A95902C000E1D17 /* LuaThread.h */,
+				FA0B7CA71A95902C000E1D17 /* sdl */,
+				FA0B7CAC1A95902C000E1D17 /* Thread.h */,
+				FA0B7CAD1A95902C000E1D17 /* ThreadModule.cpp */,
+				FA0B7CAE1A95902C000E1D17 /* ThreadModule.h */,
+				FA0B7CAF1A95902C000E1D17 /* threads.cpp */,
+				FA0B7CB01A95902C000E1D17 /* threads.h */,
+				FA0B7CB11A95902C000E1D17 /* wrap_Channel.cpp */,
+				FA0B7CB21A95902C000E1D17 /* wrap_Channel.h */,
+				FA0B7CB31A95902C000E1D17 /* wrap_LuaThread.cpp */,
+				FA0B7CB41A95902C000E1D17 /* wrap_LuaThread.h */,
+				FA0B7CB51A95902C000E1D17 /* wrap_ThreadModule.cpp */,
+				FA0B7CB61A95902C000E1D17 /* wrap_ThreadModule.h */,
+			);
+			path = thread;
+			sourceTree = "<group>";
+		};
+		FA0B7CA71A95902C000E1D17 /* sdl */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7CA81A95902C000E1D17 /* Thread.cpp */,
+				FA0B7CA91A95902C000E1D17 /* Thread.h */,
+				FA0B7CAA1A95902C000E1D17 /* threads.cpp */,
+				FA0B7CAB1A95902C000E1D17 /* threads.h */,
+			);
+			path = sdl;
+			sourceTree = "<group>";
+		};
+		FA0B7CB71A95902C000E1D17 /* timer */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7CB81A95902C000E1D17 /* sdl */,
+				FA0B7CBB1A95902C000E1D17 /* Timer.h */,
+				FA0B7CBC1A95902C000E1D17 /* wrap_Timer.cpp */,
+				FA0B7CBD1A95902C000E1D17 /* wrap_Timer.h */,
+			);
+			path = timer;
+			sourceTree = "<group>";
+		};
+		FA0B7CB81A95902C000E1D17 /* sdl */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7CB91A95902C000E1D17 /* Timer.cpp */,
+				FA0B7CBA1A95902C000E1D17 /* Timer.h */,
+			);
+			path = sdl;
+			sourceTree = "<group>";
+		};
+		FA0B7CBE1A95902C000E1D17 /* touch */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7CBF1A95902C000E1D17 /* sdl */,
+				FA0B7CC21A95902C000E1D17 /* Touch.h */,
+				FA0B7CC31A95902C000E1D17 /* wrap_Touch.cpp */,
+				FA0B7CC41A95902C000E1D17 /* wrap_Touch.h */,
+			);
+			path = touch;
+			sourceTree = "<group>";
+		};
+		FA0B7CBF1A95902C000E1D17 /* sdl */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7CC01A95902C000E1D17 /* Touch.cpp */,
+				FA0B7CC11A95902C000E1D17 /* Touch.h */,
+			);
+			path = sdl;
+			sourceTree = "<group>";
+		};
+		FA0B7CC51A95902C000E1D17 /* window */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7CC61A95902C000E1D17 /* sdl */,
+				FA0B7CC91A95902C000E1D17 /* Window.cpp */,
+				FA0B7CCA1A95902C000E1D17 /* Window.h */,
+				FA0B7CCB1A95902C000E1D17 /* wrap_Window.cpp */,
+				FA0B7CCC1A95902C000E1D17 /* wrap_Window.h */,
+			);
+			path = window;
+			sourceTree = "<group>";
+		};
+		FA0B7CC61A95902C000E1D17 /* sdl */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7CC71A95902C000E1D17 /* Window.cpp */,
+				FA0B7CC81A95902C000E1D17 /* Window.h */,
+			);
+			path = sdl;
+			sourceTree = "<group>";
+		};
+		FA0B7EEB1A959125000E1D17 /* macosx */ = {
+			isa = PBXGroup;
+			children = (
+				FA577A7916C71A1700860150 /* Cocoa.framework */,
+				FAA627CD18E7E1560080752D /* CoreServices.framework */,
+				FA577A6716C719D900860150 /* FreeType.framework */,
+				FA48E43818F10D6C007CF0BD /* jpeg-turbo.framework */,
+				FA577A8216C71A5300860150 /* libmodplug.framework */,
+				FA317EB918F28B6D00B0BCD7 /* libz.dylib */,
+				FA577A6D16C719EA00860150 /* Lua.framework */,
+				FA577A6F16C719F000860150 /* mpg123.framework */,
+				FA577A7116C719F400860150 /* Ogg.framework */,
+				FAAFF04316CB11C700CCDE45 /* OpenAL-Soft.framework */,
+				FA577A7C16C71A2600860150 /* OpenGL.framework */,
+				FA577A7316C719F900860150 /* physfs.framework */,
+				FA9B4A0716E1578300074F42 /* SDL2.framework */,
+				FA577A7716C71A0800860150 /* Vorbis.framework */,
+			);
+			name = macosx;
+			sourceTree = "<group>";
+		};
+		FA577A6616C7199700860150 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B7EEB1A959125000E1D17 /* macosx */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		FA5D24A11A96D24500C6FC8F /* Libraries */ = {
+			isa = PBXGroup;
+			children = (
+				FA5D24A31A96D2C300C6FC8F /* ios */,
+			);
+			name = Libraries;
+			sourceTree = "<group>";
+		};
+		FA5D24A31A96D2C300C6FC8F /* ios */ = {
+			isa = PBXGroup;
+			children = (
+				FA5D24A41A96D2EC00C6FC8F /* freetype */,
+				FA5D24A81A96D2EC00C6FC8F /* lua */,
+				FA5D24AA1A96D2EC00C6FC8F /* ogg */,
+				FA5D24AC1A96D2EC00C6FC8F /* physfs */,
+				FA5D24CC1A96E63D00C6FC8F /* SDL2 */,
+				FA5D24AE1A96D2EC00C6FC8F /* vorbis */,
+			);
+			name = ios;
+			sourceTree = "<group>";
+		};
+		FA5D24A41A96D2EC00C6FC8F /* freetype */ = {
+			isa = PBXGroup;
+			children = (
+				FA5D24A51A96D2EC00C6FC8F /* libFreetype2.a */,
+			);
+			name = freetype;
+			path = ios/libraries/freetype;
+			sourceTree = "<group>";
+		};
+		FA5D24A81A96D2EC00C6FC8F /* lua */ = {
+			isa = PBXGroup;
+			children = (
+				FA5D24A91A96D2EC00C6FC8F /* libluajit.a */,
+			);
+			name = lua;
+			path = ios/libraries/lua;
+			sourceTree = "<group>";
+		};
+		FA5D24AA1A96D2EC00C6FC8F /* ogg */ = {
+			isa = PBXGroup;
+			children = (
+				FA5D24AB1A96D2EC00C6FC8F /* libogg.a */,
+			);
+			name = ogg;
+			path = ios/libraries/ogg;
+			sourceTree = "<group>";
+		};
+		FA5D24AC1A96D2EC00C6FC8F /* physfs */ = {
+			isa = PBXGroup;
+			children = (
+				FA5D24AD1A96D2EC00C6FC8F /* libphysfs.a */,
+			);
+			name = physfs;
+			path = ios/libraries/physfs;
+			sourceTree = "<group>";
+		};
+		FA5D24AE1A96D2EC00C6FC8F /* vorbis */ = {
+			isa = PBXGroup;
+			children = (
+				FA5D24AF1A96D2EC00C6FC8F /* libvorbis.a */,
+			);
+			name = vorbis;
+			path = ios/libraries/vorbis;
+			sourceTree = "<group>";
+		};
+		FA5D24CC1A96E63D00C6FC8F /* SDL2 */ = {
+			isa = PBXGroup;
+			children = (
+				FA5D24CD1A96E63D00C6FC8F /* libSDL2.a */,
+			);
+			name = SDL2;
+			path = ios/libraries/SDL2;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+		FA577AAC16C7507900860150 /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				FA0B7D7E1A95902C000E1D17 /* Texture.h in Headers */,
+				FA0B7E561A95902C000E1D17 /* wrap_GearJoint.h in Headers */,
+				FA0B7E1D1A95902C000E1D17 /* MouseJoint.h in Headers */,
+				FA0B7DC91A95902C000E1D17 /* Keyboard.h in Headers */,
+				FA0B7D4A1A95902C000E1D17 /* Polyline.h in Headers */,
+				FA0B7DB31A95902C000E1D17 /* wrap_Image.h in Headers */,
+				FA0B7D531A95902C000E1D17 /* Text.h in Headers */,
+				FA0B7D381A95902C000E1D17 /* Font.h in Headers */,
+				FA0B7EC31A95902C000E1D17 /* threads.h in Headers */,
+				FA0B7AC21A958EA3000E1D17 /* enet.h in Headers */,
+				FA0B7E201A95902C000E1D17 /* Physics.h in Headers */,
+				FA0B79221A958E3B000E1D17 /* delay.h in Headers */,
+				FA0B79481A958E3B000E1D17 /* Vector.h in Headers */,
+				FA0B7CCF1A95902C000E1D17 /* Audio.h in Headers */,
+				FA0B7EC01A95902C000E1D17 /* Thread.h in Headers */,
+				FA0B7E9C1A95902C000E1D17 /* VorbisDecoder.h in Headers */,
+				FA0B791D1A958E3B000E1D17 /* b64.h in Headers */,
+				FA0B7DC61A95902C000E1D17 /* wrap_JoystickModule.h in Headers */,
+				FA0B7D201A95902C000E1D17 /* ImageRasterizer.h in Headers */,
+				FA0B7D241A95902C000E1D17 /* Vera.ttf.h in Headers */,
+				FA0B7E5F1A95902C000E1D17 /* wrap_MouseJoint.h in Headers */,
+				FA0B7B361A958EA3000E1D17 /* wuff_convert.h in Headers */,
+				FA0B7D9E1A95902C000E1D17 /* JPEGHandler.h in Headers */,
+				FA0B7D981A95902C000E1D17 /* ImageData.h in Headers */,
+				FA0B7CDE1A95902C000E1D17 /* Source.h in Headers */,
+				FA0B7E141A95902C000E1D17 /* GearJoint.h in Headers */,
+				FA0B7D051A95902C000E1D17 /* wrap_DroppedFile.h in Headers */,
+				FA0B7B271A958EA3000E1D17 /* lutf8lib.h in Headers */,
+				FA0B7E9F1A95902C000E1D17 /* WaveDecoder.h in Headers */,
+				FA0B7AC61A958EA3000E1D17 /* types.h in Headers */,
+				FA0B7D751A95902C000E1D17 /* wrap_Text.h in Headers */,
+				FA0B7DBD1A95902C000E1D17 /* Joystick.h in Headers */,
+				FA0B7E901A95902C000E1D17 /* GmeDecoder.h in Headers */,
+				FA0B7D0E1A95902C000E1D17 /* wrap_Filesystem.h in Headers */,
+				FA0B7EE41A95902D000E1D17 /* Window.h in Headers */,
+				FA0B7D721A95902C000E1D17 /* wrap_SpriteBatch.h in Headers */,
+				FA0B7CFC1A95902C000E1D17 /* Filesystem.h in Headers */,
+				FA0B7AD81A958EA3000E1D17 /* lua-enet.h in Headers */,
+				FA0B7A3A1A958EA3000E1D17 /* b2DynamicTree.h in Headers */,
+				FA0B7D351A95902C000E1D17 /* Canvas.h in Headers */,
+				FA0B7EBA1A95902C000E1D17 /* Channel.h in Headers */,
+				FA0B7D3E1A95902C000E1D17 /* Image.h in Headers */,
+				FA0B7ECA1A95902C000E1D17 /* threads.h in Headers */,
+				FA0B7ED61A95902D000E1D17 /* Timer.h in Headers */,
+				FA0B7DB01A95902C000E1D17 /* wrap_CompressedData.h in Headers */,
+				FA0B7AC11A958EA3000E1D17 /* callbacks.h in Headers */,
+				FA0B7D8F1A95902C000E1D17 /* ddsHandler.h in Headers */,
+				FA0B7AA31A958EA3000E1D17 /* b2PulleyJoint.h in Headers */,
+				FA0B7B2F1A958EA3000E1D17 /* utf8.h in Headers */,
+				FA0B79231A958E3B000E1D17 /* EnumMap.h in Headers */,
+				FA0B7A371A958EA3000E1D17 /* b2Distance.h in Headers */,
+				FA0B7E681A95902C000E1D17 /* wrap_PrismaticJoint.h in Headers */,
+				FA0B7D571A95902C000E1D17 /* VertexBuffer.h in Headers */,
+				FA0B7ED71A95902D000E1D17 /* Timer.h in Headers */,
+				FA0B7AC31A958EA3000E1D17 /* list.h in Headers */,
+				FA0B7B2D1A958EA3000E1D17 /* core.h in Headers */,
+				FA0B7E831A95902C000E1D17 /* Shape.h in Headers */,
+				FA0B7EDD1A95902D000E1D17 /* Touch.h in Headers */,
+				FA0B7EDE1A95902D000E1D17 /* Touch.h in Headers */,
+				FA0B7A541A958EA3000E1D17 /* b2Math.h in Headers */,
+				FA0B7ED01A95902C000E1D17 /* wrap_LuaThread.h in Headers */,
+				FA0B7CE41A95902C000E1D17 /* wrap_Audio.h in Headers */,
+				FA0B7A7F1A958EA3000E1D17 /* b2ContactSolver.h in Headers */,
+				FA0B79491A958E3B000E1D17 /* version.h in Headers */,
+				FA0B7B2B1A958EA3000E1D17 /* stb_image.h in Headers */,
+				FA0B7CD21A95902C000E1D17 /* Audio.h in Headers */,
+				FA0B79421A958E3B000E1D17 /* utf8.h in Headers */,
+				FA0B7D171A95902C000E1D17 /* Font.h in Headers */,
+				FA0B7A6D1A958EA3000E1D17 /* b2World.h in Headers */,
+				FA0B7EAE1A95902C000E1D17 /* wrap_SoundData.h in Headers */,
+				FA0B7CFF1A95902C000E1D17 /* File.h in Headers */,
+				FA0B7AB41A958EA3000E1D17 /* ddsinfo.h in Headers */,
+				FA0B7DD21A95902C000E1D17 /* love.h in Headers */,
+				FA0B7CE71A95902C000E1D17 /* wrap_Source.h in Headers */,
+				FA0B7B231A958EA3000E1D17 /* luasocket.h in Headers */,
+				FA0B7D1D1A95902C000E1D17 /* GlyphData.h in Headers */,
+				FA0B7B391A958EA3000E1D17 /* wuff_internal.h in Headers */,
+				FA0B7A5A1A958EA3000E1D17 /* b2StackAllocator.h in Headers */,
+				FA0B7D881A95902C000E1D17 /* ImageData.h in Headers */,
+				FA0B7A661A958EA3000E1D17 /* b2Fixture.h in Headers */,
+				FA0B7EE11A95902D000E1D17 /* wrap_Touch.h in Headers */,
+				FA0B7AA91A958EA3000E1D17 /* b2RopeJoint.h in Headers */,
+				FA0B7E441A95902C000E1D17 /* wrap_CircleShape.h in Headers */,
+				FA0B7EB41A95902C000E1D17 /* System.h in Headers */,
+				FA0B7CE11A95902C000E1D17 /* Source.h in Headers */,
+				FA0B7E621A95902C000E1D17 /* wrap_Physics.h in Headers */,
+				FA0B7DF01A95902C000E1D17 /* Mouse.h in Headers */,
+				FA0B7DAD1A95902C000E1D17 /* STBHandler.h in Headers */,
+				FA0B7DE11A95902C000E1D17 /* wrap_Math.h in Headers */,
+				FA0B7AAF1A958EA3000E1D17 /* b2WheelJoint.h in Headers */,
+				FA0B7D1A1A95902C000E1D17 /* TrueTypeRasterizer.h in Headers */,
+				FA0B7EA81A95902C000E1D17 /* wrap_Decoder.h in Headers */,
+				FA0B7AC51A958EA3000E1D17 /* time.h in Headers */,
+				FA0B793E1A958E3B000E1D17 /* StringMap.h in Headers */,
+				FA0B793A1A958E3B000E1D17 /* Reference.h in Headers */,
+				FA0B7DCC1A95902C000E1D17 /* Keyboard.h in Headers */,
+				FA620A341AA2F8DB005DB4C2 /* wrap_Quad.h in Headers */,
+				FA0B7EA51A95902C000E1D17 /* SoundData.h in Headers */,
+				FA0B7A821A958EA3000E1D17 /* b2EdgeAndCircleContact.h in Headers */,
+				FA0B79341A958E3B000E1D17 /* Object.h in Headers */,
+				FA0B7CEA1A95902C000E1D17 /* Event.h in Headers */,
+				FA0B7E351A95902C000E1D17 /* WeldJoint.h in Headers */,
+				FA0B7E2F1A95902C000E1D17 /* RopeJoint.h in Headers */,
+				FA0B7D141A95902C000E1D17 /* Font.h in Headers */,
+				FA0B7D411A95902C000E1D17 /* Mesh.h in Headers */,
+				FA0B7E591A95902C000E1D17 /* wrap_Joint.h in Headers */,
+				FA0B79351A958E3B000E1D17 /* OSX.h in Headers */,
+				FA0B7A631A958EA3000E1D17 /* b2ContactManager.h in Headers */,
+				FA0B7E771A95902C000E1D17 /* wrap_WeldJoint.h in Headers */,
+				FA0B7A911A958EA3000E1D17 /* b2FrictionJoint.h in Headers */,
+				FA0B7E291A95902C000E1D17 /* PulleyJoint.h in Headers */,
+				FA0B7D471A95902C000E1D17 /* ParticleSystem.h in Headers */,
+				FA0B7E231A95902C000E1D17 /* PolygonShape.h in Headers */,
+				FA0B791E1A958E3B000E1D17 /* config.h in Headers */,
+				FA0B7E6B1A95902C000E1D17 /* wrap_PulleyJoint.h in Headers */,
+				FA0B7E051A95902C000E1D17 /* Contact.h in Headers */,
+				FA0B7A691A958EA3000E1D17 /* b2Island.h in Headers */,
+				FA0B7E0E1A95902C000E1D17 /* Fixture.h in Headers */,
+				FA0B7A401A958EA3000E1D17 /* b2ChainShape.h in Headers */,
+				FA0B7AA61A958EA3000E1D17 /* b2RevoluteJoint.h in Headers */,
+				FA0B7EEA1A95902D000E1D17 /* wrap_Window.h in Headers */,
+				FA0B7E381A95902C000E1D17 /* WheelJoint.h in Headers */,
+				FA0B7D851A95902C000E1D17 /* Image.h in Headers */,
+				FA0B7E7D1A95902C000E1D17 /* wrap_World.h in Headers */,
+				FA0B7EBD1A95902C000E1D17 /* LuaThread.h in Headers */,
+				FA0B7D601A95902C000E1D17 /* wrap_Graphics.h in Headers */,
+				FA0B7DC01A95902C000E1D17 /* JoystickModule.h in Headers */,
+				FA0B7E871A95902C000E1D17 /* CoreAudioDecoder.h in Headers */,
+				FA0B7CD51A95902C000E1D17 /* Source.h in Headers */,
+				FA0B7A2B1A958EA3000E1D17 /* b2BroadPhase.h in Headers */,
+				FA0B7D661A95902C000E1D17 /* wrap_Mesh.h in Headers */,
+				FA0B7AAC1A958EA3000E1D17 /* b2WeldJoint.h in Headers */,
+				FA0B7E7A1A95902C000E1D17 /* wrap_WheelJoint.h in Headers */,
+				FA0B7A791A958EA3000E1D17 /* b2CircleContact.h in Headers */,
+				FA0B7DD81A95902C000E1D17 /* MathModule.h in Headers */,
+				FA0B7D631A95902C000E1D17 /* wrap_Image.h in Headers */,
+				FA0B7A341A958EA3000E1D17 /* b2Collision.h in Headers */,
+				FA0B7EC71A95902C000E1D17 /* ThreadModule.h in Headers */,
+				FA0B792B1A958E3B000E1D17 /* Matrix.h in Headers */,
+				FA0B7DA41A95902C000E1D17 /* PKMHandler.h in Headers */,
+				FA0B7AC81A958EA3000E1D17 /* utility.h in Headers */,
+				FA0B791F1A958E3B000E1D17 /* Data.h in Headers */,
+				FA0B7D021A95902C000E1D17 /* Filesystem.h in Headers */,
+				FA0B7E471A95902C000E1D17 /* wrap_Contact.h in Headers */,
+				FA0B7E021A95902C000E1D17 /* CircleShape.h in Headers */,
+				FA0B7E111A95902C000E1D17 /* FrictionJoint.h in Headers */,
+				FA0B7AE01A958EA3000E1D17 /* lodepng.h in Headers */,
+				FA0B7A4D1A958EA3000E1D17 /* b2BlockAllocator.h in Headers */,
+				FA0B7ECD1A95902C000E1D17 /* wrap_Channel.h in Headers */,
+				FA0B7A431A958EA3000E1D17 /* b2CircleShape.h in Headers */,
+				FA0B7CD81A95902C000E1D17 /* Audio.h in Headers */,
+				FA0B7CF61A95902C000E1D17 /* File.h in Headers */,
+				FA0B7E961A95902C000E1D17 /* Mpg123Decoder.h in Headers */,
+				FA0B7D501A95902C000E1D17 /* SpriteBatch.h in Headers */,
+				FA0B7DD51A95902C000E1D17 /* BezierCurve.h in Headers */,
+				FA0B79271A958E3B000E1D17 /* int.h in Headers */,
+				FA0B7D8C1A95902C000E1D17 /* CompressedFormatHandler.h in Headers */,
+				FA0B7E531A95902C000E1D17 /* wrap_FrictionJoint.h in Headers */,
+				FA0B7EB71A95902C000E1D17 /* wrap_System.h in Headers */,
+				FA0B7DF61A95902C000E1D17 /* wrap_Mouse.h in Headers */,
+				FA0B7E801A95902C000E1D17 /* Joint.h in Headers */,
+				FA0B7D2F1A95902C000E1D17 /* Drawable.h in Headers */,
+				FA0B7D951A95902C000E1D17 /* Image.h in Headers */,
+				FA0B7EC41A95902C000E1D17 /* Thread.h in Headers */,
+				FA0B7DFF1A95902C000E1D17 /* ChainShape.h in Headers */,
+				FA0B7E4D1A95902C000E1D17 /* wrap_EdgeShape.h in Headers */,
+				FA0B7DDB1A95902C000E1D17 /* RandomGenerator.h in Headers */,
+				FA0B7E841A95902C000E1D17 /* Decoder.h in Headers */,
+				FA0B7A601A958EA3000E1D17 /* b2Body.h in Headers */,
+				FA0B7EAB1A95902C000E1D17 /* wrap_Sound.h in Headers */,
+				FA0B7B2C1A958EA3000E1D17 /* checked.h in Headers */,
+				FA0B7D2A1A95902C000E1D17 /* wrap_GlyphData.h in Headers */,
+				FA0B7E741A95902C000E1D17 /* wrap_Shape.h in Headers */,
+				FA0B7A5D1A958EA3000E1D17 /* b2Timer.h in Headers */,
+				FA0B7A4A1A958EA3000E1D17 /* b2Shape.h in Headers */,
+				FA0B7E3B1A95902C000E1D17 /* World.h in Headers */,
+				FA0B7DC31A95902C000E1D17 /* wrap_Joystick.h in Headers */,
+				FA0B7EE71A95902D000E1D17 /* Window.h in Headers */,
+				FA0B7E651A95902C000E1D17 /* wrap_PolygonShape.h in Headers */,
+				FA0B7AC91A958EA3000E1D17 /* win32.h in Headers */,
+				FA0B7DFC1A95902C000E1D17 /* Body.h in Headers */,
+				FA0B7A941A958EA3000E1D17 /* b2GearJoint.h in Headers */,
+				FA0B7DF31A95902C000E1D17 /* wrap_Cursor.h in Headers */,
+				FA0B7A461A958EA3000E1D17 /* b2EdgeShape.h in Headers */,
+				FA0B7D271A95902C000E1D17 /* wrap_Font.h in Headers */,
+				FA0B7A761A958EA3000E1D17 /* b2ChainAndPolygonContact.h in Headers */,
+				FA0B7DAA1A95902C000E1D17 /* PVRHandler.h in Headers */,
+				FA0B7D7B1A95902C000E1D17 /* Quad.h in Headers */,
+				FA0B7E261A95902C000E1D17 /* PrismaticJoint.h in Headers */,
+				FA0B7E991A95902C000E1D17 /* Sound.h in Headers */,
+				FA0B7D841A95902C000E1D17 /* CompressedData.h in Headers */,
+				FA0B7D231A95902C000E1D17 /* Rasterizer.h in Headers */,
+				FA0B7D9B1A95902C000E1D17 /* ImageIOHandler.h in Headers */,
+				FA0B7CDB1A95902C000E1D17 /* Pool.h in Headers */,
+				FA0B7D0B1A95902C000E1D17 /* wrap_FileData.h in Headers */,
+				FA0B7DF91A95902C000E1D17 /* Body.h in Headers */,
+				FA0B7DB91A95902C000E1D17 /* Joystick.h in Headers */,
+				FA0B7E2C1A95902C000E1D17 /* RevoluteJoint.h in Headers */,
+				FA8951A41AA2EDF300EC385A /* wrap_Event.h in Headers */,
+				FA0B7B2A1A958EA3000E1D17 /* simplexnoise1234.h in Headers */,
+				FA0B7ADC1A958EA3000E1D17 /* glad.hpp in Headers */,
+				FA0B7CF91A95902C000E1D17 /* FileData.h in Headers */,
+				FA0B7DA71A95902C000E1D17 /* PNGHandler.h in Headers */,
+				FA0B7AC41A958EA3000E1D17 /* protocol.h in Headers */,
+				FA0B7D8B1A95902C000E1D17 /* CompressedData.h in Headers */,
+				FA0B7A8E1A958EA3000E1D17 /* b2DistanceJoint.h in Headers */,
+				FA0B7A8B1A958EA3000E1D17 /* b2PolygonContact.h in Headers */,
+				FA0B794C1A958E3B000E1D17 /* wrap_Data.h in Headers */,
+				FA0B7D321A95902C000E1D17 /* Graphics.h in Headers */,
+				FA0B7E321A95902C000E1D17 /* Shape.h in Headers */,
+				FA620A371AA2F8DB005DB4C2 /* wrap_Texture.h in Headers */,
+				FA0B7DBA1A95902C000E1D17 /* JoystickModule.h in Headers */,
+				FA0B792E1A958E3B000E1D17 /* Memoizer.h in Headers */,
+				FA0B7A731A958EA3000E1D17 /* b2ChainAndCircleContact.h in Headers */,
+				FA0B7AA01A958EA3000E1D17 /* b2PrismaticJoint.h in Headers */,
+				FA0B7B241A958EA3000E1D17 /* lprefix.h in Headers */,
+				FA0B7DEA1A95902C000E1D17 /* Mouse.h in Headers */,
+				FA0B7E931A95902C000E1D17 /* ModPlugDecoder.h in Headers */,
+				FA0B7D111A95902C000E1D17 /* BMFontRasterizer.h in Headers */,
+				FA0B7E8A1A95902C000E1D17 /* Decoder.h in Headers */,
+				FA0B7E3E1A95902C000E1D17 /* wrap_Body.h in Headers */,
+				FA0B7A571A958EA3000E1D17 /* b2Settings.h in Headers */,
+				FA0B7B321A958EA3000E1D17 /* wuff.h in Headers */,
+				FA0B7A3D1A958EA3000E1D17 /* b2TimeOfImpact.h in Headers */,
+				FA0B79261A958E3B000E1D17 /* Exception.h in Headers */,
+				FA0B7D4D1A95902C000E1D17 /* Shader.h in Headers */,
+				FA0B793D1A958E3B000E1D17 /* runtime.h in Headers */,
+				FA0B7A701A958EA3000E1D17 /* b2WorldCallbacks.h in Headers */,
+				FA0B7A9D1A958EA3000E1D17 /* b2MouseJoint.h in Headers */,
+				FA0B7CED1A95902C000E1D17 /* Event.h in Headers */,
+				FA0B7D811A95902C000E1D17 /* Volatile.h in Headers */,
+				FA0B7B2E1A958EA3000E1D17 /* unchecked.h in Headers */,
+				FA0B7D081A95902C000E1D17 /* wrap_File.h in Headers */,
+				FA0B79451A958E3B000E1D17 /* Variant.h in Headers */,
+				FA0B7D691A95902C000E1D17 /* wrap_ParticleSystem.h in Headers */,
+				FA0B7E5C1A95902C000E1D17 /* wrap_MotorJoint.h in Headers */,
+				FA0B7A7C1A958EA3000E1D17 /* b2Contact.h in Headers */,
+				FA0B7A881A958EA3000E1D17 /* b2PolygonAndCircleContact.h in Headers */,
+				FA0B7DDE1A95902C000E1D17 /* wrap_BezierCurve.h in Headers */,
+				FA0B7DED1A95902C000E1D17 /* Cursor.h in Headers */,
+				FA0B7E501A95902C000E1D17 /* wrap_Fixture.h in Headers */,
+				FA0B7A491A958EA3000E1D17 /* b2PolygonShape.h in Headers */,
+				FA0B79281A958E3B000E1D17 /* math.h in Headers */,
+				FA0B7A9A1A958EA3000E1D17 /* b2MotorJoint.h in Headers */,
+				FA0B7DCF1A95902C000E1D17 /* wrap_Keyboard.h in Headers */,
+				FA0B7D6F1A95902C000E1D17 /* wrap_Shader.h in Headers */,
+				FA0B7EA21A95902C000E1D17 /* Sound.h in Headers */,
+				FA0B7B331A958EA3000E1D17 /* wuff_config.h in Headers */,
+				FA0B7CF31A95902C000E1D17 /* DroppedFile.h in Headers */,
+				FA0B7D3B1A95902C000E1D17 /* Graphics.h in Headers */,
+				FA0B7E6E1A95902C000E1D17 /* wrap_RevoluteJoint.h in Headers */,
+				FA0B7AC71A958EA3000E1D17 /* unix.h in Headers */,
+				FA0B7E8D1A95902C000E1D17 /* FLACDecoder.h in Headers */,
+				FA0B7A501A958EA3000E1D17 /* b2Draw.h in Headers */,
+				FA0B7DE71A95902C000E1D17 /* Cursor.h in Headers */,
+				FA0B7DB61A95902C000E1D17 /* wrap_ImageData.h in Headers */,
+				FA0B7A971A958EA3000E1D17 /* b2Joint.h in Headers */,
+				FA0B7A851A958EA3000E1D17 /* b2EdgeAndPolygonContact.h in Headers */,
+				FA0B7D2D1A95902C000E1D17 /* wrap_Rasterizer.h in Headers */,
+				FA0B7AB71A958EA3000E1D17 /* ddsparse.h in Headers */,
+				FA0B7DA11A95902C000E1D17 /* KTXHandler.h in Headers */,
+				FA0B79311A958E3B000E1D17 /* Module.h in Headers */,
+				FA0B7D5A1A95902C000E1D17 /* wrap_Canvas.h in Headers */,
+				FA0B7E4A1A95902C000E1D17 /* wrap_DistanceJoint.h in Headers */,
+				FA0B7D2E1A95902C000E1D17 /* Color.h in Headers */,
+				FA0B7A6A1A958EA3000E1D17 /* b2TimeStep.h in Headers */,
+				FA0B7A281A958EA3000E1D17 /* Box2D.h in Headers */,
+				FA0B7DE41A95902C000E1D17 /* wrap_RandomGenerator.h in Headers */,
+				FA0B7E0B1A95902C000E1D17 /* EdgeShape.h in Headers */,
+				FA0B7EDA1A95902D000E1D17 /* wrap_Timer.h in Headers */,
+				FA0B7EB11A95902C000E1D17 /* System.h in Headers */,
+				FA0B7E1A1A95902C000E1D17 /* MotorJoint.h in Headers */,
+				FA0B7D441A95902C000E1D17 /* OpenGL.h in Headers */,
+				FA0B7E081A95902C000E1D17 /* DistanceJoint.h in Headers */,
+				FA0B7E711A95902C000E1D17 /* wrap_RopeJoint.h in Headers */,
+				FA0B7E411A95902C000E1D17 /* wrap_ChainShape.h in Headers */,
+				FA0B7E171A95902C000E1D17 /* Joint.h in Headers */,
+				FA0B793F1A958E3B000E1D17 /* types.h in Headers */,
+				FA0B7AB31A958EA3000E1D17 /* b2Rope.h in Headers */,
+				FA0B7D5D1A95902C000E1D17 /* wrap_Font.h in Headers */,
+				FA0B7ED31A95902C000E1D17 /* wrap_ThreadModule.h in Headers */,
+				FA0B7A511A958EA3000E1D17 /* b2GrowableStack.h in Headers */,
+				FA0B7D921A95902C000E1D17 /* FormatHandler.h in Headers */,
+				FA0B7ADD1A958EA3000E1D17 /* gladfuncs.hpp in Headers */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+		FA0B78DC1A958B90000E1D17 /* liblove-ios */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = FA0B78EE1A958B90000E1D17 /* Build configuration list for PBXNativeTarget "liblove-ios" */;
+			buildPhases = (
+				FA0B78D91A958B90000E1D17 /* Sources */,
+				FA0B78DA1A958B90000E1D17 /* Frameworks */,
+				FA0B78DB1A958B90000E1D17 /* CopyFiles */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "liblove-ios";
+			productName = "liblove-ios";
+			productReference = FA0B78DD1A958B90000E1D17 /* liblove.a */;
+			productType = "com.apple.product-type.library.static";
+		};
+		FA577AAE16C7507900860150 /* liblove-macosx */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = FA577ABF16C7507900860150 /* Build configuration list for PBXNativeTarget "liblove-macosx" */;
+			buildPhases = (
+				FA577AAA16C7507900860150 /* Sources */,
+				FA577AAB16C7507900860150 /* Frameworks */,
+				FA577AAC16C7507900860150 /* Headers */,
+				FA577AAD16C7507900860150 /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "liblove-macosx";
+			productName = love;
+			productReference = FA577AAF16C7507900860150 /* love.framework */;
+			productType = "com.apple.product-type.framework";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		08FB7793FE84155DC02AAC07 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0610;
+				TargetAttributes = {
+					FA0B78DC1A958B90000E1D17 = {
+						CreatedOnToolsVersion = 6.1.1;
+					};
+				};
+			};
+			buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "liblove" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 1;
+			knownRegions = (
+				en,
+			);
+			mainGroup = 54067CFB7D564E5764FA17DC /* love */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				FA577AAE16C7507900860150 /* liblove-macosx */,
+				FA0B78DC1A958B90000E1D17 /* liblove-ios */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		FA577AAD16C7507900860150 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		FA0B78D91A958B90000E1D17 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				FA0B7D741A95902C000E1D17 /* wrap_Text.cpp in Sources */,
+				FA0B7DE01A95902C000E1D17 /* wrap_Math.cpp in Sources */,
+				FA0B7DA91A95902C000E1D17 /* PVRHandler.cpp in Sources */,
+				FA0B7EC61A95902C000E1D17 /* ThreadModule.cpp in Sources */,
+				FA0B7D2C1A95902C000E1D17 /* wrap_Rasterizer.cpp in Sources */,
+				FA0B7D591A95902C000E1D17 /* wrap_Canvas.cpp in Sources */,
+				FA0B7E8F1A95902C000E1D17 /* GmeDecoder.cpp in Sources */,
+				FA0B7CD71A95902C000E1D17 /* Audio.cpp in Sources */,
+				FA0B7AC01A958EA3000E1D17 /* host.c in Sources */,
+				FA0B7EB01A95902C000E1D17 /* System.cpp in Sources */,
+				FA0B7EE31A95902D000E1D17 /* Window.cpp in Sources */,
+				FA0B7AAB1A958EA3000E1D17 /* b2WeldJoint.cpp in Sources */,
+				FA0B7EC21A95902C000E1D17 /* threads.cpp in Sources */,
+				FA0B79371A958E3B000E1D17 /* OSX.mm in Sources */,
+				FA0B7D011A95902C000E1D17 /* Filesystem.cpp in Sources */,
+				FA0B7ED91A95902D000E1D17 /* wrap_Timer.cpp in Sources */,
+				FA0B7DD11A95902C000E1D17 /* love.cpp in Sources */,
+				FA0B7AB61A958EA3000E1D17 /* ddsparse.cpp in Sources */,
+				FA0B7D221A95902C000E1D17 /* Rasterizer.cpp in Sources */,
+				FA0B7A4F1A958EA3000E1D17 /* b2Draw.cpp in Sources */,
+				FA0B7D7D1A95902C000E1D17 /* Texture.cpp in Sources */,
+				FA0B7ECC1A95902C000E1D17 /* wrap_Channel.cpp in Sources */,
+				FA0B7E6D1A95902C000E1D17 /* wrap_RevoluteJoint.cpp in Sources */,
+				FA0B7B0F1A958EA3000E1D17 /* timeout.c in Sources */,
+				FA0B7A5F1A958EA3000E1D17 /* b2Body.cpp in Sources */,
+				FA0B7B171A958EA3000E1D17 /* unix.c in Sources */,
+				FA0B7E641A95902C000E1D17 /* wrap_PolygonShape.cpp in Sources */,
+				FA0B7E731A95902C000E1D17 /* wrap_Shape.cpp in Sources */,
+				FA0B7CFE1A95902C000E1D17 /* File.cpp in Sources */,
+				FA0B7A751A958EA3000E1D17 /* b2ChainAndPolygonContact.cpp in Sources */,
+				FA0B7E6A1A95902C000E1D17 /* wrap_PulleyJoint.cpp in Sources */,
+				FA0B7DB81A95902C000E1D17 /* Joystick.cpp in Sources */,
+				FA0B794B1A958E3B000E1D17 /* wrap_Data.cpp in Sources */,
+				FA0B7D371A95902C000E1D17 /* Font.cpp in Sources */,
+				FA0B7E401A95902C000E1D17 /* wrap_ChainShape.cpp in Sources */,
+				FA0B7DEC1A95902C000E1D17 /* Cursor.cpp in Sources */,
+				FA0B7D871A95902C000E1D17 /* ImageData.cpp in Sources */,
+				FA0B7AE21A958EA3000E1D17 /* auxiliar.c in Sources */,
+				FA0B7E101A95902C000E1D17 /* FrictionJoint.cpp in Sources */,
+				FA620A361AA2F8DB005DB4C2 /* wrap_Texture.cpp in Sources */,
+				FA0B7D0A1A95902C000E1D17 /* wrap_FileData.cpp in Sources */,
+				FA0B7ABE1A958EA3000E1D17 /* compress.c in Sources */,
+				FA0B7CF21A95902C000E1D17 /* DroppedFile.cpp in Sources */,
+				FA0B7D8A1A95902C000E1D17 /* CompressedData.cpp in Sources */,
+				FA0B7AD21A958EA3000E1D17 /* protocol.c in Sources */,
+				FA0B7D1F1A95902C000E1D17 /* ImageRasterizer.cpp in Sources */,
+				FA0B7EA41A95902C000E1D17 /* SoundData.cpp in Sources */,
+				FA0B7D041A95902C000E1D17 /* wrap_DroppedFile.cpp in Sources */,
+				FA0B7B261A958EA3000E1D17 /* lutf8lib.c in Sources */,
+				FA0B7D461A95902C000E1D17 /* ParticleSystem.cpp in Sources */,
+				FA8951A31AA2EDF300EC385A /* wrap_Event.cpp in Sources */,
+				FA0B7A361A958EA3000E1D17 /* b2Distance.cpp in Sources */,
+				FA0B7D4C1A95902C000E1D17 /* Shader.cpp in Sources */,
+				FA0B792A1A958E3B000E1D17 /* Matrix.cpp in Sources */,
+				FA0B7A8D1A958EA3000E1D17 /* b2DistanceJoint.cpp in Sources */,
+				FA0B7A841A958EA3000E1D17 /* b2EdgeAndPolygonContact.cpp in Sources */,
+				FA0B7E191A95902C000E1D17 /* MotorJoint.cpp in Sources */,
+				FA0B7E4F1A95902C000E1D17 /* wrap_Fixture.cpp in Sources */,
+				FA0B7EBF1A95902C000E1D17 /* Thread.cpp in Sources */,
+				FA0B7EB91A95902C000E1D17 /* Channel.cpp in Sources */,
+				FA0B7AFB1A958EA3000E1D17 /* mime.c in Sources */,
+				FA0B7A3F1A958EA3000E1D17 /* b2ChainShape.cpp in Sources */,
+				FA0B7E921A95902C000E1D17 /* ModPlugDecoder.cpp in Sources */,
+				FA0B7E521A95902C000E1D17 /* wrap_FrictionJoint.cpp in Sources */,
+				FA0B7A311A958EA3000E1D17 /* b2CollidePolygon.cpp in Sources */,
+				FA0B7A931A958EA3000E1D17 /* b2GearJoint.cpp in Sources */,
+				FA0B7E0D1A95902C000E1D17 /* Fixture.cpp in Sources */,
+				FA0B7D191A95902C000E1D17 /* TrueTypeRasterizer.cpp in Sources */,
+				FA0B7CFB1A95902C000E1D17 /* Filesystem.cpp in Sources */,
+				FA0B7D3D1A95902C000E1D17 /* Image.cpp in Sources */,
+				FA0B7B351A958EA3000E1D17 /* wuff_convert.c in Sources */,
+				FA0B7E431A95902C000E1D17 /* wrap_CircleShape.cpp in Sources */,
+				FA0B7DE91A95902C000E1D17 /* Mouse.cpp in Sources */,
+				FA0B7CE61A95902C000E1D17 /* wrap_Source.cpp in Sources */,
+				FA0B7AA21A958EA3000E1D17 /* b2PulleyJoint.cpp in Sources */,
+				FA0B7CCE1A95902C000E1D17 /* Audio.cpp in Sources */,
+				FA0B7DCB1A95902C000E1D17 /* Keyboard.cpp in Sources */,
+				FA0B7A901A958EA3000E1D17 /* b2FrictionJoint.cpp in Sources */,
+				FA0B7DFB1A95902C000E1D17 /* Body.cpp in Sources */,
+				FA0B7ED21A95902C000E1D17 /* wrap_ThreadModule.cpp in Sources */,
+				FA0B7EE01A95902D000E1D17 /* wrap_Touch.cpp in Sources */,
+				FA0B7A3C1A958EA3000E1D17 /* b2TimeOfImpact.cpp in Sources */,
+				FA0B7CDD1A95902C000E1D17 /* Source.cpp in Sources */,
+				FA0B7DC51A95902C000E1D17 /* wrap_JoystickModule.cpp in Sources */,
+				FA0B7E701A95902C000E1D17 /* wrap_RopeJoint.cpp in Sources */,
+				FA0B7A7B1A958EA3000E1D17 /* b2Contact.cpp in Sources */,
+				FA0B7D9D1A95902C000E1D17 /* JPEGHandler.cpp in Sources */,
+				FA0B7A6F1A958EA3000E1D17 /* b2WorldCallbacks.cpp in Sources */,
+				FA0B793C1A958E3B000E1D17 /* runtime.cpp in Sources */,
+				FA0B7DBC1A95902C000E1D17 /* Joystick.cpp in Sources */,
+				FA0B7DAF1A95902C000E1D17 /* wrap_CompressedData.cpp in Sources */,
+				FA0B7A481A958EA3000E1D17 /* b2PolygonShape.cpp in Sources */,
+				FA0B7A991A958EA3000E1D17 /* b2MotorJoint.cpp in Sources */,
+				FA0B7D681A95902C000E1D17 /* wrap_ParticleSystem.cpp in Sources */,
+				FA0B7AD51A958EA3000E1D17 /* unix.c in Sources */,
+				FA0B7B1C1A958EA3000E1D17 /* usocket.c in Sources */,
+				FA0B7D651A95902C000E1D17 /* wrap_Mesh.cpp in Sources */,
+				FA0B7A531A958EA3000E1D17 /* b2Math.cpp in Sources */,
+				FA0B7CDA1A95902C000E1D17 /* Pool.cpp in Sources */,
+				FA0B7E161A95902C000E1D17 /* Joint.cpp in Sources */,
+				FA0B7EE91A95902D000E1D17 /* wrap_Window.cpp in Sources */,
+				FA0B7AB91A958EA3000E1D17 /* enet.cpp in Sources */,
+				FA0B7E281A95902C000E1D17 /* PulleyJoint.cpp in Sources */,
+				FA0B7A4C1A958EA3000E1D17 /* b2BlockAllocator.cpp in Sources */,
+				FA0B7E041A95902C000E1D17 /* Contact.cpp in Sources */,
+				FA0B7D831A95902C000E1D17 /* CompressedData.cpp in Sources */,
+				FA0B7B311A958EA3000E1D17 /* wuff.c in Sources */,
+				FA0B7DF21A95902C000E1D17 /* wrap_Cursor.cpp in Sources */,
+				FA0B7E011A95902C000E1D17 /* CircleShape.cpp in Sources */,
+				FA0B7E461A95902C000E1D17 /* wrap_Contact.cpp in Sources */,
+				FA0B7D401A95902C000E1D17 /* Mesh.cpp in Sources */,
+				FA0B7D161A95902C000E1D17 /* Font.cpp in Sources */,
+				FA0B7EB61A95902C000E1D17 /* wrap_System.cpp in Sources */,
+				FA0B7DAC1A95902C000E1D17 /* STBHandler.cpp in Sources */,
+				FA0B79301A958E3B000E1D17 /* Module.cpp in Sources */,
+				FA0B7DDA1A95902C000E1D17 /* RandomGenerator.cpp in Sources */,
+				FA0B7AF81A958EA3000E1D17 /* luasocket.c in Sources */,
+				FA0B7D801A95902C000E1D17 /* Volatile.cpp in Sources */,
+				FA0B792D1A958E3B000E1D17 /* Memoizer.cpp in Sources */,
+				FA0B7EBC1A95902C000E1D17 /* LuaThread.cpp in Sources */,
+				FA0B7A871A958EA3000E1D17 /* b2PolygonAndCircleContact.cpp in Sources */,
+				FA0B7EF21A959D2C000E1D17 /* iOS.mm in Sources */,
+				FA0B7D3A1A95902C000E1D17 /* Graphics.cpp in Sources */,
+				FA0B7A2D1A958EA3000E1D17 /* b2CollideCircle.cpp in Sources */,
+				FA0B7E131A95902C000E1D17 /* GearJoint.cpp in Sources */,
+				FA0B7DC21A95902C000E1D17 /* wrap_Joystick.cpp in Sources */,
+				FA0B7CD41A95902C000E1D17 /* Source.cpp in Sources */,
+				FA0B7AEF1A958EA3000E1D17 /* inet.c in Sources */,
+				FA0B7CD11A95902C000E1D17 /* Audio.cpp in Sources */,
+				FA0B7D131A95902C000E1D17 /* Font.cpp in Sources */,
+				FA0B7EC91A95902C000E1D17 /* threads.cpp in Sources */,
+				FA0B7A781A958EA3000E1D17 /* b2CircleContact.cpp in Sources */,
+				FA0B7D5F1A95902C000E1D17 /* wrap_Graphics.cpp in Sources */,
+				FA0B7A9C1A958EA3000E1D17 /* b2MouseJoint.cpp in Sources */,
+				FA0B7E551A95902C000E1D17 /* wrap_GearJoint.cpp in Sources */,
+				FA0B7E791A95902C000E1D17 /* wrap_WheelJoint.cpp in Sources */,
+				FA0B7DDD1A95902C000E1D17 /* wrap_BezierCurve.cpp in Sources */,
+				FA0B7A2A1A958EA3000E1D17 /* b2BroadPhase.cpp in Sources */,
+				FA0B7A811A958EA3000E1D17 /* b2EdgeAndCircleContact.cpp in Sources */,
+				FA0B7D071A95902C000E1D17 /* wrap_File.cpp in Sources */,
+				FA0B7AD01A958EA3000E1D17 /* peer.c in Sources */,
+				FA0B791C1A958E3B000E1D17 /* b64.cpp in Sources */,
+				FA0B7D941A95902C000E1D17 /* Image.cpp in Sources */,
+				FA0B7DA01A95902C000E1D17 /* KTXHandler.cpp in Sources */,
+				FA0B7A5C1A958EA3000E1D17 /* b2Timer.cpp in Sources */,
+				FA0B7CEC1A95902C000E1D17 /* Event.cpp in Sources */,
+				FA0B7A7E1A958EA3000E1D17 /* b2ContactSolver.cpp in Sources */,
+				FA0B7D971A95902C000E1D17 /* ImageData.cpp in Sources */,
+				FA0B7E581A95902C000E1D17 /* wrap_Joint.cpp in Sources */,
+				FA0B7E311A95902C000E1D17 /* Shape.cpp in Sources */,
+				FA0B7E491A95902C000E1D17 /* wrap_DistanceJoint.cpp in Sources */,
+				FA0B7A391A958EA3000E1D17 /* b2DynamicTree.cpp in Sources */,
+				FA0B7A681A958EA3000E1D17 /* b2Island.cpp in Sources */,
+				FA0B7E2B1A95902C000E1D17 /* RevoluteJoint.cpp in Sources */,
+				FA0B7B291A958EA3000E1D17 /* simplexnoise1234.cpp in Sources */,
+				FA0B7D261A95902C000E1D17 /* wrap_Font.cpp in Sources */,
+				FA0B7E0A1A95902C000E1D17 /* EdgeShape.cpp in Sources */,
+				FA0B7CF81A95902C000E1D17 /* FileData.cpp in Sources */,
+				FA0B7DA61A95902C000E1D17 /* PNGHandler.cpp in Sources */,
+				FA0B7B041A958EA3000E1D17 /* select.c in Sources */,
+				FA0B7E981A95902C000E1D17 /* Sound.cpp in Sources */,
+				FA0B7E371A95902C000E1D17 /* WheelJoint.cpp in Sources */,
+				FA0B7A8A1A958EA3000E1D17 /* b2PolygonContact.cpp in Sources */,
+				FA0B7D8E1A95902C000E1D17 /* ddsHandler.cpp in Sources */,
+				FA0B7DFE1A95902C000E1D17 /* ChainShape.cpp in Sources */,
+				FA0B7A451A958EA3000E1D17 /* b2EdgeShape.cpp in Sources */,
+				FA0B7D621A95902C000E1D17 /* wrap_Image.cpp in Sources */,
+				FA0B7ABB1A958EA3000E1D17 /* callbacks.c in Sources */,
+				FA0B7A721A958EA3000E1D17 /* b2ChainAndCircleContact.cpp in Sources */,
+				FA0B7EAA1A95902C000E1D17 /* wrap_Sound.cpp in Sources */,
+				FA0B79391A958E3B000E1D17 /* Reference.cpp in Sources */,
+				FA620A331AA2F8DB005DB4C2 /* wrap_Quad.cpp in Sources */,
+				FA0B7E071A95902C000E1D17 /* DistanceJoint.cpp in Sources */,
+				FA0B7A331A958EA3000E1D17 /* b2Collision.cpp in Sources */,
+				FA0B7D9A1A95902C000E1D17 /* ImageIOHandler.cpp in Sources */,
+				FA0B7E5E1A95902C000E1D17 /* wrap_MouseJoint.cpp in Sources */,
+				FA0B7B3B1A958EA3000E1D17 /* wuff_memory.c in Sources */,
+				FA0B79411A958E3B000E1D17 /* utf8.cpp in Sources */,
+				FA0B7ADF1A958EA3000E1D17 /* lodepng.cpp in Sources */,
+				FA0B7D711A95902C000E1D17 /* wrap_SpriteBatch.cpp in Sources */,
+				FA0B7D341A95902C000E1D17 /* Canvas.cpp in Sources */,
+				FA0B7E8C1A95902C000E1D17 /* FLACDecoder.cpp in Sources */,
+				FA0B7A421A958EA3000E1D17 /* b2CircleShape.cpp in Sources */,
+				FA0B7B141A958EA3000E1D17 /* udp.c in Sources */,
+				FA0B7D491A95902C000E1D17 /* Polyline.cpp in Sources */,
+				FA0B7CE31A95902C000E1D17 /* wrap_Audio.cpp in Sources */,
+				FA0B7B381A958EA3000E1D17 /* wuff_internal.c in Sources */,
+				FA0B7DF81A95902C000E1D17 /* Body.cpp in Sources */,
+				FA0B7DF51A95902C000E1D17 /* wrap_Mouse.cpp in Sources */,
+				FA0B7D6E1A95902C000E1D17 /* wrap_Shader.cpp in Sources */,
+				FA0B7E861A95902C000E1D17 /* CoreAudioDecoder.cpp in Sources */,
+				FA0B7E761A95902C000E1D17 /* wrap_WeldJoint.cpp in Sources */,
+				FA0B7D561A95902C000E1D17 /* VertexBuffer.cpp in Sources */,
+				FA0B7A6C1A958EA3000E1D17 /* b2World.cpp in Sources */,
+				FA0B7E221A95902C000E1D17 /* PolygonShape.cpp in Sources */,
+				FA0B7A651A958EA3000E1D17 /* b2Fixture.cpp in Sources */,
+				FA0B7D521A95902C000E1D17 /* Text.cpp in Sources */,
+				FA0B7DA31A95902C000E1D17 /* PKMHandler.cpp in Sources */,
+				FA0B7AB21A958EA3000E1D17 /* b2Rope.cpp in Sources */,
+				FA0B7EA71A95902C000E1D17 /* wrap_Decoder.cpp in Sources */,
+				FA0B7E1C1A95902C000E1D17 /* MouseJoint.cpp in Sources */,
+				FA0B7CF51A95902C000E1D17 /* File.cpp in Sources */,
+				FA0B7E341A95902C000E1D17 /* WeldJoint.cpp in Sources */,
+				FA0B7D5C1A95902C000E1D17 /* wrap_Font.cpp in Sources */,
+				FA0B7B221A958EA3000E1D17 /* luasocket.cpp in Sources */,
+				FA0B7D311A95902C000E1D17 /* Graphics.cpp in Sources */,
+				FA0B7E9E1A95902C000E1D17 /* WaveDecoder.cpp in Sources */,
+				FA0B7EB31A95902C000E1D17 /* System.cpp in Sources */,
+				FA0B7D1C1A95902C000E1D17 /* GlyphData.cpp in Sources */,
+				FA0B7AAE1A958EA3000E1D17 /* b2WheelJoint.cpp in Sources */,
+				FA0B7E671A95902C000E1D17 /* wrap_PrismaticJoint.cpp in Sources */,
+				FA0B7DCE1A95902C000E1D17 /* wrap_Keyboard.cpp in Sources */,
+				FA0B7EE61A95902D000E1D17 /* Window.cpp in Sources */,
+				FA0B7E3A1A95902C000E1D17 /* World.cpp in Sources */,
+				FA0B79471A958E3B000E1D17 /* Vector.cpp in Sources */,
+				FA0B7B001A958EA3000E1D17 /* options.c in Sources */,
+				FA0B7E7F1A95902C000E1D17 /* Joint.cpp in Sources */,
+				FA0B7AE81A958EA3000E1D17 /* except.c in Sources */,
+				FA0B7DB21A95902C000E1D17 /* wrap_Image.cpp in Sources */,
+				FA0B7E891A95902C000E1D17 /* Decoder.cpp in Sources */,
+				FA0B7A591A958EA3000E1D17 /* b2StackAllocator.cpp in Sources */,
+				FA0B7E3D1A95902C000E1D17 /* wrap_Body.cpp in Sources */,
+				FA0B7D7A1A95902C000E1D17 /* Quad.cpp in Sources */,
+				FA620A3B1AA305F6005DB4C2 /* types.cpp in Sources */,
+				FA0B7DD41A95902C000E1D17 /* BezierCurve.cpp in Sources */,
+				FA0B7E7C1A95902C000E1D17 /* wrap_World.cpp in Sources */,
+				FA0B7B0C1A958EA3000E1D17 /* tcp.c in Sources */,
+				FA0B7D911A95902C000E1D17 /* FormatHandler.cpp in Sources */,
+				FA0B7D431A95902C000E1D17 /* OpenGL.cpp in Sources */,
+				FA0B7AF21A958EA3000E1D17 /* io.c in Sources */,
+				FA0B7DBF1A95902C000E1D17 /* JoystickModule.cpp in Sources */,
+				FA0B7D4F1A95902C000E1D17 /* SpriteBatch.cpp in Sources */,
+				FA0B7A9F1A958EA3000E1D17 /* b2PrismaticJoint.cpp in Sources */,
+				FA0B79331A958E3B000E1D17 /* Object.cpp in Sources */,
+				FA0B7E5B1A95902C000E1D17 /* wrap_MotorJoint.cpp in Sources */,
+				FA0B79441A958E3B000E1D17 /* Variant.cpp in Sources */,
+				FA0B7DD71A95902C000E1D17 /* MathModule.cpp in Sources */,
+				FA0B7D101A95902C000E1D17 /* BMFontRasterizer.cpp in Sources */,
+				FA0B7E9B1A95902C000E1D17 /* VorbisDecoder.cpp in Sources */,
+				FA0B7E4C1A95902C000E1D17 /* wrap_EdgeShape.cpp in Sources */,
+				FA0B7E251A95902C000E1D17 /* PrismaticJoint.cpp in Sources */,
+				FA0B7A561A958EA3000E1D17 /* b2Settings.cpp in Sources */,
+				FA0B7E611A95902C000E1D17 /* wrap_Physics.cpp in Sources */,
+				FA0B7DC81A95902C000E1D17 /* Keyboard.cpp in Sources */,
+				FA0B7EAD1A95902C000E1D17 /* wrap_SoundData.cpp in Sources */,
+				FA0B7E2E1A95902C000E1D17 /* RopeJoint.cpp in Sources */,
+				FA0B7CE01A95902C000E1D17 /* Source.cpp in Sources */,
+				FA0B7ECF1A95902C000E1D17 /* wrap_LuaThread.cpp in Sources */,
+				FA0B7AA51A958EA3000E1D17 /* b2RevoluteJoint.cpp in Sources */,
+				FA0B7EA11A95902C000E1D17 /* Sound.cpp in Sources */,
+				FA0B7DE61A95902C000E1D17 /* Cursor.cpp in Sources */,
+				FA0B7EDC1A95902D000E1D17 /* Touch.cpp in Sources */,
+				FA0B7CE91A95902C000E1D17 /* Event.cpp in Sources */,
+				FA0B7A961A958EA3000E1D17 /* b2Joint.cpp in Sources */,
+				FA0B7A621A958EA3000E1D17 /* b2ContactManager.cpp in Sources */,
+				FA0B7A2F1A958EA3000E1D17 /* b2CollideEdge.cpp in Sources */,
+				FA0B7ADA1A958EA3000E1D17 /* glad.cpp in Sources */,
+				FA0B7E1F1A95902C000E1D17 /* Physics.cpp in Sources */,
+				FA0B7E821A95902C000E1D17 /* Shape.cpp in Sources */,
+				FA0B7ACE1A958EA3000E1D17 /* packet.c in Sources */,
+				FA0B7ED51A95902D000E1D17 /* Timer.cpp in Sources */,
+				FA0B7AA81A958EA3000E1D17 /* b2RopeJoint.cpp in Sources */,
+				FA0B7ACC1A958EA3000E1D17 /* list.c in Sources */,
+				FA0B7DEF1A95902C000E1D17 /* Mouse.cpp in Sources */,
+				FA0B79251A958E3B000E1D17 /* Exception.cpp in Sources */,
+				FA0B7D291A95902C000E1D17 /* wrap_GlyphData.cpp in Sources */,
+				FA0B7DE31A95902C000E1D17 /* wrap_RandomGenerator.cpp in Sources */,
+				FA0B7AD71A958EA3000E1D17 /* win32.c in Sources */,
+				FA0B7AE51A958EA3000E1D17 /* buffer.c in Sources */,
+				FA0B7D0D1A95902C000E1D17 /* wrap_Filesystem.cpp in Sources */,
+				FA0B79211A958E3B000E1D17 /* delay.cpp in Sources */,
+				FA0B7DB51A95902C000E1D17 /* wrap_ImageData.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		FA577AAA16C7507900860150 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				FA0B7D731A95902C000E1D17 /* wrap_Text.cpp in Sources */,
+				FA0B7DDF1A95902C000E1D17 /* wrap_Math.cpp in Sources */,
+				FA0B7DA81A95902C000E1D17 /* PVRHandler.cpp in Sources */,
+				FA0B7EC51A95902C000E1D17 /* ThreadModule.cpp in Sources */,
+				FA0B7D2B1A95902C000E1D17 /* wrap_Rasterizer.cpp in Sources */,
+				FA0B7D581A95902C000E1D17 /* wrap_Canvas.cpp in Sources */,
+				FA0B7E8E1A95902C000E1D17 /* GmeDecoder.cpp in Sources */,
+				FA0B7CD61A95902C000E1D17 /* Audio.cpp in Sources */,
+				FA0B7A9E1A958EA3000E1D17 /* b2PrismaticJoint.cpp in Sources */,
+				FA0B7EAF1A95902C000E1D17 /* System.cpp in Sources */,
+				FA0B7EE21A95902D000E1D17 /* Window.cpp in Sources */,
+				FA0B791B1A958E3B000E1D17 /* b64.cpp in Sources */,
+				FA0B7EC11A95902C000E1D17 /* threads.cpp in Sources */,
+				FA0B79321A958E3B000E1D17 /* Object.cpp in Sources */,
+				FA0B7D001A95902C000E1D17 /* Filesystem.cpp in Sources */,
+				FA0B7ED81A95902D000E1D17 /* wrap_Timer.cpp in Sources */,
+				FA0B7DD01A95902C000E1D17 /* love.cpp in Sources */,
+				FA0B7A521A958EA3000E1D17 /* b2Math.cpp in Sources */,
+				FA0B7D211A95902C000E1D17 /* Rasterizer.cpp in Sources */,
+				FA0B7B131A958EA3000E1D17 /* udp.c in Sources */,
+				FA0B7D7C1A95902C000E1D17 /* Texture.cpp in Sources */,
+				FA0B7ECB1A95902C000E1D17 /* wrap_Channel.cpp in Sources */,
+				FA0B7E6C1A95902C000E1D17 /* wrap_RevoluteJoint.cpp in Sources */,
+				FA0B7AFA1A958EA3000E1D17 /* mime.c in Sources */,
+				FA0B7A5E1A958EA3000E1D17 /* b2Body.cpp in Sources */,
+				FA0B7B0E1A958EA3000E1D17 /* timeout.c in Sources */,
+				FA0B7E631A95902C000E1D17 /* wrap_PolygonShape.cpp in Sources */,
+				FA0B7E721A95902C000E1D17 /* wrap_Shape.cpp in Sources */,
+				FA0B7CFD1A95902C000E1D17 /* File.cpp in Sources */,
+				FA0B7A2E1A958EA3000E1D17 /* b2CollideEdge.cpp in Sources */,
+				FA0B7E691A95902C000E1D17 /* wrap_PulleyJoint.cpp in Sources */,
+				FA0B7DB71A95902C000E1D17 /* Joystick.cpp in Sources */,
+				FA0B7A321A958EA3000E1D17 /* b2Collision.cpp in Sources */,
+				FA0B7D361A95902C000E1D17 /* Font.cpp in Sources */,
+				FA0B7E3F1A95902C000E1D17 /* wrap_ChainShape.cpp in Sources */,
+				FA0B7DEB1A95902C000E1D17 /* Cursor.cpp in Sources */,
+				FA0B7D861A95902C000E1D17 /* ImageData.cpp in Sources */,
+				FA0B7A3E1A958EA3000E1D17 /* b2ChainShape.cpp in Sources */,
+				FA0B7E0F1A95902C000E1D17 /* FrictionJoint.cpp in Sources */,
+				FA620A351AA2F8DB005DB4C2 /* wrap_Texture.cpp in Sources */,
+				FA0B7D091A95902C000E1D17 /* wrap_FileData.cpp in Sources */,
+				FA0B7B341A958EA3000E1D17 /* wuff_convert.c in Sources */,
+				FA0B7CF11A95902C000E1D17 /* DroppedFile.cpp in Sources */,
+				FA0B7D891A95902C000E1D17 /* CompressedData.cpp in Sources */,
+				FA0B7B031A958EA3000E1D17 /* select.c in Sources */,
+				FA0B7D1E1A95902C000E1D17 /* ImageRasterizer.cpp in Sources */,
+				FA0B7EA31A95902C000E1D17 /* SoundData.cpp in Sources */,
+				FA0B7D031A95902C000E1D17 /* wrap_DroppedFile.cpp in Sources */,
+				FA0B79291A958E3B000E1D17 /* Matrix.cpp in Sources */,
+				FA0B7D451A95902C000E1D17 /* ParticleSystem.cpp in Sources */,
+				FA8951A21AA2EDF300EC385A /* wrap_Event.cpp in Sources */,
+				FA0B7ABF1A958EA3000E1D17 /* host.c in Sources */,
+				FA0B7D4B1A95902C000E1D17 /* Shader.cpp in Sources */,
+				FA0B7A581A958EA3000E1D17 /* b2StackAllocator.cpp in Sources */,
+				FA0B7A301A958EA3000E1D17 /* b2CollidePolygon.cpp in Sources */,
+				FA0B7A641A958EA3000E1D17 /* b2Fixture.cpp in Sources */,
+				FA0B7E181A95902C000E1D17 /* MotorJoint.cpp in Sources */,
+				FA0B7E4E1A95902C000E1D17 /* wrap_Fixture.cpp in Sources */,
+				FA0B7EBE1A95902C000E1D17 /* Thread.cpp in Sources */,
+				FA0B7EB81A95902C000E1D17 /* Channel.cpp in Sources */,
+				FA0B7AB11A958EA3000E1D17 /* b2Rope.cpp in Sources */,
+				FA0B7A351A958EA3000E1D17 /* b2Distance.cpp in Sources */,
+				FA0B7E911A95902C000E1D17 /* ModPlugDecoder.cpp in Sources */,
+				FA0B7E511A95902C000E1D17 /* wrap_FrictionJoint.cpp in Sources */,
+				FA0B7AD61A958EA3000E1D17 /* win32.c in Sources */,
+				FA0B7B161A958EA3000E1D17 /* unix.c in Sources */,
+				FA0B7E0C1A95902C000E1D17 /* Fixture.cpp in Sources */,
+				FA0B7D181A95902C000E1D17 /* TrueTypeRasterizer.cpp in Sources */,
+				FA0B7CFA1A95902C000E1D17 /* Filesystem.cpp in Sources */,
+				FA0B7D3C1A95902C000E1D17 /* Image.cpp in Sources */,
+				FA0B7A8C1A958EA3000E1D17 /* b2DistanceJoint.cpp in Sources */,
+				FA0B7E421A95902C000E1D17 /* wrap_CircleShape.cpp in Sources */,
+				FA0B7DE81A95902C000E1D17 /* Mouse.cpp in Sources */,
+				FA0B7CE51A95902C000E1D17 /* wrap_Source.cpp in Sources */,
+				FA0B792C1A958E3B000E1D17 /* Memoizer.cpp in Sources */,
+				FA0B7CCD1A95902C000E1D17 /* Audio.cpp in Sources */,
+				FA0B7DCA1A95902C000E1D17 /* Keyboard.cpp in Sources */,
+				FA0B7AA41A958EA3000E1D17 /* b2RevoluteJoint.cpp in Sources */,
+				FA0B7DFA1A95902C000E1D17 /* Body.cpp in Sources */,
+				FA0B7ED11A95902C000E1D17 /* wrap_ThreadModule.cpp in Sources */,
+				FA0B7EDF1A95902D000E1D17 /* wrap_Touch.cpp in Sources */,
+				FA0B794A1A958E3B000E1D17 /* wrap_Data.cpp in Sources */,
+				FA0B7CDC1A95902C000E1D17 /* Source.cpp in Sources */,
+				FA0B7DC41A95902C000E1D17 /* wrap_JoystickModule.cpp in Sources */,
+				FA0B7E6F1A95902C000E1D17 /* wrap_RopeJoint.cpp in Sources */,
+				FA0B7AB51A958EA3000E1D17 /* ddsparse.cpp in Sources */,
+				FA0B7D9C1A95902C000E1D17 /* JPEGHandler.cpp in Sources */,
+				FA0B7A441A958EA3000E1D17 /* b2EdgeShape.cpp in Sources */,
+				FA0B79461A958E3B000E1D17 /* Vector.cpp in Sources */,
+				FA0B7DBB1A95902C000E1D17 /* Joystick.cpp in Sources */,
+				FA0B7DAE1A95902C000E1D17 /* wrap_CompressedData.cpp in Sources */,
+				FA0B7A6E1A958EA3000E1D17 /* b2WorldCallbacks.cpp in Sources */,
+				FA0B7A831A958EA3000E1D17 /* b2EdgeAndPolygonContact.cpp in Sources */,
+				FA0B7D671A95902C000E1D17 /* wrap_ParticleSystem.cpp in Sources */,
+				FA0B7AA11A958EA3000E1D17 /* b2PulleyJoint.cpp in Sources */,
+				FA0B7B211A958EA3000E1D17 /* luasocket.cpp in Sources */,
+				FA0B7D641A95902C000E1D17 /* wrap_Mesh.cpp in Sources */,
+				FA0B7A5B1A958EA3000E1D17 /* b2Timer.cpp in Sources */,
+				FA0B7CD91A95902C000E1D17 /* Pool.cpp in Sources */,
+				FA0B7E151A95902C000E1D17 /* Joint.cpp in Sources */,
+				FA0B7EE81A95902D000E1D17 /* wrap_Window.cpp in Sources */,
+				FA0B7AF11A958EA3000E1D17 /* io.c in Sources */,
+				FA0B7E271A95902C000E1D17 /* PulleyJoint.cpp in Sources */,
+				FA0B7B301A958EA3000E1D17 /* wuff.c in Sources */,
+				FA0B7E031A95902C000E1D17 /* Contact.cpp in Sources */,
+				FA0B7D821A95902C000E1D17 /* CompressedData.cpp in Sources */,
+				FA0B7A7A1A958EA3000E1D17 /* b2Contact.cpp in Sources */,
+				FA0B7DF11A95902C000E1D17 /* wrap_Cursor.cpp in Sources */,
+				FA0B7E001A95902C000E1D17 /* CircleShape.cpp in Sources */,
+				FA0B7E451A95902C000E1D17 /* wrap_Contact.cpp in Sources */,
+				FA0B7D3F1A95902C000E1D17 /* Mesh.cpp in Sources */,
+				FA0B7D151A95902C000E1D17 /* Font.cpp in Sources */,
+				FA0B7EB51A95902C000E1D17 /* wrap_System.cpp in Sources */,
+				FA0B7DAB1A95902C000E1D17 /* STBHandler.cpp in Sources */,
+				FA0B7AB81A958EA3000E1D17 /* enet.cpp in Sources */,
+				FA0B7DD91A95902C000E1D17 /* RandomGenerator.cpp in Sources */,
+				FA0B7A9B1A958EA3000E1D17 /* b2MouseJoint.cpp in Sources */,
+				FA0B7D7F1A95902C000E1D17 /* Volatile.cpp in Sources */,
+				FA0B7A3B1A958EA3000E1D17 /* b2TimeOfImpact.cpp in Sources */,
+				FA0B7EBB1A95902C000E1D17 /* LuaThread.cpp in Sources */,
+				FA0B79381A958E3B000E1D17 /* Reference.cpp in Sources */,
+				FA0B7D391A95902C000E1D17 /* Graphics.cpp in Sources */,
+				FA0B79361A958E3B000E1D17 /* OSX.mm in Sources */,
+				FA0B7E121A95902C000E1D17 /* GearJoint.cpp in Sources */,
+				FA0B7DC11A95902C000E1D17 /* wrap_Joystick.cpp in Sources */,
+				FA0B7CD31A95902C000E1D17 /* Source.cpp in Sources */,
+				FA0B7A411A958EA3000E1D17 /* b2CircleShape.cpp in Sources */,
+				FA0B7CD01A95902C000E1D17 /* Audio.cpp in Sources */,
+				FA0B7D121A95902C000E1D17 /* Font.cpp in Sources */,
+				FA0B7EC81A95902C000E1D17 /* threads.cpp in Sources */,
+				FA0B7A6B1A958EA3000E1D17 /* b2World.cpp in Sources */,
+				FA0B7D5E1A95902C000E1D17 /* wrap_Graphics.cpp in Sources */,
+				FA0B7A801A958EA3000E1D17 /* b2EdgeAndCircleContact.cpp in Sources */,
+				FA0B7E541A95902C000E1D17 /* wrap_GearJoint.cpp in Sources */,
+				FA0B7E781A95902C000E1D17 /* wrap_WheelJoint.cpp in Sources */,
+				FA0B7DDC1A95902C000E1D17 /* wrap_BezierCurve.cpp in Sources */,
+				FA0B7AF71A958EA3000E1D17 /* luasocket.c in Sources */,
+				FA0B7A951A958EA3000E1D17 /* b2Joint.cpp in Sources */,
+				FA0B7D061A95902C000E1D17 /* wrap_File.cpp in Sources */,
+				FA0B7A4E1A958EA3000E1D17 /* b2Draw.cpp in Sources */,
+				FA0B7AEE1A958EA3000E1D17 /* inet.c in Sources */,
+				FA0B7D931A95902C000E1D17 /* Image.cpp in Sources */,
+				FA0B7D9F1A95902C000E1D17 /* KTXHandler.cpp in Sources */,
+				FA0B7A2C1A958EA3000E1D17 /* b2CollideCircle.cpp in Sources */,
+				FA0B7CEB1A95902C000E1D17 /* Event.cpp in Sources */,
+				FA0B7B0B1A958EA3000E1D17 /* tcp.c in Sources */,
+				FA0B7D961A95902C000E1D17 /* ImageData.cpp in Sources */,
+				FA0B7E571A95902C000E1D17 /* wrap_Joint.cpp in Sources */,
+				FA0B7E301A95902C000E1D17 /* Shape.cpp in Sources */,
+				FA0B7E481A95902C000E1D17 /* wrap_DistanceJoint.cpp in Sources */,
+				FA0B7A8F1A958EA3000E1D17 /* b2FrictionJoint.cpp in Sources */,
+				FA0B792F1A958E3B000E1D17 /* Module.cpp in Sources */,
+				FA0B7E2A1A95902C000E1D17 /* RevoluteJoint.cpp in Sources */,
+				FA0B7A711A958EA3000E1D17 /* b2ChainAndCircleContact.cpp in Sources */,
+				FA0B7D251A95902C000E1D17 /* wrap_Font.cpp in Sources */,
+				FA0B7E091A95902C000E1D17 /* EdgeShape.cpp in Sources */,
+				FA0B7CF71A95902C000E1D17 /* FileData.cpp in Sources */,
+				FA0B7DA51A95902C000E1D17 /* PNGHandler.cpp in Sources */,
+				FA0B7B371A958EA3000E1D17 /* wuff_internal.c in Sources */,
+				FA0B7E971A95902C000E1D17 /* Sound.cpp in Sources */,
+				FA0B7E361A95902C000E1D17 /* WheelJoint.cpp in Sources */,
+				FA0B7A471A958EA3000E1D17 /* b2PolygonShape.cpp in Sources */,
+				FA0B7D8D1A95902C000E1D17 /* ddsHandler.cpp in Sources */,
+				FA0B7DFD1A95902C000E1D17 /* ChainShape.cpp in Sources */,
+				FA0B79201A958E3B000E1D17 /* delay.cpp in Sources */,
+				FA0B7D611A95902C000E1D17 /* wrap_Image.cpp in Sources */,
+				FA0B7A4B1A958EA3000E1D17 /* b2BlockAllocator.cpp in Sources */,
+				FA0B7A551A958EA3000E1D17 /* b2Settings.cpp in Sources */,
+				FA0B7EA91A95902C000E1D17 /* wrap_Sound.cpp in Sources */,
+				FA0B7A981A958EA3000E1D17 /* b2MotorJoint.cpp in Sources */,
+				FA0B7E061A95902C000E1D17 /* DistanceJoint.cpp in Sources */,
+				FA620A321AA2F8DB005DB4C2 /* wrap_Quad.cpp in Sources */,
+				FA0B793B1A958E3B000E1D17 /* runtime.cpp in Sources */,
+				FA0B7D991A95902C000E1D17 /* ImageIOHandler.cpp in Sources */,
+				FA0B7E5D1A95902C000E1D17 /* wrap_MouseJoint.cpp in Sources */,
+				FA0B7A741A958EA3000E1D17 /* b2ChainAndPolygonContact.cpp in Sources */,
+				FA0B7AD41A958EA3000E1D17 /* unix.c in Sources */,
+				FA0B7A771A958EA3000E1D17 /* b2CircleContact.cpp in Sources */,
+				FA0B7D701A95902C000E1D17 /* wrap_SpriteBatch.cpp in Sources */,
+				FA0B7D331A95902C000E1D17 /* Canvas.cpp in Sources */,
+				FA0B7E941A95902C000E1D17 /* Mpg123Decoder.cpp in Sources */,
+				FA0B7E8B1A95902C000E1D17 /* FLACDecoder.cpp in Sources */,
+				FA0B7B3A1A958EA3000E1D17 /* wuff_memory.c in Sources */,
+				FA0B7A381A958EA3000E1D17 /* b2DynamicTree.cpp in Sources */,
+				FA0B7D481A95902C000E1D17 /* Polyline.cpp in Sources */,
+				FA0B7CE21A95902C000E1D17 /* wrap_Audio.cpp in Sources */,
+				FA0B7AAA1A958EA3000E1D17 /* b2WeldJoint.cpp in Sources */,
+				FA0B7DF71A95902C000E1D17 /* Body.cpp in Sources */,
+				FA0B7DF41A95902C000E1D17 /* wrap_Mouse.cpp in Sources */,
+				FA0B7D6D1A95902C000E1D17 /* wrap_Shader.cpp in Sources */,
+				FA0B7E851A95902C000E1D17 /* CoreAudioDecoder.cpp in Sources */,
+				FA0B7E751A95902C000E1D17 /* wrap_WeldJoint.cpp in Sources */,
+				FA0B7D551A95902C000E1D17 /* VertexBuffer.cpp in Sources */,
+				FA0B7AFF1A958EA3000E1D17 /* options.c in Sources */,
+				FA0B7E211A95902C000E1D17 /* PolygonShape.cpp in Sources */,
+				FA0B7AE41A958EA3000E1D17 /* buffer.c in Sources */,
+				FA0B7D511A95902C000E1D17 /* Text.cpp in Sources */,
+				FA0B7DA21A95902C000E1D17 /* PKMHandler.cpp in Sources */,
+				FA0B7ABA1A958EA3000E1D17 /* callbacks.c in Sources */,
+				FA0B7EA61A95902C000E1D17 /* wrap_Decoder.cpp in Sources */,
+				FA0B7E1B1A95902C000E1D17 /* MouseJoint.cpp in Sources */,
+				FA0B7CF41A95902C000E1D17 /* File.cpp in Sources */,
+				FA0B7E331A95902C000E1D17 /* WeldJoint.cpp in Sources */,
+				FA0B7D5B1A95902C000E1D17 /* wrap_Font.cpp in Sources */,
+				FA0B7AE71A958EA3000E1D17 /* except.c in Sources */,
+				FA0B7D301A95902C000E1D17 /* Graphics.cpp in Sources */,
+				FA0B7E9D1A95902C000E1D17 /* WaveDecoder.cpp in Sources */,
+				FA0B7EB21A95902C000E1D17 /* System.cpp in Sources */,
+				FA0B7D1B1A95902C000E1D17 /* GlyphData.cpp in Sources */,
+				FA0B7AD11A958EA3000E1D17 /* protocol.c in Sources */,
+				FA0B7E661A95902C000E1D17 /* wrap_PrismaticJoint.cpp in Sources */,
+				FA0B7DCD1A95902C000E1D17 /* wrap_Keyboard.cpp in Sources */,
+				FA0B7EE51A95902D000E1D17 /* Window.cpp in Sources */,
+				FA0B7E391A95902C000E1D17 /* World.cpp in Sources */,
+				FA0B7ABD1A958EA3000E1D17 /* compress.c in Sources */,
+				FA0B7ACB1A958EA3000E1D17 /* list.c in Sources */,
+				FA0B7E7E1A95902C000E1D17 /* Joint.cpp in Sources */,
+				FA0B7A861A958EA3000E1D17 /* b2PolygonAndCircleContact.cpp in Sources */,
+				FA0B7DB11A95902C000E1D17 /* wrap_Image.cpp in Sources */,
+				FA0B7E881A95902C000E1D17 /* Decoder.cpp in Sources */,
+				FA0B7B1B1A958EA3000E1D17 /* usocket.c in Sources */,
+				FA0B7E3C1A95902C000E1D17 /* wrap_Body.cpp in Sources */,
+				FA0B7D791A95902C000E1D17 /* Quad.cpp in Sources */,
+				FA620A3A1AA305F6005DB4C2 /* types.cpp in Sources */,
+				FA0B7DD31A95902C000E1D17 /* BezierCurve.cpp in Sources */,
+				FA0B7E7B1A95902C000E1D17 /* wrap_World.cpp in Sources */,
+				FA0B7B281A958EA3000E1D17 /* simplexnoise1234.cpp in Sources */,
+				FA0B7D901A95902C000E1D17 /* FormatHandler.cpp in Sources */,
+				FA0B7D421A95902C000E1D17 /* OpenGL.cpp in Sources */,
+				FA0B7A671A958EA3000E1D17 /* b2Island.cpp in Sources */,
+				FA0B7DBE1A95902C000E1D17 /* JoystickModule.cpp in Sources */,
+				FA0B7D4E1A95902C000E1D17 /* SpriteBatch.cpp in Sources */,
+				FA0B7ACD1A958EA3000E1D17 /* packet.c in Sources */,
+				FA0B7A921A958EA3000E1D17 /* b2GearJoint.cpp in Sources */,
+				FA0B7E5A1A95902C000E1D17 /* wrap_MotorJoint.cpp in Sources */,
+				FA0B7AA71A958EA3000E1D17 /* b2RopeJoint.cpp in Sources */,
+				FA0B7DD61A95902C000E1D17 /* MathModule.cpp in Sources */,
+				FA0B7D0F1A95902C000E1D17 /* BMFontRasterizer.cpp in Sources */,
+				FA0B7E9A1A95902C000E1D17 /* VorbisDecoder.cpp in Sources */,
+				FA0B7E4B1A95902C000E1D17 /* wrap_EdgeShape.cpp in Sources */,
+				FA0B7E241A95902C000E1D17 /* PrismaticJoint.cpp in Sources */,
+				FA0B7A7D1A958EA3000E1D17 /* b2ContactSolver.cpp in Sources */,
+				FA0B7E601A95902C000E1D17 /* wrap_Physics.cpp in Sources */,
+				FA0B7DC71A95902C000E1D17 /* Keyboard.cpp in Sources */,
+				FA0B7EAC1A95902C000E1D17 /* wrap_SoundData.cpp in Sources */,
+				FA0B7E2D1A95902C000E1D17 /* RopeJoint.cpp in Sources */,
+				FA0B7CDF1A95902C000E1D17 /* Source.cpp in Sources */,
+				FA0B7ECE1A95902C000E1D17 /* wrap_LuaThread.cpp in Sources */,
+				FA0B79431A958E3B000E1D17 /* Variant.cpp in Sources */,
+				FA0B7EA01A95902C000E1D17 /* Sound.cpp in Sources */,
+				FA0B7DE51A95902C000E1D17 /* Cursor.cpp in Sources */,
+				FA0B7EDB1A95902D000E1D17 /* Touch.cpp in Sources */,
+				FA0B7CE81A95902C000E1D17 /* Event.cpp in Sources */,
+				FA0B7ACF1A958EA3000E1D17 /* peer.c in Sources */,
+				FA0B7ADE1A958EA3000E1D17 /* lodepng.cpp in Sources */,
+				FA0B7A291A958EA3000E1D17 /* b2BroadPhase.cpp in Sources */,
+				FA0B7A891A958EA3000E1D17 /* b2PolygonContact.cpp in Sources */,
+				FA0B7E1E1A95902C000E1D17 /* Physics.cpp in Sources */,
+				FA0B7E811A95902C000E1D17 /* Shape.cpp in Sources */,
+				FA0B7B251A958EA3000E1D17 /* lutf8lib.c in Sources */,
+				FA0B7ED41A95902D000E1D17 /* Timer.cpp in Sources */,
+				FA0B7A611A958EA3000E1D17 /* b2ContactManager.cpp in Sources */,
+				FA0B7AAD1A958EA3000E1D17 /* b2WheelJoint.cpp in Sources */,
+				FA0B7DEE1A95902C000E1D17 /* Mouse.cpp in Sources */,
+				FA0B7AE11A958EA3000E1D17 /* auxiliar.c in Sources */,
+				FA0B7D281A95902C000E1D17 /* wrap_GlyphData.cpp in Sources */,
+				FA0B7DE21A95902C000E1D17 /* wrap_RandomGenerator.cpp in Sources */,
+				FA0B79401A958E3B000E1D17 /* utf8.cpp in Sources */,
+				FA0B79241A958E3B000E1D17 /* Exception.cpp in Sources */,
+				FA0B7D0C1A95902C000E1D17 /* wrap_Filesystem.cpp in Sources */,
+				FA0B7AD91A958EA3000E1D17 /* glad.cpp in Sources */,
+				FA0B7DB41A95902C000E1D17 /* wrap_ImageData.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+		10D5479E63C26BB35EB5482E /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				DEAD_CODE_STRIPPING = YES;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				FRAMEWORK_SEARCH_PATHS = "";
+				GCC_OPTIMIZATION_LEVEL = 3;
+				GCC_PREPROCESSOR_DEFINITIONS = LOVE_APPLE_USE_FRAMEWORKS;
+				GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
+				GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
+				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
+				GCC_WARN_SIGN_COMPARE = YES;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_PARAMETER = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/../../src\"",
+					"\"$(SRCROOT)/../../src/libraries\"",
+					"\"$(SRCROOT)/../../src/modules\"",
+					"\"$(SRCROOT)/../../src/libraries/enet/libenet/include\"",
+				);
+				LD_RUNPATH_SEARCH_PATHS = "@rpath";
+				LIBRARY_SEARCH_PATHS = "";
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				ONLY_ACTIVE_ARCH = NO;
+				SDKROOT = macosx;
+				USE_HEADERMAP = NO;
+				WARNING_CFLAGS = "-Wall";
+			};
+			name = Release;
+		};
+		64274E785071353E1A1D0D4B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				COPY_PHASE_STRIP = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				FRAMEWORK_SEARCH_PATHS = "";
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					LOVE_APPLE_USE_FRAMEWORKS,
+					"DEBUG=1",
+				);
+				GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
+				GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
+				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
+				GCC_WARN_SIGN_COMPARE = YES;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_PARAMETER = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/../../src\"",
+					"\"$(SRCROOT)/../../src/libraries\"",
+					"\"$(SRCROOT)/../../src/modules\"",
+					"\"$(SRCROOT)/../../src/libraries/enet/libenet/include\"",
+				);
+				LD_RUNPATH_SEARCH_PATHS = "@rpath";
+				LIBRARY_SEARCH_PATHS = "";
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = macosx;
+				USE_HEADERMAP = NO;
+				WARNING_CFLAGS = "-Wall";
+			};
+			name = Debug;
+		};
+		FA0B78EF1A958B90000E1D17 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD)";
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"$(inherited)",
+					LOVE_SUPPORT_IMAGEIO,
+					LOVE_SUPPORT_COREAUDIO,
+					LOVE_NO_TURBOJPEG,
+					LOVE_NO_MODPLUG,
+					LOVE_NOMPG123,
+				);
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					ios/include,
+					ios/include/lua,
+					ios/include/freetype,
+					ios/include/SDL2,
+				);
+				IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(PROJECT_DIR)/ios/libraries/freetype",
+					"$(PROJECT_DIR)/ios/libraries/libjpeg-turbo",
+					"$(PROJECT_DIR)/ios/libraries/lua",
+					"$(PROJECT_DIR)/ios/libraries/ogg",
+					"$(PROJECT_DIR)/ios/libraries/physfs",
+					"$(PROJECT_DIR)/ios/libraries/vorbis",
+					"$(PROJECT_DIR)/ios/libraries/SDL2",
+				);
+				MTL_ENABLE_DEBUG_INFO = YES;
+				OTHER_LDFLAGS = "-ObjC";
+				PRODUCT_NAME = love;
+				SDKROOT = iphoneos;
+				SKIP_INSTALL = YES;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
+		FA0B78F01A958B90000E1D17 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD)";
+				COPY_PHASE_STRIP = YES;
+				ENABLE_NS_ASSERTIONS = NO;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"$(inherited)",
+					LOVE_SUPPORT_IMAGEIO,
+					LOVE_SUPPORT_COREAUDIO,
+					LOVE_NO_TURBOJPEG,
+					LOVE_NO_MODPLUG,
+					LOVE_NOMPG123,
+				);
+				GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					ios/include,
+					ios/include/lua,
+					ios/include/freetype,
+					ios/include/SDL2,
+				);
+				IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(PROJECT_DIR)/ios/libraries/freetype",
+					"$(PROJECT_DIR)/ios/libraries/libjpeg-turbo",
+					"$(PROJECT_DIR)/ios/libraries/lua",
+					"$(PROJECT_DIR)/ios/libraries/ogg",
+					"$(PROJECT_DIR)/ios/libraries/physfs",
+					"$(PROJECT_DIR)/ios/libraries/vorbis",
+					"$(PROJECT_DIR)/ios/libraries/SDL2",
+				);
+				MTL_ENABLE_DEBUG_INFO = NO;
+				OTHER_LDFLAGS = "-ObjC";
+				PRODUCT_NAME = love;
+				SDKROOT = iphoneos;
+				SKIP_INSTALL = YES;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		FA0B78F11A958B90000E1D17 /* Distribution */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD)";
+				COPY_PHASE_STRIP = YES;
+				ENABLE_NS_ASSERTIONS = NO;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"$(inherited)",
+					LOVE_SUPPORT_IMAGEIO,
+					LOVE_SUPPORT_COREAUDIO,
+					LOVE_NO_TURBOJPEG,
+					LOVE_NO_MODPLUG,
+					LOVE_NOMPG123,
+				);
+				GCC_WARN_64_TO_32_BIT_CONVERSION = NO;
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					ios/include,
+					ios/include/lua,
+					ios/include/freetype,
+					ios/include/SDL2,
+				);
+				IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(PROJECT_DIR)/ios/libraries/freetype",
+					"$(PROJECT_DIR)/ios/libraries/libjpeg-turbo",
+					"$(PROJECT_DIR)/ios/libraries/lua",
+					"$(PROJECT_DIR)/ios/libraries/ogg",
+					"$(PROJECT_DIR)/ios/libraries/physfs",
+					"$(PROJECT_DIR)/ios/libraries/vorbis",
+					"$(PROJECT_DIR)/ios/libraries/SDL2",
+				);
+				MTL_ENABLE_DEBUG_INFO = NO;
+				OTHER_LDFLAGS = "-ObjC";
+				PRODUCT_NAME = love;
+				SDKROOT = iphoneos;
+				SKIP_INSTALL = YES;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Distribution;
+		};
+		FA5326C4189719C700F7BBF4 /* Distribution */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				DEAD_CODE_STRIPPING = YES;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				FRAMEWORK_SEARCH_PATHS = "";
+				GCC_OPTIMIZATION_LEVEL = 3;
+				GCC_PREPROCESSOR_DEFINITIONS = LOVE_APPLE_USE_FRAMEWORKS;
+				GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
+				GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
+				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
+				GCC_WARN_SIGN_COMPARE = YES;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_PARAMETER = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/../../src\"",
+					"\"$(SRCROOT)/../../src/libraries\"",
+					"\"$(SRCROOT)/../../src/modules\"",
+					"\"$(SRCROOT)/../../src/libraries/enet/libenet/include\"",
+				);
+				LD_RUNPATH_SEARCH_PATHS = "@rpath";
+				LIBRARY_SEARCH_PATHS = "";
+				LLVM_LTO = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				ONLY_ACTIVE_ARCH = NO;
+				SDKROOT = macosx;
+				USE_HEADERMAP = NO;
+				WARNING_CFLAGS = "-Wall";
+			};
+			name = Distribution;
+		};
+		FA5326C5189719C700F7BBF4 /* Distribution */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ENABLE_MODULES = NO;
+				COMBINE_HIDPI_IMAGES = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				DYLIB_COMPATIBILITY_VERSION = 9.0;
+				DYLIB_CURRENT_VERSION = 9.0;
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					/Library/Frameworks,
+				);
+				FRAMEWORK_VERSION = A;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					/Library/Frameworks/FreeType.framework/Headers,
+					/Library/Frameworks/Lua.framework/Headers,
+					/Library/Frameworks/SDL2.framework/Headers,
+				);
+				INFOPLIST_FILE = "macosx/liblove-macosx.plist";
+				LD_DYLIB_INSTALL_NAME = "@rpath/$(EXECUTABLE_PATH)";
+				OTHER_LDFLAGS = (
+					"-undefined",
+					dynamic_lookup,
+				);
+				PRODUCT_NAME = love;
+				SKIP_INSTALL = YES;
+				WRAPPER_EXTENSION = framework;
+			};
+			name = Distribution;
+		};
+		FA577AC016C7507900860150 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ENABLE_MODULES = NO;
+				COMBINE_HIDPI_IMAGES = YES;
+				DYLIB_COMPATIBILITY_VERSION = 9.0;
+				DYLIB_CURRENT_VERSION = 9.0;
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					/Library/Frameworks,
+				);
+				FRAMEWORK_VERSION = A;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					/Library/Frameworks/FreeType.framework/Headers,
+					/Library/Frameworks/Lua.framework/Headers,
+					/Library/Frameworks/SDL2.framework/Headers,
+				);
+				INFOPLIST_FILE = "macosx/liblove-macosx.plist";
+				LD_DYLIB_INSTALL_NAME = "@rpath/$(EXECUTABLE_PATH)";
+				OTHER_LDFLAGS = (
+					"-undefined",
+					dynamic_lookup,
+				);
+				PRODUCT_NAME = love;
+				SKIP_INSTALL = YES;
+				WRAPPER_EXTENSION = framework;
+			};
+			name = Debug;
+		};
+		FA577AC116C7507900860150 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ENABLE_MODULES = NO;
+				COMBINE_HIDPI_IMAGES = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				DYLIB_COMPATIBILITY_VERSION = 9.0;
+				DYLIB_CURRENT_VERSION = 9.0;
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					/Library/Frameworks,
+				);
+				FRAMEWORK_VERSION = A;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					/Library/Frameworks/FreeType.framework/Headers,
+					/Library/Frameworks/Lua.framework/Headers,
+					/Library/Frameworks/SDL2.framework/Headers,
+				);
+				INFOPLIST_FILE = "macosx/liblove-macosx.plist";
+				LD_DYLIB_INSTALL_NAME = "@rpath/$(EXECUTABLE_PATH)";
+				OTHER_LDFLAGS = (
+					"-undefined",
+					dynamic_lookup,
+				);
+				PRODUCT_NAME = love;
+				SKIP_INSTALL = YES;
+				WRAPPER_EXTENSION = framework;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "liblove" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				64274E785071353E1A1D0D4B /* Debug */,
+				10D5479E63C26BB35EB5482E /* Release */,
+				FA5326C4189719C700F7BBF4 /* Distribution */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Debug;
+		};
+		FA0B78EE1A958B90000E1D17 /* Build configuration list for PBXNativeTarget "liblove-ios" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				FA0B78EF1A958B90000E1D17 /* Debug */,
+				FA0B78F01A958B90000E1D17 /* Release */,
+				FA0B78F11A958B90000E1D17 /* Distribution */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Debug;
+		};
+		FA577ABF16C7507900860150 /* Build configuration list for PBXNativeTarget "liblove-macosx" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				FA577AC016C7507900860150 /* Debug */,
+				FA577AC116C7507900860150 /* Release */,
+				FA5326C5189719C700F7BBF4 /* Distribution */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Debug;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 08FB7793FE84155DC02AAC07 /* Project object */;
+}

+ 7 - 0
platform/xcode/liblove.xcodeproj/project.xcworkspace/contents.xcworkspacedata

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:liblove.xcodeproj">
+   </FileRef>
+</Workspace>

+ 0 - 0
platform/macosx/love.xcodeproj/TemplateIcon.icns → platform/xcode/love.xcodeproj/TemplateIcon.icns


+ 0 - 0
platform/macosx/love.xcodeproj/default.pbxuser → platform/xcode/love.xcodeproj/default.pbxuser


+ 817 - 0
platform/xcode/love.xcodeproj/project.pbxproj

@@ -0,0 +1,817 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
+		A9255DD11043183600BA1496 /* FreeType.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A93E6E4810420B4A007D418B /* FreeType.framework */; };
+		A9255DD31043183600BA1496 /* Lua.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A93E6E5310420B57007D418B /* Lua.framework */; };
+		A9255E031043195A00BA1496 /* Vorbis.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A9255E021043195A00BA1496 /* Vorbis.framework */; };
+		A9255F58104324E100BA1496 /* Ogg.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A9255F51104324D700BA1496 /* Ogg.framework */; };
+		A93E6E5510420B57007D418B /* Lua.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A93E6E5310420B57007D418B /* Lua.framework */; };
+		A93E6EED10420BA8007D418B /* love.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E6A3410420AC0007D418B /* love.cpp */; };
+		A9D307F2106635D3004FEDF8 /* physfs.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A9D307E9106635C3004FEDF8 /* physfs.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
+		A9F169AC109E825000FC83D1 /* mpg123.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A9F169A6109E824900FC83D1 /* mpg123.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
+		A9F169AD109E825000FC83D1 /* libmodplug.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = A9F16926109E7BAD00FC83D1 /* libmodplug.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
+		FA08F69616C766E000F007B5 /* love.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA08F69116C765A200F007B5 /* love.framework */; };
+		FA08F69716C766E700F007B5 /* love.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = FA08F69116C765A200F007B5 /* love.framework */; };
+		FA0B78D21A95814A000E1D17 /* love.icns in Resources */ = {isa = PBXBuildFile; fileRef = FA0B78D01A95814A000E1D17 /* love.icns */; };
+		FA0B78D31A95814A000E1D17 /* lovedocument.icns in Resources */ = {isa = PBXBuildFile; fileRef = FA0B78D11A95814A000E1D17 /* lovedocument.icns */; };
+		FA0B7F301A95AC7D000E1D17 /* love.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A93E6A3410420AC0007D418B /* love.cpp */; };
+		FA5D24821A96CA1800C6FC8F /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24811A96CA1800C6FC8F /* OpenAL.framework */; };
+		FA5D24841A96CA2700C6FC8F /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24831A96CA2700C6FC8F /* OpenGLES.framework */; };
+		FA5D24881A96CA8A00C6FC8F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24871A96CA8A00C6FC8F /* UIKit.framework */; };
+		FA5D248A1A96CA9600C6FC8F /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24891A96CA9600C6FC8F /* AudioToolbox.framework */; };
+		FA5D248C1A96CA9E00C6FC8F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D248B1A96CA9E00C6FC8F /* QuartzCore.framework */; };
+		FA5D248E1A96CAA700C6FC8F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D248D1A96CAA700C6FC8F /* CoreGraphics.framework */; };
+		FA5D24901A96CAAE00C6FC8F /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D248F1A96CAAE00C6FC8F /* ImageIO.framework */; };
+		FA5D24921A96CAB300C6FC8F /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24911A96CAB300C6FC8F /* MobileCoreServices.framework */; };
+		FA5D24941A96CABA00C6FC8F /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24931A96CABA00C6FC8F /* libz.dylib */; };
+		FA5D24961A96CAC200C6FC8F /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24951A96CAC200C6FC8F /* CoreMotion.framework */; };
+		FA5D249C1A96CF4300C6FC8F /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FA5D249A1A96CF4300C6FC8F /* Images.xcassets */; };
+		FA5D24C21A96D78000C6FC8F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA5D24C11A96D78000C6FC8F /* Foundation.framework */; };
+		FA5D24D11A96E73300C6FC8F /* liblove.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FA0B7EEF1A95924A000E1D17 /* liblove.a */; };
+		FA77A36518F1172600D23AE9 /* jpeg-turbo.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = FA77A36418F1172600D23AE9 /* jpeg-turbo.framework */; };
+		FA7C636A1A9C49570000FD29 /* Launch Screen.xib in Resources */ = {isa = PBXBuildFile; fileRef = FA7C63691A9C49570000FD29 /* Launch Screen.xib */; };
+		FA9B4A0A16E1579F00074F42 /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA9B4A0916E1579F00074F42 /* SDL2.framework */; };
+		FA9B4A0B16E157B500074F42 /* SDL2.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = FA9B4A0916E1579F00074F42 /* SDL2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
+		FAAFF04716CB120000CCDE45 /* OpenAL-Soft.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = FAAFF04616CB120000CCDE45 /* OpenAL-Soft.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
+		FAC1A449196F5DC600125284 /* license.txt in Resources */ = {isa = PBXBuildFile; fileRef = FAC1A448196F5DC600125284 /* license.txt */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+		FA0B78D71A958301000E1D17 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = FA577A9316C7217800860150 /* liblove.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = FA577AAF16C7507900860150;
+			remoteInfo = Framework;
+		};
+		FA0B7EEE1A95924A000E1D17 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = FA577A9316C7217800860150 /* liblove.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = FA0B78DD1A958B90000E1D17;
+			remoteInfo = "liblove-ios";
+		};
+		FA5D24BA1A96D6FC00C6FC8F /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = FA577A9316C7217800860150 /* liblove.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = FA0B78DC1A958B90000E1D17;
+			remoteInfo = "liblove-ios";
+		};
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		A9255DDE1043185300BA1496 /* Copy Frameworks */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 10;
+			files = (
+				FA77A36518F1172600D23AE9 /* jpeg-turbo.framework in Copy Frameworks */,
+				FA08F69716C766E700F007B5 /* love.framework in Copy Frameworks */,
+				FA9B4A0B16E157B500074F42 /* SDL2.framework in Copy Frameworks */,
+				FAAFF04716CB120000CCDE45 /* OpenAL-Soft.framework in Copy Frameworks */,
+				A9F169AC109E825000FC83D1 /* mpg123.framework in Copy Frameworks */,
+				A9F169AD109E825000FC83D1 /* libmodplug.framework in Copy Frameworks */,
+				A9D307F2106635D3004FEDF8 /* physfs.framework in Copy Frameworks */,
+				A9255F58104324E100BA1496 /* Ogg.framework in Copy Frameworks */,
+				A9255E031043195A00BA1496 /* Vorbis.framework in Copy Frameworks */,
+				A9255DD11043183600BA1496 /* FreeType.framework in Copy Frameworks */,
+				A9255DD31043183600BA1496 /* Lua.framework in Copy Frameworks */,
+			);
+			name = "Copy Frameworks";
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
+		8D1107320486CEB800E47090 /* love.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = love.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		A9255E021043195A00BA1496 /* Vorbis.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Vorbis.framework; path = /Library/Frameworks/Vorbis.framework; sourceTree = "<absolute>"; };
+		A9255F51104324D700BA1496 /* Ogg.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Ogg.framework; path = /Library/Frameworks/Ogg.framework; sourceTree = "<absolute>"; };
+		A93E6A3410420AC0007D418B /* love.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = love.cpp; path = ../../src/love.cpp; sourceTree = "<group>"; };
+		A93E6E4710420B4A007D418B /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
+		A93E6E4810420B4A007D418B /* FreeType.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FreeType.framework; path = /Library/Frameworks/FreeType.framework; sourceTree = "<absolute>"; };
+		A93E6E5310420B57007D418B /* Lua.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Lua.framework; path = /Library/Frameworks/Lua.framework; sourceTree = "<absolute>"; };
+		A97E3842132A9EDE00198A2F /* love-macosx.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "love-macosx.plist"; path = "macosx/love-macosx.plist"; sourceTree = "<group>"; };
+		A9D307E9106635C3004FEDF8 /* physfs.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = physfs.framework; path = /Library/Frameworks/physfs.framework; sourceTree = "<absolute>"; };
+		A9F16926109E7BAD00FC83D1 /* libmodplug.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = libmodplug.framework; path = /Library/Frameworks/libmodplug.framework; sourceTree = "<absolute>"; };
+		A9F169A6109E824900FC83D1 /* mpg123.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = mpg123.framework; path = /Library/Frameworks/mpg123.framework; sourceTree = "<absolute>"; };
+		FA08F69116C765A200F007B5 /* love.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = love.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		FA0B78D01A95814A000E1D17 /* love.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = love.icns; path = macosx/love.icns; sourceTree = "<group>"; };
+		FA0B78D11A95814A000E1D17 /* lovedocument.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = lovedocument.icns; path = macosx/lovedocument.icns; sourceTree = "<group>"; };
+		FA0B7F061A95AAF3000E1D17 /* love.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = love.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		FA577A9316C7217800860150 /* liblove.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = liblove.xcodeproj; sourceTree = "<group>"; };
+		FA5D24811A96CA1800C6FC8F /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/OpenAL.framework; sourceTree = DEVELOPER_DIR; };
+		FA5D24831A96CA2700C6FC8F /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/OpenGLES.framework; sourceTree = DEVELOPER_DIR; };
+		FA5D24871A96CA8A00C6FC8F /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
+		FA5D24891A96CA9600C6FC8F /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/AudioToolbox.framework; sourceTree = DEVELOPER_DIR; };
+		FA5D248B1A96CA9E00C6FC8F /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; };
+		FA5D248D1A96CAA700C6FC8F /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; };
+		FA5D248F1A96CAAE00C6FC8F /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; };
+		FA5D24911A96CAB300C6FC8F /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; };
+		FA5D24931A96CABA00C6FC8F /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/usr/lib/libz.dylib; sourceTree = DEVELOPER_DIR; };
+		FA5D24951A96CAC200C6FC8F /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/CoreMotion.framework; sourceTree = DEVELOPER_DIR; };
+		FA5D24971A96CE1E00C6FC8F /* love-ios.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "love-ios.plist"; path = "ios/love-ios.plist"; sourceTree = "<group>"; };
+		FA5D249A1A96CF4300C6FC8F /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = ios/Images.xcassets; sourceTree = "<group>"; };
+		FA5D24C11A96D78000C6FC8F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
+		FA77A36418F1172600D23AE9 /* jpeg-turbo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = "jpeg-turbo.framework"; path = "/Library/Frameworks/jpeg-turbo.framework"; sourceTree = "<absolute>"; };
+		FA7C63691A9C49570000FD29 /* Launch Screen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = "Launch Screen.xib"; path = "ios/Launch Screen.xib"; sourceTree = "<group>"; };
+		FA9B4A0916E1579F00074F42 /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = /Library/Frameworks/SDL2.framework; sourceTree = "<absolute>"; };
+		FAAFF04616CB120000CCDE45 /* OpenAL-Soft.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = "OpenAL-Soft.framework"; path = "/Library/Frameworks/OpenAL-Soft.framework"; sourceTree = "<absolute>"; };
+		FAC1A448196F5DC600125284 /* license.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = license.txt; path = ../../license.txt; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		8D11072E0486CEB800E47090 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				FA08F69616C766E000F007B5 /* love.framework in Frameworks */,
+				8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
+				A93E6E5510420B57007D418B /* Lua.framework in Frameworks */,
+				FA9B4A0A16E1579F00074F42 /* SDL2.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		FA0B7F031A95AAF3000E1D17 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				FA5D24D11A96E73300C6FC8F /* liblove.a in Frameworks */,
+				FA5D24C21A96D78000C6FC8F /* Foundation.framework in Frameworks */,
+				FA5D24961A96CAC200C6FC8F /* CoreMotion.framework in Frameworks */,
+				FA5D24941A96CABA00C6FC8F /* libz.dylib in Frameworks */,
+				FA5D24921A96CAB300C6FC8F /* MobileCoreServices.framework in Frameworks */,
+				FA5D24901A96CAAE00C6FC8F /* ImageIO.framework in Frameworks */,
+				FA5D248E1A96CAA700C6FC8F /* CoreGraphics.framework in Frameworks */,
+				FA5D248C1A96CA9E00C6FC8F /* QuartzCore.framework in Frameworks */,
+				FA5D248A1A96CA9600C6FC8F /* AudioToolbox.framework in Frameworks */,
+				FA5D24881A96CA8A00C6FC8F /* UIKit.framework in Frameworks */,
+				FA5D24841A96CA2700C6FC8F /* OpenGLES.framework in Frameworks */,
+				FA5D24821A96CA1800C6FC8F /* OpenAL.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		1058C7A0FEA54F0111CA2CBB /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				FA5D24801A96C97900C6FC8F /* ios */,
+				FA0B7EEC1A959249000E1D17 /* macosx */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		19C28FACFE9D520D11CA2CBB /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				8D1107320486CEB800E47090 /* love.app */,
+				FA0B7F061A95AAF3000E1D17 /* love.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		29B97314FDCFA39411CA2CEA /* love */ = {
+			isa = PBXGroup;
+			children = (
+				FA5D249A1A96CF4300C6FC8F /* Images.xcassets */,
+				FA577A9D16C7262E00860150 /* Source */,
+				FA5D24A01A96CF7200C6FC8F /* Supporting Files */,
+				1058C7A0FEA54F0111CA2CBB /* Frameworks */,
+				19C28FACFE9D520D11CA2CBB /* Products */,
+				29B97317FDCFA39411CA2CEA /* Resources */,
+				FA577A9316C7217800860150 /* liblove.xcodeproj */,
+			);
+			name = love;
+			sourceTree = "<group>";
+			usesTabs = 1;
+		};
+		29B97317FDCFA39411CA2CEA /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+				FAC1A448196F5DC600125284 /* license.txt */,
+				FA0B78D01A95814A000E1D17 /* love.icns */,
+				FA0B78D11A95814A000E1D17 /* lovedocument.icns */,
+			);
+			name = Resources;
+			sourceTree = "<group>";
+		};
+		FA0B78D41A958301000E1D17 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				FA0B78D81A958301000E1D17 /* love.framework */,
+				FA0B7EEF1A95924A000E1D17 /* liblove.a */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		FA0B7EEC1A959249000E1D17 /* macosx */ = {
+			isa = PBXGroup;
+			children = (
+				1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
+				A93E6E4810420B4A007D418B /* FreeType.framework */,
+				FA77A36418F1172600D23AE9 /* jpeg-turbo.framework */,
+				A9F16926109E7BAD00FC83D1 /* libmodplug.framework */,
+				FA08F69116C765A200F007B5 /* love.framework */,
+				A93E6E5310420B57007D418B /* Lua.framework */,
+				A9F169A6109E824900FC83D1 /* mpg123.framework */,
+				A9255F51104324D700BA1496 /* Ogg.framework */,
+				FAAFF04616CB120000CCDE45 /* OpenAL-Soft.framework */,
+				A93E6E4710420B4A007D418B /* OpenGL.framework */,
+				A9D307E9106635C3004FEDF8 /* physfs.framework */,
+				FA9B4A0916E1579F00074F42 /* SDL2.framework */,
+				A9255E021043195A00BA1496 /* Vorbis.framework */,
+			);
+			name = macosx;
+			sourceTree = "<group>";
+		};
+		FA577A9D16C7262E00860150 /* Source */ = {
+			isa = PBXGroup;
+			children = (
+				A93E6A3410420AC0007D418B /* love.cpp */,
+			);
+			name = Source;
+			sourceTree = "<group>";
+		};
+		FA5D24801A96C97900C6FC8F /* ios */ = {
+			isa = PBXGroup;
+			children = (
+				FA5D24C11A96D78000C6FC8F /* Foundation.framework */,
+				FA5D24891A96CA9600C6FC8F /* AudioToolbox.framework */,
+				FA5D248D1A96CAA700C6FC8F /* CoreGraphics.framework */,
+				FA5D24951A96CAC200C6FC8F /* CoreMotion.framework */,
+				FA5D248F1A96CAAE00C6FC8F /* ImageIO.framework */,
+				FA5D24931A96CABA00C6FC8F /* libz.dylib */,
+				FA5D24911A96CAB300C6FC8F /* MobileCoreServices.framework */,
+				FA5D24811A96CA1800C6FC8F /* OpenAL.framework */,
+				FA5D24831A96CA2700C6FC8F /* OpenGLES.framework */,
+				FA5D248B1A96CA9E00C6FC8F /* QuartzCore.framework */,
+				FA5D24871A96CA8A00C6FC8F /* UIKit.framework */,
+			);
+			name = ios;
+			sourceTree = "<group>";
+		};
+		FA5D24A01A96CF7200C6FC8F /* Supporting Files */ = {
+			isa = PBXGroup;
+			children = (
+				FA7C63691A9C49570000FD29 /* Launch Screen.xib */,
+				FA5D24971A96CE1E00C6FC8F /* love-ios.plist */,
+				A97E3842132A9EDE00198A2F /* love-macosx.plist */,
+			);
+			name = "Supporting Files";
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		8D1107260486CEB800E47090 /* love-macosx */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "love-macosx" */;
+			buildPhases = (
+				8D1107290486CEB800E47090 /* Resources */,
+				8D11072C0486CEB800E47090 /* Sources */,
+				A9255DDE1043185300BA1496 /* Copy Frameworks */,
+				8D11072E0486CEB800E47090 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "love-macosx";
+			productInstallPath = "$(HOME)/Applications";
+			productName = love;
+			productReference = 8D1107320486CEB800E47090 /* love.app */;
+			productType = "com.apple.product-type.application";
+		};
+		FA0B7F051A95AAF3000E1D17 /* love-ios */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = FA0B7F2E1A95AAF4000E1D17 /* Build configuration list for PBXNativeTarget "love-ios" */;
+			buildPhases = (
+				FA0B7F021A95AAF3000E1D17 /* Sources */,
+				FA0B7F031A95AAF3000E1D17 /* Frameworks */,
+				FA0B7F041A95AAF3000E1D17 /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				FA5D24BB1A96D6FC00C6FC8F /* PBXTargetDependency */,
+			);
+			name = "love-ios";
+			productName = "love-ios";
+			productReference = FA0B7F061A95AAF3000E1D17 /* love.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		29B97313FDCFA39411CA2CEA /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0610;
+				TargetAttributes = {
+					FA0B7F051A95AAF3000E1D17 = {
+						CreatedOnToolsVersion = 6.1.1;
+					};
+				};
+			};
+			buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "love" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 1;
+			knownRegions = (
+				English,
+				Japanese,
+				French,
+				German,
+				Base,
+			);
+			mainGroup = 29B97314FDCFA39411CA2CEA /* love */;
+			projectDirPath = "";
+			projectReferences = (
+				{
+					ProductGroup = FA0B78D41A958301000E1D17 /* Products */;
+					ProjectRef = FA577A9316C7217800860150 /* liblove.xcodeproj */;
+				},
+			);
+			projectRoot = "";
+			targets = (
+				8D1107260486CEB800E47090 /* love-macosx */,
+				FA0B7F051A95AAF3000E1D17 /* love-ios */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXReferenceProxy section */
+		FA0B78D81A958301000E1D17 /* love.framework */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.framework;
+			path = love.framework;
+			remoteRef = FA0B78D71A958301000E1D17 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		FA0B7EEF1A95924A000E1D17 /* liblove.a */ = {
+			isa = PBXReferenceProxy;
+			fileType = archive.ar;
+			path = liblove.a;
+			remoteRef = FA0B7EEE1A95924A000E1D17 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+/* End PBXReferenceProxy section */
+
+/* Begin PBXResourcesBuildPhase section */
+		8D1107290486CEB800E47090 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				FAC1A449196F5DC600125284 /* license.txt in Resources */,
+				FA0B78D31A95814A000E1D17 /* lovedocument.icns in Resources */,
+				FA0B78D21A95814A000E1D17 /* love.icns in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		FA0B7F041A95AAF3000E1D17 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				FA5D249C1A96CF4300C6FC8F /* Images.xcassets in Resources */,
+				FA7C636A1A9C49570000FD29 /* Launch Screen.xib in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		8D11072C0486CEB800E47090 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A93E6EED10420BA8007D418B /* love.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		FA0B7F021A95AAF3000E1D17 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				FA0B7F301A95AC7D000E1D17 /* love.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+		FA5D24BB1A96D6FC00C6FC8F /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = "liblove-ios";
+			targetProxy = FA5D24BA1A96D6FC00C6FC8F /* PBXContainerItemProxy */;
+		};
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+		C01FCF4B08A954540054247B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				COMBINE_HIDPI_IMAGES = YES;
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					/Library/Frameworks,
+					"\"$(SRCROOT)/build/Release\"",
+					"\"$(SRCROOT)/build/Debug\"",
+				);
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					/Library/Frameworks/Lua.framework/Headers,
+					/Library/Frameworks/SDL2.framework/Headers,
+				);
+				INFOPLIST_FILE = "macosx/love-macosx.plist";
+				INSTALL_PATH = /Applications;
+				PRODUCT_NAME = love;
+			};
+			name = Debug;
+		};
+		C01FCF4C08A954540054247B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				COMBINE_HIDPI_IMAGES = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					/Library/Frameworks,
+					"\"$(SRCROOT)/build/Release\"",
+					"\"$(SRCROOT)/build/Debug\"",
+				);
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					/Library/Frameworks/Lua.framework/Headers,
+					/Library/Frameworks/SDL2.framework/Headers,
+				);
+				INFOPLIST_FILE = "macosx/love-macosx.plist";
+				INSTALL_PATH = /Applications;
+				PRODUCT_NAME = love;
+			};
+			name = Release;
+		};
+		C01FCF4F08A954540054247B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				FRAMEWORK_SEARCH_PATHS = "";
+				GCC_INCREASE_PRECOMPILED_HEADER_SHARING = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = LOVE_APPLE_USE_FRAMEWORKS;
+				GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = NO;
+				GCC_WARN_ABOUT_MISSING_NEWLINE = NO;
+				GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
+				GCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = NO;
+				GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
+				GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
+				GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
+				GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO;
+				GCC_WARN_MISSING_PARENTHESES = NO;
+				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO;
+				GCC_WARN_PEDANTIC = NO;
+				GCC_WARN_SHADOW = NO;
+				GCC_WARN_SIGN_COMPARE = YES;
+				GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				HEADER_SEARCH_PATHS = (
+					"\"$(SRCROOT)/../../src\"",
+					"\"$(SRCROOT)/../../src/libraries\"",
+					"\"$(SRCROOT)/../../src/modules\"",
+				);
+				INFOPLIST_FILE = "love-Info.plist";
+				LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks";
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				ONLY_ACTIVE_ARCH = YES;
+				OTHER_LDFLAGS = "";
+				"OTHER_LDFLAGS[arch=x86_64]" = (
+					"-pagezero_size",
+					10000,
+					"-image_base",
+					100000000,
+				);
+				PRODUCT_NAME = love;
+				WARNING_CFLAGS = (
+					"-Wall",
+					"-W",
+				);
+			};
+			name = Debug;
+		};
+		C01FCF5008A954540054247B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				DEPLOYMENT_POSTPROCESSING = NO;
+				FRAMEWORK_SEARCH_PATHS = "";
+				GCC_INPUT_FILETYPE = automatic;
+				GCC_OPTIMIZATION_LEVEL = 3;
+				GCC_PREPROCESSOR_DEFINITIONS = LOVE_APPLE_USE_FRAMEWORKS;
+				GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = NO;
+				GCC_WARN_ABOUT_MISSING_NEWLINE = NO;
+				GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
+				GCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = NO;
+				GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
+				GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
+				GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
+				GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO;
+				GCC_WARN_MISSING_PARENTHESES = NO;
+				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO;
+				GCC_WARN_PEDANTIC = NO;
+				GCC_WARN_SHADOW = NO;
+				GCC_WARN_SIGN_COMPARE = YES;
+				GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO;
+				GCC_WARN_UNUSED_PARAMETER = NO;
+				GCC_WARN_UNUSED_VALUE = NO;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				HEADER_SEARCH_PATHS = (
+					"\"$(SRCROOT)/../../src\"",
+					"\"$(SRCROOT)/../../src/libraries\"",
+					"\"$(SRCROOT)/../../src/modules\"",
+				);
+				INFOPLIST_FILE = "love-Info.plist";
+				LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks";
+				LLVM_LTO = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				ONLY_ACTIVE_ARCH = NO;
+				OTHER_LDFLAGS = "";
+				"OTHER_LDFLAGS[arch=x86_64]" = (
+					"-pagezero_size",
+					10000,
+					"-image_base",
+					100000000,
+				);
+				PRODUCT_NAME = love;
+				SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = YES;
+				WARNING_CFLAGS = (
+					"-Wall",
+					"-W",
+				);
+			};
+			name = Release;
+		};
+		FA0B7F261A95AAF4000E1D17 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					ios/include,
+					ios/include/lua,
+					ios/include/SDL2,
+				);
+				INFOPLIST_FILE = "$(SRCROOT)/ios/love-ios.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				MTL_ENABLE_DEBUG_INFO = YES;
+				PRODUCT_NAME = love;
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
+		FA0B7F271A95AAF4000E1D17 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = YES;
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					ios/include,
+					ios/include/lua,
+					ios/include/SDL2,
+				);
+				INFOPLIST_FILE = "$(SRCROOT)/ios/love-ios.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				MTL_ENABLE_DEBUG_INFO = NO;
+				PRODUCT_NAME = love;
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		FA0B7F281A95AAF4000E1D17 /* Distribution */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = YES;
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					ios/include,
+					ios/include/lua,
+					ios/include/SDL2,
+				);
+				INFOPLIST_FILE = "$(SRCROOT)/ios/love-ios.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 6.0;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				MTL_ENABLE_DEBUG_INFO = NO;
+				PRODUCT_NAME = love;
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Distribution;
+		};
+		FA5326C618971A0900F7BBF4 /* Distribution */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				DEPLOYMENT_POSTPROCESSING = NO;
+				FRAMEWORK_SEARCH_PATHS = "";
+				GCC_INPUT_FILETYPE = automatic;
+				GCC_OPTIMIZATION_LEVEL = 3;
+				GCC_PREPROCESSOR_DEFINITIONS = LOVE_APPLE_USE_FRAMEWORKS;
+				GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = NO;
+				GCC_WARN_ABOUT_MISSING_NEWLINE = NO;
+				GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
+				GCC_WARN_ABOUT_POINTER_SIGNEDNESS = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = NO;
+				GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
+				GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
+				GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
+				GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO;
+				GCC_WARN_MISSING_PARENTHESES = NO;
+				GCC_WARN_NON_VIRTUAL_DESTRUCTOR = NO;
+				GCC_WARN_PEDANTIC = NO;
+				GCC_WARN_SHADOW = NO;
+				GCC_WARN_SIGN_COMPARE = YES;
+				GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = NO;
+				GCC_WARN_UNUSED_PARAMETER = NO;
+				GCC_WARN_UNUSED_VALUE = NO;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				HEADER_SEARCH_PATHS = (
+					"\"$(SRCROOT)/../../src\"",
+					"\"$(SRCROOT)/../../src/libraries\"",
+					"\"$(SRCROOT)/../../src/modules\"",
+				);
+				INFOPLIST_FILE = "love-Info.plist";
+				LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks";
+				LLVM_LTO = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				ONLY_ACTIVE_ARCH = NO;
+				OTHER_LDFLAGS = "";
+				"OTHER_LDFLAGS[arch=x86_64]" = (
+					"-pagezero_size",
+					10000,
+					"-image_base",
+					100000000,
+				);
+				PRODUCT_NAME = love;
+				SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = YES;
+				WARNING_CFLAGS = (
+					"-Wall",
+					"-W",
+				);
+			};
+			name = Distribution;
+		};
+		FA5326C718971A0900F7BBF4 /* Distribution */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_64_BIT)";
+				COMBINE_HIDPI_IMAGES = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					/Library/Frameworks,
+					"\"$(SRCROOT)/build/Release\"",
+					"\"$(SRCROOT)/build/Debug\"",
+				);
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					/Library/Frameworks/Lua.framework/Headers,
+					/Library/Frameworks/SDL2.framework/Headers,
+				);
+				INFOPLIST_FILE = "macosx/love-macosx.plist";
+				INSTALL_PATH = /Applications;
+				PRODUCT_NAME = love;
+			};
+			name = Distribution;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "love-macosx" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				C01FCF4B08A954540054247B /* Debug */,
+				C01FCF4C08A954540054247B /* Release */,
+				FA5326C718971A0900F7BBF4 /* Distribution */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		C01FCF4E08A954540054247B /* Build configuration list for PBXProject "love" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				C01FCF4F08A954540054247B /* Debug */,
+				C01FCF5008A954540054247B /* Release */,
+				FA5326C618971A0900F7BBF4 /* Distribution */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		FA0B7F2E1A95AAF4000E1D17 /* Build configuration list for PBXNativeTarget "love-ios" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				FA0B7F261A95AAF4000E1D17 /* Debug */,
+				FA0B7F271A95AAF4000E1D17 /* Release */,
+				FA0B7F281A95AAF4000E1D17 /* Distribution */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
+}

+ 7 - 0
platform/xcode/love.xcodeproj/project.xcworkspace/contents.xcworkspacedata

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:love.xcodeproj">
+   </FileRef>
+</Workspace>

+ 2 - 2
platform/macosx/Info-Framework.plist → platform/xcode/macosx/liblove-macosx.plist

@@ -17,11 +17,11 @@
 	<key>CFBundlePackageType</key>
 	<string>FMWK</string>
 	<key>CFBundleShortVersionString</key>
-	<string>0.9.2</string>
+	<string>0.10.0</string>
 	<key>CFBundleSignature</key>
 	<string>LoVe</string>
 	<key>CFBundleVersion</key>
-	<string>0.9.2</string>
+	<string>0.10.0</string>
 	<key>NSPrincipalClass</key>
 	<string></string>
 </dict>

+ 16 - 4
platform/macosx/love-Info.plist → platform/xcode/macosx/love-macosx.plist

@@ -8,7 +8,7 @@
 	<array>
 		<dict>
 			<key>CFBundleTypeIconFile</key>
-			<string>LoveDocument.icns</string>
+			<string>lovedocument</string>
 			<key>CFBundleTypeName</key>
 			<string>LÖVE Project</string>
 			<key>CFBundleTypeRole</key>
@@ -32,11 +32,23 @@
 			<key>LSHandlerRank</key>
 			<string>None</string>
 		</dict>
+		<dict>
+			<key>CFBundleTypeIconFile</key>
+			<string>Document</string>
+			<key>CFBundleTypeName</key>
+			<string>Document</string>
+			<key>CFBundleTypeOSTypes</key>
+			<array>
+				<string>****</string>
+			</array>
+			<key>CFBundleTypeRole</key>
+			<string>Editor</string>
+		</dict>
 	</array>
 	<key>CFBundleExecutable</key>
 	<string>love</string>
 	<key>CFBundleIconFile</key>
-	<string>Love.icns</string>
+	<string>love.icns</string>
 	<key>CFBundleIdentifier</key>
 	<string>org.love2d.love</string>
 	<key>CFBundleInfoDictionaryVersion</key>
@@ -46,7 +58,7 @@
 	<key>CFBundlePackageType</key>
 	<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>0.9.2</string>
+	<string>0.10.0</string>
 	<key>CFBundleSignature</key>
 	<string>LoVe</string>
 	<key>LSApplicationCategoryType</key>
@@ -65,7 +77,7 @@
 			<key>UTTypeDescription</key>
 			<string>LÖVE Project</string>
 			<key>UTTypeIconFile</key>
-			<string>LoveDocument.icns</string>
+			<string>lovedocument</string>
 			<key>UTTypeIdentifier</key>
 			<string>org.love2d.love-game</string>
 			<key>UTTypeReferenceURL</key>

+ 0 - 0
platform/macosx/icons/Love.icns → platform/xcode/macosx/love.icns


BIN
platform/xcode/macosx/lovedocument.icns


+ 1 - 1
readme.md

@@ -22,7 +22,7 @@ Run `platform/unix/automagic` from the repository root, then run ./configure and
 ###Mac OS X
 Download the required frameworks from [here][dependencies] and place them in `/Library/Frameworks/`.
 
-Then use the Xcode project found at `platform/macosx/love.xcodeproj`.
+Then use the Xcode project found at `platform/xcode/love.xcodeproj` to build the `love-macosx` target.
 
 Repository information
 ----------------------

+ 0 - 22
src/common/Matrix.cpp

@@ -177,28 +177,6 @@ void Matrix::shear(float kx, float ky)
 	this->operator *=(t);
 }
 
-//                 | x |
-//                 | y |
-//                 | 0 |
-//                 | 1 |
-// | e0 e4 e8  e12 |
-// | e1 e5 e9  e13 |
-// | e2 e6 e10 e14 |
-// | e3 e7 e11 e15 |
-
-void Matrix::transform(Vertex *dst, const Vertex *src, int size) const
-{
-	for (int i = 0; i<size; i++)
-	{
-		// Store in temp variables in case src = dst
-		float x = (e[0]*src[i].x) + (e[4]*src[i].y) + (0) + (e[12]);
-		float y = (e[1]*src[i].x) + (e[5]*src[i].y) + (0) + (e[13]);
-
-		dst[i].x = x;
-		dst[i].y = y;
-	}
-}
-
 Matrix Matrix::ortho(float left, float right, float bottom, float top)
 {
 	Matrix m;

+ 25 - 1
src/common/Matrix.h

@@ -153,7 +153,8 @@ public:
 	 * @param src The source vertices.
 	 * @param size The number of vertices.
 	 **/
-	void transform(Vertex *dst, const Vertex *src, int size) const;
+	template <typename V>
+	void transform(V *dst, const V *src, int size) const;
 
 	/**
 	 * Creates a new orthographic projection matrix with depth in the range of
@@ -173,6 +174,29 @@ private:
 
 }; // Matrix
 
+//                 | x |
+//                 | y |
+//                 | 0 |
+//                 | 1 |
+// | e0 e4 e8  e12 |
+// | e1 e5 e9  e13 |
+// | e2 e6 e10 e14 |
+// | e3 e7 e11 e15 |
+
+template <typename V>
+void Matrix::transform(V *dst, const V *src, int size) const
+{
+	for (int i = 0; i < size; i++)
+	{
+		// Store in temp variables in case src = dst
+		float x = (e[0]*src[i].x) + (e[4]*src[i].y) + (0) + (e[12]);
+		float y = (e[1]*src[i].x) + (e[5]*src[i].y) + (0) + (e[13]);
+
+		dst[i].x = x;
+		dst[i].y = y;
+	}
+}
+
 } //love
 
 #endif// LOVE_MATRIX_H

+ 1 - 0
src/common/Module.h

@@ -51,6 +51,7 @@ public:
 		M_SYSTEM,
 		M_THREAD,
 		M_TIMER,
+		M_TOUCH,
 		M_WINDOW,
 		M_MAX_ENUM
 	};

+ 7 - 1
platform/macosx/OSX.h → src/common/OSX.h

@@ -21,6 +21,10 @@
 #ifndef LOVE_OSX_H
 #define LOVE_OSX_H
 
+#include "config.h"
+
+#ifdef LOVE_MACOSX
+
 #include <string>
 
 namespace love
@@ -30,7 +34,7 @@ namespace osx
 
 /**
  * Returns the filepath of the first detected love file in the Resources folder
- * in love.app.
+ * in the main bundle (love.app.)
  * Returns an empty string if no love file is found.
  **/
 std::string getLoveInResources();
@@ -44,4 +48,6 @@ std::string checkDropEvents();
 } // osx
 } // love
 
+#endif // LOVE_MACOSX
+
 #endif // LOVE_OSX_H

+ 8 - 6
platform/macosx/OSX.mm → src/common/OSX.mm

@@ -18,7 +18,10 @@
  * 3. This notice may not be removed or altered from any source distribution.
  **/
 
-#import "OSX.h"
+#include "OSX.h"
+
+#ifdef LOVE_MACOSX
+
 #import <Foundation/Foundation.h>
 
 #include <SDL2/SDL.h>
@@ -49,9 +52,7 @@ std::string checkDropEvents()
 	std::string dropstr;
 	SDL_Event event;
 
-	bool initvideo = SDL_WasInit(SDL_INIT_VIDEO) != 0;
-	if (!initvideo)
-		SDL_InitSubSystem(SDL_INIT_VIDEO);
+	SDL_InitSubSystem(SDL_INIT_VIDEO);
 
 	SDL_PumpEvents();
 	if (SDL_PeepEvents(&event, 1, SDL_GETEVENT, SDL_DROPFILE, SDL_DROPFILE) > 0)
@@ -63,11 +64,12 @@ std::string checkDropEvents()
 		}
 	}
 
-	if (!initvideo)
-		SDL_QuitSubSystem(SDL_INIT_VIDEO);
+	SDL_QuitSubSystem(SDL_INIT_VIDEO);
 
 	return dropstr;
 }
 
 } // osx
 } // love
+
+#endif // LOVE_MACOSX

+ 14 - 5
src/common/Object.cpp

@@ -25,28 +25,37 @@ namespace love
 {
 
 Object::Object()
+	: count(1)
+{
+}
+
+Object::Object(const Object & /*other*/)
+	: count(1) // Always start with a reference count of 1.
 {
-	count.value = 1;
 }
 
 Object::~Object()
 {
 }
 
-int Object::getReferenceCount()
+int Object::getReferenceCount() const
 {
-	return SDL_AtomicGet(&count);
+	return count;
 }
 
 void Object::retain()
 {
-	SDL_AtomicIncRef(&count);
+	count.fetch_add(1, std::memory_order_relaxed);
 }
 
 void Object::release()
 {
-	if (SDL_AtomicDecRef(&count))
+	// http://www.boost.org/doc/libs/1_56_0/doc/html/atomic/usage_examples.html
+	if (count.fetch_sub(1, std::memory_order_release) == 1)
+	{
+		std::atomic_thread_fence(std::memory_order_acquire);
 		delete this;
+	}
 }
 
 } // love

+ 4 - 8
src/common/Object.h

@@ -21,12 +21,7 @@
 #ifndef LOVE_OBJECT_H
 #define LOVE_OBJECT_H
 
-/**
- * NOTE: the fact that an SDL header is included in such a widely used header
- * file is only temporary - in the LOVE 0.10+ codebase we use atomics from
- * C++11's standard library.
- **/
-#include <SDL_atomic.h>
+#include <atomic>
 
 namespace love
 {
@@ -47,6 +42,7 @@ public:
 	 * Constructor. Sets reference count to one.
 	 **/
 	Object();
+	Object(const Object &other);
 
 	/**
 	 * Destructor.
@@ -57,7 +53,7 @@ public:
 	 * Gets the reference count of this Object.
 	 * @returns The reference count.
 	 **/
-	int getReferenceCount();
+	int getReferenceCount() const;
 
 	/**
 	 * Retains the Object, i.e. increases the
@@ -75,7 +71,7 @@ public:
 private:
 
 	// The reference count.
-	SDL_atomic_t count;
+	std::atomic<int> count;
 
 }; // Object
 

+ 3 - 8
src/common/Variant.cpp

@@ -101,9 +101,8 @@ Variant::Variant(love::Type udatatype, void *userdata)
 	if (udatatype != INVALID_ID)
 	{
 		Proxy *p = (Proxy *) userdata;
-		flags = p->flags;
-		data.userdata = p->data;
-		((love::Object *) data.userdata)->retain();
+		data.userdata = p->object;
+		p->object->retain();
 	}
 	else
 		data.userdata = userdata;
@@ -223,11 +222,7 @@ void Variant::toLua(lua_State *L)
 		break;
 	case FUSERDATA:
 		if (udatatype != INVALID_ID)
-		{
-			const char *name = NULL;
-			love::types.find(udatatype, name);
-			luax_pushtype(L, name, flags, (love::Object *) data.userdata);
-		}
+			luax_pushtype(L, udatatype, (love::Object *) data.userdata);
 		else
 			lua_pushlightuserdata(L, data.userdata);
 		// I know this is not the same

+ 0 - 1
src/common/Variant.h

@@ -76,7 +76,6 @@ public:
 
 private:
 	love::Type udatatype;
-	bits flags;
 
 }; // Variant
 } // love

+ 4 - 4
src/common/Vector.h

@@ -216,15 +216,15 @@ inline float Vector::normalize(float length)
  **/
 
 inline Vector::Vector()
+	: x(0.0f)
+	, y(0.0f)
 {
-	x = 1;
-	y = 1;
 }
 
 inline Vector::Vector(float x, float y)
+	: x(x)
+	, y(y)
 {
-	this->x = x;
-	this->y = y;
 }
 
 inline Vector Vector::operator + (const Vector &v) const

+ 9 - 3
src/common/config.h

@@ -29,8 +29,12 @@
 #	define LOVE_LINUX 1
 #endif
 #if defined(__APPLE__)
-#	define LOVE_MACOSX 1
-#	include <AvailabilityMacros.h>
+#	include <TargetConditionals.h>
+#	if TARGET_OS_IPHONE
+#		define LOVE_IOS 1
+#	elif TARGET_OS_MAC
+#		define LOVE_MACOSX 1
+#	endif
 #endif
 
 // Endianness.
@@ -71,7 +75,7 @@
 #	define NOMINMAX
 #endif
 
-#if defined(LOVE_MACOSX)
+#if defined(LOVE_MACOSX) || defined(LOVE_IOS)
 #	define LOVE_LEGENDARY_APP_ARGV_HACK
 #endif
 
@@ -124,6 +128,8 @@
 #	define LOVE_ENABLE_THREAD_SDL
 #	define LOVE_ENABLE_TIMER
 #	define LOVE_ENABLE_TIMER_SDL
+#	define LOVE_ENABLE_TOUCH
+#	define LOVE_ENABLE_TOUCH_SDL
 #	define LOVE_ENABLE_UTF8
 #	define LOVE_ENABLE_WINDOW
 #	define LOVE_ENABLE_WINDOW_SDL

+ 61 - 0
src/common/iOS.h

@@ -0,0 +1,61 @@
+/**
+ * Copyright (c) 2006-2015 LOVE Development Team
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty.  In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ *    claim that you wrote the original software. If you use this software
+ *    in a product, an acknowledgment in the product documentation would be
+ *    appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ *    misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ **/
+
+#ifndef LOVE_IOS_H
+#define LOVE_IOS_H
+
+#include "config.h"
+
+#ifdef LOVE_IOS
+
+#include <string>
+
+namespace love
+{
+namespace ios
+{
+
+/**
+ * Gets the filepath of the first detected love file. The main .app Bundle is
+ * searched first, and then the app's Documents folder.
+ **/
+std::string getLoveInResources(bool &fused);
+
+/**
+ * Gets the directory path where files should be stored.
+ **/
+std::string getAppdataDirectory();
+
+/**
+ * Get the home directory (on iOS, this really means the app's sandbox dir.)
+ **/
+std::string getHomeDirectory();
+
+/**
+ * Opens the specified URL with the default program associated with the URL's
+ * scheme.
+ **/
+bool openURL(const std::string &url);
+
+} // ios
+} // love
+
+#endif // LOVE_IOS
+#endif // LOVE_IOS_H

+ 320 - 0
src/common/iOS.mm

@@ -0,0 +1,320 @@
+/**
+ * Copyright (c) 2006-2015 LOVE Development Team
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty.  In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ *    claim that you wrote the original software. If you use this software
+ *    in a product, an acknowledgment in the product documentation would be
+ *    appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ *    misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ **/
+
+#include "iOS.h"
+
+#ifdef LOVE_IOS
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+#include <vector>
+
+#include <SDL_events.h>
+
+static NSArray *getLovesInDocuments();
+static bool deleteFileInDocuments(NSString *filename);
+
+@interface LOVETableViewController : UITableViewController
+
+- (instancetype)initWithGameList:(NSArray *)list;
+
+@property (nonatomic) NSMutableArray *gameList;
+@property (nonatomic, readonly, copy) NSString *selectedGame;
+
+@end
+
+@implementation LOVETableViewController
+
+- (instancetype)initWithGameList:(NSArray *)list
+{
+	if ((self = [super init]))
+	{
+		_gameList = [[NSMutableArray alloc] initWithArray:list copyItems:YES];
+
+		self.title = @"LÖVE Games";
+		self.navigationItem.rightBarButtonItem = self.editButtonItem;
+	}
+
+	return self;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
+{
+	#pragma unused(tableView)
+	#pragma unused(section)
+	// We want to list all games plus the no-game screen.
+	return self.gameList.count + 1;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
+{
+	static NSString *cellIdentifier = @"LOVETableCell";
+
+	UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
+	if (cell == nil)
+		cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
+
+	if (indexPath.row < (NSInteger) self.gameList.count)
+		cell.textLabel.text = self.gameList[indexPath.row];
+	else
+		cell.textLabel.text = @"No-game screen";
+
+	return cell;
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+{
+	#pragma unused(tableView)
+	if (indexPath.row < (NSInteger) self.gameList.count)
+		_selectedGame = [(NSString *)(self.gameList[indexPath.row]) copy];
+	else
+	{
+		// We test against nil to check if a game has been selected, so we'll
+		// just use an empty string instead to represent the no-game screen.
+		_selectedGame = @"";
+	}
+}
+
+- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
+{
+	if (editingStyle != UITableViewCellEditingStyleDelete)
+		return;
+
+	if (indexPath.row >= (NSInteger) self.gameList.count)
+		return;
+
+	NSString *filename = self.gameList[indexPath.row];
+
+	// Delete the file.
+	if (deleteFileInDocuments(filename))
+	{
+		[self.gameList removeObjectAtIndex:indexPath.row];
+		[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+	}
+}
+
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;
+{
+	#pragma unused(tableView)
+	// The no-game screen isn't removable.
+	return indexPath.row < (NSInteger) self.gameList.count;
+}
+
+@end
+
+static NSString *getDocumentsDirectory()
+{
+	NSArray *docdirs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+	return docdirs[0];
+}
+
+static NSArray *getLovesInDocuments()
+{
+	NSString *documents = getDocumentsDirectory();
+	NSArray *filepaths = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:documents error:nil];
+	return [filepaths pathsMatchingExtensions:@[@"love"]];
+}
+
+static bool deleteFileInDocuments(NSString *filename)
+{
+	NSString *documents = getDocumentsDirectory();
+
+	NSString *file = [documents stringByAppendingPathComponent:filename];
+	bool success = [[NSFileManager defaultManager] removeItemAtPath:file error:nil];
+
+	if (success)
+		NSLog(@"Deleted file %@ in Documents folder.", filename);
+
+	return success;
+}
+
+static int dropFileEventFilter(void *userdata, SDL_Event *event)
+{
+	if (event->type != SDL_DROPFILE)
+		return 1;
+
+	NSString *fname = @(event->drop.file);
+	NSFileManager *fmanager = [NSFileManager defaultManager];
+
+	if ([fmanager fileExistsAtPath:fname] && [fname.pathExtension isEqual:@"love"])
+	{
+		NSString *documents = getDocumentsDirectory();
+
+		documents = [[documents stringByStandardizingPath] stringByResolvingSymlinksInPath];
+		fname = [[fname stringByStandardizingPath] stringByResolvingSymlinksInPath];
+
+		// Is the file inside the Documents directory?
+		if ([fname hasPrefix:documents])
+		{
+			LOVETableViewController *vc = (__bridge LOVETableViewController *) userdata;
+
+			// Update the game list.
+			NSArray *games = getLovesInDocuments();
+			vc.gameList = [[NSMutableArray alloc] initWithArray:games copyItems:YES];
+			[vc.tableView reloadData];
+
+			SDL_free(event->drop.file);
+			return 0;
+		}
+	}
+
+	return 1;
+}
+
+namespace love
+{
+namespace ios
+{
+
+/**
+ * Displays a full-screen list of available LOVE games for the user to choose.
+ * Returns the index of the selected game from the list. The list of games
+ * includes the no-game screen, and the function will return an index outside
+ * of the array's range if that is selected.
+ **/
+static NSString *showGameList(NSArray *filenames)
+{
+	// Game list view controller.
+	LOVETableViewController *tablecontroller = [[LOVETableViewController alloc] initWithGameList:filenames];
+
+	// Navigation view controller (only used for the header bar right now.)
+	// Contains the game list view/controller.
+	UINavigationController *navcontroller = [[UINavigationController alloc] initWithRootViewController:tablecontroller];
+
+	UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
+	window.rootViewController = navcontroller;
+
+	SDL_EventFilter oldfilter = nullptr;
+	void *oldudata = nullptr;
+	SDL_GetEventFilter(&oldfilter, &oldudata);
+
+	// Manually retain the table VC and use it for the event filter userdata.
+	// We need to set a custom event filter to update the table when .love files
+	// are opened by the user.
+	void *tableudata = (void *) CFBridgingRetain(tablecontroller);
+	SDL_SetEventFilter(dropFileEventFilter, tableudata);
+
+	[window makeKeyAndVisible];
+
+	// Process events until a game in the list is selected.
+	NSRunLoop *runloop = [NSRunLoop currentRunLoop];
+	while (tablecontroller.selectedGame == nil)
+	{
+		[runloop runMode:NSDefaultRunLoopMode  beforeDate:[NSDate distantPast]];
+		[runloop runMode:UITrackingRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:1.0/60.0]];
+	}
+
+	// The window will get released and cleaned up once we go out of scope.
+	window.hidden = YES;
+
+	SDL_SetEventFilter(oldfilter, oldudata);
+	CFBridgingRelease(tableudata);
+
+	return tablecontroller.selectedGame;
+}
+
+std::string getLoveInResources(bool &fused)
+{
+	fused = false;
+	std::string path;
+
+	@autoreleasepool
+	{
+		// Start by looking in the main bundle (.app) folder for .love files.
+		NSArray *bundlepaths = [[NSBundle mainBundle] pathsForResourcesOfType:@"love" inDirectory:nil];
+
+		if (bundlepaths.count > 0)
+		{
+			// The game should be fused if we have something here.
+			fused = true;
+			NSLog(@".love files in main Bundle: %@", bundlepaths);
+			return [bundlepaths[0] UTF8String];
+		}
+
+		// Otherwise look in the app's Documents directory. The game won't be
+		// fused.
+		NSArray *filepaths = getLovesInDocuments();
+
+		if (filepaths.count > 0)
+			NSLog(@".love files in Documents: %@", filepaths);
+
+		// Let the user select a game from the un-fused list.
+		NSString *selectedfile = showGameList(filepaths);
+
+		// The string length might be 0 if the no-game screen was selected.
+		if (selectedfile != nil && selectedfile.length > 0)
+		{
+			NSString *documents = getDocumentsDirectory();
+			path = [[documents stringByAppendingPathComponent:selectedfile] UTF8String];
+			NSLog(@"Using unfused .love file: %@", selectedfile);
+		}
+	}
+
+	return path;
+}
+
+std::string getAppdataDirectory()
+{
+	NSSearchPathDirectory searchdir = NSApplicationSupportDirectory;
+	std::string path;
+
+	@autoreleasepool
+	{
+		NSArray *dirs = NSSearchPathForDirectoriesInDomains(searchdir, NSUserDomainMask, YES);
+
+		if (dirs.count > 0)
+			path = [dirs[0] UTF8String];
+	}
+
+	return path;
+}
+
+std::string getHomeDirectory()
+{
+	std::string path;
+
+	@autoreleasepool
+	{
+		path = [NSHomeDirectory() UTF8String];
+	}
+
+	return path;
+}
+
+bool openURL(const std::string &url)
+{
+	bool success = false;
+
+	@autoreleasepool
+	{
+		NSURL *nsurl = [NSURL URLWithString:@(url.c_str())];
+
+		if ([[UIApplication sharedApplication] canOpenURL:nsurl])
+			success = [[UIApplication sharedApplication] openURL:nsurl];
+	}
+
+	return success;
+}
+
+} // ios
+} // love
+
+#endif // LOVE_IOS

+ 21 - 2
src/common/int.h

@@ -22,8 +22,6 @@
 #define LOVE_INT_H
 
 // C standard sized integer types.
-// This header was added to Visual studio in VS 2012, which is LOVE's current
-// minimum supported VS version (as of this comment's commit date.)
 #include <stdint.h>
 
 #define LOVE_INT8_MAX   0x7F
@@ -47,6 +45,27 @@ typedef uint32_t uint32;
 typedef int64_t int64;
 typedef uint64_t uint64;
 
+static inline uint16 swap16(uint16 x)
+{
+	return (x >> 8) | (x << 8);
+}
+
+static inline uint32 swap32(uint32 x)
+{
+	return ((x & 0x000000FF) << 24) |
+	       ((x & 0x0000FF00) <<  8) |
+	       ((x & 0x00FF0000) >>  8) |
+	       ((x & 0xFF000000) >> 24);
+}
+
+static inline uint64 swap64(uint64 x)
+{
+	return ((x << 56) & 0xFF00000000000000ULL) | ((x << 40) & 0x00FF000000000000ULL) |
+	       ((x << 24) & 0x0000FF0000000000ULL) | ((x <<  8) & 0x000000FF00000000ULL) |
+	       ((x >>  8) & 0x00000000FF000000ULL) | ((x >> 24) & 0x0000000000FF0000ULL) |
+	       ((x >> 40) & 0x000000000000FF00ULL) | ((x >> 56) & 0x00000000000000FFULL);
+}
+
 } // love
 
 #endif // LOVE_INT_H

+ 30 - 129
src/common/runtime.cpp

@@ -26,7 +26,6 @@
 #include "Object.h"
 #include "Reference.h"
 #include "StringMap.h"
-#include <thread/threads.h>
 
 // C++
 #include <algorithm>
@@ -36,24 +35,14 @@
 namespace love
 {
 
-static thread::Mutex *gcmutex = nullptr;
-
 /**
  * Called when an object is collected. The object is released
  * once in this function, possibly deleting it.
  **/
 static int w__gc(lua_State *L)
 {
-	if (!gcmutex)
-		gcmutex = thread::newMutex();
-
 	Proxy *p = (Proxy *) lua_touserdata(L, 1);
-	Object *object = (Object *) p->data;
-
-	thread::Lock lock(gcmutex);
-
-	object->release();
-
+	p->object->release();
 	return 0;
 }
 
@@ -67,7 +56,7 @@ static int w__typeOf(lua_State *L)
 {
 	Proxy *p = (Proxy *)lua_touserdata(L, 1);
 	Type t = luax_type(L, 2);
-	luax_pushboolean(L, p->flags[t]);
+	luax_pushboolean(L, typeFlags[p->type][t]);
 	return 1;
 }
 
@@ -75,7 +64,7 @@ static int w__eq(lua_State *L)
 {
 	Proxy *p1 = (Proxy *)lua_touserdata(L, 1);
 	Proxy *p2 = (Proxy *)lua_touserdata(L, 2);
-	luax_pushboolean(L, p1->data == p2->data);
+	luax_pushboolean(L, p1->object == p2->object);
 	return 1;
 }
 
@@ -217,8 +206,8 @@ int luax_register_module(lua_State *L, const WrappedModule &m)
 	luax_insistregistry(L, REGISTRY_MODULES);
 
 	Proxy *p = (Proxy *)lua_newuserdata(L, sizeof(Proxy));
-	p->data = m.module;
-	p->flags = m.flags;
+	p->object = m.module;
+	p->type = m.type;
 
 	luaL_newmetatable(L, m.module->getName());
 	lua_pushvalue(L, -1);
@@ -265,12 +254,12 @@ int luax_preload(lua_State *L, lua_CFunction f, const char *name)
 	return 0;
 }
 
-int luax_register_type(lua_State *L, const char *tname, const luaL_Reg *f)
+int luax_register_type(lua_State *L, love::Type type, const luaL_Reg *f)
 {
 	// Verify that this type name has a matching Type ID and type name mapping.
-	love::Type ltype;
-	if (!love::getType(tname, ltype))
-		printf("Missing type entry for type name: %s\n", tname);
+	const char *tname = "Invalid";
+	if (!love::getType(type, tname))
+		printf("Missing type name entry for type ID %d\n", type);
 
 	// Get the place for storing and re-using instantiated love types.
 	luax_getregistry(L, REGISTRY_TYPES);
@@ -338,19 +327,22 @@ int luax_table_insert(lua_State *L, int tindex, int vindex, int pos)
 		tindex = lua_gettop(L)+1+tindex;
 	if (vindex < 0)
 		vindex = lua_gettop(L)+1+vindex;
+
 	if (pos == -1)
 	{
 		lua_pushvalue(L, vindex);
-		lua_rawseti(L, tindex, lua_objlen(L, tindex)+1);
+		lua_rawseti(L, tindex, (int) lua_objlen(L, tindex)+1);
 		return 0;
 	}
 	else if (pos < 0)
-		pos = lua_objlen(L, tindex)+1+pos;
-	for (int i = lua_objlen(L, tindex)+1; i > pos; i--)
+		pos = (int) lua_objlen(L, tindex)+1+pos;
+
+	for (int i = (int) lua_objlen(L, tindex)+1; i > pos; i--)
 	{
 		lua_rawgeti(L, tindex, i-1);
 		lua_rawseti(L, tindex, i);
 	}
+
 	lua_pushvalue(L, vindex);
 	lua_rawseti(L, tindex, pos);
 	return 0;
@@ -382,20 +374,23 @@ int luax_register_searcher(lua_State *L, lua_CFunction f, int pos)
 	return 0;
 }
 
-void luax_rawnewtype(lua_State *L, const char *name, bits flags, love::Object *object)
+void luax_rawnewtype(lua_State *L, love::Type type, love::Object *object)
 {
 	Proxy *u = (Proxy *)lua_newuserdata(L, sizeof(Proxy));
 
 	object->retain();
 
-	u->data = (void *) object;
-	u->flags = flags;
+	u->object = object;
+	u->type = type;
+
+	const char *name = "Invalid";
+	getType(type, name);
 
 	luaL_newmetatable(L, name);
 	lua_setmetatable(L, -2);
 }
 
-void luax_pushtype(lua_State *L, const char *name, bits flags, love::Object *object)
+void luax_pushtype(lua_State *L, love::Type type, love::Object *object)
 {
 	if (object == nullptr)
 	{
@@ -410,11 +405,11 @@ void luax_pushtype(lua_State *L, const char *name, bits flags, love::Object *obj
 	if (!lua_istable(L, -1))
 	{
 		lua_pop(L, 1);
-		return luax_rawnewtype(L, name, flags, object);
+		return luax_rawnewtype(L, type, object);
 	}
 
 	// Get the value of lovetypes[object] on the stack.
-	lua_pushlightuserdata(L, (void *) object);
+	lua_pushlightuserdata(L, object);
 	lua_gettable(L, -2);
 
 	// If the Proxy userdata isn't in the instantiated types table yet, add it.
@@ -422,9 +417,9 @@ void luax_pushtype(lua_State *L, const char *name, bits flags, love::Object *obj
 	{
 		lua_pop(L, 1);
 
-		luax_rawnewtype(L, name, flags, object);
+		luax_rawnewtype(L, type, object);
 
-		lua_pushlightuserdata(L, (void *) object);
+		lua_pushlightuserdata(L, object);
 		lua_pushvalue(L, -2);
 
 		// lovetypes[object] = Proxy.
@@ -437,12 +432,13 @@ void luax_pushtype(lua_State *L, const char *name, bits flags, love::Object *obj
 	// Keep the Proxy userdata on the stack.
 }
 
-bool luax_istype(lua_State *L, int idx, love::bits type)
+bool luax_istype(lua_State *L, int idx, love::Type type)
 {
 	if (lua_type(L, idx) != LUA_TUSERDATA)
 		return false;
 
-	return ((((Proxy *)lua_touserdata(L, idx))->flags & type) == type);
+	Proxy *p = (Proxy *) lua_touserdata(L, idx);
+	return typeFlags[p->type][type];
 }
 
 int luax_getfunction(lua_State *L, const char *mod, const char *fn)
@@ -632,105 +628,10 @@ extern "C" int luax_typerror(lua_State *L, int narg, const char *tname)
 	return luaL_argerror(L, narg, msg);
 }
 
-StringMap<Type, TYPE_MAX_ENUM>::Entry typeEntries[] =
-{
-	{"Invalid", INVALID_ID},
-
-	{"Object", OBJECT_ID},
-	{"Data", DATA_ID},
-	{"Module", MODULE_ID},
-
-	// Filesystem
-	{"File", FILESYSTEM_FILE_ID},
-	{"FileData", FILESYSTEM_FILE_DATA_ID},
-
-	// Font
-	{"GlyphData", FONT_GLYPH_DATA_ID},
-	{"Rasterizer", FONT_RASTERIZER_ID},
-
-	// Graphics
-	{"Drawable", GRAPHICS_DRAWABLE_ID},
-	{"Texture", GRAPHICS_TEXTURE_ID},
-	{"Image", GRAPHICS_IMAGE_ID},
-	{"Quad", GRAPHICS_QUAD_ID},
-	{"Font", GRAPHICS_FONT_ID},
-	{"ParticleSystem", GRAPHICS_PARTICLE_SYSTEM_ID},
-	{"SpriteBatch", GRAPHICS_SPRITE_BATCH_ID},
-	{"Canvas", GRAPHICS_CANVAS_ID},
-	{"Shader", GRAPHICS_SHADER_ID},
-	{"Mesh", GRAPHICS_MESH_ID},
-
-	// Image
-	{"ImageData", IMAGE_IMAGE_DATA_ID},
-	{"CompressedData", IMAGE_COMPRESSED_DATA_ID},
-
-	// Joystick
-	{"Joystick", JOYSTICK_JOYSTICK_ID},
-
-	// Math
-	{"RandomGenerator", MATH_RANDOM_GENERATOR_ID},
-	{"BezierCurve", MATH_BEZIER_CURVE_ID},
-
-	// Audio
-	{"Source", AUDIO_SOURCE_ID},
-
-	// Sound
-	{"SoundData", SOUND_SOUND_DATA_ID},
-	{"Decoder", SOUND_DECODER_ID},
-
-	// Mouse
-	{"Cursor", MOUSE_CURSOR_ID},
-
-	// Physics
-	{"World", PHYSICS_WORLD_ID},
-	{"Contact", PHYSICS_CONTACT_ID},
-	{"Body", PHYSICS_BODY_ID},
-	{"Fixture", PHYSICS_FIXTURE_ID},
-	{"Shape", PHYSICS_SHAPE_ID},
-	{"CircleShape", PHYSICS_CIRCLE_SHAPE_ID},
-	{"PolygonShape", PHYSICS_POLYGON_SHAPE_ID},
-	{"EdgeShape", PHYSICS_EDGE_SHAPE_ID},
-	{"ChainShape", PHYSICS_CHAIN_SHAPE_ID},
-	{"Joint", PHYSICS_JOINT_ID},
-	{"MouseJoint", PHYSICS_MOUSE_JOINT_ID},
-	{"DistanceJoint", PHYSICS_DISTANCE_JOINT_ID},
-	{"PrismaticJoint", PHYSICS_PRISMATIC_JOINT_ID},
-	{"RevoluteJoint", PHYSICS_REVOLUTE_JOINT_ID},
-	{"PulleyJoint", PHYSICS_PULLEY_JOINT_ID},
-	{"GearJoint", PHYSICS_GEAR_JOINT_ID},
-	{"FrictionJoint", PHYSICS_FRICTION_JOINT_ID},
-	{"WeldJoint", PHYSICS_WELD_JOINT_ID},
-	{"RopeJoint", PHYSICS_ROPE_JOINT_ID},
-	{"WheelJoint", PHYSICS_WHEEL_JOINT_ID},
-	{"MotorJoint", PHYSICS_MOTOR_JOINT_ID},
-
-	// Thread
-	{"Thread", THREAD_THREAD_ID},
-	{"Channel", THREAD_CHANNEL_ID},
-
-	// The modules themselves. Only add abstracted modules here.
-	{"filesystem", MODULE_FILESYSTEM_ID},
-	{"graphics", MODULE_GRAPHICS_ID},
-	{"image", MODULE_IMAGE_ID},
-	{"sound", MODULE_SOUND_ID},
-};
-
-StringMap<Type, TYPE_MAX_ENUM> types(typeEntries, sizeof(typeEntries));
-
-bool getType(const char *in, love::Type &out)
-{
-	return types.find(in, out);
-}
-
-bool getType(love::Type in, const char *&out)
-{
-	return types.find(in, out);
-}
-
 Type luax_type(lua_State *L, int idx)
 {
 	Type t = INVALID_ID;
-	types.find(luaL_checkstring(L, idx), t);
+	getType(luaL_checkstring(L, idx), t);
 	return t;
 }
 

+ 43 - 32
src/common/runtime.h

@@ -63,10 +63,10 @@ enum Registry
 struct Proxy
 {
 	// Holds type information (see types.h).
-	bits flags;
+	Type type;
 
-	// The light userdata (pointer to the love::Object).
-	void *data;
+	// Pointer to the actual object.
+	Object *object;
 };
 
 /**
@@ -80,15 +80,14 @@ struct WrappedModule
 	// The name for the table to put the functions in, without the 'love'-prefix.
 	const char *name;
 
-	// The type flags of this module.
-	love::bits flags;
+	// The type of this module.
+	love::Type type;
 
 	// The functions of the module (last element {0,0}).
 	const luaL_Reg *functions;
 
 	// A list of functions which expose the types of the modules (last element 0).
 	const lua_CFunction *types;
-
 };
 
 /**
@@ -241,11 +240,10 @@ int luax_preload(lua_State *L, lua_CFunction f, const char *name);
 
 /**
  * Register a new type.
- * @param tname The name of the type. This must not conflict with other type names,
- * even from other modules.
+ * @param type The type.
  * @param f The list of member functions for the type.
  **/
-int luax_register_type(lua_State *L, const char *tname, const luaL_Reg *f = 0);
+int luax_register_type(lua_State *L, love::Type type, const luaL_Reg *f = 0);
 
 /**
  * Do a table.insert from C
@@ -271,10 +269,10 @@ int luax_register_searcher(lua_State *L, lua_CFunction f, int pos = -1);
  * NOTE: The object will be retained by Lua and released upon garbage collection.
  * @param L The Lua state.
  * @param name The name of the type. This must match the name used with luax_register_type.
- * @param flags The type information of the object.
+ * @param type The type information of the object.
  * @param object The pointer to the actual object.
  **/
-void luax_pushtype(lua_State *L, const char *name, bits flags, love::Object *object);
+void luax_pushtype(lua_State *L, const love::Type type, love::Object *object);
 
 /**
  * Creates a new Lua representation of the given object *without* checking if it
@@ -285,10 +283,10 @@ void luax_pushtype(lua_State *L, const char *name, bits flags, love::Object *obj
  * NOTE: The object will be retained by Lua and released upon garbage collection.
  * @param L The Lua state.
  * @param name The name of the type. This must match the name used with luax_register_type.
- * @param flags The type information of the object.
+ * @param type The type information of the object.
  * @param object The pointer to the actual object.
  **/
-void luax_rawnewtype(lua_State *L, const char *name, bits flags, love::Object *object);
+void luax_rawnewtype(lua_State *L, love::Type type, love::Object *object);
 
 /**
  * Checks whether the value at idx is a certain type.
@@ -297,7 +295,7 @@ void luax_rawnewtype(lua_State *L, const char *name, bits flags, love::Object *o
  * @param type The type to check for.
  * @return True if the value is Proxy of the specified type, false otherwise.
  **/
-bool luax_istype(lua_State *L, int idx, love::bits type);
+bool luax_istype(lua_State *L, int idx, love::Type type);
 
 /**
  * Gets the function love.module.function and puts it on top of the stack (alone). If the
@@ -399,43 +397,57 @@ extern "C" { // Also called from luasocket
  * @param type The type bit.
  **/
 template <typename T>
-T *luax_checktype(lua_State *L, int idx, const char *name, love::bits type)
+T *luax_checktype(lua_State *L, int idx, love::Type type)
 {
 	if (lua_type(L, idx) != LUA_TUSERDATA)
+	{
+		const char *name = "Invalid";
+		getType(type, name);
 		luax_typerror(L, idx, name);
+	}
 
 	Proxy *u = (Proxy *)lua_touserdata(L, idx);
 
-	if ((u->flags & type) != type)
+	if (!typeFlags[u->type][type])
+	{
+		const char *name = "Invalid";
+		getType(type, name);
 		luax_typerror(L, idx, name);
+	}
 
-	return (T *)u->data;
+	return (T *)u->object;
 }
 
 template <typename T>
-T *luax_getmodule(lua_State *L, const char *k, love::bits type)
+T *luax_getmodule(lua_State *L, love::Type type)
 {
+	const char *name = "Invalid";
+	getType(type, name);
+
 	luax_insistregistry(L, REGISTRY_MODULES);
-	lua_getfield(L, -1, k);
+	lua_getfield(L, -1, name);
 
 	if (!lua_isuserdata(L, -1))
-		luaL_error(L, "Tried to get nonexistant module %s.", k);
+		luaL_error(L, "Tried to get nonexistant module %s.", name);
 
 	Proxy *u = (Proxy *)lua_touserdata(L, -1);
 
-	if ((u->flags & type) != type)
-		luaL_error(L, "Incorrect module %s", k);
+	if (!typeFlags[u->type][type])
+		luaL_error(L, "Incorrect module %s", name);
 
 	lua_pop(L, 2);
 
-	return (T *)u->data;
+	return (T *)u->object;
 }
 
 template <typename T>
-T *luax_optmodule(lua_State *L, const char *k, love::bits type)
+T *luax_optmodule(lua_State *L, love::Type type)
 {
+	const char *name = "Invalid";
+	getType(type, name);
+
 	luax_insistregistry(L, REGISTRY_MODULES);
-	lua_getfield(L, -1, k);
+	lua_getfield(L, -1, name);
 
 	if (!lua_isuserdata(L, -1))
 	{
@@ -445,12 +457,12 @@ T *luax_optmodule(lua_State *L, const char *k, love::bits type)
 
 	Proxy *u = (Proxy *)lua_touserdata(L, -1);
 
-	if ((u->flags & type) != type)
-		luaL_error(L, "Incorrect module %s", k);
+	if (!typeFlags[u->type][type])
+		luaL_error(L, "Incorrect module %s", name);
 	
 	lua_pop(L, 2);
 	
-	return (T *) u->data;
+	return (T *) u->object;
 }
 
 /**
@@ -459,13 +471,12 @@ T *luax_optmodule(lua_State *L, const char *k, love::bits type)
  * luax_istype, then this can be safely used. Otherwise, use luax_checktype.
  * @param L The Lua state.
  * @param idx The index on the stack.
- * @param name The name of the type.
- * @param type The type bit.
+ * @param type The type of the object.
  **/
 template <typename T>
-T *luax_totype(lua_State *L, int idx, const char * /* name */, love::bits /* type */)
+T *luax_totype(lua_State *L, int idx, love::Type /*type*/)
 {
-	return (T *)(((Proxy *)lua_touserdata(L, idx))->data);
+	return (T *)(((Proxy *)lua_touserdata(L, idx))->object);
 }
 
 Type luax_type(lua_State *L, int idx);

+ 217 - 0
src/common/types.cpp

@@ -0,0 +1,217 @@
+/**
+ * Copyright (c) 2006-2015 LOVE Development Team
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty.  In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ *    claim that you wrote the original software. If you use this software
+ *    in a product, an acknowledgment in the product documentation would be
+ *    appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ *    misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ **/
+
+#include "types.h"
+#include "StringMap.h"
+
+namespace love
+{
+
+static const TypeBits *createTypeFlags()
+{
+	static TypeBits b[TYPE_MAX_ENUM];
+	TypeBits one = TypeBits(1);
+
+	b[INVALID_ID] = one << INVALID_ID;
+
+	b[OBJECT_ID] = one << OBJECT_ID;
+	b[DATA_ID] = (one << DATA_ID) | b[OBJECT_ID];
+	b[MODULE_ID] = (one << MODULE_ID) | b[OBJECT_ID];
+
+	// Filesystem.
+	b[FILESYSTEM_FILE_ID] = (one << FILESYSTEM_FILE_ID) | b[OBJECT_ID];
+	b[FILESYSTEM_DROPPED_FILE_ID] = (one << FILESYSTEM_DROPPED_FILE_ID) | b[FILESYSTEM_FILE_ID];
+	b[FILESYSTEM_FILE_DATA_ID] = (one << FILESYSTEM_FILE_DATA_ID) | b[DATA_ID];
+
+	b[FONT_GLYPH_DATA_ID] = (one << FONT_GLYPH_DATA_ID) | b[DATA_ID];
+	b[FONT_RASTERIZER_ID] = (one << FONT_RASTERIZER_ID) | b[OBJECT_ID];
+
+	// Graphics.
+	b[GRAPHICS_DRAWABLE_ID] = (one << GRAPHICS_DRAWABLE_ID) | b[OBJECT_ID];
+	b[GRAPHICS_TEXTURE_ID] = (one << GRAPHICS_TEXTURE_ID) | b[GRAPHICS_DRAWABLE_ID];
+	b[GRAPHICS_IMAGE_ID] = (one << GRAPHICS_IMAGE_ID) | b[GRAPHICS_TEXTURE_ID];
+	b[GRAPHICS_QUAD_ID] = (one << GRAPHICS_QUAD_ID) | b[OBJECT_ID];
+	b[GRAPHICS_FONT_ID] = (one << GRAPHICS_FONT_ID) | b[OBJECT_ID];
+	b[GRAPHICS_PARTICLE_SYSTEM_ID] = (one << GRAPHICS_PARTICLE_SYSTEM_ID) | b[GRAPHICS_DRAWABLE_ID];
+	b[GRAPHICS_SPRITE_BATCH_ID] = (one << GRAPHICS_SPRITE_BATCH_ID) | b[GRAPHICS_DRAWABLE_ID];
+	b[GRAPHICS_CANVAS_ID] = (one << GRAPHICS_CANVAS_ID) | b[GRAPHICS_TEXTURE_ID];
+	b[GRAPHICS_SHADER_ID] = (one << GRAPHICS_SHADER_ID) | b[OBJECT_ID];
+	b[GRAPHICS_MESH_ID] = (one << GRAPHICS_MESH_ID) | b[GRAPHICS_DRAWABLE_ID];
+	b[GRAPHICS_TEXT_ID] = (one << GRAPHICS_TEXT_ID) | b[GRAPHICS_DRAWABLE_ID];
+
+	// Image.
+	b[IMAGE_IMAGE_DATA_ID] = (one << IMAGE_IMAGE_DATA_ID) | b[DATA_ID];
+	b[IMAGE_COMPRESSED_DATA_ID] = (one << IMAGE_COMPRESSED_DATA_ID) | b[DATA_ID];
+
+	// Joystick.
+	b[JOYSTICK_JOYSTICK_ID] = (one << JOYSTICK_JOYSTICK_ID) | b[OBJECT_ID];
+
+	// Math.
+	b[MATH_RANDOM_GENERATOR_ID] = (one << MATH_RANDOM_GENERATOR_ID) | b[OBJECT_ID];
+	b[MATH_BEZIER_CURVE_ID] = (one << MATH_BEZIER_CURVE_ID) | b[OBJECT_ID];
+
+	// Audio.
+	b[AUDIO_SOURCE_ID] = (one << AUDIO_SOURCE_ID) | b[OBJECT_ID];
+
+	// Sound.
+	b[SOUND_SOUND_DATA_ID] = (one << SOUND_SOUND_DATA_ID) | b[DATA_ID];
+	b[SOUND_DECODER_ID] = one << SOUND_DECODER_ID;
+
+	// Mouse.
+	b[MOUSE_CURSOR_ID] = (one << MOUSE_CURSOR_ID) | b[OBJECT_ID];
+
+	// Physics.
+	b[PHYSICS_WORLD_ID] = (one << PHYSICS_WORLD_ID) | b[OBJECT_ID];
+	b[PHYSICS_CONTACT_ID] = (one << PHYSICS_CONTACT_ID) | b[OBJECT_ID];
+	b[PHYSICS_BODY_ID] = (one << PHYSICS_BODY_ID) | b[OBJECT_ID];
+	b[PHYSICS_FIXTURE_ID] = (one << PHYSICS_FIXTURE_ID) | b[OBJECT_ID];
+	b[PHYSICS_SHAPE_ID] = (one << PHYSICS_SHAPE_ID) | b[OBJECT_ID];
+	b[PHYSICS_CIRCLE_SHAPE_ID] = (one << PHYSICS_CIRCLE_SHAPE_ID) | b[PHYSICS_SHAPE_ID];
+	b[PHYSICS_POLYGON_SHAPE_ID] = (one << PHYSICS_POLYGON_SHAPE_ID) | b[PHYSICS_SHAPE_ID];
+	b[PHYSICS_EDGE_SHAPE_ID] = (one << PHYSICS_EDGE_SHAPE_ID) | b[PHYSICS_SHAPE_ID];
+	b[PHYSICS_CHAIN_SHAPE_ID] = (one << PHYSICS_CHAIN_SHAPE_ID) | b[PHYSICS_SHAPE_ID];
+	b[PHYSICS_JOINT_ID] = (one << PHYSICS_JOINT_ID) | b[OBJECT_ID];
+	b[PHYSICS_MOUSE_JOINT_ID] = (one << PHYSICS_MOUSE_JOINT_ID) | b[PHYSICS_JOINT_ID];
+	b[PHYSICS_DISTANCE_JOINT_ID] = (one << PHYSICS_DISTANCE_JOINT_ID) | b[PHYSICS_JOINT_ID];
+	b[PHYSICS_PRISMATIC_JOINT_ID] = (one << PHYSICS_PRISMATIC_JOINT_ID) | b[PHYSICS_JOINT_ID];
+	b[PHYSICS_REVOLUTE_JOINT_ID] = (one << PHYSICS_REVOLUTE_JOINT_ID) | b[PHYSICS_JOINT_ID];
+	b[PHYSICS_PULLEY_JOINT_ID] = (one << PHYSICS_PULLEY_JOINT_ID) | b[PHYSICS_JOINT_ID];
+	b[PHYSICS_GEAR_JOINT_ID] = (one << PHYSICS_GEAR_JOINT_ID) | b[PHYSICS_JOINT_ID];
+	b[PHYSICS_FRICTION_JOINT_ID] = (one << PHYSICS_FRICTION_JOINT_ID) | b[PHYSICS_JOINT_ID];
+	b[PHYSICS_WELD_JOINT_ID] = (one << PHYSICS_WELD_JOINT_ID) | b[PHYSICS_JOINT_ID];
+	b[PHYSICS_ROPE_JOINT_ID] = (one << PHYSICS_ROPE_JOINT_ID) | b[PHYSICS_JOINT_ID];
+	b[PHYSICS_WHEEL_JOINT_ID] = (one << PHYSICS_WHEEL_JOINT_ID) | b[PHYSICS_JOINT_ID];
+	b[PHYSICS_MOTOR_JOINT_ID] = (one << PHYSICS_MOTOR_JOINT_ID) | b[PHYSICS_JOINT_ID];
+
+	// Thread.
+	b[THREAD_THREAD_ID] = (one << THREAD_THREAD_ID) | b[OBJECT_ID];
+	b[THREAD_CHANNEL_ID] = (one << THREAD_CHANNEL_ID) | b[OBJECT_ID];
+
+	// Modules.
+	b[MODULE_FILESYSTEM_ID] = (one << MODULE_FILESYSTEM_ID) | b[MODULE_ID];
+	b[MODULE_GRAPHICS_ID] = (one << MODULE_GRAPHICS_ID) | b[MODULE_ID];
+	b[MODULE_IMAGE_ID] = (one << MODULE_IMAGE_ID) | b[MODULE_ID];
+	b[MODULE_SOUND_ID] = (one << MODULE_SOUND_ID) | b[MODULE_ID];
+
+	return b;
+}
+
+const TypeBits *typeFlags = createTypeFlags();
+
+StringMap<Type, TYPE_MAX_ENUM>::Entry typeEntries[] =
+{
+	{"Invalid", INVALID_ID},
+
+	{"Object", OBJECT_ID},
+	{"Data", DATA_ID},
+	{"Module", MODULE_ID},
+
+	// Filesystem
+	{"File", FILESYSTEM_FILE_ID},
+	{"DroppedFile", FILESYSTEM_DROPPED_FILE_ID},
+	{"FileData", FILESYSTEM_FILE_DATA_ID},
+
+	// Font
+	{"GlyphData", FONT_GLYPH_DATA_ID},
+	{"Rasterizer", FONT_RASTERIZER_ID},
+
+	// Graphics
+	{"Drawable", GRAPHICS_DRAWABLE_ID},
+	{"Texture", GRAPHICS_TEXTURE_ID},
+	{"Image", GRAPHICS_IMAGE_ID},
+	{"Quad", GRAPHICS_QUAD_ID},
+	{"Font", GRAPHICS_FONT_ID},
+	{"ParticleSystem", GRAPHICS_PARTICLE_SYSTEM_ID},
+	{"SpriteBatch", GRAPHICS_SPRITE_BATCH_ID},
+	{"Canvas", GRAPHICS_CANVAS_ID},
+	{"Shader", GRAPHICS_SHADER_ID},
+	{"Mesh", GRAPHICS_MESH_ID},
+	{"Text", GRAPHICS_TEXT_ID},
+
+	// Image
+	{"ImageData", IMAGE_IMAGE_DATA_ID},
+	{"CompressedData", IMAGE_COMPRESSED_DATA_ID},
+
+	// Joystick
+	{"Joystick", JOYSTICK_JOYSTICK_ID},
+
+	// Math
+	{"RandomGenerator", MATH_RANDOM_GENERATOR_ID},
+	{"BezierCurve", MATH_BEZIER_CURVE_ID},
+
+	// Audio
+	{"Source", AUDIO_SOURCE_ID},
+
+	// Sound
+	{"SoundData", SOUND_SOUND_DATA_ID},
+	{"Decoder", SOUND_DECODER_ID},
+
+	// Mouse
+	{"Cursor", MOUSE_CURSOR_ID},
+
+	// Physics
+	{"World", PHYSICS_WORLD_ID},
+	{"Contact", PHYSICS_CONTACT_ID},
+	{"Body", PHYSICS_BODY_ID},
+	{"Fixture", PHYSICS_FIXTURE_ID},
+	{"Shape", PHYSICS_SHAPE_ID},
+	{"CircleShape", PHYSICS_CIRCLE_SHAPE_ID},
+	{"PolygonShape", PHYSICS_POLYGON_SHAPE_ID},
+	{"EdgeShape", PHYSICS_EDGE_SHAPE_ID},
+	{"ChainShape", PHYSICS_CHAIN_SHAPE_ID},
+	{"Joint", PHYSICS_JOINT_ID},
+	{"MouseJoint", PHYSICS_MOUSE_JOINT_ID},
+	{"DistanceJoint", PHYSICS_DISTANCE_JOINT_ID},
+	{"PrismaticJoint", PHYSICS_PRISMATIC_JOINT_ID},
+	{"RevoluteJoint", PHYSICS_REVOLUTE_JOINT_ID},
+	{"PulleyJoint", PHYSICS_PULLEY_JOINT_ID},
+	{"GearJoint", PHYSICS_GEAR_JOINT_ID},
+	{"FrictionJoint", PHYSICS_FRICTION_JOINT_ID},
+	{"WeldJoint", PHYSICS_WELD_JOINT_ID},
+	{"RopeJoint", PHYSICS_ROPE_JOINT_ID},
+	{"WheelJoint", PHYSICS_WHEEL_JOINT_ID},
+	{"MotorJoint", PHYSICS_MOTOR_JOINT_ID},
+
+	// Thread
+	{"Thread", THREAD_THREAD_ID},
+	{"Channel", THREAD_CHANNEL_ID},
+
+	// The modules themselves. Only add abstracted modules here.
+	{"filesystem", MODULE_FILESYSTEM_ID},
+	{"graphics", MODULE_GRAPHICS_ID},
+	{"image", MODULE_IMAGE_ID},
+	{"sound", MODULE_SOUND_ID},
+};
+
+StringMap<Type, TYPE_MAX_ENUM> types(typeEntries, sizeof(typeEntries));
+
+static_assert((sizeof(typeEntries) / sizeof(typeEntries[0])) == TYPE_MAX_ENUM, "Type name array size doesn't match the total number of type IDs!");
+
+bool getType(const char *in, love::Type &out)
+{
+	return types.find(in, out);
+}
+
+bool getType(love::Type in, const char *&out)
+{
+	return types.find(in, out);
+}
+
+} // love

+ 9 - 81
src/common/types.h

@@ -37,6 +37,7 @@ enum Type
 
 	// Filesystem.
 	FILESYSTEM_FILE_ID,
+	FILESYSTEM_DROPPED_FILE_ID,
 	FILESYSTEM_FILE_DATA_ID,
 
 	// Font
@@ -54,6 +55,7 @@ enum Type
 	GRAPHICS_CANVAS_ID,
 	GRAPHICS_SHADER_ID,
 	GRAPHICS_MESH_ID,
+	GRAPHICS_TEXT_ID,
 
 	// Image
 	IMAGE_IMAGE_DATA_ID,
@@ -113,89 +115,15 @@ enum Type
 	TYPE_MAX_ENUM
 };
 
-typedef std::bitset<TYPE_MAX_ENUM> bits;
-
-const bits INVALID_T = bits(1) << INVALID_ID;
-
-const bits OBJECT_T = bits(1) << OBJECT_ID;
-const bits DATA_T = (bits(1) << DATA_ID) | OBJECT_T;
-const bits MODULE_T = (bits(1) << MODULE_ID) | OBJECT_T;
-
-// Filesystem.
-const bits FILESYSTEM_FILE_T = (bits(1) << FILESYSTEM_FILE_ID) | OBJECT_T;
-const bits FILESYSTEM_FILE_DATA_T = (bits(1) << FILESYSTEM_FILE_DATA_ID) | DATA_T;
-
-const bits FONT_GLYPH_DATA_T = (bits(1) << FONT_GLYPH_DATA_ID) | DATA_T;
-const bits FONT_RASTERIZER_T = (bits(1) << FONT_RASTERIZER_ID) | OBJECT_T;
-
-// Graphics.
-const bits GRAPHICS_DRAWABLE_T = (bits(1) << GRAPHICS_DRAWABLE_ID) | OBJECT_T;
-const bits GRAPHICS_TEXTURE_T = (bits(1) << GRAPHICS_TEXTURE_ID) | GRAPHICS_DRAWABLE_T;
-const bits GRAPHICS_IMAGE_T = (bits(1) << GRAPHICS_IMAGE_ID) | GRAPHICS_TEXTURE_T;
-const bits GRAPHICS_QUAD_T = (bits(1) << GRAPHICS_QUAD_ID) | OBJECT_T;
-const bits GRAPHICS_FONT_T = (bits(1) << GRAPHICS_FONT_ID) | OBJECT_T;
-const bits GRAPHICS_PARTICLE_SYSTEM_T = (bits(1) << GRAPHICS_PARTICLE_SYSTEM_ID) | GRAPHICS_DRAWABLE_T;
-const bits GRAPHICS_SPRITE_BATCH_T = (bits(1) << GRAPHICS_SPRITE_BATCH_ID) | GRAPHICS_DRAWABLE_T;
-const bits GRAPHICS_CANVAS_T = (bits(1) << GRAPHICS_CANVAS_ID) | GRAPHICS_TEXTURE_T;
-const bits GRAPHICS_SHADER_T = (bits(1) << GRAPHICS_SHADER_ID) | OBJECT_T;
-const bits GRAPHICS_MESH_T = (bits(1) << GRAPHICS_MESH_ID) | GRAPHICS_DRAWABLE_T;
-
-// Image.
-const bits IMAGE_IMAGE_DATA_T = (bits(1) << IMAGE_IMAGE_DATA_ID) | DATA_T;
-const bits IMAGE_COMPRESSED_DATA_T = (bits(1) << IMAGE_COMPRESSED_DATA_ID) | DATA_T;
-
-// Joystick.
-const bits JOYSTICK_JOYSTICK_T = (bits(1) << JOYSTICK_JOYSTICK_ID) | OBJECT_T;
-
-// Math.
-const bits MATH_RANDOM_GENERATOR_T = (bits(1) << MATH_RANDOM_GENERATOR_ID) | OBJECT_T;
-const bits MATH_BEZIER_CURVE_T = (bits(1) << MATH_BEZIER_CURVE_ID) | OBJECT_T;
-
-// Audio.
-const bits AUDIO_SOURCE_T = (bits(1) << AUDIO_SOURCE_ID) | OBJECT_T;
-
-// Sound.
-const bits SOUND_SOUND_DATA_T = (bits(1) << SOUND_SOUND_DATA_ID) | DATA_T;
-const bits SOUND_DECODER_T = bits(1) << SOUND_DECODER_ID;
-
-// Mouse.
-const bits MOUSE_CURSOR_T = (bits(1) << MOUSE_CURSOR_ID) | OBJECT_T;
-
-// Physics.
-const bits PHYSICS_WORLD_T = (bits(1) << PHYSICS_WORLD_ID) | OBJECT_T;
-const bits PHYSICS_CONTACT_T = (bits(1) << PHYSICS_CONTACT_ID) | OBJECT_T;
-const bits PHYSICS_BODY_T = (bits(1) << PHYSICS_BODY_ID) | OBJECT_T;
-const bits PHYSICS_FIXTURE_T = (bits(1) << PHYSICS_FIXTURE_ID) | OBJECT_T;
-const bits PHYSICS_SHAPE_T = (bits(1) << PHYSICS_SHAPE_ID) | OBJECT_T;
-const bits PHYSICS_CIRCLE_SHAPE_T = (bits(1) << PHYSICS_CIRCLE_SHAPE_ID) | PHYSICS_SHAPE_T;
-const bits PHYSICS_POLYGON_SHAPE_T = (bits(1) << PHYSICS_POLYGON_SHAPE_ID) | PHYSICS_SHAPE_T;
-const bits PHYSICS_EDGE_SHAPE_T = (bits(1) << PHYSICS_EDGE_SHAPE_ID) | PHYSICS_SHAPE_T;
-const bits PHYSICS_CHAIN_SHAPE_T = (bits(1) << PHYSICS_CHAIN_SHAPE_ID) | PHYSICS_SHAPE_T;
-const bits PHYSICS_JOINT_T = (bits(1) << PHYSICS_JOINT_ID) | OBJECT_T;
-const bits PHYSICS_MOUSE_JOINT_T = (bits(1) << PHYSICS_MOUSE_JOINT_ID) | PHYSICS_JOINT_T;
-const bits PHYSICS_DISTANCE_JOINT_T = (bits(1) << PHYSICS_DISTANCE_JOINT_ID) | PHYSICS_JOINT_T;
-const bits PHYSICS_PRISMATIC_JOINT_T = (bits(1) << PHYSICS_PRISMATIC_JOINT_ID) | PHYSICS_JOINT_T;
-const bits PHYSICS_REVOLUTE_JOINT_T = (bits(1) << PHYSICS_REVOLUTE_JOINT_ID) | PHYSICS_JOINT_T;
-const bits PHYSICS_PULLEY_JOINT_T = (bits(1) << PHYSICS_PULLEY_JOINT_ID) | PHYSICS_JOINT_T;
-const bits PHYSICS_GEAR_JOINT_T = (bits(1) << PHYSICS_GEAR_JOINT_ID) | PHYSICS_JOINT_T;
-const bits PHYSICS_FRICTION_JOINT_T = (bits(1) << PHYSICS_FRICTION_JOINT_ID) | PHYSICS_JOINT_T;
-const bits PHYSICS_WELD_JOINT_T = (bits(1) << PHYSICS_WELD_JOINT_ID) | PHYSICS_JOINT_T;
-const bits PHYSICS_ROPE_JOINT_T = (bits(1) << PHYSICS_ROPE_JOINT_ID) | PHYSICS_JOINT_T;
-const bits PHYSICS_WHEEL_JOINT_T = (bits(1) << PHYSICS_WHEEL_JOINT_ID) | PHYSICS_JOINT_T;
-const bits PHYSICS_MOTOR_JOINT_T = (bits(1) << PHYSICS_MOTOR_JOINT_ID) | PHYSICS_JOINT_T;
-
-// Thread.
-const bits THREAD_THREAD_T = (bits(1) << THREAD_THREAD_ID) | OBJECT_T;
-const bits THREAD_CHANNEL_T = (bits(1) << THREAD_CHANNEL_ID) | OBJECT_T;
-
-// Modules.
-const bits MODULE_FILESYSTEM_T = (bits(1) << MODULE_FILESYSTEM_ID) | MODULE_T;
-const bits MODULE_GRAPHICS_T = (bits(1) << MODULE_GRAPHICS_ID) | MODULE_T;
-const bits MODULE_IMAGE_T = (bits(1) << MODULE_IMAGE_ID) | MODULE_T;
-const bits MODULE_SOUND_T = (bits(1) << MODULE_SOUND_ID) | MODULE_T;
+typedef std::bitset<TYPE_MAX_ENUM> TypeBits;
+
+/**
+ * Array of length TYPE_MAX_ENUM containing the flags for each love Type.
+ **/
+extern const TypeBits *typeFlags;
 
 bool getType(const char *in, Type &out);
-bool getType(Type in, const char  *&out);
+bool getType(Type in, const char *&out);
 
 } // love
 

+ 7 - 7
src/common/version.h

@@ -25,13 +25,13 @@ namespace love
 {
 
 // Version stuff.
-#define LOVE_VERSION_STRING "0.9.2"
-const int VERSION_MAJOR = 0;
-const int VERSION_MINOR = 9;
-const int VERSION_REV = 2;
-const char *VERSION = LOVE_VERSION_STRING;
-const char *VERSION_COMPATIBILITY[] =  { VERSION, "0.9.1", "0.9.0", 0 };
-const char *VERSION_CODENAME = "Baby Inspector";
+#define LOVE_VERSION_STRING "0.10.0"
+static const int VERSION_MAJOR = 0;
+static const int VERSION_MINOR = 10;
+static const int VERSION_REV = 0;
+static const char *VERSION = LOVE_VERSION_STRING;
+static const char *VERSION_COMPATIBILITY[] =  { VERSION, 0 };
+static const char *VERSION_CODENAME = "";
 
 } // love
 

+ 2 - 2
src/common/wrap_Data.cpp

@@ -25,7 +25,7 @@ namespace love
 
 Data *luax_checkdata(lua_State *L, int idx)
 {
-	return luax_checktype<Data>(L, idx, "Data", DATA_T);
+	return luax_checktype<Data>(L, idx, DATA_ID);
 }
 
 int w_Data_getString(lua_State *L)
@@ -59,7 +59,7 @@ const luaL_Reg w_Data_functions[] =
 
 int w_Data_open(lua_State *L)
 {
-	luax_register_type(L, "Data", w_Data_functions);
+	luax_register_type(L, DATA_ID, w_Data_functions);
 	return 0;
 }
 

+ 6888 - 0
src/libraries/glad/glad.cpp

@@ -0,0 +1,6888 @@
+#include <string.h>
+#include "glad.hpp"
+
+namespace glad {
+
+
+#ifdef GLAD_USE_SDL
+#include <SDL.h>
+#if !SDL_VERSION_ATLEAST(2,0,0)
+#error SDL 2 is required!
+#endif
+#else
+#include <assert.h>
+#endif
+
+bool gladLoadGL(void) {
+#ifdef GLAD_USE_SDL
+    return gladLoadGLLoader(SDL_GL_GetProcAddress);
+#else
+    // generic gladLoadGL is not implemented, use gladLoadGLLoader or define GLAD_USE_SDL
+    assert(0);
+    return false;
+#endif
+}
+
+struct {
+    int major;
+    int minor;
+    int gles;
+} GLVersion;
+
+
+static bool has_ext(const char *ext) {
+    if(GLVersion.major < 3) {
+        const char *extensions;
+        const char *loc;
+        const char *terminator;
+        extensions = (const char *)fp_glGetString(GL_EXTENSIONS);
+        if(extensions == NULL || ext == NULL) {
+            return false;
+        }
+
+        while(1) {
+            loc = strstr(extensions, ext);
+            if(loc == NULL) {
+                return false;
+            }
+
+            terminator = loc + strlen(ext);
+            if((loc == extensions || *(loc - 1) == ' ') &&
+                (*terminator == ' ' || *terminator == '\0')) {
+                return true;
+            }
+            extensions = terminator;
+        }
+    } else {
+        int num;
+        fp_glGetIntegerv(GL_NUM_EXTENSIONS, &num);
+
+        int index;
+        for(index = 0; index < num; index++) {
+            const char *e = (const char*)fp_glGetStringi(GL_EXTENSIONS, index);
+            if(strcmp(e, ext) == 0) {
+                return true;
+            }
+        }
+    }
+
+    return false;
+}
+
+pfn_glCopyTexImage1D fp_glCopyTexImage1D;
+pfn_glTextureParameterf fp_glTextureParameterf;
+pfn_glVertexAttribI3ui fp_glVertexAttribI3ui;
+pfn_glVertexArrayElementBuffer fp_glVertexArrayElementBuffer;
+pfn_glWindowPos2s fp_glWindowPos2s;
+pfn_glTextureStorage3DMultisample fp_glTextureStorage3DMultisample;
+pfn_glTextureParameterfv fp_glTextureParameterfv;
+pfn_glWindowPos2i fp_glWindowPos2i;
+pfn_glWindowPos2f fp_glWindowPos2f;
+pfn_glWindowPos2d fp_glWindowPos2d;
+pfn_glVertex2fv fp_glVertex2fv;
+pfn_glIndexi fp_glIndexi;
+pfn_glFramebufferRenderbuffer fp_glFramebufferRenderbuffer;
+pfn_glUniformSubroutinesuiv fp_glUniformSubroutinesuiv;
+pfn_glRectdv fp_glRectdv;
+pfn_glCompressedTexSubImage3D fp_glCompressedTexSubImage3D;
+pfn_glEvalCoord2d fp_glEvalCoord2d;
+pfn_glEvalCoord2f fp_glEvalCoord2f;
+pfn_glGetDoublei_v fp_glGetDoublei_v;
+pfn_glIndexd fp_glIndexd;
+pfn_glVertexAttrib1sv fp_glVertexAttrib1sv;
+pfn_glIndexf fp_glIndexf;
+pfn_glBindSampler fp_glBindSampler;
+pfn_glLineWidth fp_glLineWidth;
+pfn_glColorP3uiv fp_glColorP3uiv;
+pfn_glGetIntegeri_v fp_glGetIntegeri_v;
+pfn_glGetMapfv fp_glGetMapfv;
+pfn_glIndexs fp_glIndexs;
+pfn_glCompileShader fp_glCompileShader;
+pfn_glGetTransformFeedbackVarying fp_glGetTransformFeedbackVarying;
+pfn_glWindowPos2iv fp_glWindowPos2iv;
+pfn_glDrawTransformFeedbackStreamInstanced fp_glDrawTransformFeedbackStreamInstanced;
+pfn_glIndexfv fp_glIndexfv;
+pfn_glGetCompressedTextureImage fp_glGetCompressedTextureImage;
+pfn_glGetnMapfv fp_glGetnMapfv;
+pfn_glFogiv fp_glFogiv;
+pfn_glStencilMaskSeparate fp_glStencilMaskSeparate;
+pfn_glRasterPos2fv fp_glRasterPos2fv;
+pfn_glLightModeliv fp_glLightModeliv;
+pfn_glDepthRangef fp_glDepthRangef;
+pfn_glColor4ui fp_glColor4ui;
+pfn_glSecondaryColor3fv fp_glSecondaryColor3fv;
+pfn_glMultiTexCoordP3ui fp_glMultiTexCoordP3ui;
+pfn_glMemoryBarrierByRegion fp_glMemoryBarrierByRegion;
+pfn_glGetNamedBufferParameteriv fp_glGetNamedBufferParameteriv;
+pfn_glFogfv fp_glFogfv;
+pfn_glVertexP4ui fp_glVertexP4ui;
+pfn_glDrawElementsInstancedBaseInstance fp_glDrawElementsInstancedBaseInstance;
+pfn_glEnablei fp_glEnablei;
+pfn_glProgramUniform3dv fp_glProgramUniform3dv;
+pfn_glVertex4iv fp_glVertex4iv;
+pfn_glEvalCoord1fv fp_glEvalCoord1fv;
+pfn_glWindowPos2sv fp_glWindowPos2sv;
+pfn_glVertexAttribP4ui fp_glVertexAttribP4ui;
+pfn_glCreateShader fp_glCreateShader;
+pfn_glIsBuffer fp_glIsBuffer;
+pfn_glGetMultisamplefv fp_glGetMultisamplefv;
+pfn_glProgramUniformMatrix2dv fp_glProgramUniformMatrix2dv;
+pfn_glGenRenderbuffers fp_glGenRenderbuffers;
+pfn_glCopyTexSubImage2D fp_glCopyTexSubImage2D;
+pfn_glCompressedTexImage2D fp_glCompressedTexImage2D;
+pfn_glVertexAttrib1f fp_glVertexAttrib1f;
+pfn_glBlendFuncSeparate fp_glBlendFuncSeparate;
+pfn_glVertex4fv fp_glVertex4fv;
+pfn_glMinSampleShading fp_glMinSampleShading;
+pfn_glClearNamedFramebufferfi fp_glClearNamedFramebufferfi;
+pfn_glBindTexture fp_glBindTexture;
+pfn_glVertexAttrib1s fp_glVertexAttrib1s;
+pfn_glTexCoord2fv fp_glTexCoord2fv;
+pfn_glSampleMaski fp_glSampleMaski;
+pfn_glVertexP2ui fp_glVertexP2ui;
+pfn_glDrawRangeElementsBaseVertex fp_glDrawRangeElementsBaseVertex;
+pfn_glTexCoord4fv fp_glTexCoord4fv;
+pfn_glUniformMatrix3x2fv fp_glUniformMatrix3x2fv;
+pfn_glDebugMessageControl fp_glDebugMessageControl;
+pfn_glPointSize fp_glPointSize;
+pfn_glBindTextureUnit fp_glBindTextureUnit;
+pfn_glVertexAttrib2dv fp_glVertexAttrib2dv;
+pfn_glDeleteProgram fp_glDeleteProgram;
+pfn_glColor4bv fp_glColor4bv;
+pfn_glRasterPos2f fp_glRasterPos2f;
+pfn_glRasterPos2d fp_glRasterPos2d;
+pfn_glLoadIdentity fp_glLoadIdentity;
+pfn_glRasterPos2i fp_glRasterPos2i;
+pfn_glMultiDrawArraysIndirect fp_glMultiDrawArraysIndirect;
+pfn_glRenderbufferStorage fp_glRenderbufferStorage;
+pfn_glUniformMatrix4x3fv fp_glUniformMatrix4x3fv;
+pfn_glColor3b fp_glColor3b;
+pfn_glClearBufferfv fp_glClearBufferfv;
+pfn_glEdgeFlag fp_glEdgeFlag;
+pfn_glDeleteSamplers fp_glDeleteSamplers;
+pfn_glVertex3d fp_glVertex3d;
+pfn_glVertex3f fp_glVertex3f;
+pfn_glGetnMapiv fp_glGetnMapiv;
+pfn_glVertex3i fp_glVertex3i;
+pfn_glColor3i fp_glColor3i;
+pfn_glUniform3d fp_glUniform3d;
+pfn_glUniform3f fp_glUniform3f;
+pfn_glVertexAttrib4ubv fp_glVertexAttrib4ubv;
+pfn_glColor3s fp_glColor3s;
+pfn_glVertex3s fp_glVertex3s;
+pfn_glTexCoordP2ui fp_glTexCoordP2ui;
+pfn_glColorMaski fp_glColorMaski;
+pfn_glClearBufferfi fp_glClearBufferfi;
+pfn_glDrawArraysIndirect fp_glDrawArraysIndirect;
+pfn_glTexCoord1iv fp_glTexCoord1iv;
+pfn_glBlitFramebuffer fp_glBlitFramebuffer;
+pfn_glPauseTransformFeedback fp_glPauseTransformFeedback;
+pfn_glMultiTexCoordP2ui fp_glMultiTexCoordP2ui;
+pfn_glProgramUniformMatrix3x2dv fp_glProgramUniformMatrix3x2dv;
+pfn_glCopyNamedBufferSubData fp_glCopyNamedBufferSubData;
+pfn_glNamedFramebufferTexture fp_glNamedFramebufferTexture;
+pfn_glProgramUniformMatrix3x2fv fp_glProgramUniformMatrix3x2fv;
+pfn_glGetSamplerParameterIiv fp_glGetSamplerParameterIiv;
+pfn_glGetFragDataIndex fp_glGetFragDataIndex;
+pfn_glVertexAttribL4d fp_glVertexAttribL4d;
+pfn_glBindImageTexture fp_glBindImageTexture;
+pfn_glVertexAttrib3f fp_glVertexAttrib3f;
+pfn_glProgramUniformMatrix4fv fp_glProgramUniformMatrix4fv;
+pfn_glVertex2iv fp_glVertex2iv;
+pfn_glColor3sv fp_glColor3sv;
+pfn_glGetVertexAttribdv fp_glGetVertexAttribdv;
+pfn_glActiveShaderProgram fp_glActiveShaderProgram;
+pfn_glUniformMatrix3x4fv fp_glUniformMatrix3x4fv;
+pfn_glUniformMatrix3dv fp_glUniformMatrix3dv;
+pfn_glNormalPointer fp_glNormalPointer;
+pfn_glTexCoordP3uiv fp_glTexCoordP3uiv;
+pfn_glVertex4sv fp_glVertex4sv;
+pfn_glVertexArrayAttribLFormat fp_glVertexArrayAttribLFormat;
+pfn_glInvalidateBufferSubData fp_glInvalidateBufferSubData;
+pfn_glPassThrough fp_glPassThrough;
+pfn_glMultiTexCoordP4ui fp_glMultiTexCoordP4ui;
+pfn_glFogi fp_glFogi;
+pfn_glBegin fp_glBegin;
+pfn_glEvalCoord2dv fp_glEvalCoord2dv;
+pfn_glColor3ubv fp_glColor3ubv;
+pfn_glVertexPointer fp_glVertexPointer;
+pfn_glSecondaryColor3uiv fp_glSecondaryColor3uiv;
+pfn_glDeleteFramebuffers fp_glDeleteFramebuffers;
+pfn_glDrawArrays fp_glDrawArrays;
+pfn_glUniform1ui fp_glUniform1ui;
+pfn_glGetTransformFeedbackiv fp_glGetTransformFeedbackiv;
+pfn_glMultiTexCoord1d fp_glMultiTexCoord1d;
+pfn_glMultiTexCoord1f fp_glMultiTexCoord1f;
+pfn_glProgramParameteri fp_glProgramParameteri;
+pfn_glLightfv fp_glLightfv;
+pfn_glTexCoordP3ui fp_glTexCoordP3ui;
+pfn_glVertexAttrib3d fp_glVertexAttrib3d;
+pfn_glClear fp_glClear;
+pfn_glMultiTexCoord1i fp_glMultiTexCoord1i;
+pfn_glGetActiveUniformName fp_glGetActiveUniformName;
+pfn_glMemoryBarrier fp_glMemoryBarrier;
+pfn_glGetGraphicsResetStatus fp_glGetGraphicsResetStatus;
+pfn_glMultiTexCoord1s fp_glMultiTexCoord1s;
+pfn_glIsEnabled fp_glIsEnabled;
+pfn_glStencilOp fp_glStencilOp;
+pfn_glGetQueryObjectuiv fp_glGetQueryObjectuiv;
+pfn_glFramebufferTexture2D fp_glFramebufferTexture2D;
+pfn_glGetFramebufferAttachmentParameteriv fp_glGetFramebufferAttachmentParameteriv;
+pfn_glTranslatef fp_glTranslatef;
+pfn_glVertexAttrib4Nub fp_glVertexAttrib4Nub;
+pfn_glTranslated fp_glTranslated;
+pfn_glTexCoord3sv fp_glTexCoord3sv;
+pfn_glGetFragDataLocation fp_glGetFragDataLocation;
+pfn_glGetTextureParameterIiv fp_glGetTextureParameterIiv;
+pfn_glTexImage1D fp_glTexImage1D;
+pfn_glCopyTextureSubImage3D fp_glCopyTextureSubImage3D;
+pfn_glVertexP3uiv fp_glVertexP3uiv;
+pfn_glTexParameteriv fp_glTexParameteriv;
+pfn_glVertexArrayAttribIFormat fp_glVertexArrayAttribIFormat;
+pfn_glSecondaryColor3bv fp_glSecondaryColor3bv;
+pfn_glGetMaterialfv fp_glGetMaterialfv;
+pfn_glGetTexImage fp_glGetTexImage;
+pfn_glFogCoordfv fp_glFogCoordfv;
+pfn_glPixelMapuiv fp_glPixelMapuiv;
+pfn_glGetShaderInfoLog fp_glGetShaderInfoLog;
+pfn_glGetQueryObjecti64v fp_glGetQueryObjecti64v;
+pfn_glGenFramebuffers fp_glGenFramebuffers;
+pfn_glCreateTextures fp_glCreateTextures;
+pfn_glTransformFeedbackBufferBase fp_glTransformFeedbackBufferBase;
+pfn_glIndexsv fp_glIndexsv;
+pfn_glClearTexSubImage fp_glClearTexSubImage;
+pfn_glProgramUniformMatrix3x4dv fp_glProgramUniformMatrix3x4dv;
+pfn_glGetAttachedShaders fp_glGetAttachedShaders;
+pfn_glIsRenderbuffer fp_glIsRenderbuffer;
+pfn_glVertex3iv fp_glVertex3iv;
+pfn_glBitmap fp_glBitmap;
+pfn_glGetDebugMessageLog fp_glGetDebugMessageLog;
+pfn_glProgramUniform1uiv fp_glProgramUniform1uiv;
+pfn_glMateriali fp_glMateriali;
+pfn_glIsVertexArray fp_glIsVertexArray;
+pfn_glDisableVertexAttribArray fp_glDisableVertexAttribArray;
+pfn_glProgramUniform2iv fp_glProgramUniform2iv;
+pfn_glGetQueryiv fp_glGetQueryiv;
+pfn_glTexCoord4f fp_glTexCoord4f;
+pfn_glBlitNamedFramebuffer fp_glBlitNamedFramebuffer;
+pfn_glTexCoord4d fp_glTexCoord4d;
+pfn_glCreateQueries fp_glCreateQueries;
+pfn_glGetSamplerParameterfv fp_glGetSamplerParameterfv;
+pfn_glTexCoord4i fp_glTexCoord4i;
+pfn_glShaderStorageBlockBinding fp_glShaderStorageBlockBinding;
+pfn_glMaterialf fp_glMaterialf;
+pfn_glTexCoord4s fp_glTexCoord4s;
+pfn_glProgramUniformMatrix4x2dv fp_glProgramUniformMatrix4x2dv;
+pfn_glGetUniformIndices fp_glGetUniformIndices;
+pfn_glIsShader fp_glIsShader;
+pfn_glMultiTexCoord2s fp_glMultiTexCoord2s;
+pfn_glVertexAttribI4ubv fp_glVertexAttribI4ubv;
+pfn_glVertex3dv fp_glVertex3dv;
+pfn_glGetInteger64v fp_glGetInteger64v;
+pfn_glPointParameteriv fp_glPointParameteriv;
+pfn_glGetnMinmax fp_glGetnMinmax;
+pfn_glEnable fp_glEnable;
+pfn_glGetActiveUniformsiv fp_glGetActiveUniformsiv;
+pfn_glColor4fv fp_glColor4fv;
+pfn_glTexCoord1fv fp_glTexCoord1fv;
+pfn_glVertexArrayAttribBinding fp_glVertexArrayAttribBinding;
+pfn_glTextureStorage1D fp_glTextureStorage1D;
+pfn_glPopDebugGroup fp_glPopDebugGroup;
+pfn_glBlendEquationi fp_glBlendEquationi;
+pfn_glTexCoord2sv fp_glTexCoord2sv;
+pfn_glVertexAttrib4dv fp_glVertexAttrib4dv;
+pfn_glMultiTexCoord1dv fp_glMultiTexCoord1dv;
+pfn_glGetProgramInterfaceiv fp_glGetProgramInterfaceiv;
+pfn_glMultiTexCoord2i fp_glMultiTexCoord2i;
+pfn_glTexCoord3fv fp_glTexCoord3fv;
+pfn_glSecondaryColor3usv fp_glSecondaryColor3usv;
+pfn_glTexGenf fp_glTexGenf;
+pfn_glMapNamedBuffer fp_glMapNamedBuffer;
+pfn_glMultiTexCoordP3uiv fp_glMultiTexCoordP3uiv;
+pfn_glVertexAttribP3ui fp_glVertexAttribP3ui;
+pfn_glVertexAttribL1dv fp_glVertexAttribL1dv;
+pfn_glTextureBufferRange fp_glTextureBufferRange;
+pfn_glGetnUniformdv fp_glGetnUniformdv;
+pfn_glMultiTexCoordP1ui fp_glMultiTexCoordP1ui;
+pfn_glProgramUniform3ui fp_glProgramUniform3ui;
+pfn_glTransformFeedbackBufferRange fp_glTransformFeedbackBufferRange;
+pfn_glGetPointerv fp_glGetPointerv;
+pfn_glVertexBindingDivisor fp_glVertexBindingDivisor;
+pfn_glPolygonOffset fp_glPolygonOffset;
+pfn_glGetUniformuiv fp_glGetUniformuiv;
+pfn_glNormal3fv fp_glNormal3fv;
+pfn_glSecondaryColor3s fp_glSecondaryColor3s;
+pfn_glNamedFramebufferDrawBuffers fp_glNamedFramebufferDrawBuffers;
+pfn_glDepthRange fp_glDepthRange;
+pfn_glFrustum fp_glFrustum;
+pfn_glMultiTexCoord4sv fp_glMultiTexCoord4sv;
+pfn_glVertexArrayBindingDivisor fp_glVertexArrayBindingDivisor;
+pfn_glDrawBuffer fp_glDrawBuffer;
+pfn_glPushMatrix fp_glPushMatrix;
+pfn_glGetnPixelMapusv fp_glGetnPixelMapusv;
+pfn_glRasterPos3fv fp_glRasterPos3fv;
+pfn_glOrtho fp_glOrtho;
+pfn_glDrawElementsInstanced fp_glDrawElementsInstanced;
+pfn_glWindowPos3sv fp_glWindowPos3sv;
+pfn_glVertexAttribL4dv fp_glVertexAttribL4dv;
+pfn_glProgramUniform1i fp_glProgramUniform1i;
+pfn_glUniform2dv fp_glUniform2dv;
+pfn_glProgramUniform1d fp_glProgramUniform1d;
+pfn_glProgramUniform1f fp_glProgramUniform1f;
+pfn_glClearIndex fp_glClearIndex;
+pfn_glMap1d fp_glMap1d;
+pfn_glMap1f fp_glMap1f;
+pfn_glFlush fp_glFlush;
+pfn_glGetRenderbufferParameteriv fp_glGetRenderbufferParameteriv;
+pfn_glBeginQueryIndexed fp_glBeginQueryIndexed;
+pfn_glProgramUniform3iv fp_glProgramUniform3iv;
+pfn_glIndexiv fp_glIndexiv;
+pfn_glNamedRenderbufferStorage fp_glNamedRenderbufferStorage;
+pfn_glRasterPos3sv fp_glRasterPos3sv;
+pfn_glGetVertexAttribPointerv fp_glGetVertexAttribPointerv;
+pfn_glPixelZoom fp_glPixelZoom;
+pfn_glFenceSync fp_glFenceSync;
+pfn_glDeleteVertexArrays fp_glDeleteVertexArrays;
+pfn_glColorP3ui fp_glColorP3ui;
+pfn_glDrawElementsInstancedBaseVertexBaseInstance fp_glDrawElementsInstancedBaseVertexBaseInstance;
+pfn_glTextureStorage2DMultisample fp_glTextureStorage2DMultisample;
+pfn_glVertexAttrib3sv fp_glVertexAttrib3sv;
+pfn_glBeginConditionalRender fp_glBeginConditionalRender;
+pfn_glPushDebugGroup fp_glPushDebugGroup;
+pfn_glGetShaderPrecisionFormat fp_glGetShaderPrecisionFormat;
+pfn_glValidateProgramPipeline fp_glValidateProgramPipeline;
+pfn_glDrawElementsBaseVertex fp_glDrawElementsBaseVertex;
+pfn_glGetTexLevelParameteriv fp_glGetTexLevelParameteriv;
+pfn_glLighti fp_glLighti;
+pfn_glMultiTexCoordP4uiv fp_glMultiTexCoordP4uiv;
+pfn_glVertexArrayVertexBuffer fp_glVertexArrayVertexBuffer;
+pfn_glLightf fp_glLightf;
+pfn_glBindVertexBuffers fp_glBindVertexBuffers;
+pfn_glGetAttribLocation fp_glGetAttribLocation;
+pfn_glTexStorage3DMultisample fp_glTexStorage3DMultisample;
+pfn_glStencilFuncSeparate fp_glStencilFuncSeparate;
+pfn_glDisableVertexArrayAttrib fp_glDisableVertexArrayAttrib;
+pfn_glGenSamplers fp_glGenSamplers;
+pfn_glClampColor fp_glClampColor;
+pfn_glUniform4iv fp_glUniform4iv;
+pfn_glClearStencil fp_glClearStencil;
+pfn_glTexCoordP1uiv fp_glTexCoordP1uiv;
+pfn_glGetNamedRenderbufferParameteriv fp_glGetNamedRenderbufferParameteriv;
+pfn_glDrawTransformFeedbackInstanced fp_glDrawTransformFeedbackInstanced;
+pfn_glMultiTexCoord3fv fp_glMultiTexCoord3fv;
+pfn_glGetPixelMapuiv fp_glGetPixelMapuiv;
+pfn_glGenTextures fp_glGenTextures;
+pfn_glTexCoord4iv fp_glTexCoord4iv;
+pfn_glDrawTransformFeedback fp_glDrawTransformFeedback;
+pfn_glUniform1dv fp_glUniform1dv;
+pfn_glGetTexParameterIuiv fp_glGetTexParameterIuiv;
+pfn_glGetTransformFeedbacki_v fp_glGetTransformFeedbacki_v;
+pfn_glIndexPointer fp_glIndexPointer;
+pfn_glGetnPolygonStipple fp_glGetnPolygonStipple;
+pfn_glVertexAttrib4Nbv fp_glVertexAttrib4Nbv;
+pfn_glClearNamedFramebufferuiv fp_glClearNamedFramebufferuiv;
+pfn_glGetVertexArrayIndexediv fp_glGetVertexArrayIndexediv;
+pfn_glIsSync fp_glIsSync;
+pfn_glVertex2f fp_glVertex2f;
+pfn_glVertex2d fp_glVertex2d;
+pfn_glDeleteRenderbuffers fp_glDeleteRenderbuffers;
+pfn_glUniform2i fp_glUniform2i;
+pfn_glMapGrid2d fp_glMapGrid2d;
+pfn_glMapGrid2f fp_glMapGrid2f;
+pfn_glTexCoordP4ui fp_glTexCoordP4ui;
+pfn_glVertex2i fp_glVertex2i;
+pfn_glVertexAttribPointer fp_glVertexAttribPointer;
+pfn_glProgramUniform1ui fp_glProgramUniform1ui;
+pfn_glFramebufferTextureLayer fp_glFramebufferTextureLayer;
+pfn_glVertex2s fp_glVertex2s;
+pfn_glGetObjectPtrLabel fp_glGetObjectPtrLabel;
+pfn_glTextureParameteri fp_glTextureParameteri;
+pfn_glNormal3bv fp_glNormal3bv;
+pfn_glVertexAttrib4Nuiv fp_glVertexAttrib4Nuiv;
+pfn_glFlushMappedBufferRange fp_glFlushMappedBufferRange;
+pfn_glProgramUniform2fv fp_glProgramUniform2fv;
+pfn_glUniformMatrix2x3dv fp_glUniformMatrix2x3dv;
+pfn_glProgramUniformMatrix4dv fp_glProgramUniformMatrix4dv;
+pfn_glSecondaryColor3sv fp_glSecondaryColor3sv;
+pfn_glProgramUniformMatrix2x4dv fp_glProgramUniformMatrix2x4dv;
+pfn_glDispatchCompute fp_glDispatchCompute;
+pfn_glVertex3sv fp_glVertex3sv;
+pfn_glGenQueries fp_glGenQueries;
+pfn_glGetPixelMapfv fp_glGetPixelMapfv;
+pfn_glTexEnvf fp_glTexEnvf;
+pfn_glVertexAttribP1ui fp_glVertexAttribP1ui;
+pfn_glTexSubImage3D fp_glTexSubImage3D;
+pfn_glGetInteger64i_v fp_glGetInteger64i_v;
+pfn_glFogCoordd fp_glFogCoordd;
+pfn_glFogCoordf fp_glFogCoordf;
+pfn_glCopyTexImage2D fp_glCopyTexImage2D;
+pfn_glTexEnvi fp_glTexEnvi;
+pfn_glMultiTexCoord1iv fp_glMultiTexCoord1iv;
+pfn_glIsEnabledi fp_glIsEnabledi;
+pfn_glBindBuffersRange fp_glBindBuffersRange;
+pfn_glSecondaryColorP3ui fp_glSecondaryColorP3ui;
+pfn_glVertexAttribI2i fp_glVertexAttribI2i;
+pfn_glBindFragDataLocationIndexed fp_glBindFragDataLocationIndexed;
+pfn_glCopyImageSubData fp_glCopyImageSubData;
+pfn_glMultiTexCoord2dv fp_glMultiTexCoord2dv;
+pfn_glUniform2iv fp_glUniform2iv;
+pfn_glVertexAttrib1fv fp_glVertexAttrib1fv;
+pfn_glGetInternalformativ fp_glGetInternalformativ;
+pfn_glUniform4uiv fp_glUniform4uiv;
+pfn_glMatrixMode fp_glMatrixMode;
+pfn_glGetTextureImage fp_glGetTextureImage;
+pfn_glFeedbackBuffer fp_glFeedbackBuffer;
+pfn_glProgramUniform2dv fp_glProgramUniform2dv;
+pfn_glEndQueryIndexed fp_glEndQueryIndexed;
+pfn_glGetMapiv fp_glGetMapiv;
+pfn_glTextureSubImage3D fp_glTextureSubImage3D;
+pfn_glFramebufferTexture1D fp_glFramebufferTexture1D;
+pfn_glUniform4d fp_glUniform4d;
+pfn_glGetShaderiv fp_glGetShaderiv;
+pfn_glMultiTexCoord2d fp_glMultiTexCoord2d;
+pfn_glMultiTexCoord2f fp_glMultiTexCoord2f;
+pfn_glProgramUniformMatrix3fv fp_glProgramUniformMatrix3fv;
+pfn_glObjectPtrLabel fp_glObjectPtrLabel;
+pfn_glInvalidateFramebuffer fp_glInvalidateFramebuffer;
+pfn_glBindTextures fp_glBindTextures;
+pfn_glBindFragDataLocation fp_glBindFragDataLocation;
+pfn_glNamedBufferStorage fp_glNamedBufferStorage;
+pfn_glScissorArrayv fp_glScissorArrayv;
+pfn_glPrioritizeTextures fp_glPrioritizeTextures;
+pfn_glCallList fp_glCallList;
+pfn_glPatchParameterfv fp_glPatchParameterfv;
+pfn_glSecondaryColor3ubv fp_glSecondaryColor3ubv;
+pfn_glGetDoublev fp_glGetDoublev;
+pfn_glMultiTexCoord3iv fp_glMultiTexCoord3iv;
+pfn_glVertexAttrib1d fp_glVertexAttrib1d;
+pfn_glUniform4dv fp_glUniform4dv;
+pfn_glLightModelf fp_glLightModelf;
+pfn_glGetUniformiv fp_glGetUniformiv;
+pfn_glInvalidateBufferData fp_glInvalidateBufferData;
+pfn_glVertex2sv fp_glVertex2sv;
+pfn_glVertexArrayVertexBuffers fp_glVertexArrayVertexBuffers;
+pfn_glCompressedTextureSubImage1D fp_glCompressedTextureSubImage1D;
+pfn_glLightModeli fp_glLightModeli;
+pfn_glWindowPos3iv fp_glWindowPos3iv;
+pfn_glMultiTexCoordP1uiv fp_glMultiTexCoordP1uiv;
+pfn_glUniform3fv fp_glUniform3fv;
+pfn_glPixelStorei fp_glPixelStorei;
+pfn_glGetProgramPipelineInfoLog fp_glGetProgramPipelineInfoLog;
+pfn_glCallLists fp_glCallLists;
+pfn_glProgramUniformMatrix3x4fv fp_glProgramUniformMatrix3x4fv;
+pfn_glInvalidateSubFramebuffer fp_glInvalidateSubFramebuffer;
+pfn_glMapBuffer fp_glMapBuffer;
+pfn_glSecondaryColor3d fp_glSecondaryColor3d;
+pfn_glTexCoord3i fp_glTexCoord3i;
+pfn_glMultiTexCoord4fv fp_glMultiTexCoord4fv;
+pfn_glRasterPos3i fp_glRasterPos3i;
+pfn_glSecondaryColor3b fp_glSecondaryColor3b;
+pfn_glRasterPos3d fp_glRasterPos3d;
+pfn_glRasterPos3f fp_glRasterPos3f;
+pfn_glCompressedTexImage3D fp_glCompressedTexImage3D;
+pfn_glTexCoord3f fp_glTexCoord3f;
+pfn_glDeleteSync fp_glDeleteSync;
+pfn_glTexCoord3d fp_glTexCoord3d;
+pfn_glGetTransformFeedbacki64_v fp_glGetTransformFeedbacki64_v;
+pfn_glUniformMatrix4dv fp_glUniformMatrix4dv;
+pfn_glTexImage2DMultisample fp_glTexImage2DMultisample;
+pfn_glGetVertexAttribiv fp_glGetVertexAttribiv;
+pfn_glUniformMatrix4x2dv fp_glUniformMatrix4x2dv;
+pfn_glMultiDrawElements fp_glMultiDrawElements;
+pfn_glVertexAttrib3fv fp_glVertexAttrib3fv;
+pfn_glTexCoord3s fp_glTexCoord3s;
+pfn_glUniform3iv fp_glUniform3iv;
+pfn_glRasterPos3s fp_glRasterPos3s;
+pfn_glPolygonMode fp_glPolygonMode;
+pfn_glDrawBuffers fp_glDrawBuffers;
+pfn_glGetnHistogram fp_glGetnHistogram;
+pfn_glGetActiveUniformBlockiv fp_glGetActiveUniformBlockiv;
+pfn_glAreTexturesResident fp_glAreTexturesResident;
+pfn_glProgramUniform2d fp_glProgramUniform2d;
+pfn_glProgramUniformMatrix4x3dv fp_glProgramUniformMatrix4x3dv;
+pfn_glIsList fp_glIsList;
+pfn_glProgramUniform4iv fp_glProgramUniform4iv;
+pfn_glRasterPos2sv fp_glRasterPos2sv;
+pfn_glRasterPos4sv fp_glRasterPos4sv;
+pfn_glColor4s fp_glColor4s;
+pfn_glGetProgramBinary fp_glGetProgramBinary;
+pfn_glUseProgram fp_glUseProgram;
+pfn_glLineStipple fp_glLineStipple;
+pfn_glMultiTexCoord1sv fp_glMultiTexCoord1sv;
+pfn_glGetProgramInfoLog fp_glGetProgramInfoLog;
+pfn_glClearTexImage fp_glClearTexImage;
+pfn_glGetBufferParameteriv fp_glGetBufferParameteriv;
+pfn_glMultiTexCoord2iv fp_glMultiTexCoord2iv;
+pfn_glUniformMatrix2x4fv fp_glUniformMatrix2x4fv;
+pfn_glBindVertexArray fp_glBindVertexArray;
+pfn_glColor4b fp_glColor4b;
+pfn_glSecondaryColor3f fp_glSecondaryColor3f;
+pfn_glColor4f fp_glColor4f;
+pfn_glColor4d fp_glColor4d;
+pfn_glColor4i fp_glColor4i;
+pfn_glSamplerParameterIiv fp_glSamplerParameterIiv;
+pfn_glMultiDrawElementsBaseVertex fp_glMultiDrawElementsBaseVertex;
+pfn_glVertexAttribLFormat fp_glVertexAttribLFormat;
+pfn_glRasterPos3iv fp_glRasterPos3iv;
+pfn_glTextureStorage2D fp_glTextureStorage2D;
+pfn_glGenerateTextureMipmap fp_glGenerateTextureMipmap;
+pfn_glVertex2dv fp_glVertex2dv;
+pfn_glTexCoord4sv fp_glTexCoord4sv;
+pfn_glUniform2uiv fp_glUniform2uiv;
+pfn_glCompressedTexSubImage1D fp_glCompressedTexSubImage1D;
+pfn_glFinish fp_glFinish;
+pfn_glDepthRangeIndexed fp_glDepthRangeIndexed;
+pfn_glGetBooleanv fp_glGetBooleanv;
+pfn_glDeleteShader fp_glDeleteShader;
+pfn_glDrawElements fp_glDrawElements;
+pfn_glGetInternalformati64v fp_glGetInternalformati64v;
+pfn_glRasterPos2s fp_glRasterPos2s;
+pfn_glCopyTextureSubImage1D fp_glCopyTextureSubImage1D;
+pfn_glGetMapdv fp_glGetMapdv;
+pfn_glVertexAttrib4Nsv fp_glVertexAttrib4Nsv;
+pfn_glMaterialfv fp_glMaterialfv;
+pfn_glTextureParameterIuiv fp_glTextureParameterIuiv;
+pfn_glViewport fp_glViewport;
+pfn_glUniform1uiv fp_glUniform1uiv;
+pfn_glTransformFeedbackVaryings fp_glTransformFeedbackVaryings;
+pfn_glIndexdv fp_glIndexdv;
+pfn_glCopyTexSubImage3D fp_glCopyTexSubImage3D;
+pfn_glTexCoord3iv fp_glTexCoord3iv;
+pfn_glDebugMessageCallback fp_glDebugMessageCallback;
+pfn_glVertexAttribI3i fp_glVertexAttribI3i;
+pfn_glInvalidateTexImage fp_glInvalidateTexImage;
+pfn_glVertexAttribFormat fp_glVertexAttribFormat;
+pfn_glClearDepth fp_glClearDepth;
+pfn_glVertexAttribI4usv fp_glVertexAttribI4usv;
+pfn_glTexParameterf fp_glTexParameterf;
+pfn_glVertexAttribBinding fp_glVertexAttribBinding;
+pfn_glTexParameteri fp_glTexParameteri;
+pfn_glGetActiveSubroutineUniformiv fp_glGetActiveSubroutineUniformiv;
+pfn_glGetShaderSource fp_glGetShaderSource;
+pfn_glCreateTransformFeedbacks fp_glCreateTransformFeedbacks;
+pfn_glGetnTexImage fp_glGetnTexImage;
+pfn_glTexBuffer fp_glTexBuffer;
+pfn_glPopName fp_glPopName;
+pfn_glValidateProgram fp_glValidateProgram;
+pfn_glPixelStoref fp_glPixelStoref;
+pfn_glUniform3uiv fp_glUniform3uiv;
+pfn_glViewportIndexedf fp_glViewportIndexedf;
+pfn_glRasterPos4fv fp_glRasterPos4fv;
+pfn_glEvalCoord1dv fp_glEvalCoord1dv;
+pfn_glMultiTexCoordP2uiv fp_glMultiTexCoordP2uiv;
+pfn_glGenProgramPipelines fp_glGenProgramPipelines;
+pfn_glRecti fp_glRecti;
+pfn_glColor4ub fp_glColor4ub;
+pfn_glMultTransposeMatrixf fp_glMultTransposeMatrixf;
+pfn_glRectf fp_glRectf;
+pfn_glRectd fp_glRectd;
+pfn_glNormal3sv fp_glNormal3sv;
+pfn_glNewList fp_glNewList;
+pfn_glProgramUniformMatrix2x3dv fp_glProgramUniformMatrix2x3dv;
+pfn_glColor4us fp_glColor4us;
+pfn_glVertexAttribP1uiv fp_glVertexAttribP1uiv;
+pfn_glLinkProgram fp_glLinkProgram;
+pfn_glHint fp_glHint;
+pfn_glRects fp_glRects;
+pfn_glTexCoord2dv fp_glTexCoord2dv;
+pfn_glRasterPos4iv fp_glRasterPos4iv;
+pfn_glGetObjectLabel fp_glGetObjectLabel;
+pfn_glProgramUniform2f fp_glProgramUniform2f;
+pfn_glGetString fp_glGetString;
+pfn_glVertexAttribP2uiv fp_glVertexAttribP2uiv;
+pfn_glEdgeFlagv fp_glEdgeFlagv;
+pfn_glDetachShader fp_glDetachShader;
+pfn_glProgramUniform3i fp_glProgramUniform3i;
+pfn_glScalef fp_glScalef;
+pfn_glEndQuery fp_glEndQuery;
+pfn_glScaled fp_glScaled;
+pfn_glEdgeFlagPointer fp_glEdgeFlagPointer;
+pfn_glFramebufferParameteri fp_glFramebufferParameteri;
+pfn_glGetProgramResourceName fp_glGetProgramResourceName;
+pfn_glUniformMatrix4x3dv fp_glUniformMatrix4x3dv;
+pfn_glDepthRangeArrayv fp_glDepthRangeArrayv;
+pfn_glCopyPixels fp_glCopyPixels;
+pfn_glVertexAttribI2ui fp_glVertexAttribI2ui;
+pfn_glGetProgramResourceLocation fp_glGetProgramResourceLocation;
+pfn_glPopAttrib fp_glPopAttrib;
+pfn_glDeleteTextures fp_glDeleteTextures;
+pfn_glGetActiveAtomicCounterBufferiv fp_glGetActiveAtomicCounterBufferiv;
+pfn_glStencilOpSeparate fp_glStencilOpSeparate;
+pfn_glGetTextureParameteriv fp_glGetTextureParameteriv;
+pfn_glDeleteQueries fp_glDeleteQueries;
+pfn_glNormalP3uiv fp_glNormalP3uiv;
+pfn_glVertexAttrib4f fp_glVertexAttrib4f;
+pfn_glVertexAttrib4d fp_glVertexAttrib4d;
+pfn_glViewportIndexedfv fp_glViewportIndexedfv;
+pfn_glInitNames fp_glInitNames;
+pfn_glGetBufferParameteri64v fp_glGetBufferParameteri64v;
+pfn_glColor3dv fp_glColor3dv;
+pfn_glVertexAttribI1i fp_glVertexAttribI1i;
+pfn_glGetTexParameteriv fp_glGetTexParameteriv;
+pfn_glWaitSync fp_glWaitSync;
+pfn_glCreateVertexArrays fp_glCreateVertexArrays;
+pfn_glProgramUniform1dv fp_glProgramUniform1dv;
+pfn_glVertexAttrib4s fp_glVertexAttrib4s;
+pfn_glColorMaterial fp_glColorMaterial;
+pfn_glSampleCoverage fp_glSampleCoverage;
+pfn_glSamplerParameteri fp_glSamplerParameteri;
+pfn_glClearBufferSubData fp_glClearBufferSubData;
+pfn_glSamplerParameterf fp_glSamplerParameterf;
+pfn_glTexStorage1D fp_glTexStorage1D;
+pfn_glUniform1f fp_glUniform1f;
+pfn_glGetVertexAttribfv fp_glGetVertexAttribfv;
+pfn_glUniform1d fp_glUniform1d;
+pfn_glRenderMode fp_glRenderMode;
+pfn_glGetCompressedTexImage fp_glGetCompressedTexImage;
+pfn_glGetnCompressedTexImage fp_glGetnCompressedTexImage;
+pfn_glWindowPos2dv fp_glWindowPos2dv;
+pfn_glUniform1i fp_glUniform1i;
+pfn_glGetActiveAttrib fp_glGetActiveAttrib;
+pfn_glUniform3i fp_glUniform3i;
+pfn_glPixelTransferi fp_glPixelTransferi;
+pfn_glTexSubImage2D fp_glTexSubImage2D;
+pfn_glDisable fp_glDisable;
+pfn_glLogicOp fp_glLogicOp;
+pfn_glEvalPoint2 fp_glEvalPoint2;
+pfn_glPixelTransferf fp_glPixelTransferf;
+pfn_glSecondaryColor3i fp_glSecondaryColor3i;
+pfn_glProgramUniform4uiv fp_glProgramUniform4uiv;
+pfn_glUniform4ui fp_glUniform4ui;
+pfn_glColor3f fp_glColor3f;
+pfn_glNamedFramebufferReadBuffer fp_glNamedFramebufferReadBuffer;
+pfn_glBindFramebuffer fp_glBindFramebuffer;
+pfn_glGetTexEnvfv fp_glGetTexEnvfv;
+pfn_glRectfv fp_glRectfv;
+pfn_glCullFace fp_glCullFace;
+pfn_glGetLightfv fp_glGetLightfv;
+pfn_glGetnUniformiv fp_glGetnUniformiv;
+pfn_glColor3d fp_glColor3d;
+pfn_glProgramUniform4i fp_glProgramUniform4i;
+pfn_glTexGend fp_glTexGend;
+pfn_glProgramUniform4f fp_glProgramUniform4f;
+pfn_glTexGeni fp_glTexGeni;
+pfn_glProgramUniform4d fp_glProgramUniform4d;
+pfn_glTextureParameterIiv fp_glTextureParameterIiv;
+pfn_glMultiTexCoord3s fp_glMultiTexCoord3s;
+pfn_glGetStringi fp_glGetStringi;
+pfn_glGetTextureParameterfv fp_glGetTextureParameterfv;
+pfn_glTextureSubImage2D fp_glTextureSubImage2D;
+pfn_glMultiTexCoord3i fp_glMultiTexCoord3i;
+pfn_glMultiTexCoord3f fp_glMultiTexCoord3f;
+pfn_glDrawTransformFeedbackStream fp_glDrawTransformFeedbackStream;
+pfn_glMultiTexCoord3d fp_glMultiTexCoord3d;
+pfn_glAttachShader fp_glAttachShader;
+pfn_glFogCoorddv fp_glFogCoorddv;
+pfn_glUniformMatrix2x3fv fp_glUniformMatrix2x3fv;
+pfn_glGetTexGenfv fp_glGetTexGenfv;
+pfn_glQueryCounter fp_glQueryCounter;
+pfn_glFogCoordPointer fp_glFogCoordPointer;
+pfn_glProgramUniformMatrix3dv fp_glProgramUniformMatrix3dv;
+pfn_glProvokingVertex fp_glProvokingVertex;
+pfn_glShaderBinary fp_glShaderBinary;
+pfn_glUnmapNamedBuffer fp_glUnmapNamedBuffer;
+pfn_glGetnColorTable fp_glGetnColorTable;
+pfn_glFramebufferTexture3D fp_glFramebufferTexture3D;
+pfn_glTexGeniv fp_glTexGeniv;
+pfn_glRasterPos2dv fp_glRasterPos2dv;
+pfn_glSecondaryColor3dv fp_glSecondaryColor3dv;
+pfn_glClientActiveTexture fp_glClientActiveTexture;
+pfn_glNamedRenderbufferStorageMultisample fp_glNamedRenderbufferStorageMultisample;
+pfn_glVertexAttribI4sv fp_glVertexAttribI4sv;
+pfn_glClearNamedBufferData fp_glClearNamedBufferData;
+pfn_glSecondaryColor3us fp_glSecondaryColor3us;
+pfn_glNormalP3ui fp_glNormalP3ui;
+pfn_glTexEnvfv fp_glTexEnvfv;
+pfn_glReadBuffer fp_glReadBuffer;
+pfn_glViewportArrayv fp_glViewportArrayv;
+pfn_glTexParameterIuiv fp_glTexParameterIuiv;
+pfn_glDrawArraysInstanced fp_glDrawArraysInstanced;
+pfn_glGenerateMipmap fp_glGenerateMipmap;
+pfn_glCompressedTextureSubImage2D fp_glCompressedTextureSubImage2D;
+pfn_glProgramUniformMatrix2fv fp_glProgramUniformMatrix2fv;
+pfn_glWindowPos3fv fp_glWindowPos3fv;
+pfn_glUniformMatrix3x4dv fp_glUniformMatrix3x4dv;
+pfn_glLightModelfv fp_glLightModelfv;
+pfn_glSamplerParameteriv fp_glSamplerParameteriv;
+pfn_glDeleteLists fp_glDeleteLists;
+pfn_glGetClipPlane fp_glGetClipPlane;
+pfn_glVertex4dv fp_glVertex4dv;
+pfn_glTexCoord2d fp_glTexCoord2d;
+pfn_glPopMatrix fp_glPopMatrix;
+pfn_glTexCoord2f fp_glTexCoord2f;
+pfn_glColor4iv fp_glColor4iv;
+pfn_glIndexubv fp_glIndexubv;
+pfn_glCheckNamedFramebufferStatus fp_glCheckNamedFramebufferStatus;
+pfn_glUnmapBuffer fp_glUnmapBuffer;
+pfn_glTexCoord2i fp_glTexCoord2i;
+pfn_glRasterPos4d fp_glRasterPos4d;
+pfn_glRasterPos4f fp_glRasterPos4f;
+pfn_glProgramUniform1iv fp_glProgramUniform1iv;
+pfn_glGetVertexArrayiv fp_glGetVertexArrayiv;
+pfn_glCopyTextureSubImage2D fp_glCopyTextureSubImage2D;
+pfn_glVertexAttrib3s fp_glVertexAttrib3s;
+pfn_glTexCoord2s fp_glTexCoord2s;
+pfn_glBindRenderbuffer fp_glBindRenderbuffer;
+pfn_glVertex3fv fp_glVertex3fv;
+pfn_glTexCoord4dv fp_glTexCoord4dv;
+pfn_glMaterialiv fp_glMaterialiv;
+pfn_glVertexAttribP4uiv fp_glVertexAttribP4uiv;
+pfn_glGetProgramStageiv fp_glGetProgramStageiv;
+pfn_glIsProgram fp_glIsProgram;
+pfn_glVertexAttrib4bv fp_glVertexAttrib4bv;
+pfn_glVertex4s fp_glVertex4s;
+pfn_glUniformMatrix3x2dv fp_glUniformMatrix3x2dv;
+pfn_glVertexAttrib4fv fp_glVertexAttrib4fv;
+pfn_glNormal3dv fp_glNormal3dv;
+pfn_glIsTransformFeedback fp_glIsTransformFeedback;
+pfn_glUniform4i fp_glUniform4i;
+pfn_glActiveTexture fp_glActiveTexture;
+pfn_glEnableVertexAttribArray fp_glEnableVertexAttribArray;
+pfn_glRotated fp_glRotated;
+pfn_glIsProgramPipeline fp_glIsProgramPipeline;
+pfn_glRotatef fp_glRotatef;
+pfn_glVertex4i fp_glVertex4i;
+pfn_glReadPixels fp_glReadPixels;
+pfn_glVertexAttribI3iv fp_glVertexAttribI3iv;
+pfn_glLoadName fp_glLoadName;
+pfn_glUniform4f fp_glUniform4f;
+pfn_glRenderbufferStorageMultisample fp_glRenderbufferStorageMultisample;
+pfn_glCreateProgramPipelines fp_glCreateProgramPipelines;
+pfn_glGenVertexArrays fp_glGenVertexArrays;
+pfn_glShadeModel fp_glShadeModel;
+pfn_glMapGrid1d fp_glMapGrid1d;
+pfn_glGetUniformfv fp_glGetUniformfv;
+pfn_glMapGrid1f fp_glMapGrid1f;
+pfn_glSamplerParameterfv fp_glSamplerParameterfv;
+pfn_glVertexAttribLPointer fp_glVertexAttribLPointer;
+pfn_glDisableClientState fp_glDisableClientState;
+pfn_glMultiTexCoord3sv fp_glMultiTexCoord3sv;
+pfn_glGetnUniformfv fp_glGetnUniformfv;
+pfn_glDrawElementsInstancedBaseVertex fp_glDrawElementsInstancedBaseVertex;
+pfn_glVertexAttribL2dv fp_glVertexAttribL2dv;
+pfn_glMultiDrawElementsIndirect fp_glMultiDrawElementsIndirect;
+pfn_glEnableVertexArrayAttrib fp_glEnableVertexArrayAttrib;
+pfn_glSecondaryColorPointer fp_glSecondaryColorPointer;
+pfn_glAlphaFunc fp_glAlphaFunc;
+pfn_glUniform1iv fp_glUniform1iv;
+pfn_glCreateShaderProgramv fp_glCreateShaderProgramv;
+pfn_glGetActiveSubroutineName fp_glGetActiveSubroutineName;
+pfn_glMultiTexCoord4iv fp_glMultiTexCoord4iv;
+pfn_glVertexAttribL2d fp_glVertexAttribL2d;
+pfn_glGetQueryObjectiv fp_glGetQueryObjectiv;
+pfn_glStencilFunc fp_glStencilFunc;
+pfn_glInvalidateNamedFramebufferData fp_glInvalidateNamedFramebufferData;
+pfn_glMultiTexCoord1fv fp_glMultiTexCoord1fv;
+pfn_glUniformBlockBinding fp_glUniformBlockBinding;
+pfn_glColor4uiv fp_glColor4uiv;
+pfn_glRectiv fp_glRectiv;
+pfn_glColorP4ui fp_glColorP4ui;
+pfn_glUseProgramStages fp_glUseProgramStages;
+pfn_glRasterPos3dv fp_glRasterPos3dv;
+pfn_glEvalMesh2 fp_glEvalMesh2;
+pfn_glEvalMesh1 fp_glEvalMesh1;
+pfn_glTexCoordPointer fp_glTexCoordPointer;
+pfn_glProgramUniform3f fp_glProgramUniform3f;
+pfn_glProgramUniform3d fp_glProgramUniform3d;
+pfn_glVertexAttrib4Nubv fp_glVertexAttrib4Nubv;
+pfn_glVertexAttribI4iv fp_glVertexAttribI4iv;
+pfn_glGetProgramPipelineiv fp_glGetProgramPipelineiv;
+pfn_glTexStorage3D fp_glTexStorage3D;
+pfn_glEvalCoord2fv fp_glEvalCoord2fv;
+pfn_glNamedFramebufferDrawBuffer fp_glNamedFramebufferDrawBuffer;
+pfn_glGetQueryIndexediv fp_glGetQueryIndexediv;
+pfn_glColor4ubv fp_glColor4ubv;
+pfn_glLoadTransposeMatrixd fp_glLoadTransposeMatrixd;
+pfn_glLoadTransposeMatrixf fp_glLoadTransposeMatrixf;
+pfn_glTextureParameteriv fp_glTextureParameteriv;
+pfn_glObjectLabel fp_glObjectLabel;
+pfn_glVertexAttribI4i fp_glVertexAttribI4i;
+pfn_glRasterPos2iv fp_glRasterPos2iv;
+pfn_glGetBufferSubData fp_glGetBufferSubData;
+pfn_glGetVertexAttribLdv fp_glGetVertexAttribLdv;
+pfn_glGetnUniformuiv fp_glGetnUniformuiv;
+pfn_glTexEnviv fp_glTexEnviv;
+pfn_glBlendEquationSeparate fp_glBlendEquationSeparate;
+pfn_glVertexAttribI1ui fp_glVertexAttribI1ui;
+pfn_glGenBuffers fp_glGenBuffers;
+pfn_glSelectBuffer fp_glSelectBuffer;
+pfn_glGetSubroutineIndex fp_glGetSubroutineIndex;
+pfn_glVertexAttrib2sv fp_glVertexAttrib2sv;
+pfn_glScissorIndexedv fp_glScissorIndexedv;
+pfn_glPushAttrib fp_glPushAttrib;
+pfn_glVertexAttribIPointer fp_glVertexAttribIPointer;
+pfn_glBlendFunc fp_glBlendFunc;
+pfn_glCreateProgram fp_glCreateProgram;
+pfn_glNamedBufferSubData fp_glNamedBufferSubData;
+pfn_glTexImage3D fp_glTexImage3D;
+pfn_glIsFramebuffer fp_glIsFramebuffer;
+pfn_glClearNamedFramebufferfv fp_glClearNamedFramebufferfv;
+pfn_glLightiv fp_glLightiv;
+pfn_glGetNamedBufferSubData fp_glGetNamedBufferSubData;
+pfn_glCompressedTextureSubImage3D fp_glCompressedTextureSubImage3D;
+pfn_glPrimitiveRestartIndex fp_glPrimitiveRestartIndex;
+pfn_glFlushMappedNamedBufferRange fp_glFlushMappedNamedBufferRange;
+pfn_glInvalidateTexSubImage fp_glInvalidateTexSubImage;
+pfn_glTexGenfv fp_glTexGenfv;
+pfn_glGetTextureParameterIuiv fp_glGetTextureParameterIuiv;
+pfn_glGetnConvolutionFilter fp_glGetnConvolutionFilter;
+pfn_glBindImageTextures fp_glBindImageTextures;
+pfn_glEnd fp_glEnd;
+pfn_glDeleteBuffers fp_glDeleteBuffers;
+pfn_glBindProgramPipeline fp_glBindProgramPipeline;
+pfn_glScissor fp_glScissor;
+pfn_glTexCoordP4uiv fp_glTexCoordP4uiv;
+pfn_glClipPlane fp_glClipPlane;
+pfn_glPushName fp_glPushName;
+pfn_glTexGendv fp_glTexGendv;
+pfn_glIndexub fp_glIndexub;
+pfn_glGetNamedFramebufferAttachmentParameteriv fp_glGetNamedFramebufferAttachmentParameteriv;
+pfn_glNamedFramebufferRenderbuffer fp_glNamedFramebufferRenderbuffer;
+pfn_glVertexP2uiv fp_glVertexP2uiv;
+pfn_glSecondaryColor3iv fp_glSecondaryColor3iv;
+pfn_glRasterPos4i fp_glRasterPos4i;
+pfn_glMultTransposeMatrixd fp_glMultTransposeMatrixd;
+pfn_glClearColor fp_glClearColor;
+pfn_glVertexAttrib4uiv fp_glVertexAttrib4uiv;
+pfn_glNormal3s fp_glNormal3s;
+pfn_glVertexAttrib4Niv fp_glVertexAttrib4Niv;
+pfn_glProgramUniformMatrix2x3fv fp_glProgramUniformMatrix2x3fv;
+pfn_glClearBufferiv fp_glClearBufferiv;
+pfn_glPointParameteri fp_glPointParameteri;
+pfn_glProgramUniform4dv fp_glProgramUniform4dv;
+pfn_glColorP4uiv fp_glColorP4uiv;
+pfn_glBlendColor fp_glBlendColor;
+pfn_glGetnPixelMapuiv fp_glGetnPixelMapuiv;
+pfn_glGetTextureLevelParameteriv fp_glGetTextureLevelParameteriv;
+pfn_glWindowPos3d fp_glWindowPos3d;
+pfn_glProgramUniform3fv fp_glProgramUniform3fv;
+pfn_glVertexAttribI2uiv fp_glVertexAttribI2uiv;
+pfn_glGetNamedFramebufferParameteriv fp_glGetNamedFramebufferParameteriv;
+pfn_glSamplerParameterIuiv fp_glSamplerParameterIuiv;
+pfn_glUniform3ui fp_glUniform3ui;
+pfn_glProgramUniform3uiv fp_glProgramUniform3uiv;
+pfn_glColor4dv fp_glColor4dv;
+pfn_glVertexAttribI4uiv fp_glVertexAttribI4uiv;
+pfn_glPointParameterfv fp_glPointParameterfv;
+pfn_glResumeTransformFeedback fp_glResumeTransformFeedback;
+pfn_glUniform2fv fp_glUniform2fv;
+pfn_glGetActiveSubroutineUniformName fp_glGetActiveSubroutineUniformName;
+pfn_glGetProgramResourceIndex fp_glGetProgramResourceIndex;
+pfn_glSecondaryColor3ub fp_glSecondaryColor3ub;
+pfn_glDrawElementsIndirect fp_glDrawElementsIndirect;
+pfn_glGetTextureLevelParameterfv fp_glGetTextureLevelParameterfv;
+pfn_glSecondaryColor3ui fp_glSecondaryColor3ui;
+pfn_glTexCoord3dv fp_glTexCoord3dv;
+pfn_glGetNamedBufferPointerv fp_glGetNamedBufferPointerv;
+pfn_glDispatchComputeIndirect fp_glDispatchComputeIndirect;
+pfn_glInvalidateNamedFramebufferSubData fp_glInvalidateNamedFramebufferSubData;
+pfn_glGetSamplerParameterIuiv fp_glGetSamplerParameterIuiv;
+pfn_glBindBufferRange fp_glBindBufferRange;
+pfn_glNormal3iv fp_glNormal3iv;
+pfn_glTextureSubImage1D fp_glTextureSubImage1D;
+pfn_glVertexAttribL3dv fp_glVertexAttribL3dv;
+pfn_glGetUniformdv fp_glGetUniformdv;
+pfn_glWindowPos3s fp_glWindowPos3s;
+pfn_glPointParameterf fp_glPointParameterf;
+pfn_glClearDepthf fp_glClearDepthf;
+pfn_glGetVertexAttribIuiv fp_glGetVertexAttribIuiv;
+pfn_glWindowPos3i fp_glWindowPos3i;
+pfn_glMultiTexCoord4s fp_glMultiTexCoord4s;
+pfn_glGetTextureSubImage fp_glGetTextureSubImage;
+pfn_glWindowPos3f fp_glWindowPos3f;
+pfn_glGenTransformFeedbacks fp_glGenTransformFeedbacks;
+pfn_glColor3us fp_glColor3us;
+pfn_glColor3uiv fp_glColor3uiv;
+pfn_glVertexAttrib4Nusv fp_glVertexAttrib4Nusv;
+pfn_glGetLightiv fp_glGetLightiv;
+pfn_glDepthFunc fp_glDepthFunc;
+pfn_glCompressedTexSubImage2D fp_glCompressedTexSubImage2D;
+pfn_glListBase fp_glListBase;
+pfn_glMultiTexCoord4f fp_glMultiTexCoord4f;
+pfn_glColor3ub fp_glColor3ub;
+pfn_glMultiTexCoord4d fp_glMultiTexCoord4d;
+pfn_glVertexAttribI4bv fp_glVertexAttribI4bv;
+pfn_glBlendEquationSeparatei fp_glBlendEquationSeparatei;
+pfn_glGetTexParameterfv fp_glGetTexParameterfv;
+pfn_glColor3ui fp_glColor3ui;
+pfn_glGetProgramResourceLocationIndex fp_glGetProgramResourceLocationIndex;
+pfn_glMultiTexCoord4i fp_glMultiTexCoord4i;
+pfn_glBufferStorage fp_glBufferStorage;
+pfn_glGetPolygonStipple fp_glGetPolygonStipple;
+pfn_glClientWaitSync fp_glClientWaitSync;
+pfn_glVertexAttribI4ui fp_glVertexAttribI4ui;
+pfn_glGetFloati_v fp_glGetFloati_v;
+pfn_glMultiTexCoord4dv fp_glMultiTexCoord4dv;
+pfn_glColorMask fp_glColorMask;
+pfn_glTextureBuffer fp_glTextureBuffer;
+pfn_glTexParameterIiv fp_glTexParameterIiv;
+pfn_glBlendEquation fp_glBlendEquation;
+pfn_glGetUniformLocation fp_glGetUniformLocation;
+pfn_glGetSamplerParameteriv fp_glGetSamplerParameteriv;
+pfn_glVertexArrayAttribFormat fp_glVertexArrayAttribFormat;
+pfn_glReadnPixels fp_glReadnPixels;
+pfn_glRasterPos4s fp_glRasterPos4s;
+pfn_glEndTransformFeedback fp_glEndTransformFeedback;
+pfn_glVertexAttrib4usv fp_glVertexAttrib4usv;
+pfn_glGetUniformSubroutineuiv fp_glGetUniformSubroutineuiv;
+pfn_glMultiTexCoord3dv fp_glMultiTexCoord3dv;
+pfn_glBindVertexBuffer fp_glBindVertexBuffer;
+pfn_glColor4sv fp_glColor4sv;
+pfn_glDebugMessageInsert fp_glDebugMessageInsert;
+pfn_glCreateSamplers fp_glCreateSamplers;
+pfn_glPopClientAttrib fp_glPopClientAttrib;
+pfn_glClearBufferData fp_glClearBufferData;
+pfn_glBeginTransformFeedback fp_glBeginTransformFeedback;
+pfn_glFogf fp_glFogf;
+pfn_glVertexAttribI1iv fp_glVertexAttribI1iv;
+pfn_glProgramBinary fp_glProgramBinary;
+pfn_glIsSampler fp_glIsSampler;
+pfn_glVertexP3ui fp_glVertexP3ui;
+pfn_glVertexAttribDivisor fp_glVertexAttribDivisor;
+pfn_glBindSamplers fp_glBindSamplers;
+pfn_glColor3iv fp_glColor3iv;
+pfn_glCompressedTexImage1D fp_glCompressedTexImage1D;
+pfn_glDeleteTransformFeedbacks fp_glDeleteTransformFeedbacks;
+pfn_glCopyTexSubImage1D fp_glCopyTexSubImage1D;
+pfn_glTexCoord1i fp_glTexCoord1i;
+pfn_glCheckFramebufferStatus fp_glCheckFramebufferStatus;
+pfn_glTexCoord1d fp_glTexCoord1d;
+pfn_glTexCoord1f fp_glTexCoord1f;
+pfn_glTextureStorage3D fp_glTextureStorage3D;
+pfn_glEndConditionalRender fp_glEndConditionalRender;
+pfn_glEnableClientState fp_glEnableClientState;
+pfn_glBindAttribLocation fp_glBindAttribLocation;
+pfn_glUniformMatrix4x2fv fp_glUniformMatrix4x2fv;
+pfn_glUniformMatrix2dv fp_glUniformMatrix2dv;
+pfn_glBlendFunci fp_glBlendFunci;
+pfn_glMultiTexCoord2sv fp_glMultiTexCoord2sv;
+pfn_glVertexAttrib1dv fp_glVertexAttrib1dv;
+pfn_glDrawRangeElements fp_glDrawRangeElements;
+pfn_glTexCoord1s fp_glTexCoord1s;
+pfn_glBindBufferBase fp_glBindBufferBase;
+pfn_glBufferSubData fp_glBufferSubData;
+pfn_glVertexAttrib4iv fp_glVertexAttrib4iv;
+pfn_glGenLists fp_glGenLists;
+pfn_glColor3bv fp_glColor3bv;
+pfn_glMapBufferRange fp_glMapBufferRange;
+pfn_glFramebufferTexture fp_glFramebufferTexture;
+pfn_glBlendFuncSeparatei fp_glBlendFuncSeparatei;
+pfn_glProgramUniformMatrix4x2fv fp_glProgramUniformMatrix4x2fv;
+pfn_glVertexAttribL1d fp_glVertexAttribL1d;
+pfn_glGetTexGendv fp_glGetTexGendv;
+pfn_glClearNamedFramebufferiv fp_glClearNamedFramebufferiv;
+pfn_glMultiDrawArrays fp_glMultiDrawArrays;
+pfn_glEndList fp_glEndList;
+pfn_glScissorIndexed fp_glScissorIndexed;
+pfn_glVertexP4uiv fp_glVertexP4uiv;
+pfn_glUniform2ui fp_glUniform2ui;
+pfn_glVertexAttribI2iv fp_glVertexAttribI2iv;
+pfn_glGetnMapdv fp_glGetnMapdv;
+pfn_glColor3usv fp_glColor3usv;
+pfn_glWindowPos2fv fp_glWindowPos2fv;
+pfn_glTextureView fp_glTextureView;
+pfn_glDisablei fp_glDisablei;
+pfn_glProgramUniformMatrix2x4fv fp_glProgramUniformMatrix2x4fv;
+pfn_glCreateRenderbuffers fp_glCreateRenderbuffers;
+pfn_glIndexMask fp_glIndexMask;
+pfn_glPushClientAttrib fp_glPushClientAttrib;
+pfn_glShaderSource fp_glShaderSource;
+pfn_glGetnSeparableFilter fp_glGetnSeparableFilter;
+pfn_glGetActiveUniformBlockName fp_glGetActiveUniformBlockName;
+pfn_glVertexAttribI3uiv fp_glVertexAttribI3uiv;
+pfn_glReleaseShaderCompiler fp_glReleaseShaderCompiler;
+pfn_glVertexAttribIFormat fp_glVertexAttribIFormat;
+pfn_glCreateFramebuffers fp_glCreateFramebuffers;
+pfn_glClearAccum fp_glClearAccum;
+pfn_glGetSynciv fp_glGetSynciv;
+pfn_glProgramUniform2uiv fp_glProgramUniform2uiv;
+pfn_glGetnPixelMapfv fp_glGetnPixelMapfv;
+pfn_glTexCoordP2uiv fp_glTexCoordP2uiv;
+pfn_glPatchParameteri fp_glPatchParameteri;
+pfn_glProgramUniform2i fp_glProgramUniform2i;
+pfn_glUniform2f fp_glUniform2f;
+pfn_glGetNamedBufferParameteri64v fp_glGetNamedBufferParameteri64v;
+pfn_glBeginQuery fp_glBeginQuery;
+pfn_glGetUniformBlockIndex fp_glGetUniformBlockIndex;
+pfn_glBindBuffer fp_glBindBuffer;
+pfn_glMap2d fp_glMap2d;
+pfn_glMap2f fp_glMap2f;
+pfn_glTexStorage2DMultisample fp_glTexStorage2DMultisample;
+pfn_glUniform2d fp_glUniform2d;
+pfn_glVertex4d fp_glVertex4d;
+pfn_glUniformMatrix2fv fp_glUniformMatrix2fv;
+pfn_glTexCoord1sv fp_glTexCoord1sv;
+pfn_glBufferData fp_glBufferData;
+pfn_glEvalPoint1 fp_glEvalPoint1;
+pfn_glGetTexParameterIiv fp_glGetTexParameterIiv;
+pfn_glTexCoord1dv fp_glTexCoord1dv;
+pfn_glTexCoordP1ui fp_glTexCoordP1ui;
+pfn_glGetError fp_glGetError;
+pfn_glGetTexEnviv fp_glGetTexEnviv;
+pfn_glGetProgramiv fp_glGetProgramiv;
+pfn_glVertexAttribP2ui fp_glVertexAttribP2ui;
+pfn_glGetFloatv fp_glGetFloatv;
+pfn_glTexSubImage1D fp_glTexSubImage1D;
+pfn_glMultiTexCoord2fv fp_glMultiTexCoord2fv;
+pfn_glUniformMatrix2x4dv fp_glUniformMatrix2x4dv;
+pfn_glVertexAttrib2fv fp_glVertexAttrib2fv;
+pfn_glEvalCoord1d fp_glEvalCoord1d;
+pfn_glGetTexLevelParameterfv fp_glGetTexLevelParameterfv;
+pfn_glEvalCoord1f fp_glEvalCoord1f;
+pfn_glPixelMapfv fp_glPixelMapfv;
+pfn_glVertexAttribP3uiv fp_glVertexAttribP3uiv;
+pfn_glGetPixelMapusv fp_glGetPixelMapusv;
+pfn_glSecondaryColorP3uiv fp_glSecondaryColorP3uiv;
+pfn_glGetIntegerv fp_glGetIntegerv;
+pfn_glAccum fp_glAccum;
+pfn_glGetVertexArrayIndexed64iv fp_glGetVertexArrayIndexed64iv;
+pfn_glGetBufferPointerv fp_glGetBufferPointerv;
+pfn_glGetVertexAttribIiv fp_glGetVertexAttribIiv;
+pfn_glRasterPos4dv fp_glRasterPos4dv;
+pfn_glProgramUniform4fv fp_glProgramUniform4fv;
+pfn_glTexCoord2iv fp_glTexCoord2iv;
+pfn_glTextureBarrier fp_glTextureBarrier;
+pfn_glIsQuery fp_glIsQuery;
+pfn_glProgramUniform2ui fp_glProgramUniform2ui;
+pfn_glProgramUniform4ui fp_glProgramUniform4ui;
+pfn_glVertexAttrib4sv fp_glVertexAttrib4sv;
+pfn_glWindowPos3dv fp_glWindowPos3dv;
+pfn_glTexImage2D fp_glTexImage2D;
+pfn_glStencilMask fp_glStencilMask;
+pfn_glDrawPixels fp_glDrawPixels;
+pfn_glMultMatrixd fp_glMultMatrixd;
+pfn_glMultMatrixf fp_glMultMatrixf;
+pfn_glIsTexture fp_glIsTexture;
+pfn_glGetMaterialiv fp_glGetMaterialiv;
+pfn_glNamedBufferData fp_glNamedBufferData;
+pfn_glUniform1fv fp_glUniform1fv;
+pfn_glLoadMatrixf fp_glLoadMatrixf;
+pfn_glTexStorage2D fp_glTexStorage2D;
+pfn_glLoadMatrixd fp_glLoadMatrixd;
+pfn_glClearNamedBufferSubData fp_glClearNamedBufferSubData;
+pfn_glMapNamedBufferRange fp_glMapNamedBufferRange;
+pfn_glNamedFramebufferTextureLayer fp_glNamedFramebufferTextureLayer;
+pfn_glTexParameterfv fp_glTexParameterfv;
+pfn_glUniformMatrix3fv fp_glUniformMatrix3fv;
+pfn_glVertex4f fp_glVertex4f;
+pfn_glRectsv fp_glRectsv;
+pfn_glColor4usv fp_glColor4usv;
+pfn_glUniform3dv fp_glUniform3dv;
+pfn_glProgramUniformMatrix4x3fv fp_glProgramUniformMatrix4x3fv;
+pfn_glPolygonStipple fp_glPolygonStipple;
+pfn_glBindBuffersBase fp_glBindBuffersBase;
+pfn_glInterleavedArrays fp_glInterleavedArrays;
+pfn_glGetSubroutineUniformLocation fp_glGetSubroutineUniformLocation;
+pfn_glNormal3i fp_glNormal3i;
+pfn_glNormal3f fp_glNormal3f;
+pfn_glNormal3d fp_glNormal3d;
+pfn_glNormal3b fp_glNormal3b;
+pfn_glGetFramebufferParameteriv fp_glGetFramebufferParameteriv;
+pfn_glPixelMapusv fp_glPixelMapusv;
+pfn_glGetTexGeniv fp_glGetTexGeniv;
+pfn_glArrayElement fp_glArrayElement;
+pfn_glGetCompressedTextureSubImage fp_glGetCompressedTextureSubImage;
+pfn_glCopyBufferSubData fp_glCopyBufferSubData;
+pfn_glVertexAttribI1uiv fp_glVertexAttribI1uiv;
+pfn_glVertexAttrib2d fp_glVertexAttrib2d;
+pfn_glBindTransformFeedback fp_glBindTransformFeedback;
+pfn_glVertexAttrib2f fp_glVertexAttrib2f;
+pfn_glVertexAttrib3dv fp_glVertexAttrib3dv;
+pfn_glGetQueryObjectui64v fp_glGetQueryObjectui64v;
+pfn_glDepthMask fp_glDepthMask;
+pfn_glVertexAttrib2s fp_glVertexAttrib2s;
+pfn_glColor3fv fp_glColor3fv;
+pfn_glTexImage3DMultisample fp_glTexImage3DMultisample;
+pfn_glProgramUniform1fv fp_glProgramUniform1fv;
+pfn_glUniformMatrix4fv fp_glUniformMatrix4fv;
+pfn_glUniform4fv fp_glUniform4fv;
+pfn_glGetActiveUniform fp_glGetActiveUniform;
+pfn_glColorPointer fp_glColorPointer;
+pfn_glFrontFace fp_glFrontFace;
+pfn_glTexBufferRange fp_glTexBufferRange;
+pfn_glCreateBuffers fp_glCreateBuffers;
+pfn_glNamedFramebufferParameteri fp_glNamedFramebufferParameteri;
+pfn_glDrawArraysInstancedBaseInstance fp_glDrawArraysInstancedBaseInstance;
+pfn_glGetBooleani_v fp_glGetBooleani_v;
+pfn_glVertexAttribL3d fp_glVertexAttribL3d;
+pfn_glDeleteProgramPipelines fp_glDeleteProgramPipelines;
+pfn_glClearBufferuiv fp_glClearBufferuiv;
+pfn_glClipControl fp_glClipControl;
+pfn_glGetProgramResourceiv fp_glGetProgramResourceiv;
+pfn_glBlendBarrierKHR fp_glBlendBarrierKHR;
+pfn_glDebugMessageControlKHR fp_glDebugMessageControlKHR;
+pfn_glDebugMessageInsertKHR fp_glDebugMessageInsertKHR;
+pfn_glDebugMessageCallbackKHR fp_glDebugMessageCallbackKHR;
+pfn_glGetDebugMessageLogKHR fp_glGetDebugMessageLogKHR;
+pfn_glPushDebugGroupKHR fp_glPushDebugGroupKHR;
+pfn_glPopDebugGroupKHR fp_glPopDebugGroupKHR;
+pfn_glObjectLabelKHR fp_glObjectLabelKHR;
+pfn_glGetObjectLabelKHR fp_glGetObjectLabelKHR;
+pfn_glObjectPtrLabelKHR fp_glObjectPtrLabelKHR;
+pfn_glGetObjectPtrLabelKHR fp_glGetObjectPtrLabelKHR;
+pfn_glGetPointervKHR fp_glGetPointervKHR;
+pfn_glGetGraphicsResetStatusKHR fp_glGetGraphicsResetStatusKHR;
+pfn_glReadnPixelsKHR fp_glReadnPixelsKHR;
+pfn_glGetnUniformfvKHR fp_glGetnUniformfvKHR;
+pfn_glGetnUniformivKHR fp_glGetnUniformivKHR;
+pfn_glGetnUniformuivKHR fp_glGetnUniformuivKHR;
+pfn_glGetTextureHandleARB fp_glGetTextureHandleARB;
+pfn_glGetTextureSamplerHandleARB fp_glGetTextureSamplerHandleARB;
+pfn_glMakeTextureHandleResidentARB fp_glMakeTextureHandleResidentARB;
+pfn_glMakeTextureHandleNonResidentARB fp_glMakeTextureHandleNonResidentARB;
+pfn_glGetImageHandleARB fp_glGetImageHandleARB;
+pfn_glMakeImageHandleResidentARB fp_glMakeImageHandleResidentARB;
+pfn_glMakeImageHandleNonResidentARB fp_glMakeImageHandleNonResidentARB;
+pfn_glUniformHandleui64ARB fp_glUniformHandleui64ARB;
+pfn_glUniformHandleui64vARB fp_glUniformHandleui64vARB;
+pfn_glProgramUniformHandleui64ARB fp_glProgramUniformHandleui64ARB;
+pfn_glProgramUniformHandleui64vARB fp_glProgramUniformHandleui64vARB;
+pfn_glIsTextureHandleResidentARB fp_glIsTextureHandleResidentARB;
+pfn_glIsImageHandleResidentARB fp_glIsImageHandleResidentARB;
+pfn_glVertexAttribL1ui64ARB fp_glVertexAttribL1ui64ARB;
+pfn_glVertexAttribL1ui64vARB fp_glVertexAttribL1ui64vARB;
+pfn_glGetVertexAttribLui64vARB fp_glGetVertexAttribLui64vARB;
+pfn_glCreateSyncFromCLeventARB fp_glCreateSyncFromCLeventARB;
+pfn_glClampColorARB fp_glClampColorARB;
+pfn_glDispatchComputeGroupSizeARB fp_glDispatchComputeGroupSizeARB;
+pfn_glDebugMessageControlARB fp_glDebugMessageControlARB;
+pfn_glDebugMessageInsertARB fp_glDebugMessageInsertARB;
+pfn_glDebugMessageCallbackARB fp_glDebugMessageCallbackARB;
+pfn_glGetDebugMessageLogARB fp_glGetDebugMessageLogARB;
+pfn_glBlendEquationiARB fp_glBlendEquationiARB;
+pfn_glBlendEquationSeparateiARB fp_glBlendEquationSeparateiARB;
+pfn_glBlendFunciARB fp_glBlendFunciARB;
+pfn_glBlendFuncSeparateiARB fp_glBlendFuncSeparateiARB;
+pfn_glDrawArraysInstancedARB fp_glDrawArraysInstancedARB;
+pfn_glDrawElementsInstancedARB fp_glDrawElementsInstancedARB;
+pfn_glProgramParameteriARB fp_glProgramParameteriARB;
+pfn_glFramebufferTextureARB fp_glFramebufferTextureARB;
+pfn_glFramebufferTextureLayerARB fp_glFramebufferTextureLayerARB;
+pfn_glFramebufferTextureFaceARB fp_glFramebufferTextureFaceARB;
+pfn_glMultiDrawArraysIndirectCountARB fp_glMultiDrawArraysIndirectCountARB;
+pfn_glMultiDrawElementsIndirectCountARB fp_glMultiDrawElementsIndirectCountARB;
+pfn_glVertexAttribDivisorARB fp_glVertexAttribDivisorARB;
+pfn_glGetGraphicsResetStatusARB fp_glGetGraphicsResetStatusARB;
+pfn_glGetnTexImageARB fp_glGetnTexImageARB;
+pfn_glReadnPixelsARB fp_glReadnPixelsARB;
+pfn_glGetnCompressedTexImageARB fp_glGetnCompressedTexImageARB;
+pfn_glGetnUniformfvARB fp_glGetnUniformfvARB;
+pfn_glGetnUniformivARB fp_glGetnUniformivARB;
+pfn_glGetnUniformuivARB fp_glGetnUniformuivARB;
+pfn_glGetnUniformdvARB fp_glGetnUniformdvARB;
+pfn_glGetnMapdvARB fp_glGetnMapdvARB;
+pfn_glGetnMapfvARB fp_glGetnMapfvARB;
+pfn_glGetnMapivARB fp_glGetnMapivARB;
+pfn_glGetnPixelMapfvARB fp_glGetnPixelMapfvARB;
+pfn_glGetnPixelMapuivARB fp_glGetnPixelMapuivARB;
+pfn_glGetnPixelMapusvARB fp_glGetnPixelMapusvARB;
+pfn_glGetnPolygonStippleARB fp_glGetnPolygonStippleARB;
+pfn_glGetnColorTableARB fp_glGetnColorTableARB;
+pfn_glGetnConvolutionFilterARB fp_glGetnConvolutionFilterARB;
+pfn_glGetnSeparableFilterARB fp_glGetnSeparableFilterARB;
+pfn_glGetnHistogramARB fp_glGetnHistogramARB;
+pfn_glGetnMinmaxARB fp_glGetnMinmaxARB;
+pfn_glMinSampleShadingARB fp_glMinSampleShadingARB;
+pfn_glNamedStringARB fp_glNamedStringARB;
+pfn_glDeleteNamedStringARB fp_glDeleteNamedStringARB;
+pfn_glCompileShaderIncludeARB fp_glCompileShaderIncludeARB;
+pfn_glIsNamedStringARB fp_glIsNamedStringARB;
+pfn_glGetNamedStringARB fp_glGetNamedStringARB;
+pfn_glGetNamedStringivARB fp_glGetNamedStringivARB;
+pfn_glBufferPageCommitmentARB fp_glBufferPageCommitmentARB;
+pfn_glNamedBufferPageCommitmentEXT fp_glNamedBufferPageCommitmentEXT;
+pfn_glNamedBufferPageCommitmentARB fp_glNamedBufferPageCommitmentARB;
+pfn_glTexPageCommitmentARB fp_glTexPageCommitmentARB;
+pfn_glTexBufferARB fp_glTexBufferARB;
+pfn_glUniformBufferEXT fp_glUniformBufferEXT;
+pfn_glGetUniformBufferSizeEXT fp_glGetUniformBufferSizeEXT;
+pfn_glGetUniformOffsetEXT fp_glGetUniformOffsetEXT;
+pfn_glCopyImageSubDataEXT fp_glCopyImageSubDataEXT;
+pfn_glLabelObjectEXT fp_glLabelObjectEXT;
+pfn_glGetObjectLabelEXT fp_glGetObjectLabelEXT;
+pfn_glInsertEventMarkerEXT fp_glInsertEventMarkerEXT;
+pfn_glPushGroupMarkerEXT fp_glPushGroupMarkerEXT;
+pfn_glPopGroupMarkerEXT fp_glPopGroupMarkerEXT;
+pfn_glMatrixLoadfEXT fp_glMatrixLoadfEXT;
+pfn_glMatrixLoaddEXT fp_glMatrixLoaddEXT;
+pfn_glMatrixMultfEXT fp_glMatrixMultfEXT;
+pfn_glMatrixMultdEXT fp_glMatrixMultdEXT;
+pfn_glMatrixLoadIdentityEXT fp_glMatrixLoadIdentityEXT;
+pfn_glMatrixRotatefEXT fp_glMatrixRotatefEXT;
+pfn_glMatrixRotatedEXT fp_glMatrixRotatedEXT;
+pfn_glMatrixScalefEXT fp_glMatrixScalefEXT;
+pfn_glMatrixScaledEXT fp_glMatrixScaledEXT;
+pfn_glMatrixTranslatefEXT fp_glMatrixTranslatefEXT;
+pfn_glMatrixTranslatedEXT fp_glMatrixTranslatedEXT;
+pfn_glMatrixFrustumEXT fp_glMatrixFrustumEXT;
+pfn_glMatrixOrthoEXT fp_glMatrixOrthoEXT;
+pfn_glMatrixPopEXT fp_glMatrixPopEXT;
+pfn_glMatrixPushEXT fp_glMatrixPushEXT;
+pfn_glClientAttribDefaultEXT fp_glClientAttribDefaultEXT;
+pfn_glPushClientAttribDefaultEXT fp_glPushClientAttribDefaultEXT;
+pfn_glTextureParameterfEXT fp_glTextureParameterfEXT;
+pfn_glTextureParameterfvEXT fp_glTextureParameterfvEXT;
+pfn_glTextureParameteriEXT fp_glTextureParameteriEXT;
+pfn_glTextureParameterivEXT fp_glTextureParameterivEXT;
+pfn_glTextureImage1DEXT fp_glTextureImage1DEXT;
+pfn_glTextureImage2DEXT fp_glTextureImage2DEXT;
+pfn_glTextureSubImage1DEXT fp_glTextureSubImage1DEXT;
+pfn_glTextureSubImage2DEXT fp_glTextureSubImage2DEXT;
+pfn_glCopyTextureImage1DEXT fp_glCopyTextureImage1DEXT;
+pfn_glCopyTextureImage2DEXT fp_glCopyTextureImage2DEXT;
+pfn_glCopyTextureSubImage1DEXT fp_glCopyTextureSubImage1DEXT;
+pfn_glCopyTextureSubImage2DEXT fp_glCopyTextureSubImage2DEXT;
+pfn_glGetTextureImageEXT fp_glGetTextureImageEXT;
+pfn_glGetTextureParameterfvEXT fp_glGetTextureParameterfvEXT;
+pfn_glGetTextureParameterivEXT fp_glGetTextureParameterivEXT;
+pfn_glGetTextureLevelParameterfvEXT fp_glGetTextureLevelParameterfvEXT;
+pfn_glGetTextureLevelParameterivEXT fp_glGetTextureLevelParameterivEXT;
+pfn_glTextureImage3DEXT fp_glTextureImage3DEXT;
+pfn_glTextureSubImage3DEXT fp_glTextureSubImage3DEXT;
+pfn_glCopyTextureSubImage3DEXT fp_glCopyTextureSubImage3DEXT;
+pfn_glBindMultiTextureEXT fp_glBindMultiTextureEXT;
+pfn_glMultiTexCoordPointerEXT fp_glMultiTexCoordPointerEXT;
+pfn_glMultiTexEnvfEXT fp_glMultiTexEnvfEXT;
+pfn_glMultiTexEnvfvEXT fp_glMultiTexEnvfvEXT;
+pfn_glMultiTexEnviEXT fp_glMultiTexEnviEXT;
+pfn_glMultiTexEnvivEXT fp_glMultiTexEnvivEXT;
+pfn_glMultiTexGendEXT fp_glMultiTexGendEXT;
+pfn_glMultiTexGendvEXT fp_glMultiTexGendvEXT;
+pfn_glMultiTexGenfEXT fp_glMultiTexGenfEXT;
+pfn_glMultiTexGenfvEXT fp_glMultiTexGenfvEXT;
+pfn_glMultiTexGeniEXT fp_glMultiTexGeniEXT;
+pfn_glMultiTexGenivEXT fp_glMultiTexGenivEXT;
+pfn_glGetMultiTexEnvfvEXT fp_glGetMultiTexEnvfvEXT;
+pfn_glGetMultiTexEnvivEXT fp_glGetMultiTexEnvivEXT;
+pfn_glGetMultiTexGendvEXT fp_glGetMultiTexGendvEXT;
+pfn_glGetMultiTexGenfvEXT fp_glGetMultiTexGenfvEXT;
+pfn_glGetMultiTexGenivEXT fp_glGetMultiTexGenivEXT;
+pfn_glMultiTexParameteriEXT fp_glMultiTexParameteriEXT;
+pfn_glMultiTexParameterivEXT fp_glMultiTexParameterivEXT;
+pfn_glMultiTexParameterfEXT fp_glMultiTexParameterfEXT;
+pfn_glMultiTexParameterfvEXT fp_glMultiTexParameterfvEXT;
+pfn_glMultiTexImage1DEXT fp_glMultiTexImage1DEXT;
+pfn_glMultiTexImage2DEXT fp_glMultiTexImage2DEXT;
+pfn_glMultiTexSubImage1DEXT fp_glMultiTexSubImage1DEXT;
+pfn_glMultiTexSubImage2DEXT fp_glMultiTexSubImage2DEXT;
+pfn_glCopyMultiTexImage1DEXT fp_glCopyMultiTexImage1DEXT;
+pfn_glCopyMultiTexImage2DEXT fp_glCopyMultiTexImage2DEXT;
+pfn_glCopyMultiTexSubImage1DEXT fp_glCopyMultiTexSubImage1DEXT;
+pfn_glCopyMultiTexSubImage2DEXT fp_glCopyMultiTexSubImage2DEXT;
+pfn_glGetMultiTexImageEXT fp_glGetMultiTexImageEXT;
+pfn_glGetMultiTexParameterfvEXT fp_glGetMultiTexParameterfvEXT;
+pfn_glGetMultiTexParameterivEXT fp_glGetMultiTexParameterivEXT;
+pfn_glGetMultiTexLevelParameterfvEXT fp_glGetMultiTexLevelParameterfvEXT;
+pfn_glGetMultiTexLevelParameterivEXT fp_glGetMultiTexLevelParameterivEXT;
+pfn_glMultiTexImage3DEXT fp_glMultiTexImage3DEXT;
+pfn_glMultiTexSubImage3DEXT fp_glMultiTexSubImage3DEXT;
+pfn_glCopyMultiTexSubImage3DEXT fp_glCopyMultiTexSubImage3DEXT;
+pfn_glEnableClientStateIndexedEXT fp_glEnableClientStateIndexedEXT;
+pfn_glDisableClientStateIndexedEXT fp_glDisableClientStateIndexedEXT;
+pfn_glGetFloatIndexedvEXT fp_glGetFloatIndexedvEXT;
+pfn_glGetDoubleIndexedvEXT fp_glGetDoubleIndexedvEXT;
+pfn_glGetPointerIndexedvEXT fp_glGetPointerIndexedvEXT;
+pfn_glEnableIndexedEXT fp_glEnableIndexedEXT;
+pfn_glDisableIndexedEXT fp_glDisableIndexedEXT;
+pfn_glIsEnabledIndexedEXT fp_glIsEnabledIndexedEXT;
+pfn_glGetIntegerIndexedvEXT fp_glGetIntegerIndexedvEXT;
+pfn_glGetBooleanIndexedvEXT fp_glGetBooleanIndexedvEXT;
+pfn_glCompressedTextureImage3DEXT fp_glCompressedTextureImage3DEXT;
+pfn_glCompressedTextureImage2DEXT fp_glCompressedTextureImage2DEXT;
+pfn_glCompressedTextureImage1DEXT fp_glCompressedTextureImage1DEXT;
+pfn_glCompressedTextureSubImage3DEXT fp_glCompressedTextureSubImage3DEXT;
+pfn_glCompressedTextureSubImage2DEXT fp_glCompressedTextureSubImage2DEXT;
+pfn_glCompressedTextureSubImage1DEXT fp_glCompressedTextureSubImage1DEXT;
+pfn_glGetCompressedTextureImageEXT fp_glGetCompressedTextureImageEXT;
+pfn_glCompressedMultiTexImage3DEXT fp_glCompressedMultiTexImage3DEXT;
+pfn_glCompressedMultiTexImage2DEXT fp_glCompressedMultiTexImage2DEXT;
+pfn_glCompressedMultiTexImage1DEXT fp_glCompressedMultiTexImage1DEXT;
+pfn_glCompressedMultiTexSubImage3DEXT fp_glCompressedMultiTexSubImage3DEXT;
+pfn_glCompressedMultiTexSubImage2DEXT fp_glCompressedMultiTexSubImage2DEXT;
+pfn_glCompressedMultiTexSubImage1DEXT fp_glCompressedMultiTexSubImage1DEXT;
+pfn_glGetCompressedMultiTexImageEXT fp_glGetCompressedMultiTexImageEXT;
+pfn_glMatrixLoadTransposefEXT fp_glMatrixLoadTransposefEXT;
+pfn_glMatrixLoadTransposedEXT fp_glMatrixLoadTransposedEXT;
+pfn_glMatrixMultTransposefEXT fp_glMatrixMultTransposefEXT;
+pfn_glMatrixMultTransposedEXT fp_glMatrixMultTransposedEXT;
+pfn_glNamedBufferDataEXT fp_glNamedBufferDataEXT;
+pfn_glNamedBufferSubDataEXT fp_glNamedBufferSubDataEXT;
+pfn_glMapNamedBufferEXT fp_glMapNamedBufferEXT;
+pfn_glUnmapNamedBufferEXT fp_glUnmapNamedBufferEXT;
+pfn_glGetNamedBufferParameterivEXT fp_glGetNamedBufferParameterivEXT;
+pfn_glGetNamedBufferPointervEXT fp_glGetNamedBufferPointervEXT;
+pfn_glGetNamedBufferSubDataEXT fp_glGetNamedBufferSubDataEXT;
+pfn_glProgramUniform1fEXT fp_glProgramUniform1fEXT;
+pfn_glProgramUniform2fEXT fp_glProgramUniform2fEXT;
+pfn_glProgramUniform3fEXT fp_glProgramUniform3fEXT;
+pfn_glProgramUniform4fEXT fp_glProgramUniform4fEXT;
+pfn_glProgramUniform1iEXT fp_glProgramUniform1iEXT;
+pfn_glProgramUniform2iEXT fp_glProgramUniform2iEXT;
+pfn_glProgramUniform3iEXT fp_glProgramUniform3iEXT;
+pfn_glProgramUniform4iEXT fp_glProgramUniform4iEXT;
+pfn_glProgramUniform1fvEXT fp_glProgramUniform1fvEXT;
+pfn_glProgramUniform2fvEXT fp_glProgramUniform2fvEXT;
+pfn_glProgramUniform3fvEXT fp_glProgramUniform3fvEXT;
+pfn_glProgramUniform4fvEXT fp_glProgramUniform4fvEXT;
+pfn_glProgramUniform1ivEXT fp_glProgramUniform1ivEXT;
+pfn_glProgramUniform2ivEXT fp_glProgramUniform2ivEXT;
+pfn_glProgramUniform3ivEXT fp_glProgramUniform3ivEXT;
+pfn_glProgramUniform4ivEXT fp_glProgramUniform4ivEXT;
+pfn_glProgramUniformMatrix2fvEXT fp_glProgramUniformMatrix2fvEXT;
+pfn_glProgramUniformMatrix3fvEXT fp_glProgramUniformMatrix3fvEXT;
+pfn_glProgramUniformMatrix4fvEXT fp_glProgramUniformMatrix4fvEXT;
+pfn_glProgramUniformMatrix2x3fvEXT fp_glProgramUniformMatrix2x3fvEXT;
+pfn_glProgramUniformMatrix3x2fvEXT fp_glProgramUniformMatrix3x2fvEXT;
+pfn_glProgramUniformMatrix2x4fvEXT fp_glProgramUniformMatrix2x4fvEXT;
+pfn_glProgramUniformMatrix4x2fvEXT fp_glProgramUniformMatrix4x2fvEXT;
+pfn_glProgramUniformMatrix3x4fvEXT fp_glProgramUniformMatrix3x4fvEXT;
+pfn_glProgramUniformMatrix4x3fvEXT fp_glProgramUniformMatrix4x3fvEXT;
+pfn_glTextureBufferEXT fp_glTextureBufferEXT;
+pfn_glMultiTexBufferEXT fp_glMultiTexBufferEXT;
+pfn_glTextureParameterIivEXT fp_glTextureParameterIivEXT;
+pfn_glTextureParameterIuivEXT fp_glTextureParameterIuivEXT;
+pfn_glGetTextureParameterIivEXT fp_glGetTextureParameterIivEXT;
+pfn_glGetTextureParameterIuivEXT fp_glGetTextureParameterIuivEXT;
+pfn_glMultiTexParameterIivEXT fp_glMultiTexParameterIivEXT;
+pfn_glMultiTexParameterIuivEXT fp_glMultiTexParameterIuivEXT;
+pfn_glGetMultiTexParameterIivEXT fp_glGetMultiTexParameterIivEXT;
+pfn_glGetMultiTexParameterIuivEXT fp_glGetMultiTexParameterIuivEXT;
+pfn_glProgramUniform1uiEXT fp_glProgramUniform1uiEXT;
+pfn_glProgramUniform2uiEXT fp_glProgramUniform2uiEXT;
+pfn_glProgramUniform3uiEXT fp_glProgramUniform3uiEXT;
+pfn_glProgramUniform4uiEXT fp_glProgramUniform4uiEXT;
+pfn_glProgramUniform1uivEXT fp_glProgramUniform1uivEXT;
+pfn_glProgramUniform2uivEXT fp_glProgramUniform2uivEXT;
+pfn_glProgramUniform3uivEXT fp_glProgramUniform3uivEXT;
+pfn_glProgramUniform4uivEXT fp_glProgramUniform4uivEXT;
+pfn_glNamedProgramLocalParameters4fvEXT fp_glNamedProgramLocalParameters4fvEXT;
+pfn_glNamedProgramLocalParameterI4iEXT fp_glNamedProgramLocalParameterI4iEXT;
+pfn_glNamedProgramLocalParameterI4ivEXT fp_glNamedProgramLocalParameterI4ivEXT;
+pfn_glNamedProgramLocalParametersI4ivEXT fp_glNamedProgramLocalParametersI4ivEXT;
+pfn_glNamedProgramLocalParameterI4uiEXT fp_glNamedProgramLocalParameterI4uiEXT;
+pfn_glNamedProgramLocalParameterI4uivEXT fp_glNamedProgramLocalParameterI4uivEXT;
+pfn_glNamedProgramLocalParametersI4uivEXT fp_glNamedProgramLocalParametersI4uivEXT;
+pfn_glGetNamedProgramLocalParameterIivEXT fp_glGetNamedProgramLocalParameterIivEXT;
+pfn_glGetNamedProgramLocalParameterIuivEXT fp_glGetNamedProgramLocalParameterIuivEXT;
+pfn_glEnableClientStateiEXT fp_glEnableClientStateiEXT;
+pfn_glDisableClientStateiEXT fp_glDisableClientStateiEXT;
+pfn_glGetFloati_vEXT fp_glGetFloati_vEXT;
+pfn_glGetDoublei_vEXT fp_glGetDoublei_vEXT;
+pfn_glGetPointeri_vEXT fp_glGetPointeri_vEXT;
+pfn_glNamedProgramStringEXT fp_glNamedProgramStringEXT;
+pfn_glNamedProgramLocalParameter4dEXT fp_glNamedProgramLocalParameter4dEXT;
+pfn_glNamedProgramLocalParameter4dvEXT fp_glNamedProgramLocalParameter4dvEXT;
+pfn_glNamedProgramLocalParameter4fEXT fp_glNamedProgramLocalParameter4fEXT;
+pfn_glNamedProgramLocalParameter4fvEXT fp_glNamedProgramLocalParameter4fvEXT;
+pfn_glGetNamedProgramLocalParameterdvEXT fp_glGetNamedProgramLocalParameterdvEXT;
+pfn_glGetNamedProgramLocalParameterfvEXT fp_glGetNamedProgramLocalParameterfvEXT;
+pfn_glGetNamedProgramivEXT fp_glGetNamedProgramivEXT;
+pfn_glGetNamedProgramStringEXT fp_glGetNamedProgramStringEXT;
+pfn_glNamedRenderbufferStorageEXT fp_glNamedRenderbufferStorageEXT;
+pfn_glGetNamedRenderbufferParameterivEXT fp_glGetNamedRenderbufferParameterivEXT;
+pfn_glNamedRenderbufferStorageMultisampleEXT fp_glNamedRenderbufferStorageMultisampleEXT;
+pfn_glNamedRenderbufferStorageMultisampleCoverageEXT fp_glNamedRenderbufferStorageMultisampleCoverageEXT;
+pfn_glCheckNamedFramebufferStatusEXT fp_glCheckNamedFramebufferStatusEXT;
+pfn_glNamedFramebufferTexture1DEXT fp_glNamedFramebufferTexture1DEXT;
+pfn_glNamedFramebufferTexture2DEXT fp_glNamedFramebufferTexture2DEXT;
+pfn_glNamedFramebufferTexture3DEXT fp_glNamedFramebufferTexture3DEXT;
+pfn_glNamedFramebufferRenderbufferEXT fp_glNamedFramebufferRenderbufferEXT;
+pfn_glGetNamedFramebufferAttachmentParameterivEXT fp_glGetNamedFramebufferAttachmentParameterivEXT;
+pfn_glGenerateTextureMipmapEXT fp_glGenerateTextureMipmapEXT;
+pfn_glGenerateMultiTexMipmapEXT fp_glGenerateMultiTexMipmapEXT;
+pfn_glFramebufferDrawBufferEXT fp_glFramebufferDrawBufferEXT;
+pfn_glFramebufferDrawBuffersEXT fp_glFramebufferDrawBuffersEXT;
+pfn_glFramebufferReadBufferEXT fp_glFramebufferReadBufferEXT;
+pfn_glGetFramebufferParameterivEXT fp_glGetFramebufferParameterivEXT;
+pfn_glNamedCopyBufferSubDataEXT fp_glNamedCopyBufferSubDataEXT;
+pfn_glNamedFramebufferTextureEXT fp_glNamedFramebufferTextureEXT;
+pfn_glNamedFramebufferTextureLayerEXT fp_glNamedFramebufferTextureLayerEXT;
+pfn_glNamedFramebufferTextureFaceEXT fp_glNamedFramebufferTextureFaceEXT;
+pfn_glTextureRenderbufferEXT fp_glTextureRenderbufferEXT;
+pfn_glMultiTexRenderbufferEXT fp_glMultiTexRenderbufferEXT;
+pfn_glVertexArrayVertexOffsetEXT fp_glVertexArrayVertexOffsetEXT;
+pfn_glVertexArrayColorOffsetEXT fp_glVertexArrayColorOffsetEXT;
+pfn_glVertexArrayEdgeFlagOffsetEXT fp_glVertexArrayEdgeFlagOffsetEXT;
+pfn_glVertexArrayIndexOffsetEXT fp_glVertexArrayIndexOffsetEXT;
+pfn_glVertexArrayNormalOffsetEXT fp_glVertexArrayNormalOffsetEXT;
+pfn_glVertexArrayTexCoordOffsetEXT fp_glVertexArrayTexCoordOffsetEXT;
+pfn_glVertexArrayMultiTexCoordOffsetEXT fp_glVertexArrayMultiTexCoordOffsetEXT;
+pfn_glVertexArrayFogCoordOffsetEXT fp_glVertexArrayFogCoordOffsetEXT;
+pfn_glVertexArraySecondaryColorOffsetEXT fp_glVertexArraySecondaryColorOffsetEXT;
+pfn_glVertexArrayVertexAttribOffsetEXT fp_glVertexArrayVertexAttribOffsetEXT;
+pfn_glVertexArrayVertexAttribIOffsetEXT fp_glVertexArrayVertexAttribIOffsetEXT;
+pfn_glEnableVertexArrayEXT fp_glEnableVertexArrayEXT;
+pfn_glDisableVertexArrayEXT fp_glDisableVertexArrayEXT;
+pfn_glEnableVertexArrayAttribEXT fp_glEnableVertexArrayAttribEXT;
+pfn_glDisableVertexArrayAttribEXT fp_glDisableVertexArrayAttribEXT;
+pfn_glGetVertexArrayIntegervEXT fp_glGetVertexArrayIntegervEXT;
+pfn_glGetVertexArrayPointervEXT fp_glGetVertexArrayPointervEXT;
+pfn_glGetVertexArrayIntegeri_vEXT fp_glGetVertexArrayIntegeri_vEXT;
+pfn_glGetVertexArrayPointeri_vEXT fp_glGetVertexArrayPointeri_vEXT;
+pfn_glMapNamedBufferRangeEXT fp_glMapNamedBufferRangeEXT;
+pfn_glFlushMappedNamedBufferRangeEXT fp_glFlushMappedNamedBufferRangeEXT;
+pfn_glNamedBufferStorageEXT fp_glNamedBufferStorageEXT;
+pfn_glClearNamedBufferDataEXT fp_glClearNamedBufferDataEXT;
+pfn_glClearNamedBufferSubDataEXT fp_glClearNamedBufferSubDataEXT;
+pfn_glNamedFramebufferParameteriEXT fp_glNamedFramebufferParameteriEXT;
+pfn_glGetNamedFramebufferParameterivEXT fp_glGetNamedFramebufferParameterivEXT;
+pfn_glProgramUniform1dEXT fp_glProgramUniform1dEXT;
+pfn_glProgramUniform2dEXT fp_glProgramUniform2dEXT;
+pfn_glProgramUniform3dEXT fp_glProgramUniform3dEXT;
+pfn_glProgramUniform4dEXT fp_glProgramUniform4dEXT;
+pfn_glProgramUniform1dvEXT fp_glProgramUniform1dvEXT;
+pfn_glProgramUniform2dvEXT fp_glProgramUniform2dvEXT;
+pfn_glProgramUniform3dvEXT fp_glProgramUniform3dvEXT;
+pfn_glProgramUniform4dvEXT fp_glProgramUniform4dvEXT;
+pfn_glProgramUniformMatrix2dvEXT fp_glProgramUniformMatrix2dvEXT;
+pfn_glProgramUniformMatrix3dvEXT fp_glProgramUniformMatrix3dvEXT;
+pfn_glProgramUniformMatrix4dvEXT fp_glProgramUniformMatrix4dvEXT;
+pfn_glProgramUniformMatrix2x3dvEXT fp_glProgramUniformMatrix2x3dvEXT;
+pfn_glProgramUniformMatrix2x4dvEXT fp_glProgramUniformMatrix2x4dvEXT;
+pfn_glProgramUniformMatrix3x2dvEXT fp_glProgramUniformMatrix3x2dvEXT;
+pfn_glProgramUniformMatrix3x4dvEXT fp_glProgramUniformMatrix3x4dvEXT;
+pfn_glProgramUniformMatrix4x2dvEXT fp_glProgramUniformMatrix4x2dvEXT;
+pfn_glProgramUniformMatrix4x3dvEXT fp_glProgramUniformMatrix4x3dvEXT;
+pfn_glTextureBufferRangeEXT fp_glTextureBufferRangeEXT;
+pfn_glTextureStorage1DEXT fp_glTextureStorage1DEXT;
+pfn_glTextureStorage2DEXT fp_glTextureStorage2DEXT;
+pfn_glTextureStorage3DEXT fp_glTextureStorage3DEXT;
+pfn_glTextureStorage2DMultisampleEXT fp_glTextureStorage2DMultisampleEXT;
+pfn_glTextureStorage3DMultisampleEXT fp_glTextureStorage3DMultisampleEXT;
+pfn_glVertexArrayBindVertexBufferEXT fp_glVertexArrayBindVertexBufferEXT;
+pfn_glVertexArrayVertexAttribFormatEXT fp_glVertexArrayVertexAttribFormatEXT;
+pfn_glVertexArrayVertexAttribIFormatEXT fp_glVertexArrayVertexAttribIFormatEXT;
+pfn_glVertexArrayVertexAttribLFormatEXT fp_glVertexArrayVertexAttribLFormatEXT;
+pfn_glVertexArrayVertexAttribBindingEXT fp_glVertexArrayVertexAttribBindingEXT;
+pfn_glVertexArrayVertexBindingDivisorEXT fp_glVertexArrayVertexBindingDivisorEXT;
+pfn_glVertexArrayVertexAttribLOffsetEXT fp_glVertexArrayVertexAttribLOffsetEXT;
+pfn_glTexturePageCommitmentEXT fp_glTexturePageCommitmentEXT;
+pfn_glVertexArrayVertexAttribDivisorEXT fp_glVertexArrayVertexAttribDivisorEXT;
+pfn_glDiscardFramebufferEXT fp_glDiscardFramebufferEXT;
+pfn_glGenQueriesEXT fp_glGenQueriesEXT;
+pfn_glDeleteQueriesEXT fp_glDeleteQueriesEXT;
+pfn_glIsQueryEXT fp_glIsQueryEXT;
+pfn_glBeginQueryEXT fp_glBeginQueryEXT;
+pfn_glEndQueryEXT fp_glEndQueryEXT;
+pfn_glQueryCounterEXT fp_glQueryCounterEXT;
+pfn_glGetQueryivEXT fp_glGetQueryivEXT;
+pfn_glGetQueryObjectivEXT fp_glGetQueryObjectivEXT;
+pfn_glGetQueryObjectuivEXT fp_glGetQueryObjectuivEXT;
+pfn_glGetQueryObjecti64vEXT fp_glGetQueryObjecti64vEXT;
+pfn_glGetQueryObjectui64vEXT fp_glGetQueryObjectui64vEXT;
+pfn_glDrawBuffersEXT fp_glDrawBuffersEXT;
+pfn_glColorMaskIndexedEXT fp_glColorMaskIndexedEXT;
+pfn_glEnableiEXT fp_glEnableiEXT;
+pfn_glDisableiEXT fp_glDisableiEXT;
+pfn_glBlendEquationiEXT fp_glBlendEquationiEXT;
+pfn_glBlendEquationSeparateiEXT fp_glBlendEquationSeparateiEXT;
+pfn_glBlendFunciEXT fp_glBlendFunciEXT;
+pfn_glBlendFuncSeparateiEXT fp_glBlendFuncSeparateiEXT;
+pfn_glColorMaskiEXT fp_glColorMaskiEXT;
+pfn_glIsEnablediEXT fp_glIsEnablediEXT;
+pfn_glDrawArraysInstancedEXT fp_glDrawArraysInstancedEXT;
+pfn_glDrawElementsInstancedEXT fp_glDrawElementsInstancedEXT;
+pfn_glBlitFramebufferEXT fp_glBlitFramebufferEXT;
+pfn_glRenderbufferStorageMultisampleEXT fp_glRenderbufferStorageMultisampleEXT;
+pfn_glIsRenderbufferEXT fp_glIsRenderbufferEXT;
+pfn_glBindRenderbufferEXT fp_glBindRenderbufferEXT;
+pfn_glDeleteRenderbuffersEXT fp_glDeleteRenderbuffersEXT;
+pfn_glGenRenderbuffersEXT fp_glGenRenderbuffersEXT;
+pfn_glRenderbufferStorageEXT fp_glRenderbufferStorageEXT;
+pfn_glGetRenderbufferParameterivEXT fp_glGetRenderbufferParameterivEXT;
+pfn_glIsFramebufferEXT fp_glIsFramebufferEXT;
+pfn_glBindFramebufferEXT fp_glBindFramebufferEXT;
+pfn_glDeleteFramebuffersEXT fp_glDeleteFramebuffersEXT;
+pfn_glGenFramebuffersEXT fp_glGenFramebuffersEXT;
+pfn_glCheckFramebufferStatusEXT fp_glCheckFramebufferStatusEXT;
+pfn_glFramebufferTexture1DEXT fp_glFramebufferTexture1DEXT;
+pfn_glFramebufferTexture2DEXT fp_glFramebufferTexture2DEXT;
+pfn_glFramebufferTexture3DEXT fp_glFramebufferTexture3DEXT;
+pfn_glFramebufferRenderbufferEXT fp_glFramebufferRenderbufferEXT;
+pfn_glGetFramebufferAttachmentParameterivEXT fp_glGetFramebufferAttachmentParameterivEXT;
+pfn_glGenerateMipmapEXT fp_glGenerateMipmapEXT;
+pfn_glFramebufferTextureEXT fp_glFramebufferTextureEXT;
+pfn_glProgramParameteriEXT fp_glProgramParameteriEXT;
+pfn_glProgramEnvParameters4fvEXT fp_glProgramEnvParameters4fvEXT;
+pfn_glProgramLocalParameters4fvEXT fp_glProgramLocalParameters4fvEXT;
+pfn_glGetUniformuivEXT fp_glGetUniformuivEXT;
+pfn_glBindFragDataLocationEXT fp_glBindFragDataLocationEXT;
+pfn_glGetFragDataLocationEXT fp_glGetFragDataLocationEXT;
+pfn_glUniform1uiEXT fp_glUniform1uiEXT;
+pfn_glUniform2uiEXT fp_glUniform2uiEXT;
+pfn_glUniform3uiEXT fp_glUniform3uiEXT;
+pfn_glUniform4uiEXT fp_glUniform4uiEXT;
+pfn_glUniform1uivEXT fp_glUniform1uivEXT;
+pfn_glUniform2uivEXT fp_glUniform2uivEXT;
+pfn_glUniform3uivEXT fp_glUniform3uivEXT;
+pfn_glUniform4uivEXT fp_glUniform4uivEXT;
+pfn_glVertexAttribDivisorEXT fp_glVertexAttribDivisorEXT;
+pfn_glMapBufferRangeEXT fp_glMapBufferRangeEXT;
+pfn_glFlushMappedBufferRangeEXT fp_glFlushMappedBufferRangeEXT;
+pfn_glFramebufferTexture2DMultisampleEXT fp_glFramebufferTexture2DMultisampleEXT;
+pfn_glReadBufferIndexedEXT fp_glReadBufferIndexedEXT;
+pfn_glDrawBuffersIndexedEXT fp_glDrawBuffersIndexedEXT;
+pfn_glGetIntegeri_vEXT fp_glGetIntegeri_vEXT;
+pfn_glPrimitiveBoundingBoxEXT fp_glPrimitiveBoundingBoxEXT;
+pfn_glProvokingVertexEXT fp_glProvokingVertexEXT;
+pfn_glGetGraphicsResetStatusEXT fp_glGetGraphicsResetStatusEXT;
+pfn_glReadnPixelsEXT fp_glReadnPixelsEXT;
+pfn_glGetnUniformfvEXT fp_glGetnUniformfvEXT;
+pfn_glGetnUniformivEXT fp_glGetnUniformivEXT;
+pfn_glUseShaderProgramEXT fp_glUseShaderProgramEXT;
+pfn_glActiveProgramEXT fp_glActiveProgramEXT;
+pfn_glCreateShaderProgramEXT fp_glCreateShaderProgramEXT;
+pfn_glActiveShaderProgramEXT fp_glActiveShaderProgramEXT;
+pfn_glBindProgramPipelineEXT fp_glBindProgramPipelineEXT;
+pfn_glCreateShaderProgramvEXT fp_glCreateShaderProgramvEXT;
+pfn_glDeleteProgramPipelinesEXT fp_glDeleteProgramPipelinesEXT;
+pfn_glGenProgramPipelinesEXT fp_glGenProgramPipelinesEXT;
+pfn_glGetProgramPipelineInfoLogEXT fp_glGetProgramPipelineInfoLogEXT;
+pfn_glGetProgramPipelineivEXT fp_glGetProgramPipelineivEXT;
+pfn_glIsProgramPipelineEXT fp_glIsProgramPipelineEXT;
+pfn_glUseProgramStagesEXT fp_glUseProgramStagesEXT;
+pfn_glValidateProgramPipelineEXT fp_glValidateProgramPipelineEXT;
+pfn_glBindImageTextureEXT fp_glBindImageTextureEXT;
+pfn_glMemoryBarrierEXT fp_glMemoryBarrierEXT;
+pfn_glStencilClearTagEXT fp_glStencilClearTagEXT;
+pfn_glPatchParameteriEXT fp_glPatchParameteriEXT;
+pfn_glFramebufferTextureLayerEXT fp_glFramebufferTextureLayerEXT;
+pfn_glTexParameterIivEXT fp_glTexParameterIivEXT;
+pfn_glTexParameterIuivEXT fp_glTexParameterIuivEXT;
+pfn_glGetTexParameterIivEXT fp_glGetTexParameterIivEXT;
+pfn_glGetTexParameterIuivEXT fp_glGetTexParameterIuivEXT;
+pfn_glSamplerParameterIivEXT fp_glSamplerParameterIivEXT;
+pfn_glSamplerParameterIuivEXT fp_glSamplerParameterIuivEXT;
+pfn_glGetSamplerParameterIivEXT fp_glGetSamplerParameterIivEXT;
+pfn_glGetSamplerParameterIuivEXT fp_glGetSamplerParameterIuivEXT;
+pfn_glTexBufferEXT fp_glTexBufferEXT;
+pfn_glTexBufferRangeEXT fp_glTexBufferRangeEXT;
+pfn_glClearColorIiEXT fp_glClearColorIiEXT;
+pfn_glClearColorIuiEXT fp_glClearColorIuiEXT;
+pfn_glTexStorage1DEXT fp_glTexStorage1DEXT;
+pfn_glTexStorage2DEXT fp_glTexStorage2DEXT;
+pfn_glTexStorage3DEXT fp_glTexStorage3DEXT;
+pfn_glTextureViewEXT fp_glTextureViewEXT;
+pfn_glBeginTransformFeedbackEXT fp_glBeginTransformFeedbackEXT;
+pfn_glEndTransformFeedbackEXT fp_glEndTransformFeedbackEXT;
+pfn_glBindBufferRangeEXT fp_glBindBufferRangeEXT;
+pfn_glBindBufferOffsetEXT fp_glBindBufferOffsetEXT;
+pfn_glBindBufferBaseEXT fp_glBindBufferBaseEXT;
+pfn_glTransformFeedbackVaryingsEXT fp_glTransformFeedbackVaryingsEXT;
+pfn_glGetTransformFeedbackVaryingEXT fp_glGetTransformFeedbackVaryingEXT;
+pfn_glVertexAttribL1dEXT fp_glVertexAttribL1dEXT;
+pfn_glVertexAttribL2dEXT fp_glVertexAttribL2dEXT;
+pfn_glVertexAttribL3dEXT fp_glVertexAttribL3dEXT;
+pfn_glVertexAttribL4dEXT fp_glVertexAttribL4dEXT;
+pfn_glVertexAttribL1dvEXT fp_glVertexAttribL1dvEXT;
+pfn_glVertexAttribL2dvEXT fp_glVertexAttribL2dvEXT;
+pfn_glVertexAttribL3dvEXT fp_glVertexAttribL3dvEXT;
+pfn_glVertexAttribL4dvEXT fp_glVertexAttribL4dvEXT;
+pfn_glVertexAttribLPointerEXT fp_glVertexAttribLPointerEXT;
+pfn_glGetVertexAttribLdvEXT fp_glGetVertexAttribLdvEXT;
+pfn_glImportSyncEXT fp_glImportSyncEXT;
+pfn_glEGLImageTargetTexture2DOES fp_glEGLImageTargetTexture2DOES;
+pfn_glEGLImageTargetRenderbufferStorageOES fp_glEGLImageTargetRenderbufferStorageOES;
+pfn_glGetProgramBinaryOES fp_glGetProgramBinaryOES;
+pfn_glProgramBinaryOES fp_glProgramBinaryOES;
+pfn_glMapBufferOES fp_glMapBufferOES;
+pfn_glUnmapBufferOES fp_glUnmapBufferOES;
+pfn_glGetBufferPointervOES fp_glGetBufferPointervOES;
+pfn_glMinSampleShadingOES fp_glMinSampleShadingOES;
+pfn_glTexImage3DOES fp_glTexImage3DOES;
+pfn_glTexSubImage3DOES fp_glTexSubImage3DOES;
+pfn_glCopyTexSubImage3DOES fp_glCopyTexSubImage3DOES;
+pfn_glCompressedTexImage3DOES fp_glCompressedTexImage3DOES;
+pfn_glCompressedTexSubImage3DOES fp_glCompressedTexSubImage3DOES;
+pfn_glFramebufferTexture3DOES fp_glFramebufferTexture3DOES;
+pfn_glTexStorage3DMultisampleOES fp_glTexStorage3DMultisampleOES;
+pfn_glBindVertexArrayOES fp_glBindVertexArrayOES;
+pfn_glDeleteVertexArraysOES fp_glDeleteVertexArraysOES;
+pfn_glGenVertexArraysOES fp_glGenVertexArraysOES;
+pfn_glIsVertexArrayOES fp_glIsVertexArrayOES;
+pfn_glDebugMessageEnableAMD fp_glDebugMessageEnableAMD;
+pfn_glDebugMessageInsertAMD fp_glDebugMessageInsertAMD;
+pfn_glDebugMessageCallbackAMD fp_glDebugMessageCallbackAMD;
+pfn_glGetDebugMessageLogAMD fp_glGetDebugMessageLogAMD;
+pfn_glBlendFuncIndexedAMD fp_glBlendFuncIndexedAMD;
+pfn_glBlendFuncSeparateIndexedAMD fp_glBlendFuncSeparateIndexedAMD;
+pfn_glBlendEquationIndexedAMD fp_glBlendEquationIndexedAMD;
+pfn_glBlendEquationSeparateIndexedAMD fp_glBlendEquationSeparateIndexedAMD;
+pfn_glUniform1i64NV fp_glUniform1i64NV;
+pfn_glUniform2i64NV fp_glUniform2i64NV;
+pfn_glUniform3i64NV fp_glUniform3i64NV;
+pfn_glUniform4i64NV fp_glUniform4i64NV;
+pfn_glUniform1i64vNV fp_glUniform1i64vNV;
+pfn_glUniform2i64vNV fp_glUniform2i64vNV;
+pfn_glUniform3i64vNV fp_glUniform3i64vNV;
+pfn_glUniform4i64vNV fp_glUniform4i64vNV;
+pfn_glUniform1ui64NV fp_glUniform1ui64NV;
+pfn_glUniform2ui64NV fp_glUniform2ui64NV;
+pfn_glUniform3ui64NV fp_glUniform3ui64NV;
+pfn_glUniform4ui64NV fp_glUniform4ui64NV;
+pfn_glUniform1ui64vNV fp_glUniform1ui64vNV;
+pfn_glUniform2ui64vNV fp_glUniform2ui64vNV;
+pfn_glUniform3ui64vNV fp_glUniform3ui64vNV;
+pfn_glUniform4ui64vNV fp_glUniform4ui64vNV;
+pfn_glGetUniformi64vNV fp_glGetUniformi64vNV;
+pfn_glGetUniformui64vNV fp_glGetUniformui64vNV;
+pfn_glProgramUniform1i64NV fp_glProgramUniform1i64NV;
+pfn_glProgramUniform2i64NV fp_glProgramUniform2i64NV;
+pfn_glProgramUniform3i64NV fp_glProgramUniform3i64NV;
+pfn_glProgramUniform4i64NV fp_glProgramUniform4i64NV;
+pfn_glProgramUniform1i64vNV fp_glProgramUniform1i64vNV;
+pfn_glProgramUniform2i64vNV fp_glProgramUniform2i64vNV;
+pfn_glProgramUniform3i64vNV fp_glProgramUniform3i64vNV;
+pfn_glProgramUniform4i64vNV fp_glProgramUniform4i64vNV;
+pfn_glProgramUniform1ui64NV fp_glProgramUniform1ui64NV;
+pfn_glProgramUniform2ui64NV fp_glProgramUniform2ui64NV;
+pfn_glProgramUniform3ui64NV fp_glProgramUniform3ui64NV;
+pfn_glProgramUniform4ui64NV fp_glProgramUniform4ui64NV;
+pfn_glProgramUniform1ui64vNV fp_glProgramUniform1ui64vNV;
+pfn_glProgramUniform2ui64vNV fp_glProgramUniform2ui64vNV;
+pfn_glProgramUniform3ui64vNV fp_glProgramUniform3ui64vNV;
+pfn_glProgramUniform4ui64vNV fp_glProgramUniform4ui64vNV;
+pfn_glVertexAttribParameteriAMD fp_glVertexAttribParameteriAMD;
+pfn_glMultiDrawArraysIndirectAMD fp_glMultiDrawArraysIndirectAMD;
+pfn_glMultiDrawElementsIndirectAMD fp_glMultiDrawElementsIndirectAMD;
+pfn_glGenNamesAMD fp_glGenNamesAMD;
+pfn_glDeleteNamesAMD fp_glDeleteNamesAMD;
+pfn_glIsNameAMD fp_glIsNameAMD;
+pfn_glQueryObjectParameteruiAMD fp_glQueryObjectParameteruiAMD;
+pfn_glGetPerfMonitorGroupsAMD fp_glGetPerfMonitorGroupsAMD;
+pfn_glGetPerfMonitorCountersAMD fp_glGetPerfMonitorCountersAMD;
+pfn_glGetPerfMonitorGroupStringAMD fp_glGetPerfMonitorGroupStringAMD;
+pfn_glGetPerfMonitorCounterStringAMD fp_glGetPerfMonitorCounterStringAMD;
+pfn_glGetPerfMonitorCounterInfoAMD fp_glGetPerfMonitorCounterInfoAMD;
+pfn_glGenPerfMonitorsAMD fp_glGenPerfMonitorsAMD;
+pfn_glDeletePerfMonitorsAMD fp_glDeletePerfMonitorsAMD;
+pfn_glSelectPerfMonitorCountersAMD fp_glSelectPerfMonitorCountersAMD;
+pfn_glBeginPerfMonitorAMD fp_glBeginPerfMonitorAMD;
+pfn_glEndPerfMonitorAMD fp_glEndPerfMonitorAMD;
+pfn_glGetPerfMonitorCounterDataAMD fp_glGetPerfMonitorCounterDataAMD;
+pfn_glSetMultisamplefvAMD fp_glSetMultisamplefvAMD;
+pfn_glTexStorageSparseAMD fp_glTexStorageSparseAMD;
+pfn_glTextureStorageSparseAMD fp_glTextureStorageSparseAMD;
+pfn_glStencilOpValueAMD fp_glStencilOpValueAMD;
+pfn_glTessellationFactorAMD fp_glTessellationFactorAMD;
+pfn_glTessellationModeAMD fp_glTessellationModeAMD;
+pfn_glBlitFramebufferANGLE fp_glBlitFramebufferANGLE;
+pfn_glRenderbufferStorageMultisampleANGLE fp_glRenderbufferStorageMultisampleANGLE;
+pfn_glDrawArraysInstancedANGLE fp_glDrawArraysInstancedANGLE;
+pfn_glDrawElementsInstancedANGLE fp_glDrawElementsInstancedANGLE;
+pfn_glVertexAttribDivisorANGLE fp_glVertexAttribDivisorANGLE;
+pfn_glGetTranslatedShaderSourceANGLE fp_glGetTranslatedShaderSourceANGLE;
+pfn_glCopyTextureLevelsAPPLE fp_glCopyTextureLevelsAPPLE;
+pfn_glElementPointerAPPLE fp_glElementPointerAPPLE;
+pfn_glDrawElementArrayAPPLE fp_glDrawElementArrayAPPLE;
+pfn_glDrawRangeElementArrayAPPLE fp_glDrawRangeElementArrayAPPLE;
+pfn_glMultiDrawElementArrayAPPLE fp_glMultiDrawElementArrayAPPLE;
+pfn_glMultiDrawRangeElementArrayAPPLE fp_glMultiDrawRangeElementArrayAPPLE;
+pfn_glGenFencesAPPLE fp_glGenFencesAPPLE;
+pfn_glDeleteFencesAPPLE fp_glDeleteFencesAPPLE;
+pfn_glSetFenceAPPLE fp_glSetFenceAPPLE;
+pfn_glIsFenceAPPLE fp_glIsFenceAPPLE;
+pfn_glTestFenceAPPLE fp_glTestFenceAPPLE;
+pfn_glFinishFenceAPPLE fp_glFinishFenceAPPLE;
+pfn_glTestObjectAPPLE fp_glTestObjectAPPLE;
+pfn_glFinishObjectAPPLE fp_glFinishObjectAPPLE;
+pfn_glBufferParameteriAPPLE fp_glBufferParameteriAPPLE;
+pfn_glFlushMappedBufferRangeAPPLE fp_glFlushMappedBufferRangeAPPLE;
+pfn_glRenderbufferStorageMultisampleAPPLE fp_glRenderbufferStorageMultisampleAPPLE;
+pfn_glResolveMultisampleFramebufferAPPLE fp_glResolveMultisampleFramebufferAPPLE;
+pfn_glObjectPurgeableAPPLE fp_glObjectPurgeableAPPLE;
+pfn_glObjectUnpurgeableAPPLE fp_glObjectUnpurgeableAPPLE;
+pfn_glGetObjectParameterivAPPLE fp_glGetObjectParameterivAPPLE;
+pfn_glFenceSyncAPPLE fp_glFenceSyncAPPLE;
+pfn_glIsSyncAPPLE fp_glIsSyncAPPLE;
+pfn_glDeleteSyncAPPLE fp_glDeleteSyncAPPLE;
+pfn_glClientWaitSyncAPPLE fp_glClientWaitSyncAPPLE;
+pfn_glWaitSyncAPPLE fp_glWaitSyncAPPLE;
+pfn_glGetInteger64vAPPLE fp_glGetInteger64vAPPLE;
+pfn_glGetSyncivAPPLE fp_glGetSyncivAPPLE;
+pfn_glTextureRangeAPPLE fp_glTextureRangeAPPLE;
+pfn_glGetTexParameterPointervAPPLE fp_glGetTexParameterPointervAPPLE;
+pfn_glBindVertexArrayAPPLE fp_glBindVertexArrayAPPLE;
+pfn_glDeleteVertexArraysAPPLE fp_glDeleteVertexArraysAPPLE;
+pfn_glGenVertexArraysAPPLE fp_glGenVertexArraysAPPLE;
+pfn_glIsVertexArrayAPPLE fp_glIsVertexArrayAPPLE;
+pfn_glVertexArrayRangeAPPLE fp_glVertexArrayRangeAPPLE;
+pfn_glFlushVertexArrayRangeAPPLE fp_glFlushVertexArrayRangeAPPLE;
+pfn_glVertexArrayParameteriAPPLE fp_glVertexArrayParameteriAPPLE;
+pfn_glEnableVertexAttribAPPLE fp_glEnableVertexAttribAPPLE;
+pfn_glDisableVertexAttribAPPLE fp_glDisableVertexAttribAPPLE;
+pfn_glIsVertexAttribEnabledAPPLE fp_glIsVertexAttribEnabledAPPLE;
+pfn_glMapVertexAttrib1dAPPLE fp_glMapVertexAttrib1dAPPLE;
+pfn_glMapVertexAttrib1fAPPLE fp_glMapVertexAttrib1fAPPLE;
+pfn_glMapVertexAttrib2dAPPLE fp_glMapVertexAttrib2dAPPLE;
+pfn_glMapVertexAttrib2fAPPLE fp_glMapVertexAttrib2fAPPLE;
+pfn_glFrameTerminatorGREMEDY fp_glFrameTerminatorGREMEDY;
+pfn_glStringMarkerGREMEDY fp_glStringMarkerGREMEDY;
+pfn_glRenderbufferStorageMultisampleIMG fp_glRenderbufferStorageMultisampleIMG;
+pfn_glFramebufferTexture2DMultisampleIMG fp_glFramebufferTexture2DMultisampleIMG;
+pfn_glBlendFuncSeparateINGR fp_glBlendFuncSeparateINGR;
+pfn_glSyncTextureINTEL fp_glSyncTextureINTEL;
+pfn_glUnmapTexture2DINTEL fp_glUnmapTexture2DINTEL;
+pfn_glMapTexture2DINTEL fp_glMapTexture2DINTEL;
+pfn_glBeginPerfQueryINTEL fp_glBeginPerfQueryINTEL;
+pfn_glCreatePerfQueryINTEL fp_glCreatePerfQueryINTEL;
+pfn_glDeletePerfQueryINTEL fp_glDeletePerfQueryINTEL;
+pfn_glEndPerfQueryINTEL fp_glEndPerfQueryINTEL;
+pfn_glGetFirstPerfQueryIdINTEL fp_glGetFirstPerfQueryIdINTEL;
+pfn_glGetNextPerfQueryIdINTEL fp_glGetNextPerfQueryIdINTEL;
+pfn_glGetPerfCounterInfoINTEL fp_glGetPerfCounterInfoINTEL;
+pfn_glGetPerfQueryDataINTEL fp_glGetPerfQueryDataINTEL;
+pfn_glGetPerfQueryIdByNameINTEL fp_glGetPerfQueryIdByNameINTEL;
+pfn_glGetPerfQueryInfoINTEL fp_glGetPerfQueryInfoINTEL;
+pfn_glMultiDrawArraysIndirectBindlessNV fp_glMultiDrawArraysIndirectBindlessNV;
+pfn_glMultiDrawElementsIndirectBindlessNV fp_glMultiDrawElementsIndirectBindlessNV;
+pfn_glMultiDrawArraysIndirectBindlessCountNV fp_glMultiDrawArraysIndirectBindlessCountNV;
+pfn_glMultiDrawElementsIndirectBindlessCountNV fp_glMultiDrawElementsIndirectBindlessCountNV;
+pfn_glGetTextureHandleNV fp_glGetTextureHandleNV;
+pfn_glGetTextureSamplerHandleNV fp_glGetTextureSamplerHandleNV;
+pfn_glMakeTextureHandleResidentNV fp_glMakeTextureHandleResidentNV;
+pfn_glMakeTextureHandleNonResidentNV fp_glMakeTextureHandleNonResidentNV;
+pfn_glGetImageHandleNV fp_glGetImageHandleNV;
+pfn_glMakeImageHandleResidentNV fp_glMakeImageHandleResidentNV;
+pfn_glMakeImageHandleNonResidentNV fp_glMakeImageHandleNonResidentNV;
+pfn_glUniformHandleui64NV fp_glUniformHandleui64NV;
+pfn_glUniformHandleui64vNV fp_glUniformHandleui64vNV;
+pfn_glProgramUniformHandleui64NV fp_glProgramUniformHandleui64NV;
+pfn_glProgramUniformHandleui64vNV fp_glProgramUniformHandleui64vNV;
+pfn_glIsTextureHandleResidentNV fp_glIsTextureHandleResidentNV;
+pfn_glIsImageHandleResidentNV fp_glIsImageHandleResidentNV;
+pfn_glBlendParameteriNV fp_glBlendParameteriNV;
+pfn_glBlendBarrierNV fp_glBlendBarrierNV;
+pfn_glBeginConditionalRenderNV fp_glBeginConditionalRenderNV;
+pfn_glEndConditionalRenderNV fp_glEndConditionalRenderNV;
+pfn_glCopyBufferSubDataNV fp_glCopyBufferSubDataNV;
+pfn_glCopyImageSubDataNV fp_glCopyImageSubDataNV;
+pfn_glCoverageMaskNV fp_glCoverageMaskNV;
+pfn_glCoverageOperationNV fp_glCoverageOperationNV;
+pfn_glDepthRangedNV fp_glDepthRangedNV;
+pfn_glClearDepthdNV fp_glClearDepthdNV;
+pfn_glDepthBoundsdNV fp_glDepthBoundsdNV;
+pfn_glDrawBuffersNV fp_glDrawBuffersNV;
+pfn_glDrawArraysInstancedNV fp_glDrawArraysInstancedNV;
+pfn_glDrawElementsInstancedNV fp_glDrawElementsInstancedNV;
+pfn_glDrawTextureNV fp_glDrawTextureNV;
+pfn_glGetMultisamplefvNV fp_glGetMultisamplefvNV;
+pfn_glSampleMaskIndexedNV fp_glSampleMaskIndexedNV;
+pfn_glTexRenderbufferNV fp_glTexRenderbufferNV;
+pfn_glDeleteFencesNV fp_glDeleteFencesNV;
+pfn_glGenFencesNV fp_glGenFencesNV;
+pfn_glIsFenceNV fp_glIsFenceNV;
+pfn_glTestFenceNV fp_glTestFenceNV;
+pfn_glGetFenceivNV fp_glGetFenceivNV;
+pfn_glFinishFenceNV fp_glFinishFenceNV;
+pfn_glSetFenceNV fp_glSetFenceNV;
+pfn_glBlitFramebufferNV fp_glBlitFramebufferNV;
+pfn_glRenderbufferStorageMultisampleNV fp_glRenderbufferStorageMultisampleNV;
+pfn_glRenderbufferStorageMultisampleCoverageNV fp_glRenderbufferStorageMultisampleCoverageNV;
+pfn_glProgramVertexLimitNV fp_glProgramVertexLimitNV;
+pfn_glFramebufferTextureFaceEXT fp_glFramebufferTextureFaceEXT;
+pfn_glProgramLocalParameterI4iNV fp_glProgramLocalParameterI4iNV;
+pfn_glProgramLocalParameterI4ivNV fp_glProgramLocalParameterI4ivNV;
+pfn_glProgramLocalParametersI4ivNV fp_glProgramLocalParametersI4ivNV;
+pfn_glProgramLocalParameterI4uiNV fp_glProgramLocalParameterI4uiNV;
+pfn_glProgramLocalParameterI4uivNV fp_glProgramLocalParameterI4uivNV;
+pfn_glProgramLocalParametersI4uivNV fp_glProgramLocalParametersI4uivNV;
+pfn_glProgramEnvParameterI4iNV fp_glProgramEnvParameterI4iNV;
+pfn_glProgramEnvParameterI4ivNV fp_glProgramEnvParameterI4ivNV;
+pfn_glProgramEnvParametersI4ivNV fp_glProgramEnvParametersI4ivNV;
+pfn_glProgramEnvParameterI4uiNV fp_glProgramEnvParameterI4uiNV;
+pfn_glProgramEnvParameterI4uivNV fp_glProgramEnvParameterI4uivNV;
+pfn_glProgramEnvParametersI4uivNV fp_glProgramEnvParametersI4uivNV;
+pfn_glGetProgramLocalParameterIivNV fp_glGetProgramLocalParameterIivNV;
+pfn_glGetProgramLocalParameterIuivNV fp_glGetProgramLocalParameterIuivNV;
+pfn_glGetProgramEnvParameterIivNV fp_glGetProgramEnvParameterIivNV;
+pfn_glGetProgramEnvParameterIuivNV fp_glGetProgramEnvParameterIuivNV;
+pfn_glProgramSubroutineParametersuivNV fp_glProgramSubroutineParametersuivNV;
+pfn_glGetProgramSubroutineParameteruivNV fp_glGetProgramSubroutineParameteruivNV;
+pfn_glVertex2hNV fp_glVertex2hNV;
+pfn_glVertex2hvNV fp_glVertex2hvNV;
+pfn_glVertex3hNV fp_glVertex3hNV;
+pfn_glVertex3hvNV fp_glVertex3hvNV;
+pfn_glVertex4hNV fp_glVertex4hNV;
+pfn_glVertex4hvNV fp_glVertex4hvNV;
+pfn_glNormal3hNV fp_glNormal3hNV;
+pfn_glNormal3hvNV fp_glNormal3hvNV;
+pfn_glColor3hNV fp_glColor3hNV;
+pfn_glColor3hvNV fp_glColor3hvNV;
+pfn_glColor4hNV fp_glColor4hNV;
+pfn_glColor4hvNV fp_glColor4hvNV;
+pfn_glTexCoord1hNV fp_glTexCoord1hNV;
+pfn_glTexCoord1hvNV fp_glTexCoord1hvNV;
+pfn_glTexCoord2hNV fp_glTexCoord2hNV;
+pfn_glTexCoord2hvNV fp_glTexCoord2hvNV;
+pfn_glTexCoord3hNV fp_glTexCoord3hNV;
+pfn_glTexCoord3hvNV fp_glTexCoord3hvNV;
+pfn_glTexCoord4hNV fp_glTexCoord4hNV;
+pfn_glTexCoord4hvNV fp_glTexCoord4hvNV;
+pfn_glMultiTexCoord1hNV fp_glMultiTexCoord1hNV;
+pfn_glMultiTexCoord1hvNV fp_glMultiTexCoord1hvNV;
+pfn_glMultiTexCoord2hNV fp_glMultiTexCoord2hNV;
+pfn_glMultiTexCoord2hvNV fp_glMultiTexCoord2hvNV;
+pfn_glMultiTexCoord3hNV fp_glMultiTexCoord3hNV;
+pfn_glMultiTexCoord3hvNV fp_glMultiTexCoord3hvNV;
+pfn_glMultiTexCoord4hNV fp_glMultiTexCoord4hNV;
+pfn_glMultiTexCoord4hvNV fp_glMultiTexCoord4hvNV;
+pfn_glFogCoordhNV fp_glFogCoordhNV;
+pfn_glFogCoordhvNV fp_glFogCoordhvNV;
+pfn_glSecondaryColor3hNV fp_glSecondaryColor3hNV;
+pfn_glSecondaryColor3hvNV fp_glSecondaryColor3hvNV;
+pfn_glVertexWeighthNV fp_glVertexWeighthNV;
+pfn_glVertexWeighthvNV fp_glVertexWeighthvNV;
+pfn_glVertexAttrib1hNV fp_glVertexAttrib1hNV;
+pfn_glVertexAttrib1hvNV fp_glVertexAttrib1hvNV;
+pfn_glVertexAttrib2hNV fp_glVertexAttrib2hNV;
+pfn_glVertexAttrib2hvNV fp_glVertexAttrib2hvNV;
+pfn_glVertexAttrib3hNV fp_glVertexAttrib3hNV;
+pfn_glVertexAttrib3hvNV fp_glVertexAttrib3hvNV;
+pfn_glVertexAttrib4hNV fp_glVertexAttrib4hNV;
+pfn_glVertexAttrib4hvNV fp_glVertexAttrib4hvNV;
+pfn_glVertexAttribs1hvNV fp_glVertexAttribs1hvNV;
+pfn_glVertexAttribs2hvNV fp_glVertexAttribs2hvNV;
+pfn_glVertexAttribs3hvNV fp_glVertexAttribs3hvNV;
+pfn_glVertexAttribs4hvNV fp_glVertexAttribs4hvNV;
+pfn_glVertexAttribDivisorNV fp_glVertexAttribDivisorNV;
+pfn_glUniformMatrix2x3fvNV fp_glUniformMatrix2x3fvNV;
+pfn_glUniformMatrix3x2fvNV fp_glUniformMatrix3x2fvNV;
+pfn_glUniformMatrix2x4fvNV fp_glUniformMatrix2x4fvNV;
+pfn_glUniformMatrix4x2fvNV fp_glUniformMatrix4x2fvNV;
+pfn_glUniformMatrix3x4fvNV fp_glUniformMatrix3x4fvNV;
+pfn_glUniformMatrix4x3fvNV fp_glUniformMatrix4x3fvNV;
+pfn_glGenOcclusionQueriesNV fp_glGenOcclusionQueriesNV;
+pfn_glDeleteOcclusionQueriesNV fp_glDeleteOcclusionQueriesNV;
+pfn_glIsOcclusionQueryNV fp_glIsOcclusionQueryNV;
+pfn_glBeginOcclusionQueryNV fp_glBeginOcclusionQueryNV;
+pfn_glEndOcclusionQueryNV fp_glEndOcclusionQueryNV;
+pfn_glGetOcclusionQueryivNV fp_glGetOcclusionQueryivNV;
+pfn_glGetOcclusionQueryuivNV fp_glGetOcclusionQueryuivNV;
+pfn_glProgramBufferParametersfvNV fp_glProgramBufferParametersfvNV;
+pfn_glProgramBufferParametersIivNV fp_glProgramBufferParametersIivNV;
+pfn_glProgramBufferParametersIuivNV fp_glProgramBufferParametersIuivNV;
+pfn_glGenPathsNV fp_glGenPathsNV;
+pfn_glDeletePathsNV fp_glDeletePathsNV;
+pfn_glIsPathNV fp_glIsPathNV;
+pfn_glPathCommandsNV fp_glPathCommandsNV;
+pfn_glPathCoordsNV fp_glPathCoordsNV;
+pfn_glPathSubCommandsNV fp_glPathSubCommandsNV;
+pfn_glPathSubCoordsNV fp_glPathSubCoordsNV;
+pfn_glPathStringNV fp_glPathStringNV;
+pfn_glPathGlyphsNV fp_glPathGlyphsNV;
+pfn_glPathGlyphRangeNV fp_glPathGlyphRangeNV;
+pfn_glWeightPathsNV fp_glWeightPathsNV;
+pfn_glCopyPathNV fp_glCopyPathNV;
+pfn_glInterpolatePathsNV fp_glInterpolatePathsNV;
+pfn_glTransformPathNV fp_glTransformPathNV;
+pfn_glPathParameterivNV fp_glPathParameterivNV;
+pfn_glPathParameteriNV fp_glPathParameteriNV;
+pfn_glPathParameterfvNV fp_glPathParameterfvNV;
+pfn_glPathParameterfNV fp_glPathParameterfNV;
+pfn_glPathDashArrayNV fp_glPathDashArrayNV;
+pfn_glPathStencilFuncNV fp_glPathStencilFuncNV;
+pfn_glPathStencilDepthOffsetNV fp_glPathStencilDepthOffsetNV;
+pfn_glStencilFillPathNV fp_glStencilFillPathNV;
+pfn_glStencilStrokePathNV fp_glStencilStrokePathNV;
+pfn_glStencilFillPathInstancedNV fp_glStencilFillPathInstancedNV;
+pfn_glStencilStrokePathInstancedNV fp_glStencilStrokePathInstancedNV;
+pfn_glPathCoverDepthFuncNV fp_glPathCoverDepthFuncNV;
+pfn_glPathColorGenNV fp_glPathColorGenNV;
+pfn_glPathTexGenNV fp_glPathTexGenNV;
+pfn_glPathFogGenNV fp_glPathFogGenNV;
+pfn_glCoverFillPathNV fp_glCoverFillPathNV;
+pfn_glCoverStrokePathNV fp_glCoverStrokePathNV;
+pfn_glCoverFillPathInstancedNV fp_glCoverFillPathInstancedNV;
+pfn_glCoverStrokePathInstancedNV fp_glCoverStrokePathInstancedNV;
+pfn_glGetPathParameterivNV fp_glGetPathParameterivNV;
+pfn_glGetPathParameterfvNV fp_glGetPathParameterfvNV;
+pfn_glGetPathCommandsNV fp_glGetPathCommandsNV;
+pfn_glGetPathCoordsNV fp_glGetPathCoordsNV;
+pfn_glGetPathDashArrayNV fp_glGetPathDashArrayNV;
+pfn_glGetPathMetricsNV fp_glGetPathMetricsNV;
+pfn_glGetPathMetricRangeNV fp_glGetPathMetricRangeNV;
+pfn_glGetPathSpacingNV fp_glGetPathSpacingNV;
+pfn_glGetPathColorGenivNV fp_glGetPathColorGenivNV;
+pfn_glGetPathColorGenfvNV fp_glGetPathColorGenfvNV;
+pfn_glGetPathTexGenivNV fp_glGetPathTexGenivNV;
+pfn_glGetPathTexGenfvNV fp_glGetPathTexGenfvNV;
+pfn_glIsPointInFillPathNV fp_glIsPointInFillPathNV;
+pfn_glIsPointInStrokePathNV fp_glIsPointInStrokePathNV;
+pfn_glGetPathLengthNV fp_glGetPathLengthNV;
+pfn_glPointAlongPathNV fp_glPointAlongPathNV;
+pfn_glMatrixLoad3x2fNV fp_glMatrixLoad3x2fNV;
+pfn_glMatrixLoad3x3fNV fp_glMatrixLoad3x3fNV;
+pfn_glMatrixLoadTranspose3x3fNV fp_glMatrixLoadTranspose3x3fNV;
+pfn_glMatrixMult3x2fNV fp_glMatrixMult3x2fNV;
+pfn_glMatrixMult3x3fNV fp_glMatrixMult3x3fNV;
+pfn_glMatrixMultTranspose3x3fNV fp_glMatrixMultTranspose3x3fNV;
+pfn_glStencilThenCoverFillPathNV fp_glStencilThenCoverFillPathNV;
+pfn_glStencilThenCoverStrokePathNV fp_glStencilThenCoverStrokePathNV;
+pfn_glStencilThenCoverFillPathInstancedNV fp_glStencilThenCoverFillPathInstancedNV;
+pfn_glStencilThenCoverStrokePathInstancedNV fp_glStencilThenCoverStrokePathInstancedNV;
+pfn_glPathGlyphIndexRangeNV fp_glPathGlyphIndexRangeNV;
+pfn_glPathGlyphIndexArrayNV fp_glPathGlyphIndexArrayNV;
+pfn_glPathMemoryGlyphIndexArrayNV fp_glPathMemoryGlyphIndexArrayNV;
+pfn_glProgramPathFragmentInputGenNV fp_glProgramPathFragmentInputGenNV;
+pfn_glGetProgramResourcefvNV fp_glGetProgramResourcefvNV;
+pfn_glPresentFrameKeyedNV fp_glPresentFrameKeyedNV;
+pfn_glPresentFrameDualFillNV fp_glPresentFrameDualFillNV;
+pfn_glGetVideoivNV fp_glGetVideoivNV;
+pfn_glGetVideouivNV fp_glGetVideouivNV;
+pfn_glGetVideoi64vNV fp_glGetVideoi64vNV;
+pfn_glGetVideoui64vNV fp_glGetVideoui64vNV;
+pfn_glPrimitiveRestartNV fp_glPrimitiveRestartNV;
+pfn_glPrimitiveRestartIndexNV fp_glPrimitiveRestartIndexNV;
+pfn_glReadBufferNV fp_glReadBufferNV;
+pfn_glMakeBufferResidentNV fp_glMakeBufferResidentNV;
+pfn_glMakeBufferNonResidentNV fp_glMakeBufferNonResidentNV;
+pfn_glIsBufferResidentNV fp_glIsBufferResidentNV;
+pfn_glMakeNamedBufferResidentNV fp_glMakeNamedBufferResidentNV;
+pfn_glMakeNamedBufferNonResidentNV fp_glMakeNamedBufferNonResidentNV;
+pfn_glIsNamedBufferResidentNV fp_glIsNamedBufferResidentNV;
+pfn_glGetBufferParameterui64vNV fp_glGetBufferParameterui64vNV;
+pfn_glGetNamedBufferParameterui64vNV fp_glGetNamedBufferParameterui64vNV;
+pfn_glGetIntegerui64vNV fp_glGetIntegerui64vNV;
+pfn_glUniformui64NV fp_glUniformui64NV;
+pfn_glUniformui64vNV fp_glUniformui64vNV;
+pfn_glProgramUniformui64NV fp_glProgramUniformui64NV;
+pfn_glProgramUniformui64vNV fp_glProgramUniformui64vNV;
+pfn_glTextureBarrierNV fp_glTextureBarrierNV;
+pfn_glTexImage2DMultisampleCoverageNV fp_glTexImage2DMultisampleCoverageNV;
+pfn_glTexImage3DMultisampleCoverageNV fp_glTexImage3DMultisampleCoverageNV;
+pfn_glTextureImage2DMultisampleNV fp_glTextureImage2DMultisampleNV;
+pfn_glTextureImage3DMultisampleNV fp_glTextureImage3DMultisampleNV;
+pfn_glTextureImage2DMultisampleCoverageNV fp_glTextureImage2DMultisampleCoverageNV;
+pfn_glTextureImage3DMultisampleCoverageNV fp_glTextureImage3DMultisampleCoverageNV;
+pfn_glBeginTransformFeedbackNV fp_glBeginTransformFeedbackNV;
+pfn_glEndTransformFeedbackNV fp_glEndTransformFeedbackNV;
+pfn_glTransformFeedbackAttribsNV fp_glTransformFeedbackAttribsNV;
+pfn_glBindBufferRangeNV fp_glBindBufferRangeNV;
+pfn_glBindBufferOffsetNV fp_glBindBufferOffsetNV;
+pfn_glBindBufferBaseNV fp_glBindBufferBaseNV;
+pfn_glTransformFeedbackVaryingsNV fp_glTransformFeedbackVaryingsNV;
+pfn_glActiveVaryingNV fp_glActiveVaryingNV;
+pfn_glGetVaryingLocationNV fp_glGetVaryingLocationNV;
+pfn_glGetActiveVaryingNV fp_glGetActiveVaryingNV;
+pfn_glGetTransformFeedbackVaryingNV fp_glGetTransformFeedbackVaryingNV;
+pfn_glTransformFeedbackStreamAttribsNV fp_glTransformFeedbackStreamAttribsNV;
+pfn_glBindTransformFeedbackNV fp_glBindTransformFeedbackNV;
+pfn_glDeleteTransformFeedbacksNV fp_glDeleteTransformFeedbacksNV;
+pfn_glGenTransformFeedbacksNV fp_glGenTransformFeedbacksNV;
+pfn_glIsTransformFeedbackNV fp_glIsTransformFeedbackNV;
+pfn_glPauseTransformFeedbackNV fp_glPauseTransformFeedbackNV;
+pfn_glResumeTransformFeedbackNV fp_glResumeTransformFeedbackNV;
+pfn_glDrawTransformFeedbackNV fp_glDrawTransformFeedbackNV;
+pfn_glVDPAUInitNV fp_glVDPAUInitNV;
+pfn_glVDPAUFiniNV fp_glVDPAUFiniNV;
+pfn_glVDPAURegisterVideoSurfaceNV fp_glVDPAURegisterVideoSurfaceNV;
+pfn_glVDPAURegisterOutputSurfaceNV fp_glVDPAURegisterOutputSurfaceNV;
+pfn_glVDPAUIsSurfaceNV fp_glVDPAUIsSurfaceNV;
+pfn_glVDPAUUnregisterSurfaceNV fp_glVDPAUUnregisterSurfaceNV;
+pfn_glVDPAUGetSurfaceivNV fp_glVDPAUGetSurfaceivNV;
+pfn_glVDPAUSurfaceAccessNV fp_glVDPAUSurfaceAccessNV;
+pfn_glVDPAUMapSurfacesNV fp_glVDPAUMapSurfacesNV;
+pfn_glVDPAUUnmapSurfacesNV fp_glVDPAUUnmapSurfacesNV;
+pfn_glVertexAttribL1i64NV fp_glVertexAttribL1i64NV;
+pfn_glVertexAttribL2i64NV fp_glVertexAttribL2i64NV;
+pfn_glVertexAttribL3i64NV fp_glVertexAttribL3i64NV;
+pfn_glVertexAttribL4i64NV fp_glVertexAttribL4i64NV;
+pfn_glVertexAttribL1i64vNV fp_glVertexAttribL1i64vNV;
+pfn_glVertexAttribL2i64vNV fp_glVertexAttribL2i64vNV;
+pfn_glVertexAttribL3i64vNV fp_glVertexAttribL3i64vNV;
+pfn_glVertexAttribL4i64vNV fp_glVertexAttribL4i64vNV;
+pfn_glVertexAttribL1ui64NV fp_glVertexAttribL1ui64NV;
+pfn_glVertexAttribL2ui64NV fp_glVertexAttribL2ui64NV;
+pfn_glVertexAttribL3ui64NV fp_glVertexAttribL3ui64NV;
+pfn_glVertexAttribL4ui64NV fp_glVertexAttribL4ui64NV;
+pfn_glVertexAttribL1ui64vNV fp_glVertexAttribL1ui64vNV;
+pfn_glVertexAttribL2ui64vNV fp_glVertexAttribL2ui64vNV;
+pfn_glVertexAttribL3ui64vNV fp_glVertexAttribL3ui64vNV;
+pfn_glVertexAttribL4ui64vNV fp_glVertexAttribL4ui64vNV;
+pfn_glGetVertexAttribLi64vNV fp_glGetVertexAttribLi64vNV;
+pfn_glGetVertexAttribLui64vNV fp_glGetVertexAttribLui64vNV;
+pfn_glVertexAttribLFormatNV fp_glVertexAttribLFormatNV;
+pfn_glBufferAddressRangeNV fp_glBufferAddressRangeNV;
+pfn_glVertexFormatNV fp_glVertexFormatNV;
+pfn_glNormalFormatNV fp_glNormalFormatNV;
+pfn_glColorFormatNV fp_glColorFormatNV;
+pfn_glIndexFormatNV fp_glIndexFormatNV;
+pfn_glTexCoordFormatNV fp_glTexCoordFormatNV;
+pfn_glEdgeFlagFormatNV fp_glEdgeFlagFormatNV;
+pfn_glSecondaryColorFormatNV fp_glSecondaryColorFormatNV;
+pfn_glFogCoordFormatNV fp_glFogCoordFormatNV;
+pfn_glVertexAttribFormatNV fp_glVertexAttribFormatNV;
+pfn_glVertexAttribIFormatNV fp_glVertexAttribIFormatNV;
+pfn_glGetIntegerui64i_vNV fp_glGetIntegerui64i_vNV;
+pfn_glVertexAttribI1iEXT fp_glVertexAttribI1iEXT;
+pfn_glVertexAttribI2iEXT fp_glVertexAttribI2iEXT;
+pfn_glVertexAttribI3iEXT fp_glVertexAttribI3iEXT;
+pfn_glVertexAttribI4iEXT fp_glVertexAttribI4iEXT;
+pfn_glVertexAttribI1uiEXT fp_glVertexAttribI1uiEXT;
+pfn_glVertexAttribI2uiEXT fp_glVertexAttribI2uiEXT;
+pfn_glVertexAttribI3uiEXT fp_glVertexAttribI3uiEXT;
+pfn_glVertexAttribI4uiEXT fp_glVertexAttribI4uiEXT;
+pfn_glVertexAttribI1ivEXT fp_glVertexAttribI1ivEXT;
+pfn_glVertexAttribI2ivEXT fp_glVertexAttribI2ivEXT;
+pfn_glVertexAttribI3ivEXT fp_glVertexAttribI3ivEXT;
+pfn_glVertexAttribI4ivEXT fp_glVertexAttribI4ivEXT;
+pfn_glVertexAttribI1uivEXT fp_glVertexAttribI1uivEXT;
+pfn_glVertexAttribI2uivEXT fp_glVertexAttribI2uivEXT;
+pfn_glVertexAttribI3uivEXT fp_glVertexAttribI3uivEXT;
+pfn_glVertexAttribI4uivEXT fp_glVertexAttribI4uivEXT;
+pfn_glVertexAttribI4bvEXT fp_glVertexAttribI4bvEXT;
+pfn_glVertexAttribI4svEXT fp_glVertexAttribI4svEXT;
+pfn_glVertexAttribI4ubvEXT fp_glVertexAttribI4ubvEXT;
+pfn_glVertexAttribI4usvEXT fp_glVertexAttribI4usvEXT;
+pfn_glVertexAttribIPointerEXT fp_glVertexAttribIPointerEXT;
+pfn_glGetVertexAttribIivEXT fp_glGetVertexAttribIivEXT;
+pfn_glGetVertexAttribIuivEXT fp_glGetVertexAttribIuivEXT;
+pfn_glBeginVideoCaptureNV fp_glBeginVideoCaptureNV;
+pfn_glBindVideoCaptureStreamBufferNV fp_glBindVideoCaptureStreamBufferNV;
+pfn_glBindVideoCaptureStreamTextureNV fp_glBindVideoCaptureStreamTextureNV;
+pfn_glEndVideoCaptureNV fp_glEndVideoCaptureNV;
+pfn_glGetVideoCaptureivNV fp_glGetVideoCaptureivNV;
+pfn_glGetVideoCaptureStreamivNV fp_glGetVideoCaptureStreamivNV;
+pfn_glGetVideoCaptureStreamfvNV fp_glGetVideoCaptureStreamfvNV;
+pfn_glGetVideoCaptureStreamdvNV fp_glGetVideoCaptureStreamdvNV;
+pfn_glVideoCaptureNV fp_glVideoCaptureNV;
+pfn_glVideoCaptureStreamParameterivNV fp_glVideoCaptureStreamParameterivNV;
+pfn_glVideoCaptureStreamParameterfvNV fp_glVideoCaptureStreamParameterfvNV;
+pfn_glVideoCaptureStreamParameterdvNV fp_glVideoCaptureStreamParameterdvNV;
+pfn_glBeginConditionalRenderNVX fp_glBeginConditionalRenderNVX;
+pfn_glEndConditionalRenderNVX fp_glEndConditionalRenderNVX;
+pfn_glAlphaFuncQCOM fp_glAlphaFuncQCOM;
+pfn_glGetDriverControlsQCOM fp_glGetDriverControlsQCOM;
+pfn_glGetDriverControlStringQCOM fp_glGetDriverControlStringQCOM;
+pfn_glEnableDriverControlQCOM fp_glEnableDriverControlQCOM;
+pfn_glDisableDriverControlQCOM fp_glDisableDriverControlQCOM;
+pfn_glExtGetTexturesQCOM fp_glExtGetTexturesQCOM;
+pfn_glExtGetBuffersQCOM fp_glExtGetBuffersQCOM;
+pfn_glExtGetRenderbuffersQCOM fp_glExtGetRenderbuffersQCOM;
+pfn_glExtGetFramebuffersQCOM fp_glExtGetFramebuffersQCOM;
+pfn_glExtGetTexLevelParameterivQCOM fp_glExtGetTexLevelParameterivQCOM;
+pfn_glExtTexObjectStateOverrideiQCOM fp_glExtTexObjectStateOverrideiQCOM;
+pfn_glExtGetTexSubImageQCOM fp_glExtGetTexSubImageQCOM;
+pfn_glExtGetBufferPointervQCOM fp_glExtGetBufferPointervQCOM;
+pfn_glExtGetShadersQCOM fp_glExtGetShadersQCOM;
+pfn_glExtGetProgramsQCOM fp_glExtGetProgramsQCOM;
+pfn_glExtIsProgramBinaryQCOM fp_glExtIsProgramBinaryQCOM;
+pfn_glExtGetProgramBinarySourceQCOM fp_glExtGetProgramBinarySourceQCOM;
+pfn_glStartTilingQCOM fp_glStartTilingQCOM;
+pfn_glEndTilingQCOM fp_glEndTilingQCOM;
+
+GLboolean GLAD_VERSION_1_0 = GL_FALSE;
+static void load_GL_VERSION_1_0(LOADER load) {
+	if(!GLAD_VERSION_1_0) return;
+	fp_glCullFace = (pfn_glCullFace)load("glCullFace");
+	fp_glFrontFace = (pfn_glFrontFace)load("glFrontFace");
+	fp_glHint = (pfn_glHint)load("glHint");
+	fp_glLineWidth = (pfn_glLineWidth)load("glLineWidth");
+	fp_glPointSize = (pfn_glPointSize)load("glPointSize");
+	fp_glPolygonMode = (pfn_glPolygonMode)load("glPolygonMode");
+	fp_glScissor = (pfn_glScissor)load("glScissor");
+	fp_glTexParameterf = (pfn_glTexParameterf)load("glTexParameterf");
+	fp_glTexParameterfv = (pfn_glTexParameterfv)load("glTexParameterfv");
+	fp_glTexParameteri = (pfn_glTexParameteri)load("glTexParameteri");
+	fp_glTexParameteriv = (pfn_glTexParameteriv)load("glTexParameteriv");
+	fp_glTexImage1D = (pfn_glTexImage1D)load("glTexImage1D");
+	fp_glTexImage2D = (pfn_glTexImage2D)load("glTexImage2D");
+	fp_glDrawBuffer = (pfn_glDrawBuffer)load("glDrawBuffer");
+	fp_glClear = (pfn_glClear)load("glClear");
+	fp_glClearColor = (pfn_glClearColor)load("glClearColor");
+	fp_glClearStencil = (pfn_glClearStencil)load("glClearStencil");
+	fp_glClearDepth = (pfn_glClearDepth)load("glClearDepth");
+	fp_glStencilMask = (pfn_glStencilMask)load("glStencilMask");
+	fp_glColorMask = (pfn_glColorMask)load("glColorMask");
+	fp_glDepthMask = (pfn_glDepthMask)load("glDepthMask");
+	fp_glDisable = (pfn_glDisable)load("glDisable");
+	fp_glEnable = (pfn_glEnable)load("glEnable");
+	fp_glFinish = (pfn_glFinish)load("glFinish");
+	fp_glFlush = (pfn_glFlush)load("glFlush");
+	fp_glBlendFunc = (pfn_glBlendFunc)load("glBlendFunc");
+	fp_glLogicOp = (pfn_glLogicOp)load("glLogicOp");
+	fp_glStencilFunc = (pfn_glStencilFunc)load("glStencilFunc");
+	fp_glStencilOp = (pfn_glStencilOp)load("glStencilOp");
+	fp_glDepthFunc = (pfn_glDepthFunc)load("glDepthFunc");
+	fp_glPixelStoref = (pfn_glPixelStoref)load("glPixelStoref");
+	fp_glPixelStorei = (pfn_glPixelStorei)load("glPixelStorei");
+	fp_glReadBuffer = (pfn_glReadBuffer)load("glReadBuffer");
+	fp_glReadPixels = (pfn_glReadPixels)load("glReadPixels");
+	fp_glGetBooleanv = (pfn_glGetBooleanv)load("glGetBooleanv");
+	fp_glGetDoublev = (pfn_glGetDoublev)load("glGetDoublev");
+	fp_glGetError = (pfn_glGetError)load("glGetError");
+	fp_glGetFloatv = (pfn_glGetFloatv)load("glGetFloatv");
+	fp_glGetIntegerv = (pfn_glGetIntegerv)load("glGetIntegerv");
+	fp_glGetString = (pfn_glGetString)load("glGetString");
+	fp_glGetTexImage = (pfn_glGetTexImage)load("glGetTexImage");
+	fp_glGetTexParameterfv = (pfn_glGetTexParameterfv)load("glGetTexParameterfv");
+	fp_glGetTexParameteriv = (pfn_glGetTexParameteriv)load("glGetTexParameteriv");
+	fp_glGetTexLevelParameterfv = (pfn_glGetTexLevelParameterfv)load("glGetTexLevelParameterfv");
+	fp_glGetTexLevelParameteriv = (pfn_glGetTexLevelParameteriv)load("glGetTexLevelParameteriv");
+	fp_glIsEnabled = (pfn_glIsEnabled)load("glIsEnabled");
+	fp_glDepthRange = (pfn_glDepthRange)load("glDepthRange");
+	fp_glViewport = (pfn_glViewport)load("glViewport");
+	fp_glNewList = (pfn_glNewList)load("glNewList");
+	fp_glEndList = (pfn_glEndList)load("glEndList");
+	fp_glCallList = (pfn_glCallList)load("glCallList");
+	fp_glCallLists = (pfn_glCallLists)load("glCallLists");
+	fp_glDeleteLists = (pfn_glDeleteLists)load("glDeleteLists");
+	fp_glGenLists = (pfn_glGenLists)load("glGenLists");
+	fp_glListBase = (pfn_glListBase)load("glListBase");
+	fp_glBegin = (pfn_glBegin)load("glBegin");
+	fp_glBitmap = (pfn_glBitmap)load("glBitmap");
+	fp_glColor3b = (pfn_glColor3b)load("glColor3b");
+	fp_glColor3bv = (pfn_glColor3bv)load("glColor3bv");
+	fp_glColor3d = (pfn_glColor3d)load("glColor3d");
+	fp_glColor3dv = (pfn_glColor3dv)load("glColor3dv");
+	fp_glColor3f = (pfn_glColor3f)load("glColor3f");
+	fp_glColor3fv = (pfn_glColor3fv)load("glColor3fv");
+	fp_glColor3i = (pfn_glColor3i)load("glColor3i");
+	fp_glColor3iv = (pfn_glColor3iv)load("glColor3iv");
+	fp_glColor3s = (pfn_glColor3s)load("glColor3s");
+	fp_glColor3sv = (pfn_glColor3sv)load("glColor3sv");
+	fp_glColor3ub = (pfn_glColor3ub)load("glColor3ub");
+	fp_glColor3ubv = (pfn_glColor3ubv)load("glColor3ubv");
+	fp_glColor3ui = (pfn_glColor3ui)load("glColor3ui");
+	fp_glColor3uiv = (pfn_glColor3uiv)load("glColor3uiv");
+	fp_glColor3us = (pfn_glColor3us)load("glColor3us");
+	fp_glColor3usv = (pfn_glColor3usv)load("glColor3usv");
+	fp_glColor4b = (pfn_glColor4b)load("glColor4b");
+	fp_glColor4bv = (pfn_glColor4bv)load("glColor4bv");
+	fp_glColor4d = (pfn_glColor4d)load("glColor4d");
+	fp_glColor4dv = (pfn_glColor4dv)load("glColor4dv");
+	fp_glColor4f = (pfn_glColor4f)load("glColor4f");
+	fp_glColor4fv = (pfn_glColor4fv)load("glColor4fv");
+	fp_glColor4i = (pfn_glColor4i)load("glColor4i");
+	fp_glColor4iv = (pfn_glColor4iv)load("glColor4iv");
+	fp_glColor4s = (pfn_glColor4s)load("glColor4s");
+	fp_glColor4sv = (pfn_glColor4sv)load("glColor4sv");
+	fp_glColor4ub = (pfn_glColor4ub)load("glColor4ub");
+	fp_glColor4ubv = (pfn_glColor4ubv)load("glColor4ubv");
+	fp_glColor4ui = (pfn_glColor4ui)load("glColor4ui");
+	fp_glColor4uiv = (pfn_glColor4uiv)load("glColor4uiv");
+	fp_glColor4us = (pfn_glColor4us)load("glColor4us");
+	fp_glColor4usv = (pfn_glColor4usv)load("glColor4usv");
+	fp_glEdgeFlag = (pfn_glEdgeFlag)load("glEdgeFlag");
+	fp_glEdgeFlagv = (pfn_glEdgeFlagv)load("glEdgeFlagv");
+	fp_glEnd = (pfn_glEnd)load("glEnd");
+	fp_glIndexd = (pfn_glIndexd)load("glIndexd");
+	fp_glIndexdv = (pfn_glIndexdv)load("glIndexdv");
+	fp_glIndexf = (pfn_glIndexf)load("glIndexf");
+	fp_glIndexfv = (pfn_glIndexfv)load("glIndexfv");
+	fp_glIndexi = (pfn_glIndexi)load("glIndexi");
+	fp_glIndexiv = (pfn_glIndexiv)load("glIndexiv");
+	fp_glIndexs = (pfn_glIndexs)load("glIndexs");
+	fp_glIndexsv = (pfn_glIndexsv)load("glIndexsv");
+	fp_glNormal3b = (pfn_glNormal3b)load("glNormal3b");
+	fp_glNormal3bv = (pfn_glNormal3bv)load("glNormal3bv");
+	fp_glNormal3d = (pfn_glNormal3d)load("glNormal3d");
+	fp_glNormal3dv = (pfn_glNormal3dv)load("glNormal3dv");
+	fp_glNormal3f = (pfn_glNormal3f)load("glNormal3f");
+	fp_glNormal3fv = (pfn_glNormal3fv)load("glNormal3fv");
+	fp_glNormal3i = (pfn_glNormal3i)load("glNormal3i");
+	fp_glNormal3iv = (pfn_glNormal3iv)load("glNormal3iv");
+	fp_glNormal3s = (pfn_glNormal3s)load("glNormal3s");
+	fp_glNormal3sv = (pfn_glNormal3sv)load("glNormal3sv");
+	fp_glRasterPos2d = (pfn_glRasterPos2d)load("glRasterPos2d");
+	fp_glRasterPos2dv = (pfn_glRasterPos2dv)load("glRasterPos2dv");
+	fp_glRasterPos2f = (pfn_glRasterPos2f)load("glRasterPos2f");
+	fp_glRasterPos2fv = (pfn_glRasterPos2fv)load("glRasterPos2fv");
+	fp_glRasterPos2i = (pfn_glRasterPos2i)load("glRasterPos2i");
+	fp_glRasterPos2iv = (pfn_glRasterPos2iv)load("glRasterPos2iv");
+	fp_glRasterPos2s = (pfn_glRasterPos2s)load("glRasterPos2s");
+	fp_glRasterPos2sv = (pfn_glRasterPos2sv)load("glRasterPos2sv");
+	fp_glRasterPos3d = (pfn_glRasterPos3d)load("glRasterPos3d");
+	fp_glRasterPos3dv = (pfn_glRasterPos3dv)load("glRasterPos3dv");
+	fp_glRasterPos3f = (pfn_glRasterPos3f)load("glRasterPos3f");
+	fp_glRasterPos3fv = (pfn_glRasterPos3fv)load("glRasterPos3fv");
+	fp_glRasterPos3i = (pfn_glRasterPos3i)load("glRasterPos3i");
+	fp_glRasterPos3iv = (pfn_glRasterPos3iv)load("glRasterPos3iv");
+	fp_glRasterPos3s = (pfn_glRasterPos3s)load("glRasterPos3s");
+	fp_glRasterPos3sv = (pfn_glRasterPos3sv)load("glRasterPos3sv");
+	fp_glRasterPos4d = (pfn_glRasterPos4d)load("glRasterPos4d");
+	fp_glRasterPos4dv = (pfn_glRasterPos4dv)load("glRasterPos4dv");
+	fp_glRasterPos4f = (pfn_glRasterPos4f)load("glRasterPos4f");
+	fp_glRasterPos4fv = (pfn_glRasterPos4fv)load("glRasterPos4fv");
+	fp_glRasterPos4i = (pfn_glRasterPos4i)load("glRasterPos4i");
+	fp_glRasterPos4iv = (pfn_glRasterPos4iv)load("glRasterPos4iv");
+	fp_glRasterPos4s = (pfn_glRasterPos4s)load("glRasterPos4s");
+	fp_glRasterPos4sv = (pfn_glRasterPos4sv)load("glRasterPos4sv");
+	fp_glRectd = (pfn_glRectd)load("glRectd");
+	fp_glRectdv = (pfn_glRectdv)load("glRectdv");
+	fp_glRectf = (pfn_glRectf)load("glRectf");
+	fp_glRectfv = (pfn_glRectfv)load("glRectfv");
+	fp_glRecti = (pfn_glRecti)load("glRecti");
+	fp_glRectiv = (pfn_glRectiv)load("glRectiv");
+	fp_glRects = (pfn_glRects)load("glRects");
+	fp_glRectsv = (pfn_glRectsv)load("glRectsv");
+	fp_glTexCoord1d = (pfn_glTexCoord1d)load("glTexCoord1d");
+	fp_glTexCoord1dv = (pfn_glTexCoord1dv)load("glTexCoord1dv");
+	fp_glTexCoord1f = (pfn_glTexCoord1f)load("glTexCoord1f");
+	fp_glTexCoord1fv = (pfn_glTexCoord1fv)load("glTexCoord1fv");
+	fp_glTexCoord1i = (pfn_glTexCoord1i)load("glTexCoord1i");
+	fp_glTexCoord1iv = (pfn_glTexCoord1iv)load("glTexCoord1iv");
+	fp_glTexCoord1s = (pfn_glTexCoord1s)load("glTexCoord1s");
+	fp_glTexCoord1sv = (pfn_glTexCoord1sv)load("glTexCoord1sv");
+	fp_glTexCoord2d = (pfn_glTexCoord2d)load("glTexCoord2d");
+	fp_glTexCoord2dv = (pfn_glTexCoord2dv)load("glTexCoord2dv");
+	fp_glTexCoord2f = (pfn_glTexCoord2f)load("glTexCoord2f");
+	fp_glTexCoord2fv = (pfn_glTexCoord2fv)load("glTexCoord2fv");
+	fp_glTexCoord2i = (pfn_glTexCoord2i)load("glTexCoord2i");
+	fp_glTexCoord2iv = (pfn_glTexCoord2iv)load("glTexCoord2iv");
+	fp_glTexCoord2s = (pfn_glTexCoord2s)load("glTexCoord2s");
+	fp_glTexCoord2sv = (pfn_glTexCoord2sv)load("glTexCoord2sv");
+	fp_glTexCoord3d = (pfn_glTexCoord3d)load("glTexCoord3d");
+	fp_glTexCoord3dv = (pfn_glTexCoord3dv)load("glTexCoord3dv");
+	fp_glTexCoord3f = (pfn_glTexCoord3f)load("glTexCoord3f");
+	fp_glTexCoord3fv = (pfn_glTexCoord3fv)load("glTexCoord3fv");
+	fp_glTexCoord3i = (pfn_glTexCoord3i)load("glTexCoord3i");
+	fp_glTexCoord3iv = (pfn_glTexCoord3iv)load("glTexCoord3iv");
+	fp_glTexCoord3s = (pfn_glTexCoord3s)load("glTexCoord3s");
+	fp_glTexCoord3sv = (pfn_glTexCoord3sv)load("glTexCoord3sv");
+	fp_glTexCoord4d = (pfn_glTexCoord4d)load("glTexCoord4d");
+	fp_glTexCoord4dv = (pfn_glTexCoord4dv)load("glTexCoord4dv");
+	fp_glTexCoord4f = (pfn_glTexCoord4f)load("glTexCoord4f");
+	fp_glTexCoord4fv = (pfn_glTexCoord4fv)load("glTexCoord4fv");
+	fp_glTexCoord4i = (pfn_glTexCoord4i)load("glTexCoord4i");
+	fp_glTexCoord4iv = (pfn_glTexCoord4iv)load("glTexCoord4iv");
+	fp_glTexCoord4s = (pfn_glTexCoord4s)load("glTexCoord4s");
+	fp_glTexCoord4sv = (pfn_glTexCoord4sv)load("glTexCoord4sv");
+	fp_glVertex2d = (pfn_glVertex2d)load("glVertex2d");
+	fp_glVertex2dv = (pfn_glVertex2dv)load("glVertex2dv");
+	fp_glVertex2f = (pfn_glVertex2f)load("glVertex2f");
+	fp_glVertex2fv = (pfn_glVertex2fv)load("glVertex2fv");
+	fp_glVertex2i = (pfn_glVertex2i)load("glVertex2i");
+	fp_glVertex2iv = (pfn_glVertex2iv)load("glVertex2iv");
+	fp_glVertex2s = (pfn_glVertex2s)load("glVertex2s");
+	fp_glVertex2sv = (pfn_glVertex2sv)load("glVertex2sv");
+	fp_glVertex3d = (pfn_glVertex3d)load("glVertex3d");
+	fp_glVertex3dv = (pfn_glVertex3dv)load("glVertex3dv");
+	fp_glVertex3f = (pfn_glVertex3f)load("glVertex3f");
+	fp_glVertex3fv = (pfn_glVertex3fv)load("glVertex3fv");
+	fp_glVertex3i = (pfn_glVertex3i)load("glVertex3i");
+	fp_glVertex3iv = (pfn_glVertex3iv)load("glVertex3iv");
+	fp_glVertex3s = (pfn_glVertex3s)load("glVertex3s");
+	fp_glVertex3sv = (pfn_glVertex3sv)load("glVertex3sv");
+	fp_glVertex4d = (pfn_glVertex4d)load("glVertex4d");
+	fp_glVertex4dv = (pfn_glVertex4dv)load("glVertex4dv");
+	fp_glVertex4f = (pfn_glVertex4f)load("glVertex4f");
+	fp_glVertex4fv = (pfn_glVertex4fv)load("glVertex4fv");
+	fp_glVertex4i = (pfn_glVertex4i)load("glVertex4i");
+	fp_glVertex4iv = (pfn_glVertex4iv)load("glVertex4iv");
+	fp_glVertex4s = (pfn_glVertex4s)load("glVertex4s");
+	fp_glVertex4sv = (pfn_glVertex4sv)load("glVertex4sv");
+	fp_glClipPlane = (pfn_glClipPlane)load("glClipPlane");
+	fp_glColorMaterial = (pfn_glColorMaterial)load("glColorMaterial");
+	fp_glFogf = (pfn_glFogf)load("glFogf");
+	fp_glFogfv = (pfn_glFogfv)load("glFogfv");
+	fp_glFogi = (pfn_glFogi)load("glFogi");
+	fp_glFogiv = (pfn_glFogiv)load("glFogiv");
+	fp_glLightf = (pfn_glLightf)load("glLightf");
+	fp_glLightfv = (pfn_glLightfv)load("glLightfv");
+	fp_glLighti = (pfn_glLighti)load("glLighti");
+	fp_glLightiv = (pfn_glLightiv)load("glLightiv");
+	fp_glLightModelf = (pfn_glLightModelf)load("glLightModelf");
+	fp_glLightModelfv = (pfn_glLightModelfv)load("glLightModelfv");
+	fp_glLightModeli = (pfn_glLightModeli)load("glLightModeli");
+	fp_glLightModeliv = (pfn_glLightModeliv)load("glLightModeliv");
+	fp_glLineStipple = (pfn_glLineStipple)load("glLineStipple");
+	fp_glMaterialf = (pfn_glMaterialf)load("glMaterialf");
+	fp_glMaterialfv = (pfn_glMaterialfv)load("glMaterialfv");
+	fp_glMateriali = (pfn_glMateriali)load("glMateriali");
+	fp_glMaterialiv = (pfn_glMaterialiv)load("glMaterialiv");
+	fp_glPolygonStipple = (pfn_glPolygonStipple)load("glPolygonStipple");
+	fp_glShadeModel = (pfn_glShadeModel)load("glShadeModel");
+	fp_glTexEnvf = (pfn_glTexEnvf)load("glTexEnvf");
+	fp_glTexEnvfv = (pfn_glTexEnvfv)load("glTexEnvfv");
+	fp_glTexEnvi = (pfn_glTexEnvi)load("glTexEnvi");
+	fp_glTexEnviv = (pfn_glTexEnviv)load("glTexEnviv");
+	fp_glTexGend = (pfn_glTexGend)load("glTexGend");
+	fp_glTexGendv = (pfn_glTexGendv)load("glTexGendv");
+	fp_glTexGenf = (pfn_glTexGenf)load("glTexGenf");
+	fp_glTexGenfv = (pfn_glTexGenfv)load("glTexGenfv");
+	fp_glTexGeni = (pfn_glTexGeni)load("glTexGeni");
+	fp_glTexGeniv = (pfn_glTexGeniv)load("glTexGeniv");
+	fp_glFeedbackBuffer = (pfn_glFeedbackBuffer)load("glFeedbackBuffer");
+	fp_glSelectBuffer = (pfn_glSelectBuffer)load("glSelectBuffer");
+	fp_glRenderMode = (pfn_glRenderMode)load("glRenderMode");
+	fp_glInitNames = (pfn_glInitNames)load("glInitNames");
+	fp_glLoadName = (pfn_glLoadName)load("glLoadName");
+	fp_glPassThrough = (pfn_glPassThrough)load("glPassThrough");
+	fp_glPopName = (pfn_glPopName)load("glPopName");
+	fp_glPushName = (pfn_glPushName)load("glPushName");
+	fp_glClearAccum = (pfn_glClearAccum)load("glClearAccum");
+	fp_glClearIndex = (pfn_glClearIndex)load("glClearIndex");
+	fp_glIndexMask = (pfn_glIndexMask)load("glIndexMask");
+	fp_glAccum = (pfn_glAccum)load("glAccum");
+	fp_glPopAttrib = (pfn_glPopAttrib)load("glPopAttrib");
+	fp_glPushAttrib = (pfn_glPushAttrib)load("glPushAttrib");
+	fp_glMap1d = (pfn_glMap1d)load("glMap1d");
+	fp_glMap1f = (pfn_glMap1f)load("glMap1f");
+	fp_glMap2d = (pfn_glMap2d)load("glMap2d");
+	fp_glMap2f = (pfn_glMap2f)load("glMap2f");
+	fp_glMapGrid1d = (pfn_glMapGrid1d)load("glMapGrid1d");
+	fp_glMapGrid1f = (pfn_glMapGrid1f)load("glMapGrid1f");
+	fp_glMapGrid2d = (pfn_glMapGrid2d)load("glMapGrid2d");
+	fp_glMapGrid2f = (pfn_glMapGrid2f)load("glMapGrid2f");
+	fp_glEvalCoord1d = (pfn_glEvalCoord1d)load("glEvalCoord1d");
+	fp_glEvalCoord1dv = (pfn_glEvalCoord1dv)load("glEvalCoord1dv");
+	fp_glEvalCoord1f = (pfn_glEvalCoord1f)load("glEvalCoord1f");
+	fp_glEvalCoord1fv = (pfn_glEvalCoord1fv)load("glEvalCoord1fv");
+	fp_glEvalCoord2d = (pfn_glEvalCoord2d)load("glEvalCoord2d");
+	fp_glEvalCoord2dv = (pfn_glEvalCoord2dv)load("glEvalCoord2dv");
+	fp_glEvalCoord2f = (pfn_glEvalCoord2f)load("glEvalCoord2f");
+	fp_glEvalCoord2fv = (pfn_glEvalCoord2fv)load("glEvalCoord2fv");
+	fp_glEvalMesh1 = (pfn_glEvalMesh1)load("glEvalMesh1");
+	fp_glEvalPoint1 = (pfn_glEvalPoint1)load("glEvalPoint1");
+	fp_glEvalMesh2 = (pfn_glEvalMesh2)load("glEvalMesh2");
+	fp_glEvalPoint2 = (pfn_glEvalPoint2)load("glEvalPoint2");
+	fp_glAlphaFunc = (pfn_glAlphaFunc)load("glAlphaFunc");
+	fp_glPixelZoom = (pfn_glPixelZoom)load("glPixelZoom");
+	fp_glPixelTransferf = (pfn_glPixelTransferf)load("glPixelTransferf");
+	fp_glPixelTransferi = (pfn_glPixelTransferi)load("glPixelTransferi");
+	fp_glPixelMapfv = (pfn_glPixelMapfv)load("glPixelMapfv");
+	fp_glPixelMapuiv = (pfn_glPixelMapuiv)load("glPixelMapuiv");
+	fp_glPixelMapusv = (pfn_glPixelMapusv)load("glPixelMapusv");
+	fp_glCopyPixels = (pfn_glCopyPixels)load("glCopyPixels");
+	fp_glDrawPixels = (pfn_glDrawPixels)load("glDrawPixels");
+	fp_glGetClipPlane = (pfn_glGetClipPlane)load("glGetClipPlane");
+	fp_glGetLightfv = (pfn_glGetLightfv)load("glGetLightfv");
+	fp_glGetLightiv = (pfn_glGetLightiv)load("glGetLightiv");
+	fp_glGetMapdv = (pfn_glGetMapdv)load("glGetMapdv");
+	fp_glGetMapfv = (pfn_glGetMapfv)load("glGetMapfv");
+	fp_glGetMapiv = (pfn_glGetMapiv)load("glGetMapiv");
+	fp_glGetMaterialfv = (pfn_glGetMaterialfv)load("glGetMaterialfv");
+	fp_glGetMaterialiv = (pfn_glGetMaterialiv)load("glGetMaterialiv");
+	fp_glGetPixelMapfv = (pfn_glGetPixelMapfv)load("glGetPixelMapfv");
+	fp_glGetPixelMapuiv = (pfn_glGetPixelMapuiv)load("glGetPixelMapuiv");
+	fp_glGetPixelMapusv = (pfn_glGetPixelMapusv)load("glGetPixelMapusv");
+	fp_glGetPolygonStipple = (pfn_glGetPolygonStipple)load("glGetPolygonStipple");
+	fp_glGetTexEnvfv = (pfn_glGetTexEnvfv)load("glGetTexEnvfv");
+	fp_glGetTexEnviv = (pfn_glGetTexEnviv)load("glGetTexEnviv");
+	fp_glGetTexGendv = (pfn_glGetTexGendv)load("glGetTexGendv");
+	fp_glGetTexGenfv = (pfn_glGetTexGenfv)load("glGetTexGenfv");
+	fp_glGetTexGeniv = (pfn_glGetTexGeniv)load("glGetTexGeniv");
+	fp_glIsList = (pfn_glIsList)load("glIsList");
+	fp_glFrustum = (pfn_glFrustum)load("glFrustum");
+	fp_glLoadIdentity = (pfn_glLoadIdentity)load("glLoadIdentity");
+	fp_glLoadMatrixf = (pfn_glLoadMatrixf)load("glLoadMatrixf");
+	fp_glLoadMatrixd = (pfn_glLoadMatrixd)load("glLoadMatrixd");
+	fp_glMatrixMode = (pfn_glMatrixMode)load("glMatrixMode");
+	fp_glMultMatrixf = (pfn_glMultMatrixf)load("glMultMatrixf");
+	fp_glMultMatrixd = (pfn_glMultMatrixd)load("glMultMatrixd");
+	fp_glOrtho = (pfn_glOrtho)load("glOrtho");
+	fp_glPopMatrix = (pfn_glPopMatrix)load("glPopMatrix");
+	fp_glPushMatrix = (pfn_glPushMatrix)load("glPushMatrix");
+	fp_glRotated = (pfn_glRotated)load("glRotated");
+	fp_glRotatef = (pfn_glRotatef)load("glRotatef");
+	fp_glScaled = (pfn_glScaled)load("glScaled");
+	fp_glScalef = (pfn_glScalef)load("glScalef");
+	fp_glTranslated = (pfn_glTranslated)load("glTranslated");
+	fp_glTranslatef = (pfn_glTranslatef)load("glTranslatef");
+}
+
+GLboolean GLAD_VERSION_1_1 = GL_FALSE;
+static void load_GL_VERSION_1_1(LOADER load) {
+	if(!GLAD_VERSION_1_1) return;
+	fp_glDrawArrays = (pfn_glDrawArrays)load("glDrawArrays");
+	fp_glDrawElements = (pfn_glDrawElements)load("glDrawElements");
+	fp_glGetPointerv = (pfn_glGetPointerv)load("glGetPointerv");
+	fp_glPolygonOffset = (pfn_glPolygonOffset)load("glPolygonOffset");
+	fp_glCopyTexImage1D = (pfn_glCopyTexImage1D)load("glCopyTexImage1D");
+	fp_glCopyTexImage2D = (pfn_glCopyTexImage2D)load("glCopyTexImage2D");
+	fp_glCopyTexSubImage1D = (pfn_glCopyTexSubImage1D)load("glCopyTexSubImage1D");
+	fp_glCopyTexSubImage2D = (pfn_glCopyTexSubImage2D)load("glCopyTexSubImage2D");
+	fp_glTexSubImage1D = (pfn_glTexSubImage1D)load("glTexSubImage1D");
+	fp_glTexSubImage2D = (pfn_glTexSubImage2D)load("glTexSubImage2D");
+	fp_glBindTexture = (pfn_glBindTexture)load("glBindTexture");
+	fp_glDeleteTextures = (pfn_glDeleteTextures)load("glDeleteTextures");
+	fp_glGenTextures = (pfn_glGenTextures)load("glGenTextures");
+	fp_glIsTexture = (pfn_glIsTexture)load("glIsTexture");
+	fp_glArrayElement = (pfn_glArrayElement)load("glArrayElement");
+	fp_glColorPointer = (pfn_glColorPointer)load("glColorPointer");
+	fp_glDisableClientState = (pfn_glDisableClientState)load("glDisableClientState");
+	fp_glEdgeFlagPointer = (pfn_glEdgeFlagPointer)load("glEdgeFlagPointer");
+	fp_glEnableClientState = (pfn_glEnableClientState)load("glEnableClientState");
+	fp_glIndexPointer = (pfn_glIndexPointer)load("glIndexPointer");
+	fp_glInterleavedArrays = (pfn_glInterleavedArrays)load("glInterleavedArrays");
+	fp_glNormalPointer = (pfn_glNormalPointer)load("glNormalPointer");
+	fp_glTexCoordPointer = (pfn_glTexCoordPointer)load("glTexCoordPointer");
+	fp_glVertexPointer = (pfn_glVertexPointer)load("glVertexPointer");
+	fp_glAreTexturesResident = (pfn_glAreTexturesResident)load("glAreTexturesResident");
+	fp_glPrioritizeTextures = (pfn_glPrioritizeTextures)load("glPrioritizeTextures");
+	fp_glIndexub = (pfn_glIndexub)load("glIndexub");
+	fp_glIndexubv = (pfn_glIndexubv)load("glIndexubv");
+	fp_glPopClientAttrib = (pfn_glPopClientAttrib)load("glPopClientAttrib");
+	fp_glPushClientAttrib = (pfn_glPushClientAttrib)load("glPushClientAttrib");
+}
+
+GLboolean GLAD_VERSION_1_2 = GL_FALSE;
+static void load_GL_VERSION_1_2(LOADER load) {
+	if(!GLAD_VERSION_1_2) return;
+	fp_glDrawRangeElements = (pfn_glDrawRangeElements)load("glDrawRangeElements");
+	fp_glTexImage3D = (pfn_glTexImage3D)load("glTexImage3D");
+	fp_glTexSubImage3D = (pfn_glTexSubImage3D)load("glTexSubImage3D");
+	fp_glCopyTexSubImage3D = (pfn_glCopyTexSubImage3D)load("glCopyTexSubImage3D");
+}
+
+GLboolean GLAD_VERSION_1_3 = GL_FALSE;
+static void load_GL_VERSION_1_3(LOADER load) {
+	if(!GLAD_VERSION_1_3) return;
+	fp_glActiveTexture = (pfn_glActiveTexture)load("glActiveTexture");
+	fp_glSampleCoverage = (pfn_glSampleCoverage)load("glSampleCoverage");
+	fp_glCompressedTexImage3D = (pfn_glCompressedTexImage3D)load("glCompressedTexImage3D");
+	fp_glCompressedTexImage2D = (pfn_glCompressedTexImage2D)load("glCompressedTexImage2D");
+	fp_glCompressedTexImage1D = (pfn_glCompressedTexImage1D)load("glCompressedTexImage1D");
+	fp_glCompressedTexSubImage3D = (pfn_glCompressedTexSubImage3D)load("glCompressedTexSubImage3D");
+	fp_glCompressedTexSubImage2D = (pfn_glCompressedTexSubImage2D)load("glCompressedTexSubImage2D");
+	fp_glCompressedTexSubImage1D = (pfn_glCompressedTexSubImage1D)load("glCompressedTexSubImage1D");
+	fp_glGetCompressedTexImage = (pfn_glGetCompressedTexImage)load("glGetCompressedTexImage");
+	fp_glClientActiveTexture = (pfn_glClientActiveTexture)load("glClientActiveTexture");
+	fp_glMultiTexCoord1d = (pfn_glMultiTexCoord1d)load("glMultiTexCoord1d");
+	fp_glMultiTexCoord1dv = (pfn_glMultiTexCoord1dv)load("glMultiTexCoord1dv");
+	fp_glMultiTexCoord1f = (pfn_glMultiTexCoord1f)load("glMultiTexCoord1f");
+	fp_glMultiTexCoord1fv = (pfn_glMultiTexCoord1fv)load("glMultiTexCoord1fv");
+	fp_glMultiTexCoord1i = (pfn_glMultiTexCoord1i)load("glMultiTexCoord1i");
+	fp_glMultiTexCoord1iv = (pfn_glMultiTexCoord1iv)load("glMultiTexCoord1iv");
+	fp_glMultiTexCoord1s = (pfn_glMultiTexCoord1s)load("glMultiTexCoord1s");
+	fp_glMultiTexCoord1sv = (pfn_glMultiTexCoord1sv)load("glMultiTexCoord1sv");
+	fp_glMultiTexCoord2d = (pfn_glMultiTexCoord2d)load("glMultiTexCoord2d");
+	fp_glMultiTexCoord2dv = (pfn_glMultiTexCoord2dv)load("glMultiTexCoord2dv");
+	fp_glMultiTexCoord2f = (pfn_glMultiTexCoord2f)load("glMultiTexCoord2f");
+	fp_glMultiTexCoord2fv = (pfn_glMultiTexCoord2fv)load("glMultiTexCoord2fv");
+	fp_glMultiTexCoord2i = (pfn_glMultiTexCoord2i)load("glMultiTexCoord2i");
+	fp_glMultiTexCoord2iv = (pfn_glMultiTexCoord2iv)load("glMultiTexCoord2iv");
+	fp_glMultiTexCoord2s = (pfn_glMultiTexCoord2s)load("glMultiTexCoord2s");
+	fp_glMultiTexCoord2sv = (pfn_glMultiTexCoord2sv)load("glMultiTexCoord2sv");
+	fp_glMultiTexCoord3d = (pfn_glMultiTexCoord3d)load("glMultiTexCoord3d");
+	fp_glMultiTexCoord3dv = (pfn_glMultiTexCoord3dv)load("glMultiTexCoord3dv");
+	fp_glMultiTexCoord3f = (pfn_glMultiTexCoord3f)load("glMultiTexCoord3f");
+	fp_glMultiTexCoord3fv = (pfn_glMultiTexCoord3fv)load("glMultiTexCoord3fv");
+	fp_glMultiTexCoord3i = (pfn_glMultiTexCoord3i)load("glMultiTexCoord3i");
+	fp_glMultiTexCoord3iv = (pfn_glMultiTexCoord3iv)load("glMultiTexCoord3iv");
+	fp_glMultiTexCoord3s = (pfn_glMultiTexCoord3s)load("glMultiTexCoord3s");
+	fp_glMultiTexCoord3sv = (pfn_glMultiTexCoord3sv)load("glMultiTexCoord3sv");
+	fp_glMultiTexCoord4d = (pfn_glMultiTexCoord4d)load("glMultiTexCoord4d");
+	fp_glMultiTexCoord4dv = (pfn_glMultiTexCoord4dv)load("glMultiTexCoord4dv");
+	fp_glMultiTexCoord4f = (pfn_glMultiTexCoord4f)load("glMultiTexCoord4f");
+	fp_glMultiTexCoord4fv = (pfn_glMultiTexCoord4fv)load("glMultiTexCoord4fv");
+	fp_glMultiTexCoord4i = (pfn_glMultiTexCoord4i)load("glMultiTexCoord4i");
+	fp_glMultiTexCoord4iv = (pfn_glMultiTexCoord4iv)load("glMultiTexCoord4iv");
+	fp_glMultiTexCoord4s = (pfn_glMultiTexCoord4s)load("glMultiTexCoord4s");
+	fp_glMultiTexCoord4sv = (pfn_glMultiTexCoord4sv)load("glMultiTexCoord4sv");
+	fp_glLoadTransposeMatrixf = (pfn_glLoadTransposeMatrixf)load("glLoadTransposeMatrixf");
+	fp_glLoadTransposeMatrixd = (pfn_glLoadTransposeMatrixd)load("glLoadTransposeMatrixd");
+	fp_glMultTransposeMatrixf = (pfn_glMultTransposeMatrixf)load("glMultTransposeMatrixf");
+	fp_glMultTransposeMatrixd = (pfn_glMultTransposeMatrixd)load("glMultTransposeMatrixd");
+}
+
+GLboolean GLAD_VERSION_1_4 = GL_FALSE;
+static void load_GL_VERSION_1_4(LOADER load) {
+	if(!GLAD_VERSION_1_4) return;
+	fp_glBlendFuncSeparate = (pfn_glBlendFuncSeparate)load("glBlendFuncSeparate");
+	fp_glMultiDrawArrays = (pfn_glMultiDrawArrays)load("glMultiDrawArrays");
+	fp_glMultiDrawElements = (pfn_glMultiDrawElements)load("glMultiDrawElements");
+	fp_glPointParameterf = (pfn_glPointParameterf)load("glPointParameterf");
+	fp_glPointParameterfv = (pfn_glPointParameterfv)load("glPointParameterfv");
+	fp_glPointParameteri = (pfn_glPointParameteri)load("glPointParameteri");
+	fp_glPointParameteriv = (pfn_glPointParameteriv)load("glPointParameteriv");
+	fp_glFogCoordf = (pfn_glFogCoordf)load("glFogCoordf");
+	fp_glFogCoordfv = (pfn_glFogCoordfv)load("glFogCoordfv");
+	fp_glFogCoordd = (pfn_glFogCoordd)load("glFogCoordd");
+	fp_glFogCoorddv = (pfn_glFogCoorddv)load("glFogCoorddv");
+	fp_glFogCoordPointer = (pfn_glFogCoordPointer)load("glFogCoordPointer");
+	fp_glSecondaryColor3b = (pfn_glSecondaryColor3b)load("glSecondaryColor3b");
+	fp_glSecondaryColor3bv = (pfn_glSecondaryColor3bv)load("glSecondaryColor3bv");
+	fp_glSecondaryColor3d = (pfn_glSecondaryColor3d)load("glSecondaryColor3d");
+	fp_glSecondaryColor3dv = (pfn_glSecondaryColor3dv)load("glSecondaryColor3dv");
+	fp_glSecondaryColor3f = (pfn_glSecondaryColor3f)load("glSecondaryColor3f");
+	fp_glSecondaryColor3fv = (pfn_glSecondaryColor3fv)load("glSecondaryColor3fv");
+	fp_glSecondaryColor3i = (pfn_glSecondaryColor3i)load("glSecondaryColor3i");
+	fp_glSecondaryColor3iv = (pfn_glSecondaryColor3iv)load("glSecondaryColor3iv");
+	fp_glSecondaryColor3s = (pfn_glSecondaryColor3s)load("glSecondaryColor3s");
+	fp_glSecondaryColor3sv = (pfn_glSecondaryColor3sv)load("glSecondaryColor3sv");
+	fp_glSecondaryColor3ub = (pfn_glSecondaryColor3ub)load("glSecondaryColor3ub");
+	fp_glSecondaryColor3ubv = (pfn_glSecondaryColor3ubv)load("glSecondaryColor3ubv");
+	fp_glSecondaryColor3ui = (pfn_glSecondaryColor3ui)load("glSecondaryColor3ui");
+	fp_glSecondaryColor3uiv = (pfn_glSecondaryColor3uiv)load("glSecondaryColor3uiv");
+	fp_glSecondaryColor3us = (pfn_glSecondaryColor3us)load("glSecondaryColor3us");
+	fp_glSecondaryColor3usv = (pfn_glSecondaryColor3usv)load("glSecondaryColor3usv");
+	fp_glSecondaryColorPointer = (pfn_glSecondaryColorPointer)load("glSecondaryColorPointer");
+	fp_glWindowPos2d = (pfn_glWindowPos2d)load("glWindowPos2d");
+	fp_glWindowPos2dv = (pfn_glWindowPos2dv)load("glWindowPos2dv");
+	fp_glWindowPos2f = (pfn_glWindowPos2f)load("glWindowPos2f");
+	fp_glWindowPos2fv = (pfn_glWindowPos2fv)load("glWindowPos2fv");
+	fp_glWindowPos2i = (pfn_glWindowPos2i)load("glWindowPos2i");
+	fp_glWindowPos2iv = (pfn_glWindowPos2iv)load("glWindowPos2iv");
+	fp_glWindowPos2s = (pfn_glWindowPos2s)load("glWindowPos2s");
+	fp_glWindowPos2sv = (pfn_glWindowPos2sv)load("glWindowPos2sv");
+	fp_glWindowPos3d = (pfn_glWindowPos3d)load("glWindowPos3d");
+	fp_glWindowPos3dv = (pfn_glWindowPos3dv)load("glWindowPos3dv");
+	fp_glWindowPos3f = (pfn_glWindowPos3f)load("glWindowPos3f");
+	fp_glWindowPos3fv = (pfn_glWindowPos3fv)load("glWindowPos3fv");
+	fp_glWindowPos3i = (pfn_glWindowPos3i)load("glWindowPos3i");
+	fp_glWindowPos3iv = (pfn_glWindowPos3iv)load("glWindowPos3iv");
+	fp_glWindowPos3s = (pfn_glWindowPos3s)load("glWindowPos3s");
+	fp_glWindowPos3sv = (pfn_glWindowPos3sv)load("glWindowPos3sv");
+	fp_glBlendColor = (pfn_glBlendColor)load("glBlendColor");
+	fp_glBlendEquation = (pfn_glBlendEquation)load("glBlendEquation");
+}
+
+GLboolean GLAD_VERSION_1_5 = GL_FALSE;
+static void load_GL_VERSION_1_5(LOADER load) {
+	if(!GLAD_VERSION_1_5) return;
+	fp_glGenQueries = (pfn_glGenQueries)load("glGenQueries");
+	fp_glDeleteQueries = (pfn_glDeleteQueries)load("glDeleteQueries");
+	fp_glIsQuery = (pfn_glIsQuery)load("glIsQuery");
+	fp_glBeginQuery = (pfn_glBeginQuery)load("glBeginQuery");
+	fp_glEndQuery = (pfn_glEndQuery)load("glEndQuery");
+	fp_glGetQueryiv = (pfn_glGetQueryiv)load("glGetQueryiv");
+	fp_glGetQueryObjectiv = (pfn_glGetQueryObjectiv)load("glGetQueryObjectiv");
+	fp_glGetQueryObjectuiv = (pfn_glGetQueryObjectuiv)load("glGetQueryObjectuiv");
+	fp_glBindBuffer = (pfn_glBindBuffer)load("glBindBuffer");
+	fp_glDeleteBuffers = (pfn_glDeleteBuffers)load("glDeleteBuffers");
+	fp_glGenBuffers = (pfn_glGenBuffers)load("glGenBuffers");
+	fp_glIsBuffer = (pfn_glIsBuffer)load("glIsBuffer");
+	fp_glBufferData = (pfn_glBufferData)load("glBufferData");
+	fp_glBufferSubData = (pfn_glBufferSubData)load("glBufferSubData");
+	fp_glGetBufferSubData = (pfn_glGetBufferSubData)load("glGetBufferSubData");
+	fp_glMapBuffer = (pfn_glMapBuffer)load("glMapBuffer");
+	fp_glUnmapBuffer = (pfn_glUnmapBuffer)load("glUnmapBuffer");
+	fp_glGetBufferParameteriv = (pfn_glGetBufferParameteriv)load("glGetBufferParameteriv");
+	fp_glGetBufferPointerv = (pfn_glGetBufferPointerv)load("glGetBufferPointerv");
+}
+
+GLboolean GLAD_VERSION_2_0 = GL_FALSE;
+static void load_GL_VERSION_2_0(LOADER load) {
+	if(!GLAD_VERSION_2_0) return;
+	fp_glBlendEquationSeparate = (pfn_glBlendEquationSeparate)load("glBlendEquationSeparate");
+	fp_glDrawBuffers = (pfn_glDrawBuffers)load("glDrawBuffers");
+	fp_glStencilOpSeparate = (pfn_glStencilOpSeparate)load("glStencilOpSeparate");
+	fp_glStencilFuncSeparate = (pfn_glStencilFuncSeparate)load("glStencilFuncSeparate");
+	fp_glStencilMaskSeparate = (pfn_glStencilMaskSeparate)load("glStencilMaskSeparate");
+	fp_glAttachShader = (pfn_glAttachShader)load("glAttachShader");
+	fp_glBindAttribLocation = (pfn_glBindAttribLocation)load("glBindAttribLocation");
+	fp_glCompileShader = (pfn_glCompileShader)load("glCompileShader");
+	fp_glCreateProgram = (pfn_glCreateProgram)load("glCreateProgram");
+	fp_glCreateShader = (pfn_glCreateShader)load("glCreateShader");
+	fp_glDeleteProgram = (pfn_glDeleteProgram)load("glDeleteProgram");
+	fp_glDeleteShader = (pfn_glDeleteShader)load("glDeleteShader");
+	fp_glDetachShader = (pfn_glDetachShader)load("glDetachShader");
+	fp_glDisableVertexAttribArray = (pfn_glDisableVertexAttribArray)load("glDisableVertexAttribArray");
+	fp_glEnableVertexAttribArray = (pfn_glEnableVertexAttribArray)load("glEnableVertexAttribArray");
+	fp_glGetActiveAttrib = (pfn_glGetActiveAttrib)load("glGetActiveAttrib");
+	fp_glGetActiveUniform = (pfn_glGetActiveUniform)load("glGetActiveUniform");
+	fp_glGetAttachedShaders = (pfn_glGetAttachedShaders)load("glGetAttachedShaders");
+	fp_glGetAttribLocation = (pfn_glGetAttribLocation)load("glGetAttribLocation");
+	fp_glGetProgramiv = (pfn_glGetProgramiv)load("glGetProgramiv");
+	fp_glGetProgramInfoLog = (pfn_glGetProgramInfoLog)load("glGetProgramInfoLog");
+	fp_glGetShaderiv = (pfn_glGetShaderiv)load("glGetShaderiv");
+	fp_glGetShaderInfoLog = (pfn_glGetShaderInfoLog)load("glGetShaderInfoLog");
+	fp_glGetShaderSource = (pfn_glGetShaderSource)load("glGetShaderSource");
+	fp_glGetUniformLocation = (pfn_glGetUniformLocation)load("glGetUniformLocation");
+	fp_glGetUniformfv = (pfn_glGetUniformfv)load("glGetUniformfv");
+	fp_glGetUniformiv = (pfn_glGetUniformiv)load("glGetUniformiv");
+	fp_glGetVertexAttribdv = (pfn_glGetVertexAttribdv)load("glGetVertexAttribdv");
+	fp_glGetVertexAttribfv = (pfn_glGetVertexAttribfv)load("glGetVertexAttribfv");
+	fp_glGetVertexAttribiv = (pfn_glGetVertexAttribiv)load("glGetVertexAttribiv");
+	fp_glGetVertexAttribPointerv = (pfn_glGetVertexAttribPointerv)load("glGetVertexAttribPointerv");
+	fp_glIsProgram = (pfn_glIsProgram)load("glIsProgram");
+	fp_glIsShader = (pfn_glIsShader)load("glIsShader");
+	fp_glLinkProgram = (pfn_glLinkProgram)load("glLinkProgram");
+	fp_glShaderSource = (pfn_glShaderSource)load("glShaderSource");
+	fp_glUseProgram = (pfn_glUseProgram)load("glUseProgram");
+	fp_glUniform1f = (pfn_glUniform1f)load("glUniform1f");
+	fp_glUniform2f = (pfn_glUniform2f)load("glUniform2f");
+	fp_glUniform3f = (pfn_glUniform3f)load("glUniform3f");
+	fp_glUniform4f = (pfn_glUniform4f)load("glUniform4f");
+	fp_glUniform1i = (pfn_glUniform1i)load("glUniform1i");
+	fp_glUniform2i = (pfn_glUniform2i)load("glUniform2i");
+	fp_glUniform3i = (pfn_glUniform3i)load("glUniform3i");
+	fp_glUniform4i = (pfn_glUniform4i)load("glUniform4i");
+	fp_glUniform1fv = (pfn_glUniform1fv)load("glUniform1fv");
+	fp_glUniform2fv = (pfn_glUniform2fv)load("glUniform2fv");
+	fp_glUniform3fv = (pfn_glUniform3fv)load("glUniform3fv");
+	fp_glUniform4fv = (pfn_glUniform4fv)load("glUniform4fv");
+	fp_glUniform1iv = (pfn_glUniform1iv)load("glUniform1iv");
+	fp_glUniform2iv = (pfn_glUniform2iv)load("glUniform2iv");
+	fp_glUniform3iv = (pfn_glUniform3iv)load("glUniform3iv");
+	fp_glUniform4iv = (pfn_glUniform4iv)load("glUniform4iv");
+	fp_glUniformMatrix2fv = (pfn_glUniformMatrix2fv)load("glUniformMatrix2fv");
+	fp_glUniformMatrix3fv = (pfn_glUniformMatrix3fv)load("glUniformMatrix3fv");
+	fp_glUniformMatrix4fv = (pfn_glUniformMatrix4fv)load("glUniformMatrix4fv");
+	fp_glValidateProgram = (pfn_glValidateProgram)load("glValidateProgram");
+	fp_glVertexAttrib1d = (pfn_glVertexAttrib1d)load("glVertexAttrib1d");
+	fp_glVertexAttrib1dv = (pfn_glVertexAttrib1dv)load("glVertexAttrib1dv");
+	fp_glVertexAttrib1f = (pfn_glVertexAttrib1f)load("glVertexAttrib1f");
+	fp_glVertexAttrib1fv = (pfn_glVertexAttrib1fv)load("glVertexAttrib1fv");
+	fp_glVertexAttrib1s = (pfn_glVertexAttrib1s)load("glVertexAttrib1s");
+	fp_glVertexAttrib1sv = (pfn_glVertexAttrib1sv)load("glVertexAttrib1sv");
+	fp_glVertexAttrib2d = (pfn_glVertexAttrib2d)load("glVertexAttrib2d");
+	fp_glVertexAttrib2dv = (pfn_glVertexAttrib2dv)load("glVertexAttrib2dv");
+	fp_glVertexAttrib2f = (pfn_glVertexAttrib2f)load("glVertexAttrib2f");
+	fp_glVertexAttrib2fv = (pfn_glVertexAttrib2fv)load("glVertexAttrib2fv");
+	fp_glVertexAttrib2s = (pfn_glVertexAttrib2s)load("glVertexAttrib2s");
+	fp_glVertexAttrib2sv = (pfn_glVertexAttrib2sv)load("glVertexAttrib2sv");
+	fp_glVertexAttrib3d = (pfn_glVertexAttrib3d)load("glVertexAttrib3d");
+	fp_glVertexAttrib3dv = (pfn_glVertexAttrib3dv)load("glVertexAttrib3dv");
+	fp_glVertexAttrib3f = (pfn_glVertexAttrib3f)load("glVertexAttrib3f");
+	fp_glVertexAttrib3fv = (pfn_glVertexAttrib3fv)load("glVertexAttrib3fv");
+	fp_glVertexAttrib3s = (pfn_glVertexAttrib3s)load("glVertexAttrib3s");
+	fp_glVertexAttrib3sv = (pfn_glVertexAttrib3sv)load("glVertexAttrib3sv");
+	fp_glVertexAttrib4Nbv = (pfn_glVertexAttrib4Nbv)load("glVertexAttrib4Nbv");
+	fp_glVertexAttrib4Niv = (pfn_glVertexAttrib4Niv)load("glVertexAttrib4Niv");
+	fp_glVertexAttrib4Nsv = (pfn_glVertexAttrib4Nsv)load("glVertexAttrib4Nsv");
+	fp_glVertexAttrib4Nub = (pfn_glVertexAttrib4Nub)load("glVertexAttrib4Nub");
+	fp_glVertexAttrib4Nubv = (pfn_glVertexAttrib4Nubv)load("glVertexAttrib4Nubv");
+	fp_glVertexAttrib4Nuiv = (pfn_glVertexAttrib4Nuiv)load("glVertexAttrib4Nuiv");
+	fp_glVertexAttrib4Nusv = (pfn_glVertexAttrib4Nusv)load("glVertexAttrib4Nusv");
+	fp_glVertexAttrib4bv = (pfn_glVertexAttrib4bv)load("glVertexAttrib4bv");
+	fp_glVertexAttrib4d = (pfn_glVertexAttrib4d)load("glVertexAttrib4d");
+	fp_glVertexAttrib4dv = (pfn_glVertexAttrib4dv)load("glVertexAttrib4dv");
+	fp_glVertexAttrib4f = (pfn_glVertexAttrib4f)load("glVertexAttrib4f");
+	fp_glVertexAttrib4fv = (pfn_glVertexAttrib4fv)load("glVertexAttrib4fv");
+	fp_glVertexAttrib4iv = (pfn_glVertexAttrib4iv)load("glVertexAttrib4iv");
+	fp_glVertexAttrib4s = (pfn_glVertexAttrib4s)load("glVertexAttrib4s");
+	fp_glVertexAttrib4sv = (pfn_glVertexAttrib4sv)load("glVertexAttrib4sv");
+	fp_glVertexAttrib4ubv = (pfn_glVertexAttrib4ubv)load("glVertexAttrib4ubv");
+	fp_glVertexAttrib4uiv = (pfn_glVertexAttrib4uiv)load("glVertexAttrib4uiv");
+	fp_glVertexAttrib4usv = (pfn_glVertexAttrib4usv)load("glVertexAttrib4usv");
+	fp_glVertexAttribPointer = (pfn_glVertexAttribPointer)load("glVertexAttribPointer");
+}
+
+GLboolean GLAD_VERSION_2_1 = GL_FALSE;
+static void load_GL_VERSION_2_1(LOADER load) {
+	if(!GLAD_VERSION_2_1) return;
+	fp_glUniformMatrix2x3fv = (pfn_glUniformMatrix2x3fv)load("glUniformMatrix2x3fv");
+	fp_glUniformMatrix3x2fv = (pfn_glUniformMatrix3x2fv)load("glUniformMatrix3x2fv");
+	fp_glUniformMatrix2x4fv = (pfn_glUniformMatrix2x4fv)load("glUniformMatrix2x4fv");
+	fp_glUniformMatrix4x2fv = (pfn_glUniformMatrix4x2fv)load("glUniformMatrix4x2fv");
+	fp_glUniformMatrix3x4fv = (pfn_glUniformMatrix3x4fv)load("glUniformMatrix3x4fv");
+	fp_glUniformMatrix4x3fv = (pfn_glUniformMatrix4x3fv)load("glUniformMatrix4x3fv");
+}
+
+GLboolean GLAD_VERSION_3_0 = GL_FALSE;
+static void load_GL_VERSION_3_0(LOADER load) {
+	if(!GLAD_VERSION_3_0) return;
+	fp_glColorMaski = (pfn_glColorMaski)load("glColorMaski");
+	fp_glGetBooleani_v = (pfn_glGetBooleani_v)load("glGetBooleani_v");
+	fp_glGetIntegeri_v = (pfn_glGetIntegeri_v)load("glGetIntegeri_v");
+	fp_glEnablei = (pfn_glEnablei)load("glEnablei");
+	fp_glDisablei = (pfn_glDisablei)load("glDisablei");
+	fp_glIsEnabledi = (pfn_glIsEnabledi)load("glIsEnabledi");
+	fp_glBeginTransformFeedback = (pfn_glBeginTransformFeedback)load("glBeginTransformFeedback");
+	fp_glEndTransformFeedback = (pfn_glEndTransformFeedback)load("glEndTransformFeedback");
+	fp_glBindBufferRange = (pfn_glBindBufferRange)load("glBindBufferRange");
+	fp_glBindBufferBase = (pfn_glBindBufferBase)load("glBindBufferBase");
+	fp_glTransformFeedbackVaryings = (pfn_glTransformFeedbackVaryings)load("glTransformFeedbackVaryings");
+	fp_glGetTransformFeedbackVarying = (pfn_glGetTransformFeedbackVarying)load("glGetTransformFeedbackVarying");
+	fp_glClampColor = (pfn_glClampColor)load("glClampColor");
+	fp_glBeginConditionalRender = (pfn_glBeginConditionalRender)load("glBeginConditionalRender");
+	fp_glEndConditionalRender = (pfn_glEndConditionalRender)load("glEndConditionalRender");
+	fp_glVertexAttribIPointer = (pfn_glVertexAttribIPointer)load("glVertexAttribIPointer");
+	fp_glGetVertexAttribIiv = (pfn_glGetVertexAttribIiv)load("glGetVertexAttribIiv");
+	fp_glGetVertexAttribIuiv = (pfn_glGetVertexAttribIuiv)load("glGetVertexAttribIuiv");
+	fp_glVertexAttribI1i = (pfn_glVertexAttribI1i)load("glVertexAttribI1i");
+	fp_glVertexAttribI2i = (pfn_glVertexAttribI2i)load("glVertexAttribI2i");
+	fp_glVertexAttribI3i = (pfn_glVertexAttribI3i)load("glVertexAttribI3i");
+	fp_glVertexAttribI4i = (pfn_glVertexAttribI4i)load("glVertexAttribI4i");
+	fp_glVertexAttribI1ui = (pfn_glVertexAttribI1ui)load("glVertexAttribI1ui");
+	fp_glVertexAttribI2ui = (pfn_glVertexAttribI2ui)load("glVertexAttribI2ui");
+	fp_glVertexAttribI3ui = (pfn_glVertexAttribI3ui)load("glVertexAttribI3ui");
+	fp_glVertexAttribI4ui = (pfn_glVertexAttribI4ui)load("glVertexAttribI4ui");
+	fp_glVertexAttribI1iv = (pfn_glVertexAttribI1iv)load("glVertexAttribI1iv");
+	fp_glVertexAttribI2iv = (pfn_glVertexAttribI2iv)load("glVertexAttribI2iv");
+	fp_glVertexAttribI3iv = (pfn_glVertexAttribI3iv)load("glVertexAttribI3iv");
+	fp_glVertexAttribI4iv = (pfn_glVertexAttribI4iv)load("glVertexAttribI4iv");
+	fp_glVertexAttribI1uiv = (pfn_glVertexAttribI1uiv)load("glVertexAttribI1uiv");
+	fp_glVertexAttribI2uiv = (pfn_glVertexAttribI2uiv)load("glVertexAttribI2uiv");
+	fp_glVertexAttribI3uiv = (pfn_glVertexAttribI3uiv)load("glVertexAttribI3uiv");
+	fp_glVertexAttribI4uiv = (pfn_glVertexAttribI4uiv)load("glVertexAttribI4uiv");
+	fp_glVertexAttribI4bv = (pfn_glVertexAttribI4bv)load("glVertexAttribI4bv");
+	fp_glVertexAttribI4sv = (pfn_glVertexAttribI4sv)load("glVertexAttribI4sv");
+	fp_glVertexAttribI4ubv = (pfn_glVertexAttribI4ubv)load("glVertexAttribI4ubv");
+	fp_glVertexAttribI4usv = (pfn_glVertexAttribI4usv)load("glVertexAttribI4usv");
+	fp_glGetUniformuiv = (pfn_glGetUniformuiv)load("glGetUniformuiv");
+	fp_glBindFragDataLocation = (pfn_glBindFragDataLocation)load("glBindFragDataLocation");
+	fp_glGetFragDataLocation = (pfn_glGetFragDataLocation)load("glGetFragDataLocation");
+	fp_glUniform1ui = (pfn_glUniform1ui)load("glUniform1ui");
+	fp_glUniform2ui = (pfn_glUniform2ui)load("glUniform2ui");
+	fp_glUniform3ui = (pfn_glUniform3ui)load("glUniform3ui");
+	fp_glUniform4ui = (pfn_glUniform4ui)load("glUniform4ui");
+	fp_glUniform1uiv = (pfn_glUniform1uiv)load("glUniform1uiv");
+	fp_glUniform2uiv = (pfn_glUniform2uiv)load("glUniform2uiv");
+	fp_glUniform3uiv = (pfn_glUniform3uiv)load("glUniform3uiv");
+	fp_glUniform4uiv = (pfn_glUniform4uiv)load("glUniform4uiv");
+	fp_glTexParameterIiv = (pfn_glTexParameterIiv)load("glTexParameterIiv");
+	fp_glTexParameterIuiv = (pfn_glTexParameterIuiv)load("glTexParameterIuiv");
+	fp_glGetTexParameterIiv = (pfn_glGetTexParameterIiv)load("glGetTexParameterIiv");
+	fp_glGetTexParameterIuiv = (pfn_glGetTexParameterIuiv)load("glGetTexParameterIuiv");
+	fp_glClearBufferiv = (pfn_glClearBufferiv)load("glClearBufferiv");
+	fp_glClearBufferuiv = (pfn_glClearBufferuiv)load("glClearBufferuiv");
+	fp_glClearBufferfv = (pfn_glClearBufferfv)load("glClearBufferfv");
+	fp_glClearBufferfi = (pfn_glClearBufferfi)load("glClearBufferfi");
+	fp_glGetStringi = (pfn_glGetStringi)load("glGetStringi");
+	fp_glIsRenderbuffer = (pfn_glIsRenderbuffer)load("glIsRenderbuffer");
+	fp_glBindRenderbuffer = (pfn_glBindRenderbuffer)load("glBindRenderbuffer");
+	fp_glDeleteRenderbuffers = (pfn_glDeleteRenderbuffers)load("glDeleteRenderbuffers");
+	fp_glGenRenderbuffers = (pfn_glGenRenderbuffers)load("glGenRenderbuffers");
+	fp_glRenderbufferStorage = (pfn_glRenderbufferStorage)load("glRenderbufferStorage");
+	fp_glGetRenderbufferParameteriv = (pfn_glGetRenderbufferParameteriv)load("glGetRenderbufferParameteriv");
+	fp_glIsFramebuffer = (pfn_glIsFramebuffer)load("glIsFramebuffer");
+	fp_glBindFramebuffer = (pfn_glBindFramebuffer)load("glBindFramebuffer");
+	fp_glDeleteFramebuffers = (pfn_glDeleteFramebuffers)load("glDeleteFramebuffers");
+	fp_glGenFramebuffers = (pfn_glGenFramebuffers)load("glGenFramebuffers");
+	fp_glCheckFramebufferStatus = (pfn_glCheckFramebufferStatus)load("glCheckFramebufferStatus");
+	fp_glFramebufferTexture1D = (pfn_glFramebufferTexture1D)load("glFramebufferTexture1D");
+	fp_glFramebufferTexture2D = (pfn_glFramebufferTexture2D)load("glFramebufferTexture2D");
+	fp_glFramebufferTexture3D = (pfn_glFramebufferTexture3D)load("glFramebufferTexture3D");
+	fp_glFramebufferRenderbuffer = (pfn_glFramebufferRenderbuffer)load("glFramebufferRenderbuffer");
+	fp_glGetFramebufferAttachmentParameteriv = (pfn_glGetFramebufferAttachmentParameteriv)load("glGetFramebufferAttachmentParameteriv");
+	fp_glGenerateMipmap = (pfn_glGenerateMipmap)load("glGenerateMipmap");
+	fp_glBlitFramebuffer = (pfn_glBlitFramebuffer)load("glBlitFramebuffer");
+	fp_glRenderbufferStorageMultisample = (pfn_glRenderbufferStorageMultisample)load("glRenderbufferStorageMultisample");
+	fp_glFramebufferTextureLayer = (pfn_glFramebufferTextureLayer)load("glFramebufferTextureLayer");
+	fp_glMapBufferRange = (pfn_glMapBufferRange)load("glMapBufferRange");
+	fp_glFlushMappedBufferRange = (pfn_glFlushMappedBufferRange)load("glFlushMappedBufferRange");
+	fp_glBindVertexArray = (pfn_glBindVertexArray)load("glBindVertexArray");
+	fp_glDeleteVertexArrays = (pfn_glDeleteVertexArrays)load("glDeleteVertexArrays");
+	fp_glGenVertexArrays = (pfn_glGenVertexArrays)load("glGenVertexArrays");
+	fp_glIsVertexArray = (pfn_glIsVertexArray)load("glIsVertexArray");
+}
+
+GLboolean GLAD_VERSION_3_1 = GL_FALSE;
+static void load_GL_VERSION_3_1(LOADER load) {
+	if(!GLAD_VERSION_3_1) return;
+	fp_glDrawArraysInstanced = (pfn_glDrawArraysInstanced)load("glDrawArraysInstanced");
+	fp_glDrawElementsInstanced = (pfn_glDrawElementsInstanced)load("glDrawElementsInstanced");
+	fp_glTexBuffer = (pfn_glTexBuffer)load("glTexBuffer");
+	fp_glPrimitiveRestartIndex = (pfn_glPrimitiveRestartIndex)load("glPrimitiveRestartIndex");
+	fp_glCopyBufferSubData = (pfn_glCopyBufferSubData)load("glCopyBufferSubData");
+	fp_glGetUniformIndices = (pfn_glGetUniformIndices)load("glGetUniformIndices");
+	fp_glGetActiveUniformsiv = (pfn_glGetActiveUniformsiv)load("glGetActiveUniformsiv");
+	fp_glGetActiveUniformName = (pfn_glGetActiveUniformName)load("glGetActiveUniformName");
+	fp_glGetUniformBlockIndex = (pfn_glGetUniformBlockIndex)load("glGetUniformBlockIndex");
+	fp_glGetActiveUniformBlockiv = (pfn_glGetActiveUniformBlockiv)load("glGetActiveUniformBlockiv");
+	fp_glGetActiveUniformBlockName = (pfn_glGetActiveUniformBlockName)load("glGetActiveUniformBlockName");
+	fp_glUniformBlockBinding = (pfn_glUniformBlockBinding)load("glUniformBlockBinding");
+}
+
+GLboolean GLAD_VERSION_3_2 = GL_FALSE;
+static void load_GL_VERSION_3_2(LOADER load) {
+	if(!GLAD_VERSION_3_2) return;
+	fp_glDrawElementsBaseVertex = (pfn_glDrawElementsBaseVertex)load("glDrawElementsBaseVertex");
+	fp_glDrawRangeElementsBaseVertex = (pfn_glDrawRangeElementsBaseVertex)load("glDrawRangeElementsBaseVertex");
+	fp_glDrawElementsInstancedBaseVertex = (pfn_glDrawElementsInstancedBaseVertex)load("glDrawElementsInstancedBaseVertex");
+	fp_glMultiDrawElementsBaseVertex = (pfn_glMultiDrawElementsBaseVertex)load("glMultiDrawElementsBaseVertex");
+	fp_glProvokingVertex = (pfn_glProvokingVertex)load("glProvokingVertex");
+	fp_glFenceSync = (pfn_glFenceSync)load("glFenceSync");
+	fp_glIsSync = (pfn_glIsSync)load("glIsSync");
+	fp_glDeleteSync = (pfn_glDeleteSync)load("glDeleteSync");
+	fp_glClientWaitSync = (pfn_glClientWaitSync)load("glClientWaitSync");
+	fp_glWaitSync = (pfn_glWaitSync)load("glWaitSync");
+	fp_glGetInteger64v = (pfn_glGetInteger64v)load("glGetInteger64v");
+	fp_glGetSynciv = (pfn_glGetSynciv)load("glGetSynciv");
+	fp_glGetInteger64i_v = (pfn_glGetInteger64i_v)load("glGetInteger64i_v");
+	fp_glGetBufferParameteri64v = (pfn_glGetBufferParameteri64v)load("glGetBufferParameteri64v");
+	fp_glFramebufferTexture = (pfn_glFramebufferTexture)load("glFramebufferTexture");
+	fp_glTexImage2DMultisample = (pfn_glTexImage2DMultisample)load("glTexImage2DMultisample");
+	fp_glTexImage3DMultisample = (pfn_glTexImage3DMultisample)load("glTexImage3DMultisample");
+	fp_glGetMultisamplefv = (pfn_glGetMultisamplefv)load("glGetMultisamplefv");
+	fp_glSampleMaski = (pfn_glSampleMaski)load("glSampleMaski");
+}
+
+GLboolean GLAD_VERSION_3_3 = GL_FALSE;
+static void load_GL_VERSION_3_3(LOADER load) {
+	if(!GLAD_VERSION_3_3) return;
+	fp_glBindFragDataLocationIndexed = (pfn_glBindFragDataLocationIndexed)load("glBindFragDataLocationIndexed");
+	fp_glGetFragDataIndex = (pfn_glGetFragDataIndex)load("glGetFragDataIndex");
+	fp_glGenSamplers = (pfn_glGenSamplers)load("glGenSamplers");
+	fp_glDeleteSamplers = (pfn_glDeleteSamplers)load("glDeleteSamplers");
+	fp_glIsSampler = (pfn_glIsSampler)load("glIsSampler");
+	fp_glBindSampler = (pfn_glBindSampler)load("glBindSampler");
+	fp_glSamplerParameteri = (pfn_glSamplerParameteri)load("glSamplerParameteri");
+	fp_glSamplerParameteriv = (pfn_glSamplerParameteriv)load("glSamplerParameteriv");
+	fp_glSamplerParameterf = (pfn_glSamplerParameterf)load("glSamplerParameterf");
+	fp_glSamplerParameterfv = (pfn_glSamplerParameterfv)load("glSamplerParameterfv");
+	fp_glSamplerParameterIiv = (pfn_glSamplerParameterIiv)load("glSamplerParameterIiv");
+	fp_glSamplerParameterIuiv = (pfn_glSamplerParameterIuiv)load("glSamplerParameterIuiv");
+	fp_glGetSamplerParameteriv = (pfn_glGetSamplerParameteriv)load("glGetSamplerParameteriv");
+	fp_glGetSamplerParameterIiv = (pfn_glGetSamplerParameterIiv)load("glGetSamplerParameterIiv");
+	fp_glGetSamplerParameterfv = (pfn_glGetSamplerParameterfv)load("glGetSamplerParameterfv");
+	fp_glGetSamplerParameterIuiv = (pfn_glGetSamplerParameterIuiv)load("glGetSamplerParameterIuiv");
+	fp_glQueryCounter = (pfn_glQueryCounter)load("glQueryCounter");
+	fp_glGetQueryObjecti64v = (pfn_glGetQueryObjecti64v)load("glGetQueryObjecti64v");
+	fp_glGetQueryObjectui64v = (pfn_glGetQueryObjectui64v)load("glGetQueryObjectui64v");
+	fp_glVertexAttribDivisor = (pfn_glVertexAttribDivisor)load("glVertexAttribDivisor");
+	fp_glVertexAttribP1ui = (pfn_glVertexAttribP1ui)load("glVertexAttribP1ui");
+	fp_glVertexAttribP1uiv = (pfn_glVertexAttribP1uiv)load("glVertexAttribP1uiv");
+	fp_glVertexAttribP2ui = (pfn_glVertexAttribP2ui)load("glVertexAttribP2ui");
+	fp_glVertexAttribP2uiv = (pfn_glVertexAttribP2uiv)load("glVertexAttribP2uiv");
+	fp_glVertexAttribP3ui = (pfn_glVertexAttribP3ui)load("glVertexAttribP3ui");
+	fp_glVertexAttribP3uiv = (pfn_glVertexAttribP3uiv)load("glVertexAttribP3uiv");
+	fp_glVertexAttribP4ui = (pfn_glVertexAttribP4ui)load("glVertexAttribP4ui");
+	fp_glVertexAttribP4uiv = (pfn_glVertexAttribP4uiv)load("glVertexAttribP4uiv");
+	fp_glVertexP2ui = (pfn_glVertexP2ui)load("glVertexP2ui");
+	fp_glVertexP2uiv = (pfn_glVertexP2uiv)load("glVertexP2uiv");
+	fp_glVertexP3ui = (pfn_glVertexP3ui)load("glVertexP3ui");
+	fp_glVertexP3uiv = (pfn_glVertexP3uiv)load("glVertexP3uiv");
+	fp_glVertexP4ui = (pfn_glVertexP4ui)load("glVertexP4ui");
+	fp_glVertexP4uiv = (pfn_glVertexP4uiv)load("glVertexP4uiv");
+	fp_glTexCoordP1ui = (pfn_glTexCoordP1ui)load("glTexCoordP1ui");
+	fp_glTexCoordP1uiv = (pfn_glTexCoordP1uiv)load("glTexCoordP1uiv");
+	fp_glTexCoordP2ui = (pfn_glTexCoordP2ui)load("glTexCoordP2ui");
+	fp_glTexCoordP2uiv = (pfn_glTexCoordP2uiv)load("glTexCoordP2uiv");
+	fp_glTexCoordP3ui = (pfn_glTexCoordP3ui)load("glTexCoordP3ui");
+	fp_glTexCoordP3uiv = (pfn_glTexCoordP3uiv)load("glTexCoordP3uiv");
+	fp_glTexCoordP4ui = (pfn_glTexCoordP4ui)load("glTexCoordP4ui");
+	fp_glTexCoordP4uiv = (pfn_glTexCoordP4uiv)load("glTexCoordP4uiv");
+	fp_glMultiTexCoordP1ui = (pfn_glMultiTexCoordP1ui)load("glMultiTexCoordP1ui");
+	fp_glMultiTexCoordP1uiv = (pfn_glMultiTexCoordP1uiv)load("glMultiTexCoordP1uiv");
+	fp_glMultiTexCoordP2ui = (pfn_glMultiTexCoordP2ui)load("glMultiTexCoordP2ui");
+	fp_glMultiTexCoordP2uiv = (pfn_glMultiTexCoordP2uiv)load("glMultiTexCoordP2uiv");
+	fp_glMultiTexCoordP3ui = (pfn_glMultiTexCoordP3ui)load("glMultiTexCoordP3ui");
+	fp_glMultiTexCoordP3uiv = (pfn_glMultiTexCoordP3uiv)load("glMultiTexCoordP3uiv");
+	fp_glMultiTexCoordP4ui = (pfn_glMultiTexCoordP4ui)load("glMultiTexCoordP4ui");
+	fp_glMultiTexCoordP4uiv = (pfn_glMultiTexCoordP4uiv)load("glMultiTexCoordP4uiv");
+	fp_glNormalP3ui = (pfn_glNormalP3ui)load("glNormalP3ui");
+	fp_glNormalP3uiv = (pfn_glNormalP3uiv)load("glNormalP3uiv");
+	fp_glColorP3ui = (pfn_glColorP3ui)load("glColorP3ui");
+	fp_glColorP3uiv = (pfn_glColorP3uiv)load("glColorP3uiv");
+	fp_glColorP4ui = (pfn_glColorP4ui)load("glColorP4ui");
+	fp_glColorP4uiv = (pfn_glColorP4uiv)load("glColorP4uiv");
+	fp_glSecondaryColorP3ui = (pfn_glSecondaryColorP3ui)load("glSecondaryColorP3ui");
+	fp_glSecondaryColorP3uiv = (pfn_glSecondaryColorP3uiv)load("glSecondaryColorP3uiv");
+}
+
+GLboolean GLAD_VERSION_4_0 = GL_FALSE;
+static void load_GL_VERSION_4_0(LOADER load) {
+	if(!GLAD_VERSION_4_0) return;
+	fp_glMinSampleShading = (pfn_glMinSampleShading)load("glMinSampleShading");
+	fp_glBlendEquationi = (pfn_glBlendEquationi)load("glBlendEquationi");
+	fp_glBlendEquationSeparatei = (pfn_glBlendEquationSeparatei)load("glBlendEquationSeparatei");
+	fp_glBlendFunci = (pfn_glBlendFunci)load("glBlendFunci");
+	fp_glBlendFuncSeparatei = (pfn_glBlendFuncSeparatei)load("glBlendFuncSeparatei");
+	fp_glDrawArraysIndirect = (pfn_glDrawArraysIndirect)load("glDrawArraysIndirect");
+	fp_glDrawElementsIndirect = (pfn_glDrawElementsIndirect)load("glDrawElementsIndirect");
+	fp_glUniform1d = (pfn_glUniform1d)load("glUniform1d");
+	fp_glUniform2d = (pfn_glUniform2d)load("glUniform2d");
+	fp_glUniform3d = (pfn_glUniform3d)load("glUniform3d");
+	fp_glUniform4d = (pfn_glUniform4d)load("glUniform4d");
+	fp_glUniform1dv = (pfn_glUniform1dv)load("glUniform1dv");
+	fp_glUniform2dv = (pfn_glUniform2dv)load("glUniform2dv");
+	fp_glUniform3dv = (pfn_glUniform3dv)load("glUniform3dv");
+	fp_glUniform4dv = (pfn_glUniform4dv)load("glUniform4dv");
+	fp_glUniformMatrix2dv = (pfn_glUniformMatrix2dv)load("glUniformMatrix2dv");
+	fp_glUniformMatrix3dv = (pfn_glUniformMatrix3dv)load("glUniformMatrix3dv");
+	fp_glUniformMatrix4dv = (pfn_glUniformMatrix4dv)load("glUniformMatrix4dv");
+	fp_glUniformMatrix2x3dv = (pfn_glUniformMatrix2x3dv)load("glUniformMatrix2x3dv");
+	fp_glUniformMatrix2x4dv = (pfn_glUniformMatrix2x4dv)load("glUniformMatrix2x4dv");
+	fp_glUniformMatrix3x2dv = (pfn_glUniformMatrix3x2dv)load("glUniformMatrix3x2dv");
+	fp_glUniformMatrix3x4dv = (pfn_glUniformMatrix3x4dv)load("glUniformMatrix3x4dv");
+	fp_glUniformMatrix4x2dv = (pfn_glUniformMatrix4x2dv)load("glUniformMatrix4x2dv");
+	fp_glUniformMatrix4x3dv = (pfn_glUniformMatrix4x3dv)load("glUniformMatrix4x3dv");
+	fp_glGetUniformdv = (pfn_glGetUniformdv)load("glGetUniformdv");
+	fp_glGetSubroutineUniformLocation = (pfn_glGetSubroutineUniformLocation)load("glGetSubroutineUniformLocation");
+	fp_glGetSubroutineIndex = (pfn_glGetSubroutineIndex)load("glGetSubroutineIndex");
+	fp_glGetActiveSubroutineUniformiv = (pfn_glGetActiveSubroutineUniformiv)load("glGetActiveSubroutineUniformiv");
+	fp_glGetActiveSubroutineUniformName = (pfn_glGetActiveSubroutineUniformName)load("glGetActiveSubroutineUniformName");
+	fp_glGetActiveSubroutineName = (pfn_glGetActiveSubroutineName)load("glGetActiveSubroutineName");
+	fp_glUniformSubroutinesuiv = (pfn_glUniformSubroutinesuiv)load("glUniformSubroutinesuiv");
+	fp_glGetUniformSubroutineuiv = (pfn_glGetUniformSubroutineuiv)load("glGetUniformSubroutineuiv");
+	fp_glGetProgramStageiv = (pfn_glGetProgramStageiv)load("glGetProgramStageiv");
+	fp_glPatchParameteri = (pfn_glPatchParameteri)load("glPatchParameteri");
+	fp_glPatchParameterfv = (pfn_glPatchParameterfv)load("glPatchParameterfv");
+	fp_glBindTransformFeedback = (pfn_glBindTransformFeedback)load("glBindTransformFeedback");
+	fp_glDeleteTransformFeedbacks = (pfn_glDeleteTransformFeedbacks)load("glDeleteTransformFeedbacks");
+	fp_glGenTransformFeedbacks = (pfn_glGenTransformFeedbacks)load("glGenTransformFeedbacks");
+	fp_glIsTransformFeedback = (pfn_glIsTransformFeedback)load("glIsTransformFeedback");
+	fp_glPauseTransformFeedback = (pfn_glPauseTransformFeedback)load("glPauseTransformFeedback");
+	fp_glResumeTransformFeedback = (pfn_glResumeTransformFeedback)load("glResumeTransformFeedback");
+	fp_glDrawTransformFeedback = (pfn_glDrawTransformFeedback)load("glDrawTransformFeedback");
+	fp_glDrawTransformFeedbackStream = (pfn_glDrawTransformFeedbackStream)load("glDrawTransformFeedbackStream");
+	fp_glBeginQueryIndexed = (pfn_glBeginQueryIndexed)load("glBeginQueryIndexed");
+	fp_glEndQueryIndexed = (pfn_glEndQueryIndexed)load("glEndQueryIndexed");
+	fp_glGetQueryIndexediv = (pfn_glGetQueryIndexediv)load("glGetQueryIndexediv");
+}
+
+GLboolean GLAD_VERSION_4_1 = GL_FALSE;
+static void load_GL_VERSION_4_1(LOADER load) {
+	if(!GLAD_VERSION_4_1) return;
+	fp_glReleaseShaderCompiler = (pfn_glReleaseShaderCompiler)load("glReleaseShaderCompiler");
+	fp_glShaderBinary = (pfn_glShaderBinary)load("glShaderBinary");
+	fp_glGetShaderPrecisionFormat = (pfn_glGetShaderPrecisionFormat)load("glGetShaderPrecisionFormat");
+	fp_glDepthRangef = (pfn_glDepthRangef)load("glDepthRangef");
+	fp_glClearDepthf = (pfn_glClearDepthf)load("glClearDepthf");
+	fp_glGetProgramBinary = (pfn_glGetProgramBinary)load("glGetProgramBinary");
+	fp_glProgramBinary = (pfn_glProgramBinary)load("glProgramBinary");
+	fp_glProgramParameteri = (pfn_glProgramParameteri)load("glProgramParameteri");
+	fp_glUseProgramStages = (pfn_glUseProgramStages)load("glUseProgramStages");
+	fp_glActiveShaderProgram = (pfn_glActiveShaderProgram)load("glActiveShaderProgram");
+	fp_glCreateShaderProgramv = (pfn_glCreateShaderProgramv)load("glCreateShaderProgramv");
+	fp_glBindProgramPipeline = (pfn_glBindProgramPipeline)load("glBindProgramPipeline");
+	fp_glDeleteProgramPipelines = (pfn_glDeleteProgramPipelines)load("glDeleteProgramPipelines");
+	fp_glGenProgramPipelines = (pfn_glGenProgramPipelines)load("glGenProgramPipelines");
+	fp_glIsProgramPipeline = (pfn_glIsProgramPipeline)load("glIsProgramPipeline");
+	fp_glGetProgramPipelineiv = (pfn_glGetProgramPipelineiv)load("glGetProgramPipelineiv");
+	fp_glProgramUniform1i = (pfn_glProgramUniform1i)load("glProgramUniform1i");
+	fp_glProgramUniform1iv = (pfn_glProgramUniform1iv)load("glProgramUniform1iv");
+	fp_glProgramUniform1f = (pfn_glProgramUniform1f)load("glProgramUniform1f");
+	fp_glProgramUniform1fv = (pfn_glProgramUniform1fv)load("glProgramUniform1fv");
+	fp_glProgramUniform1d = (pfn_glProgramUniform1d)load("glProgramUniform1d");
+	fp_glProgramUniform1dv = (pfn_glProgramUniform1dv)load("glProgramUniform1dv");
+	fp_glProgramUniform1ui = (pfn_glProgramUniform1ui)load("glProgramUniform1ui");
+	fp_glProgramUniform1uiv = (pfn_glProgramUniform1uiv)load("glProgramUniform1uiv");
+	fp_glProgramUniform2i = (pfn_glProgramUniform2i)load("glProgramUniform2i");
+	fp_glProgramUniform2iv = (pfn_glProgramUniform2iv)load("glProgramUniform2iv");
+	fp_glProgramUniform2f = (pfn_glProgramUniform2f)load("glProgramUniform2f");
+	fp_glProgramUniform2fv = (pfn_glProgramUniform2fv)load("glProgramUniform2fv");
+	fp_glProgramUniform2d = (pfn_glProgramUniform2d)load("glProgramUniform2d");
+	fp_glProgramUniform2dv = (pfn_glProgramUniform2dv)load("glProgramUniform2dv");
+	fp_glProgramUniform2ui = (pfn_glProgramUniform2ui)load("glProgramUniform2ui");
+	fp_glProgramUniform2uiv = (pfn_glProgramUniform2uiv)load("glProgramUniform2uiv");
+	fp_glProgramUniform3i = (pfn_glProgramUniform3i)load("glProgramUniform3i");
+	fp_glProgramUniform3iv = (pfn_glProgramUniform3iv)load("glProgramUniform3iv");
+	fp_glProgramUniform3f = (pfn_glProgramUniform3f)load("glProgramUniform3f");
+	fp_glProgramUniform3fv = (pfn_glProgramUniform3fv)load("glProgramUniform3fv");
+	fp_glProgramUniform3d = (pfn_glProgramUniform3d)load("glProgramUniform3d");
+	fp_glProgramUniform3dv = (pfn_glProgramUniform3dv)load("glProgramUniform3dv");
+	fp_glProgramUniform3ui = (pfn_glProgramUniform3ui)load("glProgramUniform3ui");
+	fp_glProgramUniform3uiv = (pfn_glProgramUniform3uiv)load("glProgramUniform3uiv");
+	fp_glProgramUniform4i = (pfn_glProgramUniform4i)load("glProgramUniform4i");
+	fp_glProgramUniform4iv = (pfn_glProgramUniform4iv)load("glProgramUniform4iv");
+	fp_glProgramUniform4f = (pfn_glProgramUniform4f)load("glProgramUniform4f");
+	fp_glProgramUniform4fv = (pfn_glProgramUniform4fv)load("glProgramUniform4fv");
+	fp_glProgramUniform4d = (pfn_glProgramUniform4d)load("glProgramUniform4d");
+	fp_glProgramUniform4dv = (pfn_glProgramUniform4dv)load("glProgramUniform4dv");
+	fp_glProgramUniform4ui = (pfn_glProgramUniform4ui)load("glProgramUniform4ui");
+	fp_glProgramUniform4uiv = (pfn_glProgramUniform4uiv)load("glProgramUniform4uiv");
+	fp_glProgramUniformMatrix2fv = (pfn_glProgramUniformMatrix2fv)load("glProgramUniformMatrix2fv");
+	fp_glProgramUniformMatrix3fv = (pfn_glProgramUniformMatrix3fv)load("glProgramUniformMatrix3fv");
+	fp_glProgramUniformMatrix4fv = (pfn_glProgramUniformMatrix4fv)load("glProgramUniformMatrix4fv");
+	fp_glProgramUniformMatrix2dv = (pfn_glProgramUniformMatrix2dv)load("glProgramUniformMatrix2dv");
+	fp_glProgramUniformMatrix3dv = (pfn_glProgramUniformMatrix3dv)load("glProgramUniformMatrix3dv");
+	fp_glProgramUniformMatrix4dv = (pfn_glProgramUniformMatrix4dv)load("glProgramUniformMatrix4dv");
+	fp_glProgramUniformMatrix2x3fv = (pfn_glProgramUniformMatrix2x3fv)load("glProgramUniformMatrix2x3fv");
+	fp_glProgramUniformMatrix3x2fv = (pfn_glProgramUniformMatrix3x2fv)load("glProgramUniformMatrix3x2fv");
+	fp_glProgramUniformMatrix2x4fv = (pfn_glProgramUniformMatrix2x4fv)load("glProgramUniformMatrix2x4fv");
+	fp_glProgramUniformMatrix4x2fv = (pfn_glProgramUniformMatrix4x2fv)load("glProgramUniformMatrix4x2fv");
+	fp_glProgramUniformMatrix3x4fv = (pfn_glProgramUniformMatrix3x4fv)load("glProgramUniformMatrix3x4fv");
+	fp_glProgramUniformMatrix4x3fv = (pfn_glProgramUniformMatrix4x3fv)load("glProgramUniformMatrix4x3fv");
+	fp_glProgramUniformMatrix2x3dv = (pfn_glProgramUniformMatrix2x3dv)load("glProgramUniformMatrix2x3dv");
+	fp_glProgramUniformMatrix3x2dv = (pfn_glProgramUniformMatrix3x2dv)load("glProgramUniformMatrix3x2dv");
+	fp_glProgramUniformMatrix2x4dv = (pfn_glProgramUniformMatrix2x4dv)load("glProgramUniformMatrix2x4dv");
+	fp_glProgramUniformMatrix4x2dv = (pfn_glProgramUniformMatrix4x2dv)load("glProgramUniformMatrix4x2dv");
+	fp_glProgramUniformMatrix3x4dv = (pfn_glProgramUniformMatrix3x4dv)load("glProgramUniformMatrix3x4dv");
+	fp_glProgramUniformMatrix4x3dv = (pfn_glProgramUniformMatrix4x3dv)load("glProgramUniformMatrix4x3dv");
+	fp_glValidateProgramPipeline = (pfn_glValidateProgramPipeline)load("glValidateProgramPipeline");
+	fp_glGetProgramPipelineInfoLog = (pfn_glGetProgramPipelineInfoLog)load("glGetProgramPipelineInfoLog");
+	fp_glVertexAttribL1d = (pfn_glVertexAttribL1d)load("glVertexAttribL1d");
+	fp_glVertexAttribL2d = (pfn_glVertexAttribL2d)load("glVertexAttribL2d");
+	fp_glVertexAttribL3d = (pfn_glVertexAttribL3d)load("glVertexAttribL3d");
+	fp_glVertexAttribL4d = (pfn_glVertexAttribL4d)load("glVertexAttribL4d");
+	fp_glVertexAttribL1dv = (pfn_glVertexAttribL1dv)load("glVertexAttribL1dv");
+	fp_glVertexAttribL2dv = (pfn_glVertexAttribL2dv)load("glVertexAttribL2dv");
+	fp_glVertexAttribL3dv = (pfn_glVertexAttribL3dv)load("glVertexAttribL3dv");
+	fp_glVertexAttribL4dv = (pfn_glVertexAttribL4dv)load("glVertexAttribL4dv");
+	fp_glVertexAttribLPointer = (pfn_glVertexAttribLPointer)load("glVertexAttribLPointer");
+	fp_glGetVertexAttribLdv = (pfn_glGetVertexAttribLdv)load("glGetVertexAttribLdv");
+	fp_glViewportArrayv = (pfn_glViewportArrayv)load("glViewportArrayv");
+	fp_glViewportIndexedf = (pfn_glViewportIndexedf)load("glViewportIndexedf");
+	fp_glViewportIndexedfv = (pfn_glViewportIndexedfv)load("glViewportIndexedfv");
+	fp_glScissorArrayv = (pfn_glScissorArrayv)load("glScissorArrayv");
+	fp_glScissorIndexed = (pfn_glScissorIndexed)load("glScissorIndexed");
+	fp_glScissorIndexedv = (pfn_glScissorIndexedv)load("glScissorIndexedv");
+	fp_glDepthRangeArrayv = (pfn_glDepthRangeArrayv)load("glDepthRangeArrayv");
+	fp_glDepthRangeIndexed = (pfn_glDepthRangeIndexed)load("glDepthRangeIndexed");
+	fp_glGetFloati_v = (pfn_glGetFloati_v)load("glGetFloati_v");
+	fp_glGetDoublei_v = (pfn_glGetDoublei_v)load("glGetDoublei_v");
+}
+
+GLboolean GLAD_VERSION_4_2 = GL_FALSE;
+static void load_GL_VERSION_4_2(LOADER load) {
+	if(!GLAD_VERSION_4_2) return;
+	fp_glDrawArraysInstancedBaseInstance = (pfn_glDrawArraysInstancedBaseInstance)load("glDrawArraysInstancedBaseInstance");
+	fp_glDrawElementsInstancedBaseInstance = (pfn_glDrawElementsInstancedBaseInstance)load("glDrawElementsInstancedBaseInstance");
+	fp_glDrawElementsInstancedBaseVertexBaseInstance = (pfn_glDrawElementsInstancedBaseVertexBaseInstance)load("glDrawElementsInstancedBaseVertexBaseInstance");
+	fp_glGetInternalformativ = (pfn_glGetInternalformativ)load("glGetInternalformativ");
+	fp_glGetActiveAtomicCounterBufferiv = (pfn_glGetActiveAtomicCounterBufferiv)load("glGetActiveAtomicCounterBufferiv");
+	fp_glBindImageTexture = (pfn_glBindImageTexture)load("glBindImageTexture");
+	fp_glMemoryBarrier = (pfn_glMemoryBarrier)load("glMemoryBarrier");
+	fp_glTexStorage1D = (pfn_glTexStorage1D)load("glTexStorage1D");
+	fp_glTexStorage2D = (pfn_glTexStorage2D)load("glTexStorage2D");
+	fp_glTexStorage3D = (pfn_glTexStorage3D)load("glTexStorage3D");
+	fp_glDrawTransformFeedbackInstanced = (pfn_glDrawTransformFeedbackInstanced)load("glDrawTransformFeedbackInstanced");
+	fp_glDrawTransformFeedbackStreamInstanced = (pfn_glDrawTransformFeedbackStreamInstanced)load("glDrawTransformFeedbackStreamInstanced");
+}
+
+GLboolean GLAD_VERSION_4_3 = GL_FALSE;
+static void load_GL_VERSION_4_3(LOADER load) {
+	if(!GLAD_VERSION_4_3) return;
+	fp_glClearBufferData = (pfn_glClearBufferData)load("glClearBufferData");
+	fp_glClearBufferSubData = (pfn_glClearBufferSubData)load("glClearBufferSubData");
+	fp_glDispatchCompute = (pfn_glDispatchCompute)load("glDispatchCompute");
+	fp_glDispatchComputeIndirect = (pfn_glDispatchComputeIndirect)load("glDispatchComputeIndirect");
+	fp_glCopyImageSubData = (pfn_glCopyImageSubData)load("glCopyImageSubData");
+	fp_glFramebufferParameteri = (pfn_glFramebufferParameteri)load("glFramebufferParameteri");
+	fp_glGetFramebufferParameteriv = (pfn_glGetFramebufferParameteriv)load("glGetFramebufferParameteriv");
+	fp_glGetInternalformati64v = (pfn_glGetInternalformati64v)load("glGetInternalformati64v");
+	fp_glInvalidateTexSubImage = (pfn_glInvalidateTexSubImage)load("glInvalidateTexSubImage");
+	fp_glInvalidateTexImage = (pfn_glInvalidateTexImage)load("glInvalidateTexImage");
+	fp_glInvalidateBufferSubData = (pfn_glInvalidateBufferSubData)load("glInvalidateBufferSubData");
+	fp_glInvalidateBufferData = (pfn_glInvalidateBufferData)load("glInvalidateBufferData");
+	fp_glInvalidateFramebuffer = (pfn_glInvalidateFramebuffer)load("glInvalidateFramebuffer");
+	fp_glInvalidateSubFramebuffer = (pfn_glInvalidateSubFramebuffer)load("glInvalidateSubFramebuffer");
+	fp_glMultiDrawArraysIndirect = (pfn_glMultiDrawArraysIndirect)load("glMultiDrawArraysIndirect");
+	fp_glMultiDrawElementsIndirect = (pfn_glMultiDrawElementsIndirect)load("glMultiDrawElementsIndirect");
+	fp_glGetProgramInterfaceiv = (pfn_glGetProgramInterfaceiv)load("glGetProgramInterfaceiv");
+	fp_glGetProgramResourceIndex = (pfn_glGetProgramResourceIndex)load("glGetProgramResourceIndex");
+	fp_glGetProgramResourceName = (pfn_glGetProgramResourceName)load("glGetProgramResourceName");
+	fp_glGetProgramResourceiv = (pfn_glGetProgramResourceiv)load("glGetProgramResourceiv");
+	fp_glGetProgramResourceLocation = (pfn_glGetProgramResourceLocation)load("glGetProgramResourceLocation");
+	fp_glGetProgramResourceLocationIndex = (pfn_glGetProgramResourceLocationIndex)load("glGetProgramResourceLocationIndex");
+	fp_glShaderStorageBlockBinding = (pfn_glShaderStorageBlockBinding)load("glShaderStorageBlockBinding");
+	fp_glTexBufferRange = (pfn_glTexBufferRange)load("glTexBufferRange");
+	fp_glTexStorage2DMultisample = (pfn_glTexStorage2DMultisample)load("glTexStorage2DMultisample");
+	fp_glTexStorage3DMultisample = (pfn_glTexStorage3DMultisample)load("glTexStorage3DMultisample");
+	fp_glTextureView = (pfn_glTextureView)load("glTextureView");
+	fp_glBindVertexBuffer = (pfn_glBindVertexBuffer)load("glBindVertexBuffer");
+	fp_glVertexAttribFormat = (pfn_glVertexAttribFormat)load("glVertexAttribFormat");
+	fp_glVertexAttribIFormat = (pfn_glVertexAttribIFormat)load("glVertexAttribIFormat");
+	fp_glVertexAttribLFormat = (pfn_glVertexAttribLFormat)load("glVertexAttribLFormat");
+	fp_glVertexAttribBinding = (pfn_glVertexAttribBinding)load("glVertexAttribBinding");
+	fp_glVertexBindingDivisor = (pfn_glVertexBindingDivisor)load("glVertexBindingDivisor");
+	fp_glDebugMessageControl = (pfn_glDebugMessageControl)load("glDebugMessageControl");
+	fp_glDebugMessageInsert = (pfn_glDebugMessageInsert)load("glDebugMessageInsert");
+	fp_glDebugMessageCallback = (pfn_glDebugMessageCallback)load("glDebugMessageCallback");
+	fp_glGetDebugMessageLog = (pfn_glGetDebugMessageLog)load("glGetDebugMessageLog");
+	fp_glPushDebugGroup = (pfn_glPushDebugGroup)load("glPushDebugGroup");
+	fp_glPopDebugGroup = (pfn_glPopDebugGroup)load("glPopDebugGroup");
+	fp_glObjectLabel = (pfn_glObjectLabel)load("glObjectLabel");
+	fp_glGetObjectLabel = (pfn_glGetObjectLabel)load("glGetObjectLabel");
+	fp_glObjectPtrLabel = (pfn_glObjectPtrLabel)load("glObjectPtrLabel");
+	fp_glGetObjectPtrLabel = (pfn_glGetObjectPtrLabel)load("glGetObjectPtrLabel");
+	fp_glGetPointerv = (pfn_glGetPointerv)load("glGetPointerv");
+	fp_glGetPointerv = (pfn_glGetPointerv)load("glGetPointerv");
+}
+
+GLboolean GLAD_VERSION_4_4 = GL_FALSE;
+static void load_GL_VERSION_4_4(LOADER load) {
+	if(!GLAD_VERSION_4_4) return;
+	fp_glBufferStorage = (pfn_glBufferStorage)load("glBufferStorage");
+	fp_glClearTexImage = (pfn_glClearTexImage)load("glClearTexImage");
+	fp_glClearTexSubImage = (pfn_glClearTexSubImage)load("glClearTexSubImage");
+	fp_glBindBuffersBase = (pfn_glBindBuffersBase)load("glBindBuffersBase");
+	fp_glBindBuffersRange = (pfn_glBindBuffersRange)load("glBindBuffersRange");
+	fp_glBindTextures = (pfn_glBindTextures)load("glBindTextures");
+	fp_glBindSamplers = (pfn_glBindSamplers)load("glBindSamplers");
+	fp_glBindImageTextures = (pfn_glBindImageTextures)load("glBindImageTextures");
+	fp_glBindVertexBuffers = (pfn_glBindVertexBuffers)load("glBindVertexBuffers");
+}
+
+GLboolean GLAD_VERSION_4_5 = GL_FALSE;
+static void load_GL_VERSION_4_5(LOADER load) {
+	if(!GLAD_VERSION_4_5) return;
+	fp_glClipControl = (pfn_glClipControl)load("glClipControl");
+	fp_glCreateTransformFeedbacks = (pfn_glCreateTransformFeedbacks)load("glCreateTransformFeedbacks");
+	fp_glTransformFeedbackBufferBase = (pfn_glTransformFeedbackBufferBase)load("glTransformFeedbackBufferBase");
+	fp_glTransformFeedbackBufferRange = (pfn_glTransformFeedbackBufferRange)load("glTransformFeedbackBufferRange");
+	fp_glGetTransformFeedbackiv = (pfn_glGetTransformFeedbackiv)load("glGetTransformFeedbackiv");
+	fp_glGetTransformFeedbacki_v = (pfn_glGetTransformFeedbacki_v)load("glGetTransformFeedbacki_v");
+	fp_glGetTransformFeedbacki64_v = (pfn_glGetTransformFeedbacki64_v)load("glGetTransformFeedbacki64_v");
+	fp_glCreateBuffers = (pfn_glCreateBuffers)load("glCreateBuffers");
+	fp_glNamedBufferStorage = (pfn_glNamedBufferStorage)load("glNamedBufferStorage");
+	fp_glNamedBufferData = (pfn_glNamedBufferData)load("glNamedBufferData");
+	fp_glNamedBufferSubData = (pfn_glNamedBufferSubData)load("glNamedBufferSubData");
+	fp_glCopyNamedBufferSubData = (pfn_glCopyNamedBufferSubData)load("glCopyNamedBufferSubData");
+	fp_glClearNamedBufferData = (pfn_glClearNamedBufferData)load("glClearNamedBufferData");
+	fp_glClearNamedBufferSubData = (pfn_glClearNamedBufferSubData)load("glClearNamedBufferSubData");
+	fp_glMapNamedBuffer = (pfn_glMapNamedBuffer)load("glMapNamedBuffer");
+	fp_glMapNamedBufferRange = (pfn_glMapNamedBufferRange)load("glMapNamedBufferRange");
+	fp_glUnmapNamedBuffer = (pfn_glUnmapNamedBuffer)load("glUnmapNamedBuffer");
+	fp_glFlushMappedNamedBufferRange = (pfn_glFlushMappedNamedBufferRange)load("glFlushMappedNamedBufferRange");
+	fp_glGetNamedBufferParameteriv = (pfn_glGetNamedBufferParameteriv)load("glGetNamedBufferParameteriv");
+	fp_glGetNamedBufferParameteri64v = (pfn_glGetNamedBufferParameteri64v)load("glGetNamedBufferParameteri64v");
+	fp_glGetNamedBufferPointerv = (pfn_glGetNamedBufferPointerv)load("glGetNamedBufferPointerv");
+	fp_glGetNamedBufferSubData = (pfn_glGetNamedBufferSubData)load("glGetNamedBufferSubData");
+	fp_glCreateFramebuffers = (pfn_glCreateFramebuffers)load("glCreateFramebuffers");
+	fp_glNamedFramebufferRenderbuffer = (pfn_glNamedFramebufferRenderbuffer)load("glNamedFramebufferRenderbuffer");
+	fp_glNamedFramebufferParameteri = (pfn_glNamedFramebufferParameteri)load("glNamedFramebufferParameteri");
+	fp_glNamedFramebufferTexture = (pfn_glNamedFramebufferTexture)load("glNamedFramebufferTexture");
+	fp_glNamedFramebufferTextureLayer = (pfn_glNamedFramebufferTextureLayer)load("glNamedFramebufferTextureLayer");
+	fp_glNamedFramebufferDrawBuffer = (pfn_glNamedFramebufferDrawBuffer)load("glNamedFramebufferDrawBuffer");
+	fp_glNamedFramebufferDrawBuffers = (pfn_glNamedFramebufferDrawBuffers)load("glNamedFramebufferDrawBuffers");
+	fp_glNamedFramebufferReadBuffer = (pfn_glNamedFramebufferReadBuffer)load("glNamedFramebufferReadBuffer");
+	fp_glInvalidateNamedFramebufferData = (pfn_glInvalidateNamedFramebufferData)load("glInvalidateNamedFramebufferData");
+	fp_glInvalidateNamedFramebufferSubData = (pfn_glInvalidateNamedFramebufferSubData)load("glInvalidateNamedFramebufferSubData");
+	fp_glClearNamedFramebufferiv = (pfn_glClearNamedFramebufferiv)load("glClearNamedFramebufferiv");
+	fp_glClearNamedFramebufferuiv = (pfn_glClearNamedFramebufferuiv)load("glClearNamedFramebufferuiv");
+	fp_glClearNamedFramebufferfv = (pfn_glClearNamedFramebufferfv)load("glClearNamedFramebufferfv");
+	fp_glClearNamedFramebufferfi = (pfn_glClearNamedFramebufferfi)load("glClearNamedFramebufferfi");
+	fp_glBlitNamedFramebuffer = (pfn_glBlitNamedFramebuffer)load("glBlitNamedFramebuffer");
+	fp_glCheckNamedFramebufferStatus = (pfn_glCheckNamedFramebufferStatus)load("glCheckNamedFramebufferStatus");
+	fp_glGetNamedFramebufferParameteriv = (pfn_glGetNamedFramebufferParameteriv)load("glGetNamedFramebufferParameteriv");
+	fp_glGetNamedFramebufferAttachmentParameteriv = (pfn_glGetNamedFramebufferAttachmentParameteriv)load("glGetNamedFramebufferAttachmentParameteriv");
+	fp_glCreateRenderbuffers = (pfn_glCreateRenderbuffers)load("glCreateRenderbuffers");
+	fp_glNamedRenderbufferStorage = (pfn_glNamedRenderbufferStorage)load("glNamedRenderbufferStorage");
+	fp_glNamedRenderbufferStorageMultisample = (pfn_glNamedRenderbufferStorageMultisample)load("glNamedRenderbufferStorageMultisample");
+	fp_glGetNamedRenderbufferParameteriv = (pfn_glGetNamedRenderbufferParameteriv)load("glGetNamedRenderbufferParameteriv");
+	fp_glCreateTextures = (pfn_glCreateTextures)load("glCreateTextures");
+	fp_glTextureBuffer = (pfn_glTextureBuffer)load("glTextureBuffer");
+	fp_glTextureBufferRange = (pfn_glTextureBufferRange)load("glTextureBufferRange");
+	fp_glTextureStorage1D = (pfn_glTextureStorage1D)load("glTextureStorage1D");
+	fp_glTextureStorage2D = (pfn_glTextureStorage2D)load("glTextureStorage2D");
+	fp_glTextureStorage3D = (pfn_glTextureStorage3D)load("glTextureStorage3D");
+	fp_glTextureStorage2DMultisample = (pfn_glTextureStorage2DMultisample)load("glTextureStorage2DMultisample");
+	fp_glTextureStorage3DMultisample = (pfn_glTextureStorage3DMultisample)load("glTextureStorage3DMultisample");
+	fp_glTextureSubImage1D = (pfn_glTextureSubImage1D)load("glTextureSubImage1D");
+	fp_glTextureSubImage2D = (pfn_glTextureSubImage2D)load("glTextureSubImage2D");
+	fp_glTextureSubImage3D = (pfn_glTextureSubImage3D)load("glTextureSubImage3D");
+	fp_glCompressedTextureSubImage1D = (pfn_glCompressedTextureSubImage1D)load("glCompressedTextureSubImage1D");
+	fp_glCompressedTextureSubImage2D = (pfn_glCompressedTextureSubImage2D)load("glCompressedTextureSubImage2D");
+	fp_glCompressedTextureSubImage3D = (pfn_glCompressedTextureSubImage3D)load("glCompressedTextureSubImage3D");
+	fp_glCopyTextureSubImage1D = (pfn_glCopyTextureSubImage1D)load("glCopyTextureSubImage1D");
+	fp_glCopyTextureSubImage2D = (pfn_glCopyTextureSubImage2D)load("glCopyTextureSubImage2D");
+	fp_glCopyTextureSubImage3D = (pfn_glCopyTextureSubImage3D)load("glCopyTextureSubImage3D");
+	fp_glTextureParameterf = (pfn_glTextureParameterf)load("glTextureParameterf");
+	fp_glTextureParameterfv = (pfn_glTextureParameterfv)load("glTextureParameterfv");
+	fp_glTextureParameteri = (pfn_glTextureParameteri)load("glTextureParameteri");
+	fp_glTextureParameterIiv = (pfn_glTextureParameterIiv)load("glTextureParameterIiv");
+	fp_glTextureParameterIuiv = (pfn_glTextureParameterIuiv)load("glTextureParameterIuiv");
+	fp_glTextureParameteriv = (pfn_glTextureParameteriv)load("glTextureParameteriv");
+	fp_glGenerateTextureMipmap = (pfn_glGenerateTextureMipmap)load("glGenerateTextureMipmap");
+	fp_glBindTextureUnit = (pfn_glBindTextureUnit)load("glBindTextureUnit");
+	fp_glGetTextureImage = (pfn_glGetTextureImage)load("glGetTextureImage");
+	fp_glGetCompressedTextureImage = (pfn_glGetCompressedTextureImage)load("glGetCompressedTextureImage");
+	fp_glGetTextureLevelParameterfv = (pfn_glGetTextureLevelParameterfv)load("glGetTextureLevelParameterfv");
+	fp_glGetTextureLevelParameteriv = (pfn_glGetTextureLevelParameteriv)load("glGetTextureLevelParameteriv");
+	fp_glGetTextureParameterfv = (pfn_glGetTextureParameterfv)load("glGetTextureParameterfv");
+	fp_glGetTextureParameterIiv = (pfn_glGetTextureParameterIiv)load("glGetTextureParameterIiv");
+	fp_glGetTextureParameterIuiv = (pfn_glGetTextureParameterIuiv)load("glGetTextureParameterIuiv");
+	fp_glGetTextureParameteriv = (pfn_glGetTextureParameteriv)load("glGetTextureParameteriv");
+	fp_glCreateVertexArrays = (pfn_glCreateVertexArrays)load("glCreateVertexArrays");
+	fp_glDisableVertexArrayAttrib = (pfn_glDisableVertexArrayAttrib)load("glDisableVertexArrayAttrib");
+	fp_glEnableVertexArrayAttrib = (pfn_glEnableVertexArrayAttrib)load("glEnableVertexArrayAttrib");
+	fp_glVertexArrayElementBuffer = (pfn_glVertexArrayElementBuffer)load("glVertexArrayElementBuffer");
+	fp_glVertexArrayVertexBuffer = (pfn_glVertexArrayVertexBuffer)load("glVertexArrayVertexBuffer");
+	fp_glVertexArrayVertexBuffers = (pfn_glVertexArrayVertexBuffers)load("glVertexArrayVertexBuffers");
+	fp_glVertexArrayAttribBinding = (pfn_glVertexArrayAttribBinding)load("glVertexArrayAttribBinding");
+	fp_glVertexArrayAttribFormat = (pfn_glVertexArrayAttribFormat)load("glVertexArrayAttribFormat");
+	fp_glVertexArrayAttribIFormat = (pfn_glVertexArrayAttribIFormat)load("glVertexArrayAttribIFormat");
+	fp_glVertexArrayAttribLFormat = (pfn_glVertexArrayAttribLFormat)load("glVertexArrayAttribLFormat");
+	fp_glVertexArrayBindingDivisor = (pfn_glVertexArrayBindingDivisor)load("glVertexArrayBindingDivisor");
+	fp_glGetVertexArrayiv = (pfn_glGetVertexArrayiv)load("glGetVertexArrayiv");
+	fp_glGetVertexArrayIndexediv = (pfn_glGetVertexArrayIndexediv)load("glGetVertexArrayIndexediv");
+	fp_glGetVertexArrayIndexed64iv = (pfn_glGetVertexArrayIndexed64iv)load("glGetVertexArrayIndexed64iv");
+	fp_glCreateSamplers = (pfn_glCreateSamplers)load("glCreateSamplers");
+	fp_glCreateProgramPipelines = (pfn_glCreateProgramPipelines)load("glCreateProgramPipelines");
+	fp_glCreateQueries = (pfn_glCreateQueries)load("glCreateQueries");
+	fp_glMemoryBarrierByRegion = (pfn_glMemoryBarrierByRegion)load("glMemoryBarrierByRegion");
+	fp_glGetTextureSubImage = (pfn_glGetTextureSubImage)load("glGetTextureSubImage");
+	fp_glGetCompressedTextureSubImage = (pfn_glGetCompressedTextureSubImage)load("glGetCompressedTextureSubImage");
+	fp_glGetGraphicsResetStatus = (pfn_glGetGraphicsResetStatus)load("glGetGraphicsResetStatus");
+	fp_glGetnCompressedTexImage = (pfn_glGetnCompressedTexImage)load("glGetnCompressedTexImage");
+	fp_glGetnTexImage = (pfn_glGetnTexImage)load("glGetnTexImage");
+	fp_glGetnUniformdv = (pfn_glGetnUniformdv)load("glGetnUniformdv");
+	fp_glGetnUniformfv = (pfn_glGetnUniformfv)load("glGetnUniformfv");
+	fp_glGetnUniformiv = (pfn_glGetnUniformiv)load("glGetnUniformiv");
+	fp_glGetnUniformuiv = (pfn_glGetnUniformuiv)load("glGetnUniformuiv");
+	fp_glReadnPixels = (pfn_glReadnPixels)load("glReadnPixels");
+	fp_glGetnMapdv = (pfn_glGetnMapdv)load("glGetnMapdv");
+	fp_glGetnMapfv = (pfn_glGetnMapfv)load("glGetnMapfv");
+	fp_glGetnMapiv = (pfn_glGetnMapiv)load("glGetnMapiv");
+	fp_glGetnPixelMapfv = (pfn_glGetnPixelMapfv)load("glGetnPixelMapfv");
+	fp_glGetnPixelMapuiv = (pfn_glGetnPixelMapuiv)load("glGetnPixelMapuiv");
+	fp_glGetnPixelMapusv = (pfn_glGetnPixelMapusv)load("glGetnPixelMapusv");
+	fp_glGetnPolygonStipple = (pfn_glGetnPolygonStipple)load("glGetnPolygonStipple");
+	fp_glGetnColorTable = (pfn_glGetnColorTable)load("glGetnColorTable");
+	fp_glGetnConvolutionFilter = (pfn_glGetnConvolutionFilter)load("glGetnConvolutionFilter");
+	fp_glGetnSeparableFilter = (pfn_glGetnSeparableFilter)load("glGetnSeparableFilter");
+	fp_glGetnHistogram = (pfn_glGetnHistogram)load("glGetnHistogram");
+	fp_glGetnMinmax = (pfn_glGetnMinmax)load("glGetnMinmax");
+	fp_glTextureBarrier = (pfn_glTextureBarrier)load("glTextureBarrier");
+}
+
+GLboolean GLAD_ES_VERSION_2_0 = GL_FALSE;
+static void load_GL_ES_VERSION_2_0(LOADER load) {
+	if(!GLAD_ES_VERSION_2_0) return;
+	fp_glActiveTexture = (pfn_glActiveTexture)load("glActiveTexture");
+	fp_glAttachShader = (pfn_glAttachShader)load("glAttachShader");
+	fp_glBindAttribLocation = (pfn_glBindAttribLocation)load("glBindAttribLocation");
+	fp_glBindBuffer = (pfn_glBindBuffer)load("glBindBuffer");
+	fp_glBindFramebuffer = (pfn_glBindFramebuffer)load("glBindFramebuffer");
+	fp_glBindRenderbuffer = (pfn_glBindRenderbuffer)load("glBindRenderbuffer");
+	fp_glBindTexture = (pfn_glBindTexture)load("glBindTexture");
+	fp_glBlendColor = (pfn_glBlendColor)load("glBlendColor");
+	fp_glBlendEquation = (pfn_glBlendEquation)load("glBlendEquation");
+	fp_glBlendEquationSeparate = (pfn_glBlendEquationSeparate)load("glBlendEquationSeparate");
+	fp_glBlendFunc = (pfn_glBlendFunc)load("glBlendFunc");
+	fp_glBlendFuncSeparate = (pfn_glBlendFuncSeparate)load("glBlendFuncSeparate");
+	fp_glBufferData = (pfn_glBufferData)load("glBufferData");
+	fp_glBufferSubData = (pfn_glBufferSubData)load("glBufferSubData");
+	fp_glCheckFramebufferStatus = (pfn_glCheckFramebufferStatus)load("glCheckFramebufferStatus");
+	fp_glClear = (pfn_glClear)load("glClear");
+	fp_glClearColor = (pfn_glClearColor)load("glClearColor");
+	fp_glClearDepthf = (pfn_glClearDepthf)load("glClearDepthf");
+	fp_glClearStencil = (pfn_glClearStencil)load("glClearStencil");
+	fp_glColorMask = (pfn_glColorMask)load("glColorMask");
+	fp_glCompileShader = (pfn_glCompileShader)load("glCompileShader");
+	fp_glCompressedTexImage2D = (pfn_glCompressedTexImage2D)load("glCompressedTexImage2D");
+	fp_glCompressedTexSubImage2D = (pfn_glCompressedTexSubImage2D)load("glCompressedTexSubImage2D");
+	fp_glCopyTexImage2D = (pfn_glCopyTexImage2D)load("glCopyTexImage2D");
+	fp_glCopyTexSubImage2D = (pfn_glCopyTexSubImage2D)load("glCopyTexSubImage2D");
+	fp_glCreateProgram = (pfn_glCreateProgram)load("glCreateProgram");
+	fp_glCreateShader = (pfn_glCreateShader)load("glCreateShader");
+	fp_glCullFace = (pfn_glCullFace)load("glCullFace");
+	fp_glDeleteBuffers = (pfn_glDeleteBuffers)load("glDeleteBuffers");
+	fp_glDeleteFramebuffers = (pfn_glDeleteFramebuffers)load("glDeleteFramebuffers");
+	fp_glDeleteProgram = (pfn_glDeleteProgram)load("glDeleteProgram");
+	fp_glDeleteRenderbuffers = (pfn_glDeleteRenderbuffers)load("glDeleteRenderbuffers");
+	fp_glDeleteShader = (pfn_glDeleteShader)load("glDeleteShader");
+	fp_glDeleteTextures = (pfn_glDeleteTextures)load("glDeleteTextures");
+	fp_glDepthFunc = (pfn_glDepthFunc)load("glDepthFunc");
+	fp_glDepthMask = (pfn_glDepthMask)load("glDepthMask");
+	fp_glDepthRangef = (pfn_glDepthRangef)load("glDepthRangef");
+	fp_glDetachShader = (pfn_glDetachShader)load("glDetachShader");
+	fp_glDisable = (pfn_glDisable)load("glDisable");
+	fp_glDisableVertexAttribArray = (pfn_glDisableVertexAttribArray)load("glDisableVertexAttribArray");
+	fp_glDrawArrays = (pfn_glDrawArrays)load("glDrawArrays");
+	fp_glDrawElements = (pfn_glDrawElements)load("glDrawElements");
+	fp_glEnable = (pfn_glEnable)load("glEnable");
+	fp_glEnableVertexAttribArray = (pfn_glEnableVertexAttribArray)load("glEnableVertexAttribArray");
+	fp_glFinish = (pfn_glFinish)load("glFinish");
+	fp_glFlush = (pfn_glFlush)load("glFlush");
+	fp_glFramebufferRenderbuffer = (pfn_glFramebufferRenderbuffer)load("glFramebufferRenderbuffer");
+	fp_glFramebufferTexture2D = (pfn_glFramebufferTexture2D)load("glFramebufferTexture2D");
+	fp_glFrontFace = (pfn_glFrontFace)load("glFrontFace");
+	fp_glGenBuffers = (pfn_glGenBuffers)load("glGenBuffers");
+	fp_glGenerateMipmap = (pfn_glGenerateMipmap)load("glGenerateMipmap");
+	fp_glGenFramebuffers = (pfn_glGenFramebuffers)load("glGenFramebuffers");
+	fp_glGenRenderbuffers = (pfn_glGenRenderbuffers)load("glGenRenderbuffers");
+	fp_glGenTextures = (pfn_glGenTextures)load("glGenTextures");
+	fp_glGetActiveAttrib = (pfn_glGetActiveAttrib)load("glGetActiveAttrib");
+	fp_glGetActiveUniform = (pfn_glGetActiveUniform)load("glGetActiveUniform");
+	fp_glGetAttachedShaders = (pfn_glGetAttachedShaders)load("glGetAttachedShaders");
+	fp_glGetAttribLocation = (pfn_glGetAttribLocation)load("glGetAttribLocation");
+	fp_glGetBooleanv = (pfn_glGetBooleanv)load("glGetBooleanv");
+	fp_glGetBufferParameteriv = (pfn_glGetBufferParameteriv)load("glGetBufferParameteriv");
+	fp_glGetError = (pfn_glGetError)load("glGetError");
+	fp_glGetFloatv = (pfn_glGetFloatv)load("glGetFloatv");
+	fp_glGetFramebufferAttachmentParameteriv = (pfn_glGetFramebufferAttachmentParameteriv)load("glGetFramebufferAttachmentParameteriv");
+	fp_glGetIntegerv = (pfn_glGetIntegerv)load("glGetIntegerv");
+	fp_glGetProgramiv = (pfn_glGetProgramiv)load("glGetProgramiv");
+	fp_glGetProgramInfoLog = (pfn_glGetProgramInfoLog)load("glGetProgramInfoLog");
+	fp_glGetRenderbufferParameteriv = (pfn_glGetRenderbufferParameteriv)load("glGetRenderbufferParameteriv");
+	fp_glGetShaderiv = (pfn_glGetShaderiv)load("glGetShaderiv");
+	fp_glGetShaderInfoLog = (pfn_glGetShaderInfoLog)load("glGetShaderInfoLog");
+	fp_glGetShaderPrecisionFormat = (pfn_glGetShaderPrecisionFormat)load("glGetShaderPrecisionFormat");
+	fp_glGetShaderSource = (pfn_glGetShaderSource)load("glGetShaderSource");
+	fp_glGetString = (pfn_glGetString)load("glGetString");
+	fp_glGetTexParameterfv = (pfn_glGetTexParameterfv)load("glGetTexParameterfv");
+	fp_glGetTexParameteriv = (pfn_glGetTexParameteriv)load("glGetTexParameteriv");
+	fp_glGetUniformfv = (pfn_glGetUniformfv)load("glGetUniformfv");
+	fp_glGetUniformiv = (pfn_glGetUniformiv)load("glGetUniformiv");
+	fp_glGetUniformLocation = (pfn_glGetUniformLocation)load("glGetUniformLocation");
+	fp_glGetVertexAttribfv = (pfn_glGetVertexAttribfv)load("glGetVertexAttribfv");
+	fp_glGetVertexAttribiv = (pfn_glGetVertexAttribiv)load("glGetVertexAttribiv");
+	fp_glGetVertexAttribPointerv = (pfn_glGetVertexAttribPointerv)load("glGetVertexAttribPointerv");
+	fp_glHint = (pfn_glHint)load("glHint");
+	fp_glIsBuffer = (pfn_glIsBuffer)load("glIsBuffer");
+	fp_glIsEnabled = (pfn_glIsEnabled)load("glIsEnabled");
+	fp_glIsFramebuffer = (pfn_glIsFramebuffer)load("glIsFramebuffer");
+	fp_glIsProgram = (pfn_glIsProgram)load("glIsProgram");
+	fp_glIsRenderbuffer = (pfn_glIsRenderbuffer)load("glIsRenderbuffer");
+	fp_glIsShader = (pfn_glIsShader)load("glIsShader");
+	fp_glIsTexture = (pfn_glIsTexture)load("glIsTexture");
+	fp_glLineWidth = (pfn_glLineWidth)load("glLineWidth");
+	fp_glLinkProgram = (pfn_glLinkProgram)load("glLinkProgram");
+	fp_glPixelStorei = (pfn_glPixelStorei)load("glPixelStorei");
+	fp_glPolygonOffset = (pfn_glPolygonOffset)load("glPolygonOffset");
+	fp_glReadPixels = (pfn_glReadPixels)load("glReadPixels");
+	fp_glReleaseShaderCompiler = (pfn_glReleaseShaderCompiler)load("glReleaseShaderCompiler");
+	fp_glRenderbufferStorage = (pfn_glRenderbufferStorage)load("glRenderbufferStorage");
+	fp_glSampleCoverage = (pfn_glSampleCoverage)load("glSampleCoverage");
+	fp_glScissor = (pfn_glScissor)load("glScissor");
+	fp_glShaderBinary = (pfn_glShaderBinary)load("glShaderBinary");
+	fp_glShaderSource = (pfn_glShaderSource)load("glShaderSource");
+	fp_glStencilFunc = (pfn_glStencilFunc)load("glStencilFunc");
+	fp_glStencilFuncSeparate = (pfn_glStencilFuncSeparate)load("glStencilFuncSeparate");
+	fp_glStencilMask = (pfn_glStencilMask)load("glStencilMask");
+	fp_glStencilMaskSeparate = (pfn_glStencilMaskSeparate)load("glStencilMaskSeparate");
+	fp_glStencilOp = (pfn_glStencilOp)load("glStencilOp");
+	fp_glStencilOpSeparate = (pfn_glStencilOpSeparate)load("glStencilOpSeparate");
+	fp_glTexImage2D = (pfn_glTexImage2D)load("glTexImage2D");
+	fp_glTexParameterf = (pfn_glTexParameterf)load("glTexParameterf");
+	fp_glTexParameterfv = (pfn_glTexParameterfv)load("glTexParameterfv");
+	fp_glTexParameteri = (pfn_glTexParameteri)load("glTexParameteri");
+	fp_glTexParameteriv = (pfn_glTexParameteriv)load("glTexParameteriv");
+	fp_glTexSubImage2D = (pfn_glTexSubImage2D)load("glTexSubImage2D");
+	fp_glUniform1f = (pfn_glUniform1f)load("glUniform1f");
+	fp_glUniform1fv = (pfn_glUniform1fv)load("glUniform1fv");
+	fp_glUniform1i = (pfn_glUniform1i)load("glUniform1i");
+	fp_glUniform1iv = (pfn_glUniform1iv)load("glUniform1iv");
+	fp_glUniform2f = (pfn_glUniform2f)load("glUniform2f");
+	fp_glUniform2fv = (pfn_glUniform2fv)load("glUniform2fv");
+	fp_glUniform2i = (pfn_glUniform2i)load("glUniform2i");
+	fp_glUniform2iv = (pfn_glUniform2iv)load("glUniform2iv");
+	fp_glUniform3f = (pfn_glUniform3f)load("glUniform3f");
+	fp_glUniform3fv = (pfn_glUniform3fv)load("glUniform3fv");
+	fp_glUniform3i = (pfn_glUniform3i)load("glUniform3i");
+	fp_glUniform3iv = (pfn_glUniform3iv)load("glUniform3iv");
+	fp_glUniform4f = (pfn_glUniform4f)load("glUniform4f");
+	fp_glUniform4fv = (pfn_glUniform4fv)load("glUniform4fv");
+	fp_glUniform4i = (pfn_glUniform4i)load("glUniform4i");
+	fp_glUniform4iv = (pfn_glUniform4iv)load("glUniform4iv");
+	fp_glUniformMatrix2fv = (pfn_glUniformMatrix2fv)load("glUniformMatrix2fv");
+	fp_glUniformMatrix3fv = (pfn_glUniformMatrix3fv)load("glUniformMatrix3fv");
+	fp_glUniformMatrix4fv = (pfn_glUniformMatrix4fv)load("glUniformMatrix4fv");
+	fp_glUseProgram = (pfn_glUseProgram)load("glUseProgram");
+	fp_glValidateProgram = (pfn_glValidateProgram)load("glValidateProgram");
+	fp_glVertexAttrib1f = (pfn_glVertexAttrib1f)load("glVertexAttrib1f");
+	fp_glVertexAttrib1fv = (pfn_glVertexAttrib1fv)load("glVertexAttrib1fv");
+	fp_glVertexAttrib2f = (pfn_glVertexAttrib2f)load("glVertexAttrib2f");
+	fp_glVertexAttrib2fv = (pfn_glVertexAttrib2fv)load("glVertexAttrib2fv");
+	fp_glVertexAttrib3f = (pfn_glVertexAttrib3f)load("glVertexAttrib3f");
+	fp_glVertexAttrib3fv = (pfn_glVertexAttrib3fv)load("glVertexAttrib3fv");
+	fp_glVertexAttrib4f = (pfn_glVertexAttrib4f)load("glVertexAttrib4f");
+	fp_glVertexAttrib4fv = (pfn_glVertexAttrib4fv)load("glVertexAttrib4fv");
+	fp_glVertexAttribPointer = (pfn_glVertexAttribPointer)load("glVertexAttribPointer");
+	fp_glViewport = (pfn_glViewport)load("glViewport");
+}
+
+GLboolean GLAD_ES_VERSION_3_0 = GL_FALSE;
+static void load_GL_ES_VERSION_3_0(LOADER load) {
+	if(!GLAD_ES_VERSION_3_0) return;
+	fp_glReadBuffer = (pfn_glReadBuffer)load("glReadBuffer");
+	fp_glDrawRangeElements = (pfn_glDrawRangeElements)load("glDrawRangeElements");
+	fp_glTexImage3D = (pfn_glTexImage3D)load("glTexImage3D");
+	fp_glTexSubImage3D = (pfn_glTexSubImage3D)load("glTexSubImage3D");
+	fp_glCopyTexSubImage3D = (pfn_glCopyTexSubImage3D)load("glCopyTexSubImage3D");
+	fp_glCompressedTexImage3D = (pfn_glCompressedTexImage3D)load("glCompressedTexImage3D");
+	fp_glCompressedTexSubImage3D = (pfn_glCompressedTexSubImage3D)load("glCompressedTexSubImage3D");
+	fp_glGenQueries = (pfn_glGenQueries)load("glGenQueries");
+	fp_glDeleteQueries = (pfn_glDeleteQueries)load("glDeleteQueries");
+	fp_glIsQuery = (pfn_glIsQuery)load("glIsQuery");
+	fp_glBeginQuery = (pfn_glBeginQuery)load("glBeginQuery");
+	fp_glEndQuery = (pfn_glEndQuery)load("glEndQuery");
+	fp_glGetQueryiv = (pfn_glGetQueryiv)load("glGetQueryiv");
+	fp_glGetQueryObjectuiv = (pfn_glGetQueryObjectuiv)load("glGetQueryObjectuiv");
+	fp_glUnmapBuffer = (pfn_glUnmapBuffer)load("glUnmapBuffer");
+	fp_glGetBufferPointerv = (pfn_glGetBufferPointerv)load("glGetBufferPointerv");
+	fp_glDrawBuffers = (pfn_glDrawBuffers)load("glDrawBuffers");
+	fp_glUniformMatrix2x3fv = (pfn_glUniformMatrix2x3fv)load("glUniformMatrix2x3fv");
+	fp_glUniformMatrix3x2fv = (pfn_glUniformMatrix3x2fv)load("glUniformMatrix3x2fv");
+	fp_glUniformMatrix2x4fv = (pfn_glUniformMatrix2x4fv)load("glUniformMatrix2x4fv");
+	fp_glUniformMatrix4x2fv = (pfn_glUniformMatrix4x2fv)load("glUniformMatrix4x2fv");
+	fp_glUniformMatrix3x4fv = (pfn_glUniformMatrix3x4fv)load("glUniformMatrix3x4fv");
+	fp_glUniformMatrix4x3fv = (pfn_glUniformMatrix4x3fv)load("glUniformMatrix4x3fv");
+	fp_glBlitFramebuffer = (pfn_glBlitFramebuffer)load("glBlitFramebuffer");
+	fp_glRenderbufferStorageMultisample = (pfn_glRenderbufferStorageMultisample)load("glRenderbufferStorageMultisample");
+	fp_glFramebufferTextureLayer = (pfn_glFramebufferTextureLayer)load("glFramebufferTextureLayer");
+	fp_glMapBufferRange = (pfn_glMapBufferRange)load("glMapBufferRange");
+	fp_glFlushMappedBufferRange = (pfn_glFlushMappedBufferRange)load("glFlushMappedBufferRange");
+	fp_glBindVertexArray = (pfn_glBindVertexArray)load("glBindVertexArray");
+	fp_glDeleteVertexArrays = (pfn_glDeleteVertexArrays)load("glDeleteVertexArrays");
+	fp_glGenVertexArrays = (pfn_glGenVertexArrays)load("glGenVertexArrays");
+	fp_glIsVertexArray = (pfn_glIsVertexArray)load("glIsVertexArray");
+	fp_glGetIntegeri_v = (pfn_glGetIntegeri_v)load("glGetIntegeri_v");
+	fp_glBeginTransformFeedback = (pfn_glBeginTransformFeedback)load("glBeginTransformFeedback");
+	fp_glEndTransformFeedback = (pfn_glEndTransformFeedback)load("glEndTransformFeedback");
+	fp_glBindBufferRange = (pfn_glBindBufferRange)load("glBindBufferRange");
+	fp_glBindBufferBase = (pfn_glBindBufferBase)load("glBindBufferBase");
+	fp_glTransformFeedbackVaryings = (pfn_glTransformFeedbackVaryings)load("glTransformFeedbackVaryings");
+	fp_glGetTransformFeedbackVarying = (pfn_glGetTransformFeedbackVarying)load("glGetTransformFeedbackVarying");
+	fp_glVertexAttribIPointer = (pfn_glVertexAttribIPointer)load("glVertexAttribIPointer");
+	fp_glGetVertexAttribIiv = (pfn_glGetVertexAttribIiv)load("glGetVertexAttribIiv");
+	fp_glGetVertexAttribIuiv = (pfn_glGetVertexAttribIuiv)load("glGetVertexAttribIuiv");
+	fp_glVertexAttribI4i = (pfn_glVertexAttribI4i)load("glVertexAttribI4i");
+	fp_glVertexAttribI4ui = (pfn_glVertexAttribI4ui)load("glVertexAttribI4ui");
+	fp_glVertexAttribI4iv = (pfn_glVertexAttribI4iv)load("glVertexAttribI4iv");
+	fp_glVertexAttribI4uiv = (pfn_glVertexAttribI4uiv)load("glVertexAttribI4uiv");
+	fp_glGetUniformuiv = (pfn_glGetUniformuiv)load("glGetUniformuiv");
+	fp_glGetFragDataLocation = (pfn_glGetFragDataLocation)load("glGetFragDataLocation");
+	fp_glUniform1ui = (pfn_glUniform1ui)load("glUniform1ui");
+	fp_glUniform2ui = (pfn_glUniform2ui)load("glUniform2ui");
+	fp_glUniform3ui = (pfn_glUniform3ui)load("glUniform3ui");
+	fp_glUniform4ui = (pfn_glUniform4ui)load("glUniform4ui");
+	fp_glUniform1uiv = (pfn_glUniform1uiv)load("glUniform1uiv");
+	fp_glUniform2uiv = (pfn_glUniform2uiv)load("glUniform2uiv");
+	fp_glUniform3uiv = (pfn_glUniform3uiv)load("glUniform3uiv");
+	fp_glUniform4uiv = (pfn_glUniform4uiv)load("glUniform4uiv");
+	fp_glClearBufferiv = (pfn_glClearBufferiv)load("glClearBufferiv");
+	fp_glClearBufferuiv = (pfn_glClearBufferuiv)load("glClearBufferuiv");
+	fp_glClearBufferfv = (pfn_glClearBufferfv)load("glClearBufferfv");
+	fp_glClearBufferfi = (pfn_glClearBufferfi)load("glClearBufferfi");
+	fp_glGetStringi = (pfn_glGetStringi)load("glGetStringi");
+	fp_glCopyBufferSubData = (pfn_glCopyBufferSubData)load("glCopyBufferSubData");
+	fp_glGetUniformIndices = (pfn_glGetUniformIndices)load("glGetUniformIndices");
+	fp_glGetActiveUniformsiv = (pfn_glGetActiveUniformsiv)load("glGetActiveUniformsiv");
+	fp_glGetUniformBlockIndex = (pfn_glGetUniformBlockIndex)load("glGetUniformBlockIndex");
+	fp_glGetActiveUniformBlockiv = (pfn_glGetActiveUniformBlockiv)load("glGetActiveUniformBlockiv");
+	fp_glGetActiveUniformBlockName = (pfn_glGetActiveUniformBlockName)load("glGetActiveUniformBlockName");
+	fp_glUniformBlockBinding = (pfn_glUniformBlockBinding)load("glUniformBlockBinding");
+	fp_glDrawArraysInstanced = (pfn_glDrawArraysInstanced)load("glDrawArraysInstanced");
+	fp_glDrawElementsInstanced = (pfn_glDrawElementsInstanced)load("glDrawElementsInstanced");
+	fp_glFenceSync = (pfn_glFenceSync)load("glFenceSync");
+	fp_glIsSync = (pfn_glIsSync)load("glIsSync");
+	fp_glDeleteSync = (pfn_glDeleteSync)load("glDeleteSync");
+	fp_glClientWaitSync = (pfn_glClientWaitSync)load("glClientWaitSync");
+	fp_glWaitSync = (pfn_glWaitSync)load("glWaitSync");
+	fp_glGetInteger64v = (pfn_glGetInteger64v)load("glGetInteger64v");
+	fp_glGetSynciv = (pfn_glGetSynciv)load("glGetSynciv");
+	fp_glGetInteger64i_v = (pfn_glGetInteger64i_v)load("glGetInteger64i_v");
+	fp_glGetBufferParameteri64v = (pfn_glGetBufferParameteri64v)load("glGetBufferParameteri64v");
+	fp_glGenSamplers = (pfn_glGenSamplers)load("glGenSamplers");
+	fp_glDeleteSamplers = (pfn_glDeleteSamplers)load("glDeleteSamplers");
+	fp_glIsSampler = (pfn_glIsSampler)load("glIsSampler");
+	fp_glBindSampler = (pfn_glBindSampler)load("glBindSampler");
+	fp_glSamplerParameteri = (pfn_glSamplerParameteri)load("glSamplerParameteri");
+	fp_glSamplerParameteriv = (pfn_glSamplerParameteriv)load("glSamplerParameteriv");
+	fp_glSamplerParameterf = (pfn_glSamplerParameterf)load("glSamplerParameterf");
+	fp_glSamplerParameterfv = (pfn_glSamplerParameterfv)load("glSamplerParameterfv");
+	fp_glGetSamplerParameteriv = (pfn_glGetSamplerParameteriv)load("glGetSamplerParameteriv");
+	fp_glGetSamplerParameterfv = (pfn_glGetSamplerParameterfv)load("glGetSamplerParameterfv");
+	fp_glVertexAttribDivisor = (pfn_glVertexAttribDivisor)load("glVertexAttribDivisor");
+	fp_glBindTransformFeedback = (pfn_glBindTransformFeedback)load("glBindTransformFeedback");
+	fp_glDeleteTransformFeedbacks = (pfn_glDeleteTransformFeedbacks)load("glDeleteTransformFeedbacks");
+	fp_glGenTransformFeedbacks = (pfn_glGenTransformFeedbacks)load("glGenTransformFeedbacks");
+	fp_glIsTransformFeedback = (pfn_glIsTransformFeedback)load("glIsTransformFeedback");
+	fp_glPauseTransformFeedback = (pfn_glPauseTransformFeedback)load("glPauseTransformFeedback");
+	fp_glResumeTransformFeedback = (pfn_glResumeTransformFeedback)load("glResumeTransformFeedback");
+	fp_glGetProgramBinary = (pfn_glGetProgramBinary)load("glGetProgramBinary");
+	fp_glProgramBinary = (pfn_glProgramBinary)load("glProgramBinary");
+	fp_glProgramParameteri = (pfn_glProgramParameteri)load("glProgramParameteri");
+	fp_glInvalidateFramebuffer = (pfn_glInvalidateFramebuffer)load("glInvalidateFramebuffer");
+	fp_glInvalidateSubFramebuffer = (pfn_glInvalidateSubFramebuffer)load("glInvalidateSubFramebuffer");
+	fp_glTexStorage2D = (pfn_glTexStorage2D)load("glTexStorage2D");
+	fp_glTexStorage3D = (pfn_glTexStorage3D)load("glTexStorage3D");
+	fp_glGetInternalformativ = (pfn_glGetInternalformativ)load("glGetInternalformativ");
+}
+
+GLboolean GLAD_ES_VERSION_3_1 = GL_FALSE;
+static void load_GL_ES_VERSION_3_1(LOADER load) {
+	if(!GLAD_ES_VERSION_3_1) return;
+	fp_glDispatchCompute = (pfn_glDispatchCompute)load("glDispatchCompute");
+	fp_glDispatchComputeIndirect = (pfn_glDispatchComputeIndirect)load("glDispatchComputeIndirect");
+	fp_glDrawArraysIndirect = (pfn_glDrawArraysIndirect)load("glDrawArraysIndirect");
+	fp_glDrawElementsIndirect = (pfn_glDrawElementsIndirect)load("glDrawElementsIndirect");
+	fp_glFramebufferParameteri = (pfn_glFramebufferParameteri)load("glFramebufferParameteri");
+	fp_glGetFramebufferParameteriv = (pfn_glGetFramebufferParameteriv)load("glGetFramebufferParameteriv");
+	fp_glGetProgramInterfaceiv = (pfn_glGetProgramInterfaceiv)load("glGetProgramInterfaceiv");
+	fp_glGetProgramResourceIndex = (pfn_glGetProgramResourceIndex)load("glGetProgramResourceIndex");
+	fp_glGetProgramResourceName = (pfn_glGetProgramResourceName)load("glGetProgramResourceName");
+	fp_glGetProgramResourceiv = (pfn_glGetProgramResourceiv)load("glGetProgramResourceiv");
+	fp_glGetProgramResourceLocation = (pfn_glGetProgramResourceLocation)load("glGetProgramResourceLocation");
+	fp_glUseProgramStages = (pfn_glUseProgramStages)load("glUseProgramStages");
+	fp_glActiveShaderProgram = (pfn_glActiveShaderProgram)load("glActiveShaderProgram");
+	fp_glCreateShaderProgramv = (pfn_glCreateShaderProgramv)load("glCreateShaderProgramv");
+	fp_glBindProgramPipeline = (pfn_glBindProgramPipeline)load("glBindProgramPipeline");
+	fp_glDeleteProgramPipelines = (pfn_glDeleteProgramPipelines)load("glDeleteProgramPipelines");
+	fp_glGenProgramPipelines = (pfn_glGenProgramPipelines)load("glGenProgramPipelines");
+	fp_glIsProgramPipeline = (pfn_glIsProgramPipeline)load("glIsProgramPipeline");
+	fp_glGetProgramPipelineiv = (pfn_glGetProgramPipelineiv)load("glGetProgramPipelineiv");
+	fp_glProgramUniform1i = (pfn_glProgramUniform1i)load("glProgramUniform1i");
+	fp_glProgramUniform2i = (pfn_glProgramUniform2i)load("glProgramUniform2i");
+	fp_glProgramUniform3i = (pfn_glProgramUniform3i)load("glProgramUniform3i");
+	fp_glProgramUniform4i = (pfn_glProgramUniform4i)load("glProgramUniform4i");
+	fp_glProgramUniform1ui = (pfn_glProgramUniform1ui)load("glProgramUniform1ui");
+	fp_glProgramUniform2ui = (pfn_glProgramUniform2ui)load("glProgramUniform2ui");
+	fp_glProgramUniform3ui = (pfn_glProgramUniform3ui)load("glProgramUniform3ui");
+	fp_glProgramUniform4ui = (pfn_glProgramUniform4ui)load("glProgramUniform4ui");
+	fp_glProgramUniform1f = (pfn_glProgramUniform1f)load("glProgramUniform1f");
+	fp_glProgramUniform2f = (pfn_glProgramUniform2f)load("glProgramUniform2f");
+	fp_glProgramUniform3f = (pfn_glProgramUniform3f)load("glProgramUniform3f");
+	fp_glProgramUniform4f = (pfn_glProgramUniform4f)load("glProgramUniform4f");
+	fp_glProgramUniform1iv = (pfn_glProgramUniform1iv)load("glProgramUniform1iv");
+	fp_glProgramUniform2iv = (pfn_glProgramUniform2iv)load("glProgramUniform2iv");
+	fp_glProgramUniform3iv = (pfn_glProgramUniform3iv)load("glProgramUniform3iv");
+	fp_glProgramUniform4iv = (pfn_glProgramUniform4iv)load("glProgramUniform4iv");
+	fp_glProgramUniform1uiv = (pfn_glProgramUniform1uiv)load("glProgramUniform1uiv");
+	fp_glProgramUniform2uiv = (pfn_glProgramUniform2uiv)load("glProgramUniform2uiv");
+	fp_glProgramUniform3uiv = (pfn_glProgramUniform3uiv)load("glProgramUniform3uiv");
+	fp_glProgramUniform4uiv = (pfn_glProgramUniform4uiv)load("glProgramUniform4uiv");
+	fp_glProgramUniform1fv = (pfn_glProgramUniform1fv)load("glProgramUniform1fv");
+	fp_glProgramUniform2fv = (pfn_glProgramUniform2fv)load("glProgramUniform2fv");
+	fp_glProgramUniform3fv = (pfn_glProgramUniform3fv)load("glProgramUniform3fv");
+	fp_glProgramUniform4fv = (pfn_glProgramUniform4fv)load("glProgramUniform4fv");
+	fp_glProgramUniformMatrix2fv = (pfn_glProgramUniformMatrix2fv)load("glProgramUniformMatrix2fv");
+	fp_glProgramUniformMatrix3fv = (pfn_glProgramUniformMatrix3fv)load("glProgramUniformMatrix3fv");
+	fp_glProgramUniformMatrix4fv = (pfn_glProgramUniformMatrix4fv)load("glProgramUniformMatrix4fv");
+	fp_glProgramUniformMatrix2x3fv = (pfn_glProgramUniformMatrix2x3fv)load("glProgramUniformMatrix2x3fv");
+	fp_glProgramUniformMatrix3x2fv = (pfn_glProgramUniformMatrix3x2fv)load("glProgramUniformMatrix3x2fv");
+	fp_glProgramUniformMatrix2x4fv = (pfn_glProgramUniformMatrix2x4fv)load("glProgramUniformMatrix2x4fv");
+	fp_glProgramUniformMatrix4x2fv = (pfn_glProgramUniformMatrix4x2fv)load("glProgramUniformMatrix4x2fv");
+	fp_glProgramUniformMatrix3x4fv = (pfn_glProgramUniformMatrix3x4fv)load("glProgramUniformMatrix3x4fv");
+	fp_glProgramUniformMatrix4x3fv = (pfn_glProgramUniformMatrix4x3fv)load("glProgramUniformMatrix4x3fv");
+	fp_glValidateProgramPipeline = (pfn_glValidateProgramPipeline)load("glValidateProgramPipeline");
+	fp_glGetProgramPipelineInfoLog = (pfn_glGetProgramPipelineInfoLog)load("glGetProgramPipelineInfoLog");
+	fp_glBindImageTexture = (pfn_glBindImageTexture)load("glBindImageTexture");
+	fp_glGetBooleani_v = (pfn_glGetBooleani_v)load("glGetBooleani_v");
+	fp_glMemoryBarrier = (pfn_glMemoryBarrier)load("glMemoryBarrier");
+	fp_glMemoryBarrierByRegion = (pfn_glMemoryBarrierByRegion)load("glMemoryBarrierByRegion");
+	fp_glTexStorage2DMultisample = (pfn_glTexStorage2DMultisample)load("glTexStorage2DMultisample");
+	fp_glGetMultisamplefv = (pfn_glGetMultisamplefv)load("glGetMultisamplefv");
+	fp_glSampleMaski = (pfn_glSampleMaski)load("glSampleMaski");
+	fp_glGetTexLevelParameteriv = (pfn_glGetTexLevelParameteriv)load("glGetTexLevelParameteriv");
+	fp_glGetTexLevelParameterfv = (pfn_glGetTexLevelParameterfv)load("glGetTexLevelParameterfv");
+	fp_glBindVertexBuffer = (pfn_glBindVertexBuffer)load("glBindVertexBuffer");
+	fp_glVertexAttribFormat = (pfn_glVertexAttribFormat)load("glVertexAttribFormat");
+	fp_glVertexAttribIFormat = (pfn_glVertexAttribIFormat)load("glVertexAttribIFormat");
+	fp_glVertexAttribBinding = (pfn_glVertexAttribBinding)load("glVertexAttribBinding");
+	fp_glVertexBindingDivisor = (pfn_glVertexBindingDivisor)load("glVertexBindingDivisor");
+}
+
+GLboolean GLAD_KHR_blend_equation_advanced = GL_FALSE;
+static void load_GL_KHR_blend_equation_advanced(LOADER load) {
+	if(!GLAD_KHR_blend_equation_advanced) return;
+	fp_glBlendBarrierKHR = (pfn_glBlendBarrierKHR)load("glBlendBarrierKHR");
+}
+
+GLboolean GLAD_KHR_blend_equation_advanced_coherent = GL_FALSE;
+GLboolean GLAD_KHR_context_flush_control = GL_FALSE;
+GLboolean GLAD_KHR_debug = GL_FALSE;
+static void load_GL_KHR_debug(LOADER load) {
+	if(!GLAD_KHR_debug) return;
+	fp_glDebugMessageControl = (pfn_glDebugMessageControl)load("glDebugMessageControl");
+	fp_glDebugMessageInsert = (pfn_glDebugMessageInsert)load("glDebugMessageInsert");
+	fp_glDebugMessageCallback = (pfn_glDebugMessageCallback)load("glDebugMessageCallback");
+	fp_glGetDebugMessageLog = (pfn_glGetDebugMessageLog)load("glGetDebugMessageLog");
+	fp_glPushDebugGroup = (pfn_glPushDebugGroup)load("glPushDebugGroup");
+	fp_glPopDebugGroup = (pfn_glPopDebugGroup)load("glPopDebugGroup");
+	fp_glObjectLabel = (pfn_glObjectLabel)load("glObjectLabel");
+	fp_glGetObjectLabel = (pfn_glGetObjectLabel)load("glGetObjectLabel");
+	fp_glObjectPtrLabel = (pfn_glObjectPtrLabel)load("glObjectPtrLabel");
+	fp_glGetObjectPtrLabel = (pfn_glGetObjectPtrLabel)load("glGetObjectPtrLabel");
+	fp_glGetPointerv = (pfn_glGetPointerv)load("glGetPointerv");
+	fp_glDebugMessageControlKHR = (pfn_glDebugMessageControlKHR)load("glDebugMessageControlKHR");
+	fp_glDebugMessageInsertKHR = (pfn_glDebugMessageInsertKHR)load("glDebugMessageInsertKHR");
+	fp_glDebugMessageCallbackKHR = (pfn_glDebugMessageCallbackKHR)load("glDebugMessageCallbackKHR");
+	fp_glGetDebugMessageLogKHR = (pfn_glGetDebugMessageLogKHR)load("glGetDebugMessageLogKHR");
+	fp_glPushDebugGroupKHR = (pfn_glPushDebugGroupKHR)load("glPushDebugGroupKHR");
+	fp_glPopDebugGroupKHR = (pfn_glPopDebugGroupKHR)load("glPopDebugGroupKHR");
+	fp_glObjectLabelKHR = (pfn_glObjectLabelKHR)load("glObjectLabelKHR");
+	fp_glGetObjectLabelKHR = (pfn_glGetObjectLabelKHR)load("glGetObjectLabelKHR");
+	fp_glObjectPtrLabelKHR = (pfn_glObjectPtrLabelKHR)load("glObjectPtrLabelKHR");
+	fp_glGetObjectPtrLabelKHR = (pfn_glGetObjectPtrLabelKHR)load("glGetObjectPtrLabelKHR");
+	fp_glGetPointervKHR = (pfn_glGetPointervKHR)load("glGetPointervKHR");
+}
+
+GLboolean GLAD_KHR_robust_buffer_access_behavior = GL_FALSE;
+GLboolean GLAD_KHR_robustness = GL_FALSE;
+static void load_GL_KHR_robustness(LOADER load) {
+	if(!GLAD_KHR_robustness) return;
+	fp_glGetGraphicsResetStatus = (pfn_glGetGraphicsResetStatus)load("glGetGraphicsResetStatus");
+	fp_glReadnPixels = (pfn_glReadnPixels)load("glReadnPixels");
+	fp_glGetnUniformfv = (pfn_glGetnUniformfv)load("glGetnUniformfv");
+	fp_glGetnUniformiv = (pfn_glGetnUniformiv)load("glGetnUniformiv");
+	fp_glGetnUniformuiv = (pfn_glGetnUniformuiv)load("glGetnUniformuiv");
+	fp_glGetGraphicsResetStatusKHR = (pfn_glGetGraphicsResetStatusKHR)load("glGetGraphicsResetStatusKHR");
+	fp_glReadnPixelsKHR = (pfn_glReadnPixelsKHR)load("glReadnPixelsKHR");
+	fp_glGetnUniformfvKHR = (pfn_glGetnUniformfvKHR)load("glGetnUniformfvKHR");
+	fp_glGetnUniformivKHR = (pfn_glGetnUniformivKHR)load("glGetnUniformivKHR");
+	fp_glGetnUniformuivKHR = (pfn_glGetnUniformuivKHR)load("glGetnUniformuivKHR");
+}
+
+GLboolean GLAD_KHR_texture_compression_astc_hdr = GL_FALSE;
+GLboolean GLAD_KHR_texture_compression_astc_ldr = GL_FALSE;
+GLboolean GLAD_ARB_arrays_of_arrays = GL_FALSE;
+GLboolean GLAD_ARB_base_instance = GL_FALSE;
+static void load_GL_ARB_base_instance(LOADER load) {
+	if(!GLAD_ARB_base_instance) return;
+	fp_glDrawArraysInstancedBaseInstance = (pfn_glDrawArraysInstancedBaseInstance)load("glDrawArraysInstancedBaseInstance");
+	fp_glDrawElementsInstancedBaseInstance = (pfn_glDrawElementsInstancedBaseInstance)load("glDrawElementsInstancedBaseInstance");
+	fp_glDrawElementsInstancedBaseVertexBaseInstance = (pfn_glDrawElementsInstancedBaseVertexBaseInstance)load("glDrawElementsInstancedBaseVertexBaseInstance");
+}
+
+GLboolean GLAD_ARB_bindless_texture = GL_FALSE;
+static void load_GL_ARB_bindless_texture(LOADER load) {
+	if(!GLAD_ARB_bindless_texture) return;
+	fp_glGetTextureHandleARB = (pfn_glGetTextureHandleARB)load("glGetTextureHandleARB");
+	fp_glGetTextureSamplerHandleARB = (pfn_glGetTextureSamplerHandleARB)load("glGetTextureSamplerHandleARB");
+	fp_glMakeTextureHandleResidentARB = (pfn_glMakeTextureHandleResidentARB)load("glMakeTextureHandleResidentARB");
+	fp_glMakeTextureHandleNonResidentARB = (pfn_glMakeTextureHandleNonResidentARB)load("glMakeTextureHandleNonResidentARB");
+	fp_glGetImageHandleARB = (pfn_glGetImageHandleARB)load("glGetImageHandleARB");
+	fp_glMakeImageHandleResidentARB = (pfn_glMakeImageHandleResidentARB)load("glMakeImageHandleResidentARB");
+	fp_glMakeImageHandleNonResidentARB = (pfn_glMakeImageHandleNonResidentARB)load("glMakeImageHandleNonResidentARB");
+	fp_glUniformHandleui64ARB = (pfn_glUniformHandleui64ARB)load("glUniformHandleui64ARB");
+	fp_glUniformHandleui64vARB = (pfn_glUniformHandleui64vARB)load("glUniformHandleui64vARB");
+	fp_glProgramUniformHandleui64ARB = (pfn_glProgramUniformHandleui64ARB)load("glProgramUniformHandleui64ARB");
+	fp_glProgramUniformHandleui64vARB = (pfn_glProgramUniformHandleui64vARB)load("glProgramUniformHandleui64vARB");
+	fp_glIsTextureHandleResidentARB = (pfn_glIsTextureHandleResidentARB)load("glIsTextureHandleResidentARB");
+	fp_glIsImageHandleResidentARB = (pfn_glIsImageHandleResidentARB)load("glIsImageHandleResidentARB");
+	fp_glVertexAttribL1ui64ARB = (pfn_glVertexAttribL1ui64ARB)load("glVertexAttribL1ui64ARB");
+	fp_glVertexAttribL1ui64vARB = (pfn_glVertexAttribL1ui64vARB)load("glVertexAttribL1ui64vARB");
+	fp_glGetVertexAttribLui64vARB = (pfn_glGetVertexAttribLui64vARB)load("glGetVertexAttribLui64vARB");
+}
+
+GLboolean GLAD_ARB_blend_func_extended = GL_FALSE;
+static void load_GL_ARB_blend_func_extended(LOADER load) {
+	if(!GLAD_ARB_blend_func_extended) return;
+	fp_glBindFragDataLocationIndexed = (pfn_glBindFragDataLocationIndexed)load("glBindFragDataLocationIndexed");
+	fp_glGetFragDataIndex = (pfn_glGetFragDataIndex)load("glGetFragDataIndex");
+}
+
+GLboolean GLAD_ARB_buffer_storage = GL_FALSE;
+static void load_GL_ARB_buffer_storage(LOADER load) {
+	if(!GLAD_ARB_buffer_storage) return;
+	fp_glBufferStorage = (pfn_glBufferStorage)load("glBufferStorage");
+}
+
+GLboolean GLAD_ARB_cl_event = GL_FALSE;
+static void load_GL_ARB_cl_event(LOADER load) {
+	if(!GLAD_ARB_cl_event) return;
+	fp_glCreateSyncFromCLeventARB = (pfn_glCreateSyncFromCLeventARB)load("glCreateSyncFromCLeventARB");
+}
+
+GLboolean GLAD_ARB_clear_buffer_object = GL_FALSE;
+static void load_GL_ARB_clear_buffer_object(LOADER load) {
+	if(!GLAD_ARB_clear_buffer_object) return;
+	fp_glClearBufferData = (pfn_glClearBufferData)load("glClearBufferData");
+	fp_glClearBufferSubData = (pfn_glClearBufferSubData)load("glClearBufferSubData");
+}
+
+GLboolean GLAD_ARB_clear_texture = GL_FALSE;
+static void load_GL_ARB_clear_texture(LOADER load) {
+	if(!GLAD_ARB_clear_texture) return;
+	fp_glClearTexImage = (pfn_glClearTexImage)load("glClearTexImage");
+	fp_glClearTexSubImage = (pfn_glClearTexSubImage)load("glClearTexSubImage");
+}
+
+GLboolean GLAD_ARB_clip_control = GL_FALSE;
+static void load_GL_ARB_clip_control(LOADER load) {
+	if(!GLAD_ARB_clip_control) return;
+	fp_glClipControl = (pfn_glClipControl)load("glClipControl");
+}
+
+GLboolean GLAD_ARB_color_buffer_float = GL_FALSE;
+static void load_GL_ARB_color_buffer_float(LOADER load) {
+	if(!GLAD_ARB_color_buffer_float) return;
+	fp_glClampColorARB = (pfn_glClampColorARB)load("glClampColorARB");
+}
+
+GLboolean GLAD_ARB_compatibility = GL_FALSE;
+GLboolean GLAD_ARB_compressed_texture_pixel_storage = GL_FALSE;
+GLboolean GLAD_ARB_compute_shader = GL_FALSE;
+static void load_GL_ARB_compute_shader(LOADER load) {
+	if(!GLAD_ARB_compute_shader) return;
+	fp_glDispatchCompute = (pfn_glDispatchCompute)load("glDispatchCompute");
+	fp_glDispatchComputeIndirect = (pfn_glDispatchComputeIndirect)load("glDispatchComputeIndirect");
+}
+
+GLboolean GLAD_ARB_compute_variable_group_size = GL_FALSE;
+static void load_GL_ARB_compute_variable_group_size(LOADER load) {
+	if(!GLAD_ARB_compute_variable_group_size) return;
+	fp_glDispatchComputeGroupSizeARB = (pfn_glDispatchComputeGroupSizeARB)load("glDispatchComputeGroupSizeARB");
+}
+
+GLboolean GLAD_ARB_conditional_render_inverted = GL_FALSE;
+GLboolean GLAD_ARB_conservative_depth = GL_FALSE;
+GLboolean GLAD_ARB_copy_buffer = GL_FALSE;
+static void load_GL_ARB_copy_buffer(LOADER load) {
+	if(!GLAD_ARB_copy_buffer) return;
+	fp_glCopyBufferSubData = (pfn_glCopyBufferSubData)load("glCopyBufferSubData");
+}
+
+GLboolean GLAD_ARB_copy_image = GL_FALSE;
+static void load_GL_ARB_copy_image(LOADER load) {
+	if(!GLAD_ARB_copy_image) return;
+	fp_glCopyImageSubData = (pfn_glCopyImageSubData)load("glCopyImageSubData");
+}
+
+GLboolean GLAD_ARB_cull_distance = GL_FALSE;
+GLboolean GLAD_ARB_debug_output = GL_FALSE;
+static void load_GL_ARB_debug_output(LOADER load) {
+	if(!GLAD_ARB_debug_output) return;
+	fp_glDebugMessageControlARB = (pfn_glDebugMessageControlARB)load("glDebugMessageControlARB");
+	fp_glDebugMessageInsertARB = (pfn_glDebugMessageInsertARB)load("glDebugMessageInsertARB");
+	fp_glDebugMessageCallbackARB = (pfn_glDebugMessageCallbackARB)load("glDebugMessageCallbackARB");
+	fp_glGetDebugMessageLogARB = (pfn_glGetDebugMessageLogARB)load("glGetDebugMessageLogARB");
+}
+
+GLboolean GLAD_ARB_depth_buffer_float = GL_FALSE;
+GLboolean GLAD_ARB_depth_clamp = GL_FALSE;
+GLboolean GLAD_ARB_derivative_control = GL_FALSE;
+GLboolean GLAD_ARB_direct_state_access = GL_FALSE;
+static void load_GL_ARB_direct_state_access(LOADER load) {
+	if(!GLAD_ARB_direct_state_access) return;
+	fp_glCreateTransformFeedbacks = (pfn_glCreateTransformFeedbacks)load("glCreateTransformFeedbacks");
+	fp_glTransformFeedbackBufferBase = (pfn_glTransformFeedbackBufferBase)load("glTransformFeedbackBufferBase");
+	fp_glTransformFeedbackBufferRange = (pfn_glTransformFeedbackBufferRange)load("glTransformFeedbackBufferRange");
+	fp_glGetTransformFeedbackiv = (pfn_glGetTransformFeedbackiv)load("glGetTransformFeedbackiv");
+	fp_glGetTransformFeedbacki_v = (pfn_glGetTransformFeedbacki_v)load("glGetTransformFeedbacki_v");
+	fp_glGetTransformFeedbacki64_v = (pfn_glGetTransformFeedbacki64_v)load("glGetTransformFeedbacki64_v");
+	fp_glCreateBuffers = (pfn_glCreateBuffers)load("glCreateBuffers");
+	fp_glNamedBufferStorage = (pfn_glNamedBufferStorage)load("glNamedBufferStorage");
+	fp_glNamedBufferData = (pfn_glNamedBufferData)load("glNamedBufferData");
+	fp_glNamedBufferSubData = (pfn_glNamedBufferSubData)load("glNamedBufferSubData");
+	fp_glCopyNamedBufferSubData = (pfn_glCopyNamedBufferSubData)load("glCopyNamedBufferSubData");
+	fp_glClearNamedBufferData = (pfn_glClearNamedBufferData)load("glClearNamedBufferData");
+	fp_glClearNamedBufferSubData = (pfn_glClearNamedBufferSubData)load("glClearNamedBufferSubData");
+	fp_glMapNamedBuffer = (pfn_glMapNamedBuffer)load("glMapNamedBuffer");
+	fp_glMapNamedBufferRange = (pfn_glMapNamedBufferRange)load("glMapNamedBufferRange");
+	fp_glUnmapNamedBuffer = (pfn_glUnmapNamedBuffer)load("glUnmapNamedBuffer");
+	fp_glFlushMappedNamedBufferRange = (pfn_glFlushMappedNamedBufferRange)load("glFlushMappedNamedBufferRange");
+	fp_glGetNamedBufferParameteriv = (pfn_glGetNamedBufferParameteriv)load("glGetNamedBufferParameteriv");
+	fp_glGetNamedBufferParameteri64v = (pfn_glGetNamedBufferParameteri64v)load("glGetNamedBufferParameteri64v");
+	fp_glGetNamedBufferPointerv = (pfn_glGetNamedBufferPointerv)load("glGetNamedBufferPointerv");
+	fp_glGetNamedBufferSubData = (pfn_glGetNamedBufferSubData)load("glGetNamedBufferSubData");
+	fp_glCreateFramebuffers = (pfn_glCreateFramebuffers)load("glCreateFramebuffers");
+	fp_glNamedFramebufferRenderbuffer = (pfn_glNamedFramebufferRenderbuffer)load("glNamedFramebufferRenderbuffer");
+	fp_glNamedFramebufferParameteri = (pfn_glNamedFramebufferParameteri)load("glNamedFramebufferParameteri");
+	fp_glNamedFramebufferTexture = (pfn_glNamedFramebufferTexture)load("glNamedFramebufferTexture");
+	fp_glNamedFramebufferTextureLayer = (pfn_glNamedFramebufferTextureLayer)load("glNamedFramebufferTextureLayer");
+	fp_glNamedFramebufferDrawBuffer = (pfn_glNamedFramebufferDrawBuffer)load("glNamedFramebufferDrawBuffer");
+	fp_glNamedFramebufferDrawBuffers = (pfn_glNamedFramebufferDrawBuffers)load("glNamedFramebufferDrawBuffers");
+	fp_glNamedFramebufferReadBuffer = (pfn_glNamedFramebufferReadBuffer)load("glNamedFramebufferReadBuffer");
+	fp_glInvalidateNamedFramebufferData = (pfn_glInvalidateNamedFramebufferData)load("glInvalidateNamedFramebufferData");
+	fp_glInvalidateNamedFramebufferSubData = (pfn_glInvalidateNamedFramebufferSubData)load("glInvalidateNamedFramebufferSubData");
+	fp_glClearNamedFramebufferiv = (pfn_glClearNamedFramebufferiv)load("glClearNamedFramebufferiv");
+	fp_glClearNamedFramebufferuiv = (pfn_glClearNamedFramebufferuiv)load("glClearNamedFramebufferuiv");
+	fp_glClearNamedFramebufferfv = (pfn_glClearNamedFramebufferfv)load("glClearNamedFramebufferfv");
+	fp_glClearNamedFramebufferfi = (pfn_glClearNamedFramebufferfi)load("glClearNamedFramebufferfi");
+	fp_glBlitNamedFramebuffer = (pfn_glBlitNamedFramebuffer)load("glBlitNamedFramebuffer");
+	fp_glCheckNamedFramebufferStatus = (pfn_glCheckNamedFramebufferStatus)load("glCheckNamedFramebufferStatus");
+	fp_glGetNamedFramebufferParameteriv = (pfn_glGetNamedFramebufferParameteriv)load("glGetNamedFramebufferParameteriv");
+	fp_glGetNamedFramebufferAttachmentParameteriv = (pfn_glGetNamedFramebufferAttachmentParameteriv)load("glGetNamedFramebufferAttachmentParameteriv");
+	fp_glCreateRenderbuffers = (pfn_glCreateRenderbuffers)load("glCreateRenderbuffers");
+	fp_glNamedRenderbufferStorage = (pfn_glNamedRenderbufferStorage)load("glNamedRenderbufferStorage");
+	fp_glNamedRenderbufferStorageMultisample = (pfn_glNamedRenderbufferStorageMultisample)load("glNamedRenderbufferStorageMultisample");
+	fp_glGetNamedRenderbufferParameteriv = (pfn_glGetNamedRenderbufferParameteriv)load("glGetNamedRenderbufferParameteriv");
+	fp_glCreateTextures = (pfn_glCreateTextures)load("glCreateTextures");
+	fp_glTextureBuffer = (pfn_glTextureBuffer)load("glTextureBuffer");
+	fp_glTextureBufferRange = (pfn_glTextureBufferRange)load("glTextureBufferRange");
+	fp_glTextureStorage1D = (pfn_glTextureStorage1D)load("glTextureStorage1D");
+	fp_glTextureStorage2D = (pfn_glTextureStorage2D)load("glTextureStorage2D");
+	fp_glTextureStorage3D = (pfn_glTextureStorage3D)load("glTextureStorage3D");
+	fp_glTextureStorage2DMultisample = (pfn_glTextureStorage2DMultisample)load("glTextureStorage2DMultisample");
+	fp_glTextureStorage3DMultisample = (pfn_glTextureStorage3DMultisample)load("glTextureStorage3DMultisample");
+	fp_glTextureSubImage1D = (pfn_glTextureSubImage1D)load("glTextureSubImage1D");
+	fp_glTextureSubImage2D = (pfn_glTextureSubImage2D)load("glTextureSubImage2D");
+	fp_glTextureSubImage3D = (pfn_glTextureSubImage3D)load("glTextureSubImage3D");
+	fp_glCompressedTextureSubImage1D = (pfn_glCompressedTextureSubImage1D)load("glCompressedTextureSubImage1D");
+	fp_glCompressedTextureSubImage2D = (pfn_glCompressedTextureSubImage2D)load("glCompressedTextureSubImage2D");
+	fp_glCompressedTextureSubImage3D = (pfn_glCompressedTextureSubImage3D)load("glCompressedTextureSubImage3D");
+	fp_glCopyTextureSubImage1D = (pfn_glCopyTextureSubImage1D)load("glCopyTextureSubImage1D");
+	fp_glCopyTextureSubImage2D = (pfn_glCopyTextureSubImage2D)load("glCopyTextureSubImage2D");
+	fp_glCopyTextureSubImage3D = (pfn_glCopyTextureSubImage3D)load("glCopyTextureSubImage3D");
+	fp_glTextureParameterf = (pfn_glTextureParameterf)load("glTextureParameterf");
+	fp_glTextureParameterfv = (pfn_glTextureParameterfv)load("glTextureParameterfv");
+	fp_glTextureParameteri = (pfn_glTextureParameteri)load("glTextureParameteri");
+	fp_glTextureParameterIiv = (pfn_glTextureParameterIiv)load("glTextureParameterIiv");
+	fp_glTextureParameterIuiv = (pfn_glTextureParameterIuiv)load("glTextureParameterIuiv");
+	fp_glTextureParameteriv = (pfn_glTextureParameteriv)load("glTextureParameteriv");
+	fp_glGenerateTextureMipmap = (pfn_glGenerateTextureMipmap)load("glGenerateTextureMipmap");
+	fp_glBindTextureUnit = (pfn_glBindTextureUnit)load("glBindTextureUnit");
+	fp_glGetTextureImage = (pfn_glGetTextureImage)load("glGetTextureImage");
+	fp_glGetCompressedTextureImage = (pfn_glGetCompressedTextureImage)load("glGetCompressedTextureImage");
+	fp_glGetTextureLevelParameterfv = (pfn_glGetTextureLevelParameterfv)load("glGetTextureLevelParameterfv");
+	fp_glGetTextureLevelParameteriv = (pfn_glGetTextureLevelParameteriv)load("glGetTextureLevelParameteriv");
+	fp_glGetTextureParameterfv = (pfn_glGetTextureParameterfv)load("glGetTextureParameterfv");
+	fp_glGetTextureParameterIiv = (pfn_glGetTextureParameterIiv)load("glGetTextureParameterIiv");
+	fp_glGetTextureParameterIuiv = (pfn_glGetTextureParameterIuiv)load("glGetTextureParameterIuiv");
+	fp_glGetTextureParameteriv = (pfn_glGetTextureParameteriv)load("glGetTextureParameteriv");
+	fp_glCreateVertexArrays = (pfn_glCreateVertexArrays)load("glCreateVertexArrays");
+	fp_glDisableVertexArrayAttrib = (pfn_glDisableVertexArrayAttrib)load("glDisableVertexArrayAttrib");
+	fp_glEnableVertexArrayAttrib = (pfn_glEnableVertexArrayAttrib)load("glEnableVertexArrayAttrib");
+	fp_glVertexArrayElementBuffer = (pfn_glVertexArrayElementBuffer)load("glVertexArrayElementBuffer");
+	fp_glVertexArrayVertexBuffer = (pfn_glVertexArrayVertexBuffer)load("glVertexArrayVertexBuffer");
+	fp_glVertexArrayVertexBuffers = (pfn_glVertexArrayVertexBuffers)load("glVertexArrayVertexBuffers");
+	fp_glVertexArrayAttribBinding = (pfn_glVertexArrayAttribBinding)load("glVertexArrayAttribBinding");
+	fp_glVertexArrayAttribFormat = (pfn_glVertexArrayAttribFormat)load("glVertexArrayAttribFormat");
+	fp_glVertexArrayAttribIFormat = (pfn_glVertexArrayAttribIFormat)load("glVertexArrayAttribIFormat");
+	fp_glVertexArrayAttribLFormat = (pfn_glVertexArrayAttribLFormat)load("glVertexArrayAttribLFormat");
+	fp_glVertexArrayBindingDivisor = (pfn_glVertexArrayBindingDivisor)load("glVertexArrayBindingDivisor");
+	fp_glGetVertexArrayiv = (pfn_glGetVertexArrayiv)load("glGetVertexArrayiv");
+	fp_glGetVertexArrayIndexediv = (pfn_glGetVertexArrayIndexediv)load("glGetVertexArrayIndexediv");
+	fp_glGetVertexArrayIndexed64iv = (pfn_glGetVertexArrayIndexed64iv)load("glGetVertexArrayIndexed64iv");
+	fp_glCreateSamplers = (pfn_glCreateSamplers)load("glCreateSamplers");
+	fp_glCreateProgramPipelines = (pfn_glCreateProgramPipelines)load("glCreateProgramPipelines");
+	fp_glCreateQueries = (pfn_glCreateQueries)load("glCreateQueries");
+}
+
+GLboolean GLAD_ARB_draw_buffers_blend = GL_FALSE;
+static void load_GL_ARB_draw_buffers_blend(LOADER load) {
+	if(!GLAD_ARB_draw_buffers_blend) return;
+	fp_glBlendEquationiARB = (pfn_glBlendEquationiARB)load("glBlendEquationiARB");
+	fp_glBlendEquationSeparateiARB = (pfn_glBlendEquationSeparateiARB)load("glBlendEquationSeparateiARB");
+	fp_glBlendFunciARB = (pfn_glBlendFunciARB)load("glBlendFunciARB");
+	fp_glBlendFuncSeparateiARB = (pfn_glBlendFuncSeparateiARB)load("glBlendFuncSeparateiARB");
+}
+
+GLboolean GLAD_ARB_draw_elements_base_vertex = GL_FALSE;
+static void load_GL_ARB_draw_elements_base_vertex(LOADER load) {
+	if(!GLAD_ARB_draw_elements_base_vertex) return;
+	fp_glDrawElementsBaseVertex = (pfn_glDrawElementsBaseVertex)load("glDrawElementsBaseVertex");
+	fp_glDrawRangeElementsBaseVertex = (pfn_glDrawRangeElementsBaseVertex)load("glDrawRangeElementsBaseVertex");
+	fp_glDrawElementsInstancedBaseVertex = (pfn_glDrawElementsInstancedBaseVertex)load("glDrawElementsInstancedBaseVertex");
+	fp_glMultiDrawElementsBaseVertex = (pfn_glMultiDrawElementsBaseVertex)load("glMultiDrawElementsBaseVertex");
+}
+
+GLboolean GLAD_ARB_draw_indirect = GL_FALSE;
+static void load_GL_ARB_draw_indirect(LOADER load) {
+	if(!GLAD_ARB_draw_indirect) return;
+	fp_glDrawArraysIndirect = (pfn_glDrawArraysIndirect)load("glDrawArraysIndirect");
+	fp_glDrawElementsIndirect = (pfn_glDrawElementsIndirect)load("glDrawElementsIndirect");
+}
+
+GLboolean GLAD_ARB_draw_instanced = GL_FALSE;
+static void load_GL_ARB_draw_instanced(LOADER load) {
+	if(!GLAD_ARB_draw_instanced) return;
+	fp_glDrawArraysInstancedARB = (pfn_glDrawArraysInstancedARB)load("glDrawArraysInstancedARB");
+	fp_glDrawElementsInstancedARB = (pfn_glDrawElementsInstancedARB)load("glDrawElementsInstancedARB");
+}
+
+GLboolean GLAD_ARB_enhanced_layouts = GL_FALSE;
+GLboolean GLAD_ARB_ES2_compatibility = GL_FALSE;
+static void load_GL_ARB_ES2_compatibility(LOADER load) {
+	if(!GLAD_ARB_ES2_compatibility) return;
+	fp_glReleaseShaderCompiler = (pfn_glReleaseShaderCompiler)load("glReleaseShaderCompiler");
+	fp_glShaderBinary = (pfn_glShaderBinary)load("glShaderBinary");
+	fp_glGetShaderPrecisionFormat = (pfn_glGetShaderPrecisionFormat)load("glGetShaderPrecisionFormat");
+	fp_glDepthRangef = (pfn_glDepthRangef)load("glDepthRangef");
+	fp_glClearDepthf = (pfn_glClearDepthf)load("glClearDepthf");
+}
+
+GLboolean GLAD_ARB_ES3_1_compatibility = GL_FALSE;
+static void load_GL_ARB_ES3_1_compatibility(LOADER load) {
+	if(!GLAD_ARB_ES3_1_compatibility) return;
+	fp_glMemoryBarrierByRegion = (pfn_glMemoryBarrierByRegion)load("glMemoryBarrierByRegion");
+}
+
+GLboolean GLAD_ARB_ES3_compatibility = GL_FALSE;
+GLboolean GLAD_ARB_explicit_attrib_location = GL_FALSE;
+GLboolean GLAD_ARB_explicit_uniform_location = GL_FALSE;
+GLboolean GLAD_ARB_fragment_coord_conventions = GL_FALSE;
+GLboolean GLAD_ARB_fragment_layer_viewport = GL_FALSE;
+GLboolean GLAD_ARB_framebuffer_no_attachments = GL_FALSE;
+static void load_GL_ARB_framebuffer_no_attachments(LOADER load) {
+	if(!GLAD_ARB_framebuffer_no_attachments) return;
+	fp_glFramebufferParameteri = (pfn_glFramebufferParameteri)load("glFramebufferParameteri");
+	fp_glGetFramebufferParameteriv = (pfn_glGetFramebufferParameteriv)load("glGetFramebufferParameteriv");
+}
+
+GLboolean GLAD_ARB_framebuffer_object = GL_FALSE;
+static void load_GL_ARB_framebuffer_object(LOADER load) {
+	if(!GLAD_ARB_framebuffer_object) return;
+	fp_glIsRenderbuffer = (pfn_glIsRenderbuffer)load("glIsRenderbuffer");
+	fp_glBindRenderbuffer = (pfn_glBindRenderbuffer)load("glBindRenderbuffer");
+	fp_glDeleteRenderbuffers = (pfn_glDeleteRenderbuffers)load("glDeleteRenderbuffers");
+	fp_glGenRenderbuffers = (pfn_glGenRenderbuffers)load("glGenRenderbuffers");
+	fp_glRenderbufferStorage = (pfn_glRenderbufferStorage)load("glRenderbufferStorage");
+	fp_glGetRenderbufferParameteriv = (pfn_glGetRenderbufferParameteriv)load("glGetRenderbufferParameteriv");
+	fp_glIsFramebuffer = (pfn_glIsFramebuffer)load("glIsFramebuffer");
+	fp_glBindFramebuffer = (pfn_glBindFramebuffer)load("glBindFramebuffer");
+	fp_glDeleteFramebuffers = (pfn_glDeleteFramebuffers)load("glDeleteFramebuffers");
+	fp_glGenFramebuffers = (pfn_glGenFramebuffers)load("glGenFramebuffers");
+	fp_glCheckFramebufferStatus = (pfn_glCheckFramebufferStatus)load("glCheckFramebufferStatus");
+	fp_glFramebufferTexture1D = (pfn_glFramebufferTexture1D)load("glFramebufferTexture1D");
+	fp_glFramebufferTexture2D = (pfn_glFramebufferTexture2D)load("glFramebufferTexture2D");
+	fp_glFramebufferTexture3D = (pfn_glFramebufferTexture3D)load("glFramebufferTexture3D");
+	fp_glFramebufferRenderbuffer = (pfn_glFramebufferRenderbuffer)load("glFramebufferRenderbuffer");
+	fp_glGetFramebufferAttachmentParameteriv = (pfn_glGetFramebufferAttachmentParameteriv)load("glGetFramebufferAttachmentParameteriv");
+	fp_glGenerateMipmap = (pfn_glGenerateMipmap)load("glGenerateMipmap");
+	fp_glBlitFramebuffer = (pfn_glBlitFramebuffer)load("glBlitFramebuffer");
+	fp_glRenderbufferStorageMultisample = (pfn_glRenderbufferStorageMultisample)load("glRenderbufferStorageMultisample");
+	fp_glFramebufferTextureLayer = (pfn_glFramebufferTextureLayer)load("glFramebufferTextureLayer");
+}
+
+GLboolean GLAD_ARB_framebuffer_sRGB = GL_FALSE;
+GLboolean GLAD_ARB_geometry_shader4 = GL_FALSE;
+static void load_GL_ARB_geometry_shader4(LOADER load) {
+	if(!GLAD_ARB_geometry_shader4) return;
+	fp_glProgramParameteriARB = (pfn_glProgramParameteriARB)load("glProgramParameteriARB");
+	fp_glFramebufferTextureARB = (pfn_glFramebufferTextureARB)load("glFramebufferTextureARB");
+	fp_glFramebufferTextureLayerARB = (pfn_glFramebufferTextureLayerARB)load("glFramebufferTextureLayerARB");
+	fp_glFramebufferTextureFaceARB = (pfn_glFramebufferTextureFaceARB)load("glFramebufferTextureFaceARB");
+}
+
+GLboolean GLAD_ARB_get_program_binary = GL_FALSE;
+static void load_GL_ARB_get_program_binary(LOADER load) {
+	if(!GLAD_ARB_get_program_binary) return;
+	fp_glGetProgramBinary = (pfn_glGetProgramBinary)load("glGetProgramBinary");
+	fp_glProgramBinary = (pfn_glProgramBinary)load("glProgramBinary");
+	fp_glProgramParameteri = (pfn_glProgramParameteri)load("glProgramParameteri");
+}
+
+GLboolean GLAD_ARB_get_texture_sub_image = GL_FALSE;
+static void load_GL_ARB_get_texture_sub_image(LOADER load) {
+	if(!GLAD_ARB_get_texture_sub_image) return;
+	fp_glGetTextureSubImage = (pfn_glGetTextureSubImage)load("glGetTextureSubImage");
+	fp_glGetCompressedTextureSubImage = (pfn_glGetCompressedTextureSubImage)load("glGetCompressedTextureSubImage");
+}
+
+GLboolean GLAD_ARB_gpu_shader5 = GL_FALSE;
+GLboolean GLAD_ARB_gpu_shader_fp64 = GL_FALSE;
+static void load_GL_ARB_gpu_shader_fp64(LOADER load) {
+	if(!GLAD_ARB_gpu_shader_fp64) return;
+	fp_glUniform1d = (pfn_glUniform1d)load("glUniform1d");
+	fp_glUniform2d = (pfn_glUniform2d)load("glUniform2d");
+	fp_glUniform3d = (pfn_glUniform3d)load("glUniform3d");
+	fp_glUniform4d = (pfn_glUniform4d)load("glUniform4d");
+	fp_glUniform1dv = (pfn_glUniform1dv)load("glUniform1dv");
+	fp_glUniform2dv = (pfn_glUniform2dv)load("glUniform2dv");
+	fp_glUniform3dv = (pfn_glUniform3dv)load("glUniform3dv");
+	fp_glUniform4dv = (pfn_glUniform4dv)load("glUniform4dv");
+	fp_glUniformMatrix2dv = (pfn_glUniformMatrix2dv)load("glUniformMatrix2dv");
+	fp_glUniformMatrix3dv = (pfn_glUniformMatrix3dv)load("glUniformMatrix3dv");
+	fp_glUniformMatrix4dv = (pfn_glUniformMatrix4dv)load("glUniformMatrix4dv");
+	fp_glUniformMatrix2x3dv = (pfn_glUniformMatrix2x3dv)load("glUniformMatrix2x3dv");
+	fp_glUniformMatrix2x4dv = (pfn_glUniformMatrix2x4dv)load("glUniformMatrix2x4dv");
+	fp_glUniformMatrix3x2dv = (pfn_glUniformMatrix3x2dv)load("glUniformMatrix3x2dv");
+	fp_glUniformMatrix3x4dv = (pfn_glUniformMatrix3x4dv)load("glUniformMatrix3x4dv");
+	fp_glUniformMatrix4x2dv = (pfn_glUniformMatrix4x2dv)load("glUniformMatrix4x2dv");
+	fp_glUniformMatrix4x3dv = (pfn_glUniformMatrix4x3dv)load("glUniformMatrix4x3dv");
+	fp_glGetUniformdv = (pfn_glGetUniformdv)load("glGetUniformdv");
+}
+
+GLboolean GLAD_ARB_half_float_pixel = GL_FALSE;
+GLboolean GLAD_ARB_half_float_vertex = GL_FALSE;
+GLboolean GLAD_ARB_indirect_parameters = GL_FALSE;
+static void load_GL_ARB_indirect_parameters(LOADER load) {
+	if(!GLAD_ARB_indirect_parameters) return;
+	fp_glMultiDrawArraysIndirectCountARB = (pfn_glMultiDrawArraysIndirectCountARB)load("glMultiDrawArraysIndirectCountARB");
+	fp_glMultiDrawElementsIndirectCountARB = (pfn_glMultiDrawElementsIndirectCountARB)load("glMultiDrawElementsIndirectCountARB");
+}
+
+GLboolean GLAD_ARB_instanced_arrays = GL_FALSE;
+static void load_GL_ARB_instanced_arrays(LOADER load) {
+	if(!GLAD_ARB_instanced_arrays) return;
+	fp_glVertexAttribDivisorARB = (pfn_glVertexAttribDivisorARB)load("glVertexAttribDivisorARB");
+}
+
+GLboolean GLAD_ARB_internalformat_query = GL_FALSE;
+static void load_GL_ARB_internalformat_query(LOADER load) {
+	if(!GLAD_ARB_internalformat_query) return;
+	fp_glGetInternalformativ = (pfn_glGetInternalformativ)load("glGetInternalformativ");
+}
+
+GLboolean GLAD_ARB_internalformat_query2 = GL_FALSE;
+static void load_GL_ARB_internalformat_query2(LOADER load) {
+	if(!GLAD_ARB_internalformat_query2) return;
+	fp_glGetInternalformati64v = (pfn_glGetInternalformati64v)load("glGetInternalformati64v");
+}
+
+GLboolean GLAD_ARB_invalidate_subdata = GL_FALSE;
+static void load_GL_ARB_invalidate_subdata(LOADER load) {
+	if(!GLAD_ARB_invalidate_subdata) return;
+	fp_glInvalidateTexSubImage = (pfn_glInvalidateTexSubImage)load("glInvalidateTexSubImage");
+	fp_glInvalidateTexImage = (pfn_glInvalidateTexImage)load("glInvalidateTexImage");
+	fp_glInvalidateBufferSubData = (pfn_glInvalidateBufferSubData)load("glInvalidateBufferSubData");
+	fp_glInvalidateBufferData = (pfn_glInvalidateBufferData)load("glInvalidateBufferData");
+	fp_glInvalidateFramebuffer = (pfn_glInvalidateFramebuffer)load("glInvalidateFramebuffer");
+	fp_glInvalidateSubFramebuffer = (pfn_glInvalidateSubFramebuffer)load("glInvalidateSubFramebuffer");
+}
+
+GLboolean GLAD_ARB_map_buffer_alignment = GL_FALSE;
+GLboolean GLAD_ARB_map_buffer_range = GL_FALSE;
+static void load_GL_ARB_map_buffer_range(LOADER load) {
+	if(!GLAD_ARB_map_buffer_range) return;
+	fp_glMapBufferRange = (pfn_glMapBufferRange)load("glMapBufferRange");
+	fp_glFlushMappedBufferRange = (pfn_glFlushMappedBufferRange)load("glFlushMappedBufferRange");
+}
+
+GLboolean GLAD_ARB_multi_bind = GL_FALSE;
+static void load_GL_ARB_multi_bind(LOADER load) {
+	if(!GLAD_ARB_multi_bind) return;
+	fp_glBindBuffersBase = (pfn_glBindBuffersBase)load("glBindBuffersBase");
+	fp_glBindBuffersRange = (pfn_glBindBuffersRange)load("glBindBuffersRange");
+	fp_glBindTextures = (pfn_glBindTextures)load("glBindTextures");
+	fp_glBindSamplers = (pfn_glBindSamplers)load("glBindSamplers");
+	fp_glBindImageTextures = (pfn_glBindImageTextures)load("glBindImageTextures");
+	fp_glBindVertexBuffers = (pfn_glBindVertexBuffers)load("glBindVertexBuffers");
+}
+
+GLboolean GLAD_ARB_multi_draw_indirect = GL_FALSE;
+static void load_GL_ARB_multi_draw_indirect(LOADER load) {
+	if(!GLAD_ARB_multi_draw_indirect) return;
+	fp_glMultiDrawArraysIndirect = (pfn_glMultiDrawArraysIndirect)load("glMultiDrawArraysIndirect");
+	fp_glMultiDrawElementsIndirect = (pfn_glMultiDrawElementsIndirect)load("glMultiDrawElementsIndirect");
+}
+
+GLboolean GLAD_ARB_occlusion_query2 = GL_FALSE;
+GLboolean GLAD_ARB_pipeline_statistics_query = GL_FALSE;
+GLboolean GLAD_ARB_pixel_buffer_object = GL_FALSE;
+GLboolean GLAD_ARB_program_interface_query = GL_FALSE;
+static void load_GL_ARB_program_interface_query(LOADER load) {
+	if(!GLAD_ARB_program_interface_query) return;
+	fp_glGetProgramInterfaceiv = (pfn_glGetProgramInterfaceiv)load("glGetProgramInterfaceiv");
+	fp_glGetProgramResourceIndex = (pfn_glGetProgramResourceIndex)load("glGetProgramResourceIndex");
+	fp_glGetProgramResourceName = (pfn_glGetProgramResourceName)load("glGetProgramResourceName");
+	fp_glGetProgramResourceiv = (pfn_glGetProgramResourceiv)load("glGetProgramResourceiv");
+	fp_glGetProgramResourceLocation = (pfn_glGetProgramResourceLocation)load("glGetProgramResourceLocation");
+	fp_glGetProgramResourceLocationIndex = (pfn_glGetProgramResourceLocationIndex)load("glGetProgramResourceLocationIndex");
+}
+
+GLboolean GLAD_ARB_provoking_vertex = GL_FALSE;
+static void load_GL_ARB_provoking_vertex(LOADER load) {
+	if(!GLAD_ARB_provoking_vertex) return;
+	fp_glProvokingVertex = (pfn_glProvokingVertex)load("glProvokingVertex");
+}
+
+GLboolean GLAD_ARB_query_buffer_object = GL_FALSE;
+GLboolean GLAD_ARB_robust_buffer_access_behavior = GL_FALSE;
+GLboolean GLAD_ARB_robustness = GL_FALSE;
+static void load_GL_ARB_robustness(LOADER load) {
+	if(!GLAD_ARB_robustness) return;
+	fp_glGetGraphicsResetStatusARB = (pfn_glGetGraphicsResetStatusARB)load("glGetGraphicsResetStatusARB");
+	fp_glGetnTexImageARB = (pfn_glGetnTexImageARB)load("glGetnTexImageARB");
+	fp_glReadnPixelsARB = (pfn_glReadnPixelsARB)load("glReadnPixelsARB");
+	fp_glGetnCompressedTexImageARB = (pfn_glGetnCompressedTexImageARB)load("glGetnCompressedTexImageARB");
+	fp_glGetnUniformfvARB = (pfn_glGetnUniformfvARB)load("glGetnUniformfvARB");
+	fp_glGetnUniformivARB = (pfn_glGetnUniformivARB)load("glGetnUniformivARB");
+	fp_glGetnUniformuivARB = (pfn_glGetnUniformuivARB)load("glGetnUniformuivARB");
+	fp_glGetnUniformdvARB = (pfn_glGetnUniformdvARB)load("glGetnUniformdvARB");
+	fp_glGetnMapdvARB = (pfn_glGetnMapdvARB)load("glGetnMapdvARB");
+	fp_glGetnMapfvARB = (pfn_glGetnMapfvARB)load("glGetnMapfvARB");
+	fp_glGetnMapivARB = (pfn_glGetnMapivARB)load("glGetnMapivARB");
+	fp_glGetnPixelMapfvARB = (pfn_glGetnPixelMapfvARB)load("glGetnPixelMapfvARB");
+	fp_glGetnPixelMapuivARB = (pfn_glGetnPixelMapuivARB)load("glGetnPixelMapuivARB");
+	fp_glGetnPixelMapusvARB = (pfn_glGetnPixelMapusvARB)load("glGetnPixelMapusvARB");
+	fp_glGetnPolygonStippleARB = (pfn_glGetnPolygonStippleARB)load("glGetnPolygonStippleARB");
+	fp_glGetnColorTableARB = (pfn_glGetnColorTableARB)load("glGetnColorTableARB");
+	fp_glGetnConvolutionFilterARB = (pfn_glGetnConvolutionFilterARB)load("glGetnConvolutionFilterARB");
+	fp_glGetnSeparableFilterARB = (pfn_glGetnSeparableFilterARB)load("glGetnSeparableFilterARB");
+	fp_glGetnHistogramARB = (pfn_glGetnHistogramARB)load("glGetnHistogramARB");
+	fp_glGetnMinmaxARB = (pfn_glGetnMinmaxARB)load("glGetnMinmaxARB");
+}
+
+GLboolean GLAD_ARB_robustness_isolation = GL_FALSE;
+GLboolean GLAD_ARB_sample_shading = GL_FALSE;
+static void load_GL_ARB_sample_shading(LOADER load) {
+	if(!GLAD_ARB_sample_shading) return;
+	fp_glMinSampleShadingARB = (pfn_glMinSampleShadingARB)load("glMinSampleShadingARB");
+}
+
+GLboolean GLAD_ARB_sampler_objects = GL_FALSE;
+static void load_GL_ARB_sampler_objects(LOADER load) {
+	if(!GLAD_ARB_sampler_objects) return;
+	fp_glGenSamplers = (pfn_glGenSamplers)load("glGenSamplers");
+	fp_glDeleteSamplers = (pfn_glDeleteSamplers)load("glDeleteSamplers");
+	fp_glIsSampler = (pfn_glIsSampler)load("glIsSampler");
+	fp_glBindSampler = (pfn_glBindSampler)load("glBindSampler");
+	fp_glSamplerParameteri = (pfn_glSamplerParameteri)load("glSamplerParameteri");
+	fp_glSamplerParameteriv = (pfn_glSamplerParameteriv)load("glSamplerParameteriv");
+	fp_glSamplerParameterf = (pfn_glSamplerParameterf)load("glSamplerParameterf");
+	fp_glSamplerParameterfv = (pfn_glSamplerParameterfv)load("glSamplerParameterfv");
+	fp_glSamplerParameterIiv = (pfn_glSamplerParameterIiv)load("glSamplerParameterIiv");
+	fp_glSamplerParameterIuiv = (pfn_glSamplerParameterIuiv)load("glSamplerParameterIuiv");
+	fp_glGetSamplerParameteriv = (pfn_glGetSamplerParameteriv)load("glGetSamplerParameteriv");
+	fp_glGetSamplerParameterIiv = (pfn_glGetSamplerParameterIiv)load("glGetSamplerParameterIiv");
+	fp_glGetSamplerParameterfv = (pfn_glGetSamplerParameterfv)load("glGetSamplerParameterfv");
+	fp_glGetSamplerParameterIuiv = (pfn_glGetSamplerParameterIuiv)load("glGetSamplerParameterIuiv");
+}
+
+GLboolean GLAD_ARB_seamless_cube_map = GL_FALSE;
+GLboolean GLAD_ARB_seamless_cubemap_per_texture = GL_FALSE;
+GLboolean GLAD_ARB_separate_shader_objects = GL_FALSE;
+static void load_GL_ARB_separate_shader_objects(LOADER load) {
+	if(!GLAD_ARB_separate_shader_objects) return;
+	fp_glUseProgramStages = (pfn_glUseProgramStages)load("glUseProgramStages");
+	fp_glActiveShaderProgram = (pfn_glActiveShaderProgram)load("glActiveShaderProgram");
+	fp_glCreateShaderProgramv = (pfn_glCreateShaderProgramv)load("glCreateShaderProgramv");
+	fp_glBindProgramPipeline = (pfn_glBindProgramPipeline)load("glBindProgramPipeline");
+	fp_glDeleteProgramPipelines = (pfn_glDeleteProgramPipelines)load("glDeleteProgramPipelines");
+	fp_glGenProgramPipelines = (pfn_glGenProgramPipelines)load("glGenProgramPipelines");
+	fp_glIsProgramPipeline = (pfn_glIsProgramPipeline)load("glIsProgramPipeline");
+	fp_glGetProgramPipelineiv = (pfn_glGetProgramPipelineiv)load("glGetProgramPipelineiv");
+	fp_glProgramUniform1i = (pfn_glProgramUniform1i)load("glProgramUniform1i");
+	fp_glProgramUniform1iv = (pfn_glProgramUniform1iv)load("glProgramUniform1iv");
+	fp_glProgramUniform1f = (pfn_glProgramUniform1f)load("glProgramUniform1f");
+	fp_glProgramUniform1fv = (pfn_glProgramUniform1fv)load("glProgramUniform1fv");
+	fp_glProgramUniform1d = (pfn_glProgramUniform1d)load("glProgramUniform1d");
+	fp_glProgramUniform1dv = (pfn_glProgramUniform1dv)load("glProgramUniform1dv");
+	fp_glProgramUniform1ui = (pfn_glProgramUniform1ui)load("glProgramUniform1ui");
+	fp_glProgramUniform1uiv = (pfn_glProgramUniform1uiv)load("glProgramUniform1uiv");
+	fp_glProgramUniform2i = (pfn_glProgramUniform2i)load("glProgramUniform2i");
+	fp_glProgramUniform2iv = (pfn_glProgramUniform2iv)load("glProgramUniform2iv");
+	fp_glProgramUniform2f = (pfn_glProgramUniform2f)load("glProgramUniform2f");
+	fp_glProgramUniform2fv = (pfn_glProgramUniform2fv)load("glProgramUniform2fv");
+	fp_glProgramUniform2d = (pfn_glProgramUniform2d)load("glProgramUniform2d");
+	fp_glProgramUniform2dv = (pfn_glProgramUniform2dv)load("glProgramUniform2dv");
+	fp_glProgramUniform2ui = (pfn_glProgramUniform2ui)load("glProgramUniform2ui");
+	fp_glProgramUniform2uiv = (pfn_glProgramUniform2uiv)load("glProgramUniform2uiv");
+	fp_glProgramUniform3i = (pfn_glProgramUniform3i)load("glProgramUniform3i");
+	fp_glProgramUniform3iv = (pfn_glProgramUniform3iv)load("glProgramUniform3iv");
+	fp_glProgramUniform3f = (pfn_glProgramUniform3f)load("glProgramUniform3f");
+	fp_glProgramUniform3fv = (pfn_glProgramUniform3fv)load("glProgramUniform3fv");
+	fp_glProgramUniform3d = (pfn_glProgramUniform3d)load("glProgramUniform3d");
+	fp_glProgramUniform3dv = (pfn_glProgramUniform3dv)load("glProgramUniform3dv");
+	fp_glProgramUniform3ui = (pfn_glProgramUniform3ui)load("glProgramUniform3ui");
+	fp_glProgramUniform3uiv = (pfn_glProgramUniform3uiv)load("glProgramUniform3uiv");
+	fp_glProgramUniform4i = (pfn_glProgramUniform4i)load("glProgramUniform4i");
+	fp_glProgramUniform4iv = (pfn_glProgramUniform4iv)load("glProgramUniform4iv");
+	fp_glProgramUniform4f = (pfn_glProgramUniform4f)load("glProgramUniform4f");
+	fp_glProgramUniform4fv = (pfn_glProgramUniform4fv)load("glProgramUniform4fv");
+	fp_glProgramUniform4d = (pfn_glProgramUniform4d)load("glProgramUniform4d");
+	fp_glProgramUniform4dv = (pfn_glProgramUniform4dv)load("glProgramUniform4dv");
+	fp_glProgramUniform4ui = (pfn_glProgramUniform4ui)load("glProgramUniform4ui");
+	fp_glProgramUniform4uiv = (pfn_glProgramUniform4uiv)load("glProgramUniform4uiv");
+	fp_glProgramUniformMatrix2fv = (pfn_glProgramUniformMatrix2fv)load("glProgramUniformMatrix2fv");
+	fp_glProgramUniformMatrix3fv = (pfn_glProgramUniformMatrix3fv)load("glProgramUniformMatrix3fv");
+	fp_glProgramUniformMatrix4fv = (pfn_glProgramUniformMatrix4fv)load("glProgramUniformMatrix4fv");
+	fp_glProgramUniformMatrix2dv = (pfn_glProgramUniformMatrix2dv)load("glProgramUniformMatrix2dv");
+	fp_glProgramUniformMatrix3dv = (pfn_glProgramUniformMatrix3dv)load("glProgramUniformMatrix3dv");
+	fp_glProgramUniformMatrix4dv = (pfn_glProgramUniformMatrix4dv)load("glProgramUniformMatrix4dv");
+	fp_glProgramUniformMatrix2x3fv = (pfn_glProgramUniformMatrix2x3fv)load("glProgramUniformMatrix2x3fv");
+	fp_glProgramUniformMatrix3x2fv = (pfn_glProgramUniformMatrix3x2fv)load("glProgramUniformMatrix3x2fv");
+	fp_glProgramUniformMatrix2x4fv = (pfn_glProgramUniformMatrix2x4fv)load("glProgramUniformMatrix2x4fv");
+	fp_glProgramUniformMatrix4x2fv = (pfn_glProgramUniformMatrix4x2fv)load("glProgramUniformMatrix4x2fv");
+	fp_glProgramUniformMatrix3x4fv = (pfn_glProgramUniformMatrix3x4fv)load("glProgramUniformMatrix3x4fv");
+	fp_glProgramUniformMatrix4x3fv = (pfn_glProgramUniformMatrix4x3fv)load("glProgramUniformMatrix4x3fv");
+	fp_glProgramUniformMatrix2x3dv = (pfn_glProgramUniformMatrix2x3dv)load("glProgramUniformMatrix2x3dv");
+	fp_glProgramUniformMatrix3x2dv = (pfn_glProgramUniformMatrix3x2dv)load("glProgramUniformMatrix3x2dv");
+	fp_glProgramUniformMatrix2x4dv = (pfn_glProgramUniformMatrix2x4dv)load("glProgramUniformMatrix2x4dv");
+	fp_glProgramUniformMatrix4x2dv = (pfn_glProgramUniformMatrix4x2dv)load("glProgramUniformMatrix4x2dv");
+	fp_glProgramUniformMatrix3x4dv = (pfn_glProgramUniformMatrix3x4dv)load("glProgramUniformMatrix3x4dv");
+	fp_glProgramUniformMatrix4x3dv = (pfn_glProgramUniformMatrix4x3dv)load("glProgramUniformMatrix4x3dv");
+	fp_glValidateProgramPipeline = (pfn_glValidateProgramPipeline)load("glValidateProgramPipeline");
+	fp_glGetProgramPipelineInfoLog = (pfn_glGetProgramPipelineInfoLog)load("glGetProgramPipelineInfoLog");
+}
+
+GLboolean GLAD_ARB_shader_atomic_counters = GL_FALSE;
+static void load_GL_ARB_shader_atomic_counters(LOADER load) {
+	if(!GLAD_ARB_shader_atomic_counters) return;
+	fp_glGetActiveAtomicCounterBufferiv = (pfn_glGetActiveAtomicCounterBufferiv)load("glGetActiveAtomicCounterBufferiv");
+}
+
+GLboolean GLAD_ARB_shader_bit_encoding = GL_FALSE;
+GLboolean GLAD_ARB_shader_draw_parameters = GL_FALSE;
+GLboolean GLAD_ARB_shader_group_vote = GL_FALSE;
+GLboolean GLAD_ARB_shader_image_load_store = GL_FALSE;
+static void load_GL_ARB_shader_image_load_store(LOADER load) {
+	if(!GLAD_ARB_shader_image_load_store) return;
+	fp_glBindImageTexture = (pfn_glBindImageTexture)load("glBindImageTexture");
+	fp_glMemoryBarrier = (pfn_glMemoryBarrier)load("glMemoryBarrier");
+}
+
+GLboolean GLAD_ARB_shader_image_size = GL_FALSE;
+GLboolean GLAD_ARB_shader_precision = GL_FALSE;
+GLboolean GLAD_ARB_shader_stencil_export = GL_FALSE;
+GLboolean GLAD_ARB_shader_storage_buffer_object = GL_FALSE;
+static void load_GL_ARB_shader_storage_buffer_object(LOADER load) {
+	if(!GLAD_ARB_shader_storage_buffer_object) return;
+	fp_glShaderStorageBlockBinding = (pfn_glShaderStorageBlockBinding)load("glShaderStorageBlockBinding");
+}
+
+GLboolean GLAD_ARB_shader_subroutine = GL_FALSE;
+static void load_GL_ARB_shader_subroutine(LOADER load) {
+	if(!GLAD_ARB_shader_subroutine) return;
+	fp_glGetSubroutineUniformLocation = (pfn_glGetSubroutineUniformLocation)load("glGetSubroutineUniformLocation");
+	fp_glGetSubroutineIndex = (pfn_glGetSubroutineIndex)load("glGetSubroutineIndex");
+	fp_glGetActiveSubroutineUniformiv = (pfn_glGetActiveSubroutineUniformiv)load("glGetActiveSubroutineUniformiv");
+	fp_glGetActiveSubroutineUniformName = (pfn_glGetActiveSubroutineUniformName)load("glGetActiveSubroutineUniformName");
+	fp_glGetActiveSubroutineName = (pfn_glGetActiveSubroutineName)load("glGetActiveSubroutineName");
+	fp_glUniformSubroutinesuiv = (pfn_glUniformSubroutinesuiv)load("glUniformSubroutinesuiv");
+	fp_glGetUniformSubroutineuiv = (pfn_glGetUniformSubroutineuiv)load("glGetUniformSubroutineuiv");
+	fp_glGetProgramStageiv = (pfn_glGetProgramStageiv)load("glGetProgramStageiv");
+}
+
+GLboolean GLAD_ARB_shader_texture_image_samples = GL_FALSE;
+GLboolean GLAD_ARB_shader_texture_lod = GL_FALSE;
+GLboolean GLAD_ARB_shading_language_420pack = GL_FALSE;
+GLboolean GLAD_ARB_shading_language_include = GL_FALSE;
+static void load_GL_ARB_shading_language_include(LOADER load) {
+	if(!GLAD_ARB_shading_language_include) return;
+	fp_glNamedStringARB = (pfn_glNamedStringARB)load("glNamedStringARB");
+	fp_glDeleteNamedStringARB = (pfn_glDeleteNamedStringARB)load("glDeleteNamedStringARB");
+	fp_glCompileShaderIncludeARB = (pfn_glCompileShaderIncludeARB)load("glCompileShaderIncludeARB");
+	fp_glIsNamedStringARB = (pfn_glIsNamedStringARB)load("glIsNamedStringARB");
+	fp_glGetNamedStringARB = (pfn_glGetNamedStringARB)load("glGetNamedStringARB");
+	fp_glGetNamedStringivARB = (pfn_glGetNamedStringivARB)load("glGetNamedStringivARB");
+}
+
+GLboolean GLAD_ARB_shading_language_packing = GL_FALSE;
+GLboolean GLAD_ARB_sparse_buffer = GL_FALSE;
+static void load_GL_ARB_sparse_buffer(LOADER load) {
+	if(!GLAD_ARB_sparse_buffer) return;
+	fp_glBufferPageCommitmentARB = (pfn_glBufferPageCommitmentARB)load("glBufferPageCommitmentARB");
+	fp_glNamedBufferPageCommitmentEXT = (pfn_glNamedBufferPageCommitmentEXT)load("glNamedBufferPageCommitmentEXT");
+	fp_glNamedBufferPageCommitmentARB = (pfn_glNamedBufferPageCommitmentARB)load("glNamedBufferPageCommitmentARB");
+}
+
+GLboolean GLAD_ARB_sparse_texture = GL_FALSE;
+static void load_GL_ARB_sparse_texture(LOADER load) {
+	if(!GLAD_ARB_sparse_texture) return;
+	fp_glTexPageCommitmentARB = (pfn_glTexPageCommitmentARB)load("glTexPageCommitmentARB");
+}
+
+GLboolean GLAD_ARB_stencil_texturing = GL_FALSE;
+GLboolean GLAD_ARB_sync = GL_FALSE;
+static void load_GL_ARB_sync(LOADER load) {
+	if(!GLAD_ARB_sync) return;
+	fp_glFenceSync = (pfn_glFenceSync)load("glFenceSync");
+	fp_glIsSync = (pfn_glIsSync)load("glIsSync");
+	fp_glDeleteSync = (pfn_glDeleteSync)load("glDeleteSync");
+	fp_glClientWaitSync = (pfn_glClientWaitSync)load("glClientWaitSync");
+	fp_glWaitSync = (pfn_glWaitSync)load("glWaitSync");
+	fp_glGetInteger64v = (pfn_glGetInteger64v)load("glGetInteger64v");
+	fp_glGetSynciv = (pfn_glGetSynciv)load("glGetSynciv");
+}
+
+GLboolean GLAD_ARB_tessellation_shader = GL_FALSE;
+static void load_GL_ARB_tessellation_shader(LOADER load) {
+	if(!GLAD_ARB_tessellation_shader) return;
+	fp_glPatchParameteri = (pfn_glPatchParameteri)load("glPatchParameteri");
+	fp_glPatchParameterfv = (pfn_glPatchParameterfv)load("glPatchParameterfv");
+}
+
+GLboolean GLAD_ARB_texture_barrier = GL_FALSE;
+static void load_GL_ARB_texture_barrier(LOADER load) {
+	if(!GLAD_ARB_texture_barrier) return;
+	fp_glTextureBarrier = (pfn_glTextureBarrier)load("glTextureBarrier");
+}
+
+GLboolean GLAD_ARB_texture_buffer_object = GL_FALSE;
+static void load_GL_ARB_texture_buffer_object(LOADER load) {
+	if(!GLAD_ARB_texture_buffer_object) return;
+	fp_glTexBufferARB = (pfn_glTexBufferARB)load("glTexBufferARB");
+}
+
+GLboolean GLAD_ARB_texture_buffer_object_rgb32 = GL_FALSE;
+GLboolean GLAD_ARB_texture_buffer_range = GL_FALSE;
+static void load_GL_ARB_texture_buffer_range(LOADER load) {
+	if(!GLAD_ARB_texture_buffer_range) return;
+	fp_glTexBufferRange = (pfn_glTexBufferRange)load("glTexBufferRange");
+}
+
+GLboolean GLAD_ARB_texture_compression_bptc = GL_FALSE;
+GLboolean GLAD_ARB_texture_compression_rgtc = GL_FALSE;
+GLboolean GLAD_ARB_texture_cube_map_array = GL_FALSE;
+GLboolean GLAD_ARB_texture_float = GL_FALSE;
+GLboolean GLAD_ARB_texture_gather = GL_FALSE;
+GLboolean GLAD_ARB_texture_mirror_clamp_to_edge = GL_FALSE;
+GLboolean GLAD_ARB_texture_multisample = GL_FALSE;
+static void load_GL_ARB_texture_multisample(LOADER load) {
+	if(!GLAD_ARB_texture_multisample) return;
+	fp_glTexImage2DMultisample = (pfn_glTexImage2DMultisample)load("glTexImage2DMultisample");
+	fp_glTexImage3DMultisample = (pfn_glTexImage3DMultisample)load("glTexImage3DMultisample");
+	fp_glGetMultisamplefv = (pfn_glGetMultisamplefv)load("glGetMultisamplefv");
+	fp_glSampleMaski = (pfn_glSampleMaski)load("glSampleMaski");
+}
+
+GLboolean GLAD_ARB_texture_query_levels = GL_FALSE;
+GLboolean GLAD_ARB_texture_query_lod = GL_FALSE;
+GLboolean GLAD_ARB_texture_rectangle = GL_FALSE;
+GLboolean GLAD_ARB_texture_rg = GL_FALSE;
+GLboolean GLAD_ARB_texture_rgb10_a2ui = GL_FALSE;
+GLboolean GLAD_ARB_texture_stencil8 = GL_FALSE;
+GLboolean GLAD_ARB_texture_storage = GL_FALSE;
+static void load_GL_ARB_texture_storage(LOADER load) {
+	if(!GLAD_ARB_texture_storage) return;
+	fp_glTexStorage1D = (pfn_glTexStorage1D)load("glTexStorage1D");
+	fp_glTexStorage2D = (pfn_glTexStorage2D)load("glTexStorage2D");
+	fp_glTexStorage3D = (pfn_glTexStorage3D)load("glTexStorage3D");
+}
+
+GLboolean GLAD_ARB_texture_storage_multisample = GL_FALSE;
+static void load_GL_ARB_texture_storage_multisample(LOADER load) {
+	if(!GLAD_ARB_texture_storage_multisample) return;
+	fp_glTexStorage2DMultisample = (pfn_glTexStorage2DMultisample)load("glTexStorage2DMultisample");
+	fp_glTexStorage3DMultisample = (pfn_glTexStorage3DMultisample)load("glTexStorage3DMultisample");
+}
+
+GLboolean GLAD_ARB_texture_swizzle = GL_FALSE;
+GLboolean GLAD_ARB_texture_view = GL_FALSE;
+static void load_GL_ARB_texture_view(LOADER load) {
+	if(!GLAD_ARB_texture_view) return;
+	fp_glTextureView = (pfn_glTextureView)load("glTextureView");
+}
+
+GLboolean GLAD_ARB_timer_query = GL_FALSE;
+static void load_GL_ARB_timer_query(LOADER load) {
+	if(!GLAD_ARB_timer_query) return;
+	fp_glQueryCounter = (pfn_glQueryCounter)load("glQueryCounter");
+	fp_glGetQueryObjecti64v = (pfn_glGetQueryObjecti64v)load("glGetQueryObjecti64v");
+	fp_glGetQueryObjectui64v = (pfn_glGetQueryObjectui64v)load("glGetQueryObjectui64v");
+}
+
+GLboolean GLAD_ARB_transform_feedback2 = GL_FALSE;
+static void load_GL_ARB_transform_feedback2(LOADER load) {
+	if(!GLAD_ARB_transform_feedback2) return;
+	fp_glBindTransformFeedback = (pfn_glBindTransformFeedback)load("glBindTransformFeedback");
+	fp_glDeleteTransformFeedbacks = (pfn_glDeleteTransformFeedbacks)load("glDeleteTransformFeedbacks");
+	fp_glGenTransformFeedbacks = (pfn_glGenTransformFeedbacks)load("glGenTransformFeedbacks");
+	fp_glIsTransformFeedback = (pfn_glIsTransformFeedback)load("glIsTransformFeedback");
+	fp_glPauseTransformFeedback = (pfn_glPauseTransformFeedback)load("glPauseTransformFeedback");
+	fp_glResumeTransformFeedback = (pfn_glResumeTransformFeedback)load("glResumeTransformFeedback");
+	fp_glDrawTransformFeedback = (pfn_glDrawTransformFeedback)load("glDrawTransformFeedback");
+}
+
+GLboolean GLAD_ARB_transform_feedback3 = GL_FALSE;
+static void load_GL_ARB_transform_feedback3(LOADER load) {
+	if(!GLAD_ARB_transform_feedback3) return;
+	fp_glDrawTransformFeedbackStream = (pfn_glDrawTransformFeedbackStream)load("glDrawTransformFeedbackStream");
+	fp_glBeginQueryIndexed = (pfn_glBeginQueryIndexed)load("glBeginQueryIndexed");
+	fp_glEndQueryIndexed = (pfn_glEndQueryIndexed)load("glEndQueryIndexed");
+	fp_glGetQueryIndexediv = (pfn_glGetQueryIndexediv)load("glGetQueryIndexediv");
+}
+
+GLboolean GLAD_ARB_transform_feedback_instanced = GL_FALSE;
+static void load_GL_ARB_transform_feedback_instanced(LOADER load) {
+	if(!GLAD_ARB_transform_feedback_instanced) return;
+	fp_glDrawTransformFeedbackInstanced = (pfn_glDrawTransformFeedbackInstanced)load("glDrawTransformFeedbackInstanced");
+	fp_glDrawTransformFeedbackStreamInstanced = (pfn_glDrawTransformFeedbackStreamInstanced)load("glDrawTransformFeedbackStreamInstanced");
+}
+
+GLboolean GLAD_ARB_transform_feedback_overflow_query = GL_FALSE;
+GLboolean GLAD_ARB_uniform_buffer_object = GL_FALSE;
+static void load_GL_ARB_uniform_buffer_object(LOADER load) {
+	if(!GLAD_ARB_uniform_buffer_object) return;
+	fp_glGetUniformIndices = (pfn_glGetUniformIndices)load("glGetUniformIndices");
+	fp_glGetActiveUniformsiv = (pfn_glGetActiveUniformsiv)load("glGetActiveUniformsiv");
+	fp_glGetActiveUniformName = (pfn_glGetActiveUniformName)load("glGetActiveUniformName");
+	fp_glGetUniformBlockIndex = (pfn_glGetUniformBlockIndex)load("glGetUniformBlockIndex");
+	fp_glGetActiveUniformBlockiv = (pfn_glGetActiveUniformBlockiv)load("glGetActiveUniformBlockiv");
+	fp_glGetActiveUniformBlockName = (pfn_glGetActiveUniformBlockName)load("glGetActiveUniformBlockName");
+	fp_glUniformBlockBinding = (pfn_glUniformBlockBinding)load("glUniformBlockBinding");
+}
+
+GLboolean GLAD_ARB_vertex_array_bgra = GL_FALSE;
+GLboolean GLAD_ARB_vertex_array_object = GL_FALSE;
+static void load_GL_ARB_vertex_array_object(LOADER load) {
+	if(!GLAD_ARB_vertex_array_object) return;
+	fp_glBindVertexArray = (pfn_glBindVertexArray)load("glBindVertexArray");
+	fp_glDeleteVertexArrays = (pfn_glDeleteVertexArrays)load("glDeleteVertexArrays");
+	fp_glGenVertexArrays = (pfn_glGenVertexArrays)load("glGenVertexArrays");
+	fp_glIsVertexArray = (pfn_glIsVertexArray)load("glIsVertexArray");
+}
+
+GLboolean GLAD_ARB_vertex_attrib_64bit = GL_FALSE;
+static void load_GL_ARB_vertex_attrib_64bit(LOADER load) {
+	if(!GLAD_ARB_vertex_attrib_64bit) return;
+	fp_glVertexAttribL1d = (pfn_glVertexAttribL1d)load("glVertexAttribL1d");
+	fp_glVertexAttribL2d = (pfn_glVertexAttribL2d)load("glVertexAttribL2d");
+	fp_glVertexAttribL3d = (pfn_glVertexAttribL3d)load("glVertexAttribL3d");
+	fp_glVertexAttribL4d = (pfn_glVertexAttribL4d)load("glVertexAttribL4d");
+	fp_glVertexAttribL1dv = (pfn_glVertexAttribL1dv)load("glVertexAttribL1dv");
+	fp_glVertexAttribL2dv = (pfn_glVertexAttribL2dv)load("glVertexAttribL2dv");
+	fp_glVertexAttribL3dv = (pfn_glVertexAttribL3dv)load("glVertexAttribL3dv");
+	fp_glVertexAttribL4dv = (pfn_glVertexAttribL4dv)load("glVertexAttribL4dv");
+	fp_glVertexAttribLPointer = (pfn_glVertexAttribLPointer)load("glVertexAttribLPointer");
+	fp_glGetVertexAttribLdv = (pfn_glGetVertexAttribLdv)load("glGetVertexAttribLdv");
+}
+
+GLboolean GLAD_ARB_vertex_attrib_binding = GL_FALSE;
+static void load_GL_ARB_vertex_attrib_binding(LOADER load) {
+	if(!GLAD_ARB_vertex_attrib_binding) return;
+	fp_glBindVertexBuffer = (pfn_glBindVertexBuffer)load("glBindVertexBuffer");
+	fp_glVertexAttribFormat = (pfn_glVertexAttribFormat)load("glVertexAttribFormat");
+	fp_glVertexAttribIFormat = (pfn_glVertexAttribIFormat)load("glVertexAttribIFormat");
+	fp_glVertexAttribLFormat = (pfn_glVertexAttribLFormat)load("glVertexAttribLFormat");
+	fp_glVertexAttribBinding = (pfn_glVertexAttribBinding)load("glVertexAttribBinding");
+	fp_glVertexBindingDivisor = (pfn_glVertexBindingDivisor)load("glVertexBindingDivisor");
+}
+
+GLboolean GLAD_ARB_vertex_type_10f_11f_11f_rev = GL_FALSE;
+GLboolean GLAD_ARB_vertex_type_2_10_10_10_rev = GL_FALSE;
+static void load_GL_ARB_vertex_type_2_10_10_10_rev(LOADER load) {
+	if(!GLAD_ARB_vertex_type_2_10_10_10_rev) return;
+	fp_glVertexAttribP1ui = (pfn_glVertexAttribP1ui)load("glVertexAttribP1ui");
+	fp_glVertexAttribP1uiv = (pfn_glVertexAttribP1uiv)load("glVertexAttribP1uiv");
+	fp_glVertexAttribP2ui = (pfn_glVertexAttribP2ui)load("glVertexAttribP2ui");
+	fp_glVertexAttribP2uiv = (pfn_glVertexAttribP2uiv)load("glVertexAttribP2uiv");
+	fp_glVertexAttribP3ui = (pfn_glVertexAttribP3ui)load("glVertexAttribP3ui");
+	fp_glVertexAttribP3uiv = (pfn_glVertexAttribP3uiv)load("glVertexAttribP3uiv");
+	fp_glVertexAttribP4ui = (pfn_glVertexAttribP4ui)load("glVertexAttribP4ui");
+	fp_glVertexAttribP4uiv = (pfn_glVertexAttribP4uiv)load("glVertexAttribP4uiv");
+	fp_glVertexP2ui = (pfn_glVertexP2ui)load("glVertexP2ui");
+	fp_glVertexP2uiv = (pfn_glVertexP2uiv)load("glVertexP2uiv");
+	fp_glVertexP3ui = (pfn_glVertexP3ui)load("glVertexP3ui");
+	fp_glVertexP3uiv = (pfn_glVertexP3uiv)load("glVertexP3uiv");
+	fp_glVertexP4ui = (pfn_glVertexP4ui)load("glVertexP4ui");
+	fp_glVertexP4uiv = (pfn_glVertexP4uiv)load("glVertexP4uiv");
+	fp_glTexCoordP1ui = (pfn_glTexCoordP1ui)load("glTexCoordP1ui");
+	fp_glTexCoordP1uiv = (pfn_glTexCoordP1uiv)load("glTexCoordP1uiv");
+	fp_glTexCoordP2ui = (pfn_glTexCoordP2ui)load("glTexCoordP2ui");
+	fp_glTexCoordP2uiv = (pfn_glTexCoordP2uiv)load("glTexCoordP2uiv");
+	fp_glTexCoordP3ui = (pfn_glTexCoordP3ui)load("glTexCoordP3ui");
+	fp_glTexCoordP3uiv = (pfn_glTexCoordP3uiv)load("glTexCoordP3uiv");
+	fp_glTexCoordP4ui = (pfn_glTexCoordP4ui)load("glTexCoordP4ui");
+	fp_glTexCoordP4uiv = (pfn_glTexCoordP4uiv)load("glTexCoordP4uiv");
+	fp_glMultiTexCoordP1ui = (pfn_glMultiTexCoordP1ui)load("glMultiTexCoordP1ui");
+	fp_glMultiTexCoordP1uiv = (pfn_glMultiTexCoordP1uiv)load("glMultiTexCoordP1uiv");
+	fp_glMultiTexCoordP2ui = (pfn_glMultiTexCoordP2ui)load("glMultiTexCoordP2ui");
+	fp_glMultiTexCoordP2uiv = (pfn_glMultiTexCoordP2uiv)load("glMultiTexCoordP2uiv");
+	fp_glMultiTexCoordP3ui = (pfn_glMultiTexCoordP3ui)load("glMultiTexCoordP3ui");
+	fp_glMultiTexCoordP3uiv = (pfn_glMultiTexCoordP3uiv)load("glMultiTexCoordP3uiv");
+	fp_glMultiTexCoordP4ui = (pfn_glMultiTexCoordP4ui)load("glMultiTexCoordP4ui");
+	fp_glMultiTexCoordP4uiv = (pfn_glMultiTexCoordP4uiv)load("glMultiTexCoordP4uiv");
+	fp_glNormalP3ui = (pfn_glNormalP3ui)load("glNormalP3ui");
+	fp_glNormalP3uiv = (pfn_glNormalP3uiv)load("glNormalP3uiv");
+	fp_glColorP3ui = (pfn_glColorP3ui)load("glColorP3ui");
+	fp_glColorP3uiv = (pfn_glColorP3uiv)load("glColorP3uiv");
+	fp_glColorP4ui = (pfn_glColorP4ui)load("glColorP4ui");
+	fp_glColorP4uiv = (pfn_glColorP4uiv)load("glColorP4uiv");
+	fp_glSecondaryColorP3ui = (pfn_glSecondaryColorP3ui)load("glSecondaryColorP3ui");
+	fp_glSecondaryColorP3uiv = (pfn_glSecondaryColorP3uiv)load("glSecondaryColorP3uiv");
+}
+
+GLboolean GLAD_ARB_viewport_array = GL_FALSE;
+static void load_GL_ARB_viewport_array(LOADER load) {
+	if(!GLAD_ARB_viewport_array) return;
+	fp_glViewportArrayv = (pfn_glViewportArrayv)load("glViewportArrayv");
+	fp_glViewportIndexedf = (pfn_glViewportIndexedf)load("glViewportIndexedf");
+	fp_glViewportIndexedfv = (pfn_glViewportIndexedfv)load("glViewportIndexedfv");
+	fp_glScissorArrayv = (pfn_glScissorArrayv)load("glScissorArrayv");
+	fp_glScissorIndexed = (pfn_glScissorIndexed)load("glScissorIndexed");
+	fp_glScissorIndexedv = (pfn_glScissorIndexedv)load("glScissorIndexedv");
+	fp_glDepthRangeArrayv = (pfn_glDepthRangeArrayv)load("glDepthRangeArrayv");
+	fp_glDepthRangeIndexed = (pfn_glDepthRangeIndexed)load("glDepthRangeIndexed");
+	fp_glGetFloati_v = (pfn_glGetFloati_v)load("glGetFloati_v");
+	fp_glGetDoublei_v = (pfn_glGetDoublei_v)load("glGetDoublei_v");
+}
+
+GLboolean GLAD_EXT_bgra = GL_FALSE;
+GLboolean GLAD_EXT_bindable_uniform = GL_FALSE;
+static void load_GL_EXT_bindable_uniform(LOADER load) {
+	if(!GLAD_EXT_bindable_uniform) return;
+	fp_glUniformBufferEXT = (pfn_glUniformBufferEXT)load("glUniformBufferEXT");
+	fp_glGetUniformBufferSizeEXT = (pfn_glGetUniformBufferSizeEXT)load("glGetUniformBufferSizeEXT");
+	fp_glGetUniformOffsetEXT = (pfn_glGetUniformOffsetEXT)load("glGetUniformOffsetEXT");
+}
+
+GLboolean GLAD_EXT_color_buffer_half_float = GL_FALSE;
+GLboolean GLAD_EXT_copy_image = GL_FALSE;
+static void load_GL_EXT_copy_image(LOADER load) {
+	if(!GLAD_EXT_copy_image) return;
+	fp_glCopyImageSubDataEXT = (pfn_glCopyImageSubDataEXT)load("glCopyImageSubDataEXT");
+}
+
+GLboolean GLAD_EXT_debug_label = GL_FALSE;
+static void load_GL_EXT_debug_label(LOADER load) {
+	if(!GLAD_EXT_debug_label) return;
+	fp_glLabelObjectEXT = (pfn_glLabelObjectEXT)load("glLabelObjectEXT");
+	fp_glGetObjectLabelEXT = (pfn_glGetObjectLabelEXT)load("glGetObjectLabelEXT");
+}
+
+GLboolean GLAD_EXT_debug_marker = GL_FALSE;
+static void load_GL_EXT_debug_marker(LOADER load) {
+	if(!GLAD_EXT_debug_marker) return;
+	fp_glInsertEventMarkerEXT = (pfn_glInsertEventMarkerEXT)load("glInsertEventMarkerEXT");
+	fp_glPushGroupMarkerEXT = (pfn_glPushGroupMarkerEXT)load("glPushGroupMarkerEXT");
+	fp_glPopGroupMarkerEXT = (pfn_glPopGroupMarkerEXT)load("glPopGroupMarkerEXT");
+}
+
+GLboolean GLAD_EXT_direct_state_access = GL_FALSE;
+static void load_GL_EXT_direct_state_access(LOADER load) {
+	if(!GLAD_EXT_direct_state_access) return;
+	fp_glMatrixLoadfEXT = (pfn_glMatrixLoadfEXT)load("glMatrixLoadfEXT");
+	fp_glMatrixLoaddEXT = (pfn_glMatrixLoaddEXT)load("glMatrixLoaddEXT");
+	fp_glMatrixMultfEXT = (pfn_glMatrixMultfEXT)load("glMatrixMultfEXT");
+	fp_glMatrixMultdEXT = (pfn_glMatrixMultdEXT)load("glMatrixMultdEXT");
+	fp_glMatrixLoadIdentityEXT = (pfn_glMatrixLoadIdentityEXT)load("glMatrixLoadIdentityEXT");
+	fp_glMatrixRotatefEXT = (pfn_glMatrixRotatefEXT)load("glMatrixRotatefEXT");
+	fp_glMatrixRotatedEXT = (pfn_glMatrixRotatedEXT)load("glMatrixRotatedEXT");
+	fp_glMatrixScalefEXT = (pfn_glMatrixScalefEXT)load("glMatrixScalefEXT");
+	fp_glMatrixScaledEXT = (pfn_glMatrixScaledEXT)load("glMatrixScaledEXT");
+	fp_glMatrixTranslatefEXT = (pfn_glMatrixTranslatefEXT)load("glMatrixTranslatefEXT");
+	fp_glMatrixTranslatedEXT = (pfn_glMatrixTranslatedEXT)load("glMatrixTranslatedEXT");
+	fp_glMatrixFrustumEXT = (pfn_glMatrixFrustumEXT)load("glMatrixFrustumEXT");
+	fp_glMatrixOrthoEXT = (pfn_glMatrixOrthoEXT)load("glMatrixOrthoEXT");
+	fp_glMatrixPopEXT = (pfn_glMatrixPopEXT)load("glMatrixPopEXT");
+	fp_glMatrixPushEXT = (pfn_glMatrixPushEXT)load("glMatrixPushEXT");
+	fp_glClientAttribDefaultEXT = (pfn_glClientAttribDefaultEXT)load("glClientAttribDefaultEXT");
+	fp_glPushClientAttribDefaultEXT = (pfn_glPushClientAttribDefaultEXT)load("glPushClientAttribDefaultEXT");
+	fp_glTextureParameterfEXT = (pfn_glTextureParameterfEXT)load("glTextureParameterfEXT");
+	fp_glTextureParameterfvEXT = (pfn_glTextureParameterfvEXT)load("glTextureParameterfvEXT");
+	fp_glTextureParameteriEXT = (pfn_glTextureParameteriEXT)load("glTextureParameteriEXT");
+	fp_glTextureParameterivEXT = (pfn_glTextureParameterivEXT)load("glTextureParameterivEXT");
+	fp_glTextureImage1DEXT = (pfn_glTextureImage1DEXT)load("glTextureImage1DEXT");
+	fp_glTextureImage2DEXT = (pfn_glTextureImage2DEXT)load("glTextureImage2DEXT");
+	fp_glTextureSubImage1DEXT = (pfn_glTextureSubImage1DEXT)load("glTextureSubImage1DEXT");
+	fp_glTextureSubImage2DEXT = (pfn_glTextureSubImage2DEXT)load("glTextureSubImage2DEXT");
+	fp_glCopyTextureImage1DEXT = (pfn_glCopyTextureImage1DEXT)load("glCopyTextureImage1DEXT");
+	fp_glCopyTextureImage2DEXT = (pfn_glCopyTextureImage2DEXT)load("glCopyTextureImage2DEXT");
+	fp_glCopyTextureSubImage1DEXT = (pfn_glCopyTextureSubImage1DEXT)load("glCopyTextureSubImage1DEXT");
+	fp_glCopyTextureSubImage2DEXT = (pfn_glCopyTextureSubImage2DEXT)load("glCopyTextureSubImage2DEXT");
+	fp_glGetTextureImageEXT = (pfn_glGetTextureImageEXT)load("glGetTextureImageEXT");
+	fp_glGetTextureParameterfvEXT = (pfn_glGetTextureParameterfvEXT)load("glGetTextureParameterfvEXT");
+	fp_glGetTextureParameterivEXT = (pfn_glGetTextureParameterivEXT)load("glGetTextureParameterivEXT");
+	fp_glGetTextureLevelParameterfvEXT = (pfn_glGetTextureLevelParameterfvEXT)load("glGetTextureLevelParameterfvEXT");
+	fp_glGetTextureLevelParameterivEXT = (pfn_glGetTextureLevelParameterivEXT)load("glGetTextureLevelParameterivEXT");
+	fp_glTextureImage3DEXT = (pfn_glTextureImage3DEXT)load("glTextureImage3DEXT");
+	fp_glTextureSubImage3DEXT = (pfn_glTextureSubImage3DEXT)load("glTextureSubImage3DEXT");
+	fp_glCopyTextureSubImage3DEXT = (pfn_glCopyTextureSubImage3DEXT)load("glCopyTextureSubImage3DEXT");
+	fp_glBindMultiTextureEXT = (pfn_glBindMultiTextureEXT)load("glBindMultiTextureEXT");
+	fp_glMultiTexCoordPointerEXT = (pfn_glMultiTexCoordPointerEXT)load("glMultiTexCoordPointerEXT");
+	fp_glMultiTexEnvfEXT = (pfn_glMultiTexEnvfEXT)load("glMultiTexEnvfEXT");
+	fp_glMultiTexEnvfvEXT = (pfn_glMultiTexEnvfvEXT)load("glMultiTexEnvfvEXT");
+	fp_glMultiTexEnviEXT = (pfn_glMultiTexEnviEXT)load("glMultiTexEnviEXT");
+	fp_glMultiTexEnvivEXT = (pfn_glMultiTexEnvivEXT)load("glMultiTexEnvivEXT");
+	fp_glMultiTexGendEXT = (pfn_glMultiTexGendEXT)load("glMultiTexGendEXT");
+	fp_glMultiTexGendvEXT = (pfn_glMultiTexGendvEXT)load("glMultiTexGendvEXT");
+	fp_glMultiTexGenfEXT = (pfn_glMultiTexGenfEXT)load("glMultiTexGenfEXT");
+	fp_glMultiTexGenfvEXT = (pfn_glMultiTexGenfvEXT)load("glMultiTexGenfvEXT");
+	fp_glMultiTexGeniEXT = (pfn_glMultiTexGeniEXT)load("glMultiTexGeniEXT");
+	fp_glMultiTexGenivEXT = (pfn_glMultiTexGenivEXT)load("glMultiTexGenivEXT");
+	fp_glGetMultiTexEnvfvEXT = (pfn_glGetMultiTexEnvfvEXT)load("glGetMultiTexEnvfvEXT");
+	fp_glGetMultiTexEnvivEXT = (pfn_glGetMultiTexEnvivEXT)load("glGetMultiTexEnvivEXT");
+	fp_glGetMultiTexGendvEXT = (pfn_glGetMultiTexGendvEXT)load("glGetMultiTexGendvEXT");
+	fp_glGetMultiTexGenfvEXT = (pfn_glGetMultiTexGenfvEXT)load("glGetMultiTexGenfvEXT");
+	fp_glGetMultiTexGenivEXT = (pfn_glGetMultiTexGenivEXT)load("glGetMultiTexGenivEXT");
+	fp_glMultiTexParameteriEXT = (pfn_glMultiTexParameteriEXT)load("glMultiTexParameteriEXT");
+	fp_glMultiTexParameterivEXT = (pfn_glMultiTexParameterivEXT)load("glMultiTexParameterivEXT");
+	fp_glMultiTexParameterfEXT = (pfn_glMultiTexParameterfEXT)load("glMultiTexParameterfEXT");
+	fp_glMultiTexParameterfvEXT = (pfn_glMultiTexParameterfvEXT)load("glMultiTexParameterfvEXT");
+	fp_glMultiTexImage1DEXT = (pfn_glMultiTexImage1DEXT)load("glMultiTexImage1DEXT");
+	fp_glMultiTexImage2DEXT = (pfn_glMultiTexImage2DEXT)load("glMultiTexImage2DEXT");
+	fp_glMultiTexSubImage1DEXT = (pfn_glMultiTexSubImage1DEXT)load("glMultiTexSubImage1DEXT");
+	fp_glMultiTexSubImage2DEXT = (pfn_glMultiTexSubImage2DEXT)load("glMultiTexSubImage2DEXT");
+	fp_glCopyMultiTexImage1DEXT = (pfn_glCopyMultiTexImage1DEXT)load("glCopyMultiTexImage1DEXT");
+	fp_glCopyMultiTexImage2DEXT = (pfn_glCopyMultiTexImage2DEXT)load("glCopyMultiTexImage2DEXT");
+	fp_glCopyMultiTexSubImage1DEXT = (pfn_glCopyMultiTexSubImage1DEXT)load("glCopyMultiTexSubImage1DEXT");
+	fp_glCopyMultiTexSubImage2DEXT = (pfn_glCopyMultiTexSubImage2DEXT)load("glCopyMultiTexSubImage2DEXT");
+	fp_glGetMultiTexImageEXT = (pfn_glGetMultiTexImageEXT)load("glGetMultiTexImageEXT");
+	fp_glGetMultiTexParameterfvEXT = (pfn_glGetMultiTexParameterfvEXT)load("glGetMultiTexParameterfvEXT");
+	fp_glGetMultiTexParameterivEXT = (pfn_glGetMultiTexParameterivEXT)load("glGetMultiTexParameterivEXT");
+	fp_glGetMultiTexLevelParameterfvEXT = (pfn_glGetMultiTexLevelParameterfvEXT)load("glGetMultiTexLevelParameterfvEXT");
+	fp_glGetMultiTexLevelParameterivEXT = (pfn_glGetMultiTexLevelParameterivEXT)load("glGetMultiTexLevelParameterivEXT");
+	fp_glMultiTexImage3DEXT = (pfn_glMultiTexImage3DEXT)load("glMultiTexImage3DEXT");
+	fp_glMultiTexSubImage3DEXT = (pfn_glMultiTexSubImage3DEXT)load("glMultiTexSubImage3DEXT");
+	fp_glCopyMultiTexSubImage3DEXT = (pfn_glCopyMultiTexSubImage3DEXT)load("glCopyMultiTexSubImage3DEXT");
+	fp_glEnableClientStateIndexedEXT = (pfn_glEnableClientStateIndexedEXT)load("glEnableClientStateIndexedEXT");
+	fp_glDisableClientStateIndexedEXT = (pfn_glDisableClientStateIndexedEXT)load("glDisableClientStateIndexedEXT");
+	fp_glGetFloatIndexedvEXT = (pfn_glGetFloatIndexedvEXT)load("glGetFloatIndexedvEXT");
+	fp_glGetDoubleIndexedvEXT = (pfn_glGetDoubleIndexedvEXT)load("glGetDoubleIndexedvEXT");
+	fp_glGetPointerIndexedvEXT = (pfn_glGetPointerIndexedvEXT)load("glGetPointerIndexedvEXT");
+	fp_glEnableIndexedEXT = (pfn_glEnableIndexedEXT)load("glEnableIndexedEXT");
+	fp_glDisableIndexedEXT = (pfn_glDisableIndexedEXT)load("glDisableIndexedEXT");
+	fp_glIsEnabledIndexedEXT = (pfn_glIsEnabledIndexedEXT)load("glIsEnabledIndexedEXT");
+	fp_glGetIntegerIndexedvEXT = (pfn_glGetIntegerIndexedvEXT)load("glGetIntegerIndexedvEXT");
+	fp_glGetBooleanIndexedvEXT = (pfn_glGetBooleanIndexedvEXT)load("glGetBooleanIndexedvEXT");
+	fp_glCompressedTextureImage3DEXT = (pfn_glCompressedTextureImage3DEXT)load("glCompressedTextureImage3DEXT");
+	fp_glCompressedTextureImage2DEXT = (pfn_glCompressedTextureImage2DEXT)load("glCompressedTextureImage2DEXT");
+	fp_glCompressedTextureImage1DEXT = (pfn_glCompressedTextureImage1DEXT)load("glCompressedTextureImage1DEXT");
+	fp_glCompressedTextureSubImage3DEXT = (pfn_glCompressedTextureSubImage3DEXT)load("glCompressedTextureSubImage3DEXT");
+	fp_glCompressedTextureSubImage2DEXT = (pfn_glCompressedTextureSubImage2DEXT)load("glCompressedTextureSubImage2DEXT");
+	fp_glCompressedTextureSubImage1DEXT = (pfn_glCompressedTextureSubImage1DEXT)load("glCompressedTextureSubImage1DEXT");
+	fp_glGetCompressedTextureImageEXT = (pfn_glGetCompressedTextureImageEXT)load("glGetCompressedTextureImageEXT");
+	fp_glCompressedMultiTexImage3DEXT = (pfn_glCompressedMultiTexImage3DEXT)load("glCompressedMultiTexImage3DEXT");
+	fp_glCompressedMultiTexImage2DEXT = (pfn_glCompressedMultiTexImage2DEXT)load("glCompressedMultiTexImage2DEXT");
+	fp_glCompressedMultiTexImage1DEXT = (pfn_glCompressedMultiTexImage1DEXT)load("glCompressedMultiTexImage1DEXT");
+	fp_glCompressedMultiTexSubImage3DEXT = (pfn_glCompressedMultiTexSubImage3DEXT)load("glCompressedMultiTexSubImage3DEXT");
+	fp_glCompressedMultiTexSubImage2DEXT = (pfn_glCompressedMultiTexSubImage2DEXT)load("glCompressedMultiTexSubImage2DEXT");
+	fp_glCompressedMultiTexSubImage1DEXT = (pfn_glCompressedMultiTexSubImage1DEXT)load("glCompressedMultiTexSubImage1DEXT");
+	fp_glGetCompressedMultiTexImageEXT = (pfn_glGetCompressedMultiTexImageEXT)load("glGetCompressedMultiTexImageEXT");
+	fp_glMatrixLoadTransposefEXT = (pfn_glMatrixLoadTransposefEXT)load("glMatrixLoadTransposefEXT");
+	fp_glMatrixLoadTransposedEXT = (pfn_glMatrixLoadTransposedEXT)load("glMatrixLoadTransposedEXT");
+	fp_glMatrixMultTransposefEXT = (pfn_glMatrixMultTransposefEXT)load("glMatrixMultTransposefEXT");
+	fp_glMatrixMultTransposedEXT = (pfn_glMatrixMultTransposedEXT)load("glMatrixMultTransposedEXT");
+	fp_glNamedBufferDataEXT = (pfn_glNamedBufferDataEXT)load("glNamedBufferDataEXT");
+	fp_glNamedBufferSubDataEXT = (pfn_glNamedBufferSubDataEXT)load("glNamedBufferSubDataEXT");
+	fp_glMapNamedBufferEXT = (pfn_glMapNamedBufferEXT)load("glMapNamedBufferEXT");
+	fp_glUnmapNamedBufferEXT = (pfn_glUnmapNamedBufferEXT)load("glUnmapNamedBufferEXT");
+	fp_glGetNamedBufferParameterivEXT = (pfn_glGetNamedBufferParameterivEXT)load("glGetNamedBufferParameterivEXT");
+	fp_glGetNamedBufferPointervEXT = (pfn_glGetNamedBufferPointervEXT)load("glGetNamedBufferPointervEXT");
+	fp_glGetNamedBufferSubDataEXT = (pfn_glGetNamedBufferSubDataEXT)load("glGetNamedBufferSubDataEXT");
+	fp_glProgramUniform1fEXT = (pfn_glProgramUniform1fEXT)load("glProgramUniform1fEXT");
+	fp_glProgramUniform2fEXT = (pfn_glProgramUniform2fEXT)load("glProgramUniform2fEXT");
+	fp_glProgramUniform3fEXT = (pfn_glProgramUniform3fEXT)load("glProgramUniform3fEXT");
+	fp_glProgramUniform4fEXT = (pfn_glProgramUniform4fEXT)load("glProgramUniform4fEXT");
+	fp_glProgramUniform1iEXT = (pfn_glProgramUniform1iEXT)load("glProgramUniform1iEXT");
+	fp_glProgramUniform2iEXT = (pfn_glProgramUniform2iEXT)load("glProgramUniform2iEXT");
+	fp_glProgramUniform3iEXT = (pfn_glProgramUniform3iEXT)load("glProgramUniform3iEXT");
+	fp_glProgramUniform4iEXT = (pfn_glProgramUniform4iEXT)load("glProgramUniform4iEXT");
+	fp_glProgramUniform1fvEXT = (pfn_glProgramUniform1fvEXT)load("glProgramUniform1fvEXT");
+	fp_glProgramUniform2fvEXT = (pfn_glProgramUniform2fvEXT)load("glProgramUniform2fvEXT");
+	fp_glProgramUniform3fvEXT = (pfn_glProgramUniform3fvEXT)load("glProgramUniform3fvEXT");
+	fp_glProgramUniform4fvEXT = (pfn_glProgramUniform4fvEXT)load("glProgramUniform4fvEXT");
+	fp_glProgramUniform1ivEXT = (pfn_glProgramUniform1ivEXT)load("glProgramUniform1ivEXT");
+	fp_glProgramUniform2ivEXT = (pfn_glProgramUniform2ivEXT)load("glProgramUniform2ivEXT");
+	fp_glProgramUniform3ivEXT = (pfn_glProgramUniform3ivEXT)load("glProgramUniform3ivEXT");
+	fp_glProgramUniform4ivEXT = (pfn_glProgramUniform4ivEXT)load("glProgramUniform4ivEXT");
+	fp_glProgramUniformMatrix2fvEXT = (pfn_glProgramUniformMatrix2fvEXT)load("glProgramUniformMatrix2fvEXT");
+	fp_glProgramUniformMatrix3fvEXT = (pfn_glProgramUniformMatrix3fvEXT)load("glProgramUniformMatrix3fvEXT");
+	fp_glProgramUniformMatrix4fvEXT = (pfn_glProgramUniformMatrix4fvEXT)load("glProgramUniformMatrix4fvEXT");
+	fp_glProgramUniformMatrix2x3fvEXT = (pfn_glProgramUniformMatrix2x3fvEXT)load("glProgramUniformMatrix2x3fvEXT");
+	fp_glProgramUniformMatrix3x2fvEXT = (pfn_glProgramUniformMatrix3x2fvEXT)load("glProgramUniformMatrix3x2fvEXT");
+	fp_glProgramUniformMatrix2x4fvEXT = (pfn_glProgramUniformMatrix2x4fvEXT)load("glProgramUniformMatrix2x4fvEXT");
+	fp_glProgramUniformMatrix4x2fvEXT = (pfn_glProgramUniformMatrix4x2fvEXT)load("glProgramUniformMatrix4x2fvEXT");
+	fp_glProgramUniformMatrix3x4fvEXT = (pfn_glProgramUniformMatrix3x4fvEXT)load("glProgramUniformMatrix3x4fvEXT");
+	fp_glProgramUniformMatrix4x3fvEXT = (pfn_glProgramUniformMatrix4x3fvEXT)load("glProgramUniformMatrix4x3fvEXT");
+	fp_glTextureBufferEXT = (pfn_glTextureBufferEXT)load("glTextureBufferEXT");
+	fp_glMultiTexBufferEXT = (pfn_glMultiTexBufferEXT)load("glMultiTexBufferEXT");
+	fp_glTextureParameterIivEXT = (pfn_glTextureParameterIivEXT)load("glTextureParameterIivEXT");
+	fp_glTextureParameterIuivEXT = (pfn_glTextureParameterIuivEXT)load("glTextureParameterIuivEXT");
+	fp_glGetTextureParameterIivEXT = (pfn_glGetTextureParameterIivEXT)load("glGetTextureParameterIivEXT");
+	fp_glGetTextureParameterIuivEXT = (pfn_glGetTextureParameterIuivEXT)load("glGetTextureParameterIuivEXT");
+	fp_glMultiTexParameterIivEXT = (pfn_glMultiTexParameterIivEXT)load("glMultiTexParameterIivEXT");
+	fp_glMultiTexParameterIuivEXT = (pfn_glMultiTexParameterIuivEXT)load("glMultiTexParameterIuivEXT");
+	fp_glGetMultiTexParameterIivEXT = (pfn_glGetMultiTexParameterIivEXT)load("glGetMultiTexParameterIivEXT");
+	fp_glGetMultiTexParameterIuivEXT = (pfn_glGetMultiTexParameterIuivEXT)load("glGetMultiTexParameterIuivEXT");
+	fp_glProgramUniform1uiEXT = (pfn_glProgramUniform1uiEXT)load("glProgramUniform1uiEXT");
+	fp_glProgramUniform2uiEXT = (pfn_glProgramUniform2uiEXT)load("glProgramUniform2uiEXT");
+	fp_glProgramUniform3uiEXT = (pfn_glProgramUniform3uiEXT)load("glProgramUniform3uiEXT");
+	fp_glProgramUniform4uiEXT = (pfn_glProgramUniform4uiEXT)load("glProgramUniform4uiEXT");
+	fp_glProgramUniform1uivEXT = (pfn_glProgramUniform1uivEXT)load("glProgramUniform1uivEXT");
+	fp_glProgramUniform2uivEXT = (pfn_glProgramUniform2uivEXT)load("glProgramUniform2uivEXT");
+	fp_glProgramUniform3uivEXT = (pfn_glProgramUniform3uivEXT)load("glProgramUniform3uivEXT");
+	fp_glProgramUniform4uivEXT = (pfn_glProgramUniform4uivEXT)load("glProgramUniform4uivEXT");
+	fp_glNamedProgramLocalParameters4fvEXT = (pfn_glNamedProgramLocalParameters4fvEXT)load("glNamedProgramLocalParameters4fvEXT");
+	fp_glNamedProgramLocalParameterI4iEXT = (pfn_glNamedProgramLocalParameterI4iEXT)load("glNamedProgramLocalParameterI4iEXT");
+	fp_glNamedProgramLocalParameterI4ivEXT = (pfn_glNamedProgramLocalParameterI4ivEXT)load("glNamedProgramLocalParameterI4ivEXT");
+	fp_glNamedProgramLocalParametersI4ivEXT = (pfn_glNamedProgramLocalParametersI4ivEXT)load("glNamedProgramLocalParametersI4ivEXT");
+	fp_glNamedProgramLocalParameterI4uiEXT = (pfn_glNamedProgramLocalParameterI4uiEXT)load("glNamedProgramLocalParameterI4uiEXT");
+	fp_glNamedProgramLocalParameterI4uivEXT = (pfn_glNamedProgramLocalParameterI4uivEXT)load("glNamedProgramLocalParameterI4uivEXT");
+	fp_glNamedProgramLocalParametersI4uivEXT = (pfn_glNamedProgramLocalParametersI4uivEXT)load("glNamedProgramLocalParametersI4uivEXT");
+	fp_glGetNamedProgramLocalParameterIivEXT = (pfn_glGetNamedProgramLocalParameterIivEXT)load("glGetNamedProgramLocalParameterIivEXT");
+	fp_glGetNamedProgramLocalParameterIuivEXT = (pfn_glGetNamedProgramLocalParameterIuivEXT)load("glGetNamedProgramLocalParameterIuivEXT");
+	fp_glEnableClientStateiEXT = (pfn_glEnableClientStateiEXT)load("glEnableClientStateiEXT");
+	fp_glDisableClientStateiEXT = (pfn_glDisableClientStateiEXT)load("glDisableClientStateiEXT");
+	fp_glGetFloati_vEXT = (pfn_glGetFloati_vEXT)load("glGetFloati_vEXT");
+	fp_glGetDoublei_vEXT = (pfn_glGetDoublei_vEXT)load("glGetDoublei_vEXT");
+	fp_glGetPointeri_vEXT = (pfn_glGetPointeri_vEXT)load("glGetPointeri_vEXT");
+	fp_glNamedProgramStringEXT = (pfn_glNamedProgramStringEXT)load("glNamedProgramStringEXT");
+	fp_glNamedProgramLocalParameter4dEXT = (pfn_glNamedProgramLocalParameter4dEXT)load("glNamedProgramLocalParameter4dEXT");
+	fp_glNamedProgramLocalParameter4dvEXT = (pfn_glNamedProgramLocalParameter4dvEXT)load("glNamedProgramLocalParameter4dvEXT");
+	fp_glNamedProgramLocalParameter4fEXT = (pfn_glNamedProgramLocalParameter4fEXT)load("glNamedProgramLocalParameter4fEXT");
+	fp_glNamedProgramLocalParameter4fvEXT = (pfn_glNamedProgramLocalParameter4fvEXT)load("glNamedProgramLocalParameter4fvEXT");
+	fp_glGetNamedProgramLocalParameterdvEXT = (pfn_glGetNamedProgramLocalParameterdvEXT)load("glGetNamedProgramLocalParameterdvEXT");
+	fp_glGetNamedProgramLocalParameterfvEXT = (pfn_glGetNamedProgramLocalParameterfvEXT)load("glGetNamedProgramLocalParameterfvEXT");
+	fp_glGetNamedProgramivEXT = (pfn_glGetNamedProgramivEXT)load("glGetNamedProgramivEXT");
+	fp_glGetNamedProgramStringEXT = (pfn_glGetNamedProgramStringEXT)load("glGetNamedProgramStringEXT");
+	fp_glNamedRenderbufferStorageEXT = (pfn_glNamedRenderbufferStorageEXT)load("glNamedRenderbufferStorageEXT");
+	fp_glGetNamedRenderbufferParameterivEXT = (pfn_glGetNamedRenderbufferParameterivEXT)load("glGetNamedRenderbufferParameterivEXT");
+	fp_glNamedRenderbufferStorageMultisampleEXT = (pfn_glNamedRenderbufferStorageMultisampleEXT)load("glNamedRenderbufferStorageMultisampleEXT");
+	fp_glNamedRenderbufferStorageMultisampleCoverageEXT = (pfn_glNamedRenderbufferStorageMultisampleCoverageEXT)load("glNamedRenderbufferStorageMultisampleCoverageEXT");
+	fp_glCheckNamedFramebufferStatusEXT = (pfn_glCheckNamedFramebufferStatusEXT)load("glCheckNamedFramebufferStatusEXT");
+	fp_glNamedFramebufferTexture1DEXT = (pfn_glNamedFramebufferTexture1DEXT)load("glNamedFramebufferTexture1DEXT");
+	fp_glNamedFramebufferTexture2DEXT = (pfn_glNamedFramebufferTexture2DEXT)load("glNamedFramebufferTexture2DEXT");
+	fp_glNamedFramebufferTexture3DEXT = (pfn_glNamedFramebufferTexture3DEXT)load("glNamedFramebufferTexture3DEXT");
+	fp_glNamedFramebufferRenderbufferEXT = (pfn_glNamedFramebufferRenderbufferEXT)load("glNamedFramebufferRenderbufferEXT");
+	fp_glGetNamedFramebufferAttachmentParameterivEXT = (pfn_glGetNamedFramebufferAttachmentParameterivEXT)load("glGetNamedFramebufferAttachmentParameterivEXT");
+	fp_glGenerateTextureMipmapEXT = (pfn_glGenerateTextureMipmapEXT)load("glGenerateTextureMipmapEXT");
+	fp_glGenerateMultiTexMipmapEXT = (pfn_glGenerateMultiTexMipmapEXT)load("glGenerateMultiTexMipmapEXT");
+	fp_glFramebufferDrawBufferEXT = (pfn_glFramebufferDrawBufferEXT)load("glFramebufferDrawBufferEXT");
+	fp_glFramebufferDrawBuffersEXT = (pfn_glFramebufferDrawBuffersEXT)load("glFramebufferDrawBuffersEXT");
+	fp_glFramebufferReadBufferEXT = (pfn_glFramebufferReadBufferEXT)load("glFramebufferReadBufferEXT");
+	fp_glGetFramebufferParameterivEXT = (pfn_glGetFramebufferParameterivEXT)load("glGetFramebufferParameterivEXT");
+	fp_glNamedCopyBufferSubDataEXT = (pfn_glNamedCopyBufferSubDataEXT)load("glNamedCopyBufferSubDataEXT");
+	fp_glNamedFramebufferTextureEXT = (pfn_glNamedFramebufferTextureEXT)load("glNamedFramebufferTextureEXT");
+	fp_glNamedFramebufferTextureLayerEXT = (pfn_glNamedFramebufferTextureLayerEXT)load("glNamedFramebufferTextureLayerEXT");
+	fp_glNamedFramebufferTextureFaceEXT = (pfn_glNamedFramebufferTextureFaceEXT)load("glNamedFramebufferTextureFaceEXT");
+	fp_glTextureRenderbufferEXT = (pfn_glTextureRenderbufferEXT)load("glTextureRenderbufferEXT");
+	fp_glMultiTexRenderbufferEXT = (pfn_glMultiTexRenderbufferEXT)load("glMultiTexRenderbufferEXT");
+	fp_glVertexArrayVertexOffsetEXT = (pfn_glVertexArrayVertexOffsetEXT)load("glVertexArrayVertexOffsetEXT");
+	fp_glVertexArrayColorOffsetEXT = (pfn_glVertexArrayColorOffsetEXT)load("glVertexArrayColorOffsetEXT");
+	fp_glVertexArrayEdgeFlagOffsetEXT = (pfn_glVertexArrayEdgeFlagOffsetEXT)load("glVertexArrayEdgeFlagOffsetEXT");
+	fp_glVertexArrayIndexOffsetEXT = (pfn_glVertexArrayIndexOffsetEXT)load("glVertexArrayIndexOffsetEXT");
+	fp_glVertexArrayNormalOffsetEXT = (pfn_glVertexArrayNormalOffsetEXT)load("glVertexArrayNormalOffsetEXT");
+	fp_glVertexArrayTexCoordOffsetEXT = (pfn_glVertexArrayTexCoordOffsetEXT)load("glVertexArrayTexCoordOffsetEXT");
+	fp_glVertexArrayMultiTexCoordOffsetEXT = (pfn_glVertexArrayMultiTexCoordOffsetEXT)load("glVertexArrayMultiTexCoordOffsetEXT");
+	fp_glVertexArrayFogCoordOffsetEXT = (pfn_glVertexArrayFogCoordOffsetEXT)load("glVertexArrayFogCoordOffsetEXT");
+	fp_glVertexArraySecondaryColorOffsetEXT = (pfn_glVertexArraySecondaryColorOffsetEXT)load("glVertexArraySecondaryColorOffsetEXT");
+	fp_glVertexArrayVertexAttribOffsetEXT = (pfn_glVertexArrayVertexAttribOffsetEXT)load("glVertexArrayVertexAttribOffsetEXT");
+	fp_glVertexArrayVertexAttribIOffsetEXT = (pfn_glVertexArrayVertexAttribIOffsetEXT)load("glVertexArrayVertexAttribIOffsetEXT");
+	fp_glEnableVertexArrayEXT = (pfn_glEnableVertexArrayEXT)load("glEnableVertexArrayEXT");
+	fp_glDisableVertexArrayEXT = (pfn_glDisableVertexArrayEXT)load("glDisableVertexArrayEXT");
+	fp_glEnableVertexArrayAttribEXT = (pfn_glEnableVertexArrayAttribEXT)load("glEnableVertexArrayAttribEXT");
+	fp_glDisableVertexArrayAttribEXT = (pfn_glDisableVertexArrayAttribEXT)load("glDisableVertexArrayAttribEXT");
+	fp_glGetVertexArrayIntegervEXT = (pfn_glGetVertexArrayIntegervEXT)load("glGetVertexArrayIntegervEXT");
+	fp_glGetVertexArrayPointervEXT = (pfn_glGetVertexArrayPointervEXT)load("glGetVertexArrayPointervEXT");
+	fp_glGetVertexArrayIntegeri_vEXT = (pfn_glGetVertexArrayIntegeri_vEXT)load("glGetVertexArrayIntegeri_vEXT");
+	fp_glGetVertexArrayPointeri_vEXT = (pfn_glGetVertexArrayPointeri_vEXT)load("glGetVertexArrayPointeri_vEXT");
+	fp_glMapNamedBufferRangeEXT = (pfn_glMapNamedBufferRangeEXT)load("glMapNamedBufferRangeEXT");
+	fp_glFlushMappedNamedBufferRangeEXT = (pfn_glFlushMappedNamedBufferRangeEXT)load("glFlushMappedNamedBufferRangeEXT");
+	fp_glNamedBufferStorageEXT = (pfn_glNamedBufferStorageEXT)load("glNamedBufferStorageEXT");
+	fp_glClearNamedBufferDataEXT = (pfn_glClearNamedBufferDataEXT)load("glClearNamedBufferDataEXT");
+	fp_glClearNamedBufferSubDataEXT = (pfn_glClearNamedBufferSubDataEXT)load("glClearNamedBufferSubDataEXT");
+	fp_glNamedFramebufferParameteriEXT = (pfn_glNamedFramebufferParameteriEXT)load("glNamedFramebufferParameteriEXT");
+	fp_glGetNamedFramebufferParameterivEXT = (pfn_glGetNamedFramebufferParameterivEXT)load("glGetNamedFramebufferParameterivEXT");
+	fp_glProgramUniform1dEXT = (pfn_glProgramUniform1dEXT)load("glProgramUniform1dEXT");
+	fp_glProgramUniform2dEXT = (pfn_glProgramUniform2dEXT)load("glProgramUniform2dEXT");
+	fp_glProgramUniform3dEXT = (pfn_glProgramUniform3dEXT)load("glProgramUniform3dEXT");
+	fp_glProgramUniform4dEXT = (pfn_glProgramUniform4dEXT)load("glProgramUniform4dEXT");
+	fp_glProgramUniform1dvEXT = (pfn_glProgramUniform1dvEXT)load("glProgramUniform1dvEXT");
+	fp_glProgramUniform2dvEXT = (pfn_glProgramUniform2dvEXT)load("glProgramUniform2dvEXT");
+	fp_glProgramUniform3dvEXT = (pfn_glProgramUniform3dvEXT)load("glProgramUniform3dvEXT");
+	fp_glProgramUniform4dvEXT = (pfn_glProgramUniform4dvEXT)load("glProgramUniform4dvEXT");
+	fp_glProgramUniformMatrix2dvEXT = (pfn_glProgramUniformMatrix2dvEXT)load("glProgramUniformMatrix2dvEXT");
+	fp_glProgramUniformMatrix3dvEXT = (pfn_glProgramUniformMatrix3dvEXT)load("glProgramUniformMatrix3dvEXT");
+	fp_glProgramUniformMatrix4dvEXT = (pfn_glProgramUniformMatrix4dvEXT)load("glProgramUniformMatrix4dvEXT");
+	fp_glProgramUniformMatrix2x3dvEXT = (pfn_glProgramUniformMatrix2x3dvEXT)load("glProgramUniformMatrix2x3dvEXT");
+	fp_glProgramUniformMatrix2x4dvEXT = (pfn_glProgramUniformMatrix2x4dvEXT)load("glProgramUniformMatrix2x4dvEXT");
+	fp_glProgramUniformMatrix3x2dvEXT = (pfn_glProgramUniformMatrix3x2dvEXT)load("glProgramUniformMatrix3x2dvEXT");
+	fp_glProgramUniformMatrix3x4dvEXT = (pfn_glProgramUniformMatrix3x4dvEXT)load("glProgramUniformMatrix3x4dvEXT");
+	fp_glProgramUniformMatrix4x2dvEXT = (pfn_glProgramUniformMatrix4x2dvEXT)load("glProgramUniformMatrix4x2dvEXT");
+	fp_glProgramUniformMatrix4x3dvEXT = (pfn_glProgramUniformMatrix4x3dvEXT)load("glProgramUniformMatrix4x3dvEXT");
+	fp_glTextureBufferRangeEXT = (pfn_glTextureBufferRangeEXT)load("glTextureBufferRangeEXT");
+	fp_glTextureStorage1DEXT = (pfn_glTextureStorage1DEXT)load("glTextureStorage1DEXT");
+	fp_glTextureStorage2DEXT = (pfn_glTextureStorage2DEXT)load("glTextureStorage2DEXT");
+	fp_glTextureStorage3DEXT = (pfn_glTextureStorage3DEXT)load("glTextureStorage3DEXT");
+	fp_glTextureStorage2DMultisampleEXT = (pfn_glTextureStorage2DMultisampleEXT)load("glTextureStorage2DMultisampleEXT");
+	fp_glTextureStorage3DMultisampleEXT = (pfn_glTextureStorage3DMultisampleEXT)load("glTextureStorage3DMultisampleEXT");
+	fp_glVertexArrayBindVertexBufferEXT = (pfn_glVertexArrayBindVertexBufferEXT)load("glVertexArrayBindVertexBufferEXT");
+	fp_glVertexArrayVertexAttribFormatEXT = (pfn_glVertexArrayVertexAttribFormatEXT)load("glVertexArrayVertexAttribFormatEXT");
+	fp_glVertexArrayVertexAttribIFormatEXT = (pfn_glVertexArrayVertexAttribIFormatEXT)load("glVertexArrayVertexAttribIFormatEXT");
+	fp_glVertexArrayVertexAttribLFormatEXT = (pfn_glVertexArrayVertexAttribLFormatEXT)load("glVertexArrayVertexAttribLFormatEXT");
+	fp_glVertexArrayVertexAttribBindingEXT = (pfn_glVertexArrayVertexAttribBindingEXT)load("glVertexArrayVertexAttribBindingEXT");
+	fp_glVertexArrayVertexBindingDivisorEXT = (pfn_glVertexArrayVertexBindingDivisorEXT)load("glVertexArrayVertexBindingDivisorEXT");
+	fp_glVertexArrayVertexAttribLOffsetEXT = (pfn_glVertexArrayVertexAttribLOffsetEXT)load("glVertexArrayVertexAttribLOffsetEXT");
+	fp_glTexturePageCommitmentEXT = (pfn_glTexturePageCommitmentEXT)load("glTexturePageCommitmentEXT");
+	fp_glVertexArrayVertexAttribDivisorEXT = (pfn_glVertexArrayVertexAttribDivisorEXT)load("glVertexArrayVertexAttribDivisorEXT");
+}
+
+GLboolean GLAD_EXT_discard_framebuffer = GL_FALSE;
+static void load_GL_EXT_discard_framebuffer(LOADER load) {
+	if(!GLAD_EXT_discard_framebuffer) return;
+	fp_glDiscardFramebufferEXT = (pfn_glDiscardFramebufferEXT)load("glDiscardFramebufferEXT");
+}
+
+GLboolean GLAD_EXT_disjoint_timer_query = GL_FALSE;
+static void load_GL_EXT_disjoint_timer_query(LOADER load) {
+	if(!GLAD_EXT_disjoint_timer_query) return;
+	fp_glGenQueriesEXT = (pfn_glGenQueriesEXT)load("glGenQueriesEXT");
+	fp_glDeleteQueriesEXT = (pfn_glDeleteQueriesEXT)load("glDeleteQueriesEXT");
+	fp_glIsQueryEXT = (pfn_glIsQueryEXT)load("glIsQueryEXT");
+	fp_glBeginQueryEXT = (pfn_glBeginQueryEXT)load("glBeginQueryEXT");
+	fp_glEndQueryEXT = (pfn_glEndQueryEXT)load("glEndQueryEXT");
+	fp_glQueryCounterEXT = (pfn_glQueryCounterEXT)load("glQueryCounterEXT");
+	fp_glGetQueryivEXT = (pfn_glGetQueryivEXT)load("glGetQueryivEXT");
+	fp_glGetQueryObjectivEXT = (pfn_glGetQueryObjectivEXT)load("glGetQueryObjectivEXT");
+	fp_glGetQueryObjectuivEXT = (pfn_glGetQueryObjectuivEXT)load("glGetQueryObjectuivEXT");
+	fp_glGetQueryObjecti64vEXT = (pfn_glGetQueryObjecti64vEXT)load("glGetQueryObjecti64vEXT");
+	fp_glGetQueryObjectui64vEXT = (pfn_glGetQueryObjectui64vEXT)load("glGetQueryObjectui64vEXT");
+}
+
+GLboolean GLAD_EXT_draw_buffers = GL_FALSE;
+static void load_GL_EXT_draw_buffers(LOADER load) {
+	if(!GLAD_EXT_draw_buffers) return;
+	fp_glDrawBuffersEXT = (pfn_glDrawBuffersEXT)load("glDrawBuffersEXT");
+}
+
+GLboolean GLAD_EXT_draw_buffers2 = GL_FALSE;
+static void load_GL_EXT_draw_buffers2(LOADER load) {
+	if(!GLAD_EXT_draw_buffers2) return;
+	fp_glColorMaskIndexedEXT = (pfn_glColorMaskIndexedEXT)load("glColorMaskIndexedEXT");
+	fp_glGetBooleanIndexedvEXT = (pfn_glGetBooleanIndexedvEXT)load("glGetBooleanIndexedvEXT");
+	fp_glGetIntegerIndexedvEXT = (pfn_glGetIntegerIndexedvEXT)load("glGetIntegerIndexedvEXT");
+	fp_glEnableIndexedEXT = (pfn_glEnableIndexedEXT)load("glEnableIndexedEXT");
+	fp_glDisableIndexedEXT = (pfn_glDisableIndexedEXT)load("glDisableIndexedEXT");
+	fp_glIsEnabledIndexedEXT = (pfn_glIsEnabledIndexedEXT)load("glIsEnabledIndexedEXT");
+}
+
+GLboolean GLAD_EXT_draw_buffers_indexed = GL_FALSE;
+static void load_GL_EXT_draw_buffers_indexed(LOADER load) {
+	if(!GLAD_EXT_draw_buffers_indexed) return;
+	fp_glEnableiEXT = (pfn_glEnableiEXT)load("glEnableiEXT");
+	fp_glDisableiEXT = (pfn_glDisableiEXT)load("glDisableiEXT");
+	fp_glBlendEquationiEXT = (pfn_glBlendEquationiEXT)load("glBlendEquationiEXT");
+	fp_glBlendEquationSeparateiEXT = (pfn_glBlendEquationSeparateiEXT)load("glBlendEquationSeparateiEXT");
+	fp_glBlendFunciEXT = (pfn_glBlendFunciEXT)load("glBlendFunciEXT");
+	fp_glBlendFuncSeparateiEXT = (pfn_glBlendFuncSeparateiEXT)load("glBlendFuncSeparateiEXT");
+	fp_glColorMaskiEXT = (pfn_glColorMaskiEXT)load("glColorMaskiEXT");
+	fp_glIsEnablediEXT = (pfn_glIsEnablediEXT)load("glIsEnablediEXT");
+}
+
+GLboolean GLAD_EXT_draw_instanced = GL_FALSE;
+static void load_GL_EXT_draw_instanced(LOADER load) {
+	if(!GLAD_EXT_draw_instanced) return;
+	fp_glDrawArraysInstancedEXT = (pfn_glDrawArraysInstancedEXT)load("glDrawArraysInstancedEXT");
+	fp_glDrawElementsInstancedEXT = (pfn_glDrawElementsInstancedEXT)load("glDrawElementsInstancedEXT");
+}
+
+GLboolean GLAD_EXT_framebuffer_blit = GL_FALSE;
+static void load_GL_EXT_framebuffer_blit(LOADER load) {
+	if(!GLAD_EXT_framebuffer_blit) return;
+	fp_glBlitFramebufferEXT = (pfn_glBlitFramebufferEXT)load("glBlitFramebufferEXT");
+}
+
+GLboolean GLAD_EXT_framebuffer_multisample = GL_FALSE;
+static void load_GL_EXT_framebuffer_multisample(LOADER load) {
+	if(!GLAD_EXT_framebuffer_multisample) return;
+	fp_glRenderbufferStorageMultisampleEXT = (pfn_glRenderbufferStorageMultisampleEXT)load("glRenderbufferStorageMultisampleEXT");
+}
+
+GLboolean GLAD_EXT_framebuffer_multisample_blit_scaled = GL_FALSE;
+GLboolean GLAD_EXT_framebuffer_object = GL_FALSE;
+static void load_GL_EXT_framebuffer_object(LOADER load) {
+	if(!GLAD_EXT_framebuffer_object) return;
+	fp_glIsRenderbufferEXT = (pfn_glIsRenderbufferEXT)load("glIsRenderbufferEXT");
+	fp_glBindRenderbufferEXT = (pfn_glBindRenderbufferEXT)load("glBindRenderbufferEXT");
+	fp_glDeleteRenderbuffersEXT = (pfn_glDeleteRenderbuffersEXT)load("glDeleteRenderbuffersEXT");
+	fp_glGenRenderbuffersEXT = (pfn_glGenRenderbuffersEXT)load("glGenRenderbuffersEXT");
+	fp_glRenderbufferStorageEXT = (pfn_glRenderbufferStorageEXT)load("glRenderbufferStorageEXT");
+	fp_glGetRenderbufferParameterivEXT = (pfn_glGetRenderbufferParameterivEXT)load("glGetRenderbufferParameterivEXT");
+	fp_glIsFramebufferEXT = (pfn_glIsFramebufferEXT)load("glIsFramebufferEXT");
+	fp_glBindFramebufferEXT = (pfn_glBindFramebufferEXT)load("glBindFramebufferEXT");
+	fp_glDeleteFramebuffersEXT = (pfn_glDeleteFramebuffersEXT)load("glDeleteFramebuffersEXT");
+	fp_glGenFramebuffersEXT = (pfn_glGenFramebuffersEXT)load("glGenFramebuffersEXT");
+	fp_glCheckFramebufferStatusEXT = (pfn_glCheckFramebufferStatusEXT)load("glCheckFramebufferStatusEXT");
+	fp_glFramebufferTexture1DEXT = (pfn_glFramebufferTexture1DEXT)load("glFramebufferTexture1DEXT");
+	fp_glFramebufferTexture2DEXT = (pfn_glFramebufferTexture2DEXT)load("glFramebufferTexture2DEXT");
+	fp_glFramebufferTexture3DEXT = (pfn_glFramebufferTexture3DEXT)load("glFramebufferTexture3DEXT");
+	fp_glFramebufferRenderbufferEXT = (pfn_glFramebufferRenderbufferEXT)load("glFramebufferRenderbufferEXT");
+	fp_glGetFramebufferAttachmentParameterivEXT = (pfn_glGetFramebufferAttachmentParameterivEXT)load("glGetFramebufferAttachmentParameterivEXT");
+	fp_glGenerateMipmapEXT = (pfn_glGenerateMipmapEXT)load("glGenerateMipmapEXT");
+}
+
+GLboolean GLAD_EXT_framebuffer_sRGB = GL_FALSE;
+GLboolean GLAD_EXT_geometry_point_size = GL_FALSE;
+GLboolean GLAD_EXT_geometry_shader = GL_FALSE;
+static void load_GL_EXT_geometry_shader(LOADER load) {
+	if(!GLAD_EXT_geometry_shader) return;
+	fp_glFramebufferTextureEXT = (pfn_glFramebufferTextureEXT)load("glFramebufferTextureEXT");
+}
+
+GLboolean GLAD_EXT_geometry_shader4 = GL_FALSE;
+static void load_GL_EXT_geometry_shader4(LOADER load) {
+	if(!GLAD_EXT_geometry_shader4) return;
+	fp_glProgramParameteriEXT = (pfn_glProgramParameteriEXT)load("glProgramParameteriEXT");
+}
+
+GLboolean GLAD_EXT_gpu_program_parameters = GL_FALSE;
+static void load_GL_EXT_gpu_program_parameters(LOADER load) {
+	if(!GLAD_EXT_gpu_program_parameters) return;
+	fp_glProgramEnvParameters4fvEXT = (pfn_glProgramEnvParameters4fvEXT)load("glProgramEnvParameters4fvEXT");
+	fp_glProgramLocalParameters4fvEXT = (pfn_glProgramLocalParameters4fvEXT)load("glProgramLocalParameters4fvEXT");
+}
+
+GLboolean GLAD_EXT_gpu_shader4 = GL_FALSE;
+static void load_GL_EXT_gpu_shader4(LOADER load) {
+	if(!GLAD_EXT_gpu_shader4) return;
+	fp_glGetUniformuivEXT = (pfn_glGetUniformuivEXT)load("glGetUniformuivEXT");
+	fp_glBindFragDataLocationEXT = (pfn_glBindFragDataLocationEXT)load("glBindFragDataLocationEXT");
+	fp_glGetFragDataLocationEXT = (pfn_glGetFragDataLocationEXT)load("glGetFragDataLocationEXT");
+	fp_glUniform1uiEXT = (pfn_glUniform1uiEXT)load("glUniform1uiEXT");
+	fp_glUniform2uiEXT = (pfn_glUniform2uiEXT)load("glUniform2uiEXT");
+	fp_glUniform3uiEXT = (pfn_glUniform3uiEXT)load("glUniform3uiEXT");
+	fp_glUniform4uiEXT = (pfn_glUniform4uiEXT)load("glUniform4uiEXT");
+	fp_glUniform1uivEXT = (pfn_glUniform1uivEXT)load("glUniform1uivEXT");
+	fp_glUniform2uivEXT = (pfn_glUniform2uivEXT)load("glUniform2uivEXT");
+	fp_glUniform3uivEXT = (pfn_glUniform3uivEXT)load("glUniform3uivEXT");
+	fp_glUniform4uivEXT = (pfn_glUniform4uivEXT)load("glUniform4uivEXT");
+}
+
+GLboolean GLAD_EXT_gpu_shader5 = GL_FALSE;
+GLboolean GLAD_EXT_instanced_arrays = GL_FALSE;
+static void load_GL_EXT_instanced_arrays(LOADER load) {
+	if(!GLAD_EXT_instanced_arrays) return;
+	fp_glDrawArraysInstancedEXT = (pfn_glDrawArraysInstancedEXT)load("glDrawArraysInstancedEXT");
+	fp_glDrawElementsInstancedEXT = (pfn_glDrawElementsInstancedEXT)load("glDrawElementsInstancedEXT");
+	fp_glVertexAttribDivisorEXT = (pfn_glVertexAttribDivisorEXT)load("glVertexAttribDivisorEXT");
+}
+
+GLboolean GLAD_EXT_map_buffer_range = GL_FALSE;
+static void load_GL_EXT_map_buffer_range(LOADER load) {
+	if(!GLAD_EXT_map_buffer_range) return;
+	fp_glMapBufferRangeEXT = (pfn_glMapBufferRangeEXT)load("glMapBufferRangeEXT");
+	fp_glFlushMappedBufferRangeEXT = (pfn_glFlushMappedBufferRangeEXT)load("glFlushMappedBufferRangeEXT");
+}
+
+GLboolean GLAD_EXT_multisampled_render_to_texture = GL_FALSE;
+static void load_GL_EXT_multisampled_render_to_texture(LOADER load) {
+	if(!GLAD_EXT_multisampled_render_to_texture) return;
+	fp_glRenderbufferStorageMultisampleEXT = (pfn_glRenderbufferStorageMultisampleEXT)load("glRenderbufferStorageMultisampleEXT");
+	fp_glFramebufferTexture2DMultisampleEXT = (pfn_glFramebufferTexture2DMultisampleEXT)load("glFramebufferTexture2DMultisampleEXT");
+}
+
+GLboolean GLAD_EXT_multiview_draw_buffers = GL_FALSE;
+static void load_GL_EXT_multiview_draw_buffers(LOADER load) {
+	if(!GLAD_EXT_multiview_draw_buffers) return;
+	fp_glReadBufferIndexedEXT = (pfn_glReadBufferIndexedEXT)load("glReadBufferIndexedEXT");
+	fp_glDrawBuffersIndexedEXT = (pfn_glDrawBuffersIndexedEXT)load("glDrawBuffersIndexedEXT");
+	fp_glGetIntegeri_vEXT = (pfn_glGetIntegeri_vEXT)load("glGetIntegeri_vEXT");
+}
+
+GLboolean GLAD_EXT_occlusion_query_boolean = GL_FALSE;
+static void load_GL_EXT_occlusion_query_boolean(LOADER load) {
+	if(!GLAD_EXT_occlusion_query_boolean) return;
+	fp_glGenQueriesEXT = (pfn_glGenQueriesEXT)load("glGenQueriesEXT");
+	fp_glDeleteQueriesEXT = (pfn_glDeleteQueriesEXT)load("glDeleteQueriesEXT");
+	fp_glIsQueryEXT = (pfn_glIsQueryEXT)load("glIsQueryEXT");
+	fp_glBeginQueryEXT = (pfn_glBeginQueryEXT)load("glBeginQueryEXT");
+	fp_glEndQueryEXT = (pfn_glEndQueryEXT)load("glEndQueryEXT");
+	fp_glGetQueryivEXT = (pfn_glGetQueryivEXT)load("glGetQueryivEXT");
+	fp_glGetQueryObjectuivEXT = (pfn_glGetQueryObjectuivEXT)load("glGetQueryObjectuivEXT");
+}
+
+GLboolean GLAD_EXT_packed_depth_stencil = GL_FALSE;
+GLboolean GLAD_EXT_packed_float = GL_FALSE;
+GLboolean GLAD_EXT_pixel_buffer_object = GL_FALSE;
+GLboolean GLAD_EXT_primitive_bounding_box = GL_FALSE;
+static void load_GL_EXT_primitive_bounding_box(LOADER load) {
+	if(!GLAD_EXT_primitive_bounding_box) return;
+	fp_glPrimitiveBoundingBoxEXT = (pfn_glPrimitiveBoundingBoxEXT)load("glPrimitiveBoundingBoxEXT");
+}
+
+GLboolean GLAD_EXT_provoking_vertex = GL_FALSE;
+static void load_GL_EXT_provoking_vertex(LOADER load) {
+	if(!GLAD_EXT_provoking_vertex) return;
+	fp_glProvokingVertexEXT = (pfn_glProvokingVertexEXT)load("glProvokingVertexEXT");
+}
+
+GLboolean GLAD_EXT_pvrtc_sRGB = GL_FALSE;
+GLboolean GLAD_EXT_read_format_bgra = GL_FALSE;
+GLboolean GLAD_EXT_robustness = GL_FALSE;
+static void load_GL_EXT_robustness(LOADER load) {
+	if(!GLAD_EXT_robustness) return;
+	fp_glGetGraphicsResetStatusEXT = (pfn_glGetGraphicsResetStatusEXT)load("glGetGraphicsResetStatusEXT");
+	fp_glReadnPixelsEXT = (pfn_glReadnPixelsEXT)load("glReadnPixelsEXT");
+	fp_glGetnUniformfvEXT = (pfn_glGetnUniformfvEXT)load("glGetnUniformfvEXT");
+	fp_glGetnUniformivEXT = (pfn_glGetnUniformivEXT)load("glGetnUniformivEXT");
+}
+
+GLboolean GLAD_EXT_separate_shader_objects = GL_FALSE;
+static void load_GL_EXT_separate_shader_objects(LOADER load) {
+	if(!GLAD_EXT_separate_shader_objects) return;
+	fp_glUseShaderProgramEXT = (pfn_glUseShaderProgramEXT)load("glUseShaderProgramEXT");
+	fp_glActiveProgramEXT = (pfn_glActiveProgramEXT)load("glActiveProgramEXT");
+	fp_glCreateShaderProgramEXT = (pfn_glCreateShaderProgramEXT)load("glCreateShaderProgramEXT");
+	fp_glActiveShaderProgramEXT = (pfn_glActiveShaderProgramEXT)load("glActiveShaderProgramEXT");
+	fp_glBindProgramPipelineEXT = (pfn_glBindProgramPipelineEXT)load("glBindProgramPipelineEXT");
+	fp_glCreateShaderProgramvEXT = (pfn_glCreateShaderProgramvEXT)load("glCreateShaderProgramvEXT");
+	fp_glDeleteProgramPipelinesEXT = (pfn_glDeleteProgramPipelinesEXT)load("glDeleteProgramPipelinesEXT");
+	fp_glGenProgramPipelinesEXT = (pfn_glGenProgramPipelinesEXT)load("glGenProgramPipelinesEXT");
+	fp_glGetProgramPipelineInfoLogEXT = (pfn_glGetProgramPipelineInfoLogEXT)load("glGetProgramPipelineInfoLogEXT");
+	fp_glGetProgramPipelineivEXT = (pfn_glGetProgramPipelineivEXT)load("glGetProgramPipelineivEXT");
+	fp_glIsProgramPipelineEXT = (pfn_glIsProgramPipelineEXT)load("glIsProgramPipelineEXT");
+	fp_glProgramParameteriEXT = (pfn_glProgramParameteriEXT)load("glProgramParameteriEXT");
+	fp_glProgramUniform1fEXT = (pfn_glProgramUniform1fEXT)load("glProgramUniform1fEXT");
+	fp_glProgramUniform1fvEXT = (pfn_glProgramUniform1fvEXT)load("glProgramUniform1fvEXT");
+	fp_glProgramUniform1iEXT = (pfn_glProgramUniform1iEXT)load("glProgramUniform1iEXT");
+	fp_glProgramUniform1ivEXT = (pfn_glProgramUniform1ivEXT)load("glProgramUniform1ivEXT");
+	fp_glProgramUniform2fEXT = (pfn_glProgramUniform2fEXT)load("glProgramUniform2fEXT");
+	fp_glProgramUniform2fvEXT = (pfn_glProgramUniform2fvEXT)load("glProgramUniform2fvEXT");
+	fp_glProgramUniform2iEXT = (pfn_glProgramUniform2iEXT)load("glProgramUniform2iEXT");
+	fp_glProgramUniform2ivEXT = (pfn_glProgramUniform2ivEXT)load("glProgramUniform2ivEXT");
+	fp_glProgramUniform3fEXT = (pfn_glProgramUniform3fEXT)load("glProgramUniform3fEXT");
+	fp_glProgramUniform3fvEXT = (pfn_glProgramUniform3fvEXT)load("glProgramUniform3fvEXT");
+	fp_glProgramUniform3iEXT = (pfn_glProgramUniform3iEXT)load("glProgramUniform3iEXT");
+	fp_glProgramUniform3ivEXT = (pfn_glProgramUniform3ivEXT)load("glProgramUniform3ivEXT");
+	fp_glProgramUniform4fEXT = (pfn_glProgramUniform4fEXT)load("glProgramUniform4fEXT");
+	fp_glProgramUniform4fvEXT = (pfn_glProgramUniform4fvEXT)load("glProgramUniform4fvEXT");
+	fp_glProgramUniform4iEXT = (pfn_glProgramUniform4iEXT)load("glProgramUniform4iEXT");
+	fp_glProgramUniform4ivEXT = (pfn_glProgramUniform4ivEXT)load("glProgramUniform4ivEXT");
+	fp_glProgramUniformMatrix2fvEXT = (pfn_glProgramUniformMatrix2fvEXT)load("glProgramUniformMatrix2fvEXT");
+	fp_glProgramUniformMatrix3fvEXT = (pfn_glProgramUniformMatrix3fvEXT)load("glProgramUniformMatrix3fvEXT");
+	fp_glProgramUniformMatrix4fvEXT = (pfn_glProgramUniformMatrix4fvEXT)load("glProgramUniformMatrix4fvEXT");
+	fp_glUseProgramStagesEXT = (pfn_glUseProgramStagesEXT)load("glUseProgramStagesEXT");
+	fp_glValidateProgramPipelineEXT = (pfn_glValidateProgramPipelineEXT)load("glValidateProgramPipelineEXT");
+	fp_glProgramUniform1uiEXT = (pfn_glProgramUniform1uiEXT)load("glProgramUniform1uiEXT");
+	fp_glProgramUniform2uiEXT = (pfn_glProgramUniform2uiEXT)load("glProgramUniform2uiEXT");
+	fp_glProgramUniform3uiEXT = (pfn_glProgramUniform3uiEXT)load("glProgramUniform3uiEXT");
+	fp_glProgramUniform4uiEXT = (pfn_glProgramUniform4uiEXT)load("glProgramUniform4uiEXT");
+	fp_glProgramUniform1uivEXT = (pfn_glProgramUniform1uivEXT)load("glProgramUniform1uivEXT");
+	fp_glProgramUniform2uivEXT = (pfn_glProgramUniform2uivEXT)load("glProgramUniform2uivEXT");
+	fp_glProgramUniform3uivEXT = (pfn_glProgramUniform3uivEXT)load("glProgramUniform3uivEXT");
+	fp_glProgramUniform4uivEXT = (pfn_glProgramUniform4uivEXT)load("glProgramUniform4uivEXT");
+	fp_glProgramUniformMatrix4fvEXT = (pfn_glProgramUniformMatrix4fvEXT)load("glProgramUniformMatrix4fvEXT");
+	fp_glProgramUniformMatrix2x3fvEXT = (pfn_glProgramUniformMatrix2x3fvEXT)load("glProgramUniformMatrix2x3fvEXT");
+	fp_glProgramUniformMatrix3x2fvEXT = (pfn_glProgramUniformMatrix3x2fvEXT)load("glProgramUniformMatrix3x2fvEXT");
+	fp_glProgramUniformMatrix2x4fvEXT = (pfn_glProgramUniformMatrix2x4fvEXT)load("glProgramUniformMatrix2x4fvEXT");
+	fp_glProgramUniformMatrix4x2fvEXT = (pfn_glProgramUniformMatrix4x2fvEXT)load("glProgramUniformMatrix4x2fvEXT");
+	fp_glProgramUniformMatrix3x4fvEXT = (pfn_glProgramUniformMatrix3x4fvEXT)load("glProgramUniformMatrix3x4fvEXT");
+	fp_glProgramUniformMatrix4x3fvEXT = (pfn_glProgramUniformMatrix4x3fvEXT)load("glProgramUniformMatrix4x3fvEXT");
+}
+
+GLboolean GLAD_EXT_shader_framebuffer_fetch = GL_FALSE;
+GLboolean GLAD_EXT_shader_image_load_formatted = GL_FALSE;
+GLboolean GLAD_EXT_shader_image_load_store = GL_FALSE;
+static void load_GL_EXT_shader_image_load_store(LOADER load) {
+	if(!GLAD_EXT_shader_image_load_store) return;
+	fp_glBindImageTextureEXT = (pfn_glBindImageTextureEXT)load("glBindImageTextureEXT");
+	fp_glMemoryBarrierEXT = (pfn_glMemoryBarrierEXT)load("glMemoryBarrierEXT");
+}
+
+GLboolean GLAD_EXT_shader_implicit_conversions = GL_FALSE;
+GLboolean GLAD_EXT_shader_integer_mix = GL_FALSE;
+GLboolean GLAD_EXT_shader_io_blocks = GL_FALSE;
+GLboolean GLAD_EXT_shader_pixel_local_storage = GL_FALSE;
+GLboolean GLAD_EXT_shader_texture_lod = GL_FALSE;
+GLboolean GLAD_EXT_shadow_samplers = GL_FALSE;
+GLboolean GLAD_EXT_sRGB = GL_FALSE;
+GLboolean GLAD_EXT_sRGB_write_control = GL_FALSE;
+GLboolean GLAD_EXT_stencil_clear_tag = GL_FALSE;
+static void load_GL_EXT_stencil_clear_tag(LOADER load) {
+	if(!GLAD_EXT_stencil_clear_tag) return;
+	fp_glStencilClearTagEXT = (pfn_glStencilClearTagEXT)load("glStencilClearTagEXT");
+}
+
+GLboolean GLAD_EXT_tessellation_point_size = GL_FALSE;
+GLboolean GLAD_EXT_tessellation_shader = GL_FALSE;
+static void load_GL_EXT_tessellation_shader(LOADER load) {
+	if(!GLAD_EXT_tessellation_shader) return;
+	fp_glPatchParameteriEXT = (pfn_glPatchParameteriEXT)load("glPatchParameteriEXT");
+}
+
+GLboolean GLAD_EXT_texture_array = GL_FALSE;
+static void load_GL_EXT_texture_array(LOADER load) {
+	if(!GLAD_EXT_texture_array) return;
+	fp_glFramebufferTextureLayerEXT = (pfn_glFramebufferTextureLayerEXT)load("glFramebufferTextureLayerEXT");
+}
+
+GLboolean GLAD_EXT_texture_border_clamp = GL_FALSE;
+static void load_GL_EXT_texture_border_clamp(LOADER load) {
+	if(!GLAD_EXT_texture_border_clamp) return;
+	fp_glTexParameterIivEXT = (pfn_glTexParameterIivEXT)load("glTexParameterIivEXT");
+	fp_glTexParameterIuivEXT = (pfn_glTexParameterIuivEXT)load("glTexParameterIuivEXT");
+	fp_glGetTexParameterIivEXT = (pfn_glGetTexParameterIivEXT)load("glGetTexParameterIivEXT");
+	fp_glGetTexParameterIuivEXT = (pfn_glGetTexParameterIuivEXT)load("glGetTexParameterIuivEXT");
+	fp_glSamplerParameterIivEXT = (pfn_glSamplerParameterIivEXT)load("glSamplerParameterIivEXT");
+	fp_glSamplerParameterIuivEXT = (pfn_glSamplerParameterIuivEXT)load("glSamplerParameterIuivEXT");
+	fp_glGetSamplerParameterIivEXT = (pfn_glGetSamplerParameterIivEXT)load("glGetSamplerParameterIivEXT");
+	fp_glGetSamplerParameterIuivEXT = (pfn_glGetSamplerParameterIuivEXT)load("glGetSamplerParameterIuivEXT");
+}
+
+GLboolean GLAD_EXT_texture_buffer = GL_FALSE;
+static void load_GL_EXT_texture_buffer(LOADER load) {
+	if(!GLAD_EXT_texture_buffer) return;
+	fp_glTexBufferEXT = (pfn_glTexBufferEXT)load("glTexBufferEXT");
+	fp_glTexBufferRangeEXT = (pfn_glTexBufferRangeEXT)load("glTexBufferRangeEXT");
+}
+
+GLboolean GLAD_EXT_texture_buffer_object = GL_FALSE;
+static void load_GL_EXT_texture_buffer_object(LOADER load) {
+	if(!GLAD_EXT_texture_buffer_object) return;
+	fp_glTexBufferEXT = (pfn_glTexBufferEXT)load("glTexBufferEXT");
+}
+
+GLboolean GLAD_EXT_texture_compression_dxt1 = GL_FALSE;
+GLboolean GLAD_EXT_texture_compression_latc = GL_FALSE;
+GLboolean GLAD_EXT_texture_compression_rgtc = GL_FALSE;
+GLboolean GLAD_EXT_texture_compression_s3tc = GL_FALSE;
+GLboolean GLAD_EXT_texture_cube_map = GL_FALSE;
+GLboolean GLAD_EXT_texture_cube_map_array = GL_FALSE;
+GLboolean GLAD_EXT_texture_filter_anisotropic = GL_FALSE;
+GLboolean GLAD_EXT_texture_format_BGRA8888 = GL_FALSE;
+GLboolean GLAD_EXT_texture_integer = GL_FALSE;
+static void load_GL_EXT_texture_integer(LOADER load) {
+	if(!GLAD_EXT_texture_integer) return;
+	fp_glTexParameterIivEXT = (pfn_glTexParameterIivEXT)load("glTexParameterIivEXT");
+	fp_glTexParameterIuivEXT = (pfn_glTexParameterIuivEXT)load("glTexParameterIuivEXT");
+	fp_glGetTexParameterIivEXT = (pfn_glGetTexParameterIivEXT)load("glGetTexParameterIivEXT");
+	fp_glGetTexParameterIuivEXT = (pfn_glGetTexParameterIuivEXT)load("glGetTexParameterIuivEXT");
+	fp_glClearColorIiEXT = (pfn_glClearColorIiEXT)load("glClearColorIiEXT");
+	fp_glClearColorIuiEXT = (pfn_glClearColorIuiEXT)load("glClearColorIuiEXT");
+}
+
+GLboolean GLAD_EXT_texture_rg = GL_FALSE;
+GLboolean GLAD_EXT_texture_shared_exponent = GL_FALSE;
+GLboolean GLAD_EXT_texture_snorm = GL_FALSE;
+GLboolean GLAD_EXT_texture_sRGB = GL_FALSE;
+GLboolean GLAD_EXT_texture_sRGB_decode = GL_FALSE;
+GLboolean GLAD_EXT_texture_storage = GL_FALSE;
+static void load_GL_EXT_texture_storage(LOADER load) {
+	if(!GLAD_EXT_texture_storage) return;
+	fp_glTexStorage1DEXT = (pfn_glTexStorage1DEXT)load("glTexStorage1DEXT");
+	fp_glTexStorage2DEXT = (pfn_glTexStorage2DEXT)load("glTexStorage2DEXT");
+	fp_glTexStorage3DEXT = (pfn_glTexStorage3DEXT)load("glTexStorage3DEXT");
+	fp_glTextureStorage1DEXT = (pfn_glTextureStorage1DEXT)load("glTextureStorage1DEXT");
+	fp_glTextureStorage2DEXT = (pfn_glTextureStorage2DEXT)load("glTextureStorage2DEXT");
+	fp_glTextureStorage3DEXT = (pfn_glTextureStorage3DEXT)load("glTextureStorage3DEXT");
+}
+
+GLboolean GLAD_EXT_texture_swizzle = GL_FALSE;
+GLboolean GLAD_EXT_texture_type_2_10_10_10_REV = GL_FALSE;
+GLboolean GLAD_EXT_texture_view = GL_FALSE;
+static void load_GL_EXT_texture_view(LOADER load) {
+	if(!GLAD_EXT_texture_view) return;
+	fp_glTextureViewEXT = (pfn_glTextureViewEXT)load("glTextureViewEXT");
+}
+
+GLboolean GLAD_EXT_timer_query = GL_FALSE;
+static void load_GL_EXT_timer_query(LOADER load) {
+	if(!GLAD_EXT_timer_query) return;
+	fp_glGetQueryObjecti64vEXT = (pfn_glGetQueryObjecti64vEXT)load("glGetQueryObjecti64vEXT");
+	fp_glGetQueryObjectui64vEXT = (pfn_glGetQueryObjectui64vEXT)load("glGetQueryObjectui64vEXT");
+}
+
+GLboolean GLAD_EXT_transform_feedback = GL_FALSE;
+static void load_GL_EXT_transform_feedback(LOADER load) {
+	if(!GLAD_EXT_transform_feedback) return;
+	fp_glBeginTransformFeedbackEXT = (pfn_glBeginTransformFeedbackEXT)load("glBeginTransformFeedbackEXT");
+	fp_glEndTransformFeedbackEXT = (pfn_glEndTransformFeedbackEXT)load("glEndTransformFeedbackEXT");
+	fp_glBindBufferRangeEXT = (pfn_glBindBufferRangeEXT)load("glBindBufferRangeEXT");
+	fp_glBindBufferOffsetEXT = (pfn_glBindBufferOffsetEXT)load("glBindBufferOffsetEXT");
+	fp_glBindBufferBaseEXT = (pfn_glBindBufferBaseEXT)load("glBindBufferBaseEXT");
+	fp_glTransformFeedbackVaryingsEXT = (pfn_glTransformFeedbackVaryingsEXT)load("glTransformFeedbackVaryingsEXT");
+	fp_glGetTransformFeedbackVaryingEXT = (pfn_glGetTransformFeedbackVaryingEXT)load("glGetTransformFeedbackVaryingEXT");
+}
+
+GLboolean GLAD_EXT_unpack_subimage = GL_FALSE;
+GLboolean GLAD_EXT_vertex_array_bgra = GL_FALSE;
+GLboolean GLAD_EXT_vertex_attrib_64bit = GL_FALSE;
+static void load_GL_EXT_vertex_attrib_64bit(LOADER load) {
+	if(!GLAD_EXT_vertex_attrib_64bit) return;
+	fp_glVertexAttribL1dEXT = (pfn_glVertexAttribL1dEXT)load("glVertexAttribL1dEXT");
+	fp_glVertexAttribL2dEXT = (pfn_glVertexAttribL2dEXT)load("glVertexAttribL2dEXT");
+	fp_glVertexAttribL3dEXT = (pfn_glVertexAttribL3dEXT)load("glVertexAttribL3dEXT");
+	fp_glVertexAttribL4dEXT = (pfn_glVertexAttribL4dEXT)load("glVertexAttribL4dEXT");
+	fp_glVertexAttribL1dvEXT = (pfn_glVertexAttribL1dvEXT)load("glVertexAttribL1dvEXT");
+	fp_glVertexAttribL2dvEXT = (pfn_glVertexAttribL2dvEXT)load("glVertexAttribL2dvEXT");
+	fp_glVertexAttribL3dvEXT = (pfn_glVertexAttribL3dvEXT)load("glVertexAttribL3dvEXT");
+	fp_glVertexAttribL4dvEXT = (pfn_glVertexAttribL4dvEXT)load("glVertexAttribL4dvEXT");
+	fp_glVertexAttribLPointerEXT = (pfn_glVertexAttribLPointerEXT)load("glVertexAttribLPointerEXT");
+	fp_glGetVertexAttribLdvEXT = (pfn_glGetVertexAttribLdvEXT)load("glGetVertexAttribLdvEXT");
+}
+
+GLboolean GLAD_EXT_x11_sync_object = GL_FALSE;
+static void load_GL_EXT_x11_sync_object(LOADER load) {
+	if(!GLAD_EXT_x11_sync_object) return;
+	fp_glImportSyncEXT = (pfn_glImportSyncEXT)load("glImportSyncEXT");
+}
+
+GLboolean GLAD_OES_compressed_ETC1_RGB8_sub_texture = GL_FALSE;
+GLboolean GLAD_OES_compressed_ETC1_RGB8_texture = GL_FALSE;
+GLboolean GLAD_OES_depth24 = GL_FALSE;
+GLboolean GLAD_OES_depth32 = GL_FALSE;
+GLboolean GLAD_OES_depth_texture = GL_FALSE;
+GLboolean GLAD_OES_EGL_image = GL_FALSE;
+static void load_GL_OES_EGL_image(LOADER load) {
+	if(!GLAD_OES_EGL_image) return;
+	fp_glEGLImageTargetTexture2DOES = (pfn_glEGLImageTargetTexture2DOES)load("glEGLImageTargetTexture2DOES");
+	fp_glEGLImageTargetRenderbufferStorageOES = (pfn_glEGLImageTargetRenderbufferStorageOES)load("glEGLImageTargetRenderbufferStorageOES");
+}
+
+GLboolean GLAD_OES_EGL_image_external = GL_FALSE;
+GLboolean GLAD_OES_element_index_uint = GL_FALSE;
+GLboolean GLAD_OES_fbo_render_mipmap = GL_FALSE;
+GLboolean GLAD_OES_fragment_precision_high = GL_FALSE;
+GLboolean GLAD_OES_get_program_binary = GL_FALSE;
+static void load_GL_OES_get_program_binary(LOADER load) {
+	if(!GLAD_OES_get_program_binary) return;
+	fp_glGetProgramBinaryOES = (pfn_glGetProgramBinaryOES)load("glGetProgramBinaryOES");
+	fp_glProgramBinaryOES = (pfn_glProgramBinaryOES)load("glProgramBinaryOES");
+}
+
+GLboolean GLAD_OES_mapbuffer = GL_FALSE;
+static void load_GL_OES_mapbuffer(LOADER load) {
+	if(!GLAD_OES_mapbuffer) return;
+	fp_glMapBufferOES = (pfn_glMapBufferOES)load("glMapBufferOES");
+	fp_glUnmapBufferOES = (pfn_glUnmapBufferOES)load("glUnmapBufferOES");
+	fp_glGetBufferPointervOES = (pfn_glGetBufferPointervOES)load("glGetBufferPointervOES");
+}
+
+GLboolean GLAD_OES_packed_depth_stencil = GL_FALSE;
+GLboolean GLAD_OES_required_internalformat = GL_FALSE;
+GLboolean GLAD_OES_rgb8_rgba8 = GL_FALSE;
+GLboolean GLAD_OES_sample_shading = GL_FALSE;
+static void load_GL_OES_sample_shading(LOADER load) {
+	if(!GLAD_OES_sample_shading) return;
+	fp_glMinSampleShadingOES = (pfn_glMinSampleShadingOES)load("glMinSampleShadingOES");
+}
+
+GLboolean GLAD_OES_sample_variables = GL_FALSE;
+GLboolean GLAD_OES_shader_image_atomic = GL_FALSE;
+GLboolean GLAD_OES_shader_multisample_interpolation = GL_FALSE;
+GLboolean GLAD_OES_standard_derivatives = GL_FALSE;
+GLboolean GLAD_OES_stencil1 = GL_FALSE;
+GLboolean GLAD_OES_stencil4 = GL_FALSE;
+GLboolean GLAD_OES_surfaceless_context = GL_FALSE;
+GLboolean GLAD_OES_texture_3D = GL_FALSE;
+static void load_GL_OES_texture_3D(LOADER load) {
+	if(!GLAD_OES_texture_3D) return;
+	fp_glTexImage3DOES = (pfn_glTexImage3DOES)load("glTexImage3DOES");
+	fp_glTexSubImage3DOES = (pfn_glTexSubImage3DOES)load("glTexSubImage3DOES");
+	fp_glCopyTexSubImage3DOES = (pfn_glCopyTexSubImage3DOES)load("glCopyTexSubImage3DOES");
+	fp_glCompressedTexImage3DOES = (pfn_glCompressedTexImage3DOES)load("glCompressedTexImage3DOES");
+	fp_glCompressedTexSubImage3DOES = (pfn_glCompressedTexSubImage3DOES)load("glCompressedTexSubImage3DOES");
+	fp_glFramebufferTexture3DOES = (pfn_glFramebufferTexture3DOES)load("glFramebufferTexture3DOES");
+}
+
+GLboolean GLAD_OES_texture_compression_astc = GL_FALSE;
+GLboolean GLAD_OES_texture_float = GL_FALSE;
+GLboolean GLAD_OES_texture_float_linear = GL_FALSE;
+GLboolean GLAD_OES_texture_half_float = GL_FALSE;
+GLboolean GLAD_OES_texture_half_float_linear = GL_FALSE;
+GLboolean GLAD_OES_texture_npot = GL_FALSE;
+GLboolean GLAD_OES_texture_stencil8 = GL_FALSE;
+GLboolean GLAD_OES_texture_storage_multisample_2d_array = GL_FALSE;
+static void load_GL_OES_texture_storage_multisample_2d_array(LOADER load) {
+	if(!GLAD_OES_texture_storage_multisample_2d_array) return;
+	fp_glTexStorage3DMultisampleOES = (pfn_glTexStorage3DMultisampleOES)load("glTexStorage3DMultisampleOES");
+}
+
+GLboolean GLAD_OES_vertex_array_object = GL_FALSE;
+static void load_GL_OES_vertex_array_object(LOADER load) {
+	if(!GLAD_OES_vertex_array_object) return;
+	fp_glBindVertexArrayOES = (pfn_glBindVertexArrayOES)load("glBindVertexArrayOES");
+	fp_glDeleteVertexArraysOES = (pfn_glDeleteVertexArraysOES)load("glDeleteVertexArraysOES");
+	fp_glGenVertexArraysOES = (pfn_glGenVertexArraysOES)load("glGenVertexArraysOES");
+	fp_glIsVertexArrayOES = (pfn_glIsVertexArrayOES)load("glIsVertexArrayOES");
+}
+
+GLboolean GLAD_OES_vertex_half_float = GL_FALSE;
+GLboolean GLAD_OES_vertex_type_10_10_10_2 = GL_FALSE;
+GLboolean GLAD_AMD_blend_minmax_factor = GL_FALSE;
+GLboolean GLAD_AMD_compressed_3DC_texture = GL_FALSE;
+GLboolean GLAD_AMD_compressed_ATC_texture = GL_FALSE;
+GLboolean GLAD_AMD_conservative_depth = GL_FALSE;
+GLboolean GLAD_AMD_debug_output = GL_FALSE;
+static void load_GL_AMD_debug_output(LOADER load) {
+	if(!GLAD_AMD_debug_output) return;
+	fp_glDebugMessageEnableAMD = (pfn_glDebugMessageEnableAMD)load("glDebugMessageEnableAMD");
+	fp_glDebugMessageInsertAMD = (pfn_glDebugMessageInsertAMD)load("glDebugMessageInsertAMD");
+	fp_glDebugMessageCallbackAMD = (pfn_glDebugMessageCallbackAMD)load("glDebugMessageCallbackAMD");
+	fp_glGetDebugMessageLogAMD = (pfn_glGetDebugMessageLogAMD)load("glGetDebugMessageLogAMD");
+}
+
+GLboolean GLAD_AMD_depth_clamp_separate = GL_FALSE;
+GLboolean GLAD_AMD_draw_buffers_blend = GL_FALSE;
+static void load_GL_AMD_draw_buffers_blend(LOADER load) {
+	if(!GLAD_AMD_draw_buffers_blend) return;
+	fp_glBlendFuncIndexedAMD = (pfn_glBlendFuncIndexedAMD)load("glBlendFuncIndexedAMD");
+	fp_glBlendFuncSeparateIndexedAMD = (pfn_glBlendFuncSeparateIndexedAMD)load("glBlendFuncSeparateIndexedAMD");
+	fp_glBlendEquationIndexedAMD = (pfn_glBlendEquationIndexedAMD)load("glBlendEquationIndexedAMD");
+	fp_glBlendEquationSeparateIndexedAMD = (pfn_glBlendEquationSeparateIndexedAMD)load("glBlendEquationSeparateIndexedAMD");
+}
+
+GLboolean GLAD_AMD_gcn_shader = GL_FALSE;
+GLboolean GLAD_AMD_gpu_shader_int64 = GL_FALSE;
+static void load_GL_AMD_gpu_shader_int64(LOADER load) {
+	if(!GLAD_AMD_gpu_shader_int64) return;
+	fp_glUniform1i64NV = (pfn_glUniform1i64NV)load("glUniform1i64NV");
+	fp_glUniform2i64NV = (pfn_glUniform2i64NV)load("glUniform2i64NV");
+	fp_glUniform3i64NV = (pfn_glUniform3i64NV)load("glUniform3i64NV");
+	fp_glUniform4i64NV = (pfn_glUniform4i64NV)load("glUniform4i64NV");
+	fp_glUniform1i64vNV = (pfn_glUniform1i64vNV)load("glUniform1i64vNV");
+	fp_glUniform2i64vNV = (pfn_glUniform2i64vNV)load("glUniform2i64vNV");
+	fp_glUniform3i64vNV = (pfn_glUniform3i64vNV)load("glUniform3i64vNV");
+	fp_glUniform4i64vNV = (pfn_glUniform4i64vNV)load("glUniform4i64vNV");
+	fp_glUniform1ui64NV = (pfn_glUniform1ui64NV)load("glUniform1ui64NV");
+	fp_glUniform2ui64NV = (pfn_glUniform2ui64NV)load("glUniform2ui64NV");
+	fp_glUniform3ui64NV = (pfn_glUniform3ui64NV)load("glUniform3ui64NV");
+	fp_glUniform4ui64NV = (pfn_glUniform4ui64NV)load("glUniform4ui64NV");
+	fp_glUniform1ui64vNV = (pfn_glUniform1ui64vNV)load("glUniform1ui64vNV");
+	fp_glUniform2ui64vNV = (pfn_glUniform2ui64vNV)load("glUniform2ui64vNV");
+	fp_glUniform3ui64vNV = (pfn_glUniform3ui64vNV)load("glUniform3ui64vNV");
+	fp_glUniform4ui64vNV = (pfn_glUniform4ui64vNV)load("glUniform4ui64vNV");
+	fp_glGetUniformi64vNV = (pfn_glGetUniformi64vNV)load("glGetUniformi64vNV");
+	fp_glGetUniformui64vNV = (pfn_glGetUniformui64vNV)load("glGetUniformui64vNV");
+	fp_glProgramUniform1i64NV = (pfn_glProgramUniform1i64NV)load("glProgramUniform1i64NV");
+	fp_glProgramUniform2i64NV = (pfn_glProgramUniform2i64NV)load("glProgramUniform2i64NV");
+	fp_glProgramUniform3i64NV = (pfn_glProgramUniform3i64NV)load("glProgramUniform3i64NV");
+	fp_glProgramUniform4i64NV = (pfn_glProgramUniform4i64NV)load("glProgramUniform4i64NV");
+	fp_glProgramUniform1i64vNV = (pfn_glProgramUniform1i64vNV)load("glProgramUniform1i64vNV");
+	fp_glProgramUniform2i64vNV = (pfn_glProgramUniform2i64vNV)load("glProgramUniform2i64vNV");
+	fp_glProgramUniform3i64vNV = (pfn_glProgramUniform3i64vNV)load("glProgramUniform3i64vNV");
+	fp_glProgramUniform4i64vNV = (pfn_glProgramUniform4i64vNV)load("glProgramUniform4i64vNV");
+	fp_glProgramUniform1ui64NV = (pfn_glProgramUniform1ui64NV)load("glProgramUniform1ui64NV");
+	fp_glProgramUniform2ui64NV = (pfn_glProgramUniform2ui64NV)load("glProgramUniform2ui64NV");
+	fp_glProgramUniform3ui64NV = (pfn_glProgramUniform3ui64NV)load("glProgramUniform3ui64NV");
+	fp_glProgramUniform4ui64NV = (pfn_glProgramUniform4ui64NV)load("glProgramUniform4ui64NV");
+	fp_glProgramUniform1ui64vNV = (pfn_glProgramUniform1ui64vNV)load("glProgramUniform1ui64vNV");
+	fp_glProgramUniform2ui64vNV = (pfn_glProgramUniform2ui64vNV)load("glProgramUniform2ui64vNV");
+	fp_glProgramUniform3ui64vNV = (pfn_glProgramUniform3ui64vNV)load("glProgramUniform3ui64vNV");
+	fp_glProgramUniform4ui64vNV = (pfn_glProgramUniform4ui64vNV)load("glProgramUniform4ui64vNV");
+}
+
+GLboolean GLAD_AMD_interleaved_elements = GL_FALSE;
+static void load_GL_AMD_interleaved_elements(LOADER load) {
+	if(!GLAD_AMD_interleaved_elements) return;
+	fp_glVertexAttribParameteriAMD = (pfn_glVertexAttribParameteriAMD)load("glVertexAttribParameteriAMD");
+}
+
+GLboolean GLAD_AMD_multi_draw_indirect = GL_FALSE;
+static void load_GL_AMD_multi_draw_indirect(LOADER load) {
+	if(!GLAD_AMD_multi_draw_indirect) return;
+	fp_glMultiDrawArraysIndirectAMD = (pfn_glMultiDrawArraysIndirectAMD)load("glMultiDrawArraysIndirectAMD");
+	fp_glMultiDrawElementsIndirectAMD = (pfn_glMultiDrawElementsIndirectAMD)load("glMultiDrawElementsIndirectAMD");
+}
+
+GLboolean GLAD_AMD_name_gen_delete = GL_FALSE;
+static void load_GL_AMD_name_gen_delete(LOADER load) {
+	if(!GLAD_AMD_name_gen_delete) return;
+	fp_glGenNamesAMD = (pfn_glGenNamesAMD)load("glGenNamesAMD");
+	fp_glDeleteNamesAMD = (pfn_glDeleteNamesAMD)load("glDeleteNamesAMD");
+	fp_glIsNameAMD = (pfn_glIsNameAMD)load("glIsNameAMD");
+}
+
+GLboolean GLAD_AMD_occlusion_query_event = GL_FALSE;
+static void load_GL_AMD_occlusion_query_event(LOADER load) {
+	if(!GLAD_AMD_occlusion_query_event) return;
+	fp_glQueryObjectParameteruiAMD = (pfn_glQueryObjectParameteruiAMD)load("glQueryObjectParameteruiAMD");
+}
+
+GLboolean GLAD_AMD_performance_monitor = GL_FALSE;
+static void load_GL_AMD_performance_monitor(LOADER load) {
+	if(!GLAD_AMD_performance_monitor) return;
+	fp_glGetPerfMonitorGroupsAMD = (pfn_glGetPerfMonitorGroupsAMD)load("glGetPerfMonitorGroupsAMD");
+	fp_glGetPerfMonitorCountersAMD = (pfn_glGetPerfMonitorCountersAMD)load("glGetPerfMonitorCountersAMD");
+	fp_glGetPerfMonitorGroupStringAMD = (pfn_glGetPerfMonitorGroupStringAMD)load("glGetPerfMonitorGroupStringAMD");
+	fp_glGetPerfMonitorCounterStringAMD = (pfn_glGetPerfMonitorCounterStringAMD)load("glGetPerfMonitorCounterStringAMD");
+	fp_glGetPerfMonitorCounterInfoAMD = (pfn_glGetPerfMonitorCounterInfoAMD)load("glGetPerfMonitorCounterInfoAMD");
+	fp_glGenPerfMonitorsAMD = (pfn_glGenPerfMonitorsAMD)load("glGenPerfMonitorsAMD");
+	fp_glDeletePerfMonitorsAMD = (pfn_glDeletePerfMonitorsAMD)load("glDeletePerfMonitorsAMD");
+	fp_glSelectPerfMonitorCountersAMD = (pfn_glSelectPerfMonitorCountersAMD)load("glSelectPerfMonitorCountersAMD");
+	fp_glBeginPerfMonitorAMD = (pfn_glBeginPerfMonitorAMD)load("glBeginPerfMonitorAMD");
+	fp_glEndPerfMonitorAMD = (pfn_glEndPerfMonitorAMD)load("glEndPerfMonitorAMD");
+	fp_glGetPerfMonitorCounterDataAMD = (pfn_glGetPerfMonitorCounterDataAMD)load("glGetPerfMonitorCounterDataAMD");
+}
+
+GLboolean GLAD_AMD_pinned_memory = GL_FALSE;
+GLboolean GLAD_AMD_program_binary_Z400 = GL_FALSE;
+GLboolean GLAD_AMD_query_buffer_object = GL_FALSE;
+GLboolean GLAD_AMD_sample_positions = GL_FALSE;
+static void load_GL_AMD_sample_positions(LOADER load) {
+	if(!GLAD_AMD_sample_positions) return;
+	fp_glSetMultisamplefvAMD = (pfn_glSetMultisamplefvAMD)load("glSetMultisamplefvAMD");
+}
+
+GLboolean GLAD_AMD_seamless_cubemap_per_texture = GL_FALSE;
+GLboolean GLAD_AMD_shader_atomic_counter_ops = GL_FALSE;
+GLboolean GLAD_AMD_shader_stencil_export = GL_FALSE;
+GLboolean GLAD_AMD_shader_trinary_minmax = GL_FALSE;
+GLboolean GLAD_AMD_sparse_texture = GL_FALSE;
+static void load_GL_AMD_sparse_texture(LOADER load) {
+	if(!GLAD_AMD_sparse_texture) return;
+	fp_glTexStorageSparseAMD = (pfn_glTexStorageSparseAMD)load("glTexStorageSparseAMD");
+	fp_glTextureStorageSparseAMD = (pfn_glTextureStorageSparseAMD)load("glTextureStorageSparseAMD");
+}
+
+GLboolean GLAD_AMD_stencil_operation_extended = GL_FALSE;
+static void load_GL_AMD_stencil_operation_extended(LOADER load) {
+	if(!GLAD_AMD_stencil_operation_extended) return;
+	fp_glStencilOpValueAMD = (pfn_glStencilOpValueAMD)load("glStencilOpValueAMD");
+}
+
+GLboolean GLAD_AMD_texture_texture4 = GL_FALSE;
+GLboolean GLAD_AMD_transform_feedback3_lines_triangles = GL_FALSE;
+GLboolean GLAD_AMD_transform_feedback4 = GL_FALSE;
+GLboolean GLAD_AMD_vertex_shader_layer = GL_FALSE;
+GLboolean GLAD_AMD_vertex_shader_tessellator = GL_FALSE;
+static void load_GL_AMD_vertex_shader_tessellator(LOADER load) {
+	if(!GLAD_AMD_vertex_shader_tessellator) return;
+	fp_glTessellationFactorAMD = (pfn_glTessellationFactorAMD)load("glTessellationFactorAMD");
+	fp_glTessellationModeAMD = (pfn_glTessellationModeAMD)load("glTessellationModeAMD");
+}
+
+GLboolean GLAD_AMD_vertex_shader_viewport_index = GL_FALSE;
+GLboolean GLAD_ANDROID_extension_pack_es31a = GL_FALSE;
+GLboolean GLAD_ANGLE_depth_texture = GL_FALSE;
+GLboolean GLAD_ANGLE_framebuffer_blit = GL_FALSE;
+static void load_GL_ANGLE_framebuffer_blit(LOADER load) {
+	if(!GLAD_ANGLE_framebuffer_blit) return;
+	fp_glBlitFramebufferANGLE = (pfn_glBlitFramebufferANGLE)load("glBlitFramebufferANGLE");
+}
+
+GLboolean GLAD_ANGLE_framebuffer_multisample = GL_FALSE;
+static void load_GL_ANGLE_framebuffer_multisample(LOADER load) {
+	if(!GLAD_ANGLE_framebuffer_multisample) return;
+	fp_glRenderbufferStorageMultisampleANGLE = (pfn_glRenderbufferStorageMultisampleANGLE)load("glRenderbufferStorageMultisampleANGLE");
+}
+
+GLboolean GLAD_ANGLE_instanced_arrays = GL_FALSE;
+static void load_GL_ANGLE_instanced_arrays(LOADER load) {
+	if(!GLAD_ANGLE_instanced_arrays) return;
+	fp_glDrawArraysInstancedANGLE = (pfn_glDrawArraysInstancedANGLE)load("glDrawArraysInstancedANGLE");
+	fp_glDrawElementsInstancedANGLE = (pfn_glDrawElementsInstancedANGLE)load("glDrawElementsInstancedANGLE");
+	fp_glVertexAttribDivisorANGLE = (pfn_glVertexAttribDivisorANGLE)load("glVertexAttribDivisorANGLE");
+}
+
+GLboolean GLAD_ANGLE_pack_reverse_row_order = GL_FALSE;
+GLboolean GLAD_ANGLE_program_binary = GL_FALSE;
+GLboolean GLAD_ANGLE_texture_compression_dxt3 = GL_FALSE;
+GLboolean GLAD_ANGLE_texture_compression_dxt5 = GL_FALSE;
+GLboolean GLAD_ANGLE_texture_usage = GL_FALSE;
+GLboolean GLAD_ANGLE_translated_shader_source = GL_FALSE;
+static void load_GL_ANGLE_translated_shader_source(LOADER load) {
+	if(!GLAD_ANGLE_translated_shader_source) return;
+	fp_glGetTranslatedShaderSourceANGLE = (pfn_glGetTranslatedShaderSourceANGLE)load("glGetTranslatedShaderSourceANGLE");
+}
+
+GLboolean GLAD_APPLE_aux_depth_stencil = GL_FALSE;
+GLboolean GLAD_APPLE_client_storage = GL_FALSE;
+GLboolean GLAD_APPLE_copy_texture_levels = GL_FALSE;
+static void load_GL_APPLE_copy_texture_levels(LOADER load) {
+	if(!GLAD_APPLE_copy_texture_levels) return;
+	fp_glCopyTextureLevelsAPPLE = (pfn_glCopyTextureLevelsAPPLE)load("glCopyTextureLevelsAPPLE");
+}
+
+GLboolean GLAD_APPLE_element_array = GL_FALSE;
+static void load_GL_APPLE_element_array(LOADER load) {
+	if(!GLAD_APPLE_element_array) return;
+	fp_glElementPointerAPPLE = (pfn_glElementPointerAPPLE)load("glElementPointerAPPLE");
+	fp_glDrawElementArrayAPPLE = (pfn_glDrawElementArrayAPPLE)load("glDrawElementArrayAPPLE");
+	fp_glDrawRangeElementArrayAPPLE = (pfn_glDrawRangeElementArrayAPPLE)load("glDrawRangeElementArrayAPPLE");
+	fp_glMultiDrawElementArrayAPPLE = (pfn_glMultiDrawElementArrayAPPLE)load("glMultiDrawElementArrayAPPLE");
+	fp_glMultiDrawRangeElementArrayAPPLE = (pfn_glMultiDrawRangeElementArrayAPPLE)load("glMultiDrawRangeElementArrayAPPLE");
+}
+
+GLboolean GLAD_APPLE_fence = GL_FALSE;
+static void load_GL_APPLE_fence(LOADER load) {
+	if(!GLAD_APPLE_fence) return;
+	fp_glGenFencesAPPLE = (pfn_glGenFencesAPPLE)load("glGenFencesAPPLE");
+	fp_glDeleteFencesAPPLE = (pfn_glDeleteFencesAPPLE)load("glDeleteFencesAPPLE");
+	fp_glSetFenceAPPLE = (pfn_glSetFenceAPPLE)load("glSetFenceAPPLE");
+	fp_glIsFenceAPPLE = (pfn_glIsFenceAPPLE)load("glIsFenceAPPLE");
+	fp_glTestFenceAPPLE = (pfn_glTestFenceAPPLE)load("glTestFenceAPPLE");
+	fp_glFinishFenceAPPLE = (pfn_glFinishFenceAPPLE)load("glFinishFenceAPPLE");
+	fp_glTestObjectAPPLE = (pfn_glTestObjectAPPLE)load("glTestObjectAPPLE");
+	fp_glFinishObjectAPPLE = (pfn_glFinishObjectAPPLE)load("glFinishObjectAPPLE");
+}
+
+GLboolean GLAD_APPLE_float_pixels = GL_FALSE;
+GLboolean GLAD_APPLE_flush_buffer_range = GL_FALSE;
+static void load_GL_APPLE_flush_buffer_range(LOADER load) {
+	if(!GLAD_APPLE_flush_buffer_range) return;
+	fp_glBufferParameteriAPPLE = (pfn_glBufferParameteriAPPLE)load("glBufferParameteriAPPLE");
+	fp_glFlushMappedBufferRangeAPPLE = (pfn_glFlushMappedBufferRangeAPPLE)load("glFlushMappedBufferRangeAPPLE");
+}
+
+GLboolean GLAD_APPLE_framebuffer_multisample = GL_FALSE;
+static void load_GL_APPLE_framebuffer_multisample(LOADER load) {
+	if(!GLAD_APPLE_framebuffer_multisample) return;
+	fp_glRenderbufferStorageMultisampleAPPLE = (pfn_glRenderbufferStorageMultisampleAPPLE)load("glRenderbufferStorageMultisampleAPPLE");
+	fp_glResolveMultisampleFramebufferAPPLE = (pfn_glResolveMultisampleFramebufferAPPLE)load("glResolveMultisampleFramebufferAPPLE");
+}
+
+GLboolean GLAD_APPLE_object_purgeable = GL_FALSE;
+static void load_GL_APPLE_object_purgeable(LOADER load) {
+	if(!GLAD_APPLE_object_purgeable) return;
+	fp_glObjectPurgeableAPPLE = (pfn_glObjectPurgeableAPPLE)load("glObjectPurgeableAPPLE");
+	fp_glObjectUnpurgeableAPPLE = (pfn_glObjectUnpurgeableAPPLE)load("glObjectUnpurgeableAPPLE");
+	fp_glGetObjectParameterivAPPLE = (pfn_glGetObjectParameterivAPPLE)load("glGetObjectParameterivAPPLE");
+}
+
+GLboolean GLAD_APPLE_rgb_422 = GL_FALSE;
+GLboolean GLAD_APPLE_row_bytes = GL_FALSE;
+GLboolean GLAD_APPLE_sync = GL_FALSE;
+static void load_GL_APPLE_sync(LOADER load) {
+	if(!GLAD_APPLE_sync) return;
+	fp_glFenceSyncAPPLE = (pfn_glFenceSyncAPPLE)load("glFenceSyncAPPLE");
+	fp_glIsSyncAPPLE = (pfn_glIsSyncAPPLE)load("glIsSyncAPPLE");
+	fp_glDeleteSyncAPPLE = (pfn_glDeleteSyncAPPLE)load("glDeleteSyncAPPLE");
+	fp_glClientWaitSyncAPPLE = (pfn_glClientWaitSyncAPPLE)load("glClientWaitSyncAPPLE");
+	fp_glWaitSyncAPPLE = (pfn_glWaitSyncAPPLE)load("glWaitSyncAPPLE");
+	fp_glGetInteger64vAPPLE = (pfn_glGetInteger64vAPPLE)load("glGetInteger64vAPPLE");
+	fp_glGetSyncivAPPLE = (pfn_glGetSyncivAPPLE)load("glGetSyncivAPPLE");
+}
+
+GLboolean GLAD_APPLE_texture_format_BGRA8888 = GL_FALSE;
+GLboolean GLAD_APPLE_texture_max_level = GL_FALSE;
+GLboolean GLAD_APPLE_texture_range = GL_FALSE;
+static void load_GL_APPLE_texture_range(LOADER load) {
+	if(!GLAD_APPLE_texture_range) return;
+	fp_glTextureRangeAPPLE = (pfn_glTextureRangeAPPLE)load("glTextureRangeAPPLE");
+	fp_glGetTexParameterPointervAPPLE = (pfn_glGetTexParameterPointervAPPLE)load("glGetTexParameterPointervAPPLE");
+}
+
+GLboolean GLAD_APPLE_vertex_array_object = GL_FALSE;
+static void load_GL_APPLE_vertex_array_object(LOADER load) {
+	if(!GLAD_APPLE_vertex_array_object) return;
+	fp_glBindVertexArrayAPPLE = (pfn_glBindVertexArrayAPPLE)load("glBindVertexArrayAPPLE");
+	fp_glDeleteVertexArraysAPPLE = (pfn_glDeleteVertexArraysAPPLE)load("glDeleteVertexArraysAPPLE");
+	fp_glGenVertexArraysAPPLE = (pfn_glGenVertexArraysAPPLE)load("glGenVertexArraysAPPLE");
+	fp_glIsVertexArrayAPPLE = (pfn_glIsVertexArrayAPPLE)load("glIsVertexArrayAPPLE");
+}
+
+GLboolean GLAD_APPLE_vertex_array_range = GL_FALSE;
+static void load_GL_APPLE_vertex_array_range(LOADER load) {
+	if(!GLAD_APPLE_vertex_array_range) return;
+	fp_glVertexArrayRangeAPPLE = (pfn_glVertexArrayRangeAPPLE)load("glVertexArrayRangeAPPLE");
+	fp_glFlushVertexArrayRangeAPPLE = (pfn_glFlushVertexArrayRangeAPPLE)load("glFlushVertexArrayRangeAPPLE");
+	fp_glVertexArrayParameteriAPPLE = (pfn_glVertexArrayParameteriAPPLE)load("glVertexArrayParameteriAPPLE");
+}
+
+GLboolean GLAD_APPLE_vertex_program_evaluators = GL_FALSE;
+static void load_GL_APPLE_vertex_program_evaluators(LOADER load) {
+	if(!GLAD_APPLE_vertex_program_evaluators) return;
+	fp_glEnableVertexAttribAPPLE = (pfn_glEnableVertexAttribAPPLE)load("glEnableVertexAttribAPPLE");
+	fp_glDisableVertexAttribAPPLE = (pfn_glDisableVertexAttribAPPLE)load("glDisableVertexAttribAPPLE");
+	fp_glIsVertexAttribEnabledAPPLE = (pfn_glIsVertexAttribEnabledAPPLE)load("glIsVertexAttribEnabledAPPLE");
+	fp_glMapVertexAttrib1dAPPLE = (pfn_glMapVertexAttrib1dAPPLE)load("glMapVertexAttrib1dAPPLE");
+	fp_glMapVertexAttrib1fAPPLE = (pfn_glMapVertexAttrib1fAPPLE)load("glMapVertexAttrib1fAPPLE");
+	fp_glMapVertexAttrib2dAPPLE = (pfn_glMapVertexAttrib2dAPPLE)load("glMapVertexAttrib2dAPPLE");
+	fp_glMapVertexAttrib2fAPPLE = (pfn_glMapVertexAttrib2fAPPLE)load("glMapVertexAttrib2fAPPLE");
+}
+
+GLboolean GLAD_APPLE_ycbcr_422 = GL_FALSE;
+GLboolean GLAD_ARM_mali_program_binary = GL_FALSE;
+GLboolean GLAD_ARM_mali_shader_binary = GL_FALSE;
+GLboolean GLAD_ARM_rgba8 = GL_FALSE;
+GLboolean GLAD_ARM_shader_framebuffer_fetch = GL_FALSE;
+GLboolean GLAD_ARM_shader_framebuffer_fetch_depth_stencil = GL_FALSE;
+GLboolean GLAD_ATI_meminfo = GL_FALSE;
+GLboolean GLAD_ATI_pixel_format_float = GL_FALSE;
+GLboolean GLAD_DMP_shader_binary = GL_FALSE;
+GLboolean GLAD_FJ_shader_binary_GCCSO = GL_FALSE;
+GLboolean GLAD_GREMEDY_frame_terminator = GL_FALSE;
+static void load_GL_GREMEDY_frame_terminator(LOADER load) {
+	if(!GLAD_GREMEDY_frame_terminator) return;
+	fp_glFrameTerminatorGREMEDY = (pfn_glFrameTerminatorGREMEDY)load("glFrameTerminatorGREMEDY");
+}
+
+GLboolean GLAD_GREMEDY_string_marker = GL_FALSE;
+static void load_GL_GREMEDY_string_marker(LOADER load) {
+	if(!GLAD_GREMEDY_string_marker) return;
+	fp_glStringMarkerGREMEDY = (pfn_glStringMarkerGREMEDY)load("glStringMarkerGREMEDY");
+}
+
+GLboolean GLAD_IMG_multisampled_render_to_texture = GL_FALSE;
+static void load_GL_IMG_multisampled_render_to_texture(LOADER load) {
+	if(!GLAD_IMG_multisampled_render_to_texture) return;
+	fp_glRenderbufferStorageMultisampleIMG = (pfn_glRenderbufferStorageMultisampleIMG)load("glRenderbufferStorageMultisampleIMG");
+	fp_glFramebufferTexture2DMultisampleIMG = (pfn_glFramebufferTexture2DMultisampleIMG)load("glFramebufferTexture2DMultisampleIMG");
+}
+
+GLboolean GLAD_IMG_program_binary = GL_FALSE;
+GLboolean GLAD_IMG_read_format = GL_FALSE;
+GLboolean GLAD_IMG_shader_binary = GL_FALSE;
+GLboolean GLAD_IMG_texture_compression_pvrtc = GL_FALSE;
+GLboolean GLAD_IMG_texture_compression_pvrtc2 = GL_FALSE;
+GLboolean GLAD_INGR_blend_func_separate = GL_FALSE;
+static void load_GL_INGR_blend_func_separate(LOADER load) {
+	if(!GLAD_INGR_blend_func_separate) return;
+	fp_glBlendFuncSeparateINGR = (pfn_glBlendFuncSeparateINGR)load("glBlendFuncSeparateINGR");
+}
+
+GLboolean GLAD_INTEL_fragment_shader_ordering = GL_FALSE;
+GLboolean GLAD_INTEL_map_texture = GL_FALSE;
+static void load_GL_INTEL_map_texture(LOADER load) {
+	if(!GLAD_INTEL_map_texture) return;
+	fp_glSyncTextureINTEL = (pfn_glSyncTextureINTEL)load("glSyncTextureINTEL");
+	fp_glUnmapTexture2DINTEL = (pfn_glUnmapTexture2DINTEL)load("glUnmapTexture2DINTEL");
+	fp_glMapTexture2DINTEL = (pfn_glMapTexture2DINTEL)load("glMapTexture2DINTEL");
+}
+
+GLboolean GLAD_INTEL_performance_query = GL_FALSE;
+static void load_GL_INTEL_performance_query(LOADER load) {
+	if(!GLAD_INTEL_performance_query) return;
+	fp_glBeginPerfQueryINTEL = (pfn_glBeginPerfQueryINTEL)load("glBeginPerfQueryINTEL");
+	fp_glCreatePerfQueryINTEL = (pfn_glCreatePerfQueryINTEL)load("glCreatePerfQueryINTEL");
+	fp_glDeletePerfQueryINTEL = (pfn_glDeletePerfQueryINTEL)load("glDeletePerfQueryINTEL");
+	fp_glEndPerfQueryINTEL = (pfn_glEndPerfQueryINTEL)load("glEndPerfQueryINTEL");
+	fp_glGetFirstPerfQueryIdINTEL = (pfn_glGetFirstPerfQueryIdINTEL)load("glGetFirstPerfQueryIdINTEL");
+	fp_glGetNextPerfQueryIdINTEL = (pfn_glGetNextPerfQueryIdINTEL)load("glGetNextPerfQueryIdINTEL");
+	fp_glGetPerfCounterInfoINTEL = (pfn_glGetPerfCounterInfoINTEL)load("glGetPerfCounterInfoINTEL");
+	fp_glGetPerfQueryDataINTEL = (pfn_glGetPerfQueryDataINTEL)load("glGetPerfQueryDataINTEL");
+	fp_glGetPerfQueryIdByNameINTEL = (pfn_glGetPerfQueryIdByNameINTEL)load("glGetPerfQueryIdByNameINTEL");
+	fp_glGetPerfQueryInfoINTEL = (pfn_glGetPerfQueryInfoINTEL)load("glGetPerfQueryInfoINTEL");
+}
+
+GLboolean GLAD_MESA_pack_invert = GL_FALSE;
+GLboolean GLAD_MESA_ycbcr_texture = GL_FALSE;
+GLboolean GLAD_MESAX_texture_stack = GL_FALSE;
+GLboolean GLAD_NV_bindless_multi_draw_indirect = GL_FALSE;
+static void load_GL_NV_bindless_multi_draw_indirect(LOADER load) {
+	if(!GLAD_NV_bindless_multi_draw_indirect) return;
+	fp_glMultiDrawArraysIndirectBindlessNV = (pfn_glMultiDrawArraysIndirectBindlessNV)load("glMultiDrawArraysIndirectBindlessNV");
+	fp_glMultiDrawElementsIndirectBindlessNV = (pfn_glMultiDrawElementsIndirectBindlessNV)load("glMultiDrawElementsIndirectBindlessNV");
+}
+
+GLboolean GLAD_NV_bindless_multi_draw_indirect_count = GL_FALSE;
+static void load_GL_NV_bindless_multi_draw_indirect_count(LOADER load) {
+	if(!GLAD_NV_bindless_multi_draw_indirect_count) return;
+	fp_glMultiDrawArraysIndirectBindlessCountNV = (pfn_glMultiDrawArraysIndirectBindlessCountNV)load("glMultiDrawArraysIndirectBindlessCountNV");
+	fp_glMultiDrawElementsIndirectBindlessCountNV = (pfn_glMultiDrawElementsIndirectBindlessCountNV)load("glMultiDrawElementsIndirectBindlessCountNV");
+}
+
+GLboolean GLAD_NV_bindless_texture = GL_FALSE;
+static void load_GL_NV_bindless_texture(LOADER load) {
+	if(!GLAD_NV_bindless_texture) return;
+	fp_glGetTextureHandleNV = (pfn_glGetTextureHandleNV)load("glGetTextureHandleNV");
+	fp_glGetTextureSamplerHandleNV = (pfn_glGetTextureSamplerHandleNV)load("glGetTextureSamplerHandleNV");
+	fp_glMakeTextureHandleResidentNV = (pfn_glMakeTextureHandleResidentNV)load("glMakeTextureHandleResidentNV");
+	fp_glMakeTextureHandleNonResidentNV = (pfn_glMakeTextureHandleNonResidentNV)load("glMakeTextureHandleNonResidentNV");
+	fp_glGetImageHandleNV = (pfn_glGetImageHandleNV)load("glGetImageHandleNV");
+	fp_glMakeImageHandleResidentNV = (pfn_glMakeImageHandleResidentNV)load("glMakeImageHandleResidentNV");
+	fp_glMakeImageHandleNonResidentNV = (pfn_glMakeImageHandleNonResidentNV)load("glMakeImageHandleNonResidentNV");
+	fp_glUniformHandleui64NV = (pfn_glUniformHandleui64NV)load("glUniformHandleui64NV");
+	fp_glUniformHandleui64vNV = (pfn_glUniformHandleui64vNV)load("glUniformHandleui64vNV");
+	fp_glProgramUniformHandleui64NV = (pfn_glProgramUniformHandleui64NV)load("glProgramUniformHandleui64NV");
+	fp_glProgramUniformHandleui64vNV = (pfn_glProgramUniformHandleui64vNV)load("glProgramUniformHandleui64vNV");
+	fp_glIsTextureHandleResidentNV = (pfn_glIsTextureHandleResidentNV)load("glIsTextureHandleResidentNV");
+	fp_glIsImageHandleResidentNV = (pfn_glIsImageHandleResidentNV)load("glIsImageHandleResidentNV");
+}
+
+GLboolean GLAD_NV_blend_equation_advanced = GL_FALSE;
+static void load_GL_NV_blend_equation_advanced(LOADER load) {
+	if(!GLAD_NV_blend_equation_advanced) return;
+	fp_glBlendParameteriNV = (pfn_glBlendParameteriNV)load("glBlendParameteriNV");
+	fp_glBlendBarrierNV = (pfn_glBlendBarrierNV)load("glBlendBarrierNV");
+}
+
+GLboolean GLAD_NV_blend_equation_advanced_coherent = GL_FALSE;
+GLboolean GLAD_NV_compute_program5 = GL_FALSE;
+GLboolean GLAD_NV_conditional_render = GL_FALSE;
+static void load_GL_NV_conditional_render(LOADER load) {
+	if(!GLAD_NV_conditional_render) return;
+	fp_glBeginConditionalRenderNV = (pfn_glBeginConditionalRenderNV)load("glBeginConditionalRenderNV");
+	fp_glEndConditionalRenderNV = (pfn_glEndConditionalRenderNV)load("glEndConditionalRenderNV");
+}
+
+GLboolean GLAD_NV_copy_buffer = GL_FALSE;
+static void load_GL_NV_copy_buffer(LOADER load) {
+	if(!GLAD_NV_copy_buffer) return;
+	fp_glCopyBufferSubDataNV = (pfn_glCopyBufferSubDataNV)load("glCopyBufferSubDataNV");
+}
+
+GLboolean GLAD_NV_copy_image = GL_FALSE;
+static void load_GL_NV_copy_image(LOADER load) {
+	if(!GLAD_NV_copy_image) return;
+	fp_glCopyImageSubDataNV = (pfn_glCopyImageSubDataNV)load("glCopyImageSubDataNV");
+}
+
+GLboolean GLAD_NV_coverage_sample = GL_FALSE;
+static void load_GL_NV_coverage_sample(LOADER load) {
+	if(!GLAD_NV_coverage_sample) return;
+	fp_glCoverageMaskNV = (pfn_glCoverageMaskNV)load("glCoverageMaskNV");
+	fp_glCoverageOperationNV = (pfn_glCoverageOperationNV)load("glCoverageOperationNV");
+}
+
+GLboolean GLAD_NV_deep_texture3D = GL_FALSE;
+GLboolean GLAD_NV_depth_buffer_float = GL_FALSE;
+static void load_GL_NV_depth_buffer_float(LOADER load) {
+	if(!GLAD_NV_depth_buffer_float) return;
+	fp_glDepthRangedNV = (pfn_glDepthRangedNV)load("glDepthRangedNV");
+	fp_glClearDepthdNV = (pfn_glClearDepthdNV)load("glClearDepthdNV");
+	fp_glDepthBoundsdNV = (pfn_glDepthBoundsdNV)load("glDepthBoundsdNV");
+}
+
+GLboolean GLAD_NV_depth_clamp = GL_FALSE;
+GLboolean GLAD_NV_depth_nonlinear = GL_FALSE;
+GLboolean GLAD_NV_draw_buffers = GL_FALSE;
+static void load_GL_NV_draw_buffers(LOADER load) {
+	if(!GLAD_NV_draw_buffers) return;
+	fp_glDrawBuffersNV = (pfn_glDrawBuffersNV)load("glDrawBuffersNV");
+}
+
+GLboolean GLAD_NV_draw_instanced = GL_FALSE;
+static void load_GL_NV_draw_instanced(LOADER load) {
+	if(!GLAD_NV_draw_instanced) return;
+	fp_glDrawArraysInstancedNV = (pfn_glDrawArraysInstancedNV)load("glDrawArraysInstancedNV");
+	fp_glDrawElementsInstancedNV = (pfn_glDrawElementsInstancedNV)load("glDrawElementsInstancedNV");
+}
+
+GLboolean GLAD_NV_draw_texture = GL_FALSE;
+static void load_GL_NV_draw_texture(LOADER load) {
+	if(!GLAD_NV_draw_texture) return;
+	fp_glDrawTextureNV = (pfn_glDrawTextureNV)load("glDrawTextureNV");
+}
+
+GLboolean GLAD_NV_explicit_attrib_location = GL_FALSE;
+GLboolean GLAD_NV_explicit_multisample = GL_FALSE;
+static void load_GL_NV_explicit_multisample(LOADER load) {
+	if(!GLAD_NV_explicit_multisample) return;
+	fp_glGetMultisamplefvNV = (pfn_glGetMultisamplefvNV)load("glGetMultisamplefvNV");
+	fp_glSampleMaskIndexedNV = (pfn_glSampleMaskIndexedNV)load("glSampleMaskIndexedNV");
+	fp_glTexRenderbufferNV = (pfn_glTexRenderbufferNV)load("glTexRenderbufferNV");
+}
+
+GLboolean GLAD_NV_fbo_color_attachments = GL_FALSE;
+GLboolean GLAD_NV_fence = GL_FALSE;
+static void load_GL_NV_fence(LOADER load) {
+	if(!GLAD_NV_fence) return;
+	fp_glDeleteFencesNV = (pfn_glDeleteFencesNV)load("glDeleteFencesNV");
+	fp_glGenFencesNV = (pfn_glGenFencesNV)load("glGenFencesNV");
+	fp_glIsFenceNV = (pfn_glIsFenceNV)load("glIsFenceNV");
+	fp_glTestFenceNV = (pfn_glTestFenceNV)load("glTestFenceNV");
+	fp_glGetFenceivNV = (pfn_glGetFenceivNV)load("glGetFenceivNV");
+	fp_glFinishFenceNV = (pfn_glFinishFenceNV)load("glFinishFenceNV");
+	fp_glSetFenceNV = (pfn_glSetFenceNV)load("glSetFenceNV");
+}
+
+GLboolean GLAD_NV_float_buffer = GL_FALSE;
+GLboolean GLAD_NV_fragment_program4 = GL_FALSE;
+GLboolean GLAD_NV_framebuffer_blit = GL_FALSE;
+static void load_GL_NV_framebuffer_blit(LOADER load) {
+	if(!GLAD_NV_framebuffer_blit) return;
+	fp_glBlitFramebufferNV = (pfn_glBlitFramebufferNV)load("glBlitFramebufferNV");
+}
+
+GLboolean GLAD_NV_framebuffer_multisample = GL_FALSE;
+static void load_GL_NV_framebuffer_multisample(LOADER load) {
+	if(!GLAD_NV_framebuffer_multisample) return;
+	fp_glRenderbufferStorageMultisampleNV = (pfn_glRenderbufferStorageMultisampleNV)load("glRenderbufferStorageMultisampleNV");
+}
+
+GLboolean GLAD_NV_framebuffer_multisample_coverage = GL_FALSE;
+static void load_GL_NV_framebuffer_multisample_coverage(LOADER load) {
+	if(!GLAD_NV_framebuffer_multisample_coverage) return;
+	fp_glRenderbufferStorageMultisampleCoverageNV = (pfn_glRenderbufferStorageMultisampleCoverageNV)load("glRenderbufferStorageMultisampleCoverageNV");
+}
+
+GLboolean GLAD_NV_generate_mipmap_sRGB = GL_FALSE;
+GLboolean GLAD_NV_geometry_program4 = GL_FALSE;
+static void load_GL_NV_geometry_program4(LOADER load) {
+	if(!GLAD_NV_geometry_program4) return;
+	fp_glProgramVertexLimitNV = (pfn_glProgramVertexLimitNV)load("glProgramVertexLimitNV");
+	fp_glFramebufferTextureEXT = (pfn_glFramebufferTextureEXT)load("glFramebufferTextureEXT");
+	fp_glFramebufferTextureLayerEXT = (pfn_glFramebufferTextureLayerEXT)load("glFramebufferTextureLayerEXT");
+	fp_glFramebufferTextureFaceEXT = (pfn_glFramebufferTextureFaceEXT)load("glFramebufferTextureFaceEXT");
+}
+
+GLboolean GLAD_NV_geometry_shader4 = GL_FALSE;
+GLboolean GLAD_NV_gpu_program4 = GL_FALSE;
+static void load_GL_NV_gpu_program4(LOADER load) {
+	if(!GLAD_NV_gpu_program4) return;
+	fp_glProgramLocalParameterI4iNV = (pfn_glProgramLocalParameterI4iNV)load("glProgramLocalParameterI4iNV");
+	fp_glProgramLocalParameterI4ivNV = (pfn_glProgramLocalParameterI4ivNV)load("glProgramLocalParameterI4ivNV");
+	fp_glProgramLocalParametersI4ivNV = (pfn_glProgramLocalParametersI4ivNV)load("glProgramLocalParametersI4ivNV");
+	fp_glProgramLocalParameterI4uiNV = (pfn_glProgramLocalParameterI4uiNV)load("glProgramLocalParameterI4uiNV");
+	fp_glProgramLocalParameterI4uivNV = (pfn_glProgramLocalParameterI4uivNV)load("glProgramLocalParameterI4uivNV");
+	fp_glProgramLocalParametersI4uivNV = (pfn_glProgramLocalParametersI4uivNV)load("glProgramLocalParametersI4uivNV");
+	fp_glProgramEnvParameterI4iNV = (pfn_glProgramEnvParameterI4iNV)load("glProgramEnvParameterI4iNV");
+	fp_glProgramEnvParameterI4ivNV = (pfn_glProgramEnvParameterI4ivNV)load("glProgramEnvParameterI4ivNV");
+	fp_glProgramEnvParametersI4ivNV = (pfn_glProgramEnvParametersI4ivNV)load("glProgramEnvParametersI4ivNV");
+	fp_glProgramEnvParameterI4uiNV = (pfn_glProgramEnvParameterI4uiNV)load("glProgramEnvParameterI4uiNV");
+	fp_glProgramEnvParameterI4uivNV = (pfn_glProgramEnvParameterI4uivNV)load("glProgramEnvParameterI4uivNV");
+	fp_glProgramEnvParametersI4uivNV = (pfn_glProgramEnvParametersI4uivNV)load("glProgramEnvParametersI4uivNV");
+	fp_glGetProgramLocalParameterIivNV = (pfn_glGetProgramLocalParameterIivNV)load("glGetProgramLocalParameterIivNV");
+	fp_glGetProgramLocalParameterIuivNV = (pfn_glGetProgramLocalParameterIuivNV)load("glGetProgramLocalParameterIuivNV");
+	fp_glGetProgramEnvParameterIivNV = (pfn_glGetProgramEnvParameterIivNV)load("glGetProgramEnvParameterIivNV");
+	fp_glGetProgramEnvParameterIuivNV = (pfn_glGetProgramEnvParameterIuivNV)load("glGetProgramEnvParameterIuivNV");
+}
+
+GLboolean GLAD_NV_gpu_program5 = GL_FALSE;
+static void load_GL_NV_gpu_program5(LOADER load) {
+	if(!GLAD_NV_gpu_program5) return;
+	fp_glProgramSubroutineParametersuivNV = (pfn_glProgramSubroutineParametersuivNV)load("glProgramSubroutineParametersuivNV");
+	fp_glGetProgramSubroutineParameteruivNV = (pfn_glGetProgramSubroutineParameteruivNV)load("glGetProgramSubroutineParameteruivNV");
+}
+
+GLboolean GLAD_NV_gpu_program5_mem_extended = GL_FALSE;
+GLboolean GLAD_NV_gpu_shader5 = GL_FALSE;
+static void load_GL_NV_gpu_shader5(LOADER load) {
+	if(!GLAD_NV_gpu_shader5) return;
+	fp_glUniform1i64NV = (pfn_glUniform1i64NV)load("glUniform1i64NV");
+	fp_glUniform2i64NV = (pfn_glUniform2i64NV)load("glUniform2i64NV");
+	fp_glUniform3i64NV = (pfn_glUniform3i64NV)load("glUniform3i64NV");
+	fp_glUniform4i64NV = (pfn_glUniform4i64NV)load("glUniform4i64NV");
+	fp_glUniform1i64vNV = (pfn_glUniform1i64vNV)load("glUniform1i64vNV");
+	fp_glUniform2i64vNV = (pfn_glUniform2i64vNV)load("glUniform2i64vNV");
+	fp_glUniform3i64vNV = (pfn_glUniform3i64vNV)load("glUniform3i64vNV");
+	fp_glUniform4i64vNV = (pfn_glUniform4i64vNV)load("glUniform4i64vNV");
+	fp_glUniform1ui64NV = (pfn_glUniform1ui64NV)load("glUniform1ui64NV");
+	fp_glUniform2ui64NV = (pfn_glUniform2ui64NV)load("glUniform2ui64NV");
+	fp_glUniform3ui64NV = (pfn_glUniform3ui64NV)load("glUniform3ui64NV");
+	fp_glUniform4ui64NV = (pfn_glUniform4ui64NV)load("glUniform4ui64NV");
+	fp_glUniform1ui64vNV = (pfn_glUniform1ui64vNV)load("glUniform1ui64vNV");
+	fp_glUniform2ui64vNV = (pfn_glUniform2ui64vNV)load("glUniform2ui64vNV");
+	fp_glUniform3ui64vNV = (pfn_glUniform3ui64vNV)load("glUniform3ui64vNV");
+	fp_glUniform4ui64vNV = (pfn_glUniform4ui64vNV)load("glUniform4ui64vNV");
+	fp_glGetUniformi64vNV = (pfn_glGetUniformi64vNV)load("glGetUniformi64vNV");
+	fp_glProgramUniform1i64NV = (pfn_glProgramUniform1i64NV)load("glProgramUniform1i64NV");
+	fp_glProgramUniform2i64NV = (pfn_glProgramUniform2i64NV)load("glProgramUniform2i64NV");
+	fp_glProgramUniform3i64NV = (pfn_glProgramUniform3i64NV)load("glProgramUniform3i64NV");
+	fp_glProgramUniform4i64NV = (pfn_glProgramUniform4i64NV)load("glProgramUniform4i64NV");
+	fp_glProgramUniform1i64vNV = (pfn_glProgramUniform1i64vNV)load("glProgramUniform1i64vNV");
+	fp_glProgramUniform2i64vNV = (pfn_glProgramUniform2i64vNV)load("glProgramUniform2i64vNV");
+	fp_glProgramUniform3i64vNV = (pfn_glProgramUniform3i64vNV)load("glProgramUniform3i64vNV");
+	fp_glProgramUniform4i64vNV = (pfn_glProgramUniform4i64vNV)load("glProgramUniform4i64vNV");
+	fp_glProgramUniform1ui64NV = (pfn_glProgramUniform1ui64NV)load("glProgramUniform1ui64NV");
+	fp_glProgramUniform2ui64NV = (pfn_glProgramUniform2ui64NV)load("glProgramUniform2ui64NV");
+	fp_glProgramUniform3ui64NV = (pfn_glProgramUniform3ui64NV)load("glProgramUniform3ui64NV");
+	fp_glProgramUniform4ui64NV = (pfn_glProgramUniform4ui64NV)load("glProgramUniform4ui64NV");
+	fp_glProgramUniform1ui64vNV = (pfn_glProgramUniform1ui64vNV)load("glProgramUniform1ui64vNV");
+	fp_glProgramUniform2ui64vNV = (pfn_glProgramUniform2ui64vNV)load("glProgramUniform2ui64vNV");
+	fp_glProgramUniform3ui64vNV = (pfn_glProgramUniform3ui64vNV)load("glProgramUniform3ui64vNV");
+	fp_glProgramUniform4ui64vNV = (pfn_glProgramUniform4ui64vNV)load("glProgramUniform4ui64vNV");
+}
+
+GLboolean GLAD_NV_half_float = GL_FALSE;
+static void load_GL_NV_half_float(LOADER load) {
+	if(!GLAD_NV_half_float) return;
+	fp_glVertex2hNV = (pfn_glVertex2hNV)load("glVertex2hNV");
+	fp_glVertex2hvNV = (pfn_glVertex2hvNV)load("glVertex2hvNV");
+	fp_glVertex3hNV = (pfn_glVertex3hNV)load("glVertex3hNV");
+	fp_glVertex3hvNV = (pfn_glVertex3hvNV)load("glVertex3hvNV");
+	fp_glVertex4hNV = (pfn_glVertex4hNV)load("glVertex4hNV");
+	fp_glVertex4hvNV = (pfn_glVertex4hvNV)load("glVertex4hvNV");
+	fp_glNormal3hNV = (pfn_glNormal3hNV)load("glNormal3hNV");
+	fp_glNormal3hvNV = (pfn_glNormal3hvNV)load("glNormal3hvNV");
+	fp_glColor3hNV = (pfn_glColor3hNV)load("glColor3hNV");
+	fp_glColor3hvNV = (pfn_glColor3hvNV)load("glColor3hvNV");
+	fp_glColor4hNV = (pfn_glColor4hNV)load("glColor4hNV");
+	fp_glColor4hvNV = (pfn_glColor4hvNV)load("glColor4hvNV");
+	fp_glTexCoord1hNV = (pfn_glTexCoord1hNV)load("glTexCoord1hNV");
+	fp_glTexCoord1hvNV = (pfn_glTexCoord1hvNV)load("glTexCoord1hvNV");
+	fp_glTexCoord2hNV = (pfn_glTexCoord2hNV)load("glTexCoord2hNV");
+	fp_glTexCoord2hvNV = (pfn_glTexCoord2hvNV)load("glTexCoord2hvNV");
+	fp_glTexCoord3hNV = (pfn_glTexCoord3hNV)load("glTexCoord3hNV");
+	fp_glTexCoord3hvNV = (pfn_glTexCoord3hvNV)load("glTexCoord3hvNV");
+	fp_glTexCoord4hNV = (pfn_glTexCoord4hNV)load("glTexCoord4hNV");
+	fp_glTexCoord4hvNV = (pfn_glTexCoord4hvNV)load("glTexCoord4hvNV");
+	fp_glMultiTexCoord1hNV = (pfn_glMultiTexCoord1hNV)load("glMultiTexCoord1hNV");
+	fp_glMultiTexCoord1hvNV = (pfn_glMultiTexCoord1hvNV)load("glMultiTexCoord1hvNV");
+	fp_glMultiTexCoord2hNV = (pfn_glMultiTexCoord2hNV)load("glMultiTexCoord2hNV");
+	fp_glMultiTexCoord2hvNV = (pfn_glMultiTexCoord2hvNV)load("glMultiTexCoord2hvNV");
+	fp_glMultiTexCoord3hNV = (pfn_glMultiTexCoord3hNV)load("glMultiTexCoord3hNV");
+	fp_glMultiTexCoord3hvNV = (pfn_glMultiTexCoord3hvNV)load("glMultiTexCoord3hvNV");
+	fp_glMultiTexCoord4hNV = (pfn_glMultiTexCoord4hNV)load("glMultiTexCoord4hNV");
+	fp_glMultiTexCoord4hvNV = (pfn_glMultiTexCoord4hvNV)load("glMultiTexCoord4hvNV");
+	fp_glFogCoordhNV = (pfn_glFogCoordhNV)load("glFogCoordhNV");
+	fp_glFogCoordhvNV = (pfn_glFogCoordhvNV)load("glFogCoordhvNV");
+	fp_glSecondaryColor3hNV = (pfn_glSecondaryColor3hNV)load("glSecondaryColor3hNV");
+	fp_glSecondaryColor3hvNV = (pfn_glSecondaryColor3hvNV)load("glSecondaryColor3hvNV");
+	fp_glVertexWeighthNV = (pfn_glVertexWeighthNV)load("glVertexWeighthNV");
+	fp_glVertexWeighthvNV = (pfn_glVertexWeighthvNV)load("glVertexWeighthvNV");
+	fp_glVertexAttrib1hNV = (pfn_glVertexAttrib1hNV)load("glVertexAttrib1hNV");
+	fp_glVertexAttrib1hvNV = (pfn_glVertexAttrib1hvNV)load("glVertexAttrib1hvNV");
+	fp_glVertexAttrib2hNV = (pfn_glVertexAttrib2hNV)load("glVertexAttrib2hNV");
+	fp_glVertexAttrib2hvNV = (pfn_glVertexAttrib2hvNV)load("glVertexAttrib2hvNV");
+	fp_glVertexAttrib3hNV = (pfn_glVertexAttrib3hNV)load("glVertexAttrib3hNV");
+	fp_glVertexAttrib3hvNV = (pfn_glVertexAttrib3hvNV)load("glVertexAttrib3hvNV");
+	fp_glVertexAttrib4hNV = (pfn_glVertexAttrib4hNV)load("glVertexAttrib4hNV");
+	fp_glVertexAttrib4hvNV = (pfn_glVertexAttrib4hvNV)load("glVertexAttrib4hvNV");
+	fp_glVertexAttribs1hvNV = (pfn_glVertexAttribs1hvNV)load("glVertexAttribs1hvNV");
+	fp_glVertexAttribs2hvNV = (pfn_glVertexAttribs2hvNV)load("glVertexAttribs2hvNV");
+	fp_glVertexAttribs3hvNV = (pfn_glVertexAttribs3hvNV)load("glVertexAttribs3hvNV");
+	fp_glVertexAttribs4hvNV = (pfn_glVertexAttribs4hvNV)load("glVertexAttribs4hvNV");
+}
+
+GLboolean GLAD_NV_instanced_arrays = GL_FALSE;
+static void load_GL_NV_instanced_arrays(LOADER load) {
+	if(!GLAD_NV_instanced_arrays) return;
+	fp_glVertexAttribDivisorNV = (pfn_glVertexAttribDivisorNV)load("glVertexAttribDivisorNV");
+}
+
+GLboolean GLAD_NV_multisample_coverage = GL_FALSE;
+GLboolean GLAD_NV_non_square_matrices = GL_FALSE;
+static void load_GL_NV_non_square_matrices(LOADER load) {
+	if(!GLAD_NV_non_square_matrices) return;
+	fp_glUniformMatrix2x3fvNV = (pfn_glUniformMatrix2x3fvNV)load("glUniformMatrix2x3fvNV");
+	fp_glUniformMatrix3x2fvNV = (pfn_glUniformMatrix3x2fvNV)load("glUniformMatrix3x2fvNV");
+	fp_glUniformMatrix2x4fvNV = (pfn_glUniformMatrix2x4fvNV)load("glUniformMatrix2x4fvNV");
+	fp_glUniformMatrix4x2fvNV = (pfn_glUniformMatrix4x2fvNV)load("glUniformMatrix4x2fvNV");
+	fp_glUniformMatrix3x4fvNV = (pfn_glUniformMatrix3x4fvNV)load("glUniformMatrix3x4fvNV");
+	fp_glUniformMatrix4x3fvNV = (pfn_glUniformMatrix4x3fvNV)load("glUniformMatrix4x3fvNV");
+}
+
+GLboolean GLAD_NV_occlusion_query = GL_FALSE;
+static void load_GL_NV_occlusion_query(LOADER load) {
+	if(!GLAD_NV_occlusion_query) return;
+	fp_glGenOcclusionQueriesNV = (pfn_glGenOcclusionQueriesNV)load("glGenOcclusionQueriesNV");
+	fp_glDeleteOcclusionQueriesNV = (pfn_glDeleteOcclusionQueriesNV)load("glDeleteOcclusionQueriesNV");
+	fp_glIsOcclusionQueryNV = (pfn_glIsOcclusionQueryNV)load("glIsOcclusionQueryNV");
+	fp_glBeginOcclusionQueryNV = (pfn_glBeginOcclusionQueryNV)load("glBeginOcclusionQueryNV");
+	fp_glEndOcclusionQueryNV = (pfn_glEndOcclusionQueryNV)load("glEndOcclusionQueryNV");
+	fp_glGetOcclusionQueryivNV = (pfn_glGetOcclusionQueryivNV)load("glGetOcclusionQueryivNV");
+	fp_glGetOcclusionQueryuivNV = (pfn_glGetOcclusionQueryuivNV)load("glGetOcclusionQueryuivNV");
+}
+
+GLboolean GLAD_NV_parameter_buffer_object = GL_FALSE;
+static void load_GL_NV_parameter_buffer_object(LOADER load) {
+	if(!GLAD_NV_parameter_buffer_object) return;
+	fp_glProgramBufferParametersfvNV = (pfn_glProgramBufferParametersfvNV)load("glProgramBufferParametersfvNV");
+	fp_glProgramBufferParametersIivNV = (pfn_glProgramBufferParametersIivNV)load("glProgramBufferParametersIivNV");
+	fp_glProgramBufferParametersIuivNV = (pfn_glProgramBufferParametersIuivNV)load("glProgramBufferParametersIuivNV");
+}
+
+GLboolean GLAD_NV_parameter_buffer_object2 = GL_FALSE;
+GLboolean GLAD_NV_path_rendering = GL_FALSE;
+static void load_GL_NV_path_rendering(LOADER load) {
+	if(!GLAD_NV_path_rendering) return;
+	fp_glGenPathsNV = (pfn_glGenPathsNV)load("glGenPathsNV");
+	fp_glDeletePathsNV = (pfn_glDeletePathsNV)load("glDeletePathsNV");
+	fp_glIsPathNV = (pfn_glIsPathNV)load("glIsPathNV");
+	fp_glPathCommandsNV = (pfn_glPathCommandsNV)load("glPathCommandsNV");
+	fp_glPathCoordsNV = (pfn_glPathCoordsNV)load("glPathCoordsNV");
+	fp_glPathSubCommandsNV = (pfn_glPathSubCommandsNV)load("glPathSubCommandsNV");
+	fp_glPathSubCoordsNV = (pfn_glPathSubCoordsNV)load("glPathSubCoordsNV");
+	fp_glPathStringNV = (pfn_glPathStringNV)load("glPathStringNV");
+	fp_glPathGlyphsNV = (pfn_glPathGlyphsNV)load("glPathGlyphsNV");
+	fp_glPathGlyphRangeNV = (pfn_glPathGlyphRangeNV)load("glPathGlyphRangeNV");
+	fp_glWeightPathsNV = (pfn_glWeightPathsNV)load("glWeightPathsNV");
+	fp_glCopyPathNV = (pfn_glCopyPathNV)load("glCopyPathNV");
+	fp_glInterpolatePathsNV = (pfn_glInterpolatePathsNV)load("glInterpolatePathsNV");
+	fp_glTransformPathNV = (pfn_glTransformPathNV)load("glTransformPathNV");
+	fp_glPathParameterivNV = (pfn_glPathParameterivNV)load("glPathParameterivNV");
+	fp_glPathParameteriNV = (pfn_glPathParameteriNV)load("glPathParameteriNV");
+	fp_glPathParameterfvNV = (pfn_glPathParameterfvNV)load("glPathParameterfvNV");
+	fp_glPathParameterfNV = (pfn_glPathParameterfNV)load("glPathParameterfNV");
+	fp_glPathDashArrayNV = (pfn_glPathDashArrayNV)load("glPathDashArrayNV");
+	fp_glPathStencilFuncNV = (pfn_glPathStencilFuncNV)load("glPathStencilFuncNV");
+	fp_glPathStencilDepthOffsetNV = (pfn_glPathStencilDepthOffsetNV)load("glPathStencilDepthOffsetNV");
+	fp_glStencilFillPathNV = (pfn_glStencilFillPathNV)load("glStencilFillPathNV");
+	fp_glStencilStrokePathNV = (pfn_glStencilStrokePathNV)load("glStencilStrokePathNV");
+	fp_glStencilFillPathInstancedNV = (pfn_glStencilFillPathInstancedNV)load("glStencilFillPathInstancedNV");
+	fp_glStencilStrokePathInstancedNV = (pfn_glStencilStrokePathInstancedNV)load("glStencilStrokePathInstancedNV");
+	fp_glPathCoverDepthFuncNV = (pfn_glPathCoverDepthFuncNV)load("glPathCoverDepthFuncNV");
+	fp_glPathColorGenNV = (pfn_glPathColorGenNV)load("glPathColorGenNV");
+	fp_glPathTexGenNV = (pfn_glPathTexGenNV)load("glPathTexGenNV");
+	fp_glPathFogGenNV = (pfn_glPathFogGenNV)load("glPathFogGenNV");
+	fp_glCoverFillPathNV = (pfn_glCoverFillPathNV)load("glCoverFillPathNV");
+	fp_glCoverStrokePathNV = (pfn_glCoverStrokePathNV)load("glCoverStrokePathNV");
+	fp_glCoverFillPathInstancedNV = (pfn_glCoverFillPathInstancedNV)load("glCoverFillPathInstancedNV");
+	fp_glCoverStrokePathInstancedNV = (pfn_glCoverStrokePathInstancedNV)load("glCoverStrokePathInstancedNV");
+	fp_glGetPathParameterivNV = (pfn_glGetPathParameterivNV)load("glGetPathParameterivNV");
+	fp_glGetPathParameterfvNV = (pfn_glGetPathParameterfvNV)load("glGetPathParameterfvNV");
+	fp_glGetPathCommandsNV = (pfn_glGetPathCommandsNV)load("glGetPathCommandsNV");
+	fp_glGetPathCoordsNV = (pfn_glGetPathCoordsNV)load("glGetPathCoordsNV");
+	fp_glGetPathDashArrayNV = (pfn_glGetPathDashArrayNV)load("glGetPathDashArrayNV");
+	fp_glGetPathMetricsNV = (pfn_glGetPathMetricsNV)load("glGetPathMetricsNV");
+	fp_glGetPathMetricRangeNV = (pfn_glGetPathMetricRangeNV)load("glGetPathMetricRangeNV");
+	fp_glGetPathSpacingNV = (pfn_glGetPathSpacingNV)load("glGetPathSpacingNV");
+	fp_glGetPathColorGenivNV = (pfn_glGetPathColorGenivNV)load("glGetPathColorGenivNV");
+	fp_glGetPathColorGenfvNV = (pfn_glGetPathColorGenfvNV)load("glGetPathColorGenfvNV");
+	fp_glGetPathTexGenivNV = (pfn_glGetPathTexGenivNV)load("glGetPathTexGenivNV");
+	fp_glGetPathTexGenfvNV = (pfn_glGetPathTexGenfvNV)load("glGetPathTexGenfvNV");
+	fp_glIsPointInFillPathNV = (pfn_glIsPointInFillPathNV)load("glIsPointInFillPathNV");
+	fp_glIsPointInStrokePathNV = (pfn_glIsPointInStrokePathNV)load("glIsPointInStrokePathNV");
+	fp_glGetPathLengthNV = (pfn_glGetPathLengthNV)load("glGetPathLengthNV");
+	fp_glPointAlongPathNV = (pfn_glPointAlongPathNV)load("glPointAlongPathNV");
+	fp_glMatrixLoad3x2fNV = (pfn_glMatrixLoad3x2fNV)load("glMatrixLoad3x2fNV");
+	fp_glMatrixLoad3x3fNV = (pfn_glMatrixLoad3x3fNV)load("glMatrixLoad3x3fNV");
+	fp_glMatrixLoadTranspose3x3fNV = (pfn_glMatrixLoadTranspose3x3fNV)load("glMatrixLoadTranspose3x3fNV");
+	fp_glMatrixMult3x2fNV = (pfn_glMatrixMult3x2fNV)load("glMatrixMult3x2fNV");
+	fp_glMatrixMult3x3fNV = (pfn_glMatrixMult3x3fNV)load("glMatrixMult3x3fNV");
+	fp_glMatrixMultTranspose3x3fNV = (pfn_glMatrixMultTranspose3x3fNV)load("glMatrixMultTranspose3x3fNV");
+	fp_glStencilThenCoverFillPathNV = (pfn_glStencilThenCoverFillPathNV)load("glStencilThenCoverFillPathNV");
+	fp_glStencilThenCoverStrokePathNV = (pfn_glStencilThenCoverStrokePathNV)load("glStencilThenCoverStrokePathNV");
+	fp_glStencilThenCoverFillPathInstancedNV = (pfn_glStencilThenCoverFillPathInstancedNV)load("glStencilThenCoverFillPathInstancedNV");
+	fp_glStencilThenCoverStrokePathInstancedNV = (pfn_glStencilThenCoverStrokePathInstancedNV)load("glStencilThenCoverStrokePathInstancedNV");
+	fp_glPathGlyphIndexRangeNV = (pfn_glPathGlyphIndexRangeNV)load("glPathGlyphIndexRangeNV");
+	fp_glPathGlyphIndexArrayNV = (pfn_glPathGlyphIndexArrayNV)load("glPathGlyphIndexArrayNV");
+	fp_glPathMemoryGlyphIndexArrayNV = (pfn_glPathMemoryGlyphIndexArrayNV)load("glPathMemoryGlyphIndexArrayNV");
+	fp_glProgramPathFragmentInputGenNV = (pfn_glProgramPathFragmentInputGenNV)load("glProgramPathFragmentInputGenNV");
+	fp_glGetProgramResourcefvNV = (pfn_glGetProgramResourcefvNV)load("glGetProgramResourcefvNV");
+}
+
+GLboolean GLAD_NV_present_video = GL_FALSE;
+static void load_GL_NV_present_video(LOADER load) {
+	if(!GLAD_NV_present_video) return;
+	fp_glPresentFrameKeyedNV = (pfn_glPresentFrameKeyedNV)load("glPresentFrameKeyedNV");
+	fp_glPresentFrameDualFillNV = (pfn_glPresentFrameDualFillNV)load("glPresentFrameDualFillNV");
+	fp_glGetVideoivNV = (pfn_glGetVideoivNV)load("glGetVideoivNV");
+	fp_glGetVideouivNV = (pfn_glGetVideouivNV)load("glGetVideouivNV");
+	fp_glGetVideoi64vNV = (pfn_glGetVideoi64vNV)load("glGetVideoi64vNV");
+	fp_glGetVideoui64vNV = (pfn_glGetVideoui64vNV)load("glGetVideoui64vNV");
+}
+
+GLboolean GLAD_NV_primitive_restart = GL_FALSE;
+static void load_GL_NV_primitive_restart(LOADER load) {
+	if(!GLAD_NV_primitive_restart) return;
+	fp_glPrimitiveRestartNV = (pfn_glPrimitiveRestartNV)load("glPrimitiveRestartNV");
+	fp_glPrimitiveRestartIndexNV = (pfn_glPrimitiveRestartIndexNV)load("glPrimitiveRestartIndexNV");
+}
+
+GLboolean GLAD_NV_read_buffer = GL_FALSE;
+static void load_GL_NV_read_buffer(LOADER load) {
+	if(!GLAD_NV_read_buffer) return;
+	fp_glReadBufferNV = (pfn_glReadBufferNV)load("glReadBufferNV");
+}
+
+GLboolean GLAD_NV_read_buffer_front = GL_FALSE;
+GLboolean GLAD_NV_read_depth = GL_FALSE;
+GLboolean GLAD_NV_read_depth_stencil = GL_FALSE;
+GLboolean GLAD_NV_read_stencil = GL_FALSE;
+GLboolean GLAD_NV_shader_atomic_counters = GL_FALSE;
+GLboolean GLAD_NV_shader_atomic_float = GL_FALSE;
+GLboolean GLAD_NV_shader_atomic_int64 = GL_FALSE;
+GLboolean GLAD_NV_shader_buffer_load = GL_FALSE;
+static void load_GL_NV_shader_buffer_load(LOADER load) {
+	if(!GLAD_NV_shader_buffer_load) return;
+	fp_glMakeBufferResidentNV = (pfn_glMakeBufferResidentNV)load("glMakeBufferResidentNV");
+	fp_glMakeBufferNonResidentNV = (pfn_glMakeBufferNonResidentNV)load("glMakeBufferNonResidentNV");
+	fp_glIsBufferResidentNV = (pfn_glIsBufferResidentNV)load("glIsBufferResidentNV");
+	fp_glMakeNamedBufferResidentNV = (pfn_glMakeNamedBufferResidentNV)load("glMakeNamedBufferResidentNV");
+	fp_glMakeNamedBufferNonResidentNV = (pfn_glMakeNamedBufferNonResidentNV)load("glMakeNamedBufferNonResidentNV");
+	fp_glIsNamedBufferResidentNV = (pfn_glIsNamedBufferResidentNV)load("glIsNamedBufferResidentNV");
+	fp_glGetBufferParameterui64vNV = (pfn_glGetBufferParameterui64vNV)load("glGetBufferParameterui64vNV");
+	fp_glGetNamedBufferParameterui64vNV = (pfn_glGetNamedBufferParameterui64vNV)load("glGetNamedBufferParameterui64vNV");
+	fp_glGetIntegerui64vNV = (pfn_glGetIntegerui64vNV)load("glGetIntegerui64vNV");
+	fp_glUniformui64NV = (pfn_glUniformui64NV)load("glUniformui64NV");
+	fp_glUniformui64vNV = (pfn_glUniformui64vNV)load("glUniformui64vNV");
+	fp_glGetUniformui64vNV = (pfn_glGetUniformui64vNV)load("glGetUniformui64vNV");
+	fp_glProgramUniformui64NV = (pfn_glProgramUniformui64NV)load("glProgramUniformui64NV");
+	fp_glProgramUniformui64vNV = (pfn_glProgramUniformui64vNV)load("glProgramUniformui64vNV");
+}
+
+GLboolean GLAD_NV_shader_buffer_store = GL_FALSE;
+GLboolean GLAD_NV_shader_storage_buffer_object = GL_FALSE;
+GLboolean GLAD_NV_shader_thread_group = GL_FALSE;
+GLboolean GLAD_NV_shader_thread_shuffle = GL_FALSE;
+GLboolean GLAD_NV_shadow_samplers_array = GL_FALSE;
+GLboolean GLAD_NV_shadow_samplers_cube = GL_FALSE;
+GLboolean GLAD_NV_sRGB_formats = GL_FALSE;
+GLboolean GLAD_NV_tessellation_program5 = GL_FALSE;
+GLboolean GLAD_NV_texture_barrier = GL_FALSE;
+static void load_GL_NV_texture_barrier(LOADER load) {
+	if(!GLAD_NV_texture_barrier) return;
+	fp_glTextureBarrierNV = (pfn_glTextureBarrierNV)load("glTextureBarrierNV");
+}
+
+GLboolean GLAD_NV_texture_border_clamp = GL_FALSE;
+GLboolean GLAD_NV_texture_compression_s3tc_update = GL_FALSE;
+GLboolean GLAD_NV_texture_multisample = GL_FALSE;
+static void load_GL_NV_texture_multisample(LOADER load) {
+	if(!GLAD_NV_texture_multisample) return;
+	fp_glTexImage2DMultisampleCoverageNV = (pfn_glTexImage2DMultisampleCoverageNV)load("glTexImage2DMultisampleCoverageNV");
+	fp_glTexImage3DMultisampleCoverageNV = (pfn_glTexImage3DMultisampleCoverageNV)load("glTexImage3DMultisampleCoverageNV");
+	fp_glTextureImage2DMultisampleNV = (pfn_glTextureImage2DMultisampleNV)load("glTextureImage2DMultisampleNV");
+	fp_glTextureImage3DMultisampleNV = (pfn_glTextureImage3DMultisampleNV)load("glTextureImage3DMultisampleNV");
+	fp_glTextureImage2DMultisampleCoverageNV = (pfn_glTextureImage2DMultisampleCoverageNV)load("glTextureImage2DMultisampleCoverageNV");
+	fp_glTextureImage3DMultisampleCoverageNV = (pfn_glTextureImage3DMultisampleCoverageNV)load("glTextureImage3DMultisampleCoverageNV");
+}
+
+GLboolean GLAD_NV_texture_npot_2D_mipmap = GL_FALSE;
+GLboolean GLAD_NV_transform_feedback = GL_FALSE;
+static void load_GL_NV_transform_feedback(LOADER load) {
+	if(!GLAD_NV_transform_feedback) return;
+	fp_glBeginTransformFeedbackNV = (pfn_glBeginTransformFeedbackNV)load("glBeginTransformFeedbackNV");
+	fp_glEndTransformFeedbackNV = (pfn_glEndTransformFeedbackNV)load("glEndTransformFeedbackNV");
+	fp_glTransformFeedbackAttribsNV = (pfn_glTransformFeedbackAttribsNV)load("glTransformFeedbackAttribsNV");
+	fp_glBindBufferRangeNV = (pfn_glBindBufferRangeNV)load("glBindBufferRangeNV");
+	fp_glBindBufferOffsetNV = (pfn_glBindBufferOffsetNV)load("glBindBufferOffsetNV");
+	fp_glBindBufferBaseNV = (pfn_glBindBufferBaseNV)load("glBindBufferBaseNV");
+	fp_glTransformFeedbackVaryingsNV = (pfn_glTransformFeedbackVaryingsNV)load("glTransformFeedbackVaryingsNV");
+	fp_glActiveVaryingNV = (pfn_glActiveVaryingNV)load("glActiveVaryingNV");
+	fp_glGetVaryingLocationNV = (pfn_glGetVaryingLocationNV)load("glGetVaryingLocationNV");
+	fp_glGetActiveVaryingNV = (pfn_glGetActiveVaryingNV)load("glGetActiveVaryingNV");
+	fp_glGetTransformFeedbackVaryingNV = (pfn_glGetTransformFeedbackVaryingNV)load("glGetTransformFeedbackVaryingNV");
+	fp_glTransformFeedbackStreamAttribsNV = (pfn_glTransformFeedbackStreamAttribsNV)load("glTransformFeedbackStreamAttribsNV");
+}
+
+GLboolean GLAD_NV_transform_feedback2 = GL_FALSE;
+static void load_GL_NV_transform_feedback2(LOADER load) {
+	if(!GLAD_NV_transform_feedback2) return;
+	fp_glBindTransformFeedbackNV = (pfn_glBindTransformFeedbackNV)load("glBindTransformFeedbackNV");
+	fp_glDeleteTransformFeedbacksNV = (pfn_glDeleteTransformFeedbacksNV)load("glDeleteTransformFeedbacksNV");
+	fp_glGenTransformFeedbacksNV = (pfn_glGenTransformFeedbacksNV)load("glGenTransformFeedbacksNV");
+	fp_glIsTransformFeedbackNV = (pfn_glIsTransformFeedbackNV)load("glIsTransformFeedbackNV");
+	fp_glPauseTransformFeedbackNV = (pfn_glPauseTransformFeedbackNV)load("glPauseTransformFeedbackNV");
+	fp_glResumeTransformFeedbackNV = (pfn_glResumeTransformFeedbackNV)load("glResumeTransformFeedbackNV");
+	fp_glDrawTransformFeedbackNV = (pfn_glDrawTransformFeedbackNV)load("glDrawTransformFeedbackNV");
+}
+
+GLboolean GLAD_NV_vdpau_interop = GL_FALSE;
+static void load_GL_NV_vdpau_interop(LOADER load) {
+	if(!GLAD_NV_vdpau_interop) return;
+	fp_glVDPAUInitNV = (pfn_glVDPAUInitNV)load("glVDPAUInitNV");
+	fp_glVDPAUFiniNV = (pfn_glVDPAUFiniNV)load("glVDPAUFiniNV");
+	fp_glVDPAURegisterVideoSurfaceNV = (pfn_glVDPAURegisterVideoSurfaceNV)load("glVDPAURegisterVideoSurfaceNV");
+	fp_glVDPAURegisterOutputSurfaceNV = (pfn_glVDPAURegisterOutputSurfaceNV)load("glVDPAURegisterOutputSurfaceNV");
+	fp_glVDPAUIsSurfaceNV = (pfn_glVDPAUIsSurfaceNV)load("glVDPAUIsSurfaceNV");
+	fp_glVDPAUUnregisterSurfaceNV = (pfn_glVDPAUUnregisterSurfaceNV)load("glVDPAUUnregisterSurfaceNV");
+	fp_glVDPAUGetSurfaceivNV = (pfn_glVDPAUGetSurfaceivNV)load("glVDPAUGetSurfaceivNV");
+	fp_glVDPAUSurfaceAccessNV = (pfn_glVDPAUSurfaceAccessNV)load("glVDPAUSurfaceAccessNV");
+	fp_glVDPAUMapSurfacesNV = (pfn_glVDPAUMapSurfacesNV)load("glVDPAUMapSurfacesNV");
+	fp_glVDPAUUnmapSurfacesNV = (pfn_glVDPAUUnmapSurfacesNV)load("glVDPAUUnmapSurfacesNV");
+}
+
+GLboolean GLAD_NV_vertex_attrib_integer_64bit = GL_FALSE;
+static void load_GL_NV_vertex_attrib_integer_64bit(LOADER load) {
+	if(!GLAD_NV_vertex_attrib_integer_64bit) return;
+	fp_glVertexAttribL1i64NV = (pfn_glVertexAttribL1i64NV)load("glVertexAttribL1i64NV");
+	fp_glVertexAttribL2i64NV = (pfn_glVertexAttribL2i64NV)load("glVertexAttribL2i64NV");
+	fp_glVertexAttribL3i64NV = (pfn_glVertexAttribL3i64NV)load("glVertexAttribL3i64NV");
+	fp_glVertexAttribL4i64NV = (pfn_glVertexAttribL4i64NV)load("glVertexAttribL4i64NV");
+	fp_glVertexAttribL1i64vNV = (pfn_glVertexAttribL1i64vNV)load("glVertexAttribL1i64vNV");
+	fp_glVertexAttribL2i64vNV = (pfn_glVertexAttribL2i64vNV)load("glVertexAttribL2i64vNV");
+	fp_glVertexAttribL3i64vNV = (pfn_glVertexAttribL3i64vNV)load("glVertexAttribL3i64vNV");
+	fp_glVertexAttribL4i64vNV = (pfn_glVertexAttribL4i64vNV)load("glVertexAttribL4i64vNV");
+	fp_glVertexAttribL1ui64NV = (pfn_glVertexAttribL1ui64NV)load("glVertexAttribL1ui64NV");
+	fp_glVertexAttribL2ui64NV = (pfn_glVertexAttribL2ui64NV)load("glVertexAttribL2ui64NV");
+	fp_glVertexAttribL3ui64NV = (pfn_glVertexAttribL3ui64NV)load("glVertexAttribL3ui64NV");
+	fp_glVertexAttribL4ui64NV = (pfn_glVertexAttribL4ui64NV)load("glVertexAttribL4ui64NV");
+	fp_glVertexAttribL1ui64vNV = (pfn_glVertexAttribL1ui64vNV)load("glVertexAttribL1ui64vNV");
+	fp_glVertexAttribL2ui64vNV = (pfn_glVertexAttribL2ui64vNV)load("glVertexAttribL2ui64vNV");
+	fp_glVertexAttribL3ui64vNV = (pfn_glVertexAttribL3ui64vNV)load("glVertexAttribL3ui64vNV");
+	fp_glVertexAttribL4ui64vNV = (pfn_glVertexAttribL4ui64vNV)load("glVertexAttribL4ui64vNV");
+	fp_glGetVertexAttribLi64vNV = (pfn_glGetVertexAttribLi64vNV)load("glGetVertexAttribLi64vNV");
+	fp_glGetVertexAttribLui64vNV = (pfn_glGetVertexAttribLui64vNV)load("glGetVertexAttribLui64vNV");
+	fp_glVertexAttribLFormatNV = (pfn_glVertexAttribLFormatNV)load("glVertexAttribLFormatNV");
+}
+
+GLboolean GLAD_NV_vertex_buffer_unified_memory = GL_FALSE;
+static void load_GL_NV_vertex_buffer_unified_memory(LOADER load) {
+	if(!GLAD_NV_vertex_buffer_unified_memory) return;
+	fp_glBufferAddressRangeNV = (pfn_glBufferAddressRangeNV)load("glBufferAddressRangeNV");
+	fp_glVertexFormatNV = (pfn_glVertexFormatNV)load("glVertexFormatNV");
+	fp_glNormalFormatNV = (pfn_glNormalFormatNV)load("glNormalFormatNV");
+	fp_glColorFormatNV = (pfn_glColorFormatNV)load("glColorFormatNV");
+	fp_glIndexFormatNV = (pfn_glIndexFormatNV)load("glIndexFormatNV");
+	fp_glTexCoordFormatNV = (pfn_glTexCoordFormatNV)load("glTexCoordFormatNV");
+	fp_glEdgeFlagFormatNV = (pfn_glEdgeFlagFormatNV)load("glEdgeFlagFormatNV");
+	fp_glSecondaryColorFormatNV = (pfn_glSecondaryColorFormatNV)load("glSecondaryColorFormatNV");
+	fp_glFogCoordFormatNV = (pfn_glFogCoordFormatNV)load("glFogCoordFormatNV");
+	fp_glVertexAttribFormatNV = (pfn_glVertexAttribFormatNV)load("glVertexAttribFormatNV");
+	fp_glVertexAttribIFormatNV = (pfn_glVertexAttribIFormatNV)load("glVertexAttribIFormatNV");
+	fp_glGetIntegerui64i_vNV = (pfn_glGetIntegerui64i_vNV)load("glGetIntegerui64i_vNV");
+}
+
+GLboolean GLAD_NV_vertex_program4 = GL_FALSE;
+static void load_GL_NV_vertex_program4(LOADER load) {
+	if(!GLAD_NV_vertex_program4) return;
+	fp_glVertexAttribI1iEXT = (pfn_glVertexAttribI1iEXT)load("glVertexAttribI1iEXT");
+	fp_glVertexAttribI2iEXT = (pfn_glVertexAttribI2iEXT)load("glVertexAttribI2iEXT");
+	fp_glVertexAttribI3iEXT = (pfn_glVertexAttribI3iEXT)load("glVertexAttribI3iEXT");
+	fp_glVertexAttribI4iEXT = (pfn_glVertexAttribI4iEXT)load("glVertexAttribI4iEXT");
+	fp_glVertexAttribI1uiEXT = (pfn_glVertexAttribI1uiEXT)load("glVertexAttribI1uiEXT");
+	fp_glVertexAttribI2uiEXT = (pfn_glVertexAttribI2uiEXT)load("glVertexAttribI2uiEXT");
+	fp_glVertexAttribI3uiEXT = (pfn_glVertexAttribI3uiEXT)load("glVertexAttribI3uiEXT");
+	fp_glVertexAttribI4uiEXT = (pfn_glVertexAttribI4uiEXT)load("glVertexAttribI4uiEXT");
+	fp_glVertexAttribI1ivEXT = (pfn_glVertexAttribI1ivEXT)load("glVertexAttribI1ivEXT");
+	fp_glVertexAttribI2ivEXT = (pfn_glVertexAttribI2ivEXT)load("glVertexAttribI2ivEXT");
+	fp_glVertexAttribI3ivEXT = (pfn_glVertexAttribI3ivEXT)load("glVertexAttribI3ivEXT");
+	fp_glVertexAttribI4ivEXT = (pfn_glVertexAttribI4ivEXT)load("glVertexAttribI4ivEXT");
+	fp_glVertexAttribI1uivEXT = (pfn_glVertexAttribI1uivEXT)load("glVertexAttribI1uivEXT");
+	fp_glVertexAttribI2uivEXT = (pfn_glVertexAttribI2uivEXT)load("glVertexAttribI2uivEXT");
+	fp_glVertexAttribI3uivEXT = (pfn_glVertexAttribI3uivEXT)load("glVertexAttribI3uivEXT");
+	fp_glVertexAttribI4uivEXT = (pfn_glVertexAttribI4uivEXT)load("glVertexAttribI4uivEXT");
+	fp_glVertexAttribI4bvEXT = (pfn_glVertexAttribI4bvEXT)load("glVertexAttribI4bvEXT");
+	fp_glVertexAttribI4svEXT = (pfn_glVertexAttribI4svEXT)load("glVertexAttribI4svEXT");
+	fp_glVertexAttribI4ubvEXT = (pfn_glVertexAttribI4ubvEXT)load("glVertexAttribI4ubvEXT");
+	fp_glVertexAttribI4usvEXT = (pfn_glVertexAttribI4usvEXT)load("glVertexAttribI4usvEXT");
+	fp_glVertexAttribIPointerEXT = (pfn_glVertexAttribIPointerEXT)load("glVertexAttribIPointerEXT");
+	fp_glGetVertexAttribIivEXT = (pfn_glGetVertexAttribIivEXT)load("glGetVertexAttribIivEXT");
+	fp_glGetVertexAttribIuivEXT = (pfn_glGetVertexAttribIuivEXT)load("glGetVertexAttribIuivEXT");
+}
+
+GLboolean GLAD_NV_video_capture = GL_FALSE;
+static void load_GL_NV_video_capture(LOADER load) {
+	if(!GLAD_NV_video_capture) return;
+	fp_glBeginVideoCaptureNV = (pfn_glBeginVideoCaptureNV)load("glBeginVideoCaptureNV");
+	fp_glBindVideoCaptureStreamBufferNV = (pfn_glBindVideoCaptureStreamBufferNV)load("glBindVideoCaptureStreamBufferNV");
+	fp_glBindVideoCaptureStreamTextureNV = (pfn_glBindVideoCaptureStreamTextureNV)load("glBindVideoCaptureStreamTextureNV");
+	fp_glEndVideoCaptureNV = (pfn_glEndVideoCaptureNV)load("glEndVideoCaptureNV");
+	fp_glGetVideoCaptureivNV = (pfn_glGetVideoCaptureivNV)load("glGetVideoCaptureivNV");
+	fp_glGetVideoCaptureStreamivNV = (pfn_glGetVideoCaptureStreamivNV)load("glGetVideoCaptureStreamivNV");
+	fp_glGetVideoCaptureStreamfvNV = (pfn_glGetVideoCaptureStreamfvNV)load("glGetVideoCaptureStreamfvNV");
+	fp_glGetVideoCaptureStreamdvNV = (pfn_glGetVideoCaptureStreamdvNV)load("glGetVideoCaptureStreamdvNV");
+	fp_glVideoCaptureNV = (pfn_glVideoCaptureNV)load("glVideoCaptureNV");
+	fp_glVideoCaptureStreamParameterivNV = (pfn_glVideoCaptureStreamParameterivNV)load("glVideoCaptureStreamParameterivNV");
+	fp_glVideoCaptureStreamParameterfvNV = (pfn_glVideoCaptureStreamParameterfvNV)load("glVideoCaptureStreamParameterfvNV");
+	fp_glVideoCaptureStreamParameterdvNV = (pfn_glVideoCaptureStreamParameterdvNV)load("glVideoCaptureStreamParameterdvNV");
+}
+
+GLboolean GLAD_NVX_conditional_render = GL_FALSE;
+static void load_GL_NVX_conditional_render(LOADER load) {
+	if(!GLAD_NVX_conditional_render) return;
+	fp_glBeginConditionalRenderNVX = (pfn_glBeginConditionalRenderNVX)load("glBeginConditionalRenderNVX");
+	fp_glEndConditionalRenderNVX = (pfn_glEndConditionalRenderNVX)load("glEndConditionalRenderNVX");
+}
+
+GLboolean GLAD_NVX_gpu_memory_info = GL_FALSE;
+GLboolean GLAD_QCOM_alpha_test = GL_FALSE;
+static void load_GL_QCOM_alpha_test(LOADER load) {
+	if(!GLAD_QCOM_alpha_test) return;
+	fp_glAlphaFuncQCOM = (pfn_glAlphaFuncQCOM)load("glAlphaFuncQCOM");
+}
+
+GLboolean GLAD_QCOM_binning_control = GL_FALSE;
+GLboolean GLAD_QCOM_driver_control = GL_FALSE;
+static void load_GL_QCOM_driver_control(LOADER load) {
+	if(!GLAD_QCOM_driver_control) return;
+	fp_glGetDriverControlsQCOM = (pfn_glGetDriverControlsQCOM)load("glGetDriverControlsQCOM");
+	fp_glGetDriverControlStringQCOM = (pfn_glGetDriverControlStringQCOM)load("glGetDriverControlStringQCOM");
+	fp_glEnableDriverControlQCOM = (pfn_glEnableDriverControlQCOM)load("glEnableDriverControlQCOM");
+	fp_glDisableDriverControlQCOM = (pfn_glDisableDriverControlQCOM)load("glDisableDriverControlQCOM");
+}
+
+GLboolean GLAD_QCOM_extended_get = GL_FALSE;
+static void load_GL_QCOM_extended_get(LOADER load) {
+	if(!GLAD_QCOM_extended_get) return;
+	fp_glExtGetTexturesQCOM = (pfn_glExtGetTexturesQCOM)load("glExtGetTexturesQCOM");
+	fp_glExtGetBuffersQCOM = (pfn_glExtGetBuffersQCOM)load("glExtGetBuffersQCOM");
+	fp_glExtGetRenderbuffersQCOM = (pfn_glExtGetRenderbuffersQCOM)load("glExtGetRenderbuffersQCOM");
+	fp_glExtGetFramebuffersQCOM = (pfn_glExtGetFramebuffersQCOM)load("glExtGetFramebuffersQCOM");
+	fp_glExtGetTexLevelParameterivQCOM = (pfn_glExtGetTexLevelParameterivQCOM)load("glExtGetTexLevelParameterivQCOM");
+	fp_glExtTexObjectStateOverrideiQCOM = (pfn_glExtTexObjectStateOverrideiQCOM)load("glExtTexObjectStateOverrideiQCOM");
+	fp_glExtGetTexSubImageQCOM = (pfn_glExtGetTexSubImageQCOM)load("glExtGetTexSubImageQCOM");
+	fp_glExtGetBufferPointervQCOM = (pfn_glExtGetBufferPointervQCOM)load("glExtGetBufferPointervQCOM");
+}
+
+GLboolean GLAD_QCOM_extended_get2 = GL_FALSE;
+static void load_GL_QCOM_extended_get2(LOADER load) {
+	if(!GLAD_QCOM_extended_get2) return;
+	fp_glExtGetShadersQCOM = (pfn_glExtGetShadersQCOM)load("glExtGetShadersQCOM");
+	fp_glExtGetProgramsQCOM = (pfn_glExtGetProgramsQCOM)load("glExtGetProgramsQCOM");
+	fp_glExtIsProgramBinaryQCOM = (pfn_glExtIsProgramBinaryQCOM)load("glExtIsProgramBinaryQCOM");
+	fp_glExtGetProgramBinarySourceQCOM = (pfn_glExtGetProgramBinarySourceQCOM)load("glExtGetProgramBinarySourceQCOM");
+}
+
+GLboolean GLAD_QCOM_perfmon_global_mode = GL_FALSE;
+GLboolean GLAD_QCOM_tiled_rendering = GL_FALSE;
+static void load_GL_QCOM_tiled_rendering(LOADER load) {
+	if(!GLAD_QCOM_tiled_rendering) return;
+	fp_glStartTilingQCOM = (pfn_glStartTilingQCOM)load("glStartTilingQCOM");
+	fp_glEndTilingQCOM = (pfn_glEndTilingQCOM)load("glEndTilingQCOM");
+}
+
+GLboolean GLAD_QCOM_writeonly_rendering = GL_FALSE;
+GLboolean GLAD_SGIX_calligraphic_fragment = GL_FALSE;
+GLboolean GLAD_SGIX_depth_pass_instrument = GL_FALSE;
+GLboolean GLAD_SGIX_pixel_tiles = GL_FALSE;
+GLboolean GLAD_SGIX_scalebias_hint = GL_FALSE;
+GLboolean GLAD_SGIX_subsample = GL_FALSE;
+GLboolean GLAD_SGIX_ycrcb_subsample = GL_FALSE;
+GLboolean GLAD_SGIX_ycrcba = GL_FALSE;
+GLboolean GLAD_VIV_shader_binary = GL_FALSE;
+static void find_extensions(void) {
+	GLAD_KHR_blend_equation_advanced = has_ext("GL_KHR_blend_equation_advanced");
+	GLAD_KHR_blend_equation_advanced_coherent = has_ext("GL_KHR_blend_equation_advanced_coherent");
+	GLAD_KHR_context_flush_control = has_ext("GL_KHR_context_flush_control");
+	GLAD_KHR_debug = has_ext("GL_KHR_debug");
+	GLAD_KHR_robust_buffer_access_behavior = has_ext("GL_KHR_robust_buffer_access_behavior");
+	GLAD_KHR_robustness = has_ext("GL_KHR_robustness");
+	GLAD_KHR_texture_compression_astc_hdr = has_ext("GL_KHR_texture_compression_astc_hdr");
+	GLAD_KHR_texture_compression_astc_ldr = has_ext("GL_KHR_texture_compression_astc_ldr");
+	GLAD_ARB_arrays_of_arrays = has_ext("GL_ARB_arrays_of_arrays");
+	GLAD_ARB_base_instance = has_ext("GL_ARB_base_instance");
+	GLAD_ARB_bindless_texture = has_ext("GL_ARB_bindless_texture");
+	GLAD_ARB_blend_func_extended = has_ext("GL_ARB_blend_func_extended");
+	GLAD_ARB_buffer_storage = has_ext("GL_ARB_buffer_storage");
+	GLAD_ARB_cl_event = has_ext("GL_ARB_cl_event");
+	GLAD_ARB_clear_buffer_object = has_ext("GL_ARB_clear_buffer_object");
+	GLAD_ARB_clear_texture = has_ext("GL_ARB_clear_texture");
+	GLAD_ARB_clip_control = has_ext("GL_ARB_clip_control");
+	GLAD_ARB_color_buffer_float = has_ext("GL_ARB_color_buffer_float");
+	GLAD_ARB_compatibility = has_ext("GL_ARB_compatibility");
+	GLAD_ARB_compressed_texture_pixel_storage = has_ext("GL_ARB_compressed_texture_pixel_storage");
+	GLAD_ARB_compute_shader = has_ext("GL_ARB_compute_shader");
+	GLAD_ARB_compute_variable_group_size = has_ext("GL_ARB_compute_variable_group_size");
+	GLAD_ARB_conditional_render_inverted = has_ext("GL_ARB_conditional_render_inverted");
+	GLAD_ARB_conservative_depth = has_ext("GL_ARB_conservative_depth");
+	GLAD_ARB_copy_buffer = has_ext("GL_ARB_copy_buffer");
+	GLAD_ARB_copy_image = has_ext("GL_ARB_copy_image");
+	GLAD_ARB_cull_distance = has_ext("GL_ARB_cull_distance");
+	GLAD_ARB_debug_output = has_ext("GL_ARB_debug_output");
+	GLAD_ARB_depth_buffer_float = has_ext("GL_ARB_depth_buffer_float");
+	GLAD_ARB_depth_clamp = has_ext("GL_ARB_depth_clamp");
+	GLAD_ARB_derivative_control = has_ext("GL_ARB_derivative_control");
+	GLAD_ARB_direct_state_access = has_ext("GL_ARB_direct_state_access");
+	GLAD_ARB_draw_buffers_blend = has_ext("GL_ARB_draw_buffers_blend");
+	GLAD_ARB_draw_elements_base_vertex = has_ext("GL_ARB_draw_elements_base_vertex");
+	GLAD_ARB_draw_indirect = has_ext("GL_ARB_draw_indirect");
+	GLAD_ARB_draw_instanced = has_ext("GL_ARB_draw_instanced");
+	GLAD_ARB_enhanced_layouts = has_ext("GL_ARB_enhanced_layouts");
+	GLAD_ARB_ES2_compatibility = has_ext("GL_ARB_ES2_compatibility");
+	GLAD_ARB_ES3_1_compatibility = has_ext("GL_ARB_ES3_1_compatibility");
+	GLAD_ARB_ES3_compatibility = has_ext("GL_ARB_ES3_compatibility");
+	GLAD_ARB_explicit_attrib_location = has_ext("GL_ARB_explicit_attrib_location");
+	GLAD_ARB_explicit_uniform_location = has_ext("GL_ARB_explicit_uniform_location");
+	GLAD_ARB_fragment_coord_conventions = has_ext("GL_ARB_fragment_coord_conventions");
+	GLAD_ARB_fragment_layer_viewport = has_ext("GL_ARB_fragment_layer_viewport");
+	GLAD_ARB_framebuffer_no_attachments = has_ext("GL_ARB_framebuffer_no_attachments");
+	GLAD_ARB_framebuffer_object = has_ext("GL_ARB_framebuffer_object");
+	GLAD_ARB_framebuffer_sRGB = has_ext("GL_ARB_framebuffer_sRGB");
+	GLAD_ARB_geometry_shader4 = has_ext("GL_ARB_geometry_shader4");
+	GLAD_ARB_get_program_binary = has_ext("GL_ARB_get_program_binary");
+	GLAD_ARB_get_texture_sub_image = has_ext("GL_ARB_get_texture_sub_image");
+	GLAD_ARB_gpu_shader5 = has_ext("GL_ARB_gpu_shader5");
+	GLAD_ARB_gpu_shader_fp64 = has_ext("GL_ARB_gpu_shader_fp64");
+	GLAD_ARB_half_float_pixel = has_ext("GL_ARB_half_float_pixel");
+	GLAD_ARB_half_float_vertex = has_ext("GL_ARB_half_float_vertex");
+	GLAD_ARB_indirect_parameters = has_ext("GL_ARB_indirect_parameters");
+	GLAD_ARB_instanced_arrays = has_ext("GL_ARB_instanced_arrays");
+	GLAD_ARB_internalformat_query = has_ext("GL_ARB_internalformat_query");
+	GLAD_ARB_internalformat_query2 = has_ext("GL_ARB_internalformat_query2");
+	GLAD_ARB_invalidate_subdata = has_ext("GL_ARB_invalidate_subdata");
+	GLAD_ARB_map_buffer_alignment = has_ext("GL_ARB_map_buffer_alignment");
+	GLAD_ARB_map_buffer_range = has_ext("GL_ARB_map_buffer_range");
+	GLAD_ARB_multi_bind = has_ext("GL_ARB_multi_bind");
+	GLAD_ARB_multi_draw_indirect = has_ext("GL_ARB_multi_draw_indirect");
+	GLAD_ARB_occlusion_query2 = has_ext("GL_ARB_occlusion_query2");
+	GLAD_ARB_pipeline_statistics_query = has_ext("GL_ARB_pipeline_statistics_query");
+	GLAD_ARB_pixel_buffer_object = has_ext("GL_ARB_pixel_buffer_object");
+	GLAD_ARB_program_interface_query = has_ext("GL_ARB_program_interface_query");
+	GLAD_ARB_provoking_vertex = has_ext("GL_ARB_provoking_vertex");
+	GLAD_ARB_query_buffer_object = has_ext("GL_ARB_query_buffer_object");
+	GLAD_ARB_robust_buffer_access_behavior = has_ext("GL_ARB_robust_buffer_access_behavior");
+	GLAD_ARB_robustness = has_ext("GL_ARB_robustness");
+	GLAD_ARB_robustness_isolation = has_ext("GL_ARB_robustness_isolation");
+	GLAD_ARB_sample_shading = has_ext("GL_ARB_sample_shading");
+	GLAD_ARB_sampler_objects = has_ext("GL_ARB_sampler_objects");
+	GLAD_ARB_seamless_cube_map = has_ext("GL_ARB_seamless_cube_map");
+	GLAD_ARB_seamless_cubemap_per_texture = has_ext("GL_ARB_seamless_cubemap_per_texture");
+	GLAD_ARB_separate_shader_objects = has_ext("GL_ARB_separate_shader_objects");
+	GLAD_ARB_shader_atomic_counters = has_ext("GL_ARB_shader_atomic_counters");
+	GLAD_ARB_shader_bit_encoding = has_ext("GL_ARB_shader_bit_encoding");
+	GLAD_ARB_shader_draw_parameters = has_ext("GL_ARB_shader_draw_parameters");
+	GLAD_ARB_shader_group_vote = has_ext("GL_ARB_shader_group_vote");
+	GLAD_ARB_shader_image_load_store = has_ext("GL_ARB_shader_image_load_store");
+	GLAD_ARB_shader_image_size = has_ext("GL_ARB_shader_image_size");
+	GLAD_ARB_shader_precision = has_ext("GL_ARB_shader_precision");
+	GLAD_ARB_shader_stencil_export = has_ext("GL_ARB_shader_stencil_export");
+	GLAD_ARB_shader_storage_buffer_object = has_ext("GL_ARB_shader_storage_buffer_object");
+	GLAD_ARB_shader_subroutine = has_ext("GL_ARB_shader_subroutine");
+	GLAD_ARB_shader_texture_image_samples = has_ext("GL_ARB_shader_texture_image_samples");
+	GLAD_ARB_shader_texture_lod = has_ext("GL_ARB_shader_texture_lod");
+	GLAD_ARB_shading_language_420pack = has_ext("GL_ARB_shading_language_420pack");
+	GLAD_ARB_shading_language_include = has_ext("GL_ARB_shading_language_include");
+	GLAD_ARB_shading_language_packing = has_ext("GL_ARB_shading_language_packing");
+	GLAD_ARB_sparse_buffer = has_ext("GL_ARB_sparse_buffer");
+	GLAD_ARB_sparse_texture = has_ext("GL_ARB_sparse_texture");
+	GLAD_ARB_stencil_texturing = has_ext("GL_ARB_stencil_texturing");
+	GLAD_ARB_sync = has_ext("GL_ARB_sync");
+	GLAD_ARB_tessellation_shader = has_ext("GL_ARB_tessellation_shader");
+	GLAD_ARB_texture_barrier = has_ext("GL_ARB_texture_barrier");
+	GLAD_ARB_texture_buffer_object = has_ext("GL_ARB_texture_buffer_object");
+	GLAD_ARB_texture_buffer_object_rgb32 = has_ext("GL_ARB_texture_buffer_object_rgb32");
+	GLAD_ARB_texture_buffer_range = has_ext("GL_ARB_texture_buffer_range");
+	GLAD_ARB_texture_compression_bptc = has_ext("GL_ARB_texture_compression_bptc");
+	GLAD_ARB_texture_compression_rgtc = has_ext("GL_ARB_texture_compression_rgtc");
+	GLAD_ARB_texture_cube_map_array = has_ext("GL_ARB_texture_cube_map_array");
+	GLAD_ARB_texture_float = has_ext("GL_ARB_texture_float");
+	GLAD_ARB_texture_gather = has_ext("GL_ARB_texture_gather");
+	GLAD_ARB_texture_mirror_clamp_to_edge = has_ext("GL_ARB_texture_mirror_clamp_to_edge");
+	GLAD_ARB_texture_multisample = has_ext("GL_ARB_texture_multisample");
+	GLAD_ARB_texture_query_levels = has_ext("GL_ARB_texture_query_levels");
+	GLAD_ARB_texture_query_lod = has_ext("GL_ARB_texture_query_lod");
+	GLAD_ARB_texture_rectangle = has_ext("GL_ARB_texture_rectangle");
+	GLAD_ARB_texture_rg = has_ext("GL_ARB_texture_rg");
+	GLAD_ARB_texture_rgb10_a2ui = has_ext("GL_ARB_texture_rgb10_a2ui");
+	GLAD_ARB_texture_stencil8 = has_ext("GL_ARB_texture_stencil8");
+	GLAD_ARB_texture_storage = has_ext("GL_ARB_texture_storage");
+	GLAD_ARB_texture_storage_multisample = has_ext("GL_ARB_texture_storage_multisample");
+	GLAD_ARB_texture_swizzle = has_ext("GL_ARB_texture_swizzle");
+	GLAD_ARB_texture_view = has_ext("GL_ARB_texture_view");
+	GLAD_ARB_timer_query = has_ext("GL_ARB_timer_query");
+	GLAD_ARB_transform_feedback2 = has_ext("GL_ARB_transform_feedback2");
+	GLAD_ARB_transform_feedback3 = has_ext("GL_ARB_transform_feedback3");
+	GLAD_ARB_transform_feedback_instanced = has_ext("GL_ARB_transform_feedback_instanced");
+	GLAD_ARB_transform_feedback_overflow_query = has_ext("GL_ARB_transform_feedback_overflow_query");
+	GLAD_ARB_uniform_buffer_object = has_ext("GL_ARB_uniform_buffer_object");
+	GLAD_ARB_vertex_array_bgra = has_ext("GL_ARB_vertex_array_bgra");
+	GLAD_ARB_vertex_array_object = has_ext("GL_ARB_vertex_array_object");
+	GLAD_ARB_vertex_attrib_64bit = has_ext("GL_ARB_vertex_attrib_64bit");
+	GLAD_ARB_vertex_attrib_binding = has_ext("GL_ARB_vertex_attrib_binding");
+	GLAD_ARB_vertex_type_10f_11f_11f_rev = has_ext("GL_ARB_vertex_type_10f_11f_11f_rev");
+	GLAD_ARB_vertex_type_2_10_10_10_rev = has_ext("GL_ARB_vertex_type_2_10_10_10_rev");
+	GLAD_ARB_viewport_array = has_ext("GL_ARB_viewport_array");
+	GLAD_EXT_bgra = has_ext("GL_EXT_bgra");
+	GLAD_EXT_bindable_uniform = has_ext("GL_EXT_bindable_uniform");
+	GLAD_EXT_color_buffer_half_float = has_ext("GL_EXT_color_buffer_half_float");
+	GLAD_EXT_copy_image = has_ext("GL_EXT_copy_image");
+	GLAD_EXT_debug_label = has_ext("GL_EXT_debug_label");
+	GLAD_EXT_debug_marker = has_ext("GL_EXT_debug_marker");
+	GLAD_EXT_direct_state_access = has_ext("GL_EXT_direct_state_access");
+	GLAD_EXT_discard_framebuffer = has_ext("GL_EXT_discard_framebuffer");
+	GLAD_EXT_disjoint_timer_query = has_ext("GL_EXT_disjoint_timer_query");
+	GLAD_EXT_draw_buffers = has_ext("GL_EXT_draw_buffers");
+	GLAD_EXT_draw_buffers2 = has_ext("GL_EXT_draw_buffers2");
+	GLAD_EXT_draw_buffers_indexed = has_ext("GL_EXT_draw_buffers_indexed");
+	GLAD_EXT_draw_instanced = has_ext("GL_EXT_draw_instanced");
+	GLAD_EXT_framebuffer_blit = has_ext("GL_EXT_framebuffer_blit");
+	GLAD_EXT_framebuffer_multisample = has_ext("GL_EXT_framebuffer_multisample");
+	GLAD_EXT_framebuffer_multisample_blit_scaled = has_ext("GL_EXT_framebuffer_multisample_blit_scaled");
+	GLAD_EXT_framebuffer_object = has_ext("GL_EXT_framebuffer_object");
+	GLAD_EXT_framebuffer_sRGB = has_ext("GL_EXT_framebuffer_sRGB");
+	GLAD_EXT_geometry_point_size = has_ext("GL_EXT_geometry_point_size");
+	GLAD_EXT_geometry_shader = has_ext("GL_EXT_geometry_shader");
+	GLAD_EXT_geometry_shader4 = has_ext("GL_EXT_geometry_shader4");
+	GLAD_EXT_gpu_program_parameters = has_ext("GL_EXT_gpu_program_parameters");
+	GLAD_EXT_gpu_shader4 = has_ext("GL_EXT_gpu_shader4");
+	GLAD_EXT_gpu_shader5 = has_ext("GL_EXT_gpu_shader5");
+	GLAD_EXT_instanced_arrays = has_ext("GL_EXT_instanced_arrays");
+	GLAD_EXT_map_buffer_range = has_ext("GL_EXT_map_buffer_range");
+	GLAD_EXT_multisampled_render_to_texture = has_ext("GL_EXT_multisampled_render_to_texture");
+	GLAD_EXT_multiview_draw_buffers = has_ext("GL_EXT_multiview_draw_buffers");
+	GLAD_EXT_occlusion_query_boolean = has_ext("GL_EXT_occlusion_query_boolean");
+	GLAD_EXT_packed_depth_stencil = has_ext("GL_EXT_packed_depth_stencil");
+	GLAD_EXT_packed_float = has_ext("GL_EXT_packed_float");
+	GLAD_EXT_pixel_buffer_object = has_ext("GL_EXT_pixel_buffer_object");
+	GLAD_EXT_primitive_bounding_box = has_ext("GL_EXT_primitive_bounding_box");
+	GLAD_EXT_provoking_vertex = has_ext("GL_EXT_provoking_vertex");
+	GLAD_EXT_pvrtc_sRGB = has_ext("GL_EXT_pvrtc_sRGB");
+	GLAD_EXT_read_format_bgra = has_ext("GL_EXT_read_format_bgra");
+	GLAD_EXT_robustness = has_ext("GL_EXT_robustness");
+	GLAD_EXT_separate_shader_objects = has_ext("GL_EXT_separate_shader_objects");
+	GLAD_EXT_shader_framebuffer_fetch = has_ext("GL_EXT_shader_framebuffer_fetch");
+	GLAD_EXT_shader_image_load_formatted = has_ext("GL_EXT_shader_image_load_formatted");
+	GLAD_EXT_shader_image_load_store = has_ext("GL_EXT_shader_image_load_store");
+	GLAD_EXT_shader_implicit_conversions = has_ext("GL_EXT_shader_implicit_conversions");
+	GLAD_EXT_shader_integer_mix = has_ext("GL_EXT_shader_integer_mix");
+	GLAD_EXT_shader_io_blocks = has_ext("GL_EXT_shader_io_blocks");
+	GLAD_EXT_shader_pixel_local_storage = has_ext("GL_EXT_shader_pixel_local_storage");
+	GLAD_EXT_shader_texture_lod = has_ext("GL_EXT_shader_texture_lod");
+	GLAD_EXT_shadow_samplers = has_ext("GL_EXT_shadow_samplers");
+	GLAD_EXT_sRGB = has_ext("GL_EXT_sRGB");
+	GLAD_EXT_sRGB_write_control = has_ext("GL_EXT_sRGB_write_control");
+	GLAD_EXT_stencil_clear_tag = has_ext("GL_EXT_stencil_clear_tag");
+	GLAD_EXT_tessellation_point_size = has_ext("GL_EXT_tessellation_point_size");
+	GLAD_EXT_tessellation_shader = has_ext("GL_EXT_tessellation_shader");
+	GLAD_EXT_texture_array = has_ext("GL_EXT_texture_array");
+	GLAD_EXT_texture_border_clamp = has_ext("GL_EXT_texture_border_clamp");
+	GLAD_EXT_texture_buffer = has_ext("GL_EXT_texture_buffer");
+	GLAD_EXT_texture_buffer_object = has_ext("GL_EXT_texture_buffer_object");
+	GLAD_EXT_texture_compression_dxt1 = has_ext("GL_EXT_texture_compression_dxt1");
+	GLAD_EXT_texture_compression_latc = has_ext("GL_EXT_texture_compression_latc");
+	GLAD_EXT_texture_compression_rgtc = has_ext("GL_EXT_texture_compression_rgtc");
+	GLAD_EXT_texture_compression_s3tc = has_ext("GL_EXT_texture_compression_s3tc");
+	GLAD_EXT_texture_cube_map = has_ext("GL_EXT_texture_cube_map");
+	GLAD_EXT_texture_cube_map_array = has_ext("GL_EXT_texture_cube_map_array");
+	GLAD_EXT_texture_filter_anisotropic = has_ext("GL_EXT_texture_filter_anisotropic");
+	GLAD_EXT_texture_format_BGRA8888 = has_ext("GL_EXT_texture_format_BGRA8888");
+	GLAD_EXT_texture_integer = has_ext("GL_EXT_texture_integer");
+	GLAD_EXT_texture_rg = has_ext("GL_EXT_texture_rg");
+	GLAD_EXT_texture_shared_exponent = has_ext("GL_EXT_texture_shared_exponent");
+	GLAD_EXT_texture_snorm = has_ext("GL_EXT_texture_snorm");
+	GLAD_EXT_texture_sRGB = has_ext("GL_EXT_texture_sRGB");
+	GLAD_EXT_texture_sRGB_decode = has_ext("GL_EXT_texture_sRGB_decode");
+	GLAD_EXT_texture_storage = has_ext("GL_EXT_texture_storage");
+	GLAD_EXT_texture_swizzle = has_ext("GL_EXT_texture_swizzle");
+	GLAD_EXT_texture_type_2_10_10_10_REV = has_ext("GL_EXT_texture_type_2_10_10_10_REV");
+	GLAD_EXT_texture_view = has_ext("GL_EXT_texture_view");
+	GLAD_EXT_timer_query = has_ext("GL_EXT_timer_query");
+	GLAD_EXT_transform_feedback = has_ext("GL_EXT_transform_feedback");
+	GLAD_EXT_unpack_subimage = has_ext("GL_EXT_unpack_subimage");
+	GLAD_EXT_vertex_array_bgra = has_ext("GL_EXT_vertex_array_bgra");
+	GLAD_EXT_vertex_attrib_64bit = has_ext("GL_EXT_vertex_attrib_64bit");
+	GLAD_EXT_x11_sync_object = has_ext("GL_EXT_x11_sync_object");
+	GLAD_OES_compressed_ETC1_RGB8_sub_texture = has_ext("GL_OES_compressed_ETC1_RGB8_sub_texture");
+	GLAD_OES_compressed_ETC1_RGB8_texture = has_ext("GL_OES_compressed_ETC1_RGB8_texture");
+	GLAD_OES_depth24 = has_ext("GL_OES_depth24");
+	GLAD_OES_depth32 = has_ext("GL_OES_depth32");
+	GLAD_OES_depth_texture = has_ext("GL_OES_depth_texture");
+	GLAD_OES_EGL_image = has_ext("GL_OES_EGL_image");
+	GLAD_OES_EGL_image_external = has_ext("GL_OES_EGL_image_external");
+	GLAD_OES_element_index_uint = has_ext("GL_OES_element_index_uint");
+	GLAD_OES_fbo_render_mipmap = has_ext("GL_OES_fbo_render_mipmap");
+	GLAD_OES_fragment_precision_high = has_ext("GL_OES_fragment_precision_high");
+	GLAD_OES_get_program_binary = has_ext("GL_OES_get_program_binary");
+	GLAD_OES_mapbuffer = has_ext("GL_OES_mapbuffer");
+	GLAD_OES_packed_depth_stencil = has_ext("GL_OES_packed_depth_stencil");
+	GLAD_OES_required_internalformat = has_ext("GL_OES_required_internalformat");
+	GLAD_OES_rgb8_rgba8 = has_ext("GL_OES_rgb8_rgba8");
+	GLAD_OES_sample_shading = has_ext("GL_OES_sample_shading");
+	GLAD_OES_sample_variables = has_ext("GL_OES_sample_variables");
+	GLAD_OES_shader_image_atomic = has_ext("GL_OES_shader_image_atomic");
+	GLAD_OES_shader_multisample_interpolation = has_ext("GL_OES_shader_multisample_interpolation");
+	GLAD_OES_standard_derivatives = has_ext("GL_OES_standard_derivatives");
+	GLAD_OES_stencil1 = has_ext("GL_OES_stencil1");
+	GLAD_OES_stencil4 = has_ext("GL_OES_stencil4");
+	GLAD_OES_surfaceless_context = has_ext("GL_OES_surfaceless_context");
+	GLAD_OES_texture_3D = has_ext("GL_OES_texture_3D");
+	GLAD_OES_texture_compression_astc = has_ext("GL_OES_texture_compression_astc");
+	GLAD_OES_texture_float = has_ext("GL_OES_texture_float");
+	GLAD_OES_texture_float_linear = has_ext("GL_OES_texture_float_linear");
+	GLAD_OES_texture_half_float = has_ext("GL_OES_texture_half_float");
+	GLAD_OES_texture_half_float_linear = has_ext("GL_OES_texture_half_float_linear");
+	GLAD_OES_texture_npot = has_ext("GL_OES_texture_npot");
+	GLAD_OES_texture_stencil8 = has_ext("GL_OES_texture_stencil8");
+	GLAD_OES_texture_storage_multisample_2d_array = has_ext("GL_OES_texture_storage_multisample_2d_array");
+	GLAD_OES_vertex_array_object = has_ext("GL_OES_vertex_array_object");
+	GLAD_OES_vertex_half_float = has_ext("GL_OES_vertex_half_float");
+	GLAD_OES_vertex_type_10_10_10_2 = has_ext("GL_OES_vertex_type_10_10_10_2");
+	GLAD_AMD_blend_minmax_factor = has_ext("GL_AMD_blend_minmax_factor");
+	GLAD_AMD_compressed_3DC_texture = has_ext("GL_AMD_compressed_3DC_texture");
+	GLAD_AMD_compressed_ATC_texture = has_ext("GL_AMD_compressed_ATC_texture");
+	GLAD_AMD_conservative_depth = has_ext("GL_AMD_conservative_depth");
+	GLAD_AMD_debug_output = has_ext("GL_AMD_debug_output");
+	GLAD_AMD_depth_clamp_separate = has_ext("GL_AMD_depth_clamp_separate");
+	GLAD_AMD_draw_buffers_blend = has_ext("GL_AMD_draw_buffers_blend");
+	GLAD_AMD_gcn_shader = has_ext("GL_AMD_gcn_shader");
+	GLAD_AMD_gpu_shader_int64 = has_ext("GL_AMD_gpu_shader_int64");
+	GLAD_AMD_interleaved_elements = has_ext("GL_AMD_interleaved_elements");
+	GLAD_AMD_multi_draw_indirect = has_ext("GL_AMD_multi_draw_indirect");
+	GLAD_AMD_name_gen_delete = has_ext("GL_AMD_name_gen_delete");
+	GLAD_AMD_occlusion_query_event = has_ext("GL_AMD_occlusion_query_event");
+	GLAD_AMD_performance_monitor = has_ext("GL_AMD_performance_monitor");
+	GLAD_AMD_pinned_memory = has_ext("GL_AMD_pinned_memory");
+	GLAD_AMD_program_binary_Z400 = has_ext("GL_AMD_program_binary_Z400");
+	GLAD_AMD_query_buffer_object = has_ext("GL_AMD_query_buffer_object");
+	GLAD_AMD_sample_positions = has_ext("GL_AMD_sample_positions");
+	GLAD_AMD_seamless_cubemap_per_texture = has_ext("GL_AMD_seamless_cubemap_per_texture");
+	GLAD_AMD_shader_atomic_counter_ops = has_ext("GL_AMD_shader_atomic_counter_ops");
+	GLAD_AMD_shader_stencil_export = has_ext("GL_AMD_shader_stencil_export");
+	GLAD_AMD_shader_trinary_minmax = has_ext("GL_AMD_shader_trinary_minmax");
+	GLAD_AMD_sparse_texture = has_ext("GL_AMD_sparse_texture");
+	GLAD_AMD_stencil_operation_extended = has_ext("GL_AMD_stencil_operation_extended");
+	GLAD_AMD_texture_texture4 = has_ext("GL_AMD_texture_texture4");
+	GLAD_AMD_transform_feedback3_lines_triangles = has_ext("GL_AMD_transform_feedback3_lines_triangles");
+	GLAD_AMD_transform_feedback4 = has_ext("GL_AMD_transform_feedback4");
+	GLAD_AMD_vertex_shader_layer = has_ext("GL_AMD_vertex_shader_layer");
+	GLAD_AMD_vertex_shader_tessellator = has_ext("GL_AMD_vertex_shader_tessellator");
+	GLAD_AMD_vertex_shader_viewport_index = has_ext("GL_AMD_vertex_shader_viewport_index");
+	GLAD_ANDROID_extension_pack_es31a = has_ext("GL_ANDROID_extension_pack_es31a");
+	GLAD_ANGLE_depth_texture = has_ext("GL_ANGLE_depth_texture");
+	GLAD_ANGLE_framebuffer_blit = has_ext("GL_ANGLE_framebuffer_blit");
+	GLAD_ANGLE_framebuffer_multisample = has_ext("GL_ANGLE_framebuffer_multisample");
+	GLAD_ANGLE_instanced_arrays = has_ext("GL_ANGLE_instanced_arrays");
+	GLAD_ANGLE_pack_reverse_row_order = has_ext("GL_ANGLE_pack_reverse_row_order");
+	GLAD_ANGLE_program_binary = has_ext("GL_ANGLE_program_binary");
+	GLAD_ANGLE_texture_compression_dxt3 = has_ext("GL_ANGLE_texture_compression_dxt3");
+	GLAD_ANGLE_texture_compression_dxt5 = has_ext("GL_ANGLE_texture_compression_dxt5");
+	GLAD_ANGLE_texture_usage = has_ext("GL_ANGLE_texture_usage");
+	GLAD_ANGLE_translated_shader_source = has_ext("GL_ANGLE_translated_shader_source");
+	GLAD_APPLE_aux_depth_stencil = has_ext("GL_APPLE_aux_depth_stencil");
+	GLAD_APPLE_client_storage = has_ext("GL_APPLE_client_storage");
+	GLAD_APPLE_copy_texture_levels = has_ext("GL_APPLE_copy_texture_levels");
+	GLAD_APPLE_element_array = has_ext("GL_APPLE_element_array");
+	GLAD_APPLE_fence = has_ext("GL_APPLE_fence");
+	GLAD_APPLE_float_pixels = has_ext("GL_APPLE_float_pixels");
+	GLAD_APPLE_flush_buffer_range = has_ext("GL_APPLE_flush_buffer_range");
+	GLAD_APPLE_framebuffer_multisample = has_ext("GL_APPLE_framebuffer_multisample");
+	GLAD_APPLE_object_purgeable = has_ext("GL_APPLE_object_purgeable");
+	GLAD_APPLE_rgb_422 = has_ext("GL_APPLE_rgb_422");
+	GLAD_APPLE_row_bytes = has_ext("GL_APPLE_row_bytes");
+	GLAD_APPLE_sync = has_ext("GL_APPLE_sync");
+	GLAD_APPLE_texture_format_BGRA8888 = has_ext("GL_APPLE_texture_format_BGRA8888");
+	GLAD_APPLE_texture_max_level = has_ext("GL_APPLE_texture_max_level");
+	GLAD_APPLE_texture_range = has_ext("GL_APPLE_texture_range");
+	GLAD_APPLE_vertex_array_object = has_ext("GL_APPLE_vertex_array_object");
+	GLAD_APPLE_vertex_array_range = has_ext("GL_APPLE_vertex_array_range");
+	GLAD_APPLE_vertex_program_evaluators = has_ext("GL_APPLE_vertex_program_evaluators");
+	GLAD_APPLE_ycbcr_422 = has_ext("GL_APPLE_ycbcr_422");
+	GLAD_ARM_mali_program_binary = has_ext("GL_ARM_mali_program_binary");
+	GLAD_ARM_mali_shader_binary = has_ext("GL_ARM_mali_shader_binary");
+	GLAD_ARM_rgba8 = has_ext("GL_ARM_rgba8");
+	GLAD_ARM_shader_framebuffer_fetch = has_ext("GL_ARM_shader_framebuffer_fetch");
+	GLAD_ARM_shader_framebuffer_fetch_depth_stencil = has_ext("GL_ARM_shader_framebuffer_fetch_depth_stencil");
+	GLAD_ATI_meminfo = has_ext("GL_ATI_meminfo");
+	GLAD_ATI_pixel_format_float = has_ext("GL_ATI_pixel_format_float");
+	GLAD_DMP_shader_binary = has_ext("GL_DMP_shader_binary");
+	GLAD_FJ_shader_binary_GCCSO = has_ext("GL_FJ_shader_binary_GCCSO");
+	GLAD_GREMEDY_frame_terminator = has_ext("GL_GREMEDY_frame_terminator");
+	GLAD_GREMEDY_string_marker = has_ext("GL_GREMEDY_string_marker");
+	GLAD_IMG_multisampled_render_to_texture = has_ext("GL_IMG_multisampled_render_to_texture");
+	GLAD_IMG_program_binary = has_ext("GL_IMG_program_binary");
+	GLAD_IMG_read_format = has_ext("GL_IMG_read_format");
+	GLAD_IMG_shader_binary = has_ext("GL_IMG_shader_binary");
+	GLAD_IMG_texture_compression_pvrtc = has_ext("GL_IMG_texture_compression_pvrtc");
+	GLAD_IMG_texture_compression_pvrtc2 = has_ext("GL_IMG_texture_compression_pvrtc2");
+	GLAD_INGR_blend_func_separate = has_ext("GL_INGR_blend_func_separate");
+	GLAD_INTEL_fragment_shader_ordering = has_ext("GL_INTEL_fragment_shader_ordering");
+	GLAD_INTEL_map_texture = has_ext("GL_INTEL_map_texture");
+	GLAD_INTEL_performance_query = has_ext("GL_INTEL_performance_query");
+	GLAD_MESA_pack_invert = has_ext("GL_MESA_pack_invert");
+	GLAD_MESA_ycbcr_texture = has_ext("GL_MESA_ycbcr_texture");
+	GLAD_MESAX_texture_stack = has_ext("GL_MESAX_texture_stack");
+	GLAD_NV_bindless_multi_draw_indirect = has_ext("GL_NV_bindless_multi_draw_indirect");
+	GLAD_NV_bindless_multi_draw_indirect_count = has_ext("GL_NV_bindless_multi_draw_indirect_count");
+	GLAD_NV_bindless_texture = has_ext("GL_NV_bindless_texture");
+	GLAD_NV_blend_equation_advanced = has_ext("GL_NV_blend_equation_advanced");
+	GLAD_NV_blend_equation_advanced_coherent = has_ext("GL_NV_blend_equation_advanced_coherent");
+	GLAD_NV_compute_program5 = has_ext("GL_NV_compute_program5");
+	GLAD_NV_conditional_render = has_ext("GL_NV_conditional_render");
+	GLAD_NV_copy_buffer = has_ext("GL_NV_copy_buffer");
+	GLAD_NV_copy_image = has_ext("GL_NV_copy_image");
+	GLAD_NV_coverage_sample = has_ext("GL_NV_coverage_sample");
+	GLAD_NV_deep_texture3D = has_ext("GL_NV_deep_texture3D");
+	GLAD_NV_depth_buffer_float = has_ext("GL_NV_depth_buffer_float");
+	GLAD_NV_depth_clamp = has_ext("GL_NV_depth_clamp");
+	GLAD_NV_depth_nonlinear = has_ext("GL_NV_depth_nonlinear");
+	GLAD_NV_draw_buffers = has_ext("GL_NV_draw_buffers");
+	GLAD_NV_draw_instanced = has_ext("GL_NV_draw_instanced");
+	GLAD_NV_draw_texture = has_ext("GL_NV_draw_texture");
+	GLAD_NV_explicit_attrib_location = has_ext("GL_NV_explicit_attrib_location");
+	GLAD_NV_explicit_multisample = has_ext("GL_NV_explicit_multisample");
+	GLAD_NV_fbo_color_attachments = has_ext("GL_NV_fbo_color_attachments");
+	GLAD_NV_fence = has_ext("GL_NV_fence");
+	GLAD_NV_float_buffer = has_ext("GL_NV_float_buffer");
+	GLAD_NV_fragment_program4 = has_ext("GL_NV_fragment_program4");
+	GLAD_NV_framebuffer_blit = has_ext("GL_NV_framebuffer_blit");
+	GLAD_NV_framebuffer_multisample = has_ext("GL_NV_framebuffer_multisample");
+	GLAD_NV_framebuffer_multisample_coverage = has_ext("GL_NV_framebuffer_multisample_coverage");
+	GLAD_NV_generate_mipmap_sRGB = has_ext("GL_NV_generate_mipmap_sRGB");
+	GLAD_NV_geometry_program4 = has_ext("GL_NV_geometry_program4");
+	GLAD_NV_geometry_shader4 = has_ext("GL_NV_geometry_shader4");
+	GLAD_NV_gpu_program4 = has_ext("GL_NV_gpu_program4");
+	GLAD_NV_gpu_program5 = has_ext("GL_NV_gpu_program5");
+	GLAD_NV_gpu_program5_mem_extended = has_ext("GL_NV_gpu_program5_mem_extended");
+	GLAD_NV_gpu_shader5 = has_ext("GL_NV_gpu_shader5");
+	GLAD_NV_half_float = has_ext("GL_NV_half_float");
+	GLAD_NV_instanced_arrays = has_ext("GL_NV_instanced_arrays");
+	GLAD_NV_multisample_coverage = has_ext("GL_NV_multisample_coverage");
+	GLAD_NV_non_square_matrices = has_ext("GL_NV_non_square_matrices");
+	GLAD_NV_occlusion_query = has_ext("GL_NV_occlusion_query");
+	GLAD_NV_parameter_buffer_object = has_ext("GL_NV_parameter_buffer_object");
+	GLAD_NV_parameter_buffer_object2 = has_ext("GL_NV_parameter_buffer_object2");
+	GLAD_NV_path_rendering = has_ext("GL_NV_path_rendering");
+	GLAD_NV_present_video = has_ext("GL_NV_present_video");
+	GLAD_NV_primitive_restart = has_ext("GL_NV_primitive_restart");
+	GLAD_NV_read_buffer = has_ext("GL_NV_read_buffer");
+	GLAD_NV_read_buffer_front = has_ext("GL_NV_read_buffer_front");
+	GLAD_NV_read_depth = has_ext("GL_NV_read_depth");
+	GLAD_NV_read_depth_stencil = has_ext("GL_NV_read_depth_stencil");
+	GLAD_NV_read_stencil = has_ext("GL_NV_read_stencil");
+	GLAD_NV_shader_atomic_counters = has_ext("GL_NV_shader_atomic_counters");
+	GLAD_NV_shader_atomic_float = has_ext("GL_NV_shader_atomic_float");
+	GLAD_NV_shader_atomic_int64 = has_ext("GL_NV_shader_atomic_int64");
+	GLAD_NV_shader_buffer_load = has_ext("GL_NV_shader_buffer_load");
+	GLAD_NV_shader_buffer_store = has_ext("GL_NV_shader_buffer_store");
+	GLAD_NV_shader_storage_buffer_object = has_ext("GL_NV_shader_storage_buffer_object");
+	GLAD_NV_shader_thread_group = has_ext("GL_NV_shader_thread_group");
+	GLAD_NV_shader_thread_shuffle = has_ext("GL_NV_shader_thread_shuffle");
+	GLAD_NV_shadow_samplers_array = has_ext("GL_NV_shadow_samplers_array");
+	GLAD_NV_shadow_samplers_cube = has_ext("GL_NV_shadow_samplers_cube");
+	GLAD_NV_sRGB_formats = has_ext("GL_NV_sRGB_formats");
+	GLAD_NV_tessellation_program5 = has_ext("GL_NV_tessellation_program5");
+	GLAD_NV_texture_barrier = has_ext("GL_NV_texture_barrier");
+	GLAD_NV_texture_border_clamp = has_ext("GL_NV_texture_border_clamp");
+	GLAD_NV_texture_compression_s3tc_update = has_ext("GL_NV_texture_compression_s3tc_update");
+	GLAD_NV_texture_multisample = has_ext("GL_NV_texture_multisample");
+	GLAD_NV_texture_npot_2D_mipmap = has_ext("GL_NV_texture_npot_2D_mipmap");
+	GLAD_NV_transform_feedback = has_ext("GL_NV_transform_feedback");
+	GLAD_NV_transform_feedback2 = has_ext("GL_NV_transform_feedback2");
+	GLAD_NV_vdpau_interop = has_ext("GL_NV_vdpau_interop");
+	GLAD_NV_vertex_attrib_integer_64bit = has_ext("GL_NV_vertex_attrib_integer_64bit");
+	GLAD_NV_vertex_buffer_unified_memory = has_ext("GL_NV_vertex_buffer_unified_memory");
+	GLAD_NV_vertex_program4 = has_ext("GL_NV_vertex_program4");
+	GLAD_NV_video_capture = has_ext("GL_NV_video_capture");
+	GLAD_NVX_conditional_render = has_ext("GL_NVX_conditional_render");
+	GLAD_NVX_gpu_memory_info = has_ext("GL_NVX_gpu_memory_info");
+	GLAD_QCOM_alpha_test = has_ext("GL_QCOM_alpha_test");
+	GLAD_QCOM_binning_control = has_ext("GL_QCOM_binning_control");
+	GLAD_QCOM_driver_control = has_ext("GL_QCOM_driver_control");
+	GLAD_QCOM_extended_get = has_ext("GL_QCOM_extended_get");
+	GLAD_QCOM_extended_get2 = has_ext("GL_QCOM_extended_get2");
+	GLAD_QCOM_perfmon_global_mode = has_ext("GL_QCOM_perfmon_global_mode");
+	GLAD_QCOM_tiled_rendering = has_ext("GL_QCOM_tiled_rendering");
+	GLAD_QCOM_writeonly_rendering = has_ext("GL_QCOM_writeonly_rendering");
+	GLAD_SGIX_calligraphic_fragment = has_ext("GL_SGIX_calligraphic_fragment");
+	GLAD_SGIX_depth_pass_instrument = has_ext("GL_SGIX_depth_pass_instrument");
+	GLAD_SGIX_pixel_tiles = has_ext("GL_SGIX_pixel_tiles");
+	GLAD_SGIX_scalebias_hint = has_ext("GL_SGIX_scalebias_hint");
+	GLAD_SGIX_subsample = has_ext("GL_SGIX_subsample");
+	GLAD_SGIX_ycrcb_subsample = has_ext("GL_SGIX_ycrcb_subsample");
+	GLAD_SGIX_ycrcba = has_ext("GL_SGIX_ycrcba");
+	GLAD_VIV_shader_binary = has_ext("GL_VIV_shader_binary");
+}
+
+static void find_core(void) {
+	const char *v = (const char *)fp_glGetString(GL_VERSION);
+	int major = v[0] - '0', minor = v[2] - '0', gles = false;
+	GLVersion.gles = false;
+	if (strstr(v, "OpenGL ES ") == v) {
+		major = v[10] - '0'; minor = v[12] - '0'; gles = true;
+	}
+	GLVersion.major = major; GLVersion.minor = minor; GLVersion.gles = gles;
+	GLAD_VERSION_1_0 = gles == 0 && ((major == 1 && minor >= 0) || major > 1);
+	GLAD_VERSION_1_1 = gles == 0 && ((major == 1 && minor >= 1) || major > 1);
+	GLAD_VERSION_1_2 = gles == 0 && ((major == 1 && minor >= 2) || major > 1);
+	GLAD_VERSION_1_3 = gles == 0 && ((major == 1 && minor >= 3) || major > 1);
+	GLAD_VERSION_1_4 = gles == 0 && ((major == 1 && minor >= 4) || major > 1);
+	GLAD_VERSION_1_5 = gles == 0 && ((major == 1 && minor >= 5) || major > 1);
+	GLAD_VERSION_2_0 = gles == 0 && ((major == 2 && minor >= 0) || major > 2);
+	GLAD_VERSION_2_1 = gles == 0 && ((major == 2 && minor >= 1) || major > 2);
+	GLAD_VERSION_3_0 = gles == 0 && ((major == 3 && minor >= 0) || major > 3);
+	GLAD_VERSION_3_1 = gles == 0 && ((major == 3 && minor >= 1) || major > 3);
+	GLAD_VERSION_3_2 = gles == 0 && ((major == 3 && minor >= 2) || major > 3);
+	GLAD_VERSION_3_3 = gles == 0 && ((major == 3 && minor >= 3) || major > 3);
+	GLAD_VERSION_4_0 = gles == 0 && ((major == 4 && minor >= 0) || major > 4);
+	GLAD_VERSION_4_1 = gles == 0 && ((major == 4 && minor >= 1) || major > 4);
+	GLAD_VERSION_4_2 = gles == 0 && ((major == 4 && minor >= 2) || major > 4);
+	GLAD_VERSION_4_3 = gles == 0 && ((major == 4 && minor >= 3) || major > 4);
+	GLAD_VERSION_4_4 = gles == 0 && ((major == 4 && minor >= 4) || major > 4);
+	GLAD_VERSION_4_5 = gles == 0 && ((major == 4 && minor >= 5) || major > 4);
+	GLAD_ES_VERSION_2_0 = gles == 1 && ((major == 2 && minor >= 0) || major > 2);
+	GLAD_ES_VERSION_3_0 = gles == 1 && ((major == 3 && minor >= 0) || major > 3);
+	GLAD_ES_VERSION_3_1 = gles == 1 && ((major == 3 && minor >= 1) || major > 3);
+}
+
+bool gladLoadGLLoader(LOADER load) {
+	GLVersion.major = 0; GLVersion.minor = 0; GLVersion.gles = 0;
+	fp_glGetString = (pfn_glGetString)load("glGetString");
+	if(fp_glGetString == NULL) return false;
+	find_core();
+	load_GL_VERSION_1_0(load);
+	load_GL_VERSION_1_1(load);
+	load_GL_VERSION_1_2(load);
+	load_GL_VERSION_1_3(load);
+	load_GL_VERSION_1_4(load);
+	load_GL_VERSION_1_5(load);
+	load_GL_VERSION_2_0(load);
+	load_GL_VERSION_2_1(load);
+	load_GL_VERSION_3_0(load);
+	load_GL_VERSION_3_1(load);
+	load_GL_VERSION_3_2(load);
+	load_GL_VERSION_3_3(load);
+	load_GL_VERSION_4_0(load);
+	load_GL_VERSION_4_1(load);
+	load_GL_VERSION_4_2(load);
+	load_GL_VERSION_4_3(load);
+	load_GL_VERSION_4_4(load);
+	load_GL_VERSION_4_5(load);
+	load_GL_ES_VERSION_2_0(load);
+	load_GL_ES_VERSION_3_0(load);
+	load_GL_ES_VERSION_3_1(load);
+
+	find_extensions();
+	load_GL_KHR_blend_equation_advanced(load);
+	load_GL_KHR_debug(load);
+	load_GL_KHR_robustness(load);
+	load_GL_ARB_base_instance(load);
+	load_GL_ARB_bindless_texture(load);
+	load_GL_ARB_blend_func_extended(load);
+	load_GL_ARB_buffer_storage(load);
+	load_GL_ARB_cl_event(load);
+	load_GL_ARB_clear_buffer_object(load);
+	load_GL_ARB_clear_texture(load);
+	load_GL_ARB_clip_control(load);
+	load_GL_ARB_color_buffer_float(load);
+	load_GL_ARB_compute_shader(load);
+	load_GL_ARB_compute_variable_group_size(load);
+	load_GL_ARB_copy_buffer(load);
+	load_GL_ARB_copy_image(load);
+	load_GL_ARB_debug_output(load);
+	load_GL_ARB_direct_state_access(load);
+	load_GL_ARB_draw_buffers_blend(load);
+	load_GL_ARB_draw_elements_base_vertex(load);
+	load_GL_ARB_draw_indirect(load);
+	load_GL_ARB_draw_instanced(load);
+	load_GL_ARB_ES2_compatibility(load);
+	load_GL_ARB_ES3_1_compatibility(load);
+	load_GL_ARB_framebuffer_no_attachments(load);
+	load_GL_ARB_framebuffer_object(load);
+	load_GL_ARB_geometry_shader4(load);
+	load_GL_ARB_get_program_binary(load);
+	load_GL_ARB_get_texture_sub_image(load);
+	load_GL_ARB_gpu_shader_fp64(load);
+	load_GL_ARB_indirect_parameters(load);
+	load_GL_ARB_instanced_arrays(load);
+	load_GL_ARB_internalformat_query(load);
+	load_GL_ARB_internalformat_query2(load);
+	load_GL_ARB_invalidate_subdata(load);
+	load_GL_ARB_map_buffer_range(load);
+	load_GL_ARB_multi_bind(load);
+	load_GL_ARB_multi_draw_indirect(load);
+	load_GL_ARB_program_interface_query(load);
+	load_GL_ARB_provoking_vertex(load);
+	load_GL_ARB_robustness(load);
+	load_GL_ARB_sample_shading(load);
+	load_GL_ARB_sampler_objects(load);
+	load_GL_ARB_separate_shader_objects(load);
+	load_GL_ARB_shader_atomic_counters(load);
+	load_GL_ARB_shader_image_load_store(load);
+	load_GL_ARB_shader_storage_buffer_object(load);
+	load_GL_ARB_shader_subroutine(load);
+	load_GL_ARB_shading_language_include(load);
+	load_GL_ARB_sparse_buffer(load);
+	load_GL_ARB_sparse_texture(load);
+	load_GL_ARB_sync(load);
+	load_GL_ARB_tessellation_shader(load);
+	load_GL_ARB_texture_barrier(load);
+	load_GL_ARB_texture_buffer_object(load);
+	load_GL_ARB_texture_buffer_range(load);
+	load_GL_ARB_texture_multisample(load);
+	load_GL_ARB_texture_storage(load);
+	load_GL_ARB_texture_storage_multisample(load);
+	load_GL_ARB_texture_view(load);
+	load_GL_ARB_timer_query(load);
+	load_GL_ARB_transform_feedback2(load);
+	load_GL_ARB_transform_feedback3(load);
+	load_GL_ARB_transform_feedback_instanced(load);
+	load_GL_ARB_uniform_buffer_object(load);
+	load_GL_ARB_vertex_array_object(load);
+	load_GL_ARB_vertex_attrib_64bit(load);
+	load_GL_ARB_vertex_attrib_binding(load);
+	load_GL_ARB_vertex_type_2_10_10_10_rev(load);
+	load_GL_ARB_viewport_array(load);
+	load_GL_EXT_bindable_uniform(load);
+	load_GL_EXT_copy_image(load);
+	load_GL_EXT_debug_label(load);
+	load_GL_EXT_debug_marker(load);
+	load_GL_EXT_direct_state_access(load);
+	load_GL_EXT_discard_framebuffer(load);
+	load_GL_EXT_disjoint_timer_query(load);
+	load_GL_EXT_draw_buffers(load);
+	load_GL_EXT_draw_buffers2(load);
+	load_GL_EXT_draw_buffers_indexed(load);
+	load_GL_EXT_draw_instanced(load);
+	load_GL_EXT_framebuffer_blit(load);
+	load_GL_EXT_framebuffer_multisample(load);
+	load_GL_EXT_framebuffer_object(load);
+	load_GL_EXT_geometry_shader(load);
+	load_GL_EXT_geometry_shader4(load);
+	load_GL_EXT_gpu_program_parameters(load);
+	load_GL_EXT_gpu_shader4(load);
+	load_GL_EXT_instanced_arrays(load);
+	load_GL_EXT_map_buffer_range(load);
+	load_GL_EXT_multisampled_render_to_texture(load);
+	load_GL_EXT_multiview_draw_buffers(load);
+	load_GL_EXT_occlusion_query_boolean(load);
+	load_GL_EXT_primitive_bounding_box(load);
+	load_GL_EXT_provoking_vertex(load);
+	load_GL_EXT_robustness(load);
+	load_GL_EXT_separate_shader_objects(load);
+	load_GL_EXT_shader_image_load_store(load);
+	load_GL_EXT_stencil_clear_tag(load);
+	load_GL_EXT_tessellation_shader(load);
+	load_GL_EXT_texture_array(load);
+	load_GL_EXT_texture_border_clamp(load);
+	load_GL_EXT_texture_buffer(load);
+	load_GL_EXT_texture_buffer_object(load);
+	load_GL_EXT_texture_integer(load);
+	load_GL_EXT_texture_storage(load);
+	load_GL_EXT_texture_view(load);
+	load_GL_EXT_timer_query(load);
+	load_GL_EXT_transform_feedback(load);
+	load_GL_EXT_vertex_attrib_64bit(load);
+	load_GL_EXT_x11_sync_object(load);
+	load_GL_OES_EGL_image(load);
+	load_GL_OES_get_program_binary(load);
+	load_GL_OES_mapbuffer(load);
+	load_GL_OES_sample_shading(load);
+	load_GL_OES_texture_3D(load);
+	load_GL_OES_texture_storage_multisample_2d_array(load);
+	load_GL_OES_vertex_array_object(load);
+	load_GL_AMD_debug_output(load);
+	load_GL_AMD_draw_buffers_blend(load);
+	load_GL_AMD_gpu_shader_int64(load);
+	load_GL_AMD_interleaved_elements(load);
+	load_GL_AMD_multi_draw_indirect(load);
+	load_GL_AMD_name_gen_delete(load);
+	load_GL_AMD_occlusion_query_event(load);
+	load_GL_AMD_performance_monitor(load);
+	load_GL_AMD_sample_positions(load);
+	load_GL_AMD_sparse_texture(load);
+	load_GL_AMD_stencil_operation_extended(load);
+	load_GL_AMD_vertex_shader_tessellator(load);
+	load_GL_ANGLE_framebuffer_blit(load);
+	load_GL_ANGLE_framebuffer_multisample(load);
+	load_GL_ANGLE_instanced_arrays(load);
+	load_GL_ANGLE_translated_shader_source(load);
+	load_GL_APPLE_copy_texture_levels(load);
+	load_GL_APPLE_element_array(load);
+	load_GL_APPLE_fence(load);
+	load_GL_APPLE_flush_buffer_range(load);
+	load_GL_APPLE_framebuffer_multisample(load);
+	load_GL_APPLE_object_purgeable(load);
+	load_GL_APPLE_sync(load);
+	load_GL_APPLE_texture_range(load);
+	load_GL_APPLE_vertex_array_object(load);
+	load_GL_APPLE_vertex_array_range(load);
+	load_GL_APPLE_vertex_program_evaluators(load);
+	load_GL_GREMEDY_frame_terminator(load);
+	load_GL_GREMEDY_string_marker(load);
+	load_GL_IMG_multisampled_render_to_texture(load);
+	load_GL_INGR_blend_func_separate(load);
+	load_GL_INTEL_map_texture(load);
+	load_GL_INTEL_performance_query(load);
+	load_GL_NV_bindless_multi_draw_indirect(load);
+	load_GL_NV_bindless_multi_draw_indirect_count(load);
+	load_GL_NV_bindless_texture(load);
+	load_GL_NV_blend_equation_advanced(load);
+	load_GL_NV_conditional_render(load);
+	load_GL_NV_copy_buffer(load);
+	load_GL_NV_copy_image(load);
+	load_GL_NV_coverage_sample(load);
+	load_GL_NV_depth_buffer_float(load);
+	load_GL_NV_draw_buffers(load);
+	load_GL_NV_draw_instanced(load);
+	load_GL_NV_draw_texture(load);
+	load_GL_NV_explicit_multisample(load);
+	load_GL_NV_fence(load);
+	load_GL_NV_framebuffer_blit(load);
+	load_GL_NV_framebuffer_multisample(load);
+	load_GL_NV_framebuffer_multisample_coverage(load);
+	load_GL_NV_geometry_program4(load);
+	load_GL_NV_gpu_program4(load);
+	load_GL_NV_gpu_program5(load);
+	load_GL_NV_gpu_shader5(load);
+	load_GL_NV_half_float(load);
+	load_GL_NV_instanced_arrays(load);
+	load_GL_NV_non_square_matrices(load);
+	load_GL_NV_occlusion_query(load);
+	load_GL_NV_parameter_buffer_object(load);
+	load_GL_NV_path_rendering(load);
+	load_GL_NV_present_video(load);
+	load_GL_NV_primitive_restart(load);
+	load_GL_NV_read_buffer(load);
+	load_GL_NV_shader_buffer_load(load);
+	load_GL_NV_texture_barrier(load);
+	load_GL_NV_texture_multisample(load);
+	load_GL_NV_transform_feedback(load);
+	load_GL_NV_transform_feedback2(load);
+	load_GL_NV_vdpau_interop(load);
+	load_GL_NV_vertex_attrib_integer_64bit(load);
+	load_GL_NV_vertex_buffer_unified_memory(load);
+	load_GL_NV_vertex_program4(load);
+	load_GL_NV_video_capture(load);
+	load_GL_NVX_conditional_render(load);
+	load_GL_QCOM_alpha_test(load);
+	load_GL_QCOM_driver_control(load);
+	load_GL_QCOM_extended_get(load);
+	load_GL_QCOM_extended_get2(load);
+	load_GL_QCOM_tiled_rendering(load);
+	return true;
+}
+
+} /* namespace glad */

+ 8899 - 0
src/libraries/glad/glad.hpp

@@ -0,0 +1,8899 @@
+
+/**
+ * The MIT License (MIT)
+ * 
+ * Copyright (c) 2013 David Herberth, modified by Alex Szpakowski and Bart van Strien
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ **/
+ 
+
+#ifndef __glad_hpp_
+
+#if defined(__gl_h_) || defined(__glext_h_) || defined(__glcorearb_h_) \
+    || defined(__gl3_h) || defined(__gl3_ext_h)
+#error OpenGL header already included, remove this include, glad already provides it
+#endif
+
+#define __glad_hpp_
+#define __gl_h_
+
+#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN 1
+#endif
+#include <windows.h>
+
+#ifdef near
+#undef near
+#endif
+
+#ifdef far
+#undef far
+#endif
+
+#endif
+
+#ifndef APIENTRY
+#define APIENTRY
+#endif
+#ifndef APIENTRYP
+#define APIENTRYP APIENTRY *
+#endif
+#ifndef GLAPI
+#define GLAPI extern
+#endif
+
+// Change by Bart van Strien
+// Move stddef.h outside of the namespace to prevent importing all types into
+// that namespace, breaking compilation further on.
+#include <stddef.h>
+namespace glad {
+
+bool gladLoadGL(void);
+
+typedef void* (* LOADER)(const char *name);
+bool gladLoadGLLoader(LOADER);
+
+
+#ifndef GLEXT_64_TYPES_DEFINED
+/* This code block is duplicated in glxext.h, so must be protected */
+#define GLEXT_64_TYPES_DEFINED
+/* Define int32_t, int64_t, and uint64_t types for UST/MSC */
+/* (as used in the GL_EXT_timer_query extension). */
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#include <inttypes.h>
+#elif defined(__sun__) || defined(__digital__)
+#include <inttypes.h>
+#if defined(__STDC__)
+#if defined(__arch64__) || defined(_LP64)
+typedef long int int64_t;
+typedef unsigned long int uint64_t;
+#else
+typedef long long int int64_t;
+typedef unsigned long long int uint64_t;
+#endif /* __arch64__ */
+#endif /* __STDC__ */
+#elif defined( __VMS ) || defined(__sgi)
+#include <inttypes.h>
+#elif defined(__SCO__) || defined(__USLC__)
+#include <stdint.h>
+#elif defined(__UNIXOS2__) || defined(__SOL64__)
+typedef long int int32_t;
+typedef long long int int64_t;
+typedef unsigned long long int uint64_t;
+#elif defined(_WIN32) && defined(__GNUC__)
+#include <stdint.h>
+#elif defined(_WIN32)
+typedef __int32 int32_t;
+typedef __int64 int64_t;
+typedef unsigned __int64 uint64_t;
+#else
+/* Fallback if nothing above works */
+#include <inttypes.h>
+#endif
+#endif
+typedef unsigned int GLenum;
+typedef unsigned char GLboolean;
+typedef unsigned int GLbitfield;
+typedef void GLvoid;
+typedef signed char GLbyte;
+typedef short GLshort;
+typedef int GLint;
+typedef int GLclampx;
+typedef unsigned char GLubyte;
+typedef unsigned short GLushort;
+typedef unsigned int GLuint;
+typedef int GLsizei;
+typedef float GLfloat;
+typedef float GLclampf;
+typedef double GLdouble;
+typedef double GLclampd;
+typedef void *GLeglImageOES;
+typedef char GLchar;
+typedef char GLcharARB;
+#ifdef __APPLE__
+typedef void *GLhandleARB;
+#else
+typedef unsigned int GLhandleARB;
+#endif
+typedef unsigned short GLhalfARB;
+typedef unsigned short GLhalf;
+typedef GLint GLfixed;
+typedef ptrdiff_t GLintptr;
+typedef ptrdiff_t GLsizeiptr;
+typedef int64_t GLint64;
+typedef uint64_t GLuint64;
+typedef ptrdiff_t GLintptrARB;
+typedef ptrdiff_t GLsizeiptrARB;
+typedef int64_t GLint64EXT;
+typedef uint64_t GLuint64EXT;
+typedef struct __GLsync *GLsync;
+struct _cl_context;
+struct _cl_event;
+typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
+typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
+typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
+typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam);
+typedef unsigned short GLhalfNV;
+typedef GLintptr GLvdpauSurfaceNV;
+
+ /* GL_VERSION_1_0 */
+extern GLboolean GLAD_VERSION_1_0;
+typedef void (APIENTRYP pfn_glCullFace) (GLenum);
+extern pfn_glCullFace fp_glCullFace;
+typedef void (APIENTRYP pfn_glFrontFace) (GLenum);
+extern pfn_glFrontFace fp_glFrontFace;
+typedef void (APIENTRYP pfn_glHint) (GLenum, GLenum);
+extern pfn_glHint fp_glHint;
+typedef void (APIENTRYP pfn_glLineWidth) (GLfloat);
+extern pfn_glLineWidth fp_glLineWidth;
+typedef void (APIENTRYP pfn_glPointSize) (GLfloat);
+extern pfn_glPointSize fp_glPointSize;
+typedef void (APIENTRYP pfn_glPolygonMode) (GLenum, GLenum);
+extern pfn_glPolygonMode fp_glPolygonMode;
+typedef void (APIENTRYP pfn_glScissor) (GLint, GLint, GLsizei, GLsizei);
+extern pfn_glScissor fp_glScissor;
+typedef void (APIENTRYP pfn_glTexParameterf) (GLenum, GLenum, GLfloat);
+extern pfn_glTexParameterf fp_glTexParameterf;
+typedef void (APIENTRYP pfn_glTexParameterfv) (GLenum, GLenum, const GLfloat*);
+extern pfn_glTexParameterfv fp_glTexParameterfv;
+typedef void (APIENTRYP pfn_glTexParameteri) (GLenum, GLenum, GLint);
+extern pfn_glTexParameteri fp_glTexParameteri;
+typedef void (APIENTRYP pfn_glTexParameteriv) (GLenum, GLenum, const GLint*);
+extern pfn_glTexParameteriv fp_glTexParameteriv;
+typedef void (APIENTRYP pfn_glTexImage1D) (GLenum, GLint, GLint, GLsizei, GLint, GLenum, GLenum, const void*);
+extern pfn_glTexImage1D fp_glTexImage1D;
+typedef void (APIENTRYP pfn_glTexImage2D) (GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const void*);
+extern pfn_glTexImage2D fp_glTexImage2D;
+typedef void (APIENTRYP pfn_glDrawBuffer) (GLenum);
+extern pfn_glDrawBuffer fp_glDrawBuffer;
+typedef void (APIENTRYP pfn_glClear) (GLbitfield);
+extern pfn_glClear fp_glClear;
+typedef void (APIENTRYP pfn_glClearColor) (GLfloat, GLfloat, GLfloat, GLfloat);
+extern pfn_glClearColor fp_glClearColor;
+typedef void (APIENTRYP pfn_glClearStencil) (GLint);
+extern pfn_glClearStencil fp_glClearStencil;
+typedef void (APIENTRYP pfn_glClearDepth) (GLdouble);
+extern pfn_glClearDepth fp_glClearDepth;
+typedef void (APIENTRYP pfn_glStencilMask) (GLuint);
+extern pfn_glStencilMask fp_glStencilMask;
+typedef void (APIENTRYP pfn_glColorMask) (GLboolean, GLboolean, GLboolean, GLboolean);
+extern pfn_glColorMask fp_glColorMask;
+typedef void (APIENTRYP pfn_glDepthMask) (GLboolean);
+extern pfn_glDepthMask fp_glDepthMask;
+typedef void (APIENTRYP pfn_glDisable) (GLenum);
+extern pfn_glDisable fp_glDisable;
+typedef void (APIENTRYP pfn_glEnable) (GLenum);
+extern pfn_glEnable fp_glEnable;
+typedef void (APIENTRYP pfn_glFinish) ();
+extern pfn_glFinish fp_glFinish;
+typedef void (APIENTRYP pfn_glFlush) ();
+extern pfn_glFlush fp_glFlush;
+typedef void (APIENTRYP pfn_glBlendFunc) (GLenum, GLenum);
+extern pfn_glBlendFunc fp_glBlendFunc;
+typedef void (APIENTRYP pfn_glLogicOp) (GLenum);
+extern pfn_glLogicOp fp_glLogicOp;
+typedef void (APIENTRYP pfn_glStencilFunc) (GLenum, GLint, GLuint);
+extern pfn_glStencilFunc fp_glStencilFunc;
+typedef void (APIENTRYP pfn_glStencilOp) (GLenum, GLenum, GLenum);
+extern pfn_glStencilOp fp_glStencilOp;
+typedef void (APIENTRYP pfn_glDepthFunc) (GLenum);
+extern pfn_glDepthFunc fp_glDepthFunc;
+typedef void (APIENTRYP pfn_glPixelStoref) (GLenum, GLfloat);
+extern pfn_glPixelStoref fp_glPixelStoref;
+typedef void (APIENTRYP pfn_glPixelStorei) (GLenum, GLint);
+extern pfn_glPixelStorei fp_glPixelStorei;
+typedef void (APIENTRYP pfn_glReadBuffer) (GLenum);
+extern pfn_glReadBuffer fp_glReadBuffer;
+typedef void (APIENTRYP pfn_glReadPixels) (GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, void*);
+extern pfn_glReadPixels fp_glReadPixels;
+typedef void (APIENTRYP pfn_glGetBooleanv) (GLenum, GLboolean*);
+extern pfn_glGetBooleanv fp_glGetBooleanv;
+typedef void (APIENTRYP pfn_glGetDoublev) (GLenum, GLdouble*);
+extern pfn_glGetDoublev fp_glGetDoublev;
+typedef GLenum (APIENTRYP pfn_glGetError) ();
+extern pfn_glGetError fp_glGetError;
+typedef void (APIENTRYP pfn_glGetFloatv) (GLenum, GLfloat*);
+extern pfn_glGetFloatv fp_glGetFloatv;
+typedef void (APIENTRYP pfn_glGetIntegerv) (GLenum, GLint*);
+extern pfn_glGetIntegerv fp_glGetIntegerv;
+typedef const GLubyte* (APIENTRYP pfn_glGetString) (GLenum);
+extern pfn_glGetString fp_glGetString;
+typedef void (APIENTRYP pfn_glGetTexImage) (GLenum, GLint, GLenum, GLenum, void*);
+extern pfn_glGetTexImage fp_glGetTexImage;
+typedef void (APIENTRYP pfn_glGetTexParameterfv) (GLenum, GLenum, GLfloat*);
+extern pfn_glGetTexParameterfv fp_glGetTexParameterfv;
+typedef void (APIENTRYP pfn_glGetTexParameteriv) (GLenum, GLenum, GLint*);
+extern pfn_glGetTexParameteriv fp_glGetTexParameteriv;
+typedef void (APIENTRYP pfn_glGetTexLevelParameterfv) (GLenum, GLint, GLenum, GLfloat*);
+extern pfn_glGetTexLevelParameterfv fp_glGetTexLevelParameterfv;
+typedef void (APIENTRYP pfn_glGetTexLevelParameteriv) (GLenum, GLint, GLenum, GLint*);
+extern pfn_glGetTexLevelParameteriv fp_glGetTexLevelParameteriv;
+typedef GLboolean (APIENTRYP pfn_glIsEnabled) (GLenum);
+extern pfn_glIsEnabled fp_glIsEnabled;
+typedef void (APIENTRYP pfn_glDepthRange) (GLdouble, GLdouble);
+extern pfn_glDepthRange fp_glDepthRange;
+typedef void (APIENTRYP pfn_glViewport) (GLint, GLint, GLsizei, GLsizei);
+extern pfn_glViewport fp_glViewport;
+typedef void (APIENTRYP pfn_glNewList) (GLuint, GLenum);
+extern pfn_glNewList fp_glNewList;
+typedef void (APIENTRYP pfn_glEndList) ();
+extern pfn_glEndList fp_glEndList;
+typedef void (APIENTRYP pfn_glCallList) (GLuint);
+extern pfn_glCallList fp_glCallList;
+typedef void (APIENTRYP pfn_glCallLists) (GLsizei, GLenum, const void*);
+extern pfn_glCallLists fp_glCallLists;
+typedef void (APIENTRYP pfn_glDeleteLists) (GLuint, GLsizei);
+extern pfn_glDeleteLists fp_glDeleteLists;
+typedef GLuint (APIENTRYP pfn_glGenLists) (GLsizei);
+extern pfn_glGenLists fp_glGenLists;
+typedef void (APIENTRYP pfn_glListBase) (GLuint);
+extern pfn_glListBase fp_glListBase;
+typedef void (APIENTRYP pfn_glBegin) (GLenum);
+extern pfn_glBegin fp_glBegin;
+typedef void (APIENTRYP pfn_glBitmap) (GLsizei, GLsizei, GLfloat, GLfloat, GLfloat, GLfloat, const GLubyte*);
+extern pfn_glBitmap fp_glBitmap;
+typedef void (APIENTRYP pfn_glColor3b) (GLbyte, GLbyte, GLbyte);
+extern pfn_glColor3b fp_glColor3b;
+typedef void (APIENTRYP pfn_glColor3bv) (const GLbyte*);
+extern pfn_glColor3bv fp_glColor3bv;
+typedef void (APIENTRYP pfn_glColor3d) (GLdouble, GLdouble, GLdouble);
+extern pfn_glColor3d fp_glColor3d;
+typedef void (APIENTRYP pfn_glColor3dv) (const GLdouble*);
+extern pfn_glColor3dv fp_glColor3dv;
+typedef void (APIENTRYP pfn_glColor3f) (GLfloat, GLfloat, GLfloat);
+extern pfn_glColor3f fp_glColor3f;
+typedef void (APIENTRYP pfn_glColor3fv) (const GLfloat*);
+extern pfn_glColor3fv fp_glColor3fv;
+typedef void (APIENTRYP pfn_glColor3i) (GLint, GLint, GLint);
+extern pfn_glColor3i fp_glColor3i;
+typedef void (APIENTRYP pfn_glColor3iv) (const GLint*);
+extern pfn_glColor3iv fp_glColor3iv;
+typedef void (APIENTRYP pfn_glColor3s) (GLshort, GLshort, GLshort);
+extern pfn_glColor3s fp_glColor3s;
+typedef void (APIENTRYP pfn_glColor3sv) (const GLshort*);
+extern pfn_glColor3sv fp_glColor3sv;
+typedef void (APIENTRYP pfn_glColor3ub) (GLubyte, GLubyte, GLubyte);
+extern pfn_glColor3ub fp_glColor3ub;
+typedef void (APIENTRYP pfn_glColor3ubv) (const GLubyte*);
+extern pfn_glColor3ubv fp_glColor3ubv;
+typedef void (APIENTRYP pfn_glColor3ui) (GLuint, GLuint, GLuint);
+extern pfn_glColor3ui fp_glColor3ui;
+typedef void (APIENTRYP pfn_glColor3uiv) (const GLuint*);
+extern pfn_glColor3uiv fp_glColor3uiv;
+typedef void (APIENTRYP pfn_glColor3us) (GLushort, GLushort, GLushort);
+extern pfn_glColor3us fp_glColor3us;
+typedef void (APIENTRYP pfn_glColor3usv) (const GLushort*);
+extern pfn_glColor3usv fp_glColor3usv;
+typedef void (APIENTRYP pfn_glColor4b) (GLbyte, GLbyte, GLbyte, GLbyte);
+extern pfn_glColor4b fp_glColor4b;
+typedef void (APIENTRYP pfn_glColor4bv) (const GLbyte*);
+extern pfn_glColor4bv fp_glColor4bv;
+typedef void (APIENTRYP pfn_glColor4d) (GLdouble, GLdouble, GLdouble, GLdouble);
+extern pfn_glColor4d fp_glColor4d;
+typedef void (APIENTRYP pfn_glColor4dv) (const GLdouble*);
+extern pfn_glColor4dv fp_glColor4dv;
+typedef void (APIENTRYP pfn_glColor4f) (GLfloat, GLfloat, GLfloat, GLfloat);
+extern pfn_glColor4f fp_glColor4f;
+typedef void (APIENTRYP pfn_glColor4fv) (const GLfloat*);
+extern pfn_glColor4fv fp_glColor4fv;
+typedef void (APIENTRYP pfn_glColor4i) (GLint, GLint, GLint, GLint);
+extern pfn_glColor4i fp_glColor4i;
+typedef void (APIENTRYP pfn_glColor4iv) (const GLint*);
+extern pfn_glColor4iv fp_glColor4iv;
+typedef void (APIENTRYP pfn_glColor4s) (GLshort, GLshort, GLshort, GLshort);
+extern pfn_glColor4s fp_glColor4s;
+typedef void (APIENTRYP pfn_glColor4sv) (const GLshort*);
+extern pfn_glColor4sv fp_glColor4sv;
+typedef void (APIENTRYP pfn_glColor4ub) (GLubyte, GLubyte, GLubyte, GLubyte);
+extern pfn_glColor4ub fp_glColor4ub;
+typedef void (APIENTRYP pfn_glColor4ubv) (const GLubyte*);
+extern pfn_glColor4ubv fp_glColor4ubv;
+typedef void (APIENTRYP pfn_glColor4ui) (GLuint, GLuint, GLuint, GLuint);
+extern pfn_glColor4ui fp_glColor4ui;
+typedef void (APIENTRYP pfn_glColor4uiv) (const GLuint*);
+extern pfn_glColor4uiv fp_glColor4uiv;
+typedef void (APIENTRYP pfn_glColor4us) (GLushort, GLushort, GLushort, GLushort);
+extern pfn_glColor4us fp_glColor4us;
+typedef void (APIENTRYP pfn_glColor4usv) (const GLushort*);
+extern pfn_glColor4usv fp_glColor4usv;
+typedef void (APIENTRYP pfn_glEdgeFlag) (GLboolean);
+extern pfn_glEdgeFlag fp_glEdgeFlag;
+typedef void (APIENTRYP pfn_glEdgeFlagv) (const GLboolean*);
+extern pfn_glEdgeFlagv fp_glEdgeFlagv;
+typedef void (APIENTRYP pfn_glEnd) ();
+extern pfn_glEnd fp_glEnd;
+typedef void (APIENTRYP pfn_glIndexd) (GLdouble);
+extern pfn_glIndexd fp_glIndexd;
+typedef void (APIENTRYP pfn_glIndexdv) (const GLdouble*);
+extern pfn_glIndexdv fp_glIndexdv;
+typedef void (APIENTRYP pfn_glIndexf) (GLfloat);
+extern pfn_glIndexf fp_glIndexf;
+typedef void (APIENTRYP pfn_glIndexfv) (const GLfloat*);
+extern pfn_glIndexfv fp_glIndexfv;
+typedef void (APIENTRYP pfn_glIndexi) (GLint);
+extern pfn_glIndexi fp_glIndexi;
+typedef void (APIENTRYP pfn_glIndexiv) (const GLint*);
+extern pfn_glIndexiv fp_glIndexiv;
+typedef void (APIENTRYP pfn_glIndexs) (GLshort);
+extern pfn_glIndexs fp_glIndexs;
+typedef void (APIENTRYP pfn_glIndexsv) (const GLshort*);
+extern pfn_glIndexsv fp_glIndexsv;
+typedef void (APIENTRYP pfn_glNormal3b) (GLbyte, GLbyte, GLbyte);
+extern pfn_glNormal3b fp_glNormal3b;
+typedef void (APIENTRYP pfn_glNormal3bv) (const GLbyte*);
+extern pfn_glNormal3bv fp_glNormal3bv;
+typedef void (APIENTRYP pfn_glNormal3d) (GLdouble, GLdouble, GLdouble);
+extern pfn_glNormal3d fp_glNormal3d;
+typedef void (APIENTRYP pfn_glNormal3dv) (const GLdouble*);
+extern pfn_glNormal3dv fp_glNormal3dv;
+typedef void (APIENTRYP pfn_glNormal3f) (GLfloat, GLfloat, GLfloat);
+extern pfn_glNormal3f fp_glNormal3f;
+typedef void (APIENTRYP pfn_glNormal3fv) (const GLfloat*);
+extern pfn_glNormal3fv fp_glNormal3fv;
+typedef void (APIENTRYP pfn_glNormal3i) (GLint, GLint, GLint);
+extern pfn_glNormal3i fp_glNormal3i;
+typedef void (APIENTRYP pfn_glNormal3iv) (const GLint*);
+extern pfn_glNormal3iv fp_glNormal3iv;
+typedef void (APIENTRYP pfn_glNormal3s) (GLshort, GLshort, GLshort);
+extern pfn_glNormal3s fp_glNormal3s;
+typedef void (APIENTRYP pfn_glNormal3sv) (const GLshort*);
+extern pfn_glNormal3sv fp_glNormal3sv;
+typedef void (APIENTRYP pfn_glRasterPos2d) (GLdouble, GLdouble);
+extern pfn_glRasterPos2d fp_glRasterPos2d;
+typedef void (APIENTRYP pfn_glRasterPos2dv) (const GLdouble*);
+extern pfn_glRasterPos2dv fp_glRasterPos2dv;
+typedef void (APIENTRYP pfn_glRasterPos2f) (GLfloat, GLfloat);
+extern pfn_glRasterPos2f fp_glRasterPos2f;
+typedef void (APIENTRYP pfn_glRasterPos2fv) (const GLfloat*);
+extern pfn_glRasterPos2fv fp_glRasterPos2fv;
+typedef void (APIENTRYP pfn_glRasterPos2i) (GLint, GLint);
+extern pfn_glRasterPos2i fp_glRasterPos2i;
+typedef void (APIENTRYP pfn_glRasterPos2iv) (const GLint*);
+extern pfn_glRasterPos2iv fp_glRasterPos2iv;
+typedef void (APIENTRYP pfn_glRasterPos2s) (GLshort, GLshort);
+extern pfn_glRasterPos2s fp_glRasterPos2s;
+typedef void (APIENTRYP pfn_glRasterPos2sv) (const GLshort*);
+extern pfn_glRasterPos2sv fp_glRasterPos2sv;
+typedef void (APIENTRYP pfn_glRasterPos3d) (GLdouble, GLdouble, GLdouble);
+extern pfn_glRasterPos3d fp_glRasterPos3d;
+typedef void (APIENTRYP pfn_glRasterPos3dv) (const GLdouble*);
+extern pfn_glRasterPos3dv fp_glRasterPos3dv;
+typedef void (APIENTRYP pfn_glRasterPos3f) (GLfloat, GLfloat, GLfloat);
+extern pfn_glRasterPos3f fp_glRasterPos3f;
+typedef void (APIENTRYP pfn_glRasterPos3fv) (const GLfloat*);
+extern pfn_glRasterPos3fv fp_glRasterPos3fv;
+typedef void (APIENTRYP pfn_glRasterPos3i) (GLint, GLint, GLint);
+extern pfn_glRasterPos3i fp_glRasterPos3i;
+typedef void (APIENTRYP pfn_glRasterPos3iv) (const GLint*);
+extern pfn_glRasterPos3iv fp_glRasterPos3iv;
+typedef void (APIENTRYP pfn_glRasterPos3s) (GLshort, GLshort, GLshort);
+extern pfn_glRasterPos3s fp_glRasterPos3s;
+typedef void (APIENTRYP pfn_glRasterPos3sv) (const GLshort*);
+extern pfn_glRasterPos3sv fp_glRasterPos3sv;
+typedef void (APIENTRYP pfn_glRasterPos4d) (GLdouble, GLdouble, GLdouble, GLdouble);
+extern pfn_glRasterPos4d fp_glRasterPos4d;
+typedef void (APIENTRYP pfn_glRasterPos4dv) (const GLdouble*);
+extern pfn_glRasterPos4dv fp_glRasterPos4dv;
+typedef void (APIENTRYP pfn_glRasterPos4f) (GLfloat, GLfloat, GLfloat, GLfloat);
+extern pfn_glRasterPos4f fp_glRasterPos4f;
+typedef void (APIENTRYP pfn_glRasterPos4fv) (const GLfloat*);
+extern pfn_glRasterPos4fv fp_glRasterPos4fv;
+typedef void (APIENTRYP pfn_glRasterPos4i) (GLint, GLint, GLint, GLint);
+extern pfn_glRasterPos4i fp_glRasterPos4i;
+typedef void (APIENTRYP pfn_glRasterPos4iv) (const GLint*);
+extern pfn_glRasterPos4iv fp_glRasterPos4iv;
+typedef void (APIENTRYP pfn_glRasterPos4s) (GLshort, GLshort, GLshort, GLshort);
+extern pfn_glRasterPos4s fp_glRasterPos4s;
+typedef void (APIENTRYP pfn_glRasterPos4sv) (const GLshort*);
+extern pfn_glRasterPos4sv fp_glRasterPos4sv;
+typedef void (APIENTRYP pfn_glRectd) (GLdouble, GLdouble, GLdouble, GLdouble);
+extern pfn_glRectd fp_glRectd;
+typedef void (APIENTRYP pfn_glRectdv) (const GLdouble*, const GLdouble*);
+extern pfn_glRectdv fp_glRectdv;
+typedef void (APIENTRYP pfn_glRectf) (GLfloat, GLfloat, GLfloat, GLfloat);
+extern pfn_glRectf fp_glRectf;
+typedef void (APIENTRYP pfn_glRectfv) (const GLfloat*, const GLfloat*);
+extern pfn_glRectfv fp_glRectfv;
+typedef void (APIENTRYP pfn_glRecti) (GLint, GLint, GLint, GLint);
+extern pfn_glRecti fp_glRecti;
+typedef void (APIENTRYP pfn_glRectiv) (const GLint*, const GLint*);
+extern pfn_glRectiv fp_glRectiv;
+typedef void (APIENTRYP pfn_glRects) (GLshort, GLshort, GLshort, GLshort);
+extern pfn_glRects fp_glRects;
+typedef void (APIENTRYP pfn_glRectsv) (const GLshort*, const GLshort*);
+extern pfn_glRectsv fp_glRectsv;
+typedef void (APIENTRYP pfn_glTexCoord1d) (GLdouble);
+extern pfn_glTexCoord1d fp_glTexCoord1d;
+typedef void (APIENTRYP pfn_glTexCoord1dv) (const GLdouble*);
+extern pfn_glTexCoord1dv fp_glTexCoord1dv;
+typedef void (APIENTRYP pfn_glTexCoord1f) (GLfloat);
+extern pfn_glTexCoord1f fp_glTexCoord1f;
+typedef void (APIENTRYP pfn_glTexCoord1fv) (const GLfloat*);
+extern pfn_glTexCoord1fv fp_glTexCoord1fv;
+typedef void (APIENTRYP pfn_glTexCoord1i) (GLint);
+extern pfn_glTexCoord1i fp_glTexCoord1i;
+typedef void (APIENTRYP pfn_glTexCoord1iv) (const GLint*);
+extern pfn_glTexCoord1iv fp_glTexCoord1iv;
+typedef void (APIENTRYP pfn_glTexCoord1s) (GLshort);
+extern pfn_glTexCoord1s fp_glTexCoord1s;
+typedef void (APIENTRYP pfn_glTexCoord1sv) (const GLshort*);
+extern pfn_glTexCoord1sv fp_glTexCoord1sv;
+typedef void (APIENTRYP pfn_glTexCoord2d) (GLdouble, GLdouble);
+extern pfn_glTexCoord2d fp_glTexCoord2d;
+typedef void (APIENTRYP pfn_glTexCoord2dv) (const GLdouble*);
+extern pfn_glTexCoord2dv fp_glTexCoord2dv;
+typedef void (APIENTRYP pfn_glTexCoord2f) (GLfloat, GLfloat);
+extern pfn_glTexCoord2f fp_glTexCoord2f;
+typedef void (APIENTRYP pfn_glTexCoord2fv) (const GLfloat*);
+extern pfn_glTexCoord2fv fp_glTexCoord2fv;
+typedef void (APIENTRYP pfn_glTexCoord2i) (GLint, GLint);
+extern pfn_glTexCoord2i fp_glTexCoord2i;
+typedef void (APIENTRYP pfn_glTexCoord2iv) (const GLint*);
+extern pfn_glTexCoord2iv fp_glTexCoord2iv;
+typedef void (APIENTRYP pfn_glTexCoord2s) (GLshort, GLshort);
+extern pfn_glTexCoord2s fp_glTexCoord2s;
+typedef void (APIENTRYP pfn_glTexCoord2sv) (const GLshort*);
+extern pfn_glTexCoord2sv fp_glTexCoord2sv;
+typedef void (APIENTRYP pfn_glTexCoord3d) (GLdouble, GLdouble, GLdouble);
+extern pfn_glTexCoord3d fp_glTexCoord3d;
+typedef void (APIENTRYP pfn_glTexCoord3dv) (const GLdouble*);
+extern pfn_glTexCoord3dv fp_glTexCoord3dv;
+typedef void (APIENTRYP pfn_glTexCoord3f) (GLfloat, GLfloat, GLfloat);
+extern pfn_glTexCoord3f fp_glTexCoord3f;
+typedef void (APIENTRYP pfn_glTexCoord3fv) (const GLfloat*);
+extern pfn_glTexCoord3fv fp_glTexCoord3fv;
+typedef void (APIENTRYP pfn_glTexCoord3i) (GLint, GLint, GLint);
+extern pfn_glTexCoord3i fp_glTexCoord3i;
+typedef void (APIENTRYP pfn_glTexCoord3iv) (const GLint*);
+extern pfn_glTexCoord3iv fp_glTexCoord3iv;
+typedef void (APIENTRYP pfn_glTexCoord3s) (GLshort, GLshort, GLshort);
+extern pfn_glTexCoord3s fp_glTexCoord3s;
+typedef void (APIENTRYP pfn_glTexCoord3sv) (const GLshort*);
+extern pfn_glTexCoord3sv fp_glTexCoord3sv;
+typedef void (APIENTRYP pfn_glTexCoord4d) (GLdouble, GLdouble, GLdouble, GLdouble);
+extern pfn_glTexCoord4d fp_glTexCoord4d;
+typedef void (APIENTRYP pfn_glTexCoord4dv) (const GLdouble*);
+extern pfn_glTexCoord4dv fp_glTexCoord4dv;
+typedef void (APIENTRYP pfn_glTexCoord4f) (GLfloat, GLfloat, GLfloat, GLfloat);
+extern pfn_glTexCoord4f fp_glTexCoord4f;
+typedef void (APIENTRYP pfn_glTexCoord4fv) (const GLfloat*);
+extern pfn_glTexCoord4fv fp_glTexCoord4fv;
+typedef void (APIENTRYP pfn_glTexCoord4i) (GLint, GLint, GLint, GLint);
+extern pfn_glTexCoord4i fp_glTexCoord4i;
+typedef void (APIENTRYP pfn_glTexCoord4iv) (const GLint*);
+extern pfn_glTexCoord4iv fp_glTexCoord4iv;
+typedef void (APIENTRYP pfn_glTexCoord4s) (GLshort, GLshort, GLshort, GLshort);
+extern pfn_glTexCoord4s fp_glTexCoord4s;
+typedef void (APIENTRYP pfn_glTexCoord4sv) (const GLshort*);
+extern pfn_glTexCoord4sv fp_glTexCoord4sv;
+typedef void (APIENTRYP pfn_glVertex2d) (GLdouble, GLdouble);
+extern pfn_glVertex2d fp_glVertex2d;
+typedef void (APIENTRYP pfn_glVertex2dv) (const GLdouble*);
+extern pfn_glVertex2dv fp_glVertex2dv;
+typedef void (APIENTRYP pfn_glVertex2f) (GLfloat, GLfloat);
+extern pfn_glVertex2f fp_glVertex2f;
+typedef void (APIENTRYP pfn_glVertex2fv) (const GLfloat*);
+extern pfn_glVertex2fv fp_glVertex2fv;
+typedef void (APIENTRYP pfn_glVertex2i) (GLint, GLint);
+extern pfn_glVertex2i fp_glVertex2i;
+typedef void (APIENTRYP pfn_glVertex2iv) (const GLint*);
+extern pfn_glVertex2iv fp_glVertex2iv;
+typedef void (APIENTRYP pfn_glVertex2s) (GLshort, GLshort);
+extern pfn_glVertex2s fp_glVertex2s;
+typedef void (APIENTRYP pfn_glVertex2sv) (const GLshort*);
+extern pfn_glVertex2sv fp_glVertex2sv;
+typedef void (APIENTRYP pfn_glVertex3d) (GLdouble, GLdouble, GLdouble);
+extern pfn_glVertex3d fp_glVertex3d;
+typedef void (APIENTRYP pfn_glVertex3dv) (const GLdouble*);
+extern pfn_glVertex3dv fp_glVertex3dv;
+typedef void (APIENTRYP pfn_glVertex3f) (GLfloat, GLfloat, GLfloat);
+extern pfn_glVertex3f fp_glVertex3f;
+typedef void (APIENTRYP pfn_glVertex3fv) (const GLfloat*);
+extern pfn_glVertex3fv fp_glVertex3fv;
+typedef void (APIENTRYP pfn_glVertex3i) (GLint, GLint, GLint);
+extern pfn_glVertex3i fp_glVertex3i;
+typedef void (APIENTRYP pfn_glVertex3iv) (const GLint*);
+extern pfn_glVertex3iv fp_glVertex3iv;
+typedef void (APIENTRYP pfn_glVertex3s) (GLshort, GLshort, GLshort);
+extern pfn_glVertex3s fp_glVertex3s;
+typedef void (APIENTRYP pfn_glVertex3sv) (const GLshort*);
+extern pfn_glVertex3sv fp_glVertex3sv;
+typedef void (APIENTRYP pfn_glVertex4d) (GLdouble, GLdouble, GLdouble, GLdouble);
+extern pfn_glVertex4d fp_glVertex4d;
+typedef void (APIENTRYP pfn_glVertex4dv) (const GLdouble*);
+extern pfn_glVertex4dv fp_glVertex4dv;
+typedef void (APIENTRYP pfn_glVertex4f) (GLfloat, GLfloat, GLfloat, GLfloat);
+extern pfn_glVertex4f fp_glVertex4f;
+typedef void (APIENTRYP pfn_glVertex4fv) (const GLfloat*);
+extern pfn_glVertex4fv fp_glVertex4fv;
+typedef void (APIENTRYP pfn_glVertex4i) (GLint, GLint, GLint, GLint);
+extern pfn_glVertex4i fp_glVertex4i;
+typedef void (APIENTRYP pfn_glVertex4iv) (const GLint*);
+extern pfn_glVertex4iv fp_glVertex4iv;
+typedef void (APIENTRYP pfn_glVertex4s) (GLshort, GLshort, GLshort, GLshort);
+extern pfn_glVertex4s fp_glVertex4s;
+typedef void (APIENTRYP pfn_glVertex4sv) (const GLshort*);
+extern pfn_glVertex4sv fp_glVertex4sv;
+typedef void (APIENTRYP pfn_glClipPlane) (GLenum, const GLdouble*);
+extern pfn_glClipPlane fp_glClipPlane;
+typedef void (APIENTRYP pfn_glColorMaterial) (GLenum, GLenum);
+extern pfn_glColorMaterial fp_glColorMaterial;
+typedef void (APIENTRYP pfn_glFogf) (GLenum, GLfloat);
+extern pfn_glFogf fp_glFogf;
+typedef void (APIENTRYP pfn_glFogfv) (GLenum, const GLfloat*);
+extern pfn_glFogfv fp_glFogfv;
+typedef void (APIENTRYP pfn_glFogi) (GLenum, GLint);
+extern pfn_glFogi fp_glFogi;
+typedef void (APIENTRYP pfn_glFogiv) (GLenum, const GLint*);
+extern pfn_glFogiv fp_glFogiv;
+typedef void (APIENTRYP pfn_glLightf) (GLenum, GLenum, GLfloat);
+extern pfn_glLightf fp_glLightf;
+typedef void (APIENTRYP pfn_glLightfv) (GLenum, GLenum, const GLfloat*);
+extern pfn_glLightfv fp_glLightfv;
+typedef void (APIENTRYP pfn_glLighti) (GLenum, GLenum, GLint);
+extern pfn_glLighti fp_glLighti;
+typedef void (APIENTRYP pfn_glLightiv) (GLenum, GLenum, const GLint*);
+extern pfn_glLightiv fp_glLightiv;
+typedef void (APIENTRYP pfn_glLightModelf) (GLenum, GLfloat);
+extern pfn_glLightModelf fp_glLightModelf;
+typedef void (APIENTRYP pfn_glLightModelfv) (GLenum, const GLfloat*);
+extern pfn_glLightModelfv fp_glLightModelfv;
+typedef void (APIENTRYP pfn_glLightModeli) (GLenum, GLint);
+extern pfn_glLightModeli fp_glLightModeli;
+typedef void (APIENTRYP pfn_glLightModeliv) (GLenum, const GLint*);
+extern pfn_glLightModeliv fp_glLightModeliv;
+typedef void (APIENTRYP pfn_glLineStipple) (GLint, GLushort);
+extern pfn_glLineStipple fp_glLineStipple;
+typedef void (APIENTRYP pfn_glMaterialf) (GLenum, GLenum, GLfloat);
+extern pfn_glMaterialf fp_glMaterialf;
+typedef void (APIENTRYP pfn_glMaterialfv) (GLenum, GLenum, const GLfloat*);
+extern pfn_glMaterialfv fp_glMaterialfv;
+typedef void (APIENTRYP pfn_glMateriali) (GLenum, GLenum, GLint);
+extern pfn_glMateriali fp_glMateriali;
+typedef void (APIENTRYP pfn_glMaterialiv) (GLenum, GLenum, const GLint*);
+extern pfn_glMaterialiv fp_glMaterialiv;
+typedef void (APIENTRYP pfn_glPolygonStipple) (const GLubyte*);
+extern pfn_glPolygonStipple fp_glPolygonStipple;
+typedef void (APIENTRYP pfn_glShadeModel) (GLenum);
+extern pfn_glShadeModel fp_glShadeModel;
+typedef void (APIENTRYP pfn_glTexEnvf) (GLenum, GLenum, GLfloat);
+extern pfn_glTexEnvf fp_glTexEnvf;
+typedef void (APIENTRYP pfn_glTexEnvfv) (GLenum, GLenum, const GLfloat*);
+extern pfn_glTexEnvfv fp_glTexEnvfv;
+typedef void (APIENTRYP pfn_glTexEnvi) (GLenum, GLenum, GLint);
+extern pfn_glTexEnvi fp_glTexEnvi;
+typedef void (APIENTRYP pfn_glTexEnviv) (GLenum, GLenum, const GLint*);
+extern pfn_glTexEnviv fp_glTexEnviv;
+typedef void (APIENTRYP pfn_glTexGend) (GLenum, GLenum, GLdouble);
+extern pfn_glTexGend fp_glTexGend;
+typedef void (APIENTRYP pfn_glTexGendv) (GLenum, GLenum, const GLdouble*);
+extern pfn_glTexGendv fp_glTexGendv;
+typedef void (APIENTRYP pfn_glTexGenf) (GLenum, GLenum, GLfloat);
+extern pfn_glTexGenf fp_glTexGenf;
+typedef void (APIENTRYP pfn_glTexGenfv) (GLenum, GLenum, const GLfloat*);
+extern pfn_glTexGenfv fp_glTexGenfv;
+typedef void (APIENTRYP pfn_glTexGeni) (GLenum, GLenum, GLint);
+extern pfn_glTexGeni fp_glTexGeni;
+typedef void (APIENTRYP pfn_glTexGeniv) (GLenum, GLenum, const GLint*);
+extern pfn_glTexGeniv fp_glTexGeniv;
+typedef void (APIENTRYP pfn_glFeedbackBuffer) (GLsizei, GLenum, GLfloat*);
+extern pfn_glFeedbackBuffer fp_glFeedbackBuffer;
+typedef void (APIENTRYP pfn_glSelectBuffer) (GLsizei, GLuint*);
+extern pfn_glSelectBuffer fp_glSelectBuffer;
+typedef GLint (APIENTRYP pfn_glRenderMode) (GLenum);
+extern pfn_glRenderMode fp_glRenderMode;
+typedef void (APIENTRYP pfn_glInitNames) ();
+extern pfn_glInitNames fp_glInitNames;
+typedef void (APIENTRYP pfn_glLoadName) (GLuint);
+extern pfn_glLoadName fp_glLoadName;
+typedef void (APIENTRYP pfn_glPassThrough) (GLfloat);
+extern pfn_glPassThrough fp_glPassThrough;
+typedef void (APIENTRYP pfn_glPopName) ();
+extern pfn_glPopName fp_glPopName;
+typedef void (APIENTRYP pfn_glPushName) (GLuint);
+extern pfn_glPushName fp_glPushName;
+typedef void (APIENTRYP pfn_glClearAccum) (GLfloat, GLfloat, GLfloat, GLfloat);
+extern pfn_glClearAccum fp_glClearAccum;
+typedef void (APIENTRYP pfn_glClearIndex) (GLfloat);
+extern pfn_glClearIndex fp_glClearIndex;
+typedef void (APIENTRYP pfn_glIndexMask) (GLuint);
+extern pfn_glIndexMask fp_glIndexMask;
+typedef void (APIENTRYP pfn_glAccum) (GLenum, GLfloat);
+extern pfn_glAccum fp_glAccum;
+typedef void (APIENTRYP pfn_glPopAttrib) ();
+extern pfn_glPopAttrib fp_glPopAttrib;
+typedef void (APIENTRYP pfn_glPushAttrib) (GLbitfield);
+extern pfn_glPushAttrib fp_glPushAttrib;
+typedef void (APIENTRYP pfn_glMap1d) (GLenum, GLdouble, GLdouble, GLint, GLint, const GLdouble*);
+extern pfn_glMap1d fp_glMap1d;
+typedef void (APIENTRYP pfn_glMap1f) (GLenum, GLfloat, GLfloat, GLint, GLint, const GLfloat*);
+extern pfn_glMap1f fp_glMap1f;
+typedef void (APIENTRYP pfn_glMap2d) (GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, const GLdouble*);
+extern pfn_glMap2d fp_glMap2d;
+typedef void (APIENTRYP pfn_glMap2f) (GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, const GLfloat*);
+extern pfn_glMap2f fp_glMap2f;
+typedef void (APIENTRYP pfn_glMapGrid1d) (GLint, GLdouble, GLdouble);
+extern pfn_glMapGrid1d fp_glMapGrid1d;
+typedef void (APIENTRYP pfn_glMapGrid1f) (GLint, GLfloat, GLfloat);
+extern pfn_glMapGrid1f fp_glMapGrid1f;
+typedef void (APIENTRYP pfn_glMapGrid2d) (GLint, GLdouble, GLdouble, GLint, GLdouble, GLdouble);
+extern pfn_glMapGrid2d fp_glMapGrid2d;
+typedef void (APIENTRYP pfn_glMapGrid2f) (GLint, GLfloat, GLfloat, GLint, GLfloat, GLfloat);
+extern pfn_glMapGrid2f fp_glMapGrid2f;
+typedef void (APIENTRYP pfn_glEvalCoord1d) (GLdouble);
+extern pfn_glEvalCoord1d fp_glEvalCoord1d;
+typedef void (APIENTRYP pfn_glEvalCoord1dv) (const GLdouble*);
+extern pfn_glEvalCoord1dv fp_glEvalCoord1dv;
+typedef void (APIENTRYP pfn_glEvalCoord1f) (GLfloat);
+extern pfn_glEvalCoord1f fp_glEvalCoord1f;
+typedef void (APIENTRYP pfn_glEvalCoord1fv) (const GLfloat*);
+extern pfn_glEvalCoord1fv fp_glEvalCoord1fv;
+typedef void (APIENTRYP pfn_glEvalCoord2d) (GLdouble, GLdouble);
+extern pfn_glEvalCoord2d fp_glEvalCoord2d;
+typedef void (APIENTRYP pfn_glEvalCoord2dv) (const GLdouble*);
+extern pfn_glEvalCoord2dv fp_glEvalCoord2dv;
+typedef void (APIENTRYP pfn_glEvalCoord2f) (GLfloat, GLfloat);
+extern pfn_glEvalCoord2f fp_glEvalCoord2f;
+typedef void (APIENTRYP pfn_glEvalCoord2fv) (const GLfloat*);
+extern pfn_glEvalCoord2fv fp_glEvalCoord2fv;
+typedef void (APIENTRYP pfn_glEvalMesh1) (GLenum, GLint, GLint);
+extern pfn_glEvalMesh1 fp_glEvalMesh1;
+typedef void (APIENTRYP pfn_glEvalPoint1) (GLint);
+extern pfn_glEvalPoint1 fp_glEvalPoint1;
+typedef void (APIENTRYP pfn_glEvalMesh2) (GLenum, GLint, GLint, GLint, GLint);
+extern pfn_glEvalMesh2 fp_glEvalMesh2;
+typedef void (APIENTRYP pfn_glEvalPoint2) (GLint, GLint);
+extern pfn_glEvalPoint2 fp_glEvalPoint2;
+typedef void (APIENTRYP pfn_glAlphaFunc) (GLenum, GLfloat);
+extern pfn_glAlphaFunc fp_glAlphaFunc;
+typedef void (APIENTRYP pfn_glPixelZoom) (GLfloat, GLfloat);
+extern pfn_glPixelZoom fp_glPixelZoom;
+typedef void (APIENTRYP pfn_glPixelTransferf) (GLenum, GLfloat);
+extern pfn_glPixelTransferf fp_glPixelTransferf;
+typedef void (APIENTRYP pfn_glPixelTransferi) (GLenum, GLint);
+extern pfn_glPixelTransferi fp_glPixelTransferi;
+typedef void (APIENTRYP pfn_glPixelMapfv) (GLenum, GLsizei, const GLfloat*);
+extern pfn_glPixelMapfv fp_glPixelMapfv;
+typedef void (APIENTRYP pfn_glPixelMapuiv) (GLenum, GLsizei, const GLuint*);
+extern pfn_glPixelMapuiv fp_glPixelMapuiv;
+typedef void (APIENTRYP pfn_glPixelMapusv) (GLenum, GLsizei, const GLushort*);
+extern pfn_glPixelMapusv fp_glPixelMapusv;
+typedef void (APIENTRYP pfn_glCopyPixels) (GLint, GLint, GLsizei, GLsizei, GLenum);
+extern pfn_glCopyPixels fp_glCopyPixels;
+typedef void (APIENTRYP pfn_glDrawPixels) (GLsizei, GLsizei, GLenum, GLenum, const void*);
+extern pfn_glDrawPixels fp_glDrawPixels;
+typedef void (APIENTRYP pfn_glGetClipPlane) (GLenum, GLdouble*);
+extern pfn_glGetClipPlane fp_glGetClipPlane;
+typedef void (APIENTRYP pfn_glGetLightfv) (GLenum, GLenum, GLfloat*);
+extern pfn_glGetLightfv fp_glGetLightfv;
+typedef void (APIENTRYP pfn_glGetLightiv) (GLenum, GLenum, GLint*);
+extern pfn_glGetLightiv fp_glGetLightiv;
+typedef void (APIENTRYP pfn_glGetMapdv) (GLenum, GLenum, GLdouble*);
+extern pfn_glGetMapdv fp_glGetMapdv;
+typedef void (APIENTRYP pfn_glGetMapfv) (GLenum, GLenum, GLfloat*);
+extern pfn_glGetMapfv fp_glGetMapfv;
+typedef void (APIENTRYP pfn_glGetMapiv) (GLenum, GLenum, GLint*);
+extern pfn_glGetMapiv fp_glGetMapiv;
+typedef void (APIENTRYP pfn_glGetMaterialfv) (GLenum, GLenum, GLfloat*);
+extern pfn_glGetMaterialfv fp_glGetMaterialfv;
+typedef void (APIENTRYP pfn_glGetMaterialiv) (GLenum, GLenum, GLint*);
+extern pfn_glGetMaterialiv fp_glGetMaterialiv;
+typedef void (APIENTRYP pfn_glGetPixelMapfv) (GLenum, GLfloat*);
+extern pfn_glGetPixelMapfv fp_glGetPixelMapfv;
+typedef void (APIENTRYP pfn_glGetPixelMapuiv) (GLenum, GLuint*);
+extern pfn_glGetPixelMapuiv fp_glGetPixelMapuiv;
+typedef void (APIENTRYP pfn_glGetPixelMapusv) (GLenum, GLushort*);
+extern pfn_glGetPixelMapusv fp_glGetPixelMapusv;
+typedef void (APIENTRYP pfn_glGetPolygonStipple) (GLubyte*);
+extern pfn_glGetPolygonStipple fp_glGetPolygonStipple;
+typedef void (APIENTRYP pfn_glGetTexEnvfv) (GLenum, GLenum, GLfloat*);
+extern pfn_glGetTexEnvfv fp_glGetTexEnvfv;
+typedef void (APIENTRYP pfn_glGetTexEnviv) (GLenum, GLenum, GLint*);
+extern pfn_glGetTexEnviv fp_glGetTexEnviv;
+typedef void (APIENTRYP pfn_glGetTexGendv) (GLenum, GLenum, GLdouble*);
+extern pfn_glGetTexGendv fp_glGetTexGendv;
+typedef void (APIENTRYP pfn_glGetTexGenfv) (GLenum, GLenum, GLfloat*);
+extern pfn_glGetTexGenfv fp_glGetTexGenfv;
+typedef void (APIENTRYP pfn_glGetTexGeniv) (GLenum, GLenum, GLint*);
+extern pfn_glGetTexGeniv fp_glGetTexGeniv;
+typedef GLboolean (APIENTRYP pfn_glIsList) (GLuint);
+extern pfn_glIsList fp_glIsList;
+typedef void (APIENTRYP pfn_glFrustum) (GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble);
+extern pfn_glFrustum fp_glFrustum;
+typedef void (APIENTRYP pfn_glLoadIdentity) ();
+extern pfn_glLoadIdentity fp_glLoadIdentity;
+typedef void (APIENTRYP pfn_glLoadMatrixf) (const GLfloat*);
+extern pfn_glLoadMatrixf fp_glLoadMatrixf;
+typedef void (APIENTRYP pfn_glLoadMatrixd) (const GLdouble*);
+extern pfn_glLoadMatrixd fp_glLoadMatrixd;
+typedef void (APIENTRYP pfn_glMatrixMode) (GLenum);
+extern pfn_glMatrixMode fp_glMatrixMode;
+typedef void (APIENTRYP pfn_glMultMatrixf) (const GLfloat*);
+extern pfn_glMultMatrixf fp_glMultMatrixf;
+typedef void (APIENTRYP pfn_glMultMatrixd) (const GLdouble*);
+extern pfn_glMultMatrixd fp_glMultMatrixd;
+typedef void (APIENTRYP pfn_glOrtho) (GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble);
+extern pfn_glOrtho fp_glOrtho;
+typedef void (APIENTRYP pfn_glPopMatrix) ();
+extern pfn_glPopMatrix fp_glPopMatrix;
+typedef void (APIENTRYP pfn_glPushMatrix) ();
+extern pfn_glPushMatrix fp_glPushMatrix;
+typedef void (APIENTRYP pfn_glRotated) (GLdouble, GLdouble, GLdouble, GLdouble);
+extern pfn_glRotated fp_glRotated;
+typedef void (APIENTRYP pfn_glRotatef) (GLfloat, GLfloat, GLfloat, GLfloat);
+extern pfn_glRotatef fp_glRotatef;
+typedef void (APIENTRYP pfn_glScaled) (GLdouble, GLdouble, GLdouble);
+extern pfn_glScaled fp_glScaled;
+typedef void (APIENTRYP pfn_glScalef) (GLfloat, GLfloat, GLfloat);
+extern pfn_glScalef fp_glScalef;
+typedef void (APIENTRYP pfn_glTranslated) (GLdouble, GLdouble, GLdouble);
+extern pfn_glTranslated fp_glTranslated;
+typedef void (APIENTRYP pfn_glTranslatef) (GLfloat, GLfloat, GLfloat);
+extern pfn_glTranslatef fp_glTranslatef;
+
+ /* GL_VERSION_1_1 */
+extern GLboolean GLAD_VERSION_1_1;
+#define GL_DEPTH_BUFFER_BIT                    0x00000100
+#define GL_STENCIL_BUFFER_BIT                  0x00000400
+#define GL_COLOR_BUFFER_BIT                    0x00004000
+#define GL_FALSE                               0
+#define GL_TRUE                                1
+#define GL_POINTS                              0x0000
+#define GL_LINES                               0x0001
+#define GL_LINE_LOOP                           0x0002
+#define GL_LINE_STRIP                          0x0003
+#define GL_TRIANGLES                           0x0004
+#define GL_TRIANGLE_STRIP                      0x0005
+#define GL_TRIANGLE_FAN                        0x0006
+#define GL_QUADS                               0x0007
+#define GL_NEVER                               0x0200
+#define GL_LESS                                0x0201
+#define GL_EQUAL                               0x0202
+#define GL_LEQUAL                              0x0203
+#define GL_GREATER                             0x0204
+#define GL_NOTEQUAL                            0x0205
+#define GL_GEQUAL                              0x0206
+#define GL_ALWAYS                              0x0207
+#define GL_ZERO                                0
+#define GL_ONE                                 1
+#define GL_SRC_COLOR                           0x0300
+#define GL_ONE_MINUS_SRC_COLOR                 0x0301
+#define GL_SRC_ALPHA                           0x0302
+#define GL_ONE_MINUS_SRC_ALPHA                 0x0303
+#define GL_DST_ALPHA                           0x0304
+#define GL_ONE_MINUS_DST_ALPHA                 0x0305
+#define GL_DST_COLOR                           0x0306
+#define GL_ONE_MINUS_DST_COLOR                 0x0307
+#define GL_SRC_ALPHA_SATURATE                  0x0308
+#define GL_NONE                                0
+#define GL_FRONT_LEFT                          0x0400
+#define GL_FRONT_RIGHT                         0x0401
+#define GL_BACK_LEFT                           0x0402
+#define GL_BACK_RIGHT                          0x0403
+#define GL_FRONT                               0x0404
+#define GL_BACK                                0x0405
+#define GL_LEFT                                0x0406
+#define GL_RIGHT                               0x0407
+#define GL_FRONT_AND_BACK                      0x0408
+#define GL_NO_ERROR                            0
+#define GL_INVALID_ENUM                        0x0500
+#define GL_INVALID_VALUE                       0x0501
+#define GL_INVALID_OPERATION                   0x0502
+#define GL_OUT_OF_MEMORY                       0x0505
+#define GL_CW                                  0x0900
+#define GL_CCW                                 0x0901
+#define GL_POINT_SIZE                          0x0B11
+#define GL_POINT_SIZE_RANGE                    0x0B12
+#define GL_POINT_SIZE_GRANULARITY              0x0B13
+#define GL_LINE_SMOOTH                         0x0B20
+#define GL_LINE_WIDTH                          0x0B21
+#define GL_LINE_WIDTH_RANGE                    0x0B22
+#define GL_LINE_WIDTH_GRANULARITY              0x0B23
+#define GL_POLYGON_MODE                        0x0B40
+#define GL_POLYGON_SMOOTH                      0x0B41
+#define GL_CULL_FACE                           0x0B44
+#define GL_CULL_FACE_MODE                      0x0B45
+#define GL_FRONT_FACE                          0x0B46
+#define GL_DEPTH_RANGE                         0x0B70
+#define GL_DEPTH_TEST                          0x0B71
+#define GL_DEPTH_WRITEMASK                     0x0B72
+#define GL_DEPTH_CLEAR_VALUE                   0x0B73
+#define GL_DEPTH_FUNC                          0x0B74
+#define GL_STENCIL_TEST                        0x0B90
+#define GL_STENCIL_CLEAR_VALUE                 0x0B91
+#define GL_STENCIL_FUNC                        0x0B92
+#define GL_STENCIL_VALUE_MASK                  0x0B93
+#define GL_STENCIL_FAIL                        0x0B94
+#define GL_STENCIL_PASS_DEPTH_FAIL             0x0B95
+#define GL_STENCIL_PASS_DEPTH_PASS             0x0B96
+#define GL_STENCIL_REF                         0x0B97
+#define GL_STENCIL_WRITEMASK                   0x0B98
+#define GL_VIEWPORT                            0x0BA2
+#define GL_DITHER                              0x0BD0
+#define GL_BLEND_DST                           0x0BE0
+#define GL_BLEND_SRC                           0x0BE1
+#define GL_BLEND                               0x0BE2
+#define GL_LOGIC_OP_MODE                       0x0BF0
+#define GL_COLOR_LOGIC_OP                      0x0BF2
+#define GL_DRAW_BUFFER                         0x0C01
+#define GL_READ_BUFFER                         0x0C02
+#define GL_SCISSOR_BOX                         0x0C10
+#define GL_SCISSOR_TEST                        0x0C11
+#define GL_COLOR_CLEAR_VALUE                   0x0C22
+#define GL_COLOR_WRITEMASK                     0x0C23
+#define GL_DOUBLEBUFFER                        0x0C32
+#define GL_STEREO                              0x0C33
+#define GL_LINE_SMOOTH_HINT                    0x0C52
+#define GL_POLYGON_SMOOTH_HINT                 0x0C53
+#define GL_UNPACK_SWAP_BYTES                   0x0CF0
+#define GL_UNPACK_LSB_FIRST                    0x0CF1
+#define GL_UNPACK_ROW_LENGTH                   0x0CF2
+#define GL_UNPACK_SKIP_ROWS                    0x0CF3
+#define GL_UNPACK_SKIP_PIXELS                  0x0CF4
+#define GL_UNPACK_ALIGNMENT                    0x0CF5
+#define GL_PACK_SWAP_BYTES                     0x0D00
+#define GL_PACK_LSB_FIRST                      0x0D01
+#define GL_PACK_ROW_LENGTH                     0x0D02
+#define GL_PACK_SKIP_ROWS                      0x0D03
+#define GL_PACK_SKIP_PIXELS                    0x0D04
+#define GL_PACK_ALIGNMENT                      0x0D05
+#define GL_MAX_TEXTURE_SIZE                    0x0D33
+#define GL_MAX_VIEWPORT_DIMS                   0x0D3A
+#define GL_SUBPIXEL_BITS                       0x0D50
+#define GL_TEXTURE_1D                          0x0DE0
+#define GL_TEXTURE_2D                          0x0DE1
+#define GL_POLYGON_OFFSET_UNITS                0x2A00
+#define GL_POLYGON_OFFSET_POINT                0x2A01
+#define GL_POLYGON_OFFSET_LINE                 0x2A02
+#define GL_POLYGON_OFFSET_FILL                 0x8037
+#define GL_POLYGON_OFFSET_FACTOR               0x8038
+#define GL_TEXTURE_BINDING_1D                  0x8068
+#define GL_TEXTURE_BINDING_2D                  0x8069
+#define GL_TEXTURE_WIDTH                       0x1000
+#define GL_TEXTURE_HEIGHT                      0x1001
+#define GL_TEXTURE_INTERNAL_FORMAT             0x1003
+#define GL_TEXTURE_BORDER_COLOR                0x1004
+#define GL_TEXTURE_RED_SIZE                    0x805C
+#define GL_TEXTURE_GREEN_SIZE                  0x805D
+#define GL_TEXTURE_BLUE_SIZE                   0x805E
+#define GL_TEXTURE_ALPHA_SIZE                  0x805F
+#define GL_DONT_CARE                           0x1100
+#define GL_FASTEST                             0x1101
+#define GL_NICEST                              0x1102
+#define GL_BYTE                                0x1400
+#define GL_UNSIGNED_BYTE                       0x1401
+#define GL_SHORT                               0x1402
+#define GL_UNSIGNED_SHORT                      0x1403
+#define GL_INT                                 0x1404
+#define GL_UNSIGNED_INT                        0x1405
+#define GL_FLOAT                               0x1406
+#define GL_DOUBLE                              0x140A
+#define GL_STACK_OVERFLOW                      0x0503
+#define GL_STACK_UNDERFLOW                     0x0504
+#define GL_CLEAR                               0x1500
+#define GL_AND                                 0x1501
+#define GL_AND_REVERSE                         0x1502
+#define GL_COPY                                0x1503
+#define GL_AND_INVERTED                        0x1504
+#define GL_NOOP                                0x1505
+#define GL_XOR                                 0x1506
+#define GL_OR                                  0x1507
+#define GL_NOR                                 0x1508
+#define GL_EQUIV                               0x1509
+#define GL_INVERT                              0x150A
+#define GL_OR_REVERSE                          0x150B
+#define GL_COPY_INVERTED                       0x150C
+#define GL_OR_INVERTED                         0x150D
+#define GL_NAND                                0x150E
+#define GL_SET                                 0x150F
+#define GL_TEXTURE                             0x1702
+#define GL_COLOR                               0x1800
+#define GL_DEPTH                               0x1801
+#define GL_STENCIL                             0x1802
+#define GL_STENCIL_INDEX                       0x1901
+#define GL_DEPTH_COMPONENT                     0x1902
+#define GL_RED                                 0x1903
+#define GL_GREEN                               0x1904
+#define GL_BLUE                                0x1905
+#define GL_ALPHA                               0x1906
+#define GL_RGB                                 0x1907
+#define GL_RGBA                                0x1908
+#define GL_POINT                               0x1B00
+#define GL_LINE                                0x1B01
+#define GL_FILL                                0x1B02
+#define GL_KEEP                                0x1E00
+#define GL_REPLACE                             0x1E01
+#define GL_INCR                                0x1E02
+#define GL_DECR                                0x1E03
+#define GL_VENDOR                              0x1F00
+#define GL_RENDERER                            0x1F01
+#define GL_VERSION                             0x1F02
+#define GL_EXTENSIONS                          0x1F03
+#define GL_NEAREST                             0x2600
+#define GL_LINEAR                              0x2601
+#define GL_NEAREST_MIPMAP_NEAREST              0x2700
+#define GL_LINEAR_MIPMAP_NEAREST               0x2701
+#define GL_NEAREST_MIPMAP_LINEAR               0x2702
+#define GL_LINEAR_MIPMAP_LINEAR                0x2703
+#define GL_TEXTURE_MAG_FILTER                  0x2800
+#define GL_TEXTURE_MIN_FILTER                  0x2801
+#define GL_TEXTURE_WRAP_S                      0x2802
+#define GL_TEXTURE_WRAP_T                      0x2803
+#define GL_PROXY_TEXTURE_1D                    0x8063
+#define GL_PROXY_TEXTURE_2D                    0x8064
+#define GL_REPEAT                              0x2901
+#define GL_R3_G3_B2                            0x2A10
+#define GL_RGB4                                0x804F
+#define GL_RGB5                                0x8050
+#define GL_RGB8                                0x8051
+#define GL_RGB10                               0x8052
+#define GL_RGB12                               0x8053
+#define GL_RGB16                               0x8054
+#define GL_RGBA2                               0x8055
+#define GL_RGBA4                               0x8056
+#define GL_RGB5_A1                             0x8057
+#define GL_RGBA8                               0x8058
+#define GL_RGB10_A2                            0x8059
+#define GL_RGBA12                              0x805A
+#define GL_RGBA16                              0x805B
+#define GL_CURRENT_BIT                         0x00000001
+#define GL_POINT_BIT                           0x00000002
+#define GL_LINE_BIT                            0x00000004
+#define GL_POLYGON_BIT                         0x00000008
+#define GL_POLYGON_STIPPLE_BIT                 0x00000010
+#define GL_PIXEL_MODE_BIT                      0x00000020
+#define GL_LIGHTING_BIT                        0x00000040
+#define GL_FOG_BIT                             0x00000080
+#define GL_ACCUM_BUFFER_BIT                    0x00000200
+#define GL_VIEWPORT_BIT                        0x00000800
+#define GL_TRANSFORM_BIT                       0x00001000
+#define GL_ENABLE_BIT                          0x00002000
+#define GL_HINT_BIT                            0x00008000
+#define GL_EVAL_BIT                            0x00010000
+#define GL_LIST_BIT                            0x00020000
+#define GL_TEXTURE_BIT                         0x00040000
+#define GL_SCISSOR_BIT                         0x00080000
+#define GL_ALL_ATTRIB_BITS                     0xFFFFFFFF
+#define GL_CLIENT_PIXEL_STORE_BIT              0x00000001
+#define GL_CLIENT_VERTEX_ARRAY_BIT             0x00000002
+#define GL_CLIENT_ALL_ATTRIB_BITS              0xFFFFFFFF
+#define GL_QUAD_STRIP                          0x0008
+#define GL_POLYGON                             0x0009
+#define GL_ACCUM                               0x0100
+#define GL_LOAD                                0x0101
+#define GL_RETURN                              0x0102
+#define GL_MULT                                0x0103
+#define GL_ADD                                 0x0104
+#define GL_AUX0                                0x0409
+#define GL_AUX1                                0x040A
+#define GL_AUX2                                0x040B
+#define GL_AUX3                                0x040C
+#define GL_2D                                  0x0600
+#define GL_3D                                  0x0601
+#define GL_3D_COLOR                            0x0602
+#define GL_3D_COLOR_TEXTURE                    0x0603
+#define GL_4D_COLOR_TEXTURE                    0x0604
+#define GL_PASS_THROUGH_TOKEN                  0x0700
+#define GL_POINT_TOKEN                         0x0701
+#define GL_LINE_TOKEN                          0x0702
+#define GL_POLYGON_TOKEN                       0x0703
+#define GL_BITMAP_TOKEN                        0x0704
+#define GL_DRAW_PIXEL_TOKEN                    0x0705
+#define GL_COPY_PIXEL_TOKEN                    0x0706
+#define GL_LINE_RESET_TOKEN                    0x0707
+#define GL_EXP                                 0x0800
+#define GL_EXP2                                0x0801
+#define GL_COEFF                               0x0A00
+#define GL_ORDER                               0x0A01
+#define GL_DOMAIN                              0x0A02
+#define GL_PIXEL_MAP_I_TO_I                    0x0C70
+#define GL_PIXEL_MAP_S_TO_S                    0x0C71
+#define GL_PIXEL_MAP_I_TO_R                    0x0C72
+#define GL_PIXEL_MAP_I_TO_G                    0x0C73
+#define GL_PIXEL_MAP_I_TO_B                    0x0C74
+#define GL_PIXEL_MAP_I_TO_A                    0x0C75
+#define GL_PIXEL_MAP_R_TO_R                    0x0C76
+#define GL_PIXEL_MAP_G_TO_G                    0x0C77
+#define GL_PIXEL_MAP_B_TO_B                    0x0C78
+#define GL_PIXEL_MAP_A_TO_A                    0x0C79
+#define GL_VERTEX_ARRAY_POINTER                0x808E
+#define GL_NORMAL_ARRAY_POINTER                0x808F
+#define GL_COLOR_ARRAY_POINTER                 0x8090
+#define GL_INDEX_ARRAY_POINTER                 0x8091
+#define GL_TEXTURE_COORD_ARRAY_POINTER         0x8092
+#define GL_EDGE_FLAG_ARRAY_POINTER             0x8093
+#define GL_FEEDBACK_BUFFER_POINTER             0x0DF0
+#define GL_SELECTION_BUFFER_POINTER            0x0DF3
+#define GL_CURRENT_COLOR                       0x0B00
+#define GL_CURRENT_INDEX                       0x0B01
+#define GL_CURRENT_NORMAL                      0x0B02
+#define GL_CURRENT_TEXTURE_COORDS              0x0B03
+#define GL_CURRENT_RASTER_COLOR                0x0B04
+#define GL_CURRENT_RASTER_INDEX                0x0B05
+#define GL_CURRENT_RASTER_TEXTURE_COORDS       0x0B06
+#define GL_CURRENT_RASTER_POSITION             0x0B07
+#define GL_CURRENT_RASTER_POSITION_VALID       0x0B08
+#define GL_CURRENT_RASTER_DISTANCE             0x0B09
+#define GL_POINT_SMOOTH                        0x0B10
+#define GL_LINE_STIPPLE                        0x0B24
+#define GL_LINE_STIPPLE_PATTERN                0x0B25
+#define GL_LINE_STIPPLE_REPEAT                 0x0B26
+#define GL_LIST_MODE                           0x0B30
+#define GL_MAX_LIST_NESTING                    0x0B31
+#define GL_LIST_BASE                           0x0B32
+#define GL_LIST_INDEX                          0x0B33
+#define GL_POLYGON_STIPPLE                     0x0B42
+#define GL_EDGE_FLAG                           0x0B43
+#define GL_LIGHTING                            0x0B50
+#define GL_LIGHT_MODEL_LOCAL_VIEWER            0x0B51
+#define GL_LIGHT_MODEL_TWO_SIDE                0x0B52
+#define GL_LIGHT_MODEL_AMBIENT                 0x0B53
+#define GL_SHADE_MODEL                         0x0B54
+#define GL_COLOR_MATERIAL_FACE                 0x0B55
+#define GL_COLOR_MATERIAL_PARAMETER            0x0B56
+#define GL_COLOR_MATERIAL                      0x0B57
+#define GL_FOG                                 0x0B60
+#define GL_FOG_INDEX                           0x0B61
+#define GL_FOG_DENSITY                         0x0B62
+#define GL_FOG_START                           0x0B63
+#define GL_FOG_END                             0x0B64
+#define GL_FOG_MODE                            0x0B65
+#define GL_FOG_COLOR                           0x0B66
+#define GL_ACCUM_CLEAR_VALUE                   0x0B80
+#define GL_MATRIX_MODE                         0x0BA0
+#define GL_NORMALIZE                           0x0BA1
+#define GL_MODELVIEW_STACK_DEPTH               0x0BA3
+#define GL_PROJECTION_STACK_DEPTH              0x0BA4
+#define GL_TEXTURE_STACK_DEPTH                 0x0BA5
+#define GL_MODELVIEW_MATRIX                    0x0BA6
+#define GL_PROJECTION_MATRIX                   0x0BA7
+#define GL_TEXTURE_MATRIX                      0x0BA8
+#define GL_ATTRIB_STACK_DEPTH                  0x0BB0
+#define GL_CLIENT_ATTRIB_STACK_DEPTH           0x0BB1
+#define GL_ALPHA_TEST                          0x0BC0
+#define GL_ALPHA_TEST_FUNC                     0x0BC1
+#define GL_ALPHA_TEST_REF                      0x0BC2
+#define GL_INDEX_LOGIC_OP                      0x0BF1
+#define GL_LOGIC_OP                            0x0BF1
+#define GL_AUX_BUFFERS                         0x0C00
+#define GL_INDEX_CLEAR_VALUE                   0x0C20
+#define GL_INDEX_WRITEMASK                     0x0C21
+#define GL_INDEX_MODE                          0x0C30
+#define GL_RGBA_MODE                           0x0C31
+#define GL_RENDER_MODE                         0x0C40
+#define GL_PERSPECTIVE_CORRECTION_HINT         0x0C50
+#define GL_POINT_SMOOTH_HINT                   0x0C51
+#define GL_FOG_HINT                            0x0C54
+#define GL_TEXTURE_GEN_S                       0x0C60
+#define GL_TEXTURE_GEN_T                       0x0C61
+#define GL_TEXTURE_GEN_R                       0x0C62
+#define GL_TEXTURE_GEN_Q                       0x0C63
+#define GL_PIXEL_MAP_I_TO_I_SIZE               0x0CB0
+#define GL_PIXEL_MAP_S_TO_S_SIZE               0x0CB1
+#define GL_PIXEL_MAP_I_TO_R_SIZE               0x0CB2
+#define GL_PIXEL_MAP_I_TO_G_SIZE               0x0CB3
+#define GL_PIXEL_MAP_I_TO_B_SIZE               0x0CB4
+#define GL_PIXEL_MAP_I_TO_A_SIZE               0x0CB5
+#define GL_PIXEL_MAP_R_TO_R_SIZE               0x0CB6
+#define GL_PIXEL_MAP_G_TO_G_SIZE               0x0CB7
+#define GL_PIXEL_MAP_B_TO_B_SIZE               0x0CB8
+#define GL_PIXEL_MAP_A_TO_A_SIZE               0x0CB9
+#define GL_MAP_COLOR                           0x0D10
+#define GL_MAP_STENCIL                         0x0D11
+#define GL_INDEX_SHIFT                         0x0D12
+#define GL_INDEX_OFFSET                        0x0D13
+#define GL_RED_SCALE                           0x0D14
+#define GL_RED_BIAS                            0x0D15
+#define GL_ZOOM_X                              0x0D16
+#define GL_ZOOM_Y                              0x0D17
+#define GL_GREEN_SCALE                         0x0D18
+#define GL_GREEN_BIAS                          0x0D19
+#define GL_BLUE_SCALE                          0x0D1A
+#define GL_BLUE_BIAS                           0x0D1B
+#define GL_ALPHA_SCALE                         0x0D1C
+#define GL_ALPHA_BIAS                          0x0D1D
+#define GL_DEPTH_SCALE                         0x0D1E
+#define GL_DEPTH_BIAS                          0x0D1F
+#define GL_MAX_EVAL_ORDER                      0x0D30
+#define GL_MAX_LIGHTS                          0x0D31
+#define GL_MAX_CLIP_PLANES                     0x0D32
+#define GL_MAX_PIXEL_MAP_TABLE                 0x0D34
+#define GL_MAX_ATTRIB_STACK_DEPTH              0x0D35
+#define GL_MAX_MODELVIEW_STACK_DEPTH           0x0D36
+#define GL_MAX_NAME_STACK_DEPTH                0x0D37
+#define GL_MAX_PROJECTION_STACK_DEPTH          0x0D38
+#define GL_MAX_TEXTURE_STACK_DEPTH             0x0D39
+#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH       0x0D3B
+#define GL_INDEX_BITS                          0x0D51
+#define GL_RED_BITS                            0x0D52
+#define GL_GREEN_BITS                          0x0D53
+#define GL_BLUE_BITS                           0x0D54
+#define GL_ALPHA_BITS                          0x0D55
+#define GL_DEPTH_BITS                          0x0D56
+#define GL_STENCIL_BITS                        0x0D57
+#define GL_ACCUM_RED_BITS                      0x0D58
+#define GL_ACCUM_GREEN_BITS                    0x0D59
+#define GL_ACCUM_BLUE_BITS                     0x0D5A
+#define GL_ACCUM_ALPHA_BITS                    0x0D5B
+#define GL_NAME_STACK_DEPTH                    0x0D70
+#define GL_AUTO_NORMAL                         0x0D80
+#define GL_MAP1_COLOR_4                        0x0D90
+#define GL_MAP1_INDEX                          0x0D91
+#define GL_MAP1_NORMAL                         0x0D92
+#define GL_MAP1_TEXTURE_COORD_1                0x0D93
+#define GL_MAP1_TEXTURE_COORD_2                0x0D94
+#define GL_MAP1_TEXTURE_COORD_3                0x0D95
+#define GL_MAP1_TEXTURE_COORD_4                0x0D96
+#define GL_MAP1_VERTEX_3                       0x0D97
+#define GL_MAP1_VERTEX_4                       0x0D98
+#define GL_MAP2_COLOR_4                        0x0DB0
+#define GL_MAP2_INDEX                          0x0DB1
+#define GL_MAP2_NORMAL                         0x0DB2
+#define GL_MAP2_TEXTURE_COORD_1                0x0DB3
+#define GL_MAP2_TEXTURE_COORD_2                0x0DB4
+#define GL_MAP2_TEXTURE_COORD_3                0x0DB5
+#define GL_MAP2_TEXTURE_COORD_4                0x0DB6
+#define GL_MAP2_VERTEX_3                       0x0DB7
+#define GL_MAP2_VERTEX_4                       0x0DB8
+#define GL_MAP1_GRID_DOMAIN                    0x0DD0
+#define GL_MAP1_GRID_SEGMENTS                  0x0DD1
+#define GL_MAP2_GRID_DOMAIN                    0x0DD2
+#define GL_MAP2_GRID_SEGMENTS                  0x0DD3
+#define GL_FEEDBACK_BUFFER_SIZE                0x0DF1
+#define GL_FEEDBACK_BUFFER_TYPE                0x0DF2
+#define GL_SELECTION_BUFFER_SIZE               0x0DF4
+#define GL_VERTEX_ARRAY                        0x8074
+#define GL_NORMAL_ARRAY                        0x8075
+#define GL_COLOR_ARRAY                         0x8076
+#define GL_INDEX_ARRAY                         0x8077
+#define GL_TEXTURE_COORD_ARRAY                 0x8078
+#define GL_EDGE_FLAG_ARRAY                     0x8079
+#define GL_VERTEX_ARRAY_SIZE                   0x807A
+#define GL_VERTEX_ARRAY_TYPE                   0x807B
+#define GL_VERTEX_ARRAY_STRIDE                 0x807C
+#define GL_NORMAL_ARRAY_TYPE                   0x807E
+#define GL_NORMAL_ARRAY_STRIDE                 0x807F
+#define GL_COLOR_ARRAY_SIZE                    0x8081
+#define GL_COLOR_ARRAY_TYPE                    0x8082
+#define GL_COLOR_ARRAY_STRIDE                  0x8083
+#define GL_INDEX_ARRAY_TYPE                    0x8085
+#define GL_INDEX_ARRAY_STRIDE                  0x8086
+#define GL_TEXTURE_COORD_ARRAY_SIZE            0x8088
+#define GL_TEXTURE_COORD_ARRAY_TYPE            0x8089
+#define GL_TEXTURE_COORD_ARRAY_STRIDE          0x808A
+#define GL_EDGE_FLAG_ARRAY_STRIDE              0x808C
+#define GL_TEXTURE_COMPONENTS                  0x1003
+#define GL_TEXTURE_BORDER                      0x1005
+#define GL_TEXTURE_LUMINANCE_SIZE              0x8060
+#define GL_TEXTURE_INTENSITY_SIZE              0x8061
+#define GL_TEXTURE_PRIORITY                    0x8066
+#define GL_TEXTURE_RESIDENT                    0x8067
+#define GL_AMBIENT                             0x1200
+#define GL_DIFFUSE                             0x1201
+#define GL_SPECULAR                            0x1202
+#define GL_POSITION                            0x1203
+#define GL_SPOT_DIRECTION                      0x1204
+#define GL_SPOT_EXPONENT                       0x1205
+#define GL_SPOT_CUTOFF                         0x1206
+#define GL_CONSTANT_ATTENUATION                0x1207
+#define GL_LINEAR_ATTENUATION                  0x1208
+#define GL_QUADRATIC_ATTENUATION               0x1209
+#define GL_COMPILE                             0x1300
+#define GL_COMPILE_AND_EXECUTE                 0x1301
+#define GL_2_BYTES                             0x1407
+#define GL_3_BYTES                             0x1408
+#define GL_4_BYTES                             0x1409
+#define GL_EMISSION                            0x1600
+#define GL_SHININESS                           0x1601
+#define GL_AMBIENT_AND_DIFFUSE                 0x1602
+#define GL_COLOR_INDEXES                       0x1603
+#define GL_MODELVIEW                           0x1700
+#define GL_PROJECTION                          0x1701
+#define GL_COLOR_INDEX                         0x1900
+#define GL_LUMINANCE                           0x1909
+#define GL_LUMINANCE_ALPHA                     0x190A
+#define GL_BITMAP                              0x1A00
+#define GL_RENDER                              0x1C00
+#define GL_FEEDBACK                            0x1C01
+#define GL_SELECT                              0x1C02
+#define GL_FLAT                                0x1D00
+#define GL_SMOOTH                              0x1D01
+#define GL_S                                   0x2000
+#define GL_T                                   0x2001
+#define GL_R                                   0x2002
+#define GL_Q                                   0x2003
+#define GL_MODULATE                            0x2100
+#define GL_DECAL                               0x2101
+#define GL_TEXTURE_ENV_MODE                    0x2200
+#define GL_TEXTURE_ENV_COLOR                   0x2201
+#define GL_TEXTURE_ENV                         0x2300
+#define GL_EYE_LINEAR                          0x2400
+#define GL_OBJECT_LINEAR                       0x2401
+#define GL_SPHERE_MAP                          0x2402
+#define GL_TEXTURE_GEN_MODE                    0x2500
+#define GL_OBJECT_PLANE                        0x2501
+#define GL_EYE_PLANE                           0x2502
+#define GL_CLAMP                               0x2900
+#define GL_ALPHA4                              0x803B
+#define GL_ALPHA8                              0x803C
+#define GL_ALPHA12                             0x803D
+#define GL_ALPHA16                             0x803E
+#define GL_LUMINANCE4                          0x803F
+#define GL_LUMINANCE8                          0x8040
+#define GL_LUMINANCE12                         0x8041
+#define GL_LUMINANCE16                         0x8042
+#define GL_LUMINANCE4_ALPHA4                   0x8043
+#define GL_LUMINANCE6_ALPHA2                   0x8044
+#define GL_LUMINANCE8_ALPHA8                   0x8045
+#define GL_LUMINANCE12_ALPHA4                  0x8046
+#define GL_LUMINANCE12_ALPHA12                 0x8047
+#define GL_LUMINANCE16_ALPHA16                 0x8048
+#define GL_INTENSITY                           0x8049
+#define GL_INTENSITY4                          0x804A
+#define GL_INTENSITY8                          0x804B
+#define GL_INTENSITY12                         0x804C
+#define GL_INTENSITY16                         0x804D
+#define GL_V2F                                 0x2A20
+#define GL_V3F                                 0x2A21
+#define GL_C4UB_V2F                            0x2A22
+#define GL_C4UB_V3F                            0x2A23
+#define GL_C3F_V3F                             0x2A24
+#define GL_N3F_V3F                             0x2A25
+#define GL_C4F_N3F_V3F                         0x2A26
+#define GL_T2F_V3F                             0x2A27
+#define GL_T4F_V4F                             0x2A28
+#define GL_T2F_C4UB_V3F                        0x2A29
+#define GL_T2F_C3F_V3F                         0x2A2A
+#define GL_T2F_N3F_V3F                         0x2A2B
+#define GL_T2F_C4F_N3F_V3F                     0x2A2C
+#define GL_T4F_C4F_N3F_V4F                     0x2A2D
+#define GL_CLIP_PLANE0                         0x3000
+#define GL_CLIP_PLANE1                         0x3001
+#define GL_CLIP_PLANE2                         0x3002
+#define GL_CLIP_PLANE3                         0x3003
+#define GL_CLIP_PLANE4                         0x3004
+#define GL_CLIP_PLANE5                         0x3005
+#define GL_LIGHT0                              0x4000
+#define GL_LIGHT1                              0x4001
+#define GL_LIGHT2                              0x4002
+#define GL_LIGHT3                              0x4003
+#define GL_LIGHT4                              0x4004
+#define GL_LIGHT5                              0x4005
+#define GL_LIGHT6                              0x4006
+#define GL_LIGHT7                              0x4007
+typedef void (APIENTRYP pfn_glDrawArrays) (GLenum, GLint, GLsizei);
+extern pfn_glDrawArrays fp_glDrawArrays;
+typedef void (APIENTRYP pfn_glDrawElements) (GLenum, GLsizei, GLenum, const void*);
+extern pfn_glDrawElements fp_glDrawElements;
+typedef void (APIENTRYP pfn_glGetPointerv) (GLenum, void**);
+extern pfn_glGetPointerv fp_glGetPointerv;
+typedef void (APIENTRYP pfn_glPolygonOffset) (GLfloat, GLfloat);
+extern pfn_glPolygonOffset fp_glPolygonOffset;
+typedef void (APIENTRYP pfn_glCopyTexImage1D) (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint);
+extern pfn_glCopyTexImage1D fp_glCopyTexImage1D;
+typedef void (APIENTRYP pfn_glCopyTexImage2D) (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint);
+extern pfn_glCopyTexImage2D fp_glCopyTexImage2D;
+typedef void (APIENTRYP pfn_glCopyTexSubImage1D) (GLenum, GLint, GLint, GLint, GLint, GLsizei);
+extern pfn_glCopyTexSubImage1D fp_glCopyTexSubImage1D;
+typedef void (APIENTRYP pfn_glCopyTexSubImage2D) (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+extern pfn_glCopyTexSubImage2D fp_glCopyTexSubImage2D;
+typedef void (APIENTRYP pfn_glTexSubImage1D) (GLenum, GLint, GLint, GLsizei, GLenum, GLenum, const void*);
+extern pfn_glTexSubImage1D fp_glTexSubImage1D;
+typedef void (APIENTRYP pfn_glTexSubImage2D) (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const void*);
+extern pfn_glTexSubImage2D fp_glTexSubImage2D;
+typedef void (APIENTRYP pfn_glBindTexture) (GLenum, GLuint);
+extern pfn_glBindTexture fp_glBindTexture;
+typedef void (APIENTRYP pfn_glDeleteTextures) (GLsizei, const GLuint*);
+extern pfn_glDeleteTextures fp_glDeleteTextures;
+typedef void (APIENTRYP pfn_glGenTextures) (GLsizei, GLuint*);
+extern pfn_glGenTextures fp_glGenTextures;
+typedef GLboolean (APIENTRYP pfn_glIsTexture) (GLuint);
+extern pfn_glIsTexture fp_glIsTexture;
+typedef void (APIENTRYP pfn_glArrayElement) (GLint);
+extern pfn_glArrayElement fp_glArrayElement;
+typedef void (APIENTRYP pfn_glColorPointer) (GLint, GLenum, GLsizei, const void*);
+extern pfn_glColorPointer fp_glColorPointer;
+typedef void (APIENTRYP pfn_glDisableClientState) (GLenum);
+extern pfn_glDisableClientState fp_glDisableClientState;
+typedef void (APIENTRYP pfn_glEdgeFlagPointer) (GLsizei, const void*);
+extern pfn_glEdgeFlagPointer fp_glEdgeFlagPointer;
+typedef void (APIENTRYP pfn_glEnableClientState) (GLenum);
+extern pfn_glEnableClientState fp_glEnableClientState;
+typedef void (APIENTRYP pfn_glIndexPointer) (GLenum, GLsizei, const void*);
+extern pfn_glIndexPointer fp_glIndexPointer;
+typedef void (APIENTRYP pfn_glInterleavedArrays) (GLenum, GLsizei, const void*);
+extern pfn_glInterleavedArrays fp_glInterleavedArrays;
+typedef void (APIENTRYP pfn_glNormalPointer) (GLenum, GLsizei, const void*);
+extern pfn_glNormalPointer fp_glNormalPointer;
+typedef void (APIENTRYP pfn_glTexCoordPointer) (GLint, GLenum, GLsizei, const void*);
+extern pfn_glTexCoordPointer fp_glTexCoordPointer;
+typedef void (APIENTRYP pfn_glVertexPointer) (GLint, GLenum, GLsizei, const void*);
+extern pfn_glVertexPointer fp_glVertexPointer;
+typedef GLboolean (APIENTRYP pfn_glAreTexturesResident) (GLsizei, const GLuint*, GLboolean*);
+extern pfn_glAreTexturesResident fp_glAreTexturesResident;
+typedef void (APIENTRYP pfn_glPrioritizeTextures) (GLsizei, const GLuint*, const GLfloat*);
+extern pfn_glPrioritizeTextures fp_glPrioritizeTextures;
+typedef void (APIENTRYP pfn_glIndexub) (GLubyte);
+extern pfn_glIndexub fp_glIndexub;
+typedef void (APIENTRYP pfn_glIndexubv) (const GLubyte*);
+extern pfn_glIndexubv fp_glIndexubv;
+typedef void (APIENTRYP pfn_glPopClientAttrib) ();
+extern pfn_glPopClientAttrib fp_glPopClientAttrib;
+typedef void (APIENTRYP pfn_glPushClientAttrib) (GLbitfield);
+extern pfn_glPushClientAttrib fp_glPushClientAttrib;
+
+ /* GL_VERSION_1_2 */
+extern GLboolean GLAD_VERSION_1_2;
+#define GL_UNSIGNED_BYTE_3_3_2                 0x8032
+#define GL_UNSIGNED_SHORT_4_4_4_4              0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1              0x8034
+#define GL_UNSIGNED_INT_8_8_8_8                0x8035
+#define GL_UNSIGNED_INT_10_10_10_2             0x8036
+#define GL_TEXTURE_BINDING_3D                  0x806A
+#define GL_PACK_SKIP_IMAGES                    0x806B
+#define GL_PACK_IMAGE_HEIGHT                   0x806C
+#define GL_UNPACK_SKIP_IMAGES                  0x806D
+#define GL_UNPACK_IMAGE_HEIGHT                 0x806E
+#define GL_TEXTURE_3D                          0x806F
+#define GL_PROXY_TEXTURE_3D                    0x8070
+#define GL_TEXTURE_DEPTH                       0x8071
+#define GL_TEXTURE_WRAP_R                      0x8072
+#define GL_MAX_3D_TEXTURE_SIZE                 0x8073
+#define GL_UNSIGNED_BYTE_2_3_3_REV             0x8362
+#define GL_UNSIGNED_SHORT_5_6_5                0x8363
+#define GL_UNSIGNED_SHORT_5_6_5_REV            0x8364
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV          0x8365
+#define GL_UNSIGNED_SHORT_1_5_5_5_REV          0x8366
+#define GL_UNSIGNED_INT_8_8_8_8_REV            0x8367
+#define GL_UNSIGNED_INT_2_10_10_10_REV         0x8368
+#define GL_BGR                                 0x80E0
+#define GL_BGRA                                0x80E1
+#define GL_MAX_ELEMENTS_VERTICES               0x80E8
+#define GL_MAX_ELEMENTS_INDICES                0x80E9
+#define GL_CLAMP_TO_EDGE                       0x812F
+#define GL_TEXTURE_MIN_LOD                     0x813A
+#define GL_TEXTURE_MAX_LOD                     0x813B
+#define GL_TEXTURE_BASE_LEVEL                  0x813C
+#define GL_TEXTURE_MAX_LEVEL                   0x813D
+#define GL_SMOOTH_POINT_SIZE_RANGE             0x0B12
+#define GL_SMOOTH_POINT_SIZE_GRANULARITY       0x0B13
+#define GL_SMOOTH_LINE_WIDTH_RANGE             0x0B22
+#define GL_SMOOTH_LINE_WIDTH_GRANULARITY       0x0B23
+#define GL_ALIASED_LINE_WIDTH_RANGE            0x846E
+#define GL_RESCALE_NORMAL                      0x803A
+#define GL_LIGHT_MODEL_COLOR_CONTROL           0x81F8
+#define GL_SINGLE_COLOR                        0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR             0x81FA
+#define GL_ALIASED_POINT_SIZE_RANGE            0x846D
+typedef void (APIENTRYP pfn_glDrawRangeElements) (GLenum, GLuint, GLuint, GLsizei, GLenum, const void*);
+extern pfn_glDrawRangeElements fp_glDrawRangeElements;
+typedef void (APIENTRYP pfn_glTexImage3D) (GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const void*);
+extern pfn_glTexImage3D fp_glTexImage3D;
+typedef void (APIENTRYP pfn_glTexSubImage3D) (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const void*);
+extern pfn_glTexSubImage3D fp_glTexSubImage3D;
+typedef void (APIENTRYP pfn_glCopyTexSubImage3D) (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+extern pfn_glCopyTexSubImage3D fp_glCopyTexSubImage3D;
+
+ /* GL_VERSION_1_3 */
+extern GLboolean GLAD_VERSION_1_3;
+#define GL_TEXTURE0                            0x84C0
+#define GL_TEXTURE1                            0x84C1
+#define GL_TEXTURE2                            0x84C2
+#define GL_TEXTURE3                            0x84C3
+#define GL_TEXTURE4                            0x84C4
+#define GL_TEXTURE5                            0x84C5
+#define GL_TEXTURE6                            0x84C6
+#define GL_TEXTURE7                            0x84C7
+#define GL_TEXTURE8                            0x84C8
+#define GL_TEXTURE9                            0x84C9
+#define GL_TEXTURE10                           0x84CA
+#define GL_TEXTURE11                           0x84CB
+#define GL_TEXTURE12                           0x84CC
+#define GL_TEXTURE13                           0x84CD
+#define GL_TEXTURE14                           0x84CE
+#define GL_TEXTURE15                           0x84CF
+#define GL_TEXTURE16                           0x84D0
+#define GL_TEXTURE17                           0x84D1
+#define GL_TEXTURE18                           0x84D2
+#define GL_TEXTURE19                           0x84D3
+#define GL_TEXTURE20                           0x84D4
+#define GL_TEXTURE21                           0x84D5
+#define GL_TEXTURE22                           0x84D6
+#define GL_TEXTURE23                           0x84D7
+#define GL_TEXTURE24                           0x84D8
+#define GL_TEXTURE25                           0x84D9
+#define GL_TEXTURE26                           0x84DA
+#define GL_TEXTURE27                           0x84DB
+#define GL_TEXTURE28                           0x84DC
+#define GL_TEXTURE29                           0x84DD
+#define GL_TEXTURE30                           0x84DE
+#define GL_TEXTURE31                           0x84DF
+#define GL_ACTIVE_TEXTURE                      0x84E0
+#define GL_MULTISAMPLE                         0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE            0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE                 0x809F
+#define GL_SAMPLE_COVERAGE                     0x80A0
+#define GL_SAMPLE_BUFFERS                      0x80A8
+#define GL_SAMPLES                             0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE               0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT              0x80AB
+#define GL_TEXTURE_CUBE_MAP                    0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP            0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X         0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X         0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y         0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y         0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z         0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z         0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP              0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE           0x851C
+#define GL_COMPRESSED_RGB                      0x84ED
+#define GL_COMPRESSED_RGBA                     0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT            0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE       0x86A0
+#define GL_TEXTURE_COMPRESSED                  0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS      0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS          0x86A3
+#define GL_CLAMP_TO_BORDER                     0x812D
+#define GL_CLIENT_ACTIVE_TEXTURE               0x84E1
+#define GL_MAX_TEXTURE_UNITS                   0x84E2
+#define GL_TRANSPOSE_MODELVIEW_MATRIX          0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX         0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX            0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX              0x84E6
+#define GL_MULTISAMPLE_BIT                     0x20000000
+#define GL_NORMAL_MAP                          0x8511
+#define GL_REFLECTION_MAP                      0x8512
+#define GL_COMPRESSED_ALPHA                    0x84E9
+#define GL_COMPRESSED_LUMINANCE                0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA          0x84EB
+#define GL_COMPRESSED_INTENSITY                0x84EC
+#define GL_COMBINE                             0x8570
+#define GL_COMBINE_RGB                         0x8571
+#define GL_COMBINE_ALPHA                       0x8572
+#define GL_SOURCE0_RGB                         0x8580
+#define GL_SOURCE1_RGB                         0x8581
+#define GL_SOURCE2_RGB                         0x8582
+#define GL_SOURCE0_ALPHA                       0x8588
+#define GL_SOURCE1_ALPHA                       0x8589
+#define GL_SOURCE2_ALPHA                       0x858A
+#define GL_OPERAND0_RGB                        0x8590
+#define GL_OPERAND1_RGB                        0x8591
+#define GL_OPERAND2_RGB                        0x8592
+#define GL_OPERAND0_ALPHA                      0x8598
+#define GL_OPERAND1_ALPHA                      0x8599
+#define GL_OPERAND2_ALPHA                      0x859A
+#define GL_RGB_SCALE                           0x8573
+#define GL_ADD_SIGNED                          0x8574
+#define GL_INTERPOLATE                         0x8575
+#define GL_SUBTRACT                            0x84E7
+#define GL_CONSTANT                            0x8576
+#define GL_PRIMARY_COLOR                       0x8577
+#define GL_PREVIOUS                            0x8578
+#define GL_DOT3_RGB                            0x86AE
+#define GL_DOT3_RGBA                           0x86AF
+typedef void (APIENTRYP pfn_glActiveTexture) (GLenum);
+extern pfn_glActiveTexture fp_glActiveTexture;
+typedef void (APIENTRYP pfn_glSampleCoverage) (GLfloat, GLboolean);
+extern pfn_glSampleCoverage fp_glSampleCoverage;
+typedef void (APIENTRYP pfn_glCompressedTexImage3D) (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const void*);
+extern pfn_glCompressedTexImage3D fp_glCompressedTexImage3D;
+typedef void (APIENTRYP pfn_glCompressedTexImage2D) (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const void*);
+extern pfn_glCompressedTexImage2D fp_glCompressedTexImage2D;
+typedef void (APIENTRYP pfn_glCompressedTexImage1D) (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const void*);
+extern pfn_glCompressedTexImage1D fp_glCompressedTexImage1D;
+typedef void (APIENTRYP pfn_glCompressedTexSubImage3D) (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const void*);
+extern pfn_glCompressedTexSubImage3D fp_glCompressedTexSubImage3D;
+typedef void (APIENTRYP pfn_glCompressedTexSubImage2D) (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const void*);
+extern pfn_glCompressedTexSubImage2D fp_glCompressedTexSubImage2D;
+typedef void (APIENTRYP pfn_glCompressedTexSubImage1D) (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const void*);
+extern pfn_glCompressedTexSubImage1D fp_glCompressedTexSubImage1D;
+typedef void (APIENTRYP pfn_glGetCompressedTexImage) (GLenum, GLint, void*);
+extern pfn_glGetCompressedTexImage fp_glGetCompressedTexImage;
+typedef void (APIENTRYP pfn_glClientActiveTexture) (GLenum);
+extern pfn_glClientActiveTexture fp_glClientActiveTexture;
+typedef void (APIENTRYP pfn_glMultiTexCoord1d) (GLenum, GLdouble);
+extern pfn_glMultiTexCoord1d fp_glMultiTexCoord1d;
+typedef void (APIENTRYP pfn_glMultiTexCoord1dv) (GLenum, const GLdouble*);
+extern pfn_glMultiTexCoord1dv fp_glMultiTexCoord1dv;
+typedef void (APIENTRYP pfn_glMultiTexCoord1f) (GLenum, GLfloat);
+extern pfn_glMultiTexCoord1f fp_glMultiTexCoord1f;
+typedef void (APIENTRYP pfn_glMultiTexCoord1fv) (GLenum, const GLfloat*);
+extern pfn_glMultiTexCoord1fv fp_glMultiTexCoord1fv;
+typedef void (APIENTRYP pfn_glMultiTexCoord1i) (GLenum, GLint);
+extern pfn_glMultiTexCoord1i fp_glMultiTexCoord1i;
+typedef void (APIENTRYP pfn_glMultiTexCoord1iv) (GLenum, const GLint*);
+extern pfn_glMultiTexCoord1iv fp_glMultiTexCoord1iv;
+typedef void (APIENTRYP pfn_glMultiTexCoord1s) (GLenum, GLshort);
+extern pfn_glMultiTexCoord1s fp_glMultiTexCoord1s;
+typedef void (APIENTRYP pfn_glMultiTexCoord1sv) (GLenum, const GLshort*);
+extern pfn_glMultiTexCoord1sv fp_glMultiTexCoord1sv;
+typedef void (APIENTRYP pfn_glMultiTexCoord2d) (GLenum, GLdouble, GLdouble);
+extern pfn_glMultiTexCoord2d fp_glMultiTexCoord2d;
+typedef void (APIENTRYP pfn_glMultiTexCoord2dv) (GLenum, const GLdouble*);
+extern pfn_glMultiTexCoord2dv fp_glMultiTexCoord2dv;
+typedef void (APIENTRYP pfn_glMultiTexCoord2f) (GLenum, GLfloat, GLfloat);
+extern pfn_glMultiTexCoord2f fp_glMultiTexCoord2f;
+typedef void (APIENTRYP pfn_glMultiTexCoord2fv) (GLenum, const GLfloat*);
+extern pfn_glMultiTexCoord2fv fp_glMultiTexCoord2fv;
+typedef void (APIENTRYP pfn_glMultiTexCoord2i) (GLenum, GLint, GLint);
+extern pfn_glMultiTexCoord2i fp_glMultiTexCoord2i;
+typedef void (APIENTRYP pfn_glMultiTexCoord2iv) (GLenum, const GLint*);
+extern pfn_glMultiTexCoord2iv fp_glMultiTexCoord2iv;
+typedef void (APIENTRYP pfn_glMultiTexCoord2s) (GLenum, GLshort, GLshort);
+extern pfn_glMultiTexCoord2s fp_glMultiTexCoord2s;
+typedef void (APIENTRYP pfn_glMultiTexCoord2sv) (GLenum, const GLshort*);
+extern pfn_glMultiTexCoord2sv fp_glMultiTexCoord2sv;
+typedef void (APIENTRYP pfn_glMultiTexCoord3d) (GLenum, GLdouble, GLdouble, GLdouble);
+extern pfn_glMultiTexCoord3d fp_glMultiTexCoord3d;
+typedef void (APIENTRYP pfn_glMultiTexCoord3dv) (GLenum, const GLdouble*);
+extern pfn_glMultiTexCoord3dv fp_glMultiTexCoord3dv;
+typedef void (APIENTRYP pfn_glMultiTexCoord3f) (GLenum, GLfloat, GLfloat, GLfloat);
+extern pfn_glMultiTexCoord3f fp_glMultiTexCoord3f;
+typedef void (APIENTRYP pfn_glMultiTexCoord3fv) (GLenum, const GLfloat*);
+extern pfn_glMultiTexCoord3fv fp_glMultiTexCoord3fv;
+typedef void (APIENTRYP pfn_glMultiTexCoord3i) (GLenum, GLint, GLint, GLint);
+extern pfn_glMultiTexCoord3i fp_glMultiTexCoord3i;
+typedef void (APIENTRYP pfn_glMultiTexCoord3iv) (GLenum, const GLint*);
+extern pfn_glMultiTexCoord3iv fp_glMultiTexCoord3iv;
+typedef void (APIENTRYP pfn_glMultiTexCoord3s) (GLenum, GLshort, GLshort, GLshort);
+extern pfn_glMultiTexCoord3s fp_glMultiTexCoord3s;
+typedef void (APIENTRYP pfn_glMultiTexCoord3sv) (GLenum, const GLshort*);
+extern pfn_glMultiTexCoord3sv fp_glMultiTexCoord3sv;
+typedef void (APIENTRYP pfn_glMultiTexCoord4d) (GLenum, GLdouble, GLdouble, GLdouble, GLdouble);
+extern pfn_glMultiTexCoord4d fp_glMultiTexCoord4d;
+typedef void (APIENTRYP pfn_glMultiTexCoord4dv) (GLenum, const GLdouble*);
+extern pfn_glMultiTexCoord4dv fp_glMultiTexCoord4dv;
+typedef void (APIENTRYP pfn_glMultiTexCoord4f) (GLenum, GLfloat, GLfloat, GLfloat, GLfloat);
+extern pfn_glMultiTexCoord4f fp_glMultiTexCoord4f;
+typedef void (APIENTRYP pfn_glMultiTexCoord4fv) (GLenum, const GLfloat*);
+extern pfn_glMultiTexCoord4fv fp_glMultiTexCoord4fv;
+typedef void (APIENTRYP pfn_glMultiTexCoord4i) (GLenum, GLint, GLint, GLint, GLint);
+extern pfn_glMultiTexCoord4i fp_glMultiTexCoord4i;
+typedef void (APIENTRYP pfn_glMultiTexCoord4iv) (GLenum, const GLint*);
+extern pfn_glMultiTexCoord4iv fp_glMultiTexCoord4iv;
+typedef void (APIENTRYP pfn_glMultiTexCoord4s) (GLenum, GLshort, GLshort, GLshort, GLshort);
+extern pfn_glMultiTexCoord4s fp_glMultiTexCoord4s;
+typedef void (APIENTRYP pfn_glMultiTexCoord4sv) (GLenum, const GLshort*);
+extern pfn_glMultiTexCoord4sv fp_glMultiTexCoord4sv;
+typedef void (APIENTRYP pfn_glLoadTransposeMatrixf) (const GLfloat*);
+extern pfn_glLoadTransposeMatrixf fp_glLoadTransposeMatrixf;
+typedef void (APIENTRYP pfn_glLoadTransposeMatrixd) (const GLdouble*);
+extern pfn_glLoadTransposeMatrixd fp_glLoadTransposeMatrixd;
+typedef void (APIENTRYP pfn_glMultTransposeMatrixf) (const GLfloat*);
+extern pfn_glMultTransposeMatrixf fp_glMultTransposeMatrixf;
+typedef void (APIENTRYP pfn_glMultTransposeMatrixd) (const GLdouble*);
+extern pfn_glMultTransposeMatrixd fp_glMultTransposeMatrixd;
+
+ /* GL_VERSION_1_4 */
+extern GLboolean GLAD_VERSION_1_4;
+#define GL_BLEND_DST_RGB                       0x80C8
+#define GL_BLEND_SRC_RGB                       0x80C9
+#define GL_BLEND_DST_ALPHA                     0x80CA
+#define GL_BLEND_SRC_ALPHA                     0x80CB
+#define GL_POINT_FADE_THRESHOLD_SIZE           0x8128
+#define GL_DEPTH_COMPONENT16                   0x81A5
+#define GL_DEPTH_COMPONENT24                   0x81A6
+#define GL_DEPTH_COMPONENT32                   0x81A7
+#define GL_MIRRORED_REPEAT                     0x8370
+#define GL_MAX_TEXTURE_LOD_BIAS                0x84FD
+#define GL_TEXTURE_LOD_BIAS                    0x8501
+#define GL_INCR_WRAP                           0x8507
+#define GL_DECR_WRAP                           0x8508
+#define GL_TEXTURE_DEPTH_SIZE                  0x884A
+#define GL_TEXTURE_COMPARE_MODE                0x884C
+#define GL_TEXTURE_COMPARE_FUNC                0x884D
+#define GL_POINT_SIZE_MIN                      0x8126
+#define GL_POINT_SIZE_MAX                      0x8127
+#define GL_POINT_DISTANCE_ATTENUATION          0x8129
+#define GL_GENERATE_MIPMAP                     0x8191
+#define GL_GENERATE_MIPMAP_HINT                0x8192
+#define GL_FOG_COORDINATE_SOURCE               0x8450
+#define GL_FOG_COORDINATE                      0x8451
+#define GL_FRAGMENT_DEPTH                      0x8452
+#define GL_CURRENT_FOG_COORDINATE              0x8453
+#define GL_FOG_COORDINATE_ARRAY_TYPE           0x8454
+#define GL_FOG_COORDINATE_ARRAY_STRIDE         0x8455
+#define GL_FOG_COORDINATE_ARRAY_POINTER        0x8456
+#define GL_FOG_COORDINATE_ARRAY                0x8457
+#define GL_COLOR_SUM                           0x8458
+#define GL_CURRENT_SECONDARY_COLOR             0x8459
+#define GL_SECONDARY_COLOR_ARRAY_SIZE          0x845A
+#define GL_SECONDARY_COLOR_ARRAY_TYPE          0x845B
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE        0x845C
+#define GL_SECONDARY_COLOR_ARRAY_POINTER       0x845D
+#define GL_SECONDARY_COLOR_ARRAY               0x845E
+#define GL_TEXTURE_FILTER_CONTROL              0x8500
+#define GL_DEPTH_TEXTURE_MODE                  0x884B
+#define GL_COMPARE_R_TO_TEXTURE                0x884E
+#define GL_FUNC_ADD                            0x8006
+#define GL_FUNC_SUBTRACT                       0x800A
+#define GL_FUNC_REVERSE_SUBTRACT               0x800B
+#define GL_MIN                                 0x8007
+#define GL_MAX                                 0x8008
+#define GL_CONSTANT_COLOR                      0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR            0x8002
+#define GL_CONSTANT_ALPHA                      0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA            0x8004
+typedef void (APIENTRYP pfn_glBlendFuncSeparate) (GLenum, GLenum, GLenum, GLenum);
+extern pfn_glBlendFuncSeparate fp_glBlendFuncSeparate;
+typedef void (APIENTRYP pfn_glMultiDrawArrays) (GLenum, const GLint*, const GLsizei*, GLsizei);
+extern pfn_glMultiDrawArrays fp_glMultiDrawArrays;
+typedef void (APIENTRYP pfn_glMultiDrawElements) (GLenum, const GLsizei*, GLenum, const void**, GLsizei);
+extern pfn_glMultiDrawElements fp_glMultiDrawElements;
+typedef void (APIENTRYP pfn_glPointParameterf) (GLenum, GLfloat);
+extern pfn_glPointParameterf fp_glPointParameterf;
+typedef void (APIENTRYP pfn_glPointParameterfv) (GLenum, const GLfloat*);
+extern pfn_glPointParameterfv fp_glPointParameterfv;
+typedef void (APIENTRYP pfn_glPointParameteri) (GLenum, GLint);
+extern pfn_glPointParameteri fp_glPointParameteri;
+typedef void (APIENTRYP pfn_glPointParameteriv) (GLenum, const GLint*);
+extern pfn_glPointParameteriv fp_glPointParameteriv;
+typedef void (APIENTRYP pfn_glFogCoordf) (GLfloat);
+extern pfn_glFogCoordf fp_glFogCoordf;
+typedef void (APIENTRYP pfn_glFogCoordfv) (const GLfloat*);
+extern pfn_glFogCoordfv fp_glFogCoordfv;
+typedef void (APIENTRYP pfn_glFogCoordd) (GLdouble);
+extern pfn_glFogCoordd fp_glFogCoordd;
+typedef void (APIENTRYP pfn_glFogCoorddv) (const GLdouble*);
+extern pfn_glFogCoorddv fp_glFogCoorddv;
+typedef void (APIENTRYP pfn_glFogCoordPointer) (GLenum, GLsizei, const void*);
+extern pfn_glFogCoordPointer fp_glFogCoordPointer;
+typedef void (APIENTRYP pfn_glSecondaryColor3b) (GLbyte, GLbyte, GLbyte);
+extern pfn_glSecondaryColor3b fp_glSecondaryColor3b;
+typedef void (APIENTRYP pfn_glSecondaryColor3bv) (const GLbyte*);
+extern pfn_glSecondaryColor3bv fp_glSecondaryColor3bv;
+typedef void (APIENTRYP pfn_glSecondaryColor3d) (GLdouble, GLdouble, GLdouble);
+extern pfn_glSecondaryColor3d fp_glSecondaryColor3d;
+typedef void (APIENTRYP pfn_glSecondaryColor3dv) (const GLdouble*);
+extern pfn_glSecondaryColor3dv fp_glSecondaryColor3dv;
+typedef void (APIENTRYP pfn_glSecondaryColor3f) (GLfloat, GLfloat, GLfloat);
+extern pfn_glSecondaryColor3f fp_glSecondaryColor3f;
+typedef void (APIENTRYP pfn_glSecondaryColor3fv) (const GLfloat*);
+extern pfn_glSecondaryColor3fv fp_glSecondaryColor3fv;
+typedef void (APIENTRYP pfn_glSecondaryColor3i) (GLint, GLint, GLint);
+extern pfn_glSecondaryColor3i fp_glSecondaryColor3i;
+typedef void (APIENTRYP pfn_glSecondaryColor3iv) (const GLint*);
+extern pfn_glSecondaryColor3iv fp_glSecondaryColor3iv;
+typedef void (APIENTRYP pfn_glSecondaryColor3s) (GLshort, GLshort, GLshort);
+extern pfn_glSecondaryColor3s fp_glSecondaryColor3s;
+typedef void (APIENTRYP pfn_glSecondaryColor3sv) (const GLshort*);
+extern pfn_glSecondaryColor3sv fp_glSecondaryColor3sv;
+typedef void (APIENTRYP pfn_glSecondaryColor3ub) (GLubyte, GLubyte, GLubyte);
+extern pfn_glSecondaryColor3ub fp_glSecondaryColor3ub;
+typedef void (APIENTRYP pfn_glSecondaryColor3ubv) (const GLubyte*);
+extern pfn_glSecondaryColor3ubv fp_glSecondaryColor3ubv;
+typedef void (APIENTRYP pfn_glSecondaryColor3ui) (GLuint, GLuint, GLuint);
+extern pfn_glSecondaryColor3ui fp_glSecondaryColor3ui;
+typedef void (APIENTRYP pfn_glSecondaryColor3uiv) (const GLuint*);
+extern pfn_glSecondaryColor3uiv fp_glSecondaryColor3uiv;
+typedef void (APIENTRYP pfn_glSecondaryColor3us) (GLushort, GLushort, GLushort);
+extern pfn_glSecondaryColor3us fp_glSecondaryColor3us;
+typedef void (APIENTRYP pfn_glSecondaryColor3usv) (const GLushort*);
+extern pfn_glSecondaryColor3usv fp_glSecondaryColor3usv;
+typedef void (APIENTRYP pfn_glSecondaryColorPointer) (GLint, GLenum, GLsizei, const void*);
+extern pfn_glSecondaryColorPointer fp_glSecondaryColorPointer;
+typedef void (APIENTRYP pfn_glWindowPos2d) (GLdouble, GLdouble);
+extern pfn_glWindowPos2d fp_glWindowPos2d;
+typedef void (APIENTRYP pfn_glWindowPos2dv) (const GLdouble*);
+extern pfn_glWindowPos2dv fp_glWindowPos2dv;
+typedef void (APIENTRYP pfn_glWindowPos2f) (GLfloat, GLfloat);
+extern pfn_glWindowPos2f fp_glWindowPos2f;
+typedef void (APIENTRYP pfn_glWindowPos2fv) (const GLfloat*);
+extern pfn_glWindowPos2fv fp_glWindowPos2fv;
+typedef void (APIENTRYP pfn_glWindowPos2i) (GLint, GLint);
+extern pfn_glWindowPos2i fp_glWindowPos2i;
+typedef void (APIENTRYP pfn_glWindowPos2iv) (const GLint*);
+extern pfn_glWindowPos2iv fp_glWindowPos2iv;
+typedef void (APIENTRYP pfn_glWindowPos2s) (GLshort, GLshort);
+extern pfn_glWindowPos2s fp_glWindowPos2s;
+typedef void (APIENTRYP pfn_glWindowPos2sv) (const GLshort*);
+extern pfn_glWindowPos2sv fp_glWindowPos2sv;
+typedef void (APIENTRYP pfn_glWindowPos3d) (GLdouble, GLdouble, GLdouble);
+extern pfn_glWindowPos3d fp_glWindowPos3d;
+typedef void (APIENTRYP pfn_glWindowPos3dv) (const GLdouble*);
+extern pfn_glWindowPos3dv fp_glWindowPos3dv;
+typedef void (APIENTRYP pfn_glWindowPos3f) (GLfloat, GLfloat, GLfloat);
+extern pfn_glWindowPos3f fp_glWindowPos3f;
+typedef void (APIENTRYP pfn_glWindowPos3fv) (const GLfloat*);
+extern pfn_glWindowPos3fv fp_glWindowPos3fv;
+typedef void (APIENTRYP pfn_glWindowPos3i) (GLint, GLint, GLint);
+extern pfn_glWindowPos3i fp_glWindowPos3i;
+typedef void (APIENTRYP pfn_glWindowPos3iv) (const GLint*);
+extern pfn_glWindowPos3iv fp_glWindowPos3iv;
+typedef void (APIENTRYP pfn_glWindowPos3s) (GLshort, GLshort, GLshort);
+extern pfn_glWindowPos3s fp_glWindowPos3s;
+typedef void (APIENTRYP pfn_glWindowPos3sv) (const GLshort*);
+extern pfn_glWindowPos3sv fp_glWindowPos3sv;
+typedef void (APIENTRYP pfn_glBlendColor) (GLfloat, GLfloat, GLfloat, GLfloat);
+extern pfn_glBlendColor fp_glBlendColor;
+typedef void (APIENTRYP pfn_glBlendEquation) (GLenum);
+extern pfn_glBlendEquation fp_glBlendEquation;
+
+ /* GL_VERSION_1_5 */
+extern GLboolean GLAD_VERSION_1_5;
+#define GL_BUFFER_SIZE                         0x8764
+#define GL_BUFFER_USAGE                        0x8765
+#define GL_QUERY_COUNTER_BITS                  0x8864
+#define GL_CURRENT_QUERY                       0x8865
+#define GL_QUERY_RESULT                        0x8866
+#define GL_QUERY_RESULT_AVAILABLE              0x8867
+#define GL_ARRAY_BUFFER                        0x8892
+#define GL_ELEMENT_ARRAY_BUFFER                0x8893
+#define GL_ARRAY_BUFFER_BINDING                0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING        0x8895
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING  0x889F
+#define GL_READ_ONLY                           0x88B8
+#define GL_WRITE_ONLY                          0x88B9
+#define GL_READ_WRITE                          0x88BA
+#define GL_BUFFER_ACCESS                       0x88BB
+#define GL_BUFFER_MAPPED                       0x88BC
+#define GL_BUFFER_MAP_POINTER                  0x88BD
+#define GL_STREAM_DRAW                         0x88E0
+#define GL_STREAM_READ                         0x88E1
+#define GL_STREAM_COPY                         0x88E2
+#define GL_STATIC_DRAW                         0x88E4
+#define GL_STATIC_READ                         0x88E5
+#define GL_STATIC_COPY                         0x88E6
+#define GL_DYNAMIC_DRAW                        0x88E8
+#define GL_DYNAMIC_READ                        0x88E9
+#define GL_DYNAMIC_COPY                        0x88EA
+#define GL_SAMPLES_PASSED                      0x8914
+#define GL_SRC1_ALPHA                          0x8589
+#define GL_VERTEX_ARRAY_BUFFER_BINDING         0x8896
+#define GL_NORMAL_ARRAY_BUFFER_BINDING         0x8897
+#define GL_COLOR_ARRAY_BUFFER_BINDING          0x8898
+#define GL_INDEX_ARRAY_BUFFER_BINDING          0x8899
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING  0x889A
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING      0x889B
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING  0x889C
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING  0x889D
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING         0x889E
+#define GL_FOG_COORD_SRC                       0x8450
+#define GL_FOG_COORD                           0x8451
+#define GL_CURRENT_FOG_COORD                   0x8453
+#define GL_FOG_COORD_ARRAY_TYPE                0x8454
+#define GL_FOG_COORD_ARRAY_STRIDE              0x8455
+#define GL_FOG_COORD_ARRAY_POINTER             0x8456
+#define GL_FOG_COORD_ARRAY                     0x8457
+#define GL_FOG_COORD_ARRAY_BUFFER_BINDING      0x889D
+#define GL_SRC0_RGB                            0x8580
+#define GL_SRC1_RGB                            0x8581
+#define GL_SRC2_RGB                            0x8582
+#define GL_SRC0_ALPHA                          0x8588
+#define GL_SRC2_ALPHA                          0x858A
+typedef void (APIENTRYP pfn_glGenQueries) (GLsizei, GLuint*);
+extern pfn_glGenQueries fp_glGenQueries;
+typedef void (APIENTRYP pfn_glDeleteQueries) (GLsizei, const GLuint*);
+extern pfn_glDeleteQueries fp_glDeleteQueries;
+typedef GLboolean (APIENTRYP pfn_glIsQuery) (GLuint);
+extern pfn_glIsQuery fp_glIsQuery;
+typedef void (APIENTRYP pfn_glBeginQuery) (GLenum, GLuint);
+extern pfn_glBeginQuery fp_glBeginQuery;
+typedef void (APIENTRYP pfn_glEndQuery) (GLenum);
+extern pfn_glEndQuery fp_glEndQuery;
+typedef void (APIENTRYP pfn_glGetQueryiv) (GLenum, GLenum, GLint*);
+extern pfn_glGetQueryiv fp_glGetQueryiv;
+typedef void (APIENTRYP pfn_glGetQueryObjectiv) (GLuint, GLenum, GLint*);
+extern pfn_glGetQueryObjectiv fp_glGetQueryObjectiv;
+typedef void (APIENTRYP pfn_glGetQueryObjectuiv) (GLuint, GLenum, GLuint*);
+extern pfn_glGetQueryObjectuiv fp_glGetQueryObjectuiv;
+typedef void (APIENTRYP pfn_glBindBuffer) (GLenum, GLuint);
+extern pfn_glBindBuffer fp_glBindBuffer;
+typedef void (APIENTRYP pfn_glDeleteBuffers) (GLsizei, const GLuint*);
+extern pfn_glDeleteBuffers fp_glDeleteBuffers;
+typedef void (APIENTRYP pfn_glGenBuffers) (GLsizei, GLuint*);
+extern pfn_glGenBuffers fp_glGenBuffers;
+typedef GLboolean (APIENTRYP pfn_glIsBuffer) (GLuint);
+extern pfn_glIsBuffer fp_glIsBuffer;
+typedef void (APIENTRYP pfn_glBufferData) (GLenum, GLsizeiptr, const void*, GLenum);
+extern pfn_glBufferData fp_glBufferData;
+typedef void (APIENTRYP pfn_glBufferSubData) (GLenum, GLintptr, GLsizeiptr, const void*);
+extern pfn_glBufferSubData fp_glBufferSubData;
+typedef void (APIENTRYP pfn_glGetBufferSubData) (GLenum, GLintptr, GLsizeiptr, void*);
+extern pfn_glGetBufferSubData fp_glGetBufferSubData;
+typedef void* (APIENTRYP pfn_glMapBuffer) (GLenum, GLenum);
+extern pfn_glMapBuffer fp_glMapBuffer;
+typedef GLboolean (APIENTRYP pfn_glUnmapBuffer) (GLenum);
+extern pfn_glUnmapBuffer fp_glUnmapBuffer;
+typedef void (APIENTRYP pfn_glGetBufferParameteriv) (GLenum, GLenum, GLint*);
+extern pfn_glGetBufferParameteriv fp_glGetBufferParameteriv;
+typedef void (APIENTRYP pfn_glGetBufferPointerv) (GLenum, GLenum, void**);
+extern pfn_glGetBufferPointerv fp_glGetBufferPointerv;
+
+ /* GL_VERSION_2_0 */
+extern GLboolean GLAD_VERSION_2_0;
+#define GL_BLEND_EQUATION_RGB                  0x8009
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED         0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE            0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE          0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE            0x8625
+#define GL_CURRENT_VERTEX_ATTRIB               0x8626
+#define GL_VERTEX_PROGRAM_POINT_SIZE           0x8642
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER         0x8645
+#define GL_STENCIL_BACK_FUNC                   0x8800
+#define GL_STENCIL_BACK_FAIL                   0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL        0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS        0x8803
+#define GL_MAX_DRAW_BUFFERS                    0x8824
+#define GL_DRAW_BUFFER0                        0x8825
+#define GL_DRAW_BUFFER1                        0x8826
+#define GL_DRAW_BUFFER2                        0x8827
+#define GL_DRAW_BUFFER3                        0x8828
+#define GL_DRAW_BUFFER4                        0x8829
+#define GL_DRAW_BUFFER5                        0x882A
+#define GL_DRAW_BUFFER6                        0x882B
+#define GL_DRAW_BUFFER7                        0x882C
+#define GL_DRAW_BUFFER8                        0x882D
+#define GL_DRAW_BUFFER9                        0x882E
+#define GL_DRAW_BUFFER10                       0x882F
+#define GL_DRAW_BUFFER11                       0x8830
+#define GL_DRAW_BUFFER12                       0x8831
+#define GL_DRAW_BUFFER13                       0x8832
+#define GL_DRAW_BUFFER14                       0x8833
+#define GL_DRAW_BUFFER15                       0x8834
+#define GL_BLEND_EQUATION_ALPHA                0x883D
+#define GL_MAX_VERTEX_ATTRIBS                  0x8869
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED      0x886A
+#define GL_MAX_TEXTURE_IMAGE_UNITS             0x8872
+#define GL_FRAGMENT_SHADER                     0x8B30
+#define GL_VERTEX_SHADER                       0x8B31
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS     0x8B49
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS       0x8B4A
+#define GL_MAX_VARYING_FLOATS                  0x8B4B
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS      0x8B4C
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS    0x8B4D
+#define GL_SHADER_TYPE                         0x8B4F
+#define GL_FLOAT_VEC2                          0x8B50
+#define GL_FLOAT_VEC3                          0x8B51
+#define GL_FLOAT_VEC4                          0x8B52
+#define GL_INT_VEC2                            0x8B53
+#define GL_INT_VEC3                            0x8B54
+#define GL_INT_VEC4                            0x8B55
+#define GL_BOOL                                0x8B56
+#define GL_BOOL_VEC2                           0x8B57
+#define GL_BOOL_VEC3                           0x8B58
+#define GL_BOOL_VEC4                           0x8B59
+#define GL_FLOAT_MAT2                          0x8B5A
+#define GL_FLOAT_MAT3                          0x8B5B
+#define GL_FLOAT_MAT4                          0x8B5C
+#define GL_SAMPLER_1D                          0x8B5D
+#define GL_SAMPLER_2D                          0x8B5E
+#define GL_SAMPLER_3D                          0x8B5F
+#define GL_SAMPLER_CUBE                        0x8B60
+#define GL_SAMPLER_1D_SHADOW                   0x8B61
+#define GL_SAMPLER_2D_SHADOW                   0x8B62
+#define GL_DELETE_STATUS                       0x8B80
+#define GL_COMPILE_STATUS                      0x8B81
+#define GL_LINK_STATUS                         0x8B82
+#define GL_VALIDATE_STATUS                     0x8B83
+#define GL_INFO_LOG_LENGTH                     0x8B84
+#define GL_ATTACHED_SHADERS                    0x8B85
+#define GL_ACTIVE_UNIFORMS                     0x8B86
+#define GL_ACTIVE_UNIFORM_MAX_LENGTH           0x8B87
+#define GL_SHADER_SOURCE_LENGTH                0x8B88
+#define GL_ACTIVE_ATTRIBUTES                   0x8B89
+#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH         0x8B8A
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT     0x8B8B
+#define GL_SHADING_LANGUAGE_VERSION            0x8B8C
+#define GL_CURRENT_PROGRAM                     0x8B8D
+#define GL_POINT_SPRITE_COORD_ORIGIN           0x8CA0
+#define GL_LOWER_LEFT                          0x8CA1
+#define GL_UPPER_LEFT                          0x8CA2
+#define GL_STENCIL_BACK_REF                    0x8CA3
+#define GL_STENCIL_BACK_VALUE_MASK             0x8CA4
+#define GL_STENCIL_BACK_WRITEMASK              0x8CA5
+#define GL_VERTEX_PROGRAM_TWO_SIDE             0x8643
+#define GL_POINT_SPRITE                        0x8861
+#define GL_COORD_REPLACE                       0x8862
+#define GL_MAX_TEXTURE_COORDS                  0x8871
+typedef void (APIENTRYP pfn_glBlendEquationSeparate) (GLenum, GLenum);
+extern pfn_glBlendEquationSeparate fp_glBlendEquationSeparate;
+typedef void (APIENTRYP pfn_glDrawBuffers) (GLsizei, const GLenum*);
+extern pfn_glDrawBuffers fp_glDrawBuffers;
+typedef void (APIENTRYP pfn_glStencilOpSeparate) (GLenum, GLenum, GLenum, GLenum);
+extern pfn_glStencilOpSeparate fp_glStencilOpSeparate;
+typedef void (APIENTRYP pfn_glStencilFuncSeparate) (GLenum, GLenum, GLint, GLuint);
+extern pfn_glStencilFuncSeparate fp_glStencilFuncSeparate;
+typedef void (APIENTRYP pfn_glStencilMaskSeparate) (GLenum, GLuint);
+extern pfn_glStencilMaskSeparate fp_glStencilMaskSeparate;
+typedef void (APIENTRYP pfn_glAttachShader) (GLuint, GLuint);
+extern pfn_glAttachShader fp_glAttachShader;
+typedef void (APIENTRYP pfn_glBindAttribLocation) (GLuint, GLuint, const GLchar*);
+extern pfn_glBindAttribLocation fp_glBindAttribLocation;
+typedef void (APIENTRYP pfn_glCompileShader) (GLuint);
+extern pfn_glCompileShader fp_glCompileShader;
+typedef GLuint (APIENTRYP pfn_glCreateProgram) ();
+extern pfn_glCreateProgram fp_glCreateProgram;
+typedef GLuint (APIENTRYP pfn_glCreateShader) (GLenum);
+extern pfn_glCreateShader fp_glCreateShader;
+typedef void (APIENTRYP pfn_glDeleteProgram) (GLuint);
+extern pfn_glDeleteProgram fp_glDeleteProgram;
+typedef void (APIENTRYP pfn_glDeleteShader) (GLuint);
+extern pfn_glDeleteShader fp_glDeleteShader;
+typedef void (APIENTRYP pfn_glDetachShader) (GLuint, GLuint);
+extern pfn_glDetachShader fp_glDetachShader;
+typedef void (APIENTRYP pfn_glDisableVertexAttribArray) (GLuint);
+extern pfn_glDisableVertexAttribArray fp_glDisableVertexAttribArray;
+typedef void (APIENTRYP pfn_glEnableVertexAttribArray) (GLuint);
+extern pfn_glEnableVertexAttribArray fp_glEnableVertexAttribArray;
+typedef void (APIENTRYP pfn_glGetActiveAttrib) (GLuint, GLuint, GLsizei, GLsizei*, GLint*, GLenum*, GLchar*);
+extern pfn_glGetActiveAttrib fp_glGetActiveAttrib;
+typedef void (APIENTRYP pfn_glGetActiveUniform) (GLuint, GLuint, GLsizei, GLsizei*, GLint*, GLenum*, GLchar*);
+extern pfn_glGetActiveUniform fp_glGetActiveUniform;
+typedef void (APIENTRYP pfn_glGetAttachedShaders) (GLuint, GLsizei, GLsizei*, GLuint*);
+extern pfn_glGetAttachedShaders fp_glGetAttachedShaders;
+typedef GLint (APIENTRYP pfn_glGetAttribLocation) (GLuint, const GLchar*);
+extern pfn_glGetAttribLocation fp_glGetAttribLocation;
+typedef void (APIENTRYP pfn_glGetProgramiv) (GLuint, GLenum, GLint*);
+extern pfn_glGetProgramiv fp_glGetProgramiv;
+typedef void (APIENTRYP pfn_glGetProgramInfoLog) (GLuint, GLsizei, GLsizei*, GLchar*);
+extern pfn_glGetProgramInfoLog fp_glGetProgramInfoLog;
+typedef void (APIENTRYP pfn_glGetShaderiv) (GLuint, GLenum, GLint*);
+extern pfn_glGetShaderiv fp_glGetShaderiv;
+typedef void (APIENTRYP pfn_glGetShaderInfoLog) (GLuint, GLsizei, GLsizei*, GLchar*);
+extern pfn_glGetShaderInfoLog fp_glGetShaderInfoLog;
+typedef void (APIENTRYP pfn_glGetShaderSource) (GLuint, GLsizei, GLsizei*, GLchar*);
+extern pfn_glGetShaderSource fp_glGetShaderSource;
+typedef GLint (APIENTRYP pfn_glGetUniformLocation) (GLuint, const GLchar*);
+extern pfn_glGetUniformLocation fp_glGetUniformLocation;
+typedef void (APIENTRYP pfn_glGetUniformfv) (GLuint, GLint, GLfloat*);
+extern pfn_glGetUniformfv fp_glGetUniformfv;
+typedef void (APIENTRYP pfn_glGetUniformiv) (GLuint, GLint, GLint*);
+extern pfn_glGetUniformiv fp_glGetUniformiv;
+typedef void (APIENTRYP pfn_glGetVertexAttribdv) (GLuint, GLenum, GLdouble*);
+extern pfn_glGetVertexAttribdv fp_glGetVertexAttribdv;
+typedef void (APIENTRYP pfn_glGetVertexAttribfv) (GLuint, GLenum, GLfloat*);
+extern pfn_glGetVertexAttribfv fp_glGetVertexAttribfv;
+typedef void (APIENTRYP pfn_glGetVertexAttribiv) (GLuint, GLenum, GLint*);
+extern pfn_glGetVertexAttribiv fp_glGetVertexAttribiv;
+typedef void (APIENTRYP pfn_glGetVertexAttribPointerv) (GLuint, GLenum, void**);
+extern pfn_glGetVertexAttribPointerv fp_glGetVertexAttribPointerv;
+typedef GLboolean (APIENTRYP pfn_glIsProgram) (GLuint);
+extern pfn_glIsProgram fp_glIsProgram;
+typedef GLboolean (APIENTRYP pfn_glIsShader) (GLuint);
+extern pfn_glIsShader fp_glIsShader;
+typedef void (APIENTRYP pfn_glLinkProgram) (GLuint);
+extern pfn_glLinkProgram fp_glLinkProgram;
+typedef void (APIENTRYP pfn_glShaderSource) (GLuint, GLsizei, const GLchar**, const GLint*);
+extern pfn_glShaderSource fp_glShaderSource;
+typedef void (APIENTRYP pfn_glUseProgram) (GLuint);
+extern pfn_glUseProgram fp_glUseProgram;
+typedef void (APIENTRYP pfn_glUniform1f) (GLint, GLfloat);
+extern pfn_glUniform1f fp_glUniform1f;
+typedef void (APIENTRYP pfn_glUniform2f) (GLint, GLfloat, GLfloat);
+extern pfn_glUniform2f fp_glUniform2f;
+typedef void (APIENTRYP pfn_glUniform3f) (GLint, GLfloat, GLfloat, GLfloat);
+extern pfn_glUniform3f fp_glUniform3f;
+typedef void (APIENTRYP pfn_glUniform4f) (GLint, GLfloat, GLfloat, GLfloat, GLfloat);
+extern pfn_glUniform4f fp_glUniform4f;
+typedef void (APIENTRYP pfn_glUniform1i) (GLint, GLint);
+extern pfn_glUniform1i fp_glUniform1i;
+typedef void (APIENTRYP pfn_glUniform2i) (GLint, GLint, GLint);
+extern pfn_glUniform2i fp_glUniform2i;
+typedef void (APIENTRYP pfn_glUniform3i) (GLint, GLint, GLint, GLint);
+extern pfn_glUniform3i fp_glUniform3i;
+typedef void (APIENTRYP pfn_glUniform4i) (GLint, GLint, GLint, GLint, GLint);
+extern pfn_glUniform4i fp_glUniform4i;
+typedef void (APIENTRYP pfn_glUniform1fv) (GLint, GLsizei, const GLfloat*);
+extern pfn_glUniform1fv fp_glUniform1fv;
+typedef void (APIENTRYP pfn_glUniform2fv) (GLint, GLsizei, const GLfloat*);
+extern pfn_glUniform2fv fp_glUniform2fv;
+typedef void (APIENTRYP pfn_glUniform3fv) (GLint, GLsizei, const GLfloat*);
+extern pfn_glUniform3fv fp_glUniform3fv;
+typedef void (APIENTRYP pfn_glUniform4fv) (GLint, GLsizei, const GLfloat*);
+extern pfn_glUniform4fv fp_glUniform4fv;
+typedef void (APIENTRYP pfn_glUniform1iv) (GLint, GLsizei, const GLint*);
+extern pfn_glUniform1iv fp_glUniform1iv;
+typedef void (APIENTRYP pfn_glUniform2iv) (GLint, GLsizei, const GLint*);
+extern pfn_glUniform2iv fp_glUniform2iv;
+typedef void (APIENTRYP pfn_glUniform3iv) (GLint, GLsizei, const GLint*);
+extern pfn_glUniform3iv fp_glUniform3iv;
+typedef void (APIENTRYP pfn_glUniform4iv) (GLint, GLsizei, const GLint*);
+extern pfn_glUniform4iv fp_glUniform4iv;
+typedef void (APIENTRYP pfn_glUniformMatrix2fv) (GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glUniformMatrix2fv fp_glUniformMatrix2fv;
+typedef void (APIENTRYP pfn_glUniformMatrix3fv) (GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glUniformMatrix3fv fp_glUniformMatrix3fv;
+typedef void (APIENTRYP pfn_glUniformMatrix4fv) (GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glUniformMatrix4fv fp_glUniformMatrix4fv;
+typedef void (APIENTRYP pfn_glValidateProgram) (GLuint);
+extern pfn_glValidateProgram fp_glValidateProgram;
+typedef void (APIENTRYP pfn_glVertexAttrib1d) (GLuint, GLdouble);
+extern pfn_glVertexAttrib1d fp_glVertexAttrib1d;
+typedef void (APIENTRYP pfn_glVertexAttrib1dv) (GLuint, const GLdouble*);
+extern pfn_glVertexAttrib1dv fp_glVertexAttrib1dv;
+typedef void (APIENTRYP pfn_glVertexAttrib1f) (GLuint, GLfloat);
+extern pfn_glVertexAttrib1f fp_glVertexAttrib1f;
+typedef void (APIENTRYP pfn_glVertexAttrib1fv) (GLuint, const GLfloat*);
+extern pfn_glVertexAttrib1fv fp_glVertexAttrib1fv;
+typedef void (APIENTRYP pfn_glVertexAttrib1s) (GLuint, GLshort);
+extern pfn_glVertexAttrib1s fp_glVertexAttrib1s;
+typedef void (APIENTRYP pfn_glVertexAttrib1sv) (GLuint, const GLshort*);
+extern pfn_glVertexAttrib1sv fp_glVertexAttrib1sv;
+typedef void (APIENTRYP pfn_glVertexAttrib2d) (GLuint, GLdouble, GLdouble);
+extern pfn_glVertexAttrib2d fp_glVertexAttrib2d;
+typedef void (APIENTRYP pfn_glVertexAttrib2dv) (GLuint, const GLdouble*);
+extern pfn_glVertexAttrib2dv fp_glVertexAttrib2dv;
+typedef void (APIENTRYP pfn_glVertexAttrib2f) (GLuint, GLfloat, GLfloat);
+extern pfn_glVertexAttrib2f fp_glVertexAttrib2f;
+typedef void (APIENTRYP pfn_glVertexAttrib2fv) (GLuint, const GLfloat*);
+extern pfn_glVertexAttrib2fv fp_glVertexAttrib2fv;
+typedef void (APIENTRYP pfn_glVertexAttrib2s) (GLuint, GLshort, GLshort);
+extern pfn_glVertexAttrib2s fp_glVertexAttrib2s;
+typedef void (APIENTRYP pfn_glVertexAttrib2sv) (GLuint, const GLshort*);
+extern pfn_glVertexAttrib2sv fp_glVertexAttrib2sv;
+typedef void (APIENTRYP pfn_glVertexAttrib3d) (GLuint, GLdouble, GLdouble, GLdouble);
+extern pfn_glVertexAttrib3d fp_glVertexAttrib3d;
+typedef void (APIENTRYP pfn_glVertexAttrib3dv) (GLuint, const GLdouble*);
+extern pfn_glVertexAttrib3dv fp_glVertexAttrib3dv;
+typedef void (APIENTRYP pfn_glVertexAttrib3f) (GLuint, GLfloat, GLfloat, GLfloat);
+extern pfn_glVertexAttrib3f fp_glVertexAttrib3f;
+typedef void (APIENTRYP pfn_glVertexAttrib3fv) (GLuint, const GLfloat*);
+extern pfn_glVertexAttrib3fv fp_glVertexAttrib3fv;
+typedef void (APIENTRYP pfn_glVertexAttrib3s) (GLuint, GLshort, GLshort, GLshort);
+extern pfn_glVertexAttrib3s fp_glVertexAttrib3s;
+typedef void (APIENTRYP pfn_glVertexAttrib3sv) (GLuint, const GLshort*);
+extern pfn_glVertexAttrib3sv fp_glVertexAttrib3sv;
+typedef void (APIENTRYP pfn_glVertexAttrib4Nbv) (GLuint, const GLbyte*);
+extern pfn_glVertexAttrib4Nbv fp_glVertexAttrib4Nbv;
+typedef void (APIENTRYP pfn_glVertexAttrib4Niv) (GLuint, const GLint*);
+extern pfn_glVertexAttrib4Niv fp_glVertexAttrib4Niv;
+typedef void (APIENTRYP pfn_glVertexAttrib4Nsv) (GLuint, const GLshort*);
+extern pfn_glVertexAttrib4Nsv fp_glVertexAttrib4Nsv;
+typedef void (APIENTRYP pfn_glVertexAttrib4Nub) (GLuint, GLubyte, GLubyte, GLubyte, GLubyte);
+extern pfn_glVertexAttrib4Nub fp_glVertexAttrib4Nub;
+typedef void (APIENTRYP pfn_glVertexAttrib4Nubv) (GLuint, const GLubyte*);
+extern pfn_glVertexAttrib4Nubv fp_glVertexAttrib4Nubv;
+typedef void (APIENTRYP pfn_glVertexAttrib4Nuiv) (GLuint, const GLuint*);
+extern pfn_glVertexAttrib4Nuiv fp_glVertexAttrib4Nuiv;
+typedef void (APIENTRYP pfn_glVertexAttrib4Nusv) (GLuint, const GLushort*);
+extern pfn_glVertexAttrib4Nusv fp_glVertexAttrib4Nusv;
+typedef void (APIENTRYP pfn_glVertexAttrib4bv) (GLuint, const GLbyte*);
+extern pfn_glVertexAttrib4bv fp_glVertexAttrib4bv;
+typedef void (APIENTRYP pfn_glVertexAttrib4d) (GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
+extern pfn_glVertexAttrib4d fp_glVertexAttrib4d;
+typedef void (APIENTRYP pfn_glVertexAttrib4dv) (GLuint, const GLdouble*);
+extern pfn_glVertexAttrib4dv fp_glVertexAttrib4dv;
+typedef void (APIENTRYP pfn_glVertexAttrib4f) (GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
+extern pfn_glVertexAttrib4f fp_glVertexAttrib4f;
+typedef void (APIENTRYP pfn_glVertexAttrib4fv) (GLuint, const GLfloat*);
+extern pfn_glVertexAttrib4fv fp_glVertexAttrib4fv;
+typedef void (APIENTRYP pfn_glVertexAttrib4iv) (GLuint, const GLint*);
+extern pfn_glVertexAttrib4iv fp_glVertexAttrib4iv;
+typedef void (APIENTRYP pfn_glVertexAttrib4s) (GLuint, GLshort, GLshort, GLshort, GLshort);
+extern pfn_glVertexAttrib4s fp_glVertexAttrib4s;
+typedef void (APIENTRYP pfn_glVertexAttrib4sv) (GLuint, const GLshort*);
+extern pfn_glVertexAttrib4sv fp_glVertexAttrib4sv;
+typedef void (APIENTRYP pfn_glVertexAttrib4ubv) (GLuint, const GLubyte*);
+extern pfn_glVertexAttrib4ubv fp_glVertexAttrib4ubv;
+typedef void (APIENTRYP pfn_glVertexAttrib4uiv) (GLuint, const GLuint*);
+extern pfn_glVertexAttrib4uiv fp_glVertexAttrib4uiv;
+typedef void (APIENTRYP pfn_glVertexAttrib4usv) (GLuint, const GLushort*);
+extern pfn_glVertexAttrib4usv fp_glVertexAttrib4usv;
+typedef void (APIENTRYP pfn_glVertexAttribPointer) (GLuint, GLint, GLenum, GLboolean, GLsizei, const void*);
+extern pfn_glVertexAttribPointer fp_glVertexAttribPointer;
+
+ /* GL_VERSION_2_1 */
+extern GLboolean GLAD_VERSION_2_1;
+#define GL_PIXEL_PACK_BUFFER                   0x88EB
+#define GL_PIXEL_UNPACK_BUFFER                 0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING           0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING         0x88EF
+#define GL_FLOAT_MAT2x3                        0x8B65
+#define GL_FLOAT_MAT2x4                        0x8B66
+#define GL_FLOAT_MAT3x2                        0x8B67
+#define GL_FLOAT_MAT3x4                        0x8B68
+#define GL_FLOAT_MAT4x2                        0x8B69
+#define GL_FLOAT_MAT4x3                        0x8B6A
+#define GL_SRGB                                0x8C40
+#define GL_SRGB8                               0x8C41
+#define GL_SRGB_ALPHA                          0x8C42
+#define GL_SRGB8_ALPHA8                        0x8C43
+#define GL_COMPRESSED_SRGB                     0x8C48
+#define GL_COMPRESSED_SRGB_ALPHA               0x8C49
+#define GL_CURRENT_RASTER_SECONDARY_COLOR      0x845F
+#define GL_SLUMINANCE_ALPHA                    0x8C44
+#define GL_SLUMINANCE8_ALPHA8                  0x8C45
+#define GL_SLUMINANCE                          0x8C46
+#define GL_SLUMINANCE8                         0x8C47
+#define GL_COMPRESSED_SLUMINANCE               0x8C4A
+#define GL_COMPRESSED_SLUMINANCE_ALPHA         0x8C4B
+typedef void (APIENTRYP pfn_glUniformMatrix2x3fv) (GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glUniformMatrix2x3fv fp_glUniformMatrix2x3fv;
+typedef void (APIENTRYP pfn_glUniformMatrix3x2fv) (GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glUniformMatrix3x2fv fp_glUniformMatrix3x2fv;
+typedef void (APIENTRYP pfn_glUniformMatrix2x4fv) (GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glUniformMatrix2x4fv fp_glUniformMatrix2x4fv;
+typedef void (APIENTRYP pfn_glUniformMatrix4x2fv) (GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glUniformMatrix4x2fv fp_glUniformMatrix4x2fv;
+typedef void (APIENTRYP pfn_glUniformMatrix3x4fv) (GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glUniformMatrix3x4fv fp_glUniformMatrix3x4fv;
+typedef void (APIENTRYP pfn_glUniformMatrix4x3fv) (GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glUniformMatrix4x3fv fp_glUniformMatrix4x3fv;
+
+ /* GL_VERSION_3_0 */
+extern GLboolean GLAD_VERSION_3_0;
+#define GL_COMPARE_REF_TO_TEXTURE              0x884E
+#define GL_CLIP_DISTANCE0                      0x3000
+#define GL_CLIP_DISTANCE1                      0x3001
+#define GL_CLIP_DISTANCE2                      0x3002
+#define GL_CLIP_DISTANCE3                      0x3003
+#define GL_CLIP_DISTANCE4                      0x3004
+#define GL_CLIP_DISTANCE5                      0x3005
+#define GL_CLIP_DISTANCE6                      0x3006
+#define GL_CLIP_DISTANCE7                      0x3007
+#define GL_MAX_CLIP_DISTANCES                  0x0D32
+#define GL_MAJOR_VERSION                       0x821B
+#define GL_MINOR_VERSION                       0x821C
+#define GL_NUM_EXTENSIONS                      0x821D
+#define GL_CONTEXT_FLAGS                       0x821E
+#define GL_COMPRESSED_RED                      0x8225
+#define GL_COMPRESSED_RG                       0x8226
+#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT  0x00000001
+#define GL_RGBA32F                             0x8814
+#define GL_RGB32F                              0x8815
+#define GL_RGBA16F                             0x881A
+#define GL_RGB16F                              0x881B
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER         0x88FD
+#define GL_MAX_ARRAY_TEXTURE_LAYERS            0x88FF
+#define GL_MIN_PROGRAM_TEXEL_OFFSET            0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET            0x8905
+#define GL_CLAMP_READ_COLOR                    0x891C
+#define GL_FIXED_ONLY                          0x891D
+#define GL_MAX_VARYING_COMPONENTS              0x8B4B
+#define GL_TEXTURE_1D_ARRAY                    0x8C18
+#define GL_PROXY_TEXTURE_1D_ARRAY              0x8C19
+#define GL_TEXTURE_2D_ARRAY                    0x8C1A
+#define GL_PROXY_TEXTURE_2D_ARRAY              0x8C1B
+#define GL_TEXTURE_BINDING_1D_ARRAY            0x8C1C
+#define GL_TEXTURE_BINDING_2D_ARRAY            0x8C1D
+#define GL_R11F_G11F_B10F                      0x8C3A
+#define GL_UNSIGNED_INT_10F_11F_11F_REV        0x8C3B
+#define GL_RGB9_E5                             0x8C3D
+#define GL_UNSIGNED_INT_5_9_9_9_REV            0x8C3E
+#define GL_TEXTURE_SHARED_SIZE                 0x8C3F
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH  0x8C76
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE      0x8C7F
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS  0x8C80
+#define GL_TRANSFORM_FEEDBACK_VARYINGS         0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START     0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE      0x8C85
+#define GL_PRIMITIVES_GENERATED                0x8C87
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN  0x8C88
+#define GL_RASTERIZER_DISCARD                  0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS  0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS  0x8C8B
+#define GL_INTERLEAVED_ATTRIBS                 0x8C8C
+#define GL_SEPARATE_ATTRIBS                    0x8C8D
+#define GL_TRANSFORM_FEEDBACK_BUFFER           0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING   0x8C8F
+#define GL_RGBA32UI                            0x8D70
+#define GL_RGB32UI                             0x8D71
+#define GL_RGBA16UI                            0x8D76
+#define GL_RGB16UI                             0x8D77
+#define GL_RGBA8UI                             0x8D7C
+#define GL_RGB8UI                              0x8D7D
+#define GL_RGBA32I                             0x8D82
+#define GL_RGB32I                              0x8D83
+#define GL_RGBA16I                             0x8D88
+#define GL_RGB16I                              0x8D89
+#define GL_RGBA8I                              0x8D8E
+#define GL_RGB8I                               0x8D8F
+#define GL_RED_INTEGER                         0x8D94
+#define GL_GREEN_INTEGER                       0x8D95
+#define GL_BLUE_INTEGER                        0x8D96
+#define GL_RGB_INTEGER                         0x8D98
+#define GL_RGBA_INTEGER                        0x8D99
+#define GL_BGR_INTEGER                         0x8D9A
+#define GL_BGRA_INTEGER                        0x8D9B
+#define GL_SAMPLER_1D_ARRAY                    0x8DC0
+#define GL_SAMPLER_2D_ARRAY                    0x8DC1
+#define GL_SAMPLER_1D_ARRAY_SHADOW             0x8DC3
+#define GL_SAMPLER_2D_ARRAY_SHADOW             0x8DC4
+#define GL_SAMPLER_CUBE_SHADOW                 0x8DC5
+#define GL_UNSIGNED_INT_VEC2                   0x8DC6
+#define GL_UNSIGNED_INT_VEC3                   0x8DC7
+#define GL_UNSIGNED_INT_VEC4                   0x8DC8
+#define GL_INT_SAMPLER_1D                      0x8DC9
+#define GL_INT_SAMPLER_2D                      0x8DCA
+#define GL_INT_SAMPLER_3D                      0x8DCB
+#define GL_INT_SAMPLER_CUBE                    0x8DCC
+#define GL_INT_SAMPLER_1D_ARRAY                0x8DCE
+#define GL_INT_SAMPLER_2D_ARRAY                0x8DCF
+#define GL_UNSIGNED_INT_SAMPLER_1D             0x8DD1
+#define GL_UNSIGNED_INT_SAMPLER_2D             0x8DD2
+#define GL_UNSIGNED_INT_SAMPLER_3D             0x8DD3
+#define GL_UNSIGNED_INT_SAMPLER_CUBE           0x8DD4
+#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY       0x8DD6
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY       0x8DD7
+#define GL_QUERY_WAIT                          0x8E13
+#define GL_QUERY_NO_WAIT                       0x8E14
+#define GL_QUERY_BY_REGION_WAIT                0x8E15
+#define GL_QUERY_BY_REGION_NO_WAIT             0x8E16
+#define GL_BUFFER_ACCESS_FLAGS                 0x911F
+#define GL_BUFFER_MAP_LENGTH                   0x9120
+#define GL_BUFFER_MAP_OFFSET                   0x9121
+#define GL_DEPTH_COMPONENT32F                  0x8CAC
+#define GL_DEPTH32F_STENCIL8                   0x8CAD
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV      0x8DAD
+#define GL_INVALID_FRAMEBUFFER_OPERATION       0x0506
+#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING  0x8210
+#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE  0x8211
+#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE     0x8212
+#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE   0x8213
+#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE    0x8214
+#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE   0x8215
+#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE   0x8216
+#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE  0x8217
+#define GL_FRAMEBUFFER_DEFAULT                 0x8218
+#define GL_FRAMEBUFFER_UNDEFINED               0x8219
+#define GL_DEPTH_STENCIL_ATTACHMENT            0x821A
+#define GL_MAX_RENDERBUFFER_SIZE               0x84E8
+#define GL_DEPTH_STENCIL                       0x84F9
+#define GL_UNSIGNED_INT_24_8                   0x84FA
+#define GL_DEPTH24_STENCIL8                    0x88F0
+#define GL_TEXTURE_STENCIL_SIZE                0x88F1
+#define GL_TEXTURE_RED_TYPE                    0x8C10
+#define GL_TEXTURE_GREEN_TYPE                  0x8C11
+#define GL_TEXTURE_BLUE_TYPE                   0x8C12
+#define GL_TEXTURE_ALPHA_TYPE                  0x8C13
+#define GL_TEXTURE_DEPTH_TYPE                  0x8C16
+#define GL_UNSIGNED_NORMALIZED                 0x8C17
+#define GL_FRAMEBUFFER_BINDING                 0x8CA6
+#define GL_DRAW_FRAMEBUFFER_BINDING            0x8CA6
+#define GL_RENDERBUFFER_BINDING                0x8CA7
+#define GL_READ_FRAMEBUFFER                    0x8CA8
+#define GL_DRAW_FRAMEBUFFER                    0x8CA9
+#define GL_READ_FRAMEBUFFER_BINDING            0x8CAA
+#define GL_RENDERBUFFER_SAMPLES                0x8CAB
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE  0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME  0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL  0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE  0x8CD3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER  0x8CD4
+#define GL_FRAMEBUFFER_COMPLETE                0x8CD5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT   0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT  0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER  0x8CDB
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER  0x8CDC
+#define GL_FRAMEBUFFER_UNSUPPORTED             0x8CDD
+#define GL_MAX_COLOR_ATTACHMENTS               0x8CDF
+#define GL_COLOR_ATTACHMENT0                   0x8CE0
+#define GL_COLOR_ATTACHMENT1                   0x8CE1
+#define GL_COLOR_ATTACHMENT2                   0x8CE2
+#define GL_COLOR_ATTACHMENT3                   0x8CE3
+#define GL_COLOR_ATTACHMENT4                   0x8CE4
+#define GL_COLOR_ATTACHMENT5                   0x8CE5
+#define GL_COLOR_ATTACHMENT6                   0x8CE6
+#define GL_COLOR_ATTACHMENT7                   0x8CE7
+#define GL_COLOR_ATTACHMENT8                   0x8CE8
+#define GL_COLOR_ATTACHMENT9                   0x8CE9
+#define GL_COLOR_ATTACHMENT10                  0x8CEA
+#define GL_COLOR_ATTACHMENT11                  0x8CEB
+#define GL_COLOR_ATTACHMENT12                  0x8CEC
+#define GL_COLOR_ATTACHMENT13                  0x8CED
+#define GL_COLOR_ATTACHMENT14                  0x8CEE
+#define GL_COLOR_ATTACHMENT15                  0x8CEF
+#define GL_DEPTH_ATTACHMENT                    0x8D00
+#define GL_STENCIL_ATTACHMENT                  0x8D20
+#define GL_FRAMEBUFFER                         0x8D40
+#define GL_RENDERBUFFER                        0x8D41
+#define GL_RENDERBUFFER_WIDTH                  0x8D42
+#define GL_RENDERBUFFER_HEIGHT                 0x8D43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT        0x8D44
+#define GL_STENCIL_INDEX1                      0x8D46
+#define GL_STENCIL_INDEX4                      0x8D47
+#define GL_STENCIL_INDEX8                      0x8D48
+#define GL_STENCIL_INDEX16                     0x8D49
+#define GL_RENDERBUFFER_RED_SIZE               0x8D50
+#define GL_RENDERBUFFER_GREEN_SIZE             0x8D51
+#define GL_RENDERBUFFER_BLUE_SIZE              0x8D52
+#define GL_RENDERBUFFER_ALPHA_SIZE             0x8D53
+#define GL_RENDERBUFFER_DEPTH_SIZE             0x8D54
+#define GL_RENDERBUFFER_STENCIL_SIZE           0x8D55
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE  0x8D56
+#define GL_MAX_SAMPLES                         0x8D57
+#define GL_INDEX                               0x8222
+#define GL_TEXTURE_LUMINANCE_TYPE              0x8C14
+#define GL_TEXTURE_INTENSITY_TYPE              0x8C15
+#define GL_FRAMEBUFFER_SRGB                    0x8DB9
+#define GL_HALF_FLOAT                          0x140B
+#define GL_MAP_READ_BIT                        0x0001
+#define GL_MAP_WRITE_BIT                       0x0002
+#define GL_MAP_INVALIDATE_RANGE_BIT            0x0004
+#define GL_MAP_INVALIDATE_BUFFER_BIT           0x0008
+#define GL_MAP_FLUSH_EXPLICIT_BIT              0x0010
+#define GL_MAP_UNSYNCHRONIZED_BIT              0x0020
+#define GL_COMPRESSED_RED_RGTC1                0x8DBB
+#define GL_COMPRESSED_SIGNED_RED_RGTC1         0x8DBC
+#define GL_COMPRESSED_RG_RGTC2                 0x8DBD
+#define GL_COMPRESSED_SIGNED_RG_RGTC2          0x8DBE
+#define GL_RG                                  0x8227
+#define GL_RG_INTEGER                          0x8228
+#define GL_R8                                  0x8229
+#define GL_R16                                 0x822A
+#define GL_RG8                                 0x822B
+#define GL_RG16                                0x822C
+#define GL_R16F                                0x822D
+#define GL_R32F                                0x822E
+#define GL_RG16F                               0x822F
+#define GL_RG32F                               0x8230
+#define GL_R8I                                 0x8231
+#define GL_R8UI                                0x8232
+#define GL_R16I                                0x8233
+#define GL_R16UI                               0x8234
+#define GL_R32I                                0x8235
+#define GL_R32UI                               0x8236
+#define GL_RG8I                                0x8237
+#define GL_RG8UI                               0x8238
+#define GL_RG16I                               0x8239
+#define GL_RG16UI                              0x823A
+#define GL_RG32I                               0x823B
+#define GL_RG32UI                              0x823C
+#define GL_VERTEX_ARRAY_BINDING                0x85B5
+#define GL_CLAMP_VERTEX_COLOR                  0x891A
+#define GL_CLAMP_FRAGMENT_COLOR                0x891B
+#define GL_ALPHA_INTEGER                       0x8D97
+typedef void (APIENTRYP pfn_glColorMaski) (GLuint, GLboolean, GLboolean, GLboolean, GLboolean);
+extern pfn_glColorMaski fp_glColorMaski;
+typedef void (APIENTRYP pfn_glGetBooleani_v) (GLenum, GLuint, GLboolean*);
+extern pfn_glGetBooleani_v fp_glGetBooleani_v;
+typedef void (APIENTRYP pfn_glGetIntegeri_v) (GLenum, GLuint, GLint*);
+extern pfn_glGetIntegeri_v fp_glGetIntegeri_v;
+typedef void (APIENTRYP pfn_glEnablei) (GLenum, GLuint);
+extern pfn_glEnablei fp_glEnablei;
+typedef void (APIENTRYP pfn_glDisablei) (GLenum, GLuint);
+extern pfn_glDisablei fp_glDisablei;
+typedef GLboolean (APIENTRYP pfn_glIsEnabledi) (GLenum, GLuint);
+extern pfn_glIsEnabledi fp_glIsEnabledi;
+typedef void (APIENTRYP pfn_glBeginTransformFeedback) (GLenum);
+extern pfn_glBeginTransformFeedback fp_glBeginTransformFeedback;
+typedef void (APIENTRYP pfn_glEndTransformFeedback) ();
+extern pfn_glEndTransformFeedback fp_glEndTransformFeedback;
+typedef void (APIENTRYP pfn_glBindBufferRange) (GLenum, GLuint, GLuint, GLintptr, GLsizeiptr);
+extern pfn_glBindBufferRange fp_glBindBufferRange;
+typedef void (APIENTRYP pfn_glBindBufferBase) (GLenum, GLuint, GLuint);
+extern pfn_glBindBufferBase fp_glBindBufferBase;
+typedef void (APIENTRYP pfn_glTransformFeedbackVaryings) (GLuint, GLsizei, const GLchar**, GLenum);
+extern pfn_glTransformFeedbackVaryings fp_glTransformFeedbackVaryings;
+typedef void (APIENTRYP pfn_glGetTransformFeedbackVarying) (GLuint, GLuint, GLsizei, GLsizei*, GLsizei*, GLenum*, GLchar*);
+extern pfn_glGetTransformFeedbackVarying fp_glGetTransformFeedbackVarying;
+typedef void (APIENTRYP pfn_glClampColor) (GLenum, GLenum);
+extern pfn_glClampColor fp_glClampColor;
+typedef void (APIENTRYP pfn_glBeginConditionalRender) (GLuint, GLenum);
+extern pfn_glBeginConditionalRender fp_glBeginConditionalRender;
+typedef void (APIENTRYP pfn_glEndConditionalRender) ();
+extern pfn_glEndConditionalRender fp_glEndConditionalRender;
+typedef void (APIENTRYP pfn_glVertexAttribIPointer) (GLuint, GLint, GLenum, GLsizei, const void*);
+extern pfn_glVertexAttribIPointer fp_glVertexAttribIPointer;
+typedef void (APIENTRYP pfn_glGetVertexAttribIiv) (GLuint, GLenum, GLint*);
+extern pfn_glGetVertexAttribIiv fp_glGetVertexAttribIiv;
+typedef void (APIENTRYP pfn_glGetVertexAttribIuiv) (GLuint, GLenum, GLuint*);
+extern pfn_glGetVertexAttribIuiv fp_glGetVertexAttribIuiv;
+typedef void (APIENTRYP pfn_glVertexAttribI1i) (GLuint, GLint);
+extern pfn_glVertexAttribI1i fp_glVertexAttribI1i;
+typedef void (APIENTRYP pfn_glVertexAttribI2i) (GLuint, GLint, GLint);
+extern pfn_glVertexAttribI2i fp_glVertexAttribI2i;
+typedef void (APIENTRYP pfn_glVertexAttribI3i) (GLuint, GLint, GLint, GLint);
+extern pfn_glVertexAttribI3i fp_glVertexAttribI3i;
+typedef void (APIENTRYP pfn_glVertexAttribI4i) (GLuint, GLint, GLint, GLint, GLint);
+extern pfn_glVertexAttribI4i fp_glVertexAttribI4i;
+typedef void (APIENTRYP pfn_glVertexAttribI1ui) (GLuint, GLuint);
+extern pfn_glVertexAttribI1ui fp_glVertexAttribI1ui;
+typedef void (APIENTRYP pfn_glVertexAttribI2ui) (GLuint, GLuint, GLuint);
+extern pfn_glVertexAttribI2ui fp_glVertexAttribI2ui;
+typedef void (APIENTRYP pfn_glVertexAttribI3ui) (GLuint, GLuint, GLuint, GLuint);
+extern pfn_glVertexAttribI3ui fp_glVertexAttribI3ui;
+typedef void (APIENTRYP pfn_glVertexAttribI4ui) (GLuint, GLuint, GLuint, GLuint, GLuint);
+extern pfn_glVertexAttribI4ui fp_glVertexAttribI4ui;
+typedef void (APIENTRYP pfn_glVertexAttribI1iv) (GLuint, const GLint*);
+extern pfn_glVertexAttribI1iv fp_glVertexAttribI1iv;
+typedef void (APIENTRYP pfn_glVertexAttribI2iv) (GLuint, const GLint*);
+extern pfn_glVertexAttribI2iv fp_glVertexAttribI2iv;
+typedef void (APIENTRYP pfn_glVertexAttribI3iv) (GLuint, const GLint*);
+extern pfn_glVertexAttribI3iv fp_glVertexAttribI3iv;
+typedef void (APIENTRYP pfn_glVertexAttribI4iv) (GLuint, const GLint*);
+extern pfn_glVertexAttribI4iv fp_glVertexAttribI4iv;
+typedef void (APIENTRYP pfn_glVertexAttribI1uiv) (GLuint, const GLuint*);
+extern pfn_glVertexAttribI1uiv fp_glVertexAttribI1uiv;
+typedef void (APIENTRYP pfn_glVertexAttribI2uiv) (GLuint, const GLuint*);
+extern pfn_glVertexAttribI2uiv fp_glVertexAttribI2uiv;
+typedef void (APIENTRYP pfn_glVertexAttribI3uiv) (GLuint, const GLuint*);
+extern pfn_glVertexAttribI3uiv fp_glVertexAttribI3uiv;
+typedef void (APIENTRYP pfn_glVertexAttribI4uiv) (GLuint, const GLuint*);
+extern pfn_glVertexAttribI4uiv fp_glVertexAttribI4uiv;
+typedef void (APIENTRYP pfn_glVertexAttribI4bv) (GLuint, const GLbyte*);
+extern pfn_glVertexAttribI4bv fp_glVertexAttribI4bv;
+typedef void (APIENTRYP pfn_glVertexAttribI4sv) (GLuint, const GLshort*);
+extern pfn_glVertexAttribI4sv fp_glVertexAttribI4sv;
+typedef void (APIENTRYP pfn_glVertexAttribI4ubv) (GLuint, const GLubyte*);
+extern pfn_glVertexAttribI4ubv fp_glVertexAttribI4ubv;
+typedef void (APIENTRYP pfn_glVertexAttribI4usv) (GLuint, const GLushort*);
+extern pfn_glVertexAttribI4usv fp_glVertexAttribI4usv;
+typedef void (APIENTRYP pfn_glGetUniformuiv) (GLuint, GLint, GLuint*);
+extern pfn_glGetUniformuiv fp_glGetUniformuiv;
+typedef void (APIENTRYP pfn_glBindFragDataLocation) (GLuint, GLuint, const GLchar*);
+extern pfn_glBindFragDataLocation fp_glBindFragDataLocation;
+typedef GLint (APIENTRYP pfn_glGetFragDataLocation) (GLuint, const GLchar*);
+extern pfn_glGetFragDataLocation fp_glGetFragDataLocation;
+typedef void (APIENTRYP pfn_glUniform1ui) (GLint, GLuint);
+extern pfn_glUniform1ui fp_glUniform1ui;
+typedef void (APIENTRYP pfn_glUniform2ui) (GLint, GLuint, GLuint);
+extern pfn_glUniform2ui fp_glUniform2ui;
+typedef void (APIENTRYP pfn_glUniform3ui) (GLint, GLuint, GLuint, GLuint);
+extern pfn_glUniform3ui fp_glUniform3ui;
+typedef void (APIENTRYP pfn_glUniform4ui) (GLint, GLuint, GLuint, GLuint, GLuint);
+extern pfn_glUniform4ui fp_glUniform4ui;
+typedef void (APIENTRYP pfn_glUniform1uiv) (GLint, GLsizei, const GLuint*);
+extern pfn_glUniform1uiv fp_glUniform1uiv;
+typedef void (APIENTRYP pfn_glUniform2uiv) (GLint, GLsizei, const GLuint*);
+extern pfn_glUniform2uiv fp_glUniform2uiv;
+typedef void (APIENTRYP pfn_glUniform3uiv) (GLint, GLsizei, const GLuint*);
+extern pfn_glUniform3uiv fp_glUniform3uiv;
+typedef void (APIENTRYP pfn_glUniform4uiv) (GLint, GLsizei, const GLuint*);
+extern pfn_glUniform4uiv fp_glUniform4uiv;
+typedef void (APIENTRYP pfn_glTexParameterIiv) (GLenum, GLenum, const GLint*);
+extern pfn_glTexParameterIiv fp_glTexParameterIiv;
+typedef void (APIENTRYP pfn_glTexParameterIuiv) (GLenum, GLenum, const GLuint*);
+extern pfn_glTexParameterIuiv fp_glTexParameterIuiv;
+typedef void (APIENTRYP pfn_glGetTexParameterIiv) (GLenum, GLenum, GLint*);
+extern pfn_glGetTexParameterIiv fp_glGetTexParameterIiv;
+typedef void (APIENTRYP pfn_glGetTexParameterIuiv) (GLenum, GLenum, GLuint*);
+extern pfn_glGetTexParameterIuiv fp_glGetTexParameterIuiv;
+typedef void (APIENTRYP pfn_glClearBufferiv) (GLenum, GLint, const GLint*);
+extern pfn_glClearBufferiv fp_glClearBufferiv;
+typedef void (APIENTRYP pfn_glClearBufferuiv) (GLenum, GLint, const GLuint*);
+extern pfn_glClearBufferuiv fp_glClearBufferuiv;
+typedef void (APIENTRYP pfn_glClearBufferfv) (GLenum, GLint, const GLfloat*);
+extern pfn_glClearBufferfv fp_glClearBufferfv;
+typedef void (APIENTRYP pfn_glClearBufferfi) (GLenum, GLint, GLfloat, GLint);
+extern pfn_glClearBufferfi fp_glClearBufferfi;
+typedef const GLubyte* (APIENTRYP pfn_glGetStringi) (GLenum, GLuint);
+extern pfn_glGetStringi fp_glGetStringi;
+typedef GLboolean (APIENTRYP pfn_glIsRenderbuffer) (GLuint);
+extern pfn_glIsRenderbuffer fp_glIsRenderbuffer;
+typedef void (APIENTRYP pfn_glBindRenderbuffer) (GLenum, GLuint);
+extern pfn_glBindRenderbuffer fp_glBindRenderbuffer;
+typedef void (APIENTRYP pfn_glDeleteRenderbuffers) (GLsizei, const GLuint*);
+extern pfn_glDeleteRenderbuffers fp_glDeleteRenderbuffers;
+typedef void (APIENTRYP pfn_glGenRenderbuffers) (GLsizei, GLuint*);
+extern pfn_glGenRenderbuffers fp_glGenRenderbuffers;
+typedef void (APIENTRYP pfn_glRenderbufferStorage) (GLenum, GLenum, GLsizei, GLsizei);
+extern pfn_glRenderbufferStorage fp_glRenderbufferStorage;
+typedef void (APIENTRYP pfn_glGetRenderbufferParameteriv) (GLenum, GLenum, GLint*);
+extern pfn_glGetRenderbufferParameteriv fp_glGetRenderbufferParameteriv;
+typedef GLboolean (APIENTRYP pfn_glIsFramebuffer) (GLuint);
+extern pfn_glIsFramebuffer fp_glIsFramebuffer;
+typedef void (APIENTRYP pfn_glBindFramebuffer) (GLenum, GLuint);
+extern pfn_glBindFramebuffer fp_glBindFramebuffer;
+typedef void (APIENTRYP pfn_glDeleteFramebuffers) (GLsizei, const GLuint*);
+extern pfn_glDeleteFramebuffers fp_glDeleteFramebuffers;
+typedef void (APIENTRYP pfn_glGenFramebuffers) (GLsizei, GLuint*);
+extern pfn_glGenFramebuffers fp_glGenFramebuffers;
+typedef GLenum (APIENTRYP pfn_glCheckFramebufferStatus) (GLenum);
+extern pfn_glCheckFramebufferStatus fp_glCheckFramebufferStatus;
+typedef void (APIENTRYP pfn_glFramebufferTexture1D) (GLenum, GLenum, GLenum, GLuint, GLint);
+extern pfn_glFramebufferTexture1D fp_glFramebufferTexture1D;
+typedef void (APIENTRYP pfn_glFramebufferTexture2D) (GLenum, GLenum, GLenum, GLuint, GLint);
+extern pfn_glFramebufferTexture2D fp_glFramebufferTexture2D;
+typedef void (APIENTRYP pfn_glFramebufferTexture3D) (GLenum, GLenum, GLenum, GLuint, GLint, GLint);
+extern pfn_glFramebufferTexture3D fp_glFramebufferTexture3D;
+typedef void (APIENTRYP pfn_glFramebufferRenderbuffer) (GLenum, GLenum, GLenum, GLuint);
+extern pfn_glFramebufferRenderbuffer fp_glFramebufferRenderbuffer;
+typedef void (APIENTRYP pfn_glGetFramebufferAttachmentParameteriv) (GLenum, GLenum, GLenum, GLint*);
+extern pfn_glGetFramebufferAttachmentParameteriv fp_glGetFramebufferAttachmentParameteriv;
+typedef void (APIENTRYP pfn_glGenerateMipmap) (GLenum);
+extern pfn_glGenerateMipmap fp_glGenerateMipmap;
+typedef void (APIENTRYP pfn_glBlitFramebuffer) (GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum);
+extern pfn_glBlitFramebuffer fp_glBlitFramebuffer;
+typedef void (APIENTRYP pfn_glRenderbufferStorageMultisample) (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
+extern pfn_glRenderbufferStorageMultisample fp_glRenderbufferStorageMultisample;
+typedef void (APIENTRYP pfn_glFramebufferTextureLayer) (GLenum, GLenum, GLuint, GLint, GLint);
+extern pfn_glFramebufferTextureLayer fp_glFramebufferTextureLayer;
+typedef void* (APIENTRYP pfn_glMapBufferRange) (GLenum, GLintptr, GLsizeiptr, GLbitfield);
+extern pfn_glMapBufferRange fp_glMapBufferRange;
+typedef void (APIENTRYP pfn_glFlushMappedBufferRange) (GLenum, GLintptr, GLsizeiptr);
+extern pfn_glFlushMappedBufferRange fp_glFlushMappedBufferRange;
+typedef void (APIENTRYP pfn_glBindVertexArray) (GLuint);
+extern pfn_glBindVertexArray fp_glBindVertexArray;
+typedef void (APIENTRYP pfn_glDeleteVertexArrays) (GLsizei, const GLuint*);
+extern pfn_glDeleteVertexArrays fp_glDeleteVertexArrays;
+typedef void (APIENTRYP pfn_glGenVertexArrays) (GLsizei, GLuint*);
+extern pfn_glGenVertexArrays fp_glGenVertexArrays;
+typedef GLboolean (APIENTRYP pfn_glIsVertexArray) (GLuint);
+extern pfn_glIsVertexArray fp_glIsVertexArray;
+
+ /* GL_VERSION_3_1 */
+extern GLboolean GLAD_VERSION_3_1;
+#define GL_SAMPLER_2D_RECT                     0x8B63
+#define GL_SAMPLER_2D_RECT_SHADOW              0x8B64
+#define GL_SAMPLER_BUFFER                      0x8DC2
+#define GL_INT_SAMPLER_2D_RECT                 0x8DCD
+#define GL_INT_SAMPLER_BUFFER                  0x8DD0
+#define GL_UNSIGNED_INT_SAMPLER_2D_RECT        0x8DD5
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER         0x8DD8
+#define GL_TEXTURE_BUFFER                      0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE             0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER              0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING   0x8C2D
+#define GL_TEXTURE_RECTANGLE                   0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE           0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE             0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE          0x84F8
+#define GL_R8_SNORM                            0x8F94
+#define GL_RG8_SNORM                           0x8F95
+#define GL_RGB8_SNORM                          0x8F96
+#define GL_RGBA8_SNORM                         0x8F97
+#define GL_R16_SNORM                           0x8F98
+#define GL_RG16_SNORM                          0x8F99
+#define GL_RGB16_SNORM                         0x8F9A
+#define GL_RGBA16_SNORM                        0x8F9B
+#define GL_SIGNED_NORMALIZED                   0x8F9C
+#define GL_PRIMITIVE_RESTART                   0x8F9D
+#define GL_PRIMITIVE_RESTART_INDEX             0x8F9E
+#define GL_COPY_READ_BUFFER                    0x8F36
+#define GL_COPY_WRITE_BUFFER                   0x8F37
+#define GL_UNIFORM_BUFFER                      0x8A11
+#define GL_UNIFORM_BUFFER_BINDING              0x8A28
+#define GL_UNIFORM_BUFFER_START                0x8A29
+#define GL_UNIFORM_BUFFER_SIZE                 0x8A2A
+#define GL_MAX_VERTEX_UNIFORM_BLOCKS           0x8A2B
+#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS         0x8A2C
+#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS         0x8A2D
+#define GL_MAX_COMBINED_UNIFORM_BLOCKS         0x8A2E
+#define GL_MAX_UNIFORM_BUFFER_BINDINGS         0x8A2F
+#define GL_MAX_UNIFORM_BLOCK_SIZE              0x8A30
+#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS  0x8A31
+#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS  0x8A32
+#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS  0x8A33
+#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT     0x8A34
+#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH  0x8A35
+#define GL_ACTIVE_UNIFORM_BLOCKS               0x8A36
+#define GL_UNIFORM_TYPE                        0x8A37
+#define GL_UNIFORM_SIZE                        0x8A38
+#define GL_UNIFORM_NAME_LENGTH                 0x8A39
+#define GL_UNIFORM_BLOCK_INDEX                 0x8A3A
+#define GL_UNIFORM_OFFSET                      0x8A3B
+#define GL_UNIFORM_ARRAY_STRIDE                0x8A3C
+#define GL_UNIFORM_MATRIX_STRIDE               0x8A3D
+#define GL_UNIFORM_IS_ROW_MAJOR                0x8A3E
+#define GL_UNIFORM_BLOCK_BINDING               0x8A3F
+#define GL_UNIFORM_BLOCK_DATA_SIZE             0x8A40
+#define GL_UNIFORM_BLOCK_NAME_LENGTH           0x8A41
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS       0x8A42
+#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES  0x8A43
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER  0x8A44
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER  0x8A45
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER  0x8A46
+#define GL_INVALID_INDEX                       0xFFFFFFFF
+typedef void (APIENTRYP pfn_glDrawArraysInstanced) (GLenum, GLint, GLsizei, GLsizei);
+extern pfn_glDrawArraysInstanced fp_glDrawArraysInstanced;
+typedef void (APIENTRYP pfn_glDrawElementsInstanced) (GLenum, GLsizei, GLenum, const void*, GLsizei);
+extern pfn_glDrawElementsInstanced fp_glDrawElementsInstanced;
+typedef void (APIENTRYP pfn_glTexBuffer) (GLenum, GLenum, GLuint);
+extern pfn_glTexBuffer fp_glTexBuffer;
+typedef void (APIENTRYP pfn_glPrimitiveRestartIndex) (GLuint);
+extern pfn_glPrimitiveRestartIndex fp_glPrimitiveRestartIndex;
+typedef void (APIENTRYP pfn_glCopyBufferSubData) (GLenum, GLenum, GLintptr, GLintptr, GLsizeiptr);
+extern pfn_glCopyBufferSubData fp_glCopyBufferSubData;
+typedef void (APIENTRYP pfn_glGetUniformIndices) (GLuint, GLsizei, const GLchar**, GLuint*);
+extern pfn_glGetUniformIndices fp_glGetUniformIndices;
+typedef void (APIENTRYP pfn_glGetActiveUniformsiv) (GLuint, GLsizei, const GLuint*, GLenum, GLint*);
+extern pfn_glGetActiveUniformsiv fp_glGetActiveUniformsiv;
+typedef void (APIENTRYP pfn_glGetActiveUniformName) (GLuint, GLuint, GLsizei, GLsizei*, GLchar*);
+extern pfn_glGetActiveUniformName fp_glGetActiveUniformName;
+typedef GLuint (APIENTRYP pfn_glGetUniformBlockIndex) (GLuint, const GLchar*);
+extern pfn_glGetUniformBlockIndex fp_glGetUniformBlockIndex;
+typedef void (APIENTRYP pfn_glGetActiveUniformBlockiv) (GLuint, GLuint, GLenum, GLint*);
+extern pfn_glGetActiveUniformBlockiv fp_glGetActiveUniformBlockiv;
+typedef void (APIENTRYP pfn_glGetActiveUniformBlockName) (GLuint, GLuint, GLsizei, GLsizei*, GLchar*);
+extern pfn_glGetActiveUniformBlockName fp_glGetActiveUniformBlockName;
+typedef void (APIENTRYP pfn_glUniformBlockBinding) (GLuint, GLuint, GLuint);
+extern pfn_glUniformBlockBinding fp_glUniformBlockBinding;
+
+ /* GL_VERSION_3_2 */
+extern GLboolean GLAD_VERSION_3_2;
+#define GL_CONTEXT_CORE_PROFILE_BIT            0x00000001
+#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT   0x00000002
+#define GL_LINES_ADJACENCY                     0x000A
+#define GL_LINE_STRIP_ADJACENCY                0x000B
+#define GL_TRIANGLES_ADJACENCY                 0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY            0x000D
+#define GL_PROGRAM_POINT_SIZE                  0x8642
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS    0x8C29
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED      0x8DA7
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS  0x8DA8
+#define GL_GEOMETRY_SHADER                     0x8DD9
+#define GL_GEOMETRY_VERTICES_OUT               0x8916
+#define GL_GEOMETRY_INPUT_TYPE                 0x8917
+#define GL_GEOMETRY_OUTPUT_TYPE                0x8918
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS     0x8DDF
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES        0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS  0x8DE1
+#define GL_MAX_VERTEX_OUTPUT_COMPONENTS        0x9122
+#define GL_MAX_GEOMETRY_INPUT_COMPONENTS       0x9123
+#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS      0x9124
+#define GL_MAX_FRAGMENT_INPUT_COMPONENTS       0x9125
+#define GL_CONTEXT_PROFILE_MASK                0x9126
+#define GL_DEPTH_CLAMP                         0x864F
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION  0x8E4C
+#define GL_FIRST_VERTEX_CONVENTION             0x8E4D
+#define GL_LAST_VERTEX_CONVENTION              0x8E4E
+#define GL_PROVOKING_VERTEX                    0x8E4F
+#define GL_TEXTURE_CUBE_MAP_SEAMLESS           0x884F
+#define GL_MAX_SERVER_WAIT_TIMEOUT             0x9111
+#define GL_OBJECT_TYPE                         0x9112
+#define GL_SYNC_CONDITION                      0x9113
+#define GL_SYNC_STATUS                         0x9114
+#define GL_SYNC_FLAGS                          0x9115
+#define GL_SYNC_FENCE                          0x9116
+#define GL_SYNC_GPU_COMMANDS_COMPLETE          0x9117
+#define GL_UNSIGNALED                          0x9118
+#define GL_SIGNALED                            0x9119
+#define GL_ALREADY_SIGNALED                    0x911A
+#define GL_TIMEOUT_EXPIRED                     0x911B
+#define GL_CONDITION_SATISFIED                 0x911C
+#define GL_WAIT_FAILED                         0x911D
+#define GL_TIMEOUT_IGNORED                     0xFFFFFFFFFFFFFFFF
+#define GL_SYNC_FLUSH_COMMANDS_BIT             0x00000001
+#define GL_SAMPLE_POSITION                     0x8E50
+#define GL_SAMPLE_MASK                         0x8E51
+#define GL_SAMPLE_MASK_VALUE                   0x8E52
+#define GL_MAX_SAMPLE_MASK_WORDS               0x8E59
+#define GL_TEXTURE_2D_MULTISAMPLE              0x9100
+#define GL_PROXY_TEXTURE_2D_MULTISAMPLE        0x9101
+#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY        0x9102
+#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY  0x9103
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE      0x9104
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY  0x9105
+#define GL_TEXTURE_SAMPLES                     0x9106
+#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS      0x9107
+#define GL_SAMPLER_2D_MULTISAMPLE              0x9108
+#define GL_INT_SAMPLER_2D_MULTISAMPLE          0x9109
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE  0x910A
+#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY        0x910B
+#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY    0x910C
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY  0x910D
+#define GL_MAX_COLOR_TEXTURE_SAMPLES           0x910E
+#define GL_MAX_DEPTH_TEXTURE_SAMPLES           0x910F
+#define GL_MAX_INTEGER_SAMPLES                 0x9110
+typedef void (APIENTRYP pfn_glDrawElementsBaseVertex) (GLenum, GLsizei, GLenum, const void*, GLint);
+extern pfn_glDrawElementsBaseVertex fp_glDrawElementsBaseVertex;
+typedef void (APIENTRYP pfn_glDrawRangeElementsBaseVertex) (GLenum, GLuint, GLuint, GLsizei, GLenum, const void*, GLint);
+extern pfn_glDrawRangeElementsBaseVertex fp_glDrawRangeElementsBaseVertex;
+typedef void (APIENTRYP pfn_glDrawElementsInstancedBaseVertex) (GLenum, GLsizei, GLenum, const void*, GLsizei, GLint);
+extern pfn_glDrawElementsInstancedBaseVertex fp_glDrawElementsInstancedBaseVertex;
+typedef void (APIENTRYP pfn_glMultiDrawElementsBaseVertex) (GLenum, const GLsizei*, GLenum, const void**, GLsizei, const GLint*);
+extern pfn_glMultiDrawElementsBaseVertex fp_glMultiDrawElementsBaseVertex;
+typedef void (APIENTRYP pfn_glProvokingVertex) (GLenum);
+extern pfn_glProvokingVertex fp_glProvokingVertex;
+typedef GLsync (APIENTRYP pfn_glFenceSync) (GLenum, GLbitfield);
+extern pfn_glFenceSync fp_glFenceSync;
+typedef GLboolean (APIENTRYP pfn_glIsSync) (GLsync);
+extern pfn_glIsSync fp_glIsSync;
+typedef void (APIENTRYP pfn_glDeleteSync) (GLsync);
+extern pfn_glDeleteSync fp_glDeleteSync;
+typedef GLenum (APIENTRYP pfn_glClientWaitSync) (GLsync, GLbitfield, GLuint64);
+extern pfn_glClientWaitSync fp_glClientWaitSync;
+typedef void (APIENTRYP pfn_glWaitSync) (GLsync, GLbitfield, GLuint64);
+extern pfn_glWaitSync fp_glWaitSync;
+typedef void (APIENTRYP pfn_glGetInteger64v) (GLenum, GLint64*);
+extern pfn_glGetInteger64v fp_glGetInteger64v;
+typedef void (APIENTRYP pfn_glGetSynciv) (GLsync, GLenum, GLsizei, GLsizei*, GLint*);
+extern pfn_glGetSynciv fp_glGetSynciv;
+typedef void (APIENTRYP pfn_glGetInteger64i_v) (GLenum, GLuint, GLint64*);
+extern pfn_glGetInteger64i_v fp_glGetInteger64i_v;
+typedef void (APIENTRYP pfn_glGetBufferParameteri64v) (GLenum, GLenum, GLint64*);
+extern pfn_glGetBufferParameteri64v fp_glGetBufferParameteri64v;
+typedef void (APIENTRYP pfn_glFramebufferTexture) (GLenum, GLenum, GLuint, GLint);
+extern pfn_glFramebufferTexture fp_glFramebufferTexture;
+typedef void (APIENTRYP pfn_glTexImage2DMultisample) (GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLboolean);
+extern pfn_glTexImage2DMultisample fp_glTexImage2DMultisample;
+typedef void (APIENTRYP pfn_glTexImage3DMultisample) (GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean);
+extern pfn_glTexImage3DMultisample fp_glTexImage3DMultisample;
+typedef void (APIENTRYP pfn_glGetMultisamplefv) (GLenum, GLuint, GLfloat*);
+extern pfn_glGetMultisamplefv fp_glGetMultisamplefv;
+typedef void (APIENTRYP pfn_glSampleMaski) (GLuint, GLbitfield);
+extern pfn_glSampleMaski fp_glSampleMaski;
+
+ /* GL_VERSION_3_3 */
+extern GLboolean GLAD_VERSION_3_3;
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR         0x88FE
+#define GL_SRC1_COLOR                          0x88F9
+#define GL_ONE_MINUS_SRC1_COLOR                0x88FA
+#define GL_ONE_MINUS_SRC1_ALPHA                0x88FB
+#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS        0x88FC
+#define GL_ANY_SAMPLES_PASSED                  0x8C2F
+#define GL_SAMPLER_BINDING                     0x8919
+#define GL_RGB10_A2UI                          0x906F
+#define GL_TEXTURE_SWIZZLE_R                   0x8E42
+#define GL_TEXTURE_SWIZZLE_G                   0x8E43
+#define GL_TEXTURE_SWIZZLE_B                   0x8E44
+#define GL_TEXTURE_SWIZZLE_A                   0x8E45
+#define GL_TEXTURE_SWIZZLE_RGBA                0x8E46
+#define GL_TIME_ELAPSED                        0x88BF
+#define GL_TIMESTAMP                           0x8E28
+#define GL_INT_2_10_10_10_REV                  0x8D9F
+typedef void (APIENTRYP pfn_glBindFragDataLocationIndexed) (GLuint, GLuint, GLuint, const GLchar*);
+extern pfn_glBindFragDataLocationIndexed fp_glBindFragDataLocationIndexed;
+typedef GLint (APIENTRYP pfn_glGetFragDataIndex) (GLuint, const GLchar*);
+extern pfn_glGetFragDataIndex fp_glGetFragDataIndex;
+typedef void (APIENTRYP pfn_glGenSamplers) (GLsizei, GLuint*);
+extern pfn_glGenSamplers fp_glGenSamplers;
+typedef void (APIENTRYP pfn_glDeleteSamplers) (GLsizei, const GLuint*);
+extern pfn_glDeleteSamplers fp_glDeleteSamplers;
+typedef GLboolean (APIENTRYP pfn_glIsSampler) (GLuint);
+extern pfn_glIsSampler fp_glIsSampler;
+typedef void (APIENTRYP pfn_glBindSampler) (GLuint, GLuint);
+extern pfn_glBindSampler fp_glBindSampler;
+typedef void (APIENTRYP pfn_glSamplerParameteri) (GLuint, GLenum, GLint);
+extern pfn_glSamplerParameteri fp_glSamplerParameteri;
+typedef void (APIENTRYP pfn_glSamplerParameteriv) (GLuint, GLenum, const GLint*);
+extern pfn_glSamplerParameteriv fp_glSamplerParameteriv;
+typedef void (APIENTRYP pfn_glSamplerParameterf) (GLuint, GLenum, GLfloat);
+extern pfn_glSamplerParameterf fp_glSamplerParameterf;
+typedef void (APIENTRYP pfn_glSamplerParameterfv) (GLuint, GLenum, const GLfloat*);
+extern pfn_glSamplerParameterfv fp_glSamplerParameterfv;
+typedef void (APIENTRYP pfn_glSamplerParameterIiv) (GLuint, GLenum, const GLint*);
+extern pfn_glSamplerParameterIiv fp_glSamplerParameterIiv;
+typedef void (APIENTRYP pfn_glSamplerParameterIuiv) (GLuint, GLenum, const GLuint*);
+extern pfn_glSamplerParameterIuiv fp_glSamplerParameterIuiv;
+typedef void (APIENTRYP pfn_glGetSamplerParameteriv) (GLuint, GLenum, GLint*);
+extern pfn_glGetSamplerParameteriv fp_glGetSamplerParameteriv;
+typedef void (APIENTRYP pfn_glGetSamplerParameterIiv) (GLuint, GLenum, GLint*);
+extern pfn_glGetSamplerParameterIiv fp_glGetSamplerParameterIiv;
+typedef void (APIENTRYP pfn_glGetSamplerParameterfv) (GLuint, GLenum, GLfloat*);
+extern pfn_glGetSamplerParameterfv fp_glGetSamplerParameterfv;
+typedef void (APIENTRYP pfn_glGetSamplerParameterIuiv) (GLuint, GLenum, GLuint*);
+extern pfn_glGetSamplerParameterIuiv fp_glGetSamplerParameterIuiv;
+typedef void (APIENTRYP pfn_glQueryCounter) (GLuint, GLenum);
+extern pfn_glQueryCounter fp_glQueryCounter;
+typedef void (APIENTRYP pfn_glGetQueryObjecti64v) (GLuint, GLenum, GLint64*);
+extern pfn_glGetQueryObjecti64v fp_glGetQueryObjecti64v;
+typedef void (APIENTRYP pfn_glGetQueryObjectui64v) (GLuint, GLenum, GLuint64*);
+extern pfn_glGetQueryObjectui64v fp_glGetQueryObjectui64v;
+typedef void (APIENTRYP pfn_glVertexAttribDivisor) (GLuint, GLuint);
+extern pfn_glVertexAttribDivisor fp_glVertexAttribDivisor;
+typedef void (APIENTRYP pfn_glVertexAttribP1ui) (GLuint, GLenum, GLboolean, GLuint);
+extern pfn_glVertexAttribP1ui fp_glVertexAttribP1ui;
+typedef void (APIENTRYP pfn_glVertexAttribP1uiv) (GLuint, GLenum, GLboolean, const GLuint*);
+extern pfn_glVertexAttribP1uiv fp_glVertexAttribP1uiv;
+typedef void (APIENTRYP pfn_glVertexAttribP2ui) (GLuint, GLenum, GLboolean, GLuint);
+extern pfn_glVertexAttribP2ui fp_glVertexAttribP2ui;
+typedef void (APIENTRYP pfn_glVertexAttribP2uiv) (GLuint, GLenum, GLboolean, const GLuint*);
+extern pfn_glVertexAttribP2uiv fp_glVertexAttribP2uiv;
+typedef void (APIENTRYP pfn_glVertexAttribP3ui) (GLuint, GLenum, GLboolean, GLuint);
+extern pfn_glVertexAttribP3ui fp_glVertexAttribP3ui;
+typedef void (APIENTRYP pfn_glVertexAttribP3uiv) (GLuint, GLenum, GLboolean, const GLuint*);
+extern pfn_glVertexAttribP3uiv fp_glVertexAttribP3uiv;
+typedef void (APIENTRYP pfn_glVertexAttribP4ui) (GLuint, GLenum, GLboolean, GLuint);
+extern pfn_glVertexAttribP4ui fp_glVertexAttribP4ui;
+typedef void (APIENTRYP pfn_glVertexAttribP4uiv) (GLuint, GLenum, GLboolean, const GLuint*);
+extern pfn_glVertexAttribP4uiv fp_glVertexAttribP4uiv;
+typedef void (APIENTRYP pfn_glVertexP2ui) (GLenum, GLuint);
+extern pfn_glVertexP2ui fp_glVertexP2ui;
+typedef void (APIENTRYP pfn_glVertexP2uiv) (GLenum, const GLuint*);
+extern pfn_glVertexP2uiv fp_glVertexP2uiv;
+typedef void (APIENTRYP pfn_glVertexP3ui) (GLenum, GLuint);
+extern pfn_glVertexP3ui fp_glVertexP3ui;
+typedef void (APIENTRYP pfn_glVertexP3uiv) (GLenum, const GLuint*);
+extern pfn_glVertexP3uiv fp_glVertexP3uiv;
+typedef void (APIENTRYP pfn_glVertexP4ui) (GLenum, GLuint);
+extern pfn_glVertexP4ui fp_glVertexP4ui;
+typedef void (APIENTRYP pfn_glVertexP4uiv) (GLenum, const GLuint*);
+extern pfn_glVertexP4uiv fp_glVertexP4uiv;
+typedef void (APIENTRYP pfn_glTexCoordP1ui) (GLenum, GLuint);
+extern pfn_glTexCoordP1ui fp_glTexCoordP1ui;
+typedef void (APIENTRYP pfn_glTexCoordP1uiv) (GLenum, const GLuint*);
+extern pfn_glTexCoordP1uiv fp_glTexCoordP1uiv;
+typedef void (APIENTRYP pfn_glTexCoordP2ui) (GLenum, GLuint);
+extern pfn_glTexCoordP2ui fp_glTexCoordP2ui;
+typedef void (APIENTRYP pfn_glTexCoordP2uiv) (GLenum, const GLuint*);
+extern pfn_glTexCoordP2uiv fp_glTexCoordP2uiv;
+typedef void (APIENTRYP pfn_glTexCoordP3ui) (GLenum, GLuint);
+extern pfn_glTexCoordP3ui fp_glTexCoordP3ui;
+typedef void (APIENTRYP pfn_glTexCoordP3uiv) (GLenum, const GLuint*);
+extern pfn_glTexCoordP3uiv fp_glTexCoordP3uiv;
+typedef void (APIENTRYP pfn_glTexCoordP4ui) (GLenum, GLuint);
+extern pfn_glTexCoordP4ui fp_glTexCoordP4ui;
+typedef void (APIENTRYP pfn_glTexCoordP4uiv) (GLenum, const GLuint*);
+extern pfn_glTexCoordP4uiv fp_glTexCoordP4uiv;
+typedef void (APIENTRYP pfn_glMultiTexCoordP1ui) (GLenum, GLenum, GLuint);
+extern pfn_glMultiTexCoordP1ui fp_glMultiTexCoordP1ui;
+typedef void (APIENTRYP pfn_glMultiTexCoordP1uiv) (GLenum, GLenum, const GLuint*);
+extern pfn_glMultiTexCoordP1uiv fp_glMultiTexCoordP1uiv;
+typedef void (APIENTRYP pfn_glMultiTexCoordP2ui) (GLenum, GLenum, GLuint);
+extern pfn_glMultiTexCoordP2ui fp_glMultiTexCoordP2ui;
+typedef void (APIENTRYP pfn_glMultiTexCoordP2uiv) (GLenum, GLenum, const GLuint*);
+extern pfn_glMultiTexCoordP2uiv fp_glMultiTexCoordP2uiv;
+typedef void (APIENTRYP pfn_glMultiTexCoordP3ui) (GLenum, GLenum, GLuint);
+extern pfn_glMultiTexCoordP3ui fp_glMultiTexCoordP3ui;
+typedef void (APIENTRYP pfn_glMultiTexCoordP3uiv) (GLenum, GLenum, const GLuint*);
+extern pfn_glMultiTexCoordP3uiv fp_glMultiTexCoordP3uiv;
+typedef void (APIENTRYP pfn_glMultiTexCoordP4ui) (GLenum, GLenum, GLuint);
+extern pfn_glMultiTexCoordP4ui fp_glMultiTexCoordP4ui;
+typedef void (APIENTRYP pfn_glMultiTexCoordP4uiv) (GLenum, GLenum, const GLuint*);
+extern pfn_glMultiTexCoordP4uiv fp_glMultiTexCoordP4uiv;
+typedef void (APIENTRYP pfn_glNormalP3ui) (GLenum, GLuint);
+extern pfn_glNormalP3ui fp_glNormalP3ui;
+typedef void (APIENTRYP pfn_glNormalP3uiv) (GLenum, const GLuint*);
+extern pfn_glNormalP3uiv fp_glNormalP3uiv;
+typedef void (APIENTRYP pfn_glColorP3ui) (GLenum, GLuint);
+extern pfn_glColorP3ui fp_glColorP3ui;
+typedef void (APIENTRYP pfn_glColorP3uiv) (GLenum, const GLuint*);
+extern pfn_glColorP3uiv fp_glColorP3uiv;
+typedef void (APIENTRYP pfn_glColorP4ui) (GLenum, GLuint);
+extern pfn_glColorP4ui fp_glColorP4ui;
+typedef void (APIENTRYP pfn_glColorP4uiv) (GLenum, const GLuint*);
+extern pfn_glColorP4uiv fp_glColorP4uiv;
+typedef void (APIENTRYP pfn_glSecondaryColorP3ui) (GLenum, GLuint);
+extern pfn_glSecondaryColorP3ui fp_glSecondaryColorP3ui;
+typedef void (APIENTRYP pfn_glSecondaryColorP3uiv) (GLenum, const GLuint*);
+extern pfn_glSecondaryColorP3uiv fp_glSecondaryColorP3uiv;
+
+ /* GL_VERSION_4_0 */
+extern GLboolean GLAD_VERSION_4_0;
+#define GL_SAMPLE_SHADING                      0x8C36
+#define GL_MIN_SAMPLE_SHADING_VALUE            0x8C37
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET   0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET   0x8E5F
+#define GL_TEXTURE_CUBE_MAP_ARRAY              0x9009
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY      0x900A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY        0x900B
+#define GL_SAMPLER_CUBE_MAP_ARRAY              0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW       0x900D
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY          0x900E
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY  0x900F
+#define GL_DRAW_INDIRECT_BUFFER                0x8F3F
+#define GL_DRAW_INDIRECT_BUFFER_BINDING        0x8F43
+#define GL_GEOMETRY_SHADER_INVOCATIONS         0x887F
+#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS     0x8E5A
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET   0x8E5B
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET   0x8E5C
+#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS  0x8E5D
+#define GL_MAX_VERTEX_STREAMS                  0x8E71
+#define GL_DOUBLE_VEC2                         0x8FFC
+#define GL_DOUBLE_VEC3                         0x8FFD
+#define GL_DOUBLE_VEC4                         0x8FFE
+#define GL_DOUBLE_MAT2                         0x8F46
+#define GL_DOUBLE_MAT3                         0x8F47
+#define GL_DOUBLE_MAT4                         0x8F48
+#define GL_DOUBLE_MAT2x3                       0x8F49
+#define GL_DOUBLE_MAT2x4                       0x8F4A
+#define GL_DOUBLE_MAT3x2                       0x8F4B
+#define GL_DOUBLE_MAT3x4                       0x8F4C
+#define GL_DOUBLE_MAT4x2                       0x8F4D
+#define GL_DOUBLE_MAT4x3                       0x8F4E
+#define GL_ACTIVE_SUBROUTINES                  0x8DE5
+#define GL_ACTIVE_SUBROUTINE_UNIFORMS          0x8DE6
+#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS  0x8E47
+#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH        0x8E48
+#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH  0x8E49
+#define GL_MAX_SUBROUTINES                     0x8DE7
+#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS    0x8DE8
+#define GL_NUM_COMPATIBLE_SUBROUTINES          0x8E4A
+#define GL_COMPATIBLE_SUBROUTINES              0x8E4B
+#define GL_PATCHES                             0x000E
+#define GL_PATCH_VERTICES                      0x8E72
+#define GL_PATCH_DEFAULT_INNER_LEVEL           0x8E73
+#define GL_PATCH_DEFAULT_OUTER_LEVEL           0x8E74
+#define GL_TESS_CONTROL_OUTPUT_VERTICES        0x8E75
+#define GL_TESS_GEN_MODE                       0x8E76
+#define GL_TESS_GEN_SPACING                    0x8E77
+#define GL_TESS_GEN_VERTEX_ORDER               0x8E78
+#define GL_TESS_GEN_POINT_MODE                 0x8E79
+#define GL_ISOLINES                            0x8E7A
+#define GL_FRACTIONAL_ODD                      0x8E7B
+#define GL_FRACTIONAL_EVEN                     0x8E7C
+#define GL_MAX_PATCH_VERTICES                  0x8E7D
+#define GL_MAX_TESS_GEN_LEVEL                  0x8E7E
+#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS  0x8E7F
+#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS  0x8E80
+#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS  0x8E81
+#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS  0x8E82
+#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS  0x8E83
+#define GL_MAX_TESS_PATCH_COMPONENTS           0x8E84
+#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS  0x8E85
+#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS  0x8E86
+#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS     0x8E89
+#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS  0x8E8A
+#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS   0x886C
+#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS  0x886D
+#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS  0x8E1E
+#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS  0x8E1F
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER  0x84F0
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER  0x84F1
+#define GL_TESS_EVALUATION_SHADER              0x8E87
+#define GL_TESS_CONTROL_SHADER                 0x8E88
+#define GL_TRANSFORM_FEEDBACK                  0x8E22
+#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED    0x8E23
+#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE    0x8E24
+#define GL_TRANSFORM_FEEDBACK_BINDING          0x8E25
+#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS      0x8E70
+typedef void (APIENTRYP pfn_glMinSampleShading) (GLfloat);
+extern pfn_glMinSampleShading fp_glMinSampleShading;
+typedef void (APIENTRYP pfn_glBlendEquationi) (GLuint, GLenum);
+extern pfn_glBlendEquationi fp_glBlendEquationi;
+typedef void (APIENTRYP pfn_glBlendEquationSeparatei) (GLuint, GLenum, GLenum);
+extern pfn_glBlendEquationSeparatei fp_glBlendEquationSeparatei;
+typedef void (APIENTRYP pfn_glBlendFunci) (GLuint, GLenum, GLenum);
+extern pfn_glBlendFunci fp_glBlendFunci;
+typedef void (APIENTRYP pfn_glBlendFuncSeparatei) (GLuint, GLenum, GLenum, GLenum, GLenum);
+extern pfn_glBlendFuncSeparatei fp_glBlendFuncSeparatei;
+typedef void (APIENTRYP pfn_glDrawArraysIndirect) (GLenum, const void*);
+extern pfn_glDrawArraysIndirect fp_glDrawArraysIndirect;
+typedef void (APIENTRYP pfn_glDrawElementsIndirect) (GLenum, GLenum, const void*);
+extern pfn_glDrawElementsIndirect fp_glDrawElementsIndirect;
+typedef void (APIENTRYP pfn_glUniform1d) (GLint, GLdouble);
+extern pfn_glUniform1d fp_glUniform1d;
+typedef void (APIENTRYP pfn_glUniform2d) (GLint, GLdouble, GLdouble);
+extern pfn_glUniform2d fp_glUniform2d;
+typedef void (APIENTRYP pfn_glUniform3d) (GLint, GLdouble, GLdouble, GLdouble);
+extern pfn_glUniform3d fp_glUniform3d;
+typedef void (APIENTRYP pfn_glUniform4d) (GLint, GLdouble, GLdouble, GLdouble, GLdouble);
+extern pfn_glUniform4d fp_glUniform4d;
+typedef void (APIENTRYP pfn_glUniform1dv) (GLint, GLsizei, const GLdouble*);
+extern pfn_glUniform1dv fp_glUniform1dv;
+typedef void (APIENTRYP pfn_glUniform2dv) (GLint, GLsizei, const GLdouble*);
+extern pfn_glUniform2dv fp_glUniform2dv;
+typedef void (APIENTRYP pfn_glUniform3dv) (GLint, GLsizei, const GLdouble*);
+extern pfn_glUniform3dv fp_glUniform3dv;
+typedef void (APIENTRYP pfn_glUniform4dv) (GLint, GLsizei, const GLdouble*);
+extern pfn_glUniform4dv fp_glUniform4dv;
+typedef void (APIENTRYP pfn_glUniformMatrix2dv) (GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glUniformMatrix2dv fp_glUniformMatrix2dv;
+typedef void (APIENTRYP pfn_glUniformMatrix3dv) (GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glUniformMatrix3dv fp_glUniformMatrix3dv;
+typedef void (APIENTRYP pfn_glUniformMatrix4dv) (GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glUniformMatrix4dv fp_glUniformMatrix4dv;
+typedef void (APIENTRYP pfn_glUniformMatrix2x3dv) (GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glUniformMatrix2x3dv fp_glUniformMatrix2x3dv;
+typedef void (APIENTRYP pfn_glUniformMatrix2x4dv) (GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glUniformMatrix2x4dv fp_glUniformMatrix2x4dv;
+typedef void (APIENTRYP pfn_glUniformMatrix3x2dv) (GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glUniformMatrix3x2dv fp_glUniformMatrix3x2dv;
+typedef void (APIENTRYP pfn_glUniformMatrix3x4dv) (GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glUniformMatrix3x4dv fp_glUniformMatrix3x4dv;
+typedef void (APIENTRYP pfn_glUniformMatrix4x2dv) (GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glUniformMatrix4x2dv fp_glUniformMatrix4x2dv;
+typedef void (APIENTRYP pfn_glUniformMatrix4x3dv) (GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glUniformMatrix4x3dv fp_glUniformMatrix4x3dv;
+typedef void (APIENTRYP pfn_glGetUniformdv) (GLuint, GLint, GLdouble*);
+extern pfn_glGetUniformdv fp_glGetUniformdv;
+typedef GLint (APIENTRYP pfn_glGetSubroutineUniformLocation) (GLuint, GLenum, const GLchar*);
+extern pfn_glGetSubroutineUniformLocation fp_glGetSubroutineUniformLocation;
+typedef GLuint (APIENTRYP pfn_glGetSubroutineIndex) (GLuint, GLenum, const GLchar*);
+extern pfn_glGetSubroutineIndex fp_glGetSubroutineIndex;
+typedef void (APIENTRYP pfn_glGetActiveSubroutineUniformiv) (GLuint, GLenum, GLuint, GLenum, GLint*);
+extern pfn_glGetActiveSubroutineUniformiv fp_glGetActiveSubroutineUniformiv;
+typedef void (APIENTRYP pfn_glGetActiveSubroutineUniformName) (GLuint, GLenum, GLuint, GLsizei, GLsizei*, GLchar*);
+extern pfn_glGetActiveSubroutineUniformName fp_glGetActiveSubroutineUniformName;
+typedef void (APIENTRYP pfn_glGetActiveSubroutineName) (GLuint, GLenum, GLuint, GLsizei, GLsizei*, GLchar*);
+extern pfn_glGetActiveSubroutineName fp_glGetActiveSubroutineName;
+typedef void (APIENTRYP pfn_glUniformSubroutinesuiv) (GLenum, GLsizei, const GLuint*);
+extern pfn_glUniformSubroutinesuiv fp_glUniformSubroutinesuiv;
+typedef void (APIENTRYP pfn_glGetUniformSubroutineuiv) (GLenum, GLint, GLuint*);
+extern pfn_glGetUniformSubroutineuiv fp_glGetUniformSubroutineuiv;
+typedef void (APIENTRYP pfn_glGetProgramStageiv) (GLuint, GLenum, GLenum, GLint*);
+extern pfn_glGetProgramStageiv fp_glGetProgramStageiv;
+typedef void (APIENTRYP pfn_glPatchParameteri) (GLenum, GLint);
+extern pfn_glPatchParameteri fp_glPatchParameteri;
+typedef void (APIENTRYP pfn_glPatchParameterfv) (GLenum, const GLfloat*);
+extern pfn_glPatchParameterfv fp_glPatchParameterfv;
+typedef void (APIENTRYP pfn_glBindTransformFeedback) (GLenum, GLuint);
+extern pfn_glBindTransformFeedback fp_glBindTransformFeedback;
+typedef void (APIENTRYP pfn_glDeleteTransformFeedbacks) (GLsizei, const GLuint*);
+extern pfn_glDeleteTransformFeedbacks fp_glDeleteTransformFeedbacks;
+typedef void (APIENTRYP pfn_glGenTransformFeedbacks) (GLsizei, GLuint*);
+extern pfn_glGenTransformFeedbacks fp_glGenTransformFeedbacks;
+typedef GLboolean (APIENTRYP pfn_glIsTransformFeedback) (GLuint);
+extern pfn_glIsTransformFeedback fp_glIsTransformFeedback;
+typedef void (APIENTRYP pfn_glPauseTransformFeedback) ();
+extern pfn_glPauseTransformFeedback fp_glPauseTransformFeedback;
+typedef void (APIENTRYP pfn_glResumeTransformFeedback) ();
+extern pfn_glResumeTransformFeedback fp_glResumeTransformFeedback;
+typedef void (APIENTRYP pfn_glDrawTransformFeedback) (GLenum, GLuint);
+extern pfn_glDrawTransformFeedback fp_glDrawTransformFeedback;
+typedef void (APIENTRYP pfn_glDrawTransformFeedbackStream) (GLenum, GLuint, GLuint);
+extern pfn_glDrawTransformFeedbackStream fp_glDrawTransformFeedbackStream;
+typedef void (APIENTRYP pfn_glBeginQueryIndexed) (GLenum, GLuint, GLuint);
+extern pfn_glBeginQueryIndexed fp_glBeginQueryIndexed;
+typedef void (APIENTRYP pfn_glEndQueryIndexed) (GLenum, GLuint);
+extern pfn_glEndQueryIndexed fp_glEndQueryIndexed;
+typedef void (APIENTRYP pfn_glGetQueryIndexediv) (GLenum, GLuint, GLenum, GLint*);
+extern pfn_glGetQueryIndexediv fp_glGetQueryIndexediv;
+
+ /* GL_VERSION_4_1 */
+extern GLboolean GLAD_VERSION_4_1;
+#define GL_FIXED                               0x140C
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE      0x8B9A
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT    0x8B9B
+#define GL_LOW_FLOAT                           0x8DF0
+#define GL_MEDIUM_FLOAT                        0x8DF1
+#define GL_HIGH_FLOAT                          0x8DF2
+#define GL_LOW_INT                             0x8DF3
+#define GL_MEDIUM_INT                          0x8DF4
+#define GL_HIGH_INT                            0x8DF5
+#define GL_SHADER_COMPILER                     0x8DFA
+#define GL_SHADER_BINARY_FORMATS               0x8DF8
+#define GL_NUM_SHADER_BINARY_FORMATS           0x8DF9
+#define GL_MAX_VERTEX_UNIFORM_VECTORS          0x8DFB
+#define GL_MAX_VARYING_VECTORS                 0x8DFC
+#define GL_MAX_FRAGMENT_UNIFORM_VECTORS        0x8DFD
+#define GL_RGB565                              0x8D62
+#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT     0x8257
+#define GL_PROGRAM_BINARY_LENGTH               0x8741
+#define GL_NUM_PROGRAM_BINARY_FORMATS          0x87FE
+#define GL_PROGRAM_BINARY_FORMATS              0x87FF
+#define GL_VERTEX_SHADER_BIT                   0x00000001
+#define GL_FRAGMENT_SHADER_BIT                 0x00000002
+#define GL_GEOMETRY_SHADER_BIT                 0x00000004
+#define GL_TESS_CONTROL_SHADER_BIT             0x00000008
+#define GL_TESS_EVALUATION_SHADER_BIT          0x00000010
+#define GL_ALL_SHADER_BITS                     0xFFFFFFFF
+#define GL_PROGRAM_SEPARABLE                   0x8258
+#define GL_ACTIVE_PROGRAM                      0x8259
+#define GL_PROGRAM_PIPELINE_BINDING            0x825A
+#define GL_MAX_VIEWPORTS                       0x825B
+#define GL_VIEWPORT_SUBPIXEL_BITS              0x825C
+#define GL_VIEWPORT_BOUNDS_RANGE               0x825D
+#define GL_LAYER_PROVOKING_VERTEX              0x825E
+#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX     0x825F
+#define GL_UNDEFINED_VERTEX                    0x8260
+typedef void (APIENTRYP pfn_glReleaseShaderCompiler) ();
+extern pfn_glReleaseShaderCompiler fp_glReleaseShaderCompiler;
+typedef void (APIENTRYP pfn_glShaderBinary) (GLsizei, const GLuint*, GLenum, const void*, GLsizei);
+extern pfn_glShaderBinary fp_glShaderBinary;
+typedef void (APIENTRYP pfn_glGetShaderPrecisionFormat) (GLenum, GLenum, GLint*, GLint*);
+extern pfn_glGetShaderPrecisionFormat fp_glGetShaderPrecisionFormat;
+typedef void (APIENTRYP pfn_glDepthRangef) (GLfloat, GLfloat);
+extern pfn_glDepthRangef fp_glDepthRangef;
+typedef void (APIENTRYP pfn_glClearDepthf) (GLfloat);
+extern pfn_glClearDepthf fp_glClearDepthf;
+typedef void (APIENTRYP pfn_glGetProgramBinary) (GLuint, GLsizei, GLsizei*, GLenum*, void*);
+extern pfn_glGetProgramBinary fp_glGetProgramBinary;
+typedef void (APIENTRYP pfn_glProgramBinary) (GLuint, GLenum, const void*, GLsizei);
+extern pfn_glProgramBinary fp_glProgramBinary;
+typedef void (APIENTRYP pfn_glProgramParameteri) (GLuint, GLenum, GLint);
+extern pfn_glProgramParameteri fp_glProgramParameteri;
+typedef void (APIENTRYP pfn_glUseProgramStages) (GLuint, GLbitfield, GLuint);
+extern pfn_glUseProgramStages fp_glUseProgramStages;
+typedef void (APIENTRYP pfn_glActiveShaderProgram) (GLuint, GLuint);
+extern pfn_glActiveShaderProgram fp_glActiveShaderProgram;
+typedef GLuint (APIENTRYP pfn_glCreateShaderProgramv) (GLenum, GLsizei, const GLchar**);
+extern pfn_glCreateShaderProgramv fp_glCreateShaderProgramv;
+typedef void (APIENTRYP pfn_glBindProgramPipeline) (GLuint);
+extern pfn_glBindProgramPipeline fp_glBindProgramPipeline;
+typedef void (APIENTRYP pfn_glDeleteProgramPipelines) (GLsizei, const GLuint*);
+extern pfn_glDeleteProgramPipelines fp_glDeleteProgramPipelines;
+typedef void (APIENTRYP pfn_glGenProgramPipelines) (GLsizei, GLuint*);
+extern pfn_glGenProgramPipelines fp_glGenProgramPipelines;
+typedef GLboolean (APIENTRYP pfn_glIsProgramPipeline) (GLuint);
+extern pfn_glIsProgramPipeline fp_glIsProgramPipeline;
+typedef void (APIENTRYP pfn_glGetProgramPipelineiv) (GLuint, GLenum, GLint*);
+extern pfn_glGetProgramPipelineiv fp_glGetProgramPipelineiv;
+typedef void (APIENTRYP pfn_glProgramUniform1i) (GLuint, GLint, GLint);
+extern pfn_glProgramUniform1i fp_glProgramUniform1i;
+typedef void (APIENTRYP pfn_glProgramUniform1iv) (GLuint, GLint, GLsizei, const GLint*);
+extern pfn_glProgramUniform1iv fp_glProgramUniform1iv;
+typedef void (APIENTRYP pfn_glProgramUniform1f) (GLuint, GLint, GLfloat);
+extern pfn_glProgramUniform1f fp_glProgramUniform1f;
+typedef void (APIENTRYP pfn_glProgramUniform1fv) (GLuint, GLint, GLsizei, const GLfloat*);
+extern pfn_glProgramUniform1fv fp_glProgramUniform1fv;
+typedef void (APIENTRYP pfn_glProgramUniform1d) (GLuint, GLint, GLdouble);
+extern pfn_glProgramUniform1d fp_glProgramUniform1d;
+typedef void (APIENTRYP pfn_glProgramUniform1dv) (GLuint, GLint, GLsizei, const GLdouble*);
+extern pfn_glProgramUniform1dv fp_glProgramUniform1dv;
+typedef void (APIENTRYP pfn_glProgramUniform1ui) (GLuint, GLint, GLuint);
+extern pfn_glProgramUniform1ui fp_glProgramUniform1ui;
+typedef void (APIENTRYP pfn_glProgramUniform1uiv) (GLuint, GLint, GLsizei, const GLuint*);
+extern pfn_glProgramUniform1uiv fp_glProgramUniform1uiv;
+typedef void (APIENTRYP pfn_glProgramUniform2i) (GLuint, GLint, GLint, GLint);
+extern pfn_glProgramUniform2i fp_glProgramUniform2i;
+typedef void (APIENTRYP pfn_glProgramUniform2iv) (GLuint, GLint, GLsizei, const GLint*);
+extern pfn_glProgramUniform2iv fp_glProgramUniform2iv;
+typedef void (APIENTRYP pfn_glProgramUniform2f) (GLuint, GLint, GLfloat, GLfloat);
+extern pfn_glProgramUniform2f fp_glProgramUniform2f;
+typedef void (APIENTRYP pfn_glProgramUniform2fv) (GLuint, GLint, GLsizei, const GLfloat*);
+extern pfn_glProgramUniform2fv fp_glProgramUniform2fv;
+typedef void (APIENTRYP pfn_glProgramUniform2d) (GLuint, GLint, GLdouble, GLdouble);
+extern pfn_glProgramUniform2d fp_glProgramUniform2d;
+typedef void (APIENTRYP pfn_glProgramUniform2dv) (GLuint, GLint, GLsizei, const GLdouble*);
+extern pfn_glProgramUniform2dv fp_glProgramUniform2dv;
+typedef void (APIENTRYP pfn_glProgramUniform2ui) (GLuint, GLint, GLuint, GLuint);
+extern pfn_glProgramUniform2ui fp_glProgramUniform2ui;
+typedef void (APIENTRYP pfn_glProgramUniform2uiv) (GLuint, GLint, GLsizei, const GLuint*);
+extern pfn_glProgramUniform2uiv fp_glProgramUniform2uiv;
+typedef void (APIENTRYP pfn_glProgramUniform3i) (GLuint, GLint, GLint, GLint, GLint);
+extern pfn_glProgramUniform3i fp_glProgramUniform3i;
+typedef void (APIENTRYP pfn_glProgramUniform3iv) (GLuint, GLint, GLsizei, const GLint*);
+extern pfn_glProgramUniform3iv fp_glProgramUniform3iv;
+typedef void (APIENTRYP pfn_glProgramUniform3f) (GLuint, GLint, GLfloat, GLfloat, GLfloat);
+extern pfn_glProgramUniform3f fp_glProgramUniform3f;
+typedef void (APIENTRYP pfn_glProgramUniform3fv) (GLuint, GLint, GLsizei, const GLfloat*);
+extern pfn_glProgramUniform3fv fp_glProgramUniform3fv;
+typedef void (APIENTRYP pfn_glProgramUniform3d) (GLuint, GLint, GLdouble, GLdouble, GLdouble);
+extern pfn_glProgramUniform3d fp_glProgramUniform3d;
+typedef void (APIENTRYP pfn_glProgramUniform3dv) (GLuint, GLint, GLsizei, const GLdouble*);
+extern pfn_glProgramUniform3dv fp_glProgramUniform3dv;
+typedef void (APIENTRYP pfn_glProgramUniform3ui) (GLuint, GLint, GLuint, GLuint, GLuint);
+extern pfn_glProgramUniform3ui fp_glProgramUniform3ui;
+typedef void (APIENTRYP pfn_glProgramUniform3uiv) (GLuint, GLint, GLsizei, const GLuint*);
+extern pfn_glProgramUniform3uiv fp_glProgramUniform3uiv;
+typedef void (APIENTRYP pfn_glProgramUniform4i) (GLuint, GLint, GLint, GLint, GLint, GLint);
+extern pfn_glProgramUniform4i fp_glProgramUniform4i;
+typedef void (APIENTRYP pfn_glProgramUniform4iv) (GLuint, GLint, GLsizei, const GLint*);
+extern pfn_glProgramUniform4iv fp_glProgramUniform4iv;
+typedef void (APIENTRYP pfn_glProgramUniform4f) (GLuint, GLint, GLfloat, GLfloat, GLfloat, GLfloat);
+extern pfn_glProgramUniform4f fp_glProgramUniform4f;
+typedef void (APIENTRYP pfn_glProgramUniform4fv) (GLuint, GLint, GLsizei, const GLfloat*);
+extern pfn_glProgramUniform4fv fp_glProgramUniform4fv;
+typedef void (APIENTRYP pfn_glProgramUniform4d) (GLuint, GLint, GLdouble, GLdouble, GLdouble, GLdouble);
+extern pfn_glProgramUniform4d fp_glProgramUniform4d;
+typedef void (APIENTRYP pfn_glProgramUniform4dv) (GLuint, GLint, GLsizei, const GLdouble*);
+extern pfn_glProgramUniform4dv fp_glProgramUniform4dv;
+typedef void (APIENTRYP pfn_glProgramUniform4ui) (GLuint, GLint, GLuint, GLuint, GLuint, GLuint);
+extern pfn_glProgramUniform4ui fp_glProgramUniform4ui;
+typedef void (APIENTRYP pfn_glProgramUniform4uiv) (GLuint, GLint, GLsizei, const GLuint*);
+extern pfn_glProgramUniform4uiv fp_glProgramUniform4uiv;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix2fv) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glProgramUniformMatrix2fv fp_glProgramUniformMatrix2fv;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix3fv) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glProgramUniformMatrix3fv fp_glProgramUniformMatrix3fv;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix4fv) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glProgramUniformMatrix4fv fp_glProgramUniformMatrix4fv;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix2dv) (GLuint, GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glProgramUniformMatrix2dv fp_glProgramUniformMatrix2dv;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix3dv) (GLuint, GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glProgramUniformMatrix3dv fp_glProgramUniformMatrix3dv;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix4dv) (GLuint, GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glProgramUniformMatrix4dv fp_glProgramUniformMatrix4dv;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix2x3fv) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glProgramUniformMatrix2x3fv fp_glProgramUniformMatrix2x3fv;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix3x2fv) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glProgramUniformMatrix3x2fv fp_glProgramUniformMatrix3x2fv;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix2x4fv) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glProgramUniformMatrix2x4fv fp_glProgramUniformMatrix2x4fv;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix4x2fv) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glProgramUniformMatrix4x2fv fp_glProgramUniformMatrix4x2fv;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix3x4fv) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glProgramUniformMatrix3x4fv fp_glProgramUniformMatrix3x4fv;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix4x3fv) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glProgramUniformMatrix4x3fv fp_glProgramUniformMatrix4x3fv;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix2x3dv) (GLuint, GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glProgramUniformMatrix2x3dv fp_glProgramUniformMatrix2x3dv;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix3x2dv) (GLuint, GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glProgramUniformMatrix3x2dv fp_glProgramUniformMatrix3x2dv;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix2x4dv) (GLuint, GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glProgramUniformMatrix2x4dv fp_glProgramUniformMatrix2x4dv;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix4x2dv) (GLuint, GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glProgramUniformMatrix4x2dv fp_glProgramUniformMatrix4x2dv;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix3x4dv) (GLuint, GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glProgramUniformMatrix3x4dv fp_glProgramUniformMatrix3x4dv;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix4x3dv) (GLuint, GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glProgramUniformMatrix4x3dv fp_glProgramUniformMatrix4x3dv;
+typedef void (APIENTRYP pfn_glValidateProgramPipeline) (GLuint);
+extern pfn_glValidateProgramPipeline fp_glValidateProgramPipeline;
+typedef void (APIENTRYP pfn_glGetProgramPipelineInfoLog) (GLuint, GLsizei, GLsizei*, GLchar*);
+extern pfn_glGetProgramPipelineInfoLog fp_glGetProgramPipelineInfoLog;
+typedef void (APIENTRYP pfn_glVertexAttribL1d) (GLuint, GLdouble);
+extern pfn_glVertexAttribL1d fp_glVertexAttribL1d;
+typedef void (APIENTRYP pfn_glVertexAttribL2d) (GLuint, GLdouble, GLdouble);
+extern pfn_glVertexAttribL2d fp_glVertexAttribL2d;
+typedef void (APIENTRYP pfn_glVertexAttribL3d) (GLuint, GLdouble, GLdouble, GLdouble);
+extern pfn_glVertexAttribL3d fp_glVertexAttribL3d;
+typedef void (APIENTRYP pfn_glVertexAttribL4d) (GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
+extern pfn_glVertexAttribL4d fp_glVertexAttribL4d;
+typedef void (APIENTRYP pfn_glVertexAttribL1dv) (GLuint, const GLdouble*);
+extern pfn_glVertexAttribL1dv fp_glVertexAttribL1dv;
+typedef void (APIENTRYP pfn_glVertexAttribL2dv) (GLuint, const GLdouble*);
+extern pfn_glVertexAttribL2dv fp_glVertexAttribL2dv;
+typedef void (APIENTRYP pfn_glVertexAttribL3dv) (GLuint, const GLdouble*);
+extern pfn_glVertexAttribL3dv fp_glVertexAttribL3dv;
+typedef void (APIENTRYP pfn_glVertexAttribL4dv) (GLuint, const GLdouble*);
+extern pfn_glVertexAttribL4dv fp_glVertexAttribL4dv;
+typedef void (APIENTRYP pfn_glVertexAttribLPointer) (GLuint, GLint, GLenum, GLsizei, const void*);
+extern pfn_glVertexAttribLPointer fp_glVertexAttribLPointer;
+typedef void (APIENTRYP pfn_glGetVertexAttribLdv) (GLuint, GLenum, GLdouble*);
+extern pfn_glGetVertexAttribLdv fp_glGetVertexAttribLdv;
+typedef void (APIENTRYP pfn_glViewportArrayv) (GLuint, GLsizei, const GLfloat*);
+extern pfn_glViewportArrayv fp_glViewportArrayv;
+typedef void (APIENTRYP pfn_glViewportIndexedf) (GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
+extern pfn_glViewportIndexedf fp_glViewportIndexedf;
+typedef void (APIENTRYP pfn_glViewportIndexedfv) (GLuint, const GLfloat*);
+extern pfn_glViewportIndexedfv fp_glViewportIndexedfv;
+typedef void (APIENTRYP pfn_glScissorArrayv) (GLuint, GLsizei, const GLint*);
+extern pfn_glScissorArrayv fp_glScissorArrayv;
+typedef void (APIENTRYP pfn_glScissorIndexed) (GLuint, GLint, GLint, GLsizei, GLsizei);
+extern pfn_glScissorIndexed fp_glScissorIndexed;
+typedef void (APIENTRYP pfn_glScissorIndexedv) (GLuint, const GLint*);
+extern pfn_glScissorIndexedv fp_glScissorIndexedv;
+typedef void (APIENTRYP pfn_glDepthRangeArrayv) (GLuint, GLsizei, const GLdouble*);
+extern pfn_glDepthRangeArrayv fp_glDepthRangeArrayv;
+typedef void (APIENTRYP pfn_glDepthRangeIndexed) (GLuint, GLdouble, GLdouble);
+extern pfn_glDepthRangeIndexed fp_glDepthRangeIndexed;
+typedef void (APIENTRYP pfn_glGetFloati_v) (GLenum, GLuint, GLfloat*);
+extern pfn_glGetFloati_v fp_glGetFloati_v;
+typedef void (APIENTRYP pfn_glGetDoublei_v) (GLenum, GLuint, GLdouble*);
+extern pfn_glGetDoublei_v fp_glGetDoublei_v;
+
+ /* GL_VERSION_4_2 */
+extern GLboolean GLAD_VERSION_4_2;
+#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH       0x9127
+#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT      0x9128
+#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH       0x9129
+#define GL_UNPACK_COMPRESSED_BLOCK_SIZE        0x912A
+#define GL_PACK_COMPRESSED_BLOCK_WIDTH         0x912B
+#define GL_PACK_COMPRESSED_BLOCK_HEIGHT        0x912C
+#define GL_PACK_COMPRESSED_BLOCK_DEPTH         0x912D
+#define GL_PACK_COMPRESSED_BLOCK_SIZE          0x912E
+#define GL_NUM_SAMPLE_COUNTS                   0x9380
+#define GL_MIN_MAP_BUFFER_ALIGNMENT            0x90BC
+#define GL_ATOMIC_COUNTER_BUFFER               0x92C0
+#define GL_ATOMIC_COUNTER_BUFFER_BINDING       0x92C1
+#define GL_ATOMIC_COUNTER_BUFFER_START         0x92C2
+#define GL_ATOMIC_COUNTER_BUFFER_SIZE          0x92C3
+#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE     0x92C4
+#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS  0x92C5
+#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES  0x92C6
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER  0x92C7
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER  0x92C8
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER  0x92C9
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER  0x92CA
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER  0x92CB
+#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS   0x92CC
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS  0x92CD
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS  0x92CE
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS  0x92CF
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS  0x92D0
+#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS  0x92D1
+#define GL_MAX_VERTEX_ATOMIC_COUNTERS          0x92D2
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS    0x92D3
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS  0x92D4
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS        0x92D5
+#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS        0x92D6
+#define GL_MAX_COMBINED_ATOMIC_COUNTERS        0x92D7
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE      0x92D8
+#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS  0x92DC
+#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS       0x92D9
+#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX  0x92DA
+#define GL_UNSIGNED_INT_ATOMIC_COUNTER         0x92DB
+#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT     0x00000001
+#define GL_ELEMENT_ARRAY_BARRIER_BIT           0x00000002
+#define GL_UNIFORM_BARRIER_BIT                 0x00000004
+#define GL_TEXTURE_FETCH_BARRIER_BIT           0x00000008
+#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT     0x00000020
+#define GL_COMMAND_BARRIER_BIT                 0x00000040
+#define GL_PIXEL_BUFFER_BARRIER_BIT            0x00000080
+#define GL_TEXTURE_UPDATE_BARRIER_BIT          0x00000100
+#define GL_BUFFER_UPDATE_BARRIER_BIT           0x00000200
+#define GL_FRAMEBUFFER_BARRIER_BIT             0x00000400
+#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT      0x00000800
+#define GL_ATOMIC_COUNTER_BARRIER_BIT          0x00001000
+#define GL_ALL_BARRIER_BITS                    0xFFFFFFFF
+#define GL_MAX_IMAGE_UNITS                     0x8F38
+#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS  0x8F39
+#define GL_IMAGE_BINDING_NAME                  0x8F3A
+#define GL_IMAGE_BINDING_LEVEL                 0x8F3B
+#define GL_IMAGE_BINDING_LAYERED               0x8F3C
+#define GL_IMAGE_BINDING_LAYER                 0x8F3D
+#define GL_IMAGE_BINDING_ACCESS                0x8F3E
+#define GL_IMAGE_1D                            0x904C
+#define GL_IMAGE_2D                            0x904D
+#define GL_IMAGE_3D                            0x904E
+#define GL_IMAGE_2D_RECT                       0x904F
+#define GL_IMAGE_CUBE                          0x9050
+#define GL_IMAGE_BUFFER                        0x9051
+#define GL_IMAGE_1D_ARRAY                      0x9052
+#define GL_IMAGE_2D_ARRAY                      0x9053
+#define GL_IMAGE_CUBE_MAP_ARRAY                0x9054
+#define GL_IMAGE_2D_MULTISAMPLE                0x9055
+#define GL_IMAGE_2D_MULTISAMPLE_ARRAY          0x9056
+#define GL_INT_IMAGE_1D                        0x9057
+#define GL_INT_IMAGE_2D                        0x9058
+#define GL_INT_IMAGE_3D                        0x9059
+#define GL_INT_IMAGE_2D_RECT                   0x905A
+#define GL_INT_IMAGE_CUBE                      0x905B
+#define GL_INT_IMAGE_BUFFER                    0x905C
+#define GL_INT_IMAGE_1D_ARRAY                  0x905D
+#define GL_INT_IMAGE_2D_ARRAY                  0x905E
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY            0x905F
+#define GL_INT_IMAGE_2D_MULTISAMPLE            0x9060
+#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY      0x9061
+#define GL_UNSIGNED_INT_IMAGE_1D               0x9062
+#define GL_UNSIGNED_INT_IMAGE_2D               0x9063
+#define GL_UNSIGNED_INT_IMAGE_3D               0x9064
+#define GL_UNSIGNED_INT_IMAGE_2D_RECT          0x9065
+#define GL_UNSIGNED_INT_IMAGE_CUBE             0x9066
+#define GL_UNSIGNED_INT_IMAGE_BUFFER           0x9067
+#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY         0x9068
+#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY         0x9069
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY   0x906A
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE   0x906B
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY  0x906C
+#define GL_MAX_IMAGE_SAMPLES                   0x906D
+#define GL_IMAGE_BINDING_FORMAT                0x906E
+#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE     0x90C7
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE  0x90C8
+#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS  0x90C9
+#define GL_MAX_VERTEX_IMAGE_UNIFORMS           0x90CA
+#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS     0x90CB
+#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS  0x90CC
+#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS         0x90CD
+#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS         0x90CE
+#define GL_MAX_COMBINED_IMAGE_UNIFORMS         0x90CF
+#define GL_COMPRESSED_RGBA_BPTC_UNORM          0x8E8C
+#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM    0x8E8D
+#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT    0x8E8E
+#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT  0x8E8F
+#define GL_TEXTURE_IMMUTABLE_FORMAT            0x912F
+typedef void (APIENTRYP pfn_glDrawArraysInstancedBaseInstance) (GLenum, GLint, GLsizei, GLsizei, GLuint);
+extern pfn_glDrawArraysInstancedBaseInstance fp_glDrawArraysInstancedBaseInstance;
+typedef void (APIENTRYP pfn_glDrawElementsInstancedBaseInstance) (GLenum, GLsizei, GLenum, const void*, GLsizei, GLuint);
+extern pfn_glDrawElementsInstancedBaseInstance fp_glDrawElementsInstancedBaseInstance;
+typedef void (APIENTRYP pfn_glDrawElementsInstancedBaseVertexBaseInstance) (GLenum, GLsizei, GLenum, const void*, GLsizei, GLint, GLuint);
+extern pfn_glDrawElementsInstancedBaseVertexBaseInstance fp_glDrawElementsInstancedBaseVertexBaseInstance;
+typedef void (APIENTRYP pfn_glGetInternalformativ) (GLenum, GLenum, GLenum, GLsizei, GLint*);
+extern pfn_glGetInternalformativ fp_glGetInternalformativ;
+typedef void (APIENTRYP pfn_glGetActiveAtomicCounterBufferiv) (GLuint, GLuint, GLenum, GLint*);
+extern pfn_glGetActiveAtomicCounterBufferiv fp_glGetActiveAtomicCounterBufferiv;
+typedef void (APIENTRYP pfn_glBindImageTexture) (GLuint, GLuint, GLint, GLboolean, GLint, GLenum, GLenum);
+extern pfn_glBindImageTexture fp_glBindImageTexture;
+typedef void (APIENTRYP pfn_glMemoryBarrier) (GLbitfield);
+extern pfn_glMemoryBarrier fp_glMemoryBarrier;
+typedef void (APIENTRYP pfn_glTexStorage1D) (GLenum, GLsizei, GLenum, GLsizei);
+extern pfn_glTexStorage1D fp_glTexStorage1D;
+typedef void (APIENTRYP pfn_glTexStorage2D) (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
+extern pfn_glTexStorage2D fp_glTexStorage2D;
+typedef void (APIENTRYP pfn_glTexStorage3D) (GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei);
+extern pfn_glTexStorage3D fp_glTexStorage3D;
+typedef void (APIENTRYP pfn_glDrawTransformFeedbackInstanced) (GLenum, GLuint, GLsizei);
+extern pfn_glDrawTransformFeedbackInstanced fp_glDrawTransformFeedbackInstanced;
+typedef void (APIENTRYP pfn_glDrawTransformFeedbackStreamInstanced) (GLenum, GLuint, GLuint, GLsizei);
+extern pfn_glDrawTransformFeedbackStreamInstanced fp_glDrawTransformFeedbackStreamInstanced;
+
+ /* GL_VERSION_4_3 */
+extern GLboolean GLAD_VERSION_4_3;
+#define GL_NUM_SHADING_LANGUAGE_VERSIONS       0x82E9
+#define GL_VERTEX_ATTRIB_ARRAY_LONG            0x874E
+#define GL_COMPRESSED_RGB8_ETC2                0x9274
+#define GL_COMPRESSED_SRGB8_ETC2               0x9275
+#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2  0x9276
+#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2  0x9277
+#define GL_COMPRESSED_RGBA8_ETC2_EAC           0x9278
+#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC    0x9279
+#define GL_COMPRESSED_R11_EAC                  0x9270
+#define GL_COMPRESSED_SIGNED_R11_EAC           0x9271
+#define GL_COMPRESSED_RG11_EAC                 0x9272
+#define GL_COMPRESSED_SIGNED_RG11_EAC          0x9273
+#define GL_PRIMITIVE_RESTART_FIXED_INDEX       0x8D69
+#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE     0x8D6A
+#define GL_MAX_ELEMENT_INDEX                   0x8D6B
+#define GL_COMPUTE_SHADER                      0x91B9
+#define GL_MAX_COMPUTE_UNIFORM_BLOCKS          0x91BB
+#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS     0x91BC
+#define GL_MAX_COMPUTE_IMAGE_UNIFORMS          0x91BD
+#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE      0x8262
+#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS      0x8263
+#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS  0x8264
+#define GL_MAX_COMPUTE_ATOMIC_COUNTERS         0x8265
+#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS  0x8266
+#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS  0x90EB
+#define GL_MAX_COMPUTE_WORK_GROUP_COUNT        0x91BE
+#define GL_MAX_COMPUTE_WORK_GROUP_SIZE         0x91BF
+#define GL_COMPUTE_WORK_GROUP_SIZE             0x8267
+#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER  0x90EC
+#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER  0x90ED
+#define GL_DISPATCH_INDIRECT_BUFFER            0x90EE
+#define GL_DISPATCH_INDIRECT_BUFFER_BINDING    0x90EF
+#define GL_COMPUTE_SHADER_BIT                  0x00000020
+#define GL_DEBUG_OUTPUT_SYNCHRONOUS            0x8242
+#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH    0x8243
+#define GL_DEBUG_CALLBACK_FUNCTION             0x8244
+#define GL_DEBUG_CALLBACK_USER_PARAM           0x8245
+#define GL_DEBUG_SOURCE_API                    0x8246
+#define GL_DEBUG_SOURCE_WINDOW_SYSTEM          0x8247
+#define GL_DEBUG_SOURCE_SHADER_COMPILER        0x8248
+#define GL_DEBUG_SOURCE_THIRD_PARTY            0x8249
+#define GL_DEBUG_SOURCE_APPLICATION            0x824A
+#define GL_DEBUG_SOURCE_OTHER                  0x824B
+#define GL_DEBUG_TYPE_ERROR                    0x824C
+#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR      0x824D
+#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR       0x824E
+#define GL_DEBUG_TYPE_PORTABILITY              0x824F
+#define GL_DEBUG_TYPE_PERFORMANCE              0x8250
+#define GL_DEBUG_TYPE_OTHER                    0x8251
+#define GL_MAX_DEBUG_MESSAGE_LENGTH            0x9143
+#define GL_MAX_DEBUG_LOGGED_MESSAGES           0x9144
+#define GL_DEBUG_LOGGED_MESSAGES               0x9145
+#define GL_DEBUG_SEVERITY_HIGH                 0x9146
+#define GL_DEBUG_SEVERITY_MEDIUM               0x9147
+#define GL_DEBUG_SEVERITY_LOW                  0x9148
+#define GL_DEBUG_TYPE_MARKER                   0x8268
+#define GL_DEBUG_TYPE_PUSH_GROUP               0x8269
+#define GL_DEBUG_TYPE_POP_GROUP                0x826A
+#define GL_DEBUG_SEVERITY_NOTIFICATION         0x826B
+#define GL_MAX_DEBUG_GROUP_STACK_DEPTH         0x826C
+#define GL_DEBUG_GROUP_STACK_DEPTH             0x826D
+#define GL_BUFFER                              0x82E0
+#define GL_SHADER                              0x82E1
+#define GL_PROGRAM                             0x82E2
+#define GL_QUERY                               0x82E3
+#define GL_PROGRAM_PIPELINE                    0x82E4
+#define GL_SAMPLER                             0x82E6
+#define GL_MAX_LABEL_LENGTH                    0x82E8
+#define GL_DEBUG_OUTPUT                        0x92E0
+#define GL_CONTEXT_FLAG_DEBUG_BIT              0x00000002
+#define GL_MAX_UNIFORM_LOCATIONS               0x826E
+#define GL_FRAMEBUFFER_DEFAULT_WIDTH           0x9310
+#define GL_FRAMEBUFFER_DEFAULT_HEIGHT          0x9311
+#define GL_FRAMEBUFFER_DEFAULT_LAYERS          0x9312
+#define GL_FRAMEBUFFER_DEFAULT_SAMPLES         0x9313
+#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS  0x9314
+#define GL_MAX_FRAMEBUFFER_WIDTH               0x9315
+#define GL_MAX_FRAMEBUFFER_HEIGHT              0x9316
+#define GL_MAX_FRAMEBUFFER_LAYERS              0x9317
+#define GL_MAX_FRAMEBUFFER_SAMPLES             0x9318
+#define GL_INTERNALFORMAT_SUPPORTED            0x826F
+#define GL_INTERNALFORMAT_PREFERRED            0x8270
+#define GL_INTERNALFORMAT_RED_SIZE             0x8271
+#define GL_INTERNALFORMAT_GREEN_SIZE           0x8272
+#define GL_INTERNALFORMAT_BLUE_SIZE            0x8273
+#define GL_INTERNALFORMAT_ALPHA_SIZE           0x8274
+#define GL_INTERNALFORMAT_DEPTH_SIZE           0x8275
+#define GL_INTERNALFORMAT_STENCIL_SIZE         0x8276
+#define GL_INTERNALFORMAT_SHARED_SIZE          0x8277
+#define GL_INTERNALFORMAT_RED_TYPE             0x8278
+#define GL_INTERNALFORMAT_GREEN_TYPE           0x8279
+#define GL_INTERNALFORMAT_BLUE_TYPE            0x827A
+#define GL_INTERNALFORMAT_ALPHA_TYPE           0x827B
+#define GL_INTERNALFORMAT_DEPTH_TYPE           0x827C
+#define GL_INTERNALFORMAT_STENCIL_TYPE         0x827D
+#define GL_MAX_WIDTH                           0x827E
+#define GL_MAX_HEIGHT                          0x827F
+#define GL_MAX_DEPTH                           0x8280
+#define GL_MAX_LAYERS                          0x8281
+#define GL_MAX_COMBINED_DIMENSIONS             0x8282
+#define GL_COLOR_COMPONENTS                    0x8283
+#define GL_DEPTH_COMPONENTS                    0x8284
+#define GL_STENCIL_COMPONENTS                  0x8285
+#define GL_COLOR_RENDERABLE                    0x8286
+#define GL_DEPTH_RENDERABLE                    0x8287
+#define GL_STENCIL_RENDERABLE                  0x8288
+#define GL_FRAMEBUFFER_RENDERABLE              0x8289
+#define GL_FRAMEBUFFER_RENDERABLE_LAYERED      0x828A
+#define GL_FRAMEBUFFER_BLEND                   0x828B
+#define GL_READ_PIXELS                         0x828C
+#define GL_READ_PIXELS_FORMAT                  0x828D
+#define GL_READ_PIXELS_TYPE                    0x828E
+#define GL_TEXTURE_IMAGE_FORMAT                0x828F
+#define GL_TEXTURE_IMAGE_TYPE                  0x8290
+#define GL_GET_TEXTURE_IMAGE_FORMAT            0x8291
+#define GL_GET_TEXTURE_IMAGE_TYPE              0x8292
+#define GL_MIPMAP                              0x8293
+#define GL_MANUAL_GENERATE_MIPMAP              0x8294
+#define GL_AUTO_GENERATE_MIPMAP                0x8295
+#define GL_COLOR_ENCODING                      0x8296
+#define GL_SRGB_READ                           0x8297
+#define GL_SRGB_WRITE                          0x8298
+#define GL_FILTER                              0x829A
+#define GL_VERTEX_TEXTURE                      0x829B
+#define GL_TESS_CONTROL_TEXTURE                0x829C
+#define GL_TESS_EVALUATION_TEXTURE             0x829D
+#define GL_GEOMETRY_TEXTURE                    0x829E
+#define GL_FRAGMENT_TEXTURE                    0x829F
+#define GL_COMPUTE_TEXTURE                     0x82A0
+#define GL_TEXTURE_SHADOW                      0x82A1
+#define GL_TEXTURE_GATHER                      0x82A2
+#define GL_TEXTURE_GATHER_SHADOW               0x82A3
+#define GL_SHADER_IMAGE_LOAD                   0x82A4
+#define GL_SHADER_IMAGE_STORE                  0x82A5
+#define GL_SHADER_IMAGE_ATOMIC                 0x82A6
+#define GL_IMAGE_TEXEL_SIZE                    0x82A7
+#define GL_IMAGE_COMPATIBILITY_CLASS           0x82A8
+#define GL_IMAGE_PIXEL_FORMAT                  0x82A9
+#define GL_IMAGE_PIXEL_TYPE                    0x82AA
+#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST  0x82AC
+#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST  0x82AD
+#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE  0x82AE
+#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE  0x82AF
+#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH      0x82B1
+#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT     0x82B2
+#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE       0x82B3
+#define GL_CLEAR_BUFFER                        0x82B4
+#define GL_TEXTURE_VIEW                        0x82B5
+#define GL_VIEW_COMPATIBILITY_CLASS            0x82B6
+#define GL_FULL_SUPPORT                        0x82B7
+#define GL_CAVEAT_SUPPORT                      0x82B8
+#define GL_IMAGE_CLASS_4_X_32                  0x82B9
+#define GL_IMAGE_CLASS_2_X_32                  0x82BA
+#define GL_IMAGE_CLASS_1_X_32                  0x82BB
+#define GL_IMAGE_CLASS_4_X_16                  0x82BC
+#define GL_IMAGE_CLASS_2_X_16                  0x82BD
+#define GL_IMAGE_CLASS_1_X_16                  0x82BE
+#define GL_IMAGE_CLASS_4_X_8                   0x82BF
+#define GL_IMAGE_CLASS_2_X_8                   0x82C0
+#define GL_IMAGE_CLASS_1_X_8                   0x82C1
+#define GL_IMAGE_CLASS_11_11_10                0x82C2
+#define GL_IMAGE_CLASS_10_10_10_2              0x82C3
+#define GL_VIEW_CLASS_128_BITS                 0x82C4
+#define GL_VIEW_CLASS_96_BITS                  0x82C5
+#define GL_VIEW_CLASS_64_BITS                  0x82C6
+#define GL_VIEW_CLASS_48_BITS                  0x82C7
+#define GL_VIEW_CLASS_32_BITS                  0x82C8
+#define GL_VIEW_CLASS_24_BITS                  0x82C9
+#define GL_VIEW_CLASS_16_BITS                  0x82CA
+#define GL_VIEW_CLASS_8_BITS                   0x82CB
+#define GL_VIEW_CLASS_S3TC_DXT1_RGB            0x82CC
+#define GL_VIEW_CLASS_S3TC_DXT1_RGBA           0x82CD
+#define GL_VIEW_CLASS_S3TC_DXT3_RGBA           0x82CE
+#define GL_VIEW_CLASS_S3TC_DXT5_RGBA           0x82CF
+#define GL_VIEW_CLASS_RGTC1_RED                0x82D0
+#define GL_VIEW_CLASS_RGTC2_RG                 0x82D1
+#define GL_VIEW_CLASS_BPTC_UNORM               0x82D2
+#define GL_VIEW_CLASS_BPTC_FLOAT               0x82D3
+#define GL_UNIFORM                             0x92E1
+#define GL_UNIFORM_BLOCK                       0x92E2
+#define GL_PROGRAM_INPUT                       0x92E3
+#define GL_PROGRAM_OUTPUT                      0x92E4
+#define GL_BUFFER_VARIABLE                     0x92E5
+#define GL_SHADER_STORAGE_BLOCK                0x92E6
+#define GL_VERTEX_SUBROUTINE                   0x92E8
+#define GL_TESS_CONTROL_SUBROUTINE             0x92E9
+#define GL_TESS_EVALUATION_SUBROUTINE          0x92EA
+#define GL_GEOMETRY_SUBROUTINE                 0x92EB
+#define GL_FRAGMENT_SUBROUTINE                 0x92EC
+#define GL_COMPUTE_SUBROUTINE                  0x92ED
+#define GL_VERTEX_SUBROUTINE_UNIFORM           0x92EE
+#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM     0x92EF
+#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM  0x92F0
+#define GL_GEOMETRY_SUBROUTINE_UNIFORM         0x92F1
+#define GL_FRAGMENT_SUBROUTINE_UNIFORM         0x92F2
+#define GL_COMPUTE_SUBROUTINE_UNIFORM          0x92F3
+#define GL_TRANSFORM_FEEDBACK_VARYING          0x92F4
+#define GL_ACTIVE_RESOURCES                    0x92F5
+#define GL_MAX_NAME_LENGTH                     0x92F6
+#define GL_MAX_NUM_ACTIVE_VARIABLES            0x92F7
+#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES      0x92F8
+#define GL_NAME_LENGTH                         0x92F9
+#define GL_TYPE                                0x92FA
+#define GL_ARRAY_SIZE                          0x92FB
+#define GL_OFFSET                              0x92FC
+#define GL_BLOCK_INDEX                         0x92FD
+#define GL_ARRAY_STRIDE                        0x92FE
+#define GL_MATRIX_STRIDE                       0x92FF
+#define GL_IS_ROW_MAJOR                        0x9300
+#define GL_ATOMIC_COUNTER_BUFFER_INDEX         0x9301
+#define GL_BUFFER_BINDING                      0x9302
+#define GL_BUFFER_DATA_SIZE                    0x9303
+#define GL_NUM_ACTIVE_VARIABLES                0x9304
+#define GL_ACTIVE_VARIABLES                    0x9305
+#define GL_REFERENCED_BY_VERTEX_SHADER         0x9306
+#define GL_REFERENCED_BY_TESS_CONTROL_SHADER   0x9307
+#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER  0x9308
+#define GL_REFERENCED_BY_GEOMETRY_SHADER       0x9309
+#define GL_REFERENCED_BY_FRAGMENT_SHADER       0x930A
+#define GL_REFERENCED_BY_COMPUTE_SHADER        0x930B
+#define GL_TOP_LEVEL_ARRAY_SIZE                0x930C
+#define GL_TOP_LEVEL_ARRAY_STRIDE              0x930D
+#define GL_LOCATION                            0x930E
+#define GL_LOCATION_INDEX                      0x930F
+#define GL_IS_PER_PATCH                        0x92E7
+#define GL_SHADER_STORAGE_BUFFER               0x90D2
+#define GL_SHADER_STORAGE_BUFFER_BINDING       0x90D3
+#define GL_SHADER_STORAGE_BUFFER_START         0x90D4
+#define GL_SHADER_STORAGE_BUFFER_SIZE          0x90D5
+#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS    0x90D6
+#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS  0x90D7
+#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS  0x90D8
+#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS  0x90D9
+#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS  0x90DA
+#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS   0x90DB
+#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS  0x90DC
+#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS  0x90DD
+#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE       0x90DE
+#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT  0x90DF
+#define GL_SHADER_STORAGE_BARRIER_BIT          0x00002000
+#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES  0x8F39
+#define GL_DEPTH_STENCIL_TEXTURE_MODE          0x90EA
+#define GL_TEXTURE_BUFFER_OFFSET               0x919D
+#define GL_TEXTURE_BUFFER_SIZE                 0x919E
+#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT     0x919F
+#define GL_TEXTURE_VIEW_MIN_LEVEL              0x82DB
+#define GL_TEXTURE_VIEW_NUM_LEVELS             0x82DC
+#define GL_TEXTURE_VIEW_MIN_LAYER              0x82DD
+#define GL_TEXTURE_VIEW_NUM_LAYERS             0x82DE
+#define GL_TEXTURE_IMMUTABLE_LEVELS            0x82DF
+#define GL_VERTEX_ATTRIB_BINDING               0x82D4
+#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET       0x82D5
+#define GL_VERTEX_BINDING_DIVISOR              0x82D6
+#define GL_VERTEX_BINDING_OFFSET               0x82D7
+#define GL_VERTEX_BINDING_STRIDE               0x82D8
+#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET   0x82D9
+#define GL_MAX_VERTEX_ATTRIB_BINDINGS          0x82DA
+#define GL_VERTEX_BINDING_BUFFER               0x8F4F
+#define GL_DISPLAY_LIST                        0x82E7
+typedef void (APIENTRYP pfn_glClearBufferData) (GLenum, GLenum, GLenum, GLenum, const void*);
+extern pfn_glClearBufferData fp_glClearBufferData;
+typedef void (APIENTRYP pfn_glClearBufferSubData) (GLenum, GLenum, GLintptr, GLsizeiptr, GLenum, GLenum, const void*);
+extern pfn_glClearBufferSubData fp_glClearBufferSubData;
+typedef void (APIENTRYP pfn_glDispatchCompute) (GLuint, GLuint, GLuint);
+extern pfn_glDispatchCompute fp_glDispatchCompute;
+typedef void (APIENTRYP pfn_glDispatchComputeIndirect) (GLintptr);
+extern pfn_glDispatchComputeIndirect fp_glDispatchComputeIndirect;
+typedef void (APIENTRYP pfn_glCopyImageSubData) (GLuint, GLenum, GLint, GLint, GLint, GLint, GLuint, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei);
+extern pfn_glCopyImageSubData fp_glCopyImageSubData;
+typedef void (APIENTRYP pfn_glFramebufferParameteri) (GLenum, GLenum, GLint);
+extern pfn_glFramebufferParameteri fp_glFramebufferParameteri;
+typedef void (APIENTRYP pfn_glGetFramebufferParameteriv) (GLenum, GLenum, GLint*);
+extern pfn_glGetFramebufferParameteriv fp_glGetFramebufferParameteriv;
+typedef void (APIENTRYP pfn_glGetInternalformati64v) (GLenum, GLenum, GLenum, GLsizei, GLint64*);
+extern pfn_glGetInternalformati64v fp_glGetInternalformati64v;
+typedef void (APIENTRYP pfn_glInvalidateTexSubImage) (GLuint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei);
+extern pfn_glInvalidateTexSubImage fp_glInvalidateTexSubImage;
+typedef void (APIENTRYP pfn_glInvalidateTexImage) (GLuint, GLint);
+extern pfn_glInvalidateTexImage fp_glInvalidateTexImage;
+typedef void (APIENTRYP pfn_glInvalidateBufferSubData) (GLuint, GLintptr, GLsizeiptr);
+extern pfn_glInvalidateBufferSubData fp_glInvalidateBufferSubData;
+typedef void (APIENTRYP pfn_glInvalidateBufferData) (GLuint);
+extern pfn_glInvalidateBufferData fp_glInvalidateBufferData;
+typedef void (APIENTRYP pfn_glInvalidateFramebuffer) (GLenum, GLsizei, const GLenum*);
+extern pfn_glInvalidateFramebuffer fp_glInvalidateFramebuffer;
+typedef void (APIENTRYP pfn_glInvalidateSubFramebuffer) (GLenum, GLsizei, const GLenum*, GLint, GLint, GLsizei, GLsizei);
+extern pfn_glInvalidateSubFramebuffer fp_glInvalidateSubFramebuffer;
+typedef void (APIENTRYP pfn_glMultiDrawArraysIndirect) (GLenum, const void*, GLsizei, GLsizei);
+extern pfn_glMultiDrawArraysIndirect fp_glMultiDrawArraysIndirect;
+typedef void (APIENTRYP pfn_glMultiDrawElementsIndirect) (GLenum, GLenum, const void*, GLsizei, GLsizei);
+extern pfn_glMultiDrawElementsIndirect fp_glMultiDrawElementsIndirect;
+typedef void (APIENTRYP pfn_glGetProgramInterfaceiv) (GLuint, GLenum, GLenum, GLint*);
+extern pfn_glGetProgramInterfaceiv fp_glGetProgramInterfaceiv;
+typedef GLuint (APIENTRYP pfn_glGetProgramResourceIndex) (GLuint, GLenum, const GLchar*);
+extern pfn_glGetProgramResourceIndex fp_glGetProgramResourceIndex;
+typedef void (APIENTRYP pfn_glGetProgramResourceName) (GLuint, GLenum, GLuint, GLsizei, GLsizei*, GLchar*);
+extern pfn_glGetProgramResourceName fp_glGetProgramResourceName;
+typedef void (APIENTRYP pfn_glGetProgramResourceiv) (GLuint, GLenum, GLuint, GLsizei, const GLenum*, GLsizei, GLsizei*, GLint*);
+extern pfn_glGetProgramResourceiv fp_glGetProgramResourceiv;
+typedef GLint (APIENTRYP pfn_glGetProgramResourceLocation) (GLuint, GLenum, const GLchar*);
+extern pfn_glGetProgramResourceLocation fp_glGetProgramResourceLocation;
+typedef GLint (APIENTRYP pfn_glGetProgramResourceLocationIndex) (GLuint, GLenum, const GLchar*);
+extern pfn_glGetProgramResourceLocationIndex fp_glGetProgramResourceLocationIndex;
+typedef void (APIENTRYP pfn_glShaderStorageBlockBinding) (GLuint, GLuint, GLuint);
+extern pfn_glShaderStorageBlockBinding fp_glShaderStorageBlockBinding;
+typedef void (APIENTRYP pfn_glTexBufferRange) (GLenum, GLenum, GLuint, GLintptr, GLsizeiptr);
+extern pfn_glTexBufferRange fp_glTexBufferRange;
+typedef void (APIENTRYP pfn_glTexStorage2DMultisample) (GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLboolean);
+extern pfn_glTexStorage2DMultisample fp_glTexStorage2DMultisample;
+typedef void (APIENTRYP pfn_glTexStorage3DMultisample) (GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean);
+extern pfn_glTexStorage3DMultisample fp_glTexStorage3DMultisample;
+typedef void (APIENTRYP pfn_glTextureView) (GLuint, GLenum, GLuint, GLenum, GLuint, GLuint, GLuint, GLuint);
+extern pfn_glTextureView fp_glTextureView;
+typedef void (APIENTRYP pfn_glBindVertexBuffer) (GLuint, GLuint, GLintptr, GLsizei);
+extern pfn_glBindVertexBuffer fp_glBindVertexBuffer;
+typedef void (APIENTRYP pfn_glVertexAttribFormat) (GLuint, GLint, GLenum, GLboolean, GLuint);
+extern pfn_glVertexAttribFormat fp_glVertexAttribFormat;
+typedef void (APIENTRYP pfn_glVertexAttribIFormat) (GLuint, GLint, GLenum, GLuint);
+extern pfn_glVertexAttribIFormat fp_glVertexAttribIFormat;
+typedef void (APIENTRYP pfn_glVertexAttribLFormat) (GLuint, GLint, GLenum, GLuint);
+extern pfn_glVertexAttribLFormat fp_glVertexAttribLFormat;
+typedef void (APIENTRYP pfn_glVertexAttribBinding) (GLuint, GLuint);
+extern pfn_glVertexAttribBinding fp_glVertexAttribBinding;
+typedef void (APIENTRYP pfn_glVertexBindingDivisor) (GLuint, GLuint);
+extern pfn_glVertexBindingDivisor fp_glVertexBindingDivisor;
+typedef void (APIENTRYP pfn_glDebugMessageControl) (GLenum, GLenum, GLenum, GLsizei, const GLuint*, GLboolean);
+extern pfn_glDebugMessageControl fp_glDebugMessageControl;
+typedef void (APIENTRYP pfn_glDebugMessageInsert) (GLenum, GLenum, GLuint, GLenum, GLsizei, const GLchar*);
+extern pfn_glDebugMessageInsert fp_glDebugMessageInsert;
+typedef void (APIENTRYP pfn_glDebugMessageCallback) (GLDEBUGPROC, const void*);
+extern pfn_glDebugMessageCallback fp_glDebugMessageCallback;
+typedef GLuint (APIENTRYP pfn_glGetDebugMessageLog) (GLuint, GLsizei, GLenum*, GLenum*, GLuint*, GLenum*, GLsizei*, GLchar*);
+extern pfn_glGetDebugMessageLog fp_glGetDebugMessageLog;
+typedef void (APIENTRYP pfn_glPushDebugGroup) (GLenum, GLuint, GLsizei, const GLchar*);
+extern pfn_glPushDebugGroup fp_glPushDebugGroup;
+typedef void (APIENTRYP pfn_glPopDebugGroup) ();
+extern pfn_glPopDebugGroup fp_glPopDebugGroup;
+typedef void (APIENTRYP pfn_glObjectLabel) (GLenum, GLuint, GLsizei, const GLchar*);
+extern pfn_glObjectLabel fp_glObjectLabel;
+typedef void (APIENTRYP pfn_glGetObjectLabel) (GLenum, GLuint, GLsizei, GLsizei*, GLchar*);
+extern pfn_glGetObjectLabel fp_glGetObjectLabel;
+typedef void (APIENTRYP pfn_glObjectPtrLabel) (const void*, GLsizei, const GLchar*);
+extern pfn_glObjectPtrLabel fp_glObjectPtrLabel;
+typedef void (APIENTRYP pfn_glGetObjectPtrLabel) (const void*, GLsizei, GLsizei*, GLchar*);
+extern pfn_glGetObjectPtrLabel fp_glGetObjectPtrLabel;
+
+ /* GL_VERSION_4_4 */
+extern GLboolean GLAD_VERSION_4_4;
+#define GL_MAX_VERTEX_ATTRIB_STRIDE            0x82E5
+#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED  0x8221
+#define GL_TEXTURE_BUFFER_BINDING              0x8C2A
+#define GL_MAP_PERSISTENT_BIT                  0x0040
+#define GL_MAP_COHERENT_BIT                    0x0080
+#define GL_DYNAMIC_STORAGE_BIT                 0x0100
+#define GL_CLIENT_STORAGE_BIT                  0x0200
+#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT    0x00004000
+#define GL_BUFFER_IMMUTABLE_STORAGE            0x821F
+#define GL_BUFFER_STORAGE_FLAGS                0x8220
+#define GL_CLEAR_TEXTURE                       0x9365
+#define GL_LOCATION_COMPONENT                  0x934A
+#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX     0x934B
+#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE    0x934C
+#define GL_QUERY_BUFFER                        0x9192
+#define GL_QUERY_BUFFER_BARRIER_BIT            0x00008000
+#define GL_QUERY_BUFFER_BINDING                0x9193
+#define GL_QUERY_RESULT_NO_WAIT                0x9194
+#define GL_MIRROR_CLAMP_TO_EDGE                0x8743
+typedef void (APIENTRYP pfn_glBufferStorage) (GLenum, GLsizeiptr, const void*, GLbitfield);
+extern pfn_glBufferStorage fp_glBufferStorage;
+typedef void (APIENTRYP pfn_glClearTexImage) (GLuint, GLint, GLenum, GLenum, const void*);
+extern pfn_glClearTexImage fp_glClearTexImage;
+typedef void (APIENTRYP pfn_glClearTexSubImage) (GLuint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const void*);
+extern pfn_glClearTexSubImage fp_glClearTexSubImage;
+typedef void (APIENTRYP pfn_glBindBuffersBase) (GLenum, GLuint, GLsizei, const GLuint*);
+extern pfn_glBindBuffersBase fp_glBindBuffersBase;
+typedef void (APIENTRYP pfn_glBindBuffersRange) (GLenum, GLuint, GLsizei, const GLuint*, const GLintptr*, const GLsizeiptr*);
+extern pfn_glBindBuffersRange fp_glBindBuffersRange;
+typedef void (APIENTRYP pfn_glBindTextures) (GLuint, GLsizei, const GLuint*);
+extern pfn_glBindTextures fp_glBindTextures;
+typedef void (APIENTRYP pfn_glBindSamplers) (GLuint, GLsizei, const GLuint*);
+extern pfn_glBindSamplers fp_glBindSamplers;
+typedef void (APIENTRYP pfn_glBindImageTextures) (GLuint, GLsizei, const GLuint*);
+extern pfn_glBindImageTextures fp_glBindImageTextures;
+typedef void (APIENTRYP pfn_glBindVertexBuffers) (GLuint, GLsizei, const GLuint*, const GLintptr*, const GLsizei*);
+extern pfn_glBindVertexBuffers fp_glBindVertexBuffers;
+
+ /* GL_VERSION_4_5 */
+extern GLboolean GLAD_VERSION_4_5;
+#define GL_CONTEXT_LOST                        0x0507
+#define GL_NEGATIVE_ONE_TO_ONE                 0x935E
+#define GL_ZERO_TO_ONE                         0x935F
+#define GL_CLIP_ORIGIN                         0x935C
+#define GL_CLIP_DEPTH_MODE                     0x935D
+#define GL_QUERY_WAIT_INVERTED                 0x8E17
+#define GL_QUERY_NO_WAIT_INVERTED              0x8E18
+#define GL_QUERY_BY_REGION_WAIT_INVERTED       0x8E19
+#define GL_QUERY_BY_REGION_NO_WAIT_INVERTED    0x8E1A
+#define GL_MAX_CULL_DISTANCES                  0x82F9
+#define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES  0x82FA
+#define GL_TEXTURE_TARGET                      0x1006
+#define GL_QUERY_TARGET                        0x82EA
+#define GL_TEXTURE_BINDING                     0x82EB
+#define GL_GUILTY_CONTEXT_RESET                0x8253
+#define GL_INNOCENT_CONTEXT_RESET              0x8254
+#define GL_UNKNOWN_CONTEXT_RESET               0x8255
+#define GL_RESET_NOTIFICATION_STRATEGY         0x8256
+#define GL_LOSE_CONTEXT_ON_RESET               0x8252
+#define GL_NO_RESET_NOTIFICATION               0x8261
+#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT      0x00000004
+#define GL_CONTEXT_RELEASE_BEHAVIOR            0x82FB
+#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH      0x82FC
+typedef void (APIENTRYP pfn_glClipControl) (GLenum, GLenum);
+extern pfn_glClipControl fp_glClipControl;
+typedef void (APIENTRYP pfn_glCreateTransformFeedbacks) (GLsizei, GLuint*);
+extern pfn_glCreateTransformFeedbacks fp_glCreateTransformFeedbacks;
+typedef void (APIENTRYP pfn_glTransformFeedbackBufferBase) (GLuint, GLuint, GLuint);
+extern pfn_glTransformFeedbackBufferBase fp_glTransformFeedbackBufferBase;
+typedef void (APIENTRYP pfn_glTransformFeedbackBufferRange) (GLuint, GLuint, GLuint, GLintptr, GLsizei);
+extern pfn_glTransformFeedbackBufferRange fp_glTransformFeedbackBufferRange;
+typedef void (APIENTRYP pfn_glGetTransformFeedbackiv) (GLuint, GLenum, GLint*);
+extern pfn_glGetTransformFeedbackiv fp_glGetTransformFeedbackiv;
+typedef void (APIENTRYP pfn_glGetTransformFeedbacki_v) (GLuint, GLenum, GLuint, GLint*);
+extern pfn_glGetTransformFeedbacki_v fp_glGetTransformFeedbacki_v;
+typedef void (APIENTRYP pfn_glGetTransformFeedbacki64_v) (GLuint, GLenum, GLuint, GLint64*);
+extern pfn_glGetTransformFeedbacki64_v fp_glGetTransformFeedbacki64_v;
+typedef void (APIENTRYP pfn_glCreateBuffers) (GLsizei, GLuint*);
+extern pfn_glCreateBuffers fp_glCreateBuffers;
+typedef void (APIENTRYP pfn_glNamedBufferStorage) (GLuint, GLsizei, const void*, GLbitfield);
+extern pfn_glNamedBufferStorage fp_glNamedBufferStorage;
+typedef void (APIENTRYP pfn_glNamedBufferData) (GLuint, GLsizei, const void*, GLenum);
+extern pfn_glNamedBufferData fp_glNamedBufferData;
+typedef void (APIENTRYP pfn_glNamedBufferSubData) (GLuint, GLintptr, GLsizei, const void*);
+extern pfn_glNamedBufferSubData fp_glNamedBufferSubData;
+typedef void (APIENTRYP pfn_glCopyNamedBufferSubData) (GLuint, GLuint, GLintptr, GLintptr, GLsizei);
+extern pfn_glCopyNamedBufferSubData fp_glCopyNamedBufferSubData;
+typedef void (APIENTRYP pfn_glClearNamedBufferData) (GLuint, GLenum, GLenum, GLenum, const void*);
+extern pfn_glClearNamedBufferData fp_glClearNamedBufferData;
+typedef void (APIENTRYP pfn_glClearNamedBufferSubData) (GLuint, GLenum, GLintptr, GLsizei, GLenum, GLenum, const void*);
+extern pfn_glClearNamedBufferSubData fp_glClearNamedBufferSubData;
+typedef void* (APIENTRYP pfn_glMapNamedBuffer) (GLuint, GLenum);
+extern pfn_glMapNamedBuffer fp_glMapNamedBuffer;
+typedef void* (APIENTRYP pfn_glMapNamedBufferRange) (GLuint, GLintptr, GLsizei, GLbitfield);
+extern pfn_glMapNamedBufferRange fp_glMapNamedBufferRange;
+typedef GLboolean (APIENTRYP pfn_glUnmapNamedBuffer) (GLuint);
+extern pfn_glUnmapNamedBuffer fp_glUnmapNamedBuffer;
+typedef void (APIENTRYP pfn_glFlushMappedNamedBufferRange) (GLuint, GLintptr, GLsizei);
+extern pfn_glFlushMappedNamedBufferRange fp_glFlushMappedNamedBufferRange;
+typedef void (APIENTRYP pfn_glGetNamedBufferParameteriv) (GLuint, GLenum, GLint*);
+extern pfn_glGetNamedBufferParameteriv fp_glGetNamedBufferParameteriv;
+typedef void (APIENTRYP pfn_glGetNamedBufferParameteri64v) (GLuint, GLenum, GLint64*);
+extern pfn_glGetNamedBufferParameteri64v fp_glGetNamedBufferParameteri64v;
+typedef void (APIENTRYP pfn_glGetNamedBufferPointerv) (GLuint, GLenum, void**);
+extern pfn_glGetNamedBufferPointerv fp_glGetNamedBufferPointerv;
+typedef void (APIENTRYP pfn_glGetNamedBufferSubData) (GLuint, GLintptr, GLsizei, void*);
+extern pfn_glGetNamedBufferSubData fp_glGetNamedBufferSubData;
+typedef void (APIENTRYP pfn_glCreateFramebuffers) (GLsizei, GLuint*);
+extern pfn_glCreateFramebuffers fp_glCreateFramebuffers;
+typedef void (APIENTRYP pfn_glNamedFramebufferRenderbuffer) (GLuint, GLenum, GLenum, GLuint);
+extern pfn_glNamedFramebufferRenderbuffer fp_glNamedFramebufferRenderbuffer;
+typedef void (APIENTRYP pfn_glNamedFramebufferParameteri) (GLuint, GLenum, GLint);
+extern pfn_glNamedFramebufferParameteri fp_glNamedFramebufferParameteri;
+typedef void (APIENTRYP pfn_glNamedFramebufferTexture) (GLuint, GLenum, GLuint, GLint);
+extern pfn_glNamedFramebufferTexture fp_glNamedFramebufferTexture;
+typedef void (APIENTRYP pfn_glNamedFramebufferTextureLayer) (GLuint, GLenum, GLuint, GLint, GLint);
+extern pfn_glNamedFramebufferTextureLayer fp_glNamedFramebufferTextureLayer;
+typedef void (APIENTRYP pfn_glNamedFramebufferDrawBuffer) (GLuint, GLenum);
+extern pfn_glNamedFramebufferDrawBuffer fp_glNamedFramebufferDrawBuffer;
+typedef void (APIENTRYP pfn_glNamedFramebufferDrawBuffers) (GLuint, GLsizei, const GLenum*);
+extern pfn_glNamedFramebufferDrawBuffers fp_glNamedFramebufferDrawBuffers;
+typedef void (APIENTRYP pfn_glNamedFramebufferReadBuffer) (GLuint, GLenum);
+extern pfn_glNamedFramebufferReadBuffer fp_glNamedFramebufferReadBuffer;
+typedef void (APIENTRYP pfn_glInvalidateNamedFramebufferData) (GLuint, GLsizei, const GLenum*);
+extern pfn_glInvalidateNamedFramebufferData fp_glInvalidateNamedFramebufferData;
+typedef void (APIENTRYP pfn_glInvalidateNamedFramebufferSubData) (GLuint, GLsizei, const GLenum*, GLint, GLint, GLsizei, GLsizei);
+extern pfn_glInvalidateNamedFramebufferSubData fp_glInvalidateNamedFramebufferSubData;
+typedef void (APIENTRYP pfn_glClearNamedFramebufferiv) (GLuint, GLenum, GLint, const GLint*);
+extern pfn_glClearNamedFramebufferiv fp_glClearNamedFramebufferiv;
+typedef void (APIENTRYP pfn_glClearNamedFramebufferuiv) (GLuint, GLenum, GLint, const GLuint*);
+extern pfn_glClearNamedFramebufferuiv fp_glClearNamedFramebufferuiv;
+typedef void (APIENTRYP pfn_glClearNamedFramebufferfv) (GLuint, GLenum, GLint, const GLfloat*);
+extern pfn_glClearNamedFramebufferfv fp_glClearNamedFramebufferfv;
+typedef void (APIENTRYP pfn_glClearNamedFramebufferfi) (GLuint, GLenum, const GLfloat, GLint);
+extern pfn_glClearNamedFramebufferfi fp_glClearNamedFramebufferfi;
+typedef void (APIENTRYP pfn_glBlitNamedFramebuffer) (GLuint, GLuint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum);
+extern pfn_glBlitNamedFramebuffer fp_glBlitNamedFramebuffer;
+typedef GLenum (APIENTRYP pfn_glCheckNamedFramebufferStatus) (GLuint, GLenum);
+extern pfn_glCheckNamedFramebufferStatus fp_glCheckNamedFramebufferStatus;
+typedef void (APIENTRYP pfn_glGetNamedFramebufferParameteriv) (GLuint, GLenum, GLint*);
+extern pfn_glGetNamedFramebufferParameteriv fp_glGetNamedFramebufferParameteriv;
+typedef void (APIENTRYP pfn_glGetNamedFramebufferAttachmentParameteriv) (GLuint, GLenum, GLenum, GLint*);
+extern pfn_glGetNamedFramebufferAttachmentParameteriv fp_glGetNamedFramebufferAttachmentParameteriv;
+typedef void (APIENTRYP pfn_glCreateRenderbuffers) (GLsizei, GLuint*);
+extern pfn_glCreateRenderbuffers fp_glCreateRenderbuffers;
+typedef void (APIENTRYP pfn_glNamedRenderbufferStorage) (GLuint, GLenum, GLsizei, GLsizei);
+extern pfn_glNamedRenderbufferStorage fp_glNamedRenderbufferStorage;
+typedef void (APIENTRYP pfn_glNamedRenderbufferStorageMultisample) (GLuint, GLsizei, GLenum, GLsizei, GLsizei);
+extern pfn_glNamedRenderbufferStorageMultisample fp_glNamedRenderbufferStorageMultisample;
+typedef void (APIENTRYP pfn_glGetNamedRenderbufferParameteriv) (GLuint, GLenum, GLint*);
+extern pfn_glGetNamedRenderbufferParameteriv fp_glGetNamedRenderbufferParameteriv;
+typedef void (APIENTRYP pfn_glCreateTextures) (GLenum, GLsizei, GLuint*);
+extern pfn_glCreateTextures fp_glCreateTextures;
+typedef void (APIENTRYP pfn_glTextureBuffer) (GLuint, GLenum, GLuint);
+extern pfn_glTextureBuffer fp_glTextureBuffer;
+typedef void (APIENTRYP pfn_glTextureBufferRange) (GLuint, GLenum, GLuint, GLintptr, GLsizei);
+extern pfn_glTextureBufferRange fp_glTextureBufferRange;
+typedef void (APIENTRYP pfn_glTextureStorage1D) (GLuint, GLsizei, GLenum, GLsizei);
+extern pfn_glTextureStorage1D fp_glTextureStorage1D;
+typedef void (APIENTRYP pfn_glTextureStorage2D) (GLuint, GLsizei, GLenum, GLsizei, GLsizei);
+extern pfn_glTextureStorage2D fp_glTextureStorage2D;
+typedef void (APIENTRYP pfn_glTextureStorage3D) (GLuint, GLsizei, GLenum, GLsizei, GLsizei, GLsizei);
+extern pfn_glTextureStorage3D fp_glTextureStorage3D;
+typedef void (APIENTRYP pfn_glTextureStorage2DMultisample) (GLuint, GLsizei, GLenum, GLsizei, GLsizei, GLboolean);
+extern pfn_glTextureStorage2DMultisample fp_glTextureStorage2DMultisample;
+typedef void (APIENTRYP pfn_glTextureStorage3DMultisample) (GLuint, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean);
+extern pfn_glTextureStorage3DMultisample fp_glTextureStorage3DMultisample;
+typedef void (APIENTRYP pfn_glTextureSubImage1D) (GLuint, GLint, GLint, GLsizei, GLenum, GLenum, const void*);
+extern pfn_glTextureSubImage1D fp_glTextureSubImage1D;
+typedef void (APIENTRYP pfn_glTextureSubImage2D) (GLuint, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const void*);
+extern pfn_glTextureSubImage2D fp_glTextureSubImage2D;
+typedef void (APIENTRYP pfn_glTextureSubImage3D) (GLuint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const void*);
+extern pfn_glTextureSubImage3D fp_glTextureSubImage3D;
+typedef void (APIENTRYP pfn_glCompressedTextureSubImage1D) (GLuint, GLint, GLint, GLsizei, GLenum, GLsizei, const void*);
+extern pfn_glCompressedTextureSubImage1D fp_glCompressedTextureSubImage1D;
+typedef void (APIENTRYP pfn_glCompressedTextureSubImage2D) (GLuint, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const void*);
+extern pfn_glCompressedTextureSubImage2D fp_glCompressedTextureSubImage2D;
+typedef void (APIENTRYP pfn_glCompressedTextureSubImage3D) (GLuint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const void*);
+extern pfn_glCompressedTextureSubImage3D fp_glCompressedTextureSubImage3D;
+typedef void (APIENTRYP pfn_glCopyTextureSubImage1D) (GLuint, GLint, GLint, GLint, GLint, GLsizei);
+extern pfn_glCopyTextureSubImage1D fp_glCopyTextureSubImage1D;
+typedef void (APIENTRYP pfn_glCopyTextureSubImage2D) (GLuint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+extern pfn_glCopyTextureSubImage2D fp_glCopyTextureSubImage2D;
+typedef void (APIENTRYP pfn_glCopyTextureSubImage3D) (GLuint, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+extern pfn_glCopyTextureSubImage3D fp_glCopyTextureSubImage3D;
+typedef void (APIENTRYP pfn_glTextureParameterf) (GLuint, GLenum, GLfloat);
+extern pfn_glTextureParameterf fp_glTextureParameterf;
+typedef void (APIENTRYP pfn_glTextureParameterfv) (GLuint, GLenum, const GLfloat*);
+extern pfn_glTextureParameterfv fp_glTextureParameterfv;
+typedef void (APIENTRYP pfn_glTextureParameteri) (GLuint, GLenum, GLint);
+extern pfn_glTextureParameteri fp_glTextureParameteri;
+typedef void (APIENTRYP pfn_glTextureParameterIiv) (GLuint, GLenum, const GLint*);
+extern pfn_glTextureParameterIiv fp_glTextureParameterIiv;
+typedef void (APIENTRYP pfn_glTextureParameterIuiv) (GLuint, GLenum, const GLuint*);
+extern pfn_glTextureParameterIuiv fp_glTextureParameterIuiv;
+typedef void (APIENTRYP pfn_glTextureParameteriv) (GLuint, GLenum, const GLint*);
+extern pfn_glTextureParameteriv fp_glTextureParameteriv;
+typedef void (APIENTRYP pfn_glGenerateTextureMipmap) (GLuint);
+extern pfn_glGenerateTextureMipmap fp_glGenerateTextureMipmap;
+typedef void (APIENTRYP pfn_glBindTextureUnit) (GLuint, GLuint);
+extern pfn_glBindTextureUnit fp_glBindTextureUnit;
+typedef void (APIENTRYP pfn_glGetTextureImage) (GLuint, GLint, GLenum, GLenum, GLsizei, void*);
+extern pfn_glGetTextureImage fp_glGetTextureImage;
+typedef void (APIENTRYP pfn_glGetCompressedTextureImage) (GLuint, GLint, GLsizei, void*);
+extern pfn_glGetCompressedTextureImage fp_glGetCompressedTextureImage;
+typedef void (APIENTRYP pfn_glGetTextureLevelParameterfv) (GLuint, GLint, GLenum, GLfloat*);
+extern pfn_glGetTextureLevelParameterfv fp_glGetTextureLevelParameterfv;
+typedef void (APIENTRYP pfn_glGetTextureLevelParameteriv) (GLuint, GLint, GLenum, GLint*);
+extern pfn_glGetTextureLevelParameteriv fp_glGetTextureLevelParameteriv;
+typedef void (APIENTRYP pfn_glGetTextureParameterfv) (GLuint, GLenum, GLfloat*);
+extern pfn_glGetTextureParameterfv fp_glGetTextureParameterfv;
+typedef void (APIENTRYP pfn_glGetTextureParameterIiv) (GLuint, GLenum, GLint*);
+extern pfn_glGetTextureParameterIiv fp_glGetTextureParameterIiv;
+typedef void (APIENTRYP pfn_glGetTextureParameterIuiv) (GLuint, GLenum, GLuint*);
+extern pfn_glGetTextureParameterIuiv fp_glGetTextureParameterIuiv;
+typedef void (APIENTRYP pfn_glGetTextureParameteriv) (GLuint, GLenum, GLint*);
+extern pfn_glGetTextureParameteriv fp_glGetTextureParameteriv;
+typedef void (APIENTRYP pfn_glCreateVertexArrays) (GLsizei, GLuint*);
+extern pfn_glCreateVertexArrays fp_glCreateVertexArrays;
+typedef void (APIENTRYP pfn_glDisableVertexArrayAttrib) (GLuint, GLuint);
+extern pfn_glDisableVertexArrayAttrib fp_glDisableVertexArrayAttrib;
+typedef void (APIENTRYP pfn_glEnableVertexArrayAttrib) (GLuint, GLuint);
+extern pfn_glEnableVertexArrayAttrib fp_glEnableVertexArrayAttrib;
+typedef void (APIENTRYP pfn_glVertexArrayElementBuffer) (GLuint, GLuint);
+extern pfn_glVertexArrayElementBuffer fp_glVertexArrayElementBuffer;
+typedef void (APIENTRYP pfn_glVertexArrayVertexBuffer) (GLuint, GLuint, GLuint, GLintptr, GLsizei);
+extern pfn_glVertexArrayVertexBuffer fp_glVertexArrayVertexBuffer;
+typedef void (APIENTRYP pfn_glVertexArrayVertexBuffers) (GLuint, GLuint, GLsizei, const GLuint*, const GLintptr*, const GLsizei*);
+extern pfn_glVertexArrayVertexBuffers fp_glVertexArrayVertexBuffers;
+typedef void (APIENTRYP pfn_glVertexArrayAttribBinding) (GLuint, GLuint, GLuint);
+extern pfn_glVertexArrayAttribBinding fp_glVertexArrayAttribBinding;
+typedef void (APIENTRYP pfn_glVertexArrayAttribFormat) (GLuint, GLuint, GLint, GLenum, GLboolean, GLuint);
+extern pfn_glVertexArrayAttribFormat fp_glVertexArrayAttribFormat;
+typedef void (APIENTRYP pfn_glVertexArrayAttribIFormat) (GLuint, GLuint, GLint, GLenum, GLuint);
+extern pfn_glVertexArrayAttribIFormat fp_glVertexArrayAttribIFormat;
+typedef void (APIENTRYP pfn_glVertexArrayAttribLFormat) (GLuint, GLuint, GLint, GLenum, GLuint);
+extern pfn_glVertexArrayAttribLFormat fp_glVertexArrayAttribLFormat;
+typedef void (APIENTRYP pfn_glVertexArrayBindingDivisor) (GLuint, GLuint, GLuint);
+extern pfn_glVertexArrayBindingDivisor fp_glVertexArrayBindingDivisor;
+typedef void (APIENTRYP pfn_glGetVertexArrayiv) (GLuint, GLenum, GLint*);
+extern pfn_glGetVertexArrayiv fp_glGetVertexArrayiv;
+typedef void (APIENTRYP pfn_glGetVertexArrayIndexediv) (GLuint, GLuint, GLenum, GLint*);
+extern pfn_glGetVertexArrayIndexediv fp_glGetVertexArrayIndexediv;
+typedef void (APIENTRYP pfn_glGetVertexArrayIndexed64iv) (GLuint, GLuint, GLenum, GLint64*);
+extern pfn_glGetVertexArrayIndexed64iv fp_glGetVertexArrayIndexed64iv;
+typedef void (APIENTRYP pfn_glCreateSamplers) (GLsizei, GLuint*);
+extern pfn_glCreateSamplers fp_glCreateSamplers;
+typedef void (APIENTRYP pfn_glCreateProgramPipelines) (GLsizei, GLuint*);
+extern pfn_glCreateProgramPipelines fp_glCreateProgramPipelines;
+typedef void (APIENTRYP pfn_glCreateQueries) (GLenum, GLsizei, GLuint*);
+extern pfn_glCreateQueries fp_glCreateQueries;
+typedef void (APIENTRYP pfn_glMemoryBarrierByRegion) (GLbitfield);
+extern pfn_glMemoryBarrierByRegion fp_glMemoryBarrierByRegion;
+typedef void (APIENTRYP pfn_glGetTextureSubImage) (GLuint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, GLsizei, void*);
+extern pfn_glGetTextureSubImage fp_glGetTextureSubImage;
+typedef void (APIENTRYP pfn_glGetCompressedTextureSubImage) (GLuint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLsizei, void*);
+extern pfn_glGetCompressedTextureSubImage fp_glGetCompressedTextureSubImage;
+typedef GLenum (APIENTRYP pfn_glGetGraphicsResetStatus) ();
+extern pfn_glGetGraphicsResetStatus fp_glGetGraphicsResetStatus;
+typedef void (APIENTRYP pfn_glGetnCompressedTexImage) (GLenum, GLint, GLsizei, void*);
+extern pfn_glGetnCompressedTexImage fp_glGetnCompressedTexImage;
+typedef void (APIENTRYP pfn_glGetnTexImage) (GLenum, GLint, GLenum, GLenum, GLsizei, void*);
+extern pfn_glGetnTexImage fp_glGetnTexImage;
+typedef void (APIENTRYP pfn_glGetnUniformdv) (GLuint, GLint, GLsizei, GLdouble*);
+extern pfn_glGetnUniformdv fp_glGetnUniformdv;
+typedef void (APIENTRYP pfn_glGetnUniformfv) (GLuint, GLint, GLsizei, GLfloat*);
+extern pfn_glGetnUniformfv fp_glGetnUniformfv;
+typedef void (APIENTRYP pfn_glGetnUniformiv) (GLuint, GLint, GLsizei, GLint*);
+extern pfn_glGetnUniformiv fp_glGetnUniformiv;
+typedef void (APIENTRYP pfn_glGetnUniformuiv) (GLuint, GLint, GLsizei, GLuint*);
+extern pfn_glGetnUniformuiv fp_glGetnUniformuiv;
+typedef void (APIENTRYP pfn_glReadnPixels) (GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLsizei, void*);
+extern pfn_glReadnPixels fp_glReadnPixels;
+typedef void (APIENTRYP pfn_glGetnMapdv) (GLenum, GLenum, GLsizei, GLdouble*);
+extern pfn_glGetnMapdv fp_glGetnMapdv;
+typedef void (APIENTRYP pfn_glGetnMapfv) (GLenum, GLenum, GLsizei, GLfloat*);
+extern pfn_glGetnMapfv fp_glGetnMapfv;
+typedef void (APIENTRYP pfn_glGetnMapiv) (GLenum, GLenum, GLsizei, GLint*);
+extern pfn_glGetnMapiv fp_glGetnMapiv;
+typedef void (APIENTRYP pfn_glGetnPixelMapfv) (GLenum, GLsizei, GLfloat*);
+extern pfn_glGetnPixelMapfv fp_glGetnPixelMapfv;
+typedef void (APIENTRYP pfn_glGetnPixelMapuiv) (GLenum, GLsizei, GLuint*);
+extern pfn_glGetnPixelMapuiv fp_glGetnPixelMapuiv;
+typedef void (APIENTRYP pfn_glGetnPixelMapusv) (GLenum, GLsizei, GLushort*);
+extern pfn_glGetnPixelMapusv fp_glGetnPixelMapusv;
+typedef void (APIENTRYP pfn_glGetnPolygonStipple) (GLsizei, GLubyte*);
+extern pfn_glGetnPolygonStipple fp_glGetnPolygonStipple;
+typedef void (APIENTRYP pfn_glGetnColorTable) (GLenum, GLenum, GLenum, GLsizei, void*);
+extern pfn_glGetnColorTable fp_glGetnColorTable;
+typedef void (APIENTRYP pfn_glGetnConvolutionFilter) (GLenum, GLenum, GLenum, GLsizei, void*);
+extern pfn_glGetnConvolutionFilter fp_glGetnConvolutionFilter;
+typedef void (APIENTRYP pfn_glGetnSeparableFilter) (GLenum, GLenum, GLenum, GLsizei, void*, GLsizei, void*, void*);
+extern pfn_glGetnSeparableFilter fp_glGetnSeparableFilter;
+typedef void (APIENTRYP pfn_glGetnHistogram) (GLenum, GLboolean, GLenum, GLenum, GLsizei, void*);
+extern pfn_glGetnHistogram fp_glGetnHistogram;
+typedef void (APIENTRYP pfn_glGetnMinmax) (GLenum, GLboolean, GLenum, GLenum, GLsizei, void*);
+extern pfn_glGetnMinmax fp_glGetnMinmax;
+typedef void (APIENTRYP pfn_glTextureBarrier) ();
+extern pfn_glTextureBarrier fp_glTextureBarrier;
+
+ /* GL_ES_VERSION_2_0 */
+extern GLboolean GLAD_ES_VERSION_2_0;
+#define GL_BLEND_EQUATION                      0x8009
+#define GL_BLEND_COLOR                         0x8005
+#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS   0x8CD9
+
+ /* GL_ES_VERSION_3_0 */
+extern GLboolean GLAD_ES_VERSION_3_0;
+#define GL_COPY_READ_BUFFER_BINDING            0x8F36
+#define GL_COPY_WRITE_BUFFER_BINDING           0x8F37
+#define GL_TRANSFORM_FEEDBACK_PAUSED           0x8E23
+#define GL_TRANSFORM_FEEDBACK_ACTIVE           0x8E24
+
+ /* GL_ES_VERSION_3_1 */
+extern GLboolean GLAD_ES_VERSION_3_1;
+
+ /* GL_KHR_blend_equation_advanced */
+extern GLboolean GLAD_KHR_blend_equation_advanced;
+#define GL_MULTIPLY_KHR                        0x9294
+#define GL_SCREEN_KHR                          0x9295
+#define GL_OVERLAY_KHR                         0x9296
+#define GL_DARKEN_KHR                          0x9297
+#define GL_LIGHTEN_KHR                         0x9298
+#define GL_COLORDODGE_KHR                      0x9299
+#define GL_COLORBURN_KHR                       0x929A
+#define GL_HARDLIGHT_KHR                       0x929B
+#define GL_SOFTLIGHT_KHR                       0x929C
+#define GL_DIFFERENCE_KHR                      0x929E
+#define GL_EXCLUSION_KHR                       0x92A0
+#define GL_HSL_HUE_KHR                         0x92AD
+#define GL_HSL_SATURATION_KHR                  0x92AE
+#define GL_HSL_COLOR_KHR                       0x92AF
+#define GL_HSL_LUMINOSITY_KHR                  0x92B0
+typedef void (APIENTRYP pfn_glBlendBarrierKHR) ();
+extern pfn_glBlendBarrierKHR fp_glBlendBarrierKHR;
+
+ /* GL_KHR_blend_equation_advanced_coherent */
+extern GLboolean GLAD_KHR_blend_equation_advanced_coherent;
+#define GL_BLEND_ADVANCED_COHERENT_KHR         0x9285
+
+ /* GL_KHR_context_flush_control */
+extern GLboolean GLAD_KHR_context_flush_control;
+#define GL_CONTEXT_RELEASE_BEHAVIOR_KHR        0x82FB
+#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR  0x82FC
+
+ /* GL_KHR_debug */
+extern GLboolean GLAD_KHR_debug;
+#define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR        0x8242
+#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR  0x8243
+#define GL_DEBUG_CALLBACK_FUNCTION_KHR         0x8244
+#define GL_DEBUG_CALLBACK_USER_PARAM_KHR       0x8245
+#define GL_DEBUG_SOURCE_API_KHR                0x8246
+#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR      0x8247
+#define GL_DEBUG_SOURCE_SHADER_COMPILER_KHR    0x8248
+#define GL_DEBUG_SOURCE_THIRD_PARTY_KHR        0x8249
+#define GL_DEBUG_SOURCE_APPLICATION_KHR        0x824A
+#define GL_DEBUG_SOURCE_OTHER_KHR              0x824B
+#define GL_DEBUG_TYPE_ERROR_KHR                0x824C
+#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR  0x824D
+#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR   0x824E
+#define GL_DEBUG_TYPE_PORTABILITY_KHR          0x824F
+#define GL_DEBUG_TYPE_PERFORMANCE_KHR          0x8250
+#define GL_DEBUG_TYPE_OTHER_KHR                0x8251
+#define GL_DEBUG_TYPE_MARKER_KHR               0x8268
+#define GL_DEBUG_TYPE_PUSH_GROUP_KHR           0x8269
+#define GL_DEBUG_TYPE_POP_GROUP_KHR            0x826A
+#define GL_DEBUG_SEVERITY_NOTIFICATION_KHR     0x826B
+#define GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR     0x826C
+#define GL_DEBUG_GROUP_STACK_DEPTH_KHR         0x826D
+#define GL_BUFFER_KHR                          0x82E0
+#define GL_SHADER_KHR                          0x82E1
+#define GL_PROGRAM_KHR                         0x82E2
+#define GL_VERTEX_ARRAY_KHR                    0x8074
+#define GL_QUERY_KHR                           0x82E3
+#define GL_SAMPLER_KHR                         0x82E6
+#define GL_MAX_LABEL_LENGTH_KHR                0x82E8
+#define GL_MAX_DEBUG_MESSAGE_LENGTH_KHR        0x9143
+#define GL_MAX_DEBUG_LOGGED_MESSAGES_KHR       0x9144
+#define GL_DEBUG_LOGGED_MESSAGES_KHR           0x9145
+#define GL_DEBUG_SEVERITY_HIGH_KHR             0x9146
+#define GL_DEBUG_SEVERITY_MEDIUM_KHR           0x9147
+#define GL_DEBUG_SEVERITY_LOW_KHR              0x9148
+#define GL_DEBUG_OUTPUT_KHR                    0x92E0
+#define GL_CONTEXT_FLAG_DEBUG_BIT_KHR          0x00000002
+#define GL_STACK_OVERFLOW_KHR                  0x0503
+#define GL_STACK_UNDERFLOW_KHR                 0x0504
+typedef void (APIENTRYP pfn_glDebugMessageControlKHR) (GLenum, GLenum, GLenum, GLsizei, const GLuint*, GLboolean);
+extern pfn_glDebugMessageControlKHR fp_glDebugMessageControlKHR;
+typedef void (APIENTRYP pfn_glDebugMessageInsertKHR) (GLenum, GLenum, GLuint, GLenum, GLsizei, const GLchar*);
+extern pfn_glDebugMessageInsertKHR fp_glDebugMessageInsertKHR;
+typedef void (APIENTRYP pfn_glDebugMessageCallbackKHR) (GLDEBUGPROCKHR, const void*);
+extern pfn_glDebugMessageCallbackKHR fp_glDebugMessageCallbackKHR;
+typedef GLuint (APIENTRYP pfn_glGetDebugMessageLogKHR) (GLuint, GLsizei, GLenum*, GLenum*, GLuint*, GLenum*, GLsizei*, GLchar*);
+extern pfn_glGetDebugMessageLogKHR fp_glGetDebugMessageLogKHR;
+typedef void (APIENTRYP pfn_glPushDebugGroupKHR) (GLenum, GLuint, GLsizei, const GLchar*);
+extern pfn_glPushDebugGroupKHR fp_glPushDebugGroupKHR;
+typedef void (APIENTRYP pfn_glPopDebugGroupKHR) ();
+extern pfn_glPopDebugGroupKHR fp_glPopDebugGroupKHR;
+typedef void (APIENTRYP pfn_glObjectLabelKHR) (GLenum, GLuint, GLsizei, const GLchar*);
+extern pfn_glObjectLabelKHR fp_glObjectLabelKHR;
+typedef void (APIENTRYP pfn_glGetObjectLabelKHR) (GLenum, GLuint, GLsizei, GLsizei*, GLchar*);
+extern pfn_glGetObjectLabelKHR fp_glGetObjectLabelKHR;
+typedef void (APIENTRYP pfn_glObjectPtrLabelKHR) (const void*, GLsizei, const GLchar*);
+extern pfn_glObjectPtrLabelKHR fp_glObjectPtrLabelKHR;
+typedef void (APIENTRYP pfn_glGetObjectPtrLabelKHR) (const void*, GLsizei, GLsizei*, GLchar*);
+extern pfn_glGetObjectPtrLabelKHR fp_glGetObjectPtrLabelKHR;
+typedef void (APIENTRYP pfn_glGetPointervKHR) (GLenum, void**);
+extern pfn_glGetPointervKHR fp_glGetPointervKHR;
+
+ /* GL_KHR_robust_buffer_access_behavior */
+extern GLboolean GLAD_KHR_robust_buffer_access_behavior;
+
+ /* GL_KHR_robustness */
+extern GLboolean GLAD_KHR_robustness;
+#define GL_CONTEXT_ROBUST_ACCESS               0x90F3
+#define GL_CONTEXT_ROBUST_ACCESS_KHR           0x90F3
+#define GL_LOSE_CONTEXT_ON_RESET_KHR           0x8252
+#define GL_GUILTY_CONTEXT_RESET_KHR            0x8253
+#define GL_INNOCENT_CONTEXT_RESET_KHR          0x8254
+#define GL_UNKNOWN_CONTEXT_RESET_KHR           0x8255
+#define GL_RESET_NOTIFICATION_STRATEGY_KHR     0x8256
+#define GL_NO_RESET_NOTIFICATION_KHR           0x8261
+#define GL_CONTEXT_LOST_KHR                    0x0507
+typedef GLenum (APIENTRYP pfn_glGetGraphicsResetStatusKHR) ();
+extern pfn_glGetGraphicsResetStatusKHR fp_glGetGraphicsResetStatusKHR;
+typedef void (APIENTRYP pfn_glReadnPixelsKHR) (GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLsizei, void*);
+extern pfn_glReadnPixelsKHR fp_glReadnPixelsKHR;
+typedef void (APIENTRYP pfn_glGetnUniformfvKHR) (GLuint, GLint, GLsizei, GLfloat*);
+extern pfn_glGetnUniformfvKHR fp_glGetnUniformfvKHR;
+typedef void (APIENTRYP pfn_glGetnUniformivKHR) (GLuint, GLint, GLsizei, GLint*);
+extern pfn_glGetnUniformivKHR fp_glGetnUniformivKHR;
+typedef void (APIENTRYP pfn_glGetnUniformuivKHR) (GLuint, GLint, GLsizei, GLuint*);
+extern pfn_glGetnUniformuivKHR fp_glGetnUniformuivKHR;
+
+ /* GL_KHR_texture_compression_astc_hdr */
+extern GLboolean GLAD_KHR_texture_compression_astc_hdr;
+#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR        0x93B0
+#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR        0x93B1
+#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR        0x93B2
+#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR        0x93B3
+#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR        0x93B4
+#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR        0x93B5
+#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR        0x93B6
+#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR        0x93B7
+#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR       0x93B8
+#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR       0x93B9
+#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR       0x93BA
+#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR      0x93BB
+#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR      0x93BC
+#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR      0x93BD
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR  0x93D0
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR  0x93D1
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR  0x93D2
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR  0x93D3
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR  0x93D4
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR  0x93D5
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR  0x93D6
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR  0x93D7
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR  0x93D8
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR  0x93D9
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR  0x93DA
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR  0x93DB
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR  0x93DC
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR  0x93DD
+
+ /* GL_KHR_texture_compression_astc_ldr */
+extern GLboolean GLAD_KHR_texture_compression_astc_ldr;
+
+ /* GL_ARB_arrays_of_arrays */
+extern GLboolean GLAD_ARB_arrays_of_arrays;
+
+ /* GL_ARB_base_instance */
+extern GLboolean GLAD_ARB_base_instance;
+
+ /* GL_ARB_bindless_texture */
+extern GLboolean GLAD_ARB_bindless_texture;
+#define GL_UNSIGNED_INT64_ARB                  0x140F
+typedef GLuint64 (APIENTRYP pfn_glGetTextureHandleARB) (GLuint);
+extern pfn_glGetTextureHandleARB fp_glGetTextureHandleARB;
+typedef GLuint64 (APIENTRYP pfn_glGetTextureSamplerHandleARB) (GLuint, GLuint);
+extern pfn_glGetTextureSamplerHandleARB fp_glGetTextureSamplerHandleARB;
+typedef void (APIENTRYP pfn_glMakeTextureHandleResidentARB) (GLuint64);
+extern pfn_glMakeTextureHandleResidentARB fp_glMakeTextureHandleResidentARB;
+typedef void (APIENTRYP pfn_glMakeTextureHandleNonResidentARB) (GLuint64);
+extern pfn_glMakeTextureHandleNonResidentARB fp_glMakeTextureHandleNonResidentARB;
+typedef GLuint64 (APIENTRYP pfn_glGetImageHandleARB) (GLuint, GLint, GLboolean, GLint, GLenum);
+extern pfn_glGetImageHandleARB fp_glGetImageHandleARB;
+typedef void (APIENTRYP pfn_glMakeImageHandleResidentARB) (GLuint64, GLenum);
+extern pfn_glMakeImageHandleResidentARB fp_glMakeImageHandleResidentARB;
+typedef void (APIENTRYP pfn_glMakeImageHandleNonResidentARB) (GLuint64);
+extern pfn_glMakeImageHandleNonResidentARB fp_glMakeImageHandleNonResidentARB;
+typedef void (APIENTRYP pfn_glUniformHandleui64ARB) (GLint, GLuint64);
+extern pfn_glUniformHandleui64ARB fp_glUniformHandleui64ARB;
+typedef void (APIENTRYP pfn_glUniformHandleui64vARB) (GLint, GLsizei, const GLuint64*);
+extern pfn_glUniformHandleui64vARB fp_glUniformHandleui64vARB;
+typedef void (APIENTRYP pfn_glProgramUniformHandleui64ARB) (GLuint, GLint, GLuint64);
+extern pfn_glProgramUniformHandleui64ARB fp_glProgramUniformHandleui64ARB;
+typedef void (APIENTRYP pfn_glProgramUniformHandleui64vARB) (GLuint, GLint, GLsizei, const GLuint64*);
+extern pfn_glProgramUniformHandleui64vARB fp_glProgramUniformHandleui64vARB;
+typedef GLboolean (APIENTRYP pfn_glIsTextureHandleResidentARB) (GLuint64);
+extern pfn_glIsTextureHandleResidentARB fp_glIsTextureHandleResidentARB;
+typedef GLboolean (APIENTRYP pfn_glIsImageHandleResidentARB) (GLuint64);
+extern pfn_glIsImageHandleResidentARB fp_glIsImageHandleResidentARB;
+typedef void (APIENTRYP pfn_glVertexAttribL1ui64ARB) (GLuint, GLuint64EXT);
+extern pfn_glVertexAttribL1ui64ARB fp_glVertexAttribL1ui64ARB;
+typedef void (APIENTRYP pfn_glVertexAttribL1ui64vARB) (GLuint, const GLuint64EXT*);
+extern pfn_glVertexAttribL1ui64vARB fp_glVertexAttribL1ui64vARB;
+typedef void (APIENTRYP pfn_glGetVertexAttribLui64vARB) (GLuint, GLenum, GLuint64EXT*);
+extern pfn_glGetVertexAttribLui64vARB fp_glGetVertexAttribLui64vARB;
+
+ /* GL_ARB_blend_func_extended */
+extern GLboolean GLAD_ARB_blend_func_extended;
+
+ /* GL_ARB_buffer_storage */
+extern GLboolean GLAD_ARB_buffer_storage;
+
+ /* GL_ARB_cl_event */
+extern GLboolean GLAD_ARB_cl_event;
+#define GL_SYNC_CL_EVENT_ARB                   0x8240
+#define GL_SYNC_CL_EVENT_COMPLETE_ARB          0x8241
+typedef GLsync (APIENTRYP pfn_glCreateSyncFromCLeventARB) (struct _cl_context*, struct _cl_event*, GLbitfield);
+extern pfn_glCreateSyncFromCLeventARB fp_glCreateSyncFromCLeventARB;
+
+ /* GL_ARB_clear_buffer_object */
+extern GLboolean GLAD_ARB_clear_buffer_object;
+
+ /* GL_ARB_clear_texture */
+extern GLboolean GLAD_ARB_clear_texture;
+
+ /* GL_ARB_clip_control */
+extern GLboolean GLAD_ARB_clip_control;
+
+ /* GL_ARB_color_buffer_float */
+extern GLboolean GLAD_ARB_color_buffer_float;
+#define GL_RGBA_FLOAT_MODE_ARB                 0x8820
+#define GL_CLAMP_VERTEX_COLOR_ARB              0x891A
+#define GL_CLAMP_FRAGMENT_COLOR_ARB            0x891B
+#define GL_CLAMP_READ_COLOR_ARB                0x891C
+#define GL_FIXED_ONLY_ARB                      0x891D
+typedef void (APIENTRYP pfn_glClampColorARB) (GLenum, GLenum);
+extern pfn_glClampColorARB fp_glClampColorARB;
+
+ /* GL_ARB_compatibility */
+extern GLboolean GLAD_ARB_compatibility;
+
+ /* GL_ARB_compressed_texture_pixel_storage */
+extern GLboolean GLAD_ARB_compressed_texture_pixel_storage;
+
+ /* GL_ARB_compute_shader */
+extern GLboolean GLAD_ARB_compute_shader;
+
+ /* GL_ARB_compute_variable_group_size */
+extern GLboolean GLAD_ARB_compute_variable_group_size;
+#define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB  0x9344
+#define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB  0x90EB
+#define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB  0x9345
+#define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB    0x91BF
+typedef void (APIENTRYP pfn_glDispatchComputeGroupSizeARB) (GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);
+extern pfn_glDispatchComputeGroupSizeARB fp_glDispatchComputeGroupSizeARB;
+
+ /* GL_ARB_conditional_render_inverted */
+extern GLboolean GLAD_ARB_conditional_render_inverted;
+
+ /* GL_ARB_conservative_depth */
+extern GLboolean GLAD_ARB_conservative_depth;
+
+ /* GL_ARB_copy_buffer */
+extern GLboolean GLAD_ARB_copy_buffer;
+
+ /* GL_ARB_copy_image */
+extern GLboolean GLAD_ARB_copy_image;
+
+ /* GL_ARB_cull_distance */
+extern GLboolean GLAD_ARB_cull_distance;
+
+ /* GL_ARB_debug_output */
+extern GLboolean GLAD_ARB_debug_output;
+#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB        0x8242
+#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB  0x8243
+#define GL_DEBUG_CALLBACK_FUNCTION_ARB         0x8244
+#define GL_DEBUG_CALLBACK_USER_PARAM_ARB       0x8245
+#define GL_DEBUG_SOURCE_API_ARB                0x8246
+#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB      0x8247
+#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB    0x8248
+#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB        0x8249
+#define GL_DEBUG_SOURCE_APPLICATION_ARB        0x824A
+#define GL_DEBUG_SOURCE_OTHER_ARB              0x824B
+#define GL_DEBUG_TYPE_ERROR_ARB                0x824C
+#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB  0x824D
+#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB   0x824E
+#define GL_DEBUG_TYPE_PORTABILITY_ARB          0x824F
+#define GL_DEBUG_TYPE_PERFORMANCE_ARB          0x8250
+#define GL_DEBUG_TYPE_OTHER_ARB                0x8251
+#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB        0x9143
+#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB       0x9144
+#define GL_DEBUG_LOGGED_MESSAGES_ARB           0x9145
+#define GL_DEBUG_SEVERITY_HIGH_ARB             0x9146
+#define GL_DEBUG_SEVERITY_MEDIUM_ARB           0x9147
+#define GL_DEBUG_SEVERITY_LOW_ARB              0x9148
+typedef void (APIENTRYP pfn_glDebugMessageControlARB) (GLenum, GLenum, GLenum, GLsizei, const GLuint*, GLboolean);
+extern pfn_glDebugMessageControlARB fp_glDebugMessageControlARB;
+typedef void (APIENTRYP pfn_glDebugMessageInsertARB) (GLenum, GLenum, GLuint, GLenum, GLsizei, const GLchar*);
+extern pfn_glDebugMessageInsertARB fp_glDebugMessageInsertARB;
+typedef void (APIENTRYP pfn_glDebugMessageCallbackARB) (GLDEBUGPROCARB, const void*);
+extern pfn_glDebugMessageCallbackARB fp_glDebugMessageCallbackARB;
+typedef GLuint (APIENTRYP pfn_glGetDebugMessageLogARB) (GLuint, GLsizei, GLenum*, GLenum*, GLuint*, GLenum*, GLsizei*, GLchar*);
+extern pfn_glGetDebugMessageLogARB fp_glGetDebugMessageLogARB;
+
+ /* GL_ARB_depth_buffer_float */
+extern GLboolean GLAD_ARB_depth_buffer_float;
+
+ /* GL_ARB_depth_clamp */
+extern GLboolean GLAD_ARB_depth_clamp;
+
+ /* GL_ARB_derivative_control */
+extern GLboolean GLAD_ARB_derivative_control;
+
+ /* GL_ARB_direct_state_access */
+extern GLboolean GLAD_ARB_direct_state_access;
+
+ /* GL_ARB_draw_buffers_blend */
+extern GLboolean GLAD_ARB_draw_buffers_blend;
+typedef void (APIENTRYP pfn_glBlendEquationiARB) (GLuint, GLenum);
+extern pfn_glBlendEquationiARB fp_glBlendEquationiARB;
+typedef void (APIENTRYP pfn_glBlendEquationSeparateiARB) (GLuint, GLenum, GLenum);
+extern pfn_glBlendEquationSeparateiARB fp_glBlendEquationSeparateiARB;
+typedef void (APIENTRYP pfn_glBlendFunciARB) (GLuint, GLenum, GLenum);
+extern pfn_glBlendFunciARB fp_glBlendFunciARB;
+typedef void (APIENTRYP pfn_glBlendFuncSeparateiARB) (GLuint, GLenum, GLenum, GLenum, GLenum);
+extern pfn_glBlendFuncSeparateiARB fp_glBlendFuncSeparateiARB;
+
+ /* GL_ARB_draw_elements_base_vertex */
+extern GLboolean GLAD_ARB_draw_elements_base_vertex;
+
+ /* GL_ARB_draw_indirect */
+extern GLboolean GLAD_ARB_draw_indirect;
+
+ /* GL_ARB_draw_instanced */
+extern GLboolean GLAD_ARB_draw_instanced;
+typedef void (APIENTRYP pfn_glDrawArraysInstancedARB) (GLenum, GLint, GLsizei, GLsizei);
+extern pfn_glDrawArraysInstancedARB fp_glDrawArraysInstancedARB;
+typedef void (APIENTRYP pfn_glDrawElementsInstancedARB) (GLenum, GLsizei, GLenum, const void*, GLsizei);
+extern pfn_glDrawElementsInstancedARB fp_glDrawElementsInstancedARB;
+
+ /* GL_ARB_enhanced_layouts */
+extern GLboolean GLAD_ARB_enhanced_layouts;
+
+ /* GL_ARB_ES2_compatibility */
+extern GLboolean GLAD_ARB_ES2_compatibility;
+
+ /* GL_ARB_ES3_1_compatibility */
+extern GLboolean GLAD_ARB_ES3_1_compatibility;
+
+ /* GL_ARB_ES3_compatibility */
+extern GLboolean GLAD_ARB_ES3_compatibility;
+
+ /* GL_ARB_explicit_attrib_location */
+extern GLboolean GLAD_ARB_explicit_attrib_location;
+
+ /* GL_ARB_explicit_uniform_location */
+extern GLboolean GLAD_ARB_explicit_uniform_location;
+
+ /* GL_ARB_fragment_coord_conventions */
+extern GLboolean GLAD_ARB_fragment_coord_conventions;
+
+ /* GL_ARB_fragment_layer_viewport */
+extern GLboolean GLAD_ARB_fragment_layer_viewport;
+
+ /* GL_ARB_framebuffer_no_attachments */
+extern GLboolean GLAD_ARB_framebuffer_no_attachments;
+
+ /* GL_ARB_framebuffer_object */
+extern GLboolean GLAD_ARB_framebuffer_object;
+
+ /* GL_ARB_framebuffer_sRGB */
+extern GLboolean GLAD_ARB_framebuffer_sRGB;
+
+ /* GL_ARB_geometry_shader4 */
+extern GLboolean GLAD_ARB_geometry_shader4;
+#define GL_LINES_ADJACENCY_ARB                 0x000A
+#define GL_LINE_STRIP_ADJACENCY_ARB            0x000B
+#define GL_TRIANGLES_ADJACENCY_ARB             0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY_ARB        0x000D
+#define GL_PROGRAM_POINT_SIZE_ARB              0x8642
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB  0x8C29
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB  0x8DA7
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB  0x8DA8
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB  0x8DA9
+#define GL_GEOMETRY_SHADER_ARB                 0x8DD9
+#define GL_GEOMETRY_VERTICES_OUT_ARB           0x8DDA
+#define GL_GEOMETRY_INPUT_TYPE_ARB             0x8DDB
+#define GL_GEOMETRY_OUTPUT_TYPE_ARB            0x8DDC
+#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB  0x8DDD
+#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB   0x8DDE
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB  0x8DDF
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB    0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB  0x8DE1
+typedef void (APIENTRYP pfn_glProgramParameteriARB) (GLuint, GLenum, GLint);
+extern pfn_glProgramParameteriARB fp_glProgramParameteriARB;
+typedef void (APIENTRYP pfn_glFramebufferTextureARB) (GLenum, GLenum, GLuint, GLint);
+extern pfn_glFramebufferTextureARB fp_glFramebufferTextureARB;
+typedef void (APIENTRYP pfn_glFramebufferTextureLayerARB) (GLenum, GLenum, GLuint, GLint, GLint);
+extern pfn_glFramebufferTextureLayerARB fp_glFramebufferTextureLayerARB;
+typedef void (APIENTRYP pfn_glFramebufferTextureFaceARB) (GLenum, GLenum, GLuint, GLint, GLenum);
+extern pfn_glFramebufferTextureFaceARB fp_glFramebufferTextureFaceARB;
+
+ /* GL_ARB_get_program_binary */
+extern GLboolean GLAD_ARB_get_program_binary;
+
+ /* GL_ARB_get_texture_sub_image */
+extern GLboolean GLAD_ARB_get_texture_sub_image;
+
+ /* GL_ARB_gpu_shader5 */
+extern GLboolean GLAD_ARB_gpu_shader5;
+
+ /* GL_ARB_gpu_shader_fp64 */
+extern GLboolean GLAD_ARB_gpu_shader_fp64;
+
+ /* GL_ARB_half_float_pixel */
+extern GLboolean GLAD_ARB_half_float_pixel;
+#define GL_HALF_FLOAT_ARB                      0x140B
+
+ /* GL_ARB_half_float_vertex */
+extern GLboolean GLAD_ARB_half_float_vertex;
+
+ /* GL_ARB_indirect_parameters */
+extern GLboolean GLAD_ARB_indirect_parameters;
+#define GL_PARAMETER_BUFFER_ARB                0x80EE
+#define GL_PARAMETER_BUFFER_BINDING_ARB        0x80EF
+typedef void (APIENTRYP pfn_glMultiDrawArraysIndirectCountARB) (GLenum, GLintptr, GLintptr, GLsizei, GLsizei);
+extern pfn_glMultiDrawArraysIndirectCountARB fp_glMultiDrawArraysIndirectCountARB;
+typedef void (APIENTRYP pfn_glMultiDrawElementsIndirectCountARB) (GLenum, GLenum, GLintptr, GLintptr, GLsizei, GLsizei);
+extern pfn_glMultiDrawElementsIndirectCountARB fp_glMultiDrawElementsIndirectCountARB;
+
+ /* GL_ARB_instanced_arrays */
+extern GLboolean GLAD_ARB_instanced_arrays;
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB     0x88FE
+typedef void (APIENTRYP pfn_glVertexAttribDivisorARB) (GLuint, GLuint);
+extern pfn_glVertexAttribDivisorARB fp_glVertexAttribDivisorARB;
+
+ /* GL_ARB_internalformat_query */
+extern GLboolean GLAD_ARB_internalformat_query;
+
+ /* GL_ARB_internalformat_query2 */
+extern GLboolean GLAD_ARB_internalformat_query2;
+#define GL_SRGB_DECODE_ARB                     0x8299
+
+ /* GL_ARB_invalidate_subdata */
+extern GLboolean GLAD_ARB_invalidate_subdata;
+
+ /* GL_ARB_map_buffer_alignment */
+extern GLboolean GLAD_ARB_map_buffer_alignment;
+
+ /* GL_ARB_map_buffer_range */
+extern GLboolean GLAD_ARB_map_buffer_range;
+
+ /* GL_ARB_multi_bind */
+extern GLboolean GLAD_ARB_multi_bind;
+
+ /* GL_ARB_multi_draw_indirect */
+extern GLboolean GLAD_ARB_multi_draw_indirect;
+
+ /* GL_ARB_occlusion_query2 */
+extern GLboolean GLAD_ARB_occlusion_query2;
+
+ /* GL_ARB_pipeline_statistics_query */
+extern GLboolean GLAD_ARB_pipeline_statistics_query;
+#define GL_VERTICES_SUBMITTED_ARB              0x82EE
+#define GL_PRIMITIVES_SUBMITTED_ARB            0x82EF
+#define GL_VERTEX_SHADER_INVOCATIONS_ARB       0x82F0
+#define GL_TESS_CONTROL_SHADER_PATCHES_ARB     0x82F1
+#define GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB  0x82F2
+#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB  0x82F3
+#define GL_FRAGMENT_SHADER_INVOCATIONS_ARB     0x82F4
+#define GL_COMPUTE_SHADER_INVOCATIONS_ARB      0x82F5
+#define GL_CLIPPING_INPUT_PRIMITIVES_ARB       0x82F6
+#define GL_CLIPPING_OUTPUT_PRIMITIVES_ARB      0x82F7
+
+ /* GL_ARB_pixel_buffer_object */
+extern GLboolean GLAD_ARB_pixel_buffer_object;
+#define GL_PIXEL_PACK_BUFFER_ARB               0x88EB
+#define GL_PIXEL_UNPACK_BUFFER_ARB             0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING_ARB       0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB     0x88EF
+
+ /* GL_ARB_program_interface_query */
+extern GLboolean GLAD_ARB_program_interface_query;
+
+ /* GL_ARB_provoking_vertex */
+extern GLboolean GLAD_ARB_provoking_vertex;
+
+ /* GL_ARB_query_buffer_object */
+extern GLboolean GLAD_ARB_query_buffer_object;
+
+ /* GL_ARB_robust_buffer_access_behavior */
+extern GLboolean GLAD_ARB_robust_buffer_access_behavior;
+
+ /* GL_ARB_robustness */
+extern GLboolean GLAD_ARB_robustness;
+#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB  0x00000004
+#define GL_LOSE_CONTEXT_ON_RESET_ARB           0x8252
+#define GL_GUILTY_CONTEXT_RESET_ARB            0x8253
+#define GL_INNOCENT_CONTEXT_RESET_ARB          0x8254
+#define GL_UNKNOWN_CONTEXT_RESET_ARB           0x8255
+#define GL_RESET_NOTIFICATION_STRATEGY_ARB     0x8256
+#define GL_NO_RESET_NOTIFICATION_ARB           0x8261
+typedef GLenum (APIENTRYP pfn_glGetGraphicsResetStatusARB) ();
+extern pfn_glGetGraphicsResetStatusARB fp_glGetGraphicsResetStatusARB;
+typedef void (APIENTRYP pfn_glGetnTexImageARB) (GLenum, GLint, GLenum, GLenum, GLsizei, void*);
+extern pfn_glGetnTexImageARB fp_glGetnTexImageARB;
+typedef void (APIENTRYP pfn_glReadnPixelsARB) (GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLsizei, void*);
+extern pfn_glReadnPixelsARB fp_glReadnPixelsARB;
+typedef void (APIENTRYP pfn_glGetnCompressedTexImageARB) (GLenum, GLint, GLsizei, void*);
+extern pfn_glGetnCompressedTexImageARB fp_glGetnCompressedTexImageARB;
+typedef void (APIENTRYP pfn_glGetnUniformfvARB) (GLuint, GLint, GLsizei, GLfloat*);
+extern pfn_glGetnUniformfvARB fp_glGetnUniformfvARB;
+typedef void (APIENTRYP pfn_glGetnUniformivARB) (GLuint, GLint, GLsizei, GLint*);
+extern pfn_glGetnUniformivARB fp_glGetnUniformivARB;
+typedef void (APIENTRYP pfn_glGetnUniformuivARB) (GLuint, GLint, GLsizei, GLuint*);
+extern pfn_glGetnUniformuivARB fp_glGetnUniformuivARB;
+typedef void (APIENTRYP pfn_glGetnUniformdvARB) (GLuint, GLint, GLsizei, GLdouble*);
+extern pfn_glGetnUniformdvARB fp_glGetnUniformdvARB;
+typedef void (APIENTRYP pfn_glGetnMapdvARB) (GLenum, GLenum, GLsizei, GLdouble*);
+extern pfn_glGetnMapdvARB fp_glGetnMapdvARB;
+typedef void (APIENTRYP pfn_glGetnMapfvARB) (GLenum, GLenum, GLsizei, GLfloat*);
+extern pfn_glGetnMapfvARB fp_glGetnMapfvARB;
+typedef void (APIENTRYP pfn_glGetnMapivARB) (GLenum, GLenum, GLsizei, GLint*);
+extern pfn_glGetnMapivARB fp_glGetnMapivARB;
+typedef void (APIENTRYP pfn_glGetnPixelMapfvARB) (GLenum, GLsizei, GLfloat*);
+extern pfn_glGetnPixelMapfvARB fp_glGetnPixelMapfvARB;
+typedef void (APIENTRYP pfn_glGetnPixelMapuivARB) (GLenum, GLsizei, GLuint*);
+extern pfn_glGetnPixelMapuivARB fp_glGetnPixelMapuivARB;
+typedef void (APIENTRYP pfn_glGetnPixelMapusvARB) (GLenum, GLsizei, GLushort*);
+extern pfn_glGetnPixelMapusvARB fp_glGetnPixelMapusvARB;
+typedef void (APIENTRYP pfn_glGetnPolygonStippleARB) (GLsizei, GLubyte*);
+extern pfn_glGetnPolygonStippleARB fp_glGetnPolygonStippleARB;
+typedef void (APIENTRYP pfn_glGetnColorTableARB) (GLenum, GLenum, GLenum, GLsizei, void*);
+extern pfn_glGetnColorTableARB fp_glGetnColorTableARB;
+typedef void (APIENTRYP pfn_glGetnConvolutionFilterARB) (GLenum, GLenum, GLenum, GLsizei, void*);
+extern pfn_glGetnConvolutionFilterARB fp_glGetnConvolutionFilterARB;
+typedef void (APIENTRYP pfn_glGetnSeparableFilterARB) (GLenum, GLenum, GLenum, GLsizei, void*, GLsizei, void*, void*);
+extern pfn_glGetnSeparableFilterARB fp_glGetnSeparableFilterARB;
+typedef void (APIENTRYP pfn_glGetnHistogramARB) (GLenum, GLboolean, GLenum, GLenum, GLsizei, void*);
+extern pfn_glGetnHistogramARB fp_glGetnHistogramARB;
+typedef void (APIENTRYP pfn_glGetnMinmaxARB) (GLenum, GLboolean, GLenum, GLenum, GLsizei, void*);
+extern pfn_glGetnMinmaxARB fp_glGetnMinmaxARB;
+
+ /* GL_ARB_robustness_isolation */
+extern GLboolean GLAD_ARB_robustness_isolation;
+
+ /* GL_ARB_sample_shading */
+extern GLboolean GLAD_ARB_sample_shading;
+#define GL_SAMPLE_SHADING_ARB                  0x8C36
+#define GL_MIN_SAMPLE_SHADING_VALUE_ARB        0x8C37
+typedef void (APIENTRYP pfn_glMinSampleShadingARB) (GLfloat);
+extern pfn_glMinSampleShadingARB fp_glMinSampleShadingARB;
+
+ /* GL_ARB_sampler_objects */
+extern GLboolean GLAD_ARB_sampler_objects;
+
+ /* GL_ARB_seamless_cube_map */
+extern GLboolean GLAD_ARB_seamless_cube_map;
+
+ /* GL_ARB_seamless_cubemap_per_texture */
+extern GLboolean GLAD_ARB_seamless_cubemap_per_texture;
+
+ /* GL_ARB_separate_shader_objects */
+extern GLboolean GLAD_ARB_separate_shader_objects;
+
+ /* GL_ARB_shader_atomic_counters */
+extern GLboolean GLAD_ARB_shader_atomic_counters;
+
+ /* GL_ARB_shader_bit_encoding */
+extern GLboolean GLAD_ARB_shader_bit_encoding;
+
+ /* GL_ARB_shader_draw_parameters */
+extern GLboolean GLAD_ARB_shader_draw_parameters;
+
+ /* GL_ARB_shader_group_vote */
+extern GLboolean GLAD_ARB_shader_group_vote;
+
+ /* GL_ARB_shader_image_load_store */
+extern GLboolean GLAD_ARB_shader_image_load_store;
+
+ /* GL_ARB_shader_image_size */
+extern GLboolean GLAD_ARB_shader_image_size;
+
+ /* GL_ARB_shader_precision */
+extern GLboolean GLAD_ARB_shader_precision;
+
+ /* GL_ARB_shader_stencil_export */
+extern GLboolean GLAD_ARB_shader_stencil_export;
+
+ /* GL_ARB_shader_storage_buffer_object */
+extern GLboolean GLAD_ARB_shader_storage_buffer_object;
+
+ /* GL_ARB_shader_subroutine */
+extern GLboolean GLAD_ARB_shader_subroutine;
+
+ /* GL_ARB_shader_texture_image_samples */
+extern GLboolean GLAD_ARB_shader_texture_image_samples;
+
+ /* GL_ARB_shader_texture_lod */
+extern GLboolean GLAD_ARB_shader_texture_lod;
+
+ /* GL_ARB_shading_language_420pack */
+extern GLboolean GLAD_ARB_shading_language_420pack;
+
+ /* GL_ARB_shading_language_include */
+extern GLboolean GLAD_ARB_shading_language_include;
+#define GL_SHADER_INCLUDE_ARB                  0x8DAE
+#define GL_NAMED_STRING_LENGTH_ARB             0x8DE9
+#define GL_NAMED_STRING_TYPE_ARB               0x8DEA
+typedef void (APIENTRYP pfn_glNamedStringARB) (GLenum, GLint, const GLchar*, GLint, const GLchar*);
+extern pfn_glNamedStringARB fp_glNamedStringARB;
+typedef void (APIENTRYP pfn_glDeleteNamedStringARB) (GLint, const GLchar*);
+extern pfn_glDeleteNamedStringARB fp_glDeleteNamedStringARB;
+typedef void (APIENTRYP pfn_glCompileShaderIncludeARB) (GLuint, GLsizei, const GLchar**, const GLint*);
+extern pfn_glCompileShaderIncludeARB fp_glCompileShaderIncludeARB;
+typedef GLboolean (APIENTRYP pfn_glIsNamedStringARB) (GLint, const GLchar*);
+extern pfn_glIsNamedStringARB fp_glIsNamedStringARB;
+typedef void (APIENTRYP pfn_glGetNamedStringARB) (GLint, const GLchar*, GLsizei, GLint*, GLchar*);
+extern pfn_glGetNamedStringARB fp_glGetNamedStringARB;
+typedef void (APIENTRYP pfn_glGetNamedStringivARB) (GLint, const GLchar*, GLenum, GLint*);
+extern pfn_glGetNamedStringivARB fp_glGetNamedStringivARB;
+
+ /* GL_ARB_shading_language_packing */
+extern GLboolean GLAD_ARB_shading_language_packing;
+
+ /* GL_ARB_sparse_buffer */
+extern GLboolean GLAD_ARB_sparse_buffer;
+#define GL_SPARSE_STORAGE_BIT_ARB              0x0400
+#define GL_SPARSE_BUFFER_PAGE_SIZE_ARB         0x82F8
+typedef void (APIENTRYP pfn_glBufferPageCommitmentARB) (GLenum, GLintptr, GLsizei, GLboolean);
+extern pfn_glBufferPageCommitmentARB fp_glBufferPageCommitmentARB;
+typedef void (APIENTRYP pfn_glNamedBufferPageCommitmentEXT) (GLuint, GLintptr, GLsizei, GLboolean);
+extern pfn_glNamedBufferPageCommitmentEXT fp_glNamedBufferPageCommitmentEXT;
+typedef void (APIENTRYP pfn_glNamedBufferPageCommitmentARB) (GLuint, GLintptr, GLsizei, GLboolean);
+extern pfn_glNamedBufferPageCommitmentARB fp_glNamedBufferPageCommitmentARB;
+
+ /* GL_ARB_sparse_texture */
+extern GLboolean GLAD_ARB_sparse_texture;
+#define GL_TEXTURE_SPARSE_ARB                  0x91A6
+#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB         0x91A7
+#define GL_MIN_SPARSE_LEVEL_ARB                0x919B
+#define GL_NUM_VIRTUAL_PAGE_SIZES_ARB          0x91A8
+#define GL_VIRTUAL_PAGE_SIZE_X_ARB             0x9195
+#define GL_VIRTUAL_PAGE_SIZE_Y_ARB             0x9196
+#define GL_VIRTUAL_PAGE_SIZE_Z_ARB             0x9197
+#define GL_MAX_SPARSE_TEXTURE_SIZE_ARB         0x9198
+#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB      0x9199
+#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB  0x919A
+#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB  0x91A9
+typedef void (APIENTRYP pfn_glTexPageCommitmentARB) (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLboolean);
+extern pfn_glTexPageCommitmentARB fp_glTexPageCommitmentARB;
+
+ /* GL_ARB_stencil_texturing */
+extern GLboolean GLAD_ARB_stencil_texturing;
+
+ /* GL_ARB_sync */
+extern GLboolean GLAD_ARB_sync;
+
+ /* GL_ARB_tessellation_shader */
+extern GLboolean GLAD_ARB_tessellation_shader;
+
+ /* GL_ARB_texture_barrier */
+extern GLboolean GLAD_ARB_texture_barrier;
+
+ /* GL_ARB_texture_buffer_object */
+extern GLboolean GLAD_ARB_texture_buffer_object;
+#define GL_TEXTURE_BUFFER_ARB                  0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB         0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER_ARB          0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB  0x8C2D
+#define GL_TEXTURE_BUFFER_FORMAT_ARB           0x8C2E
+typedef void (APIENTRYP pfn_glTexBufferARB) (GLenum, GLenum, GLuint);
+extern pfn_glTexBufferARB fp_glTexBufferARB;
+
+ /* GL_ARB_texture_buffer_object_rgb32 */
+extern GLboolean GLAD_ARB_texture_buffer_object_rgb32;
+
+ /* GL_ARB_texture_buffer_range */
+extern GLboolean GLAD_ARB_texture_buffer_range;
+
+ /* GL_ARB_texture_compression_bptc */
+extern GLboolean GLAD_ARB_texture_compression_bptc;
+#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB      0x8E8C
+#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB  0x8E8D
+#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB  0x8E8E
+#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB  0x8E8F
+
+ /* GL_ARB_texture_compression_rgtc */
+extern GLboolean GLAD_ARB_texture_compression_rgtc;
+
+ /* GL_ARB_texture_cube_map_array */
+extern GLboolean GLAD_ARB_texture_cube_map_array;
+#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB          0x9009
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB  0x900A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB    0x900B
+#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB          0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB   0x900D
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB      0x900E
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB  0x900F
+
+ /* GL_ARB_texture_float */
+extern GLboolean GLAD_ARB_texture_float;
+#define GL_TEXTURE_RED_TYPE_ARB                0x8C10
+#define GL_TEXTURE_GREEN_TYPE_ARB              0x8C11
+#define GL_TEXTURE_BLUE_TYPE_ARB               0x8C12
+#define GL_TEXTURE_ALPHA_TYPE_ARB              0x8C13
+#define GL_TEXTURE_LUMINANCE_TYPE_ARB          0x8C14
+#define GL_TEXTURE_INTENSITY_TYPE_ARB          0x8C15
+#define GL_TEXTURE_DEPTH_TYPE_ARB              0x8C16
+#define GL_UNSIGNED_NORMALIZED_ARB             0x8C17
+#define GL_RGBA32F_ARB                         0x8814
+#define GL_RGB32F_ARB                          0x8815
+#define GL_ALPHA32F_ARB                        0x8816
+#define GL_INTENSITY32F_ARB                    0x8817
+#define GL_LUMINANCE32F_ARB                    0x8818
+#define GL_LUMINANCE_ALPHA32F_ARB              0x8819
+#define GL_RGBA16F_ARB                         0x881A
+#define GL_RGB16F_ARB                          0x881B
+#define GL_ALPHA16F_ARB                        0x881C
+#define GL_INTENSITY16F_ARB                    0x881D
+#define GL_LUMINANCE16F_ARB                    0x881E
+#define GL_LUMINANCE_ALPHA16F_ARB              0x881F
+
+ /* GL_ARB_texture_gather */
+extern GLboolean GLAD_ARB_texture_gather;
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB  0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB  0x8E5F
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB  0x8F9F
+
+ /* GL_ARB_texture_mirror_clamp_to_edge */
+extern GLboolean GLAD_ARB_texture_mirror_clamp_to_edge;
+
+ /* GL_ARB_texture_multisample */
+extern GLboolean GLAD_ARB_texture_multisample;
+
+ /* GL_ARB_texture_query_levels */
+extern GLboolean GLAD_ARB_texture_query_levels;
+
+ /* GL_ARB_texture_query_lod */
+extern GLboolean GLAD_ARB_texture_query_lod;
+
+ /* GL_ARB_texture_rectangle */
+extern GLboolean GLAD_ARB_texture_rectangle;
+#define GL_TEXTURE_RECTANGLE_ARB               0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE_ARB       0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE_ARB         0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB      0x84F8
+
+ /* GL_ARB_texture_rg */
+extern GLboolean GLAD_ARB_texture_rg;
+
+ /* GL_ARB_texture_rgb10_a2ui */
+extern GLboolean GLAD_ARB_texture_rgb10_a2ui;
+
+ /* GL_ARB_texture_stencil8 */
+extern GLboolean GLAD_ARB_texture_stencil8;
+
+ /* GL_ARB_texture_storage */
+extern GLboolean GLAD_ARB_texture_storage;
+
+ /* GL_ARB_texture_storage_multisample */
+extern GLboolean GLAD_ARB_texture_storage_multisample;
+
+ /* GL_ARB_texture_swizzle */
+extern GLboolean GLAD_ARB_texture_swizzle;
+
+ /* GL_ARB_texture_view */
+extern GLboolean GLAD_ARB_texture_view;
+
+ /* GL_ARB_timer_query */
+extern GLboolean GLAD_ARB_timer_query;
+
+ /* GL_ARB_transform_feedback2 */
+extern GLboolean GLAD_ARB_transform_feedback2;
+
+ /* GL_ARB_transform_feedback3 */
+extern GLboolean GLAD_ARB_transform_feedback3;
+
+ /* GL_ARB_transform_feedback_instanced */
+extern GLboolean GLAD_ARB_transform_feedback_instanced;
+
+ /* GL_ARB_transform_feedback_overflow_query */
+extern GLboolean GLAD_ARB_transform_feedback_overflow_query;
+#define GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB     0x82EC
+#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB  0x82ED
+
+ /* GL_ARB_uniform_buffer_object */
+extern GLboolean GLAD_ARB_uniform_buffer_object;
+
+ /* GL_ARB_vertex_array_bgra */
+extern GLboolean GLAD_ARB_vertex_array_bgra;
+
+ /* GL_ARB_vertex_array_object */
+extern GLboolean GLAD_ARB_vertex_array_object;
+
+ /* GL_ARB_vertex_attrib_64bit */
+extern GLboolean GLAD_ARB_vertex_attrib_64bit;
+
+ /* GL_ARB_vertex_attrib_binding */
+extern GLboolean GLAD_ARB_vertex_attrib_binding;
+
+ /* GL_ARB_vertex_type_10f_11f_11f_rev */
+extern GLboolean GLAD_ARB_vertex_type_10f_11f_11f_rev;
+
+ /* GL_ARB_vertex_type_2_10_10_10_rev */
+extern GLboolean GLAD_ARB_vertex_type_2_10_10_10_rev;
+
+ /* GL_ARB_viewport_array */
+extern GLboolean GLAD_ARB_viewport_array;
+
+ /* GL_EXT_bgra */
+extern GLboolean GLAD_EXT_bgra;
+#define GL_BGR_EXT                             0x80E0
+#define GL_BGRA_EXT                            0x80E1
+
+ /* GL_EXT_bindable_uniform */
+extern GLboolean GLAD_EXT_bindable_uniform;
+#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT    0x8DE2
+#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT  0x8DE3
+#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT  0x8DE4
+#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT       0x8DED
+#define GL_UNIFORM_BUFFER_EXT                  0x8DEE
+#define GL_UNIFORM_BUFFER_BINDING_EXT          0x8DEF
+typedef void (APIENTRYP pfn_glUniformBufferEXT) (GLuint, GLint, GLuint);
+extern pfn_glUniformBufferEXT fp_glUniformBufferEXT;
+typedef GLint (APIENTRYP pfn_glGetUniformBufferSizeEXT) (GLuint, GLint);
+extern pfn_glGetUniformBufferSizeEXT fp_glGetUniformBufferSizeEXT;
+typedef GLintptr (APIENTRYP pfn_glGetUniformOffsetEXT) (GLuint, GLint);
+extern pfn_glGetUniformOffsetEXT fp_glGetUniformOffsetEXT;
+
+ /* GL_EXT_color_buffer_half_float */
+extern GLboolean GLAD_EXT_color_buffer_half_float;
+#define GL_RGBA16F_EXT                         0x881A
+#define GL_RGB16F_EXT                          0x881B
+#define GL_RG16F_EXT                           0x822F
+#define GL_R16F_EXT                            0x822D
+#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT  0x8211
+#define GL_UNSIGNED_NORMALIZED_EXT             0x8C17
+
+ /* GL_EXT_copy_image */
+extern GLboolean GLAD_EXT_copy_image;
+typedef void (APIENTRYP pfn_glCopyImageSubDataEXT) (GLuint, GLenum, GLint, GLint, GLint, GLint, GLuint, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei);
+extern pfn_glCopyImageSubDataEXT fp_glCopyImageSubDataEXT;
+
+ /* GL_EXT_debug_label */
+extern GLboolean GLAD_EXT_debug_label;
+#define GL_PROGRAM_PIPELINE_OBJECT_EXT         0x8A4F
+#define GL_PROGRAM_OBJECT_EXT                  0x8B40
+#define GL_SHADER_OBJECT_EXT                   0x8B48
+#define GL_BUFFER_OBJECT_EXT                   0x9151
+#define GL_QUERY_OBJECT_EXT                    0x9153
+#define GL_VERTEX_ARRAY_OBJECT_EXT             0x9154
+typedef void (APIENTRYP pfn_glLabelObjectEXT) (GLenum, GLuint, GLsizei, const GLchar*);
+extern pfn_glLabelObjectEXT fp_glLabelObjectEXT;
+typedef void (APIENTRYP pfn_glGetObjectLabelEXT) (GLenum, GLuint, GLsizei, GLsizei*, GLchar*);
+extern pfn_glGetObjectLabelEXT fp_glGetObjectLabelEXT;
+
+ /* GL_EXT_debug_marker */
+extern GLboolean GLAD_EXT_debug_marker;
+typedef void (APIENTRYP pfn_glInsertEventMarkerEXT) (GLsizei, const GLchar*);
+extern pfn_glInsertEventMarkerEXT fp_glInsertEventMarkerEXT;
+typedef void (APIENTRYP pfn_glPushGroupMarkerEXT) (GLsizei, const GLchar*);
+extern pfn_glPushGroupMarkerEXT fp_glPushGroupMarkerEXT;
+typedef void (APIENTRYP pfn_glPopGroupMarkerEXT) ();
+extern pfn_glPopGroupMarkerEXT fp_glPopGroupMarkerEXT;
+
+ /* GL_EXT_direct_state_access */
+extern GLboolean GLAD_EXT_direct_state_access;
+#define GL_PROGRAM_MATRIX_EXT                  0x8E2D
+#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT        0x8E2E
+#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT      0x8E2F
+typedef void (APIENTRYP pfn_glMatrixLoadfEXT) (GLenum, const GLfloat*);
+extern pfn_glMatrixLoadfEXT fp_glMatrixLoadfEXT;
+typedef void (APIENTRYP pfn_glMatrixLoaddEXT) (GLenum, const GLdouble*);
+extern pfn_glMatrixLoaddEXT fp_glMatrixLoaddEXT;
+typedef void (APIENTRYP pfn_glMatrixMultfEXT) (GLenum, const GLfloat*);
+extern pfn_glMatrixMultfEXT fp_glMatrixMultfEXT;
+typedef void (APIENTRYP pfn_glMatrixMultdEXT) (GLenum, const GLdouble*);
+extern pfn_glMatrixMultdEXT fp_glMatrixMultdEXT;
+typedef void (APIENTRYP pfn_glMatrixLoadIdentityEXT) (GLenum);
+extern pfn_glMatrixLoadIdentityEXT fp_glMatrixLoadIdentityEXT;
+typedef void (APIENTRYP pfn_glMatrixRotatefEXT) (GLenum, GLfloat, GLfloat, GLfloat, GLfloat);
+extern pfn_glMatrixRotatefEXT fp_glMatrixRotatefEXT;
+typedef void (APIENTRYP pfn_glMatrixRotatedEXT) (GLenum, GLdouble, GLdouble, GLdouble, GLdouble);
+extern pfn_glMatrixRotatedEXT fp_glMatrixRotatedEXT;
+typedef void (APIENTRYP pfn_glMatrixScalefEXT) (GLenum, GLfloat, GLfloat, GLfloat);
+extern pfn_glMatrixScalefEXT fp_glMatrixScalefEXT;
+typedef void (APIENTRYP pfn_glMatrixScaledEXT) (GLenum, GLdouble, GLdouble, GLdouble);
+extern pfn_glMatrixScaledEXT fp_glMatrixScaledEXT;
+typedef void (APIENTRYP pfn_glMatrixTranslatefEXT) (GLenum, GLfloat, GLfloat, GLfloat);
+extern pfn_glMatrixTranslatefEXT fp_glMatrixTranslatefEXT;
+typedef void (APIENTRYP pfn_glMatrixTranslatedEXT) (GLenum, GLdouble, GLdouble, GLdouble);
+extern pfn_glMatrixTranslatedEXT fp_glMatrixTranslatedEXT;
+typedef void (APIENTRYP pfn_glMatrixFrustumEXT) (GLenum, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble);
+extern pfn_glMatrixFrustumEXT fp_glMatrixFrustumEXT;
+typedef void (APIENTRYP pfn_glMatrixOrthoEXT) (GLenum, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble);
+extern pfn_glMatrixOrthoEXT fp_glMatrixOrthoEXT;
+typedef void (APIENTRYP pfn_glMatrixPopEXT) (GLenum);
+extern pfn_glMatrixPopEXT fp_glMatrixPopEXT;
+typedef void (APIENTRYP pfn_glMatrixPushEXT) (GLenum);
+extern pfn_glMatrixPushEXT fp_glMatrixPushEXT;
+typedef void (APIENTRYP pfn_glClientAttribDefaultEXT) (GLbitfield);
+extern pfn_glClientAttribDefaultEXT fp_glClientAttribDefaultEXT;
+typedef void (APIENTRYP pfn_glPushClientAttribDefaultEXT) (GLbitfield);
+extern pfn_glPushClientAttribDefaultEXT fp_glPushClientAttribDefaultEXT;
+typedef void (APIENTRYP pfn_glTextureParameterfEXT) (GLuint, GLenum, GLenum, GLfloat);
+extern pfn_glTextureParameterfEXT fp_glTextureParameterfEXT;
+typedef void (APIENTRYP pfn_glTextureParameterfvEXT) (GLuint, GLenum, GLenum, const GLfloat*);
+extern pfn_glTextureParameterfvEXT fp_glTextureParameterfvEXT;
+typedef void (APIENTRYP pfn_glTextureParameteriEXT) (GLuint, GLenum, GLenum, GLint);
+extern pfn_glTextureParameteriEXT fp_glTextureParameteriEXT;
+typedef void (APIENTRYP pfn_glTextureParameterivEXT) (GLuint, GLenum, GLenum, const GLint*);
+extern pfn_glTextureParameterivEXT fp_glTextureParameterivEXT;
+typedef void (APIENTRYP pfn_glTextureImage1DEXT) (GLuint, GLenum, GLint, GLint, GLsizei, GLint, GLenum, GLenum, const void*);
+extern pfn_glTextureImage1DEXT fp_glTextureImage1DEXT;
+typedef void (APIENTRYP pfn_glTextureImage2DEXT) (GLuint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const void*);
+extern pfn_glTextureImage2DEXT fp_glTextureImage2DEXT;
+typedef void (APIENTRYP pfn_glTextureSubImage1DEXT) (GLuint, GLenum, GLint, GLint, GLsizei, GLenum, GLenum, const void*);
+extern pfn_glTextureSubImage1DEXT fp_glTextureSubImage1DEXT;
+typedef void (APIENTRYP pfn_glTextureSubImage2DEXT) (GLuint, GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const void*);
+extern pfn_glTextureSubImage2DEXT fp_glTextureSubImage2DEXT;
+typedef void (APIENTRYP pfn_glCopyTextureImage1DEXT) (GLuint, GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint);
+extern pfn_glCopyTextureImage1DEXT fp_glCopyTextureImage1DEXT;
+typedef void (APIENTRYP pfn_glCopyTextureImage2DEXT) (GLuint, GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint);
+extern pfn_glCopyTextureImage2DEXT fp_glCopyTextureImage2DEXT;
+typedef void (APIENTRYP pfn_glCopyTextureSubImage1DEXT) (GLuint, GLenum, GLint, GLint, GLint, GLint, GLsizei);
+extern pfn_glCopyTextureSubImage1DEXT fp_glCopyTextureSubImage1DEXT;
+typedef void (APIENTRYP pfn_glCopyTextureSubImage2DEXT) (GLuint, GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+extern pfn_glCopyTextureSubImage2DEXT fp_glCopyTextureSubImage2DEXT;
+typedef void (APIENTRYP pfn_glGetTextureImageEXT) (GLuint, GLenum, GLint, GLenum, GLenum, void*);
+extern pfn_glGetTextureImageEXT fp_glGetTextureImageEXT;
+typedef void (APIENTRYP pfn_glGetTextureParameterfvEXT) (GLuint, GLenum, GLenum, GLfloat*);
+extern pfn_glGetTextureParameterfvEXT fp_glGetTextureParameterfvEXT;
+typedef void (APIENTRYP pfn_glGetTextureParameterivEXT) (GLuint, GLenum, GLenum, GLint*);
+extern pfn_glGetTextureParameterivEXT fp_glGetTextureParameterivEXT;
+typedef void (APIENTRYP pfn_glGetTextureLevelParameterfvEXT) (GLuint, GLenum, GLint, GLenum, GLfloat*);
+extern pfn_glGetTextureLevelParameterfvEXT fp_glGetTextureLevelParameterfvEXT;
+typedef void (APIENTRYP pfn_glGetTextureLevelParameterivEXT) (GLuint, GLenum, GLint, GLenum, GLint*);
+extern pfn_glGetTextureLevelParameterivEXT fp_glGetTextureLevelParameterivEXT;
+typedef void (APIENTRYP pfn_glTextureImage3DEXT) (GLuint, GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const void*);
+extern pfn_glTextureImage3DEXT fp_glTextureImage3DEXT;
+typedef void (APIENTRYP pfn_glTextureSubImage3DEXT) (GLuint, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const void*);
+extern pfn_glTextureSubImage3DEXT fp_glTextureSubImage3DEXT;
+typedef void (APIENTRYP pfn_glCopyTextureSubImage3DEXT) (GLuint, GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+extern pfn_glCopyTextureSubImage3DEXT fp_glCopyTextureSubImage3DEXT;
+typedef void (APIENTRYP pfn_glBindMultiTextureEXT) (GLenum, GLenum, GLuint);
+extern pfn_glBindMultiTextureEXT fp_glBindMultiTextureEXT;
+typedef void (APIENTRYP pfn_glMultiTexCoordPointerEXT) (GLenum, GLint, GLenum, GLsizei, const void*);
+extern pfn_glMultiTexCoordPointerEXT fp_glMultiTexCoordPointerEXT;
+typedef void (APIENTRYP pfn_glMultiTexEnvfEXT) (GLenum, GLenum, GLenum, GLfloat);
+extern pfn_glMultiTexEnvfEXT fp_glMultiTexEnvfEXT;
+typedef void (APIENTRYP pfn_glMultiTexEnvfvEXT) (GLenum, GLenum, GLenum, const GLfloat*);
+extern pfn_glMultiTexEnvfvEXT fp_glMultiTexEnvfvEXT;
+typedef void (APIENTRYP pfn_glMultiTexEnviEXT) (GLenum, GLenum, GLenum, GLint);
+extern pfn_glMultiTexEnviEXT fp_glMultiTexEnviEXT;
+typedef void (APIENTRYP pfn_glMultiTexEnvivEXT) (GLenum, GLenum, GLenum, const GLint*);
+extern pfn_glMultiTexEnvivEXT fp_glMultiTexEnvivEXT;
+typedef void (APIENTRYP pfn_glMultiTexGendEXT) (GLenum, GLenum, GLenum, GLdouble);
+extern pfn_glMultiTexGendEXT fp_glMultiTexGendEXT;
+typedef void (APIENTRYP pfn_glMultiTexGendvEXT) (GLenum, GLenum, GLenum, const GLdouble*);
+extern pfn_glMultiTexGendvEXT fp_glMultiTexGendvEXT;
+typedef void (APIENTRYP pfn_glMultiTexGenfEXT) (GLenum, GLenum, GLenum, GLfloat);
+extern pfn_glMultiTexGenfEXT fp_glMultiTexGenfEXT;
+typedef void (APIENTRYP pfn_glMultiTexGenfvEXT) (GLenum, GLenum, GLenum, const GLfloat*);
+extern pfn_glMultiTexGenfvEXT fp_glMultiTexGenfvEXT;
+typedef void (APIENTRYP pfn_glMultiTexGeniEXT) (GLenum, GLenum, GLenum, GLint);
+extern pfn_glMultiTexGeniEXT fp_glMultiTexGeniEXT;
+typedef void (APIENTRYP pfn_glMultiTexGenivEXT) (GLenum, GLenum, GLenum, const GLint*);
+extern pfn_glMultiTexGenivEXT fp_glMultiTexGenivEXT;
+typedef void (APIENTRYP pfn_glGetMultiTexEnvfvEXT) (GLenum, GLenum, GLenum, GLfloat*);
+extern pfn_glGetMultiTexEnvfvEXT fp_glGetMultiTexEnvfvEXT;
+typedef void (APIENTRYP pfn_glGetMultiTexEnvivEXT) (GLenum, GLenum, GLenum, GLint*);
+extern pfn_glGetMultiTexEnvivEXT fp_glGetMultiTexEnvivEXT;
+typedef void (APIENTRYP pfn_glGetMultiTexGendvEXT) (GLenum, GLenum, GLenum, GLdouble*);
+extern pfn_glGetMultiTexGendvEXT fp_glGetMultiTexGendvEXT;
+typedef void (APIENTRYP pfn_glGetMultiTexGenfvEXT) (GLenum, GLenum, GLenum, GLfloat*);
+extern pfn_glGetMultiTexGenfvEXT fp_glGetMultiTexGenfvEXT;
+typedef void (APIENTRYP pfn_glGetMultiTexGenivEXT) (GLenum, GLenum, GLenum, GLint*);
+extern pfn_glGetMultiTexGenivEXT fp_glGetMultiTexGenivEXT;
+typedef void (APIENTRYP pfn_glMultiTexParameteriEXT) (GLenum, GLenum, GLenum, GLint);
+extern pfn_glMultiTexParameteriEXT fp_glMultiTexParameteriEXT;
+typedef void (APIENTRYP pfn_glMultiTexParameterivEXT) (GLenum, GLenum, GLenum, const GLint*);
+extern pfn_glMultiTexParameterivEXT fp_glMultiTexParameterivEXT;
+typedef void (APIENTRYP pfn_glMultiTexParameterfEXT) (GLenum, GLenum, GLenum, GLfloat);
+extern pfn_glMultiTexParameterfEXT fp_glMultiTexParameterfEXT;
+typedef void (APIENTRYP pfn_glMultiTexParameterfvEXT) (GLenum, GLenum, GLenum, const GLfloat*);
+extern pfn_glMultiTexParameterfvEXT fp_glMultiTexParameterfvEXT;
+typedef void (APIENTRYP pfn_glMultiTexImage1DEXT) (GLenum, GLenum, GLint, GLint, GLsizei, GLint, GLenum, GLenum, const void*);
+extern pfn_glMultiTexImage1DEXT fp_glMultiTexImage1DEXT;
+typedef void (APIENTRYP pfn_glMultiTexImage2DEXT) (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const void*);
+extern pfn_glMultiTexImage2DEXT fp_glMultiTexImage2DEXT;
+typedef void (APIENTRYP pfn_glMultiTexSubImage1DEXT) (GLenum, GLenum, GLint, GLint, GLsizei, GLenum, GLenum, const void*);
+extern pfn_glMultiTexSubImage1DEXT fp_glMultiTexSubImage1DEXT;
+typedef void (APIENTRYP pfn_glMultiTexSubImage2DEXT) (GLenum, GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const void*);
+extern pfn_glMultiTexSubImage2DEXT fp_glMultiTexSubImage2DEXT;
+typedef void (APIENTRYP pfn_glCopyMultiTexImage1DEXT) (GLenum, GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint);
+extern pfn_glCopyMultiTexImage1DEXT fp_glCopyMultiTexImage1DEXT;
+typedef void (APIENTRYP pfn_glCopyMultiTexImage2DEXT) (GLenum, GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint);
+extern pfn_glCopyMultiTexImage2DEXT fp_glCopyMultiTexImage2DEXT;
+typedef void (APIENTRYP pfn_glCopyMultiTexSubImage1DEXT) (GLenum, GLenum, GLint, GLint, GLint, GLint, GLsizei);
+extern pfn_glCopyMultiTexSubImage1DEXT fp_glCopyMultiTexSubImage1DEXT;
+typedef void (APIENTRYP pfn_glCopyMultiTexSubImage2DEXT) (GLenum, GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+extern pfn_glCopyMultiTexSubImage2DEXT fp_glCopyMultiTexSubImage2DEXT;
+typedef void (APIENTRYP pfn_glGetMultiTexImageEXT) (GLenum, GLenum, GLint, GLenum, GLenum, void*);
+extern pfn_glGetMultiTexImageEXT fp_glGetMultiTexImageEXT;
+typedef void (APIENTRYP pfn_glGetMultiTexParameterfvEXT) (GLenum, GLenum, GLenum, GLfloat*);
+extern pfn_glGetMultiTexParameterfvEXT fp_glGetMultiTexParameterfvEXT;
+typedef void (APIENTRYP pfn_glGetMultiTexParameterivEXT) (GLenum, GLenum, GLenum, GLint*);
+extern pfn_glGetMultiTexParameterivEXT fp_glGetMultiTexParameterivEXT;
+typedef void (APIENTRYP pfn_glGetMultiTexLevelParameterfvEXT) (GLenum, GLenum, GLint, GLenum, GLfloat*);
+extern pfn_glGetMultiTexLevelParameterfvEXT fp_glGetMultiTexLevelParameterfvEXT;
+typedef void (APIENTRYP pfn_glGetMultiTexLevelParameterivEXT) (GLenum, GLenum, GLint, GLenum, GLint*);
+extern pfn_glGetMultiTexLevelParameterivEXT fp_glGetMultiTexLevelParameterivEXT;
+typedef void (APIENTRYP pfn_glMultiTexImage3DEXT) (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const void*);
+extern pfn_glMultiTexImage3DEXT fp_glMultiTexImage3DEXT;
+typedef void (APIENTRYP pfn_glMultiTexSubImage3DEXT) (GLenum, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const void*);
+extern pfn_glMultiTexSubImage3DEXT fp_glMultiTexSubImage3DEXT;
+typedef void (APIENTRYP pfn_glCopyMultiTexSubImage3DEXT) (GLenum, GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+extern pfn_glCopyMultiTexSubImage3DEXT fp_glCopyMultiTexSubImage3DEXT;
+typedef void (APIENTRYP pfn_glEnableClientStateIndexedEXT) (GLenum, GLuint);
+extern pfn_glEnableClientStateIndexedEXT fp_glEnableClientStateIndexedEXT;
+typedef void (APIENTRYP pfn_glDisableClientStateIndexedEXT) (GLenum, GLuint);
+extern pfn_glDisableClientStateIndexedEXT fp_glDisableClientStateIndexedEXT;
+typedef void (APIENTRYP pfn_glGetFloatIndexedvEXT) (GLenum, GLuint, GLfloat*);
+extern pfn_glGetFloatIndexedvEXT fp_glGetFloatIndexedvEXT;
+typedef void (APIENTRYP pfn_glGetDoubleIndexedvEXT) (GLenum, GLuint, GLdouble*);
+extern pfn_glGetDoubleIndexedvEXT fp_glGetDoubleIndexedvEXT;
+typedef void (APIENTRYP pfn_glGetPointerIndexedvEXT) (GLenum, GLuint, void**);
+extern pfn_glGetPointerIndexedvEXT fp_glGetPointerIndexedvEXT;
+typedef void (APIENTRYP pfn_glEnableIndexedEXT) (GLenum, GLuint);
+extern pfn_glEnableIndexedEXT fp_glEnableIndexedEXT;
+typedef void (APIENTRYP pfn_glDisableIndexedEXT) (GLenum, GLuint);
+extern pfn_glDisableIndexedEXT fp_glDisableIndexedEXT;
+typedef GLboolean (APIENTRYP pfn_glIsEnabledIndexedEXT) (GLenum, GLuint);
+extern pfn_glIsEnabledIndexedEXT fp_glIsEnabledIndexedEXT;
+typedef void (APIENTRYP pfn_glGetIntegerIndexedvEXT) (GLenum, GLuint, GLint*);
+extern pfn_glGetIntegerIndexedvEXT fp_glGetIntegerIndexedvEXT;
+typedef void (APIENTRYP pfn_glGetBooleanIndexedvEXT) (GLenum, GLuint, GLboolean*);
+extern pfn_glGetBooleanIndexedvEXT fp_glGetBooleanIndexedvEXT;
+typedef void (APIENTRYP pfn_glCompressedTextureImage3DEXT) (GLuint, GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const void*);
+extern pfn_glCompressedTextureImage3DEXT fp_glCompressedTextureImage3DEXT;
+typedef void (APIENTRYP pfn_glCompressedTextureImage2DEXT) (GLuint, GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const void*);
+extern pfn_glCompressedTextureImage2DEXT fp_glCompressedTextureImage2DEXT;
+typedef void (APIENTRYP pfn_glCompressedTextureImage1DEXT) (GLuint, GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const void*);
+extern pfn_glCompressedTextureImage1DEXT fp_glCompressedTextureImage1DEXT;
+typedef void (APIENTRYP pfn_glCompressedTextureSubImage3DEXT) (GLuint, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const void*);
+extern pfn_glCompressedTextureSubImage3DEXT fp_glCompressedTextureSubImage3DEXT;
+typedef void (APIENTRYP pfn_glCompressedTextureSubImage2DEXT) (GLuint, GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const void*);
+extern pfn_glCompressedTextureSubImage2DEXT fp_glCompressedTextureSubImage2DEXT;
+typedef void (APIENTRYP pfn_glCompressedTextureSubImage1DEXT) (GLuint, GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const void*);
+extern pfn_glCompressedTextureSubImage1DEXT fp_glCompressedTextureSubImage1DEXT;
+typedef void (APIENTRYP pfn_glGetCompressedTextureImageEXT) (GLuint, GLenum, GLint, void*);
+extern pfn_glGetCompressedTextureImageEXT fp_glGetCompressedTextureImageEXT;
+typedef void (APIENTRYP pfn_glCompressedMultiTexImage3DEXT) (GLenum, GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const void*);
+extern pfn_glCompressedMultiTexImage3DEXT fp_glCompressedMultiTexImage3DEXT;
+typedef void (APIENTRYP pfn_glCompressedMultiTexImage2DEXT) (GLenum, GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const void*);
+extern pfn_glCompressedMultiTexImage2DEXT fp_glCompressedMultiTexImage2DEXT;
+typedef void (APIENTRYP pfn_glCompressedMultiTexImage1DEXT) (GLenum, GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const void*);
+extern pfn_glCompressedMultiTexImage1DEXT fp_glCompressedMultiTexImage1DEXT;
+typedef void (APIENTRYP pfn_glCompressedMultiTexSubImage3DEXT) (GLenum, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const void*);
+extern pfn_glCompressedMultiTexSubImage3DEXT fp_glCompressedMultiTexSubImage3DEXT;
+typedef void (APIENTRYP pfn_glCompressedMultiTexSubImage2DEXT) (GLenum, GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const void*);
+extern pfn_glCompressedMultiTexSubImage2DEXT fp_glCompressedMultiTexSubImage2DEXT;
+typedef void (APIENTRYP pfn_glCompressedMultiTexSubImage1DEXT) (GLenum, GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const void*);
+extern pfn_glCompressedMultiTexSubImage1DEXT fp_glCompressedMultiTexSubImage1DEXT;
+typedef void (APIENTRYP pfn_glGetCompressedMultiTexImageEXT) (GLenum, GLenum, GLint, void*);
+extern pfn_glGetCompressedMultiTexImageEXT fp_glGetCompressedMultiTexImageEXT;
+typedef void (APIENTRYP pfn_glMatrixLoadTransposefEXT) (GLenum, const GLfloat*);
+extern pfn_glMatrixLoadTransposefEXT fp_glMatrixLoadTransposefEXT;
+typedef void (APIENTRYP pfn_glMatrixLoadTransposedEXT) (GLenum, const GLdouble*);
+extern pfn_glMatrixLoadTransposedEXT fp_glMatrixLoadTransposedEXT;
+typedef void (APIENTRYP pfn_glMatrixMultTransposefEXT) (GLenum, const GLfloat*);
+extern pfn_glMatrixMultTransposefEXT fp_glMatrixMultTransposefEXT;
+typedef void (APIENTRYP pfn_glMatrixMultTransposedEXT) (GLenum, const GLdouble*);
+extern pfn_glMatrixMultTransposedEXT fp_glMatrixMultTransposedEXT;
+typedef void (APIENTRYP pfn_glNamedBufferDataEXT) (GLuint, GLsizeiptr, const void*, GLenum);
+extern pfn_glNamedBufferDataEXT fp_glNamedBufferDataEXT;
+typedef void (APIENTRYP pfn_glNamedBufferSubDataEXT) (GLuint, GLintptr, GLsizeiptr, const void*);
+extern pfn_glNamedBufferSubDataEXT fp_glNamedBufferSubDataEXT;
+typedef void* (APIENTRYP pfn_glMapNamedBufferEXT) (GLuint, GLenum);
+extern pfn_glMapNamedBufferEXT fp_glMapNamedBufferEXT;
+typedef GLboolean (APIENTRYP pfn_glUnmapNamedBufferEXT) (GLuint);
+extern pfn_glUnmapNamedBufferEXT fp_glUnmapNamedBufferEXT;
+typedef void (APIENTRYP pfn_glGetNamedBufferParameterivEXT) (GLuint, GLenum, GLint*);
+extern pfn_glGetNamedBufferParameterivEXT fp_glGetNamedBufferParameterivEXT;
+typedef void (APIENTRYP pfn_glGetNamedBufferPointervEXT) (GLuint, GLenum, void**);
+extern pfn_glGetNamedBufferPointervEXT fp_glGetNamedBufferPointervEXT;
+typedef void (APIENTRYP pfn_glGetNamedBufferSubDataEXT) (GLuint, GLintptr, GLsizeiptr, void*);
+extern pfn_glGetNamedBufferSubDataEXT fp_glGetNamedBufferSubDataEXT;
+typedef void (APIENTRYP pfn_glProgramUniform1fEXT) (GLuint, GLint, GLfloat);
+extern pfn_glProgramUniform1fEXT fp_glProgramUniform1fEXT;
+typedef void (APIENTRYP pfn_glProgramUniform2fEXT) (GLuint, GLint, GLfloat, GLfloat);
+extern pfn_glProgramUniform2fEXT fp_glProgramUniform2fEXT;
+typedef void (APIENTRYP pfn_glProgramUniform3fEXT) (GLuint, GLint, GLfloat, GLfloat, GLfloat);
+extern pfn_glProgramUniform3fEXT fp_glProgramUniform3fEXT;
+typedef void (APIENTRYP pfn_glProgramUniform4fEXT) (GLuint, GLint, GLfloat, GLfloat, GLfloat, GLfloat);
+extern pfn_glProgramUniform4fEXT fp_glProgramUniform4fEXT;
+typedef void (APIENTRYP pfn_glProgramUniform1iEXT) (GLuint, GLint, GLint);
+extern pfn_glProgramUniform1iEXT fp_glProgramUniform1iEXT;
+typedef void (APIENTRYP pfn_glProgramUniform2iEXT) (GLuint, GLint, GLint, GLint);
+extern pfn_glProgramUniform2iEXT fp_glProgramUniform2iEXT;
+typedef void (APIENTRYP pfn_glProgramUniform3iEXT) (GLuint, GLint, GLint, GLint, GLint);
+extern pfn_glProgramUniform3iEXT fp_glProgramUniform3iEXT;
+typedef void (APIENTRYP pfn_glProgramUniform4iEXT) (GLuint, GLint, GLint, GLint, GLint, GLint);
+extern pfn_glProgramUniform4iEXT fp_glProgramUniform4iEXT;
+typedef void (APIENTRYP pfn_glProgramUniform1fvEXT) (GLuint, GLint, GLsizei, const GLfloat*);
+extern pfn_glProgramUniform1fvEXT fp_glProgramUniform1fvEXT;
+typedef void (APIENTRYP pfn_glProgramUniform2fvEXT) (GLuint, GLint, GLsizei, const GLfloat*);
+extern pfn_glProgramUniform2fvEXT fp_glProgramUniform2fvEXT;
+typedef void (APIENTRYP pfn_glProgramUniform3fvEXT) (GLuint, GLint, GLsizei, const GLfloat*);
+extern pfn_glProgramUniform3fvEXT fp_glProgramUniform3fvEXT;
+typedef void (APIENTRYP pfn_glProgramUniform4fvEXT) (GLuint, GLint, GLsizei, const GLfloat*);
+extern pfn_glProgramUniform4fvEXT fp_glProgramUniform4fvEXT;
+typedef void (APIENTRYP pfn_glProgramUniform1ivEXT) (GLuint, GLint, GLsizei, const GLint*);
+extern pfn_glProgramUniform1ivEXT fp_glProgramUniform1ivEXT;
+typedef void (APIENTRYP pfn_glProgramUniform2ivEXT) (GLuint, GLint, GLsizei, const GLint*);
+extern pfn_glProgramUniform2ivEXT fp_glProgramUniform2ivEXT;
+typedef void (APIENTRYP pfn_glProgramUniform3ivEXT) (GLuint, GLint, GLsizei, const GLint*);
+extern pfn_glProgramUniform3ivEXT fp_glProgramUniform3ivEXT;
+typedef void (APIENTRYP pfn_glProgramUniform4ivEXT) (GLuint, GLint, GLsizei, const GLint*);
+extern pfn_glProgramUniform4ivEXT fp_glProgramUniform4ivEXT;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix2fvEXT) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glProgramUniformMatrix2fvEXT fp_glProgramUniformMatrix2fvEXT;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix3fvEXT) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glProgramUniformMatrix3fvEXT fp_glProgramUniformMatrix3fvEXT;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix4fvEXT) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glProgramUniformMatrix4fvEXT fp_glProgramUniformMatrix4fvEXT;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix2x3fvEXT) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glProgramUniformMatrix2x3fvEXT fp_glProgramUniformMatrix2x3fvEXT;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix3x2fvEXT) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glProgramUniformMatrix3x2fvEXT fp_glProgramUniformMatrix3x2fvEXT;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix2x4fvEXT) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glProgramUniformMatrix2x4fvEXT fp_glProgramUniformMatrix2x4fvEXT;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix4x2fvEXT) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glProgramUniformMatrix4x2fvEXT fp_glProgramUniformMatrix4x2fvEXT;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix3x4fvEXT) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glProgramUniformMatrix3x4fvEXT fp_glProgramUniformMatrix3x4fvEXT;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix4x3fvEXT) (GLuint, GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glProgramUniformMatrix4x3fvEXT fp_glProgramUniformMatrix4x3fvEXT;
+typedef void (APIENTRYP pfn_glTextureBufferEXT) (GLuint, GLenum, GLenum, GLuint);
+extern pfn_glTextureBufferEXT fp_glTextureBufferEXT;
+typedef void (APIENTRYP pfn_glMultiTexBufferEXT) (GLenum, GLenum, GLenum, GLuint);
+extern pfn_glMultiTexBufferEXT fp_glMultiTexBufferEXT;
+typedef void (APIENTRYP pfn_glTextureParameterIivEXT) (GLuint, GLenum, GLenum, const GLint*);
+extern pfn_glTextureParameterIivEXT fp_glTextureParameterIivEXT;
+typedef void (APIENTRYP pfn_glTextureParameterIuivEXT) (GLuint, GLenum, GLenum, const GLuint*);
+extern pfn_glTextureParameterIuivEXT fp_glTextureParameterIuivEXT;
+typedef void (APIENTRYP pfn_glGetTextureParameterIivEXT) (GLuint, GLenum, GLenum, GLint*);
+extern pfn_glGetTextureParameterIivEXT fp_glGetTextureParameterIivEXT;
+typedef void (APIENTRYP pfn_glGetTextureParameterIuivEXT) (GLuint, GLenum, GLenum, GLuint*);
+extern pfn_glGetTextureParameterIuivEXT fp_glGetTextureParameterIuivEXT;
+typedef void (APIENTRYP pfn_glMultiTexParameterIivEXT) (GLenum, GLenum, GLenum, const GLint*);
+extern pfn_glMultiTexParameterIivEXT fp_glMultiTexParameterIivEXT;
+typedef void (APIENTRYP pfn_glMultiTexParameterIuivEXT) (GLenum, GLenum, GLenum, const GLuint*);
+extern pfn_glMultiTexParameterIuivEXT fp_glMultiTexParameterIuivEXT;
+typedef void (APIENTRYP pfn_glGetMultiTexParameterIivEXT) (GLenum, GLenum, GLenum, GLint*);
+extern pfn_glGetMultiTexParameterIivEXT fp_glGetMultiTexParameterIivEXT;
+typedef void (APIENTRYP pfn_glGetMultiTexParameterIuivEXT) (GLenum, GLenum, GLenum, GLuint*);
+extern pfn_glGetMultiTexParameterIuivEXT fp_glGetMultiTexParameterIuivEXT;
+typedef void (APIENTRYP pfn_glProgramUniform1uiEXT) (GLuint, GLint, GLuint);
+extern pfn_glProgramUniform1uiEXT fp_glProgramUniform1uiEXT;
+typedef void (APIENTRYP pfn_glProgramUniform2uiEXT) (GLuint, GLint, GLuint, GLuint);
+extern pfn_glProgramUniform2uiEXT fp_glProgramUniform2uiEXT;
+typedef void (APIENTRYP pfn_glProgramUniform3uiEXT) (GLuint, GLint, GLuint, GLuint, GLuint);
+extern pfn_glProgramUniform3uiEXT fp_glProgramUniform3uiEXT;
+typedef void (APIENTRYP pfn_glProgramUniform4uiEXT) (GLuint, GLint, GLuint, GLuint, GLuint, GLuint);
+extern pfn_glProgramUniform4uiEXT fp_glProgramUniform4uiEXT;
+typedef void (APIENTRYP pfn_glProgramUniform1uivEXT) (GLuint, GLint, GLsizei, const GLuint*);
+extern pfn_glProgramUniform1uivEXT fp_glProgramUniform1uivEXT;
+typedef void (APIENTRYP pfn_glProgramUniform2uivEXT) (GLuint, GLint, GLsizei, const GLuint*);
+extern pfn_glProgramUniform2uivEXT fp_glProgramUniform2uivEXT;
+typedef void (APIENTRYP pfn_glProgramUniform3uivEXT) (GLuint, GLint, GLsizei, const GLuint*);
+extern pfn_glProgramUniform3uivEXT fp_glProgramUniform3uivEXT;
+typedef void (APIENTRYP pfn_glProgramUniform4uivEXT) (GLuint, GLint, GLsizei, const GLuint*);
+extern pfn_glProgramUniform4uivEXT fp_glProgramUniform4uivEXT;
+typedef void (APIENTRYP pfn_glNamedProgramLocalParameters4fvEXT) (GLuint, GLenum, GLuint, GLsizei, const GLfloat*);
+extern pfn_glNamedProgramLocalParameters4fvEXT fp_glNamedProgramLocalParameters4fvEXT;
+typedef void (APIENTRYP pfn_glNamedProgramLocalParameterI4iEXT) (GLuint, GLenum, GLuint, GLint, GLint, GLint, GLint);
+extern pfn_glNamedProgramLocalParameterI4iEXT fp_glNamedProgramLocalParameterI4iEXT;
+typedef void (APIENTRYP pfn_glNamedProgramLocalParameterI4ivEXT) (GLuint, GLenum, GLuint, const GLint*);
+extern pfn_glNamedProgramLocalParameterI4ivEXT fp_glNamedProgramLocalParameterI4ivEXT;
+typedef void (APIENTRYP pfn_glNamedProgramLocalParametersI4ivEXT) (GLuint, GLenum, GLuint, GLsizei, const GLint*);
+extern pfn_glNamedProgramLocalParametersI4ivEXT fp_glNamedProgramLocalParametersI4ivEXT;
+typedef void (APIENTRYP pfn_glNamedProgramLocalParameterI4uiEXT) (GLuint, GLenum, GLuint, GLuint, GLuint, GLuint, GLuint);
+extern pfn_glNamedProgramLocalParameterI4uiEXT fp_glNamedProgramLocalParameterI4uiEXT;
+typedef void (APIENTRYP pfn_glNamedProgramLocalParameterI4uivEXT) (GLuint, GLenum, GLuint, const GLuint*);
+extern pfn_glNamedProgramLocalParameterI4uivEXT fp_glNamedProgramLocalParameterI4uivEXT;
+typedef void (APIENTRYP pfn_glNamedProgramLocalParametersI4uivEXT) (GLuint, GLenum, GLuint, GLsizei, const GLuint*);
+extern pfn_glNamedProgramLocalParametersI4uivEXT fp_glNamedProgramLocalParametersI4uivEXT;
+typedef void (APIENTRYP pfn_glGetNamedProgramLocalParameterIivEXT) (GLuint, GLenum, GLuint, GLint*);
+extern pfn_glGetNamedProgramLocalParameterIivEXT fp_glGetNamedProgramLocalParameterIivEXT;
+typedef void (APIENTRYP pfn_glGetNamedProgramLocalParameterIuivEXT) (GLuint, GLenum, GLuint, GLuint*);
+extern pfn_glGetNamedProgramLocalParameterIuivEXT fp_glGetNamedProgramLocalParameterIuivEXT;
+typedef void (APIENTRYP pfn_glEnableClientStateiEXT) (GLenum, GLuint);
+extern pfn_glEnableClientStateiEXT fp_glEnableClientStateiEXT;
+typedef void (APIENTRYP pfn_glDisableClientStateiEXT) (GLenum, GLuint);
+extern pfn_glDisableClientStateiEXT fp_glDisableClientStateiEXT;
+typedef void (APIENTRYP pfn_glGetFloati_vEXT) (GLenum, GLuint, GLfloat*);
+extern pfn_glGetFloati_vEXT fp_glGetFloati_vEXT;
+typedef void (APIENTRYP pfn_glGetDoublei_vEXT) (GLenum, GLuint, GLdouble*);
+extern pfn_glGetDoublei_vEXT fp_glGetDoublei_vEXT;
+typedef void (APIENTRYP pfn_glGetPointeri_vEXT) (GLenum, GLuint, void**);
+extern pfn_glGetPointeri_vEXT fp_glGetPointeri_vEXT;
+typedef void (APIENTRYP pfn_glNamedProgramStringEXT) (GLuint, GLenum, GLenum, GLsizei, const void*);
+extern pfn_glNamedProgramStringEXT fp_glNamedProgramStringEXT;
+typedef void (APIENTRYP pfn_glNamedProgramLocalParameter4dEXT) (GLuint, GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
+extern pfn_glNamedProgramLocalParameter4dEXT fp_glNamedProgramLocalParameter4dEXT;
+typedef void (APIENTRYP pfn_glNamedProgramLocalParameter4dvEXT) (GLuint, GLenum, GLuint, const GLdouble*);
+extern pfn_glNamedProgramLocalParameter4dvEXT fp_glNamedProgramLocalParameter4dvEXT;
+typedef void (APIENTRYP pfn_glNamedProgramLocalParameter4fEXT) (GLuint, GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
+extern pfn_glNamedProgramLocalParameter4fEXT fp_glNamedProgramLocalParameter4fEXT;
+typedef void (APIENTRYP pfn_glNamedProgramLocalParameter4fvEXT) (GLuint, GLenum, GLuint, const GLfloat*);
+extern pfn_glNamedProgramLocalParameter4fvEXT fp_glNamedProgramLocalParameter4fvEXT;
+typedef void (APIENTRYP pfn_glGetNamedProgramLocalParameterdvEXT) (GLuint, GLenum, GLuint, GLdouble*);
+extern pfn_glGetNamedProgramLocalParameterdvEXT fp_glGetNamedProgramLocalParameterdvEXT;
+typedef void (APIENTRYP pfn_glGetNamedProgramLocalParameterfvEXT) (GLuint, GLenum, GLuint, GLfloat*);
+extern pfn_glGetNamedProgramLocalParameterfvEXT fp_glGetNamedProgramLocalParameterfvEXT;
+typedef void (APIENTRYP pfn_glGetNamedProgramivEXT) (GLuint, GLenum, GLenum, GLint*);
+extern pfn_glGetNamedProgramivEXT fp_glGetNamedProgramivEXT;
+typedef void (APIENTRYP pfn_glGetNamedProgramStringEXT) (GLuint, GLenum, GLenum, void*);
+extern pfn_glGetNamedProgramStringEXT fp_glGetNamedProgramStringEXT;
+typedef void (APIENTRYP pfn_glNamedRenderbufferStorageEXT) (GLuint, GLenum, GLsizei, GLsizei);
+extern pfn_glNamedRenderbufferStorageEXT fp_glNamedRenderbufferStorageEXT;
+typedef void (APIENTRYP pfn_glGetNamedRenderbufferParameterivEXT) (GLuint, GLenum, GLint*);
+extern pfn_glGetNamedRenderbufferParameterivEXT fp_glGetNamedRenderbufferParameterivEXT;
+typedef void (APIENTRYP pfn_glNamedRenderbufferStorageMultisampleEXT) (GLuint, GLsizei, GLenum, GLsizei, GLsizei);
+extern pfn_glNamedRenderbufferStorageMultisampleEXT fp_glNamedRenderbufferStorageMultisampleEXT;
+typedef void (APIENTRYP pfn_glNamedRenderbufferStorageMultisampleCoverageEXT) (GLuint, GLsizei, GLsizei, GLenum, GLsizei, GLsizei);
+extern pfn_glNamedRenderbufferStorageMultisampleCoverageEXT fp_glNamedRenderbufferStorageMultisampleCoverageEXT;
+typedef GLenum (APIENTRYP pfn_glCheckNamedFramebufferStatusEXT) (GLuint, GLenum);
+extern pfn_glCheckNamedFramebufferStatusEXT fp_glCheckNamedFramebufferStatusEXT;
+typedef void (APIENTRYP pfn_glNamedFramebufferTexture1DEXT) (GLuint, GLenum, GLenum, GLuint, GLint);
+extern pfn_glNamedFramebufferTexture1DEXT fp_glNamedFramebufferTexture1DEXT;
+typedef void (APIENTRYP pfn_glNamedFramebufferTexture2DEXT) (GLuint, GLenum, GLenum, GLuint, GLint);
+extern pfn_glNamedFramebufferTexture2DEXT fp_glNamedFramebufferTexture2DEXT;
+typedef void (APIENTRYP pfn_glNamedFramebufferTexture3DEXT) (GLuint, GLenum, GLenum, GLuint, GLint, GLint);
+extern pfn_glNamedFramebufferTexture3DEXT fp_glNamedFramebufferTexture3DEXT;
+typedef void (APIENTRYP pfn_glNamedFramebufferRenderbufferEXT) (GLuint, GLenum, GLenum, GLuint);
+extern pfn_glNamedFramebufferRenderbufferEXT fp_glNamedFramebufferRenderbufferEXT;
+typedef void (APIENTRYP pfn_glGetNamedFramebufferAttachmentParameterivEXT) (GLuint, GLenum, GLenum, GLint*);
+extern pfn_glGetNamedFramebufferAttachmentParameterivEXT fp_glGetNamedFramebufferAttachmentParameterivEXT;
+typedef void (APIENTRYP pfn_glGenerateTextureMipmapEXT) (GLuint, GLenum);
+extern pfn_glGenerateTextureMipmapEXT fp_glGenerateTextureMipmapEXT;
+typedef void (APIENTRYP pfn_glGenerateMultiTexMipmapEXT) (GLenum, GLenum);
+extern pfn_glGenerateMultiTexMipmapEXT fp_glGenerateMultiTexMipmapEXT;
+typedef void (APIENTRYP pfn_glFramebufferDrawBufferEXT) (GLuint, GLenum);
+extern pfn_glFramebufferDrawBufferEXT fp_glFramebufferDrawBufferEXT;
+typedef void (APIENTRYP pfn_glFramebufferDrawBuffersEXT) (GLuint, GLsizei, const GLenum*);
+extern pfn_glFramebufferDrawBuffersEXT fp_glFramebufferDrawBuffersEXT;
+typedef void (APIENTRYP pfn_glFramebufferReadBufferEXT) (GLuint, GLenum);
+extern pfn_glFramebufferReadBufferEXT fp_glFramebufferReadBufferEXT;
+typedef void (APIENTRYP pfn_glGetFramebufferParameterivEXT) (GLuint, GLenum, GLint*);
+extern pfn_glGetFramebufferParameterivEXT fp_glGetFramebufferParameterivEXT;
+typedef void (APIENTRYP pfn_glNamedCopyBufferSubDataEXT) (GLuint, GLuint, GLintptr, GLintptr, GLsizeiptr);
+extern pfn_glNamedCopyBufferSubDataEXT fp_glNamedCopyBufferSubDataEXT;
+typedef void (APIENTRYP pfn_glNamedFramebufferTextureEXT) (GLuint, GLenum, GLuint, GLint);
+extern pfn_glNamedFramebufferTextureEXT fp_glNamedFramebufferTextureEXT;
+typedef void (APIENTRYP pfn_glNamedFramebufferTextureLayerEXT) (GLuint, GLenum, GLuint, GLint, GLint);
+extern pfn_glNamedFramebufferTextureLayerEXT fp_glNamedFramebufferTextureLayerEXT;
+typedef void (APIENTRYP pfn_glNamedFramebufferTextureFaceEXT) (GLuint, GLenum, GLuint, GLint, GLenum);
+extern pfn_glNamedFramebufferTextureFaceEXT fp_glNamedFramebufferTextureFaceEXT;
+typedef void (APIENTRYP pfn_glTextureRenderbufferEXT) (GLuint, GLenum, GLuint);
+extern pfn_glTextureRenderbufferEXT fp_glTextureRenderbufferEXT;
+typedef void (APIENTRYP pfn_glMultiTexRenderbufferEXT) (GLenum, GLenum, GLuint);
+extern pfn_glMultiTexRenderbufferEXT fp_glMultiTexRenderbufferEXT;
+typedef void (APIENTRYP pfn_glVertexArrayVertexOffsetEXT) (GLuint, GLuint, GLint, GLenum, GLsizei, GLintptr);
+extern pfn_glVertexArrayVertexOffsetEXT fp_glVertexArrayVertexOffsetEXT;
+typedef void (APIENTRYP pfn_glVertexArrayColorOffsetEXT) (GLuint, GLuint, GLint, GLenum, GLsizei, GLintptr);
+extern pfn_glVertexArrayColorOffsetEXT fp_glVertexArrayColorOffsetEXT;
+typedef void (APIENTRYP pfn_glVertexArrayEdgeFlagOffsetEXT) (GLuint, GLuint, GLsizei, GLintptr);
+extern pfn_glVertexArrayEdgeFlagOffsetEXT fp_glVertexArrayEdgeFlagOffsetEXT;
+typedef void (APIENTRYP pfn_glVertexArrayIndexOffsetEXT) (GLuint, GLuint, GLenum, GLsizei, GLintptr);
+extern pfn_glVertexArrayIndexOffsetEXT fp_glVertexArrayIndexOffsetEXT;
+typedef void (APIENTRYP pfn_glVertexArrayNormalOffsetEXT) (GLuint, GLuint, GLenum, GLsizei, GLintptr);
+extern pfn_glVertexArrayNormalOffsetEXT fp_glVertexArrayNormalOffsetEXT;
+typedef void (APIENTRYP pfn_glVertexArrayTexCoordOffsetEXT) (GLuint, GLuint, GLint, GLenum, GLsizei, GLintptr);
+extern pfn_glVertexArrayTexCoordOffsetEXT fp_glVertexArrayTexCoordOffsetEXT;
+typedef void (APIENTRYP pfn_glVertexArrayMultiTexCoordOffsetEXT) (GLuint, GLuint, GLenum, GLint, GLenum, GLsizei, GLintptr);
+extern pfn_glVertexArrayMultiTexCoordOffsetEXT fp_glVertexArrayMultiTexCoordOffsetEXT;
+typedef void (APIENTRYP pfn_glVertexArrayFogCoordOffsetEXT) (GLuint, GLuint, GLenum, GLsizei, GLintptr);
+extern pfn_glVertexArrayFogCoordOffsetEXT fp_glVertexArrayFogCoordOffsetEXT;
+typedef void (APIENTRYP pfn_glVertexArraySecondaryColorOffsetEXT) (GLuint, GLuint, GLint, GLenum, GLsizei, GLintptr);
+extern pfn_glVertexArraySecondaryColorOffsetEXT fp_glVertexArraySecondaryColorOffsetEXT;
+typedef void (APIENTRYP pfn_glVertexArrayVertexAttribOffsetEXT) (GLuint, GLuint, GLuint, GLint, GLenum, GLboolean, GLsizei, GLintptr);
+extern pfn_glVertexArrayVertexAttribOffsetEXT fp_glVertexArrayVertexAttribOffsetEXT;
+typedef void (APIENTRYP pfn_glVertexArrayVertexAttribIOffsetEXT) (GLuint, GLuint, GLuint, GLint, GLenum, GLsizei, GLintptr);
+extern pfn_glVertexArrayVertexAttribIOffsetEXT fp_glVertexArrayVertexAttribIOffsetEXT;
+typedef void (APIENTRYP pfn_glEnableVertexArrayEXT) (GLuint, GLenum);
+extern pfn_glEnableVertexArrayEXT fp_glEnableVertexArrayEXT;
+typedef void (APIENTRYP pfn_glDisableVertexArrayEXT) (GLuint, GLenum);
+extern pfn_glDisableVertexArrayEXT fp_glDisableVertexArrayEXT;
+typedef void (APIENTRYP pfn_glEnableVertexArrayAttribEXT) (GLuint, GLuint);
+extern pfn_glEnableVertexArrayAttribEXT fp_glEnableVertexArrayAttribEXT;
+typedef void (APIENTRYP pfn_glDisableVertexArrayAttribEXT) (GLuint, GLuint);
+extern pfn_glDisableVertexArrayAttribEXT fp_glDisableVertexArrayAttribEXT;
+typedef void (APIENTRYP pfn_glGetVertexArrayIntegervEXT) (GLuint, GLenum, GLint*);
+extern pfn_glGetVertexArrayIntegervEXT fp_glGetVertexArrayIntegervEXT;
+typedef void (APIENTRYP pfn_glGetVertexArrayPointervEXT) (GLuint, GLenum, void**);
+extern pfn_glGetVertexArrayPointervEXT fp_glGetVertexArrayPointervEXT;
+typedef void (APIENTRYP pfn_glGetVertexArrayIntegeri_vEXT) (GLuint, GLuint, GLenum, GLint*);
+extern pfn_glGetVertexArrayIntegeri_vEXT fp_glGetVertexArrayIntegeri_vEXT;
+typedef void (APIENTRYP pfn_glGetVertexArrayPointeri_vEXT) (GLuint, GLuint, GLenum, void**);
+extern pfn_glGetVertexArrayPointeri_vEXT fp_glGetVertexArrayPointeri_vEXT;
+typedef void* (APIENTRYP pfn_glMapNamedBufferRangeEXT) (GLuint, GLintptr, GLsizeiptr, GLbitfield);
+extern pfn_glMapNamedBufferRangeEXT fp_glMapNamedBufferRangeEXT;
+typedef void (APIENTRYP pfn_glFlushMappedNamedBufferRangeEXT) (GLuint, GLintptr, GLsizeiptr);
+extern pfn_glFlushMappedNamedBufferRangeEXT fp_glFlushMappedNamedBufferRangeEXT;
+typedef void (APIENTRYP pfn_glNamedBufferStorageEXT) (GLuint, GLsizeiptr, const void*, GLbitfield);
+extern pfn_glNamedBufferStorageEXT fp_glNamedBufferStorageEXT;
+typedef void (APIENTRYP pfn_glClearNamedBufferDataEXT) (GLuint, GLenum, GLenum, GLenum, const void*);
+extern pfn_glClearNamedBufferDataEXT fp_glClearNamedBufferDataEXT;
+typedef void (APIENTRYP pfn_glClearNamedBufferSubDataEXT) (GLuint, GLenum, GLsizeiptr, GLsizeiptr, GLenum, GLenum, const void*);
+extern pfn_glClearNamedBufferSubDataEXT fp_glClearNamedBufferSubDataEXT;
+typedef void (APIENTRYP pfn_glNamedFramebufferParameteriEXT) (GLuint, GLenum, GLint);
+extern pfn_glNamedFramebufferParameteriEXT fp_glNamedFramebufferParameteriEXT;
+typedef void (APIENTRYP pfn_glGetNamedFramebufferParameterivEXT) (GLuint, GLenum, GLint*);
+extern pfn_glGetNamedFramebufferParameterivEXT fp_glGetNamedFramebufferParameterivEXT;
+typedef void (APIENTRYP pfn_glProgramUniform1dEXT) (GLuint, GLint, GLdouble);
+extern pfn_glProgramUniform1dEXT fp_glProgramUniform1dEXT;
+typedef void (APIENTRYP pfn_glProgramUniform2dEXT) (GLuint, GLint, GLdouble, GLdouble);
+extern pfn_glProgramUniform2dEXT fp_glProgramUniform2dEXT;
+typedef void (APIENTRYP pfn_glProgramUniform3dEXT) (GLuint, GLint, GLdouble, GLdouble, GLdouble);
+extern pfn_glProgramUniform3dEXT fp_glProgramUniform3dEXT;
+typedef void (APIENTRYP pfn_glProgramUniform4dEXT) (GLuint, GLint, GLdouble, GLdouble, GLdouble, GLdouble);
+extern pfn_glProgramUniform4dEXT fp_glProgramUniform4dEXT;
+typedef void (APIENTRYP pfn_glProgramUniform1dvEXT) (GLuint, GLint, GLsizei, const GLdouble*);
+extern pfn_glProgramUniform1dvEXT fp_glProgramUniform1dvEXT;
+typedef void (APIENTRYP pfn_glProgramUniform2dvEXT) (GLuint, GLint, GLsizei, const GLdouble*);
+extern pfn_glProgramUniform2dvEXT fp_glProgramUniform2dvEXT;
+typedef void (APIENTRYP pfn_glProgramUniform3dvEXT) (GLuint, GLint, GLsizei, const GLdouble*);
+extern pfn_glProgramUniform3dvEXT fp_glProgramUniform3dvEXT;
+typedef void (APIENTRYP pfn_glProgramUniform4dvEXT) (GLuint, GLint, GLsizei, const GLdouble*);
+extern pfn_glProgramUniform4dvEXT fp_glProgramUniform4dvEXT;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix2dvEXT) (GLuint, GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glProgramUniformMatrix2dvEXT fp_glProgramUniformMatrix2dvEXT;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix3dvEXT) (GLuint, GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glProgramUniformMatrix3dvEXT fp_glProgramUniformMatrix3dvEXT;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix4dvEXT) (GLuint, GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glProgramUniformMatrix4dvEXT fp_glProgramUniformMatrix4dvEXT;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix2x3dvEXT) (GLuint, GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glProgramUniformMatrix2x3dvEXT fp_glProgramUniformMatrix2x3dvEXT;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix2x4dvEXT) (GLuint, GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glProgramUniformMatrix2x4dvEXT fp_glProgramUniformMatrix2x4dvEXT;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix3x2dvEXT) (GLuint, GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glProgramUniformMatrix3x2dvEXT fp_glProgramUniformMatrix3x2dvEXT;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix3x4dvEXT) (GLuint, GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glProgramUniformMatrix3x4dvEXT fp_glProgramUniformMatrix3x4dvEXT;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix4x2dvEXT) (GLuint, GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glProgramUniformMatrix4x2dvEXT fp_glProgramUniformMatrix4x2dvEXT;
+typedef void (APIENTRYP pfn_glProgramUniformMatrix4x3dvEXT) (GLuint, GLint, GLsizei, GLboolean, const GLdouble*);
+extern pfn_glProgramUniformMatrix4x3dvEXT fp_glProgramUniformMatrix4x3dvEXT;
+typedef void (APIENTRYP pfn_glTextureBufferRangeEXT) (GLuint, GLenum, GLenum, GLuint, GLintptr, GLsizeiptr);
+extern pfn_glTextureBufferRangeEXT fp_glTextureBufferRangeEXT;
+typedef void (APIENTRYP pfn_glTextureStorage1DEXT) (GLuint, GLenum, GLsizei, GLenum, GLsizei);
+extern pfn_glTextureStorage1DEXT fp_glTextureStorage1DEXT;
+typedef void (APIENTRYP pfn_glTextureStorage2DEXT) (GLuint, GLenum, GLsizei, GLenum, GLsizei, GLsizei);
+extern pfn_glTextureStorage2DEXT fp_glTextureStorage2DEXT;
+typedef void (APIENTRYP pfn_glTextureStorage3DEXT) (GLuint, GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei);
+extern pfn_glTextureStorage3DEXT fp_glTextureStorage3DEXT;
+typedef void (APIENTRYP pfn_glTextureStorage2DMultisampleEXT) (GLuint, GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLboolean);
+extern pfn_glTextureStorage2DMultisampleEXT fp_glTextureStorage2DMultisampleEXT;
+typedef void (APIENTRYP pfn_glTextureStorage3DMultisampleEXT) (GLuint, GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean);
+extern pfn_glTextureStorage3DMultisampleEXT fp_glTextureStorage3DMultisampleEXT;
+typedef void (APIENTRYP pfn_glVertexArrayBindVertexBufferEXT) (GLuint, GLuint, GLuint, GLintptr, GLsizei);
+extern pfn_glVertexArrayBindVertexBufferEXT fp_glVertexArrayBindVertexBufferEXT;
+typedef void (APIENTRYP pfn_glVertexArrayVertexAttribFormatEXT) (GLuint, GLuint, GLint, GLenum, GLboolean, GLuint);
+extern pfn_glVertexArrayVertexAttribFormatEXT fp_glVertexArrayVertexAttribFormatEXT;
+typedef void (APIENTRYP pfn_glVertexArrayVertexAttribIFormatEXT) (GLuint, GLuint, GLint, GLenum, GLuint);
+extern pfn_glVertexArrayVertexAttribIFormatEXT fp_glVertexArrayVertexAttribIFormatEXT;
+typedef void (APIENTRYP pfn_glVertexArrayVertexAttribLFormatEXT) (GLuint, GLuint, GLint, GLenum, GLuint);
+extern pfn_glVertexArrayVertexAttribLFormatEXT fp_glVertexArrayVertexAttribLFormatEXT;
+typedef void (APIENTRYP pfn_glVertexArrayVertexAttribBindingEXT) (GLuint, GLuint, GLuint);
+extern pfn_glVertexArrayVertexAttribBindingEXT fp_glVertexArrayVertexAttribBindingEXT;
+typedef void (APIENTRYP pfn_glVertexArrayVertexBindingDivisorEXT) (GLuint, GLuint, GLuint);
+extern pfn_glVertexArrayVertexBindingDivisorEXT fp_glVertexArrayVertexBindingDivisorEXT;
+typedef void (APIENTRYP pfn_glVertexArrayVertexAttribLOffsetEXT) (GLuint, GLuint, GLuint, GLint, GLenum, GLsizei, GLintptr);
+extern pfn_glVertexArrayVertexAttribLOffsetEXT fp_glVertexArrayVertexAttribLOffsetEXT;
+typedef void (APIENTRYP pfn_glTexturePageCommitmentEXT) (GLuint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLboolean);
+extern pfn_glTexturePageCommitmentEXT fp_glTexturePageCommitmentEXT;
+typedef void (APIENTRYP pfn_glVertexArrayVertexAttribDivisorEXT) (GLuint, GLuint, GLuint);
+extern pfn_glVertexArrayVertexAttribDivisorEXT fp_glVertexArrayVertexAttribDivisorEXT;
+
+ /* GL_EXT_discard_framebuffer */
+extern GLboolean GLAD_EXT_discard_framebuffer;
+#define GL_COLOR_EXT                           0x1800
+#define GL_DEPTH_EXT                           0x1801
+#define GL_STENCIL_EXT                         0x1802
+typedef void (APIENTRYP pfn_glDiscardFramebufferEXT) (GLenum, GLsizei, const GLenum*);
+extern pfn_glDiscardFramebufferEXT fp_glDiscardFramebufferEXT;
+
+ /* GL_EXT_disjoint_timer_query */
+extern GLboolean GLAD_EXT_disjoint_timer_query;
+#define GL_QUERY_COUNTER_BITS_EXT              0x8864
+#define GL_CURRENT_QUERY_EXT                   0x8865
+#define GL_QUERY_RESULT_EXT                    0x8866
+#define GL_QUERY_RESULT_AVAILABLE_EXT          0x8867
+#define GL_TIME_ELAPSED_EXT                    0x88BF
+#define GL_TIMESTAMP_EXT                       0x8E28
+#define GL_GPU_DISJOINT_EXT                    0x8FBB
+typedef void (APIENTRYP pfn_glGenQueriesEXT) (GLsizei, GLuint*);
+extern pfn_glGenQueriesEXT fp_glGenQueriesEXT;
+typedef void (APIENTRYP pfn_glDeleteQueriesEXT) (GLsizei, const GLuint*);
+extern pfn_glDeleteQueriesEXT fp_glDeleteQueriesEXT;
+typedef GLboolean (APIENTRYP pfn_glIsQueryEXT) (GLuint);
+extern pfn_glIsQueryEXT fp_glIsQueryEXT;
+typedef void (APIENTRYP pfn_glBeginQueryEXT) (GLenum, GLuint);
+extern pfn_glBeginQueryEXT fp_glBeginQueryEXT;
+typedef void (APIENTRYP pfn_glEndQueryEXT) (GLenum);
+extern pfn_glEndQueryEXT fp_glEndQueryEXT;
+typedef void (APIENTRYP pfn_glQueryCounterEXT) (GLuint, GLenum);
+extern pfn_glQueryCounterEXT fp_glQueryCounterEXT;
+typedef void (APIENTRYP pfn_glGetQueryivEXT) (GLenum, GLenum, GLint*);
+extern pfn_glGetQueryivEXT fp_glGetQueryivEXT;
+typedef void (APIENTRYP pfn_glGetQueryObjectivEXT) (GLuint, GLenum, GLint*);
+extern pfn_glGetQueryObjectivEXT fp_glGetQueryObjectivEXT;
+typedef void (APIENTRYP pfn_glGetQueryObjectuivEXT) (GLuint, GLenum, GLuint*);
+extern pfn_glGetQueryObjectuivEXT fp_glGetQueryObjectuivEXT;
+typedef void (APIENTRYP pfn_glGetQueryObjecti64vEXT) (GLuint, GLenum, GLint64*);
+extern pfn_glGetQueryObjecti64vEXT fp_glGetQueryObjecti64vEXT;
+typedef void (APIENTRYP pfn_glGetQueryObjectui64vEXT) (GLuint, GLenum, GLuint64*);
+extern pfn_glGetQueryObjectui64vEXT fp_glGetQueryObjectui64vEXT;
+
+ /* GL_EXT_draw_buffers */
+extern GLboolean GLAD_EXT_draw_buffers;
+#define GL_MAX_COLOR_ATTACHMENTS_EXT           0x8CDF
+#define GL_MAX_DRAW_BUFFERS_EXT                0x8824
+#define GL_DRAW_BUFFER0_EXT                    0x8825
+#define GL_DRAW_BUFFER1_EXT                    0x8826
+#define GL_DRAW_BUFFER2_EXT                    0x8827
+#define GL_DRAW_BUFFER3_EXT                    0x8828
+#define GL_DRAW_BUFFER4_EXT                    0x8829
+#define GL_DRAW_BUFFER5_EXT                    0x882A
+#define GL_DRAW_BUFFER6_EXT                    0x882B
+#define GL_DRAW_BUFFER7_EXT                    0x882C
+#define GL_DRAW_BUFFER8_EXT                    0x882D
+#define GL_DRAW_BUFFER9_EXT                    0x882E
+#define GL_DRAW_BUFFER10_EXT                   0x882F
+#define GL_DRAW_BUFFER11_EXT                   0x8830
+#define GL_DRAW_BUFFER12_EXT                   0x8831
+#define GL_DRAW_BUFFER13_EXT                   0x8832
+#define GL_DRAW_BUFFER14_EXT                   0x8833
+#define GL_DRAW_BUFFER15_EXT                   0x8834
+#define GL_COLOR_ATTACHMENT0_EXT               0x8CE0
+#define GL_COLOR_ATTACHMENT1_EXT               0x8CE1
+#define GL_COLOR_ATTACHMENT2_EXT               0x8CE2
+#define GL_COLOR_ATTACHMENT3_EXT               0x8CE3
+#define GL_COLOR_ATTACHMENT4_EXT               0x8CE4
+#define GL_COLOR_ATTACHMENT5_EXT               0x8CE5
+#define GL_COLOR_ATTACHMENT6_EXT               0x8CE6
+#define GL_COLOR_ATTACHMENT7_EXT               0x8CE7
+#define GL_COLOR_ATTACHMENT8_EXT               0x8CE8
+#define GL_COLOR_ATTACHMENT9_EXT               0x8CE9
+#define GL_COLOR_ATTACHMENT10_EXT              0x8CEA
+#define GL_COLOR_ATTACHMENT11_EXT              0x8CEB
+#define GL_COLOR_ATTACHMENT12_EXT              0x8CEC
+#define GL_COLOR_ATTACHMENT13_EXT              0x8CED
+#define GL_COLOR_ATTACHMENT14_EXT              0x8CEE
+#define GL_COLOR_ATTACHMENT15_EXT              0x8CEF
+typedef void (APIENTRYP pfn_glDrawBuffersEXT) (GLsizei, const GLenum*);
+extern pfn_glDrawBuffersEXT fp_glDrawBuffersEXT;
+
+ /* GL_EXT_draw_buffers2 */
+extern GLboolean GLAD_EXT_draw_buffers2;
+typedef void (APIENTRYP pfn_glColorMaskIndexedEXT) (GLuint, GLboolean, GLboolean, GLboolean, GLboolean);
+extern pfn_glColorMaskIndexedEXT fp_glColorMaskIndexedEXT;
+
+ /* GL_EXT_draw_buffers_indexed */
+extern GLboolean GLAD_EXT_draw_buffers_indexed;
+typedef void (APIENTRYP pfn_glEnableiEXT) (GLenum, GLuint);
+extern pfn_glEnableiEXT fp_glEnableiEXT;
+typedef void (APIENTRYP pfn_glDisableiEXT) (GLenum, GLuint);
+extern pfn_glDisableiEXT fp_glDisableiEXT;
+typedef void (APIENTRYP pfn_glBlendEquationiEXT) (GLuint, GLenum);
+extern pfn_glBlendEquationiEXT fp_glBlendEquationiEXT;
+typedef void (APIENTRYP pfn_glBlendEquationSeparateiEXT) (GLuint, GLenum, GLenum);
+extern pfn_glBlendEquationSeparateiEXT fp_glBlendEquationSeparateiEXT;
+typedef void (APIENTRYP pfn_glBlendFunciEXT) (GLuint, GLenum, GLenum);
+extern pfn_glBlendFunciEXT fp_glBlendFunciEXT;
+typedef void (APIENTRYP pfn_glBlendFuncSeparateiEXT) (GLuint, GLenum, GLenum, GLenum, GLenum);
+extern pfn_glBlendFuncSeparateiEXT fp_glBlendFuncSeparateiEXT;
+typedef void (APIENTRYP pfn_glColorMaskiEXT) (GLuint, GLboolean, GLboolean, GLboolean, GLboolean);
+extern pfn_glColorMaskiEXT fp_glColorMaskiEXT;
+typedef GLboolean (APIENTRYP pfn_glIsEnablediEXT) (GLenum, GLuint);
+extern pfn_glIsEnablediEXT fp_glIsEnablediEXT;
+
+ /* GL_EXT_draw_instanced */
+extern GLboolean GLAD_EXT_draw_instanced;
+typedef void (APIENTRYP pfn_glDrawArraysInstancedEXT) (GLenum, GLint, GLsizei, GLsizei);
+extern pfn_glDrawArraysInstancedEXT fp_glDrawArraysInstancedEXT;
+typedef void (APIENTRYP pfn_glDrawElementsInstancedEXT) (GLenum, GLsizei, GLenum, const void*, GLsizei);
+extern pfn_glDrawElementsInstancedEXT fp_glDrawElementsInstancedEXT;
+
+ /* GL_EXT_framebuffer_blit */
+extern GLboolean GLAD_EXT_framebuffer_blit;
+#define GL_READ_FRAMEBUFFER_EXT                0x8CA8
+#define GL_DRAW_FRAMEBUFFER_EXT                0x8CA9
+#define GL_DRAW_FRAMEBUFFER_BINDING_EXT        0x8CA6
+#define GL_READ_FRAMEBUFFER_BINDING_EXT        0x8CAA
+typedef void (APIENTRYP pfn_glBlitFramebufferEXT) (GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum);
+extern pfn_glBlitFramebufferEXT fp_glBlitFramebufferEXT;
+
+ /* GL_EXT_framebuffer_multisample */
+extern GLboolean GLAD_EXT_framebuffer_multisample;
+#define GL_RENDERBUFFER_SAMPLES_EXT            0x8CAB
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT  0x8D56
+#define GL_MAX_SAMPLES_EXT                     0x8D57
+typedef void (APIENTRYP pfn_glRenderbufferStorageMultisampleEXT) (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
+extern pfn_glRenderbufferStorageMultisampleEXT fp_glRenderbufferStorageMultisampleEXT;
+
+ /* GL_EXT_framebuffer_multisample_blit_scaled */
+extern GLboolean GLAD_EXT_framebuffer_multisample_blit_scaled;
+#define GL_SCALED_RESOLVE_FASTEST_EXT          0x90BA
+#define GL_SCALED_RESOLVE_NICEST_EXT           0x90BB
+
+ /* GL_EXT_framebuffer_object */
+extern GLboolean GLAD_EXT_framebuffer_object;
+#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT   0x0506
+#define GL_MAX_RENDERBUFFER_SIZE_EXT           0x84E8
+#define GL_FRAMEBUFFER_BINDING_EXT             0x8CA6
+#define GL_RENDERBUFFER_BINDING_EXT            0x8CA7
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT  0x8CD0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT  0x8CD1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT  0x8CD2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT  0x8CD3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT  0x8CD4
+#define GL_FRAMEBUFFER_COMPLETE_EXT            0x8CD5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT  0x8CD6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT  0x8CD7
+#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT  0x8CD9
+#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT  0x8CDA
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT  0x8CDB
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT  0x8CDC
+#define GL_FRAMEBUFFER_UNSUPPORTED_EXT         0x8CDD
+#define GL_DEPTH_ATTACHMENT_EXT                0x8D00
+#define GL_STENCIL_ATTACHMENT_EXT              0x8D20
+#define GL_FRAMEBUFFER_EXT                     0x8D40
+#define GL_RENDERBUFFER_EXT                    0x8D41
+#define GL_RENDERBUFFER_WIDTH_EXT              0x8D42
+#define GL_RENDERBUFFER_HEIGHT_EXT             0x8D43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT    0x8D44
+#define GL_STENCIL_INDEX1_EXT                  0x8D46
+#define GL_STENCIL_INDEX4_EXT                  0x8D47
+#define GL_STENCIL_INDEX8_EXT                  0x8D48
+#define GL_STENCIL_INDEX16_EXT                 0x8D49
+#define GL_RENDERBUFFER_RED_SIZE_EXT           0x8D50
+#define GL_RENDERBUFFER_GREEN_SIZE_EXT         0x8D51
+#define GL_RENDERBUFFER_BLUE_SIZE_EXT          0x8D52
+#define GL_RENDERBUFFER_ALPHA_SIZE_EXT         0x8D53
+#define GL_RENDERBUFFER_DEPTH_SIZE_EXT         0x8D54
+#define GL_RENDERBUFFER_STENCIL_SIZE_EXT       0x8D55
+typedef GLboolean (APIENTRYP pfn_glIsRenderbufferEXT) (GLuint);
+extern pfn_glIsRenderbufferEXT fp_glIsRenderbufferEXT;
+typedef void (APIENTRYP pfn_glBindRenderbufferEXT) (GLenum, GLuint);
+extern pfn_glBindRenderbufferEXT fp_glBindRenderbufferEXT;
+typedef void (APIENTRYP pfn_glDeleteRenderbuffersEXT) (GLsizei, const GLuint*);
+extern pfn_glDeleteRenderbuffersEXT fp_glDeleteRenderbuffersEXT;
+typedef void (APIENTRYP pfn_glGenRenderbuffersEXT) (GLsizei, GLuint*);
+extern pfn_glGenRenderbuffersEXT fp_glGenRenderbuffersEXT;
+typedef void (APIENTRYP pfn_glRenderbufferStorageEXT) (GLenum, GLenum, GLsizei, GLsizei);
+extern pfn_glRenderbufferStorageEXT fp_glRenderbufferStorageEXT;
+typedef void (APIENTRYP pfn_glGetRenderbufferParameterivEXT) (GLenum, GLenum, GLint*);
+extern pfn_glGetRenderbufferParameterivEXT fp_glGetRenderbufferParameterivEXT;
+typedef GLboolean (APIENTRYP pfn_glIsFramebufferEXT) (GLuint);
+extern pfn_glIsFramebufferEXT fp_glIsFramebufferEXT;
+typedef void (APIENTRYP pfn_glBindFramebufferEXT) (GLenum, GLuint);
+extern pfn_glBindFramebufferEXT fp_glBindFramebufferEXT;
+typedef void (APIENTRYP pfn_glDeleteFramebuffersEXT) (GLsizei, const GLuint*);
+extern pfn_glDeleteFramebuffersEXT fp_glDeleteFramebuffersEXT;
+typedef void (APIENTRYP pfn_glGenFramebuffersEXT) (GLsizei, GLuint*);
+extern pfn_glGenFramebuffersEXT fp_glGenFramebuffersEXT;
+typedef GLenum (APIENTRYP pfn_glCheckFramebufferStatusEXT) (GLenum);
+extern pfn_glCheckFramebufferStatusEXT fp_glCheckFramebufferStatusEXT;
+typedef void (APIENTRYP pfn_glFramebufferTexture1DEXT) (GLenum, GLenum, GLenum, GLuint, GLint);
+extern pfn_glFramebufferTexture1DEXT fp_glFramebufferTexture1DEXT;
+typedef void (APIENTRYP pfn_glFramebufferTexture2DEXT) (GLenum, GLenum, GLenum, GLuint, GLint);
+extern pfn_glFramebufferTexture2DEXT fp_glFramebufferTexture2DEXT;
+typedef void (APIENTRYP pfn_glFramebufferTexture3DEXT) (GLenum, GLenum, GLenum, GLuint, GLint, GLint);
+extern pfn_glFramebufferTexture3DEXT fp_glFramebufferTexture3DEXT;
+typedef void (APIENTRYP pfn_glFramebufferRenderbufferEXT) (GLenum, GLenum, GLenum, GLuint);
+extern pfn_glFramebufferRenderbufferEXT fp_glFramebufferRenderbufferEXT;
+typedef void (APIENTRYP pfn_glGetFramebufferAttachmentParameterivEXT) (GLenum, GLenum, GLenum, GLint*);
+extern pfn_glGetFramebufferAttachmentParameterivEXT fp_glGetFramebufferAttachmentParameterivEXT;
+typedef void (APIENTRYP pfn_glGenerateMipmapEXT) (GLenum);
+extern pfn_glGenerateMipmapEXT fp_glGenerateMipmapEXT;
+
+ /* GL_EXT_framebuffer_sRGB */
+extern GLboolean GLAD_EXT_framebuffer_sRGB;
+#define GL_FRAMEBUFFER_SRGB_EXT                0x8DB9
+#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT        0x8DBA
+
+ /* GL_EXT_geometry_point_size */
+extern GLboolean GLAD_EXT_geometry_point_size;
+
+ /* GL_EXT_geometry_shader */
+extern GLboolean GLAD_EXT_geometry_shader;
+#define GL_GEOMETRY_SHADER_EXT                 0x8DD9
+#define GL_GEOMETRY_SHADER_BIT_EXT             0x00000004
+#define GL_GEOMETRY_LINKED_VERTICES_OUT_EXT    0x8916
+#define GL_GEOMETRY_LINKED_INPUT_TYPE_EXT      0x8917
+#define GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT     0x8918
+#define GL_GEOMETRY_SHADER_INVOCATIONS_EXT     0x887F
+#define GL_LAYER_PROVOKING_VERTEX_EXT          0x825E
+#define GL_LINES_ADJACENCY_EXT                 0x000A
+#define GL_LINE_STRIP_ADJACENCY_EXT            0x000B
+#define GL_TRIANGLES_ADJACENCY_EXT             0x000C
+#define GL_TRIANGLE_STRIP_ADJACENCY_EXT        0x000D
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT  0x8DDF
+#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT     0x8A2C
+#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT  0x8A32
+#define GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT   0x9123
+#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT  0x9124
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT    0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT  0x8DE1
+#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT  0x8E5A
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT  0x8C29
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT  0x92CF
+#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT    0x92D5
+#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT     0x90CD
+#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT  0x90D7
+#define GL_FIRST_VERTEX_CONVENTION_EXT         0x8E4D
+#define GL_LAST_VERTEX_CONVENTION_EXT          0x8E4E
+#define GL_UNDEFINED_VERTEX_EXT                0x8260
+#define GL_PRIMITIVES_GENERATED_EXT            0x8C87
+#define GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT      0x9312
+#define GL_MAX_FRAMEBUFFER_LAYERS_EXT          0x9317
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT  0x8DA8
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT  0x8DA7
+#define GL_REFERENCED_BY_GEOMETRY_SHADER_EXT   0x9309
+typedef void (APIENTRYP pfn_glFramebufferTextureEXT) (GLenum, GLenum, GLuint, GLint);
+extern pfn_glFramebufferTextureEXT fp_glFramebufferTextureEXT;
+
+ /* GL_EXT_geometry_shader4 */
+extern GLboolean GLAD_EXT_geometry_shader4;
+#define GL_GEOMETRY_VERTICES_OUT_EXT           0x8DDA
+#define GL_GEOMETRY_INPUT_TYPE_EXT             0x8DDB
+#define GL_GEOMETRY_OUTPUT_TYPE_EXT            0x8DDC
+#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT  0x8DDD
+#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT   0x8DDE
+#define GL_MAX_VARYING_COMPONENTS_EXT          0x8B4B
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT  0x8DA9
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT  0x8CD4
+#define GL_PROGRAM_POINT_SIZE_EXT              0x8642
+typedef void (APIENTRYP pfn_glProgramParameteriEXT) (GLuint, GLenum, GLint);
+extern pfn_glProgramParameteriEXT fp_glProgramParameteriEXT;
+
+ /* GL_EXT_gpu_program_parameters */
+extern GLboolean GLAD_EXT_gpu_program_parameters;
+typedef void (APIENTRYP pfn_glProgramEnvParameters4fvEXT) (GLenum, GLuint, GLsizei, const GLfloat*);
+extern pfn_glProgramEnvParameters4fvEXT fp_glProgramEnvParameters4fvEXT;
+typedef void (APIENTRYP pfn_glProgramLocalParameters4fvEXT) (GLenum, GLuint, GLsizei, const GLfloat*);
+extern pfn_glProgramLocalParameters4fvEXT fp_glProgramLocalParameters4fvEXT;
+
+ /* GL_EXT_gpu_shader4 */
+extern GLboolean GLAD_EXT_gpu_shader4;
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT     0x88FD
+#define GL_SAMPLER_1D_ARRAY_EXT                0x8DC0
+#define GL_SAMPLER_2D_ARRAY_EXT                0x8DC1
+#define GL_SAMPLER_BUFFER_EXT                  0x8DC2
+#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT         0x8DC3
+#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT         0x8DC4
+#define GL_SAMPLER_CUBE_SHADOW_EXT             0x8DC5
+#define GL_UNSIGNED_INT_VEC2_EXT               0x8DC6
+#define GL_UNSIGNED_INT_VEC3_EXT               0x8DC7
+#define GL_UNSIGNED_INT_VEC4_EXT               0x8DC8
+#define GL_INT_SAMPLER_1D_EXT                  0x8DC9
+#define GL_INT_SAMPLER_2D_EXT                  0x8DCA
+#define GL_INT_SAMPLER_3D_EXT                  0x8DCB
+#define GL_INT_SAMPLER_CUBE_EXT                0x8DCC
+#define GL_INT_SAMPLER_2D_RECT_EXT             0x8DCD
+#define GL_INT_SAMPLER_1D_ARRAY_EXT            0x8DCE
+#define GL_INT_SAMPLER_2D_ARRAY_EXT            0x8DCF
+#define GL_INT_SAMPLER_BUFFER_EXT              0x8DD0
+#define GL_UNSIGNED_INT_SAMPLER_1D_EXT         0x8DD1
+#define GL_UNSIGNED_INT_SAMPLER_2D_EXT         0x8DD2
+#define GL_UNSIGNED_INT_SAMPLER_3D_EXT         0x8DD3
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT       0x8DD4
+#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT    0x8DD5
+#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT   0x8DD6
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT   0x8DD7
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT     0x8DD8
+#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT        0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT        0x8905
+typedef void (APIENTRYP pfn_glGetUniformuivEXT) (GLuint, GLint, GLuint*);
+extern pfn_glGetUniformuivEXT fp_glGetUniformuivEXT;
+typedef void (APIENTRYP pfn_glBindFragDataLocationEXT) (GLuint, GLuint, const GLchar*);
+extern pfn_glBindFragDataLocationEXT fp_glBindFragDataLocationEXT;
+typedef GLint (APIENTRYP pfn_glGetFragDataLocationEXT) (GLuint, const GLchar*);
+extern pfn_glGetFragDataLocationEXT fp_glGetFragDataLocationEXT;
+typedef void (APIENTRYP pfn_glUniform1uiEXT) (GLint, GLuint);
+extern pfn_glUniform1uiEXT fp_glUniform1uiEXT;
+typedef void (APIENTRYP pfn_glUniform2uiEXT) (GLint, GLuint, GLuint);
+extern pfn_glUniform2uiEXT fp_glUniform2uiEXT;
+typedef void (APIENTRYP pfn_glUniform3uiEXT) (GLint, GLuint, GLuint, GLuint);
+extern pfn_glUniform3uiEXT fp_glUniform3uiEXT;
+typedef void (APIENTRYP pfn_glUniform4uiEXT) (GLint, GLuint, GLuint, GLuint, GLuint);
+extern pfn_glUniform4uiEXT fp_glUniform4uiEXT;
+typedef void (APIENTRYP pfn_glUniform1uivEXT) (GLint, GLsizei, const GLuint*);
+extern pfn_glUniform1uivEXT fp_glUniform1uivEXT;
+typedef void (APIENTRYP pfn_glUniform2uivEXT) (GLint, GLsizei, const GLuint*);
+extern pfn_glUniform2uivEXT fp_glUniform2uivEXT;
+typedef void (APIENTRYP pfn_glUniform3uivEXT) (GLint, GLsizei, const GLuint*);
+extern pfn_glUniform3uivEXT fp_glUniform3uivEXT;
+typedef void (APIENTRYP pfn_glUniform4uivEXT) (GLint, GLsizei, const GLuint*);
+extern pfn_glUniform4uivEXT fp_glUniform4uivEXT;
+
+ /* GL_EXT_gpu_shader5 */
+extern GLboolean GLAD_EXT_gpu_shader5;
+
+ /* GL_EXT_instanced_arrays */
+extern GLboolean GLAD_EXT_instanced_arrays;
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_EXT     0x88FE
+typedef void (APIENTRYP pfn_glVertexAttribDivisorEXT) (GLuint, GLuint);
+extern pfn_glVertexAttribDivisorEXT fp_glVertexAttribDivisorEXT;
+
+ /* GL_EXT_map_buffer_range */
+extern GLboolean GLAD_EXT_map_buffer_range;
+#define GL_MAP_READ_BIT_EXT                    0x0001
+#define GL_MAP_WRITE_BIT_EXT                   0x0002
+#define GL_MAP_INVALIDATE_RANGE_BIT_EXT        0x0004
+#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT       0x0008
+#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT          0x0010
+#define GL_MAP_UNSYNCHRONIZED_BIT_EXT          0x0020
+typedef void* (APIENTRYP pfn_glMapBufferRangeEXT) (GLenum, GLintptr, GLsizeiptr, GLbitfield);
+extern pfn_glMapBufferRangeEXT fp_glMapBufferRangeEXT;
+typedef void (APIENTRYP pfn_glFlushMappedBufferRangeEXT) (GLenum, GLintptr, GLsizeiptr);
+extern pfn_glFlushMappedBufferRangeEXT fp_glFlushMappedBufferRangeEXT;
+
+ /* GL_EXT_multisampled_render_to_texture */
+extern GLboolean GLAD_EXT_multisampled_render_to_texture;
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT  0x8D6C
+typedef void (APIENTRYP pfn_glFramebufferTexture2DMultisampleEXT) (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei);
+extern pfn_glFramebufferTexture2DMultisampleEXT fp_glFramebufferTexture2DMultisampleEXT;
+
+ /* GL_EXT_multiview_draw_buffers */
+extern GLboolean GLAD_EXT_multiview_draw_buffers;
+#define GL_COLOR_ATTACHMENT_EXT                0x90F0
+#define GL_MULTIVIEW_EXT                       0x90F1
+#define GL_DRAW_BUFFER_EXT                     0x0C01
+#define GL_READ_BUFFER_EXT                     0x0C02
+#define GL_MAX_MULTIVIEW_BUFFERS_EXT           0x90F2
+typedef void (APIENTRYP pfn_glReadBufferIndexedEXT) (GLenum, GLint);
+extern pfn_glReadBufferIndexedEXT fp_glReadBufferIndexedEXT;
+typedef void (APIENTRYP pfn_glDrawBuffersIndexedEXT) (GLint, const GLenum*, const GLint*);
+extern pfn_glDrawBuffersIndexedEXT fp_glDrawBuffersIndexedEXT;
+typedef void (APIENTRYP pfn_glGetIntegeri_vEXT) (GLenum, GLuint, GLint*);
+extern pfn_glGetIntegeri_vEXT fp_glGetIntegeri_vEXT;
+
+ /* GL_EXT_occlusion_query_boolean */
+extern GLboolean GLAD_EXT_occlusion_query_boolean;
+#define GL_ANY_SAMPLES_PASSED_EXT              0x8C2F
+#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT  0x8D6A
+
+ /* GL_EXT_packed_depth_stencil */
+extern GLboolean GLAD_EXT_packed_depth_stencil;
+#define GL_DEPTH_STENCIL_EXT                   0x84F9
+#define GL_UNSIGNED_INT_24_8_EXT               0x84FA
+#define GL_DEPTH24_STENCIL8_EXT                0x88F0
+#define GL_TEXTURE_STENCIL_SIZE_EXT            0x88F1
+
+ /* GL_EXT_packed_float */
+extern GLboolean GLAD_EXT_packed_float;
+#define GL_R11F_G11F_B10F_EXT                  0x8C3A
+#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT    0x8C3B
+#define GL_RGBA_SIGNED_COMPONENTS_EXT          0x8C3C
+
+ /* GL_EXT_pixel_buffer_object */
+extern GLboolean GLAD_EXT_pixel_buffer_object;
+#define GL_PIXEL_PACK_BUFFER_EXT               0x88EB
+#define GL_PIXEL_UNPACK_BUFFER_EXT             0x88EC
+#define GL_PIXEL_PACK_BUFFER_BINDING_EXT       0x88ED
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT     0x88EF
+
+ /* GL_EXT_primitive_bounding_box */
+extern GLboolean GLAD_EXT_primitive_bounding_box;
+#define GL_PRIMITIVE_BOUNDING_BOX_EXT          0x92BE
+typedef void (APIENTRYP pfn_glPrimitiveBoundingBoxEXT) (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+extern pfn_glPrimitiveBoundingBoxEXT fp_glPrimitiveBoundingBoxEXT;
+
+ /* GL_EXT_provoking_vertex */
+extern GLboolean GLAD_EXT_provoking_vertex;
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT  0x8E4C
+#define GL_PROVOKING_VERTEX_EXT                0x8E4F
+typedef void (APIENTRYP pfn_glProvokingVertexEXT) (GLenum);
+extern pfn_glProvokingVertexEXT fp_glProvokingVertexEXT;
+
+ /* GL_EXT_pvrtc_sRGB */
+extern GLboolean GLAD_EXT_pvrtc_sRGB;
+#define GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT    0x8A54
+#define GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT    0x8A55
+#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT  0x8A56
+#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT  0x8A57
+#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG  0x93F0
+#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG  0x93F1
+
+ /* GL_EXT_read_format_bgra */
+extern GLboolean GLAD_EXT_read_format_bgra;
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT      0x8365
+#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT      0x8366
+
+ /* GL_EXT_robustness */
+extern GLboolean GLAD_EXT_robustness;
+#define GL_GUILTY_CONTEXT_RESET_EXT            0x8253
+#define GL_INNOCENT_CONTEXT_RESET_EXT          0x8254
+#define GL_UNKNOWN_CONTEXT_RESET_EXT           0x8255
+#define GL_CONTEXT_ROBUST_ACCESS_EXT           0x90F3
+#define GL_RESET_NOTIFICATION_STRATEGY_EXT     0x8256
+#define GL_LOSE_CONTEXT_ON_RESET_EXT           0x8252
+#define GL_NO_RESET_NOTIFICATION_EXT           0x8261
+typedef GLenum (APIENTRYP pfn_glGetGraphicsResetStatusEXT) ();
+extern pfn_glGetGraphicsResetStatusEXT fp_glGetGraphicsResetStatusEXT;
+typedef void (APIENTRYP pfn_glReadnPixelsEXT) (GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLsizei, void*);
+extern pfn_glReadnPixelsEXT fp_glReadnPixelsEXT;
+typedef void (APIENTRYP pfn_glGetnUniformfvEXT) (GLuint, GLint, GLsizei, GLfloat*);
+extern pfn_glGetnUniformfvEXT fp_glGetnUniformfvEXT;
+typedef void (APIENTRYP pfn_glGetnUniformivEXT) (GLuint, GLint, GLsizei, GLint*);
+extern pfn_glGetnUniformivEXT fp_glGetnUniformivEXT;
+
+ /* GL_EXT_separate_shader_objects */
+extern GLboolean GLAD_EXT_separate_shader_objects;
+#define GL_ACTIVE_PROGRAM_EXT                  0x8B8D
+#define GL_VERTEX_SHADER_BIT_EXT               0x00000001
+#define GL_FRAGMENT_SHADER_BIT_EXT             0x00000002
+#define GL_ALL_SHADER_BITS_EXT                 0xFFFFFFFF
+#define GL_PROGRAM_SEPARABLE_EXT               0x8258
+#define GL_PROGRAM_PIPELINE_BINDING_EXT        0x825A
+typedef void (APIENTRYP pfn_glUseShaderProgramEXT) (GLenum, GLuint);
+extern pfn_glUseShaderProgramEXT fp_glUseShaderProgramEXT;
+typedef void (APIENTRYP pfn_glActiveProgramEXT) (GLuint);
+extern pfn_glActiveProgramEXT fp_glActiveProgramEXT;
+typedef GLuint (APIENTRYP pfn_glCreateShaderProgramEXT) (GLenum, const GLchar*);
+extern pfn_glCreateShaderProgramEXT fp_glCreateShaderProgramEXT;
+typedef void (APIENTRYP pfn_glActiveShaderProgramEXT) (GLuint, GLuint);
+extern pfn_glActiveShaderProgramEXT fp_glActiveShaderProgramEXT;
+typedef void (APIENTRYP pfn_glBindProgramPipelineEXT) (GLuint);
+extern pfn_glBindProgramPipelineEXT fp_glBindProgramPipelineEXT;
+typedef GLuint (APIENTRYP pfn_glCreateShaderProgramvEXT) (GLenum, GLsizei, const GLchar**);
+extern pfn_glCreateShaderProgramvEXT fp_glCreateShaderProgramvEXT;
+typedef void (APIENTRYP pfn_glDeleteProgramPipelinesEXT) (GLsizei, const GLuint*);
+extern pfn_glDeleteProgramPipelinesEXT fp_glDeleteProgramPipelinesEXT;
+typedef void (APIENTRYP pfn_glGenProgramPipelinesEXT) (GLsizei, GLuint*);
+extern pfn_glGenProgramPipelinesEXT fp_glGenProgramPipelinesEXT;
+typedef void (APIENTRYP pfn_glGetProgramPipelineInfoLogEXT) (GLuint, GLsizei, GLsizei*, GLchar*);
+extern pfn_glGetProgramPipelineInfoLogEXT fp_glGetProgramPipelineInfoLogEXT;
+typedef void (APIENTRYP pfn_glGetProgramPipelineivEXT) (GLuint, GLenum, GLint*);
+extern pfn_glGetProgramPipelineivEXT fp_glGetProgramPipelineivEXT;
+typedef GLboolean (APIENTRYP pfn_glIsProgramPipelineEXT) (GLuint);
+extern pfn_glIsProgramPipelineEXT fp_glIsProgramPipelineEXT;
+typedef void (APIENTRYP pfn_glUseProgramStagesEXT) (GLuint, GLbitfield, GLuint);
+extern pfn_glUseProgramStagesEXT fp_glUseProgramStagesEXT;
+typedef void (APIENTRYP pfn_glValidateProgramPipelineEXT) (GLuint);
+extern pfn_glValidateProgramPipelineEXT fp_glValidateProgramPipelineEXT;
+
+ /* GL_EXT_shader_framebuffer_fetch */
+extern GLboolean GLAD_EXT_shader_framebuffer_fetch;
+#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT  0x8A52
+
+ /* GL_EXT_shader_image_load_formatted */
+extern GLboolean GLAD_EXT_shader_image_load_formatted;
+
+ /* GL_EXT_shader_image_load_store */
+extern GLboolean GLAD_EXT_shader_image_load_store;
+#define GL_MAX_IMAGE_UNITS_EXT                 0x8F38
+#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT  0x8F39
+#define GL_IMAGE_BINDING_NAME_EXT              0x8F3A
+#define GL_IMAGE_BINDING_LEVEL_EXT             0x8F3B
+#define GL_IMAGE_BINDING_LAYERED_EXT           0x8F3C
+#define GL_IMAGE_BINDING_LAYER_EXT             0x8F3D
+#define GL_IMAGE_BINDING_ACCESS_EXT            0x8F3E
+#define GL_IMAGE_1D_EXT                        0x904C
+#define GL_IMAGE_2D_EXT                        0x904D
+#define GL_IMAGE_3D_EXT                        0x904E
+#define GL_IMAGE_2D_RECT_EXT                   0x904F
+#define GL_IMAGE_CUBE_EXT                      0x9050
+#define GL_IMAGE_BUFFER_EXT                    0x9051
+#define GL_IMAGE_1D_ARRAY_EXT                  0x9052
+#define GL_IMAGE_2D_ARRAY_EXT                  0x9053
+#define GL_IMAGE_CUBE_MAP_ARRAY_EXT            0x9054
+#define GL_IMAGE_2D_MULTISAMPLE_EXT            0x9055
+#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT      0x9056
+#define GL_INT_IMAGE_1D_EXT                    0x9057
+#define GL_INT_IMAGE_2D_EXT                    0x9058
+#define GL_INT_IMAGE_3D_EXT                    0x9059
+#define GL_INT_IMAGE_2D_RECT_EXT               0x905A
+#define GL_INT_IMAGE_CUBE_EXT                  0x905B
+#define GL_INT_IMAGE_BUFFER_EXT                0x905C
+#define GL_INT_IMAGE_1D_ARRAY_EXT              0x905D
+#define GL_INT_IMAGE_2D_ARRAY_EXT              0x905E
+#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT        0x905F
+#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT        0x9060
+#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT  0x9061
+#define GL_UNSIGNED_INT_IMAGE_1D_EXT           0x9062
+#define GL_UNSIGNED_INT_IMAGE_2D_EXT           0x9063
+#define GL_UNSIGNED_INT_IMAGE_3D_EXT           0x9064
+#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT      0x9065
+#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT         0x9066
+#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT       0x9067
+#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT     0x9068
+#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT     0x9069
+#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT  0x906A
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT  0x906B
+#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT  0x906C
+#define GL_MAX_IMAGE_SAMPLES_EXT               0x906D
+#define GL_IMAGE_BINDING_FORMAT_EXT            0x906E
+#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT  0x00000001
+#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT       0x00000002
+#define GL_UNIFORM_BARRIER_BIT_EXT             0x00000004
+#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT       0x00000008
+#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT  0x00000020
+#define GL_COMMAND_BARRIER_BIT_EXT             0x00000040
+#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT        0x00000080
+#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT      0x00000100
+#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT       0x00000200
+#define GL_FRAMEBUFFER_BARRIER_BIT_EXT         0x00000400
+#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT  0x00000800
+#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT      0x00001000
+#define GL_ALL_BARRIER_BITS_EXT                0xFFFFFFFF
+typedef void (APIENTRYP pfn_glBindImageTextureEXT) (GLuint, GLuint, GLint, GLboolean, GLint, GLenum, GLint);
+extern pfn_glBindImageTextureEXT fp_glBindImageTextureEXT;
+typedef void (APIENTRYP pfn_glMemoryBarrierEXT) (GLbitfield);
+extern pfn_glMemoryBarrierEXT fp_glMemoryBarrierEXT;
+
+ /* GL_EXT_shader_implicit_conversions */
+extern GLboolean GLAD_EXT_shader_implicit_conversions;
+
+ /* GL_EXT_shader_integer_mix */
+extern GLboolean GLAD_EXT_shader_integer_mix;
+
+ /* GL_EXT_shader_io_blocks */
+extern GLboolean GLAD_EXT_shader_io_blocks;
+
+ /* GL_EXT_shader_pixel_local_storage */
+extern GLboolean GLAD_EXT_shader_pixel_local_storage;
+#define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT  0x8F63
+#define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_SIZE_EXT  0x8F67
+#define GL_SHADER_PIXEL_LOCAL_STORAGE_EXT      0x8F64
+
+ /* GL_EXT_shader_texture_lod */
+extern GLboolean GLAD_EXT_shader_texture_lod;
+
+ /* GL_EXT_shadow_samplers */
+extern GLboolean GLAD_EXT_shadow_samplers;
+#define GL_TEXTURE_COMPARE_MODE_EXT            0x884C
+#define GL_TEXTURE_COMPARE_FUNC_EXT            0x884D
+#define GL_COMPARE_REF_TO_TEXTURE_EXT          0x884E
+#define GL_SAMPLER_2D_SHADOW_EXT               0x8B62
+
+ /* GL_EXT_sRGB */
+extern GLboolean GLAD_EXT_sRGB;
+#define GL_SRGB_EXT                            0x8C40
+#define GL_SRGB_ALPHA_EXT                      0x8C42
+#define GL_SRGB8_ALPHA8_EXT                    0x8C43
+#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT  0x8210
+
+ /* GL_EXT_sRGB_write_control */
+extern GLboolean GLAD_EXT_sRGB_write_control;
+
+ /* GL_EXT_stencil_clear_tag */
+extern GLboolean GLAD_EXT_stencil_clear_tag;
+#define GL_STENCIL_TAG_BITS_EXT                0x88F2
+#define GL_STENCIL_CLEAR_TAG_VALUE_EXT         0x88F3
+typedef void (APIENTRYP pfn_glStencilClearTagEXT) (GLsizei, GLuint);
+extern pfn_glStencilClearTagEXT fp_glStencilClearTagEXT;
+
+ /* GL_EXT_tessellation_point_size */
+extern GLboolean GLAD_EXT_tessellation_point_size;
+
+ /* GL_EXT_tessellation_shader */
+extern GLboolean GLAD_EXT_tessellation_shader;
+#define GL_PATCHES_EXT                         0x000E
+#define GL_PATCH_VERTICES_EXT                  0x8E72
+#define GL_TESS_CONTROL_OUTPUT_VERTICES_EXT    0x8E75
+#define GL_TESS_GEN_MODE_EXT                   0x8E76
+#define GL_TESS_GEN_SPACING_EXT                0x8E77
+#define GL_TESS_GEN_VERTEX_ORDER_EXT           0x8E78
+#define GL_TESS_GEN_POINT_MODE_EXT             0x8E79
+#define GL_ISOLINES_EXT                        0x8E7A
+#define GL_QUADS_EXT                           0x0007
+#define GL_FRACTIONAL_ODD_EXT                  0x8E7B
+#define GL_FRACTIONAL_EVEN_EXT                 0x8E7C
+#define GL_MAX_PATCH_VERTICES_EXT              0x8E7D
+#define GL_MAX_TESS_GEN_LEVEL_EXT              0x8E7E
+#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_EXT  0x8E7F
+#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT  0x8E80
+#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_EXT  0x8E81
+#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_EXT  0x8E82
+#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_EXT  0x8E83
+#define GL_MAX_TESS_PATCH_COMPONENTS_EXT       0x8E84
+#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_EXT  0x8E85
+#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_EXT  0x8E86
+#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_EXT  0x8E89
+#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_EXT  0x8E8A
+#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_EXT  0x886C
+#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_EXT  0x886D
+#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_EXT  0x8E1E
+#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT  0x8E1F
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_EXT  0x92CD
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_EXT  0x92CE
+#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_EXT  0x92D3
+#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_EXT  0x92D4
+#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_EXT  0x90CB
+#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_EXT  0x90CC
+#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_EXT  0x90D8
+#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_EXT  0x90D9
+#define GL_IS_PER_PATCH_EXT                    0x92E7
+#define GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT  0x9307
+#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT  0x9308
+#define GL_TESS_CONTROL_SHADER_EXT             0x8E88
+#define GL_TESS_EVALUATION_SHADER_EXT          0x8E87
+#define GL_TESS_CONTROL_SHADER_BIT_EXT         0x00000008
+#define GL_TESS_EVALUATION_SHADER_BIT_EXT      0x00000010
+typedef void (APIENTRYP pfn_glPatchParameteriEXT) (GLenum, GLint);
+extern pfn_glPatchParameteriEXT fp_glPatchParameteriEXT;
+
+ /* GL_EXT_texture_array */
+extern GLboolean GLAD_EXT_texture_array;
+#define GL_TEXTURE_1D_ARRAY_EXT                0x8C18
+#define GL_PROXY_TEXTURE_1D_ARRAY_EXT          0x8C19
+#define GL_TEXTURE_2D_ARRAY_EXT                0x8C1A
+#define GL_PROXY_TEXTURE_2D_ARRAY_EXT          0x8C1B
+#define GL_TEXTURE_BINDING_1D_ARRAY_EXT        0x8C1C
+#define GL_TEXTURE_BINDING_2D_ARRAY_EXT        0x8C1D
+#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT        0x88FF
+#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT    0x884E
+typedef void (APIENTRYP pfn_glFramebufferTextureLayerEXT) (GLenum, GLenum, GLuint, GLint, GLint);
+extern pfn_glFramebufferTextureLayerEXT fp_glFramebufferTextureLayerEXT;
+
+ /* GL_EXT_texture_border_clamp */
+extern GLboolean GLAD_EXT_texture_border_clamp;
+#define GL_TEXTURE_BORDER_COLOR_EXT            0x1004
+#define GL_CLAMP_TO_BORDER_EXT                 0x812D
+typedef void (APIENTRYP pfn_glTexParameterIivEXT) (GLenum, GLenum, const GLint*);
+extern pfn_glTexParameterIivEXT fp_glTexParameterIivEXT;
+typedef void (APIENTRYP pfn_glTexParameterIuivEXT) (GLenum, GLenum, const GLuint*);
+extern pfn_glTexParameterIuivEXT fp_glTexParameterIuivEXT;
+typedef void (APIENTRYP pfn_glGetTexParameterIivEXT) (GLenum, GLenum, GLint*);
+extern pfn_glGetTexParameterIivEXT fp_glGetTexParameterIivEXT;
+typedef void (APIENTRYP pfn_glGetTexParameterIuivEXT) (GLenum, GLenum, GLuint*);
+extern pfn_glGetTexParameterIuivEXT fp_glGetTexParameterIuivEXT;
+typedef void (APIENTRYP pfn_glSamplerParameterIivEXT) (GLuint, GLenum, const GLint*);
+extern pfn_glSamplerParameterIivEXT fp_glSamplerParameterIivEXT;
+typedef void (APIENTRYP pfn_glSamplerParameterIuivEXT) (GLuint, GLenum, const GLuint*);
+extern pfn_glSamplerParameterIuivEXT fp_glSamplerParameterIuivEXT;
+typedef void (APIENTRYP pfn_glGetSamplerParameterIivEXT) (GLuint, GLenum, GLint*);
+extern pfn_glGetSamplerParameterIivEXT fp_glGetSamplerParameterIivEXT;
+typedef void (APIENTRYP pfn_glGetSamplerParameterIuivEXT) (GLuint, GLenum, GLuint*);
+extern pfn_glGetSamplerParameterIuivEXT fp_glGetSamplerParameterIuivEXT;
+
+ /* GL_EXT_texture_buffer */
+extern GLboolean GLAD_EXT_texture_buffer;
+#define GL_TEXTURE_BUFFER_EXT                  0x8C2A
+#define GL_TEXTURE_BUFFER_BINDING_EXT          0x8C2A
+#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT         0x8C2B
+#define GL_TEXTURE_BINDING_BUFFER_EXT          0x8C2C
+#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT  0x8C2D
+#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_EXT  0x919F
+#define GL_TEXTURE_BUFFER_OFFSET_EXT           0x919D
+#define GL_TEXTURE_BUFFER_SIZE_EXT             0x919E
+typedef void (APIENTRYP pfn_glTexBufferEXT) (GLenum, GLenum, GLuint);
+extern pfn_glTexBufferEXT fp_glTexBufferEXT;
+typedef void (APIENTRYP pfn_glTexBufferRangeEXT) (GLenum, GLenum, GLuint, GLintptr, GLsizeiptr);
+extern pfn_glTexBufferRangeEXT fp_glTexBufferRangeEXT;
+
+ /* GL_EXT_texture_buffer_object */
+extern GLboolean GLAD_EXT_texture_buffer_object;
+#define GL_TEXTURE_BUFFER_FORMAT_EXT           0x8C2E
+
+ /* GL_EXT_texture_compression_dxt1 */
+extern GLboolean GLAD_EXT_texture_compression_dxt1;
+#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT        0x83F0
+#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT       0x83F1
+
+ /* GL_EXT_texture_compression_latc */
+extern GLboolean GLAD_EXT_texture_compression_latc;
+#define GL_COMPRESSED_LUMINANCE_LATC1_EXT      0x8C70
+#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT  0x8C71
+#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT  0x8C72
+#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT  0x8C73
+
+ /* GL_EXT_texture_compression_rgtc */
+extern GLboolean GLAD_EXT_texture_compression_rgtc;
+#define GL_COMPRESSED_RED_RGTC1_EXT            0x8DBB
+#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT     0x8DBC
+#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT      0x8DBD
+#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT  0x8DBE
+
+ /* GL_EXT_texture_compression_s3tc */
+extern GLboolean GLAD_EXT_texture_compression_s3tc;
+#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT       0x83F2
+#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT       0x83F3
+
+ /* GL_EXT_texture_cube_map */
+extern GLboolean GLAD_EXT_texture_cube_map;
+#define GL_NORMAL_MAP_EXT                      0x8511
+#define GL_REFLECTION_MAP_EXT                  0x8512
+#define GL_TEXTURE_CUBE_MAP_EXT                0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP_EXT        0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT     0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT     0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT     0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT     0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT     0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT     0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP_EXT          0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT       0x851C
+
+ /* GL_EXT_texture_cube_map_array */
+extern GLboolean GLAD_EXT_texture_cube_map_array;
+#define GL_TEXTURE_CUBE_MAP_ARRAY_EXT          0x9009
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT  0x900A
+#define GL_SAMPLER_CUBE_MAP_ARRAY_EXT          0x900C
+#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT   0x900D
+#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_EXT      0x900E
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT  0x900F
+
+ /* GL_EXT_texture_filter_anisotropic */
+extern GLboolean GLAD_EXT_texture_filter_anisotropic;
+#define GL_TEXTURE_MAX_ANISOTROPY_EXT          0x84FE
+#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT      0x84FF
+
+ /* GL_EXT_texture_format_BGRA8888 */
+extern GLboolean GLAD_EXT_texture_format_BGRA8888;
+
+ /* GL_EXT_texture_integer */
+extern GLboolean GLAD_EXT_texture_integer;
+#define GL_RGBA32UI_EXT                        0x8D70
+#define GL_RGB32UI_EXT                         0x8D71
+#define GL_ALPHA32UI_EXT                       0x8D72
+#define GL_INTENSITY32UI_EXT                   0x8D73
+#define GL_LUMINANCE32UI_EXT                   0x8D74
+#define GL_LUMINANCE_ALPHA32UI_EXT             0x8D75
+#define GL_RGBA16UI_EXT                        0x8D76
+#define GL_RGB16UI_EXT                         0x8D77
+#define GL_ALPHA16UI_EXT                       0x8D78
+#define GL_INTENSITY16UI_EXT                   0x8D79
+#define GL_LUMINANCE16UI_EXT                   0x8D7A
+#define GL_LUMINANCE_ALPHA16UI_EXT             0x8D7B
+#define GL_RGBA8UI_EXT                         0x8D7C
+#define GL_RGB8UI_EXT                          0x8D7D
+#define GL_ALPHA8UI_EXT                        0x8D7E
+#define GL_INTENSITY8UI_EXT                    0x8D7F
+#define GL_LUMINANCE8UI_EXT                    0x8D80
+#define GL_LUMINANCE_ALPHA8UI_EXT              0x8D81
+#define GL_RGBA32I_EXT                         0x8D82
+#define GL_RGB32I_EXT                          0x8D83
+#define GL_ALPHA32I_EXT                        0x8D84
+#define GL_INTENSITY32I_EXT                    0x8D85
+#define GL_LUMINANCE32I_EXT                    0x8D86
+#define GL_LUMINANCE_ALPHA32I_EXT              0x8D87
+#define GL_RGBA16I_EXT                         0x8D88
+#define GL_RGB16I_EXT                          0x8D89
+#define GL_ALPHA16I_EXT                        0x8D8A
+#define GL_INTENSITY16I_EXT                    0x8D8B
+#define GL_LUMINANCE16I_EXT                    0x8D8C
+#define GL_LUMINANCE_ALPHA16I_EXT              0x8D8D
+#define GL_RGBA8I_EXT                          0x8D8E
+#define GL_RGB8I_EXT                           0x8D8F
+#define GL_ALPHA8I_EXT                         0x8D90
+#define GL_INTENSITY8I_EXT                     0x8D91
+#define GL_LUMINANCE8I_EXT                     0x8D92
+#define GL_LUMINANCE_ALPHA8I_EXT               0x8D93
+#define GL_RED_INTEGER_EXT                     0x8D94
+#define GL_GREEN_INTEGER_EXT                   0x8D95
+#define GL_BLUE_INTEGER_EXT                    0x8D96
+#define GL_ALPHA_INTEGER_EXT                   0x8D97
+#define GL_RGB_INTEGER_EXT                     0x8D98
+#define GL_RGBA_INTEGER_EXT                    0x8D99
+#define GL_BGR_INTEGER_EXT                     0x8D9A
+#define GL_BGRA_INTEGER_EXT                    0x8D9B
+#define GL_LUMINANCE_INTEGER_EXT               0x8D9C
+#define GL_LUMINANCE_ALPHA_INTEGER_EXT         0x8D9D
+#define GL_RGBA_INTEGER_MODE_EXT               0x8D9E
+typedef void (APIENTRYP pfn_glClearColorIiEXT) (GLint, GLint, GLint, GLint);
+extern pfn_glClearColorIiEXT fp_glClearColorIiEXT;
+typedef void (APIENTRYP pfn_glClearColorIuiEXT) (GLuint, GLuint, GLuint, GLuint);
+extern pfn_glClearColorIuiEXT fp_glClearColorIuiEXT;
+
+ /* GL_EXT_texture_rg */
+extern GLboolean GLAD_EXT_texture_rg;
+#define GL_RED_EXT                             0x1903
+#define GL_RG_EXT                              0x8227
+#define GL_R8_EXT                              0x8229
+#define GL_RG8_EXT                             0x822B
+
+ /* GL_EXT_texture_shared_exponent */
+extern GLboolean GLAD_EXT_texture_shared_exponent;
+#define GL_RGB9_E5_EXT                         0x8C3D
+#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT        0x8C3E
+#define GL_TEXTURE_SHARED_SIZE_EXT             0x8C3F
+
+ /* GL_EXT_texture_snorm */
+extern GLboolean GLAD_EXT_texture_snorm;
+#define GL_ALPHA_SNORM                         0x9010
+#define GL_LUMINANCE_SNORM                     0x9011
+#define GL_LUMINANCE_ALPHA_SNORM               0x9012
+#define GL_INTENSITY_SNORM                     0x9013
+#define GL_ALPHA8_SNORM                        0x9014
+#define GL_LUMINANCE8_SNORM                    0x9015
+#define GL_LUMINANCE8_ALPHA8_SNORM             0x9016
+#define GL_INTENSITY8_SNORM                    0x9017
+#define GL_ALPHA16_SNORM                       0x9018
+#define GL_LUMINANCE16_SNORM                   0x9019
+#define GL_LUMINANCE16_ALPHA16_SNORM           0x901A
+#define GL_INTENSITY16_SNORM                   0x901B
+#define GL_RED_SNORM                           0x8F90
+#define GL_RG_SNORM                            0x8F91
+#define GL_RGB_SNORM                           0x8F92
+#define GL_RGBA_SNORM                          0x8F93
+
+ /* GL_EXT_texture_sRGB */
+extern GLboolean GLAD_EXT_texture_sRGB;
+#define GL_SRGB8_EXT                           0x8C41
+#define GL_SLUMINANCE_ALPHA_EXT                0x8C44
+#define GL_SLUMINANCE8_ALPHA8_EXT              0x8C45
+#define GL_SLUMINANCE_EXT                      0x8C46
+#define GL_SLUMINANCE8_EXT                     0x8C47
+#define GL_COMPRESSED_SRGB_EXT                 0x8C48
+#define GL_COMPRESSED_SRGB_ALPHA_EXT           0x8C49
+#define GL_COMPRESSED_SLUMINANCE_EXT           0x8C4A
+#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT     0x8C4B
+#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT       0x8C4C
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT  0x8C4D
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT  0x8C4E
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT  0x8C4F
+
+ /* GL_EXT_texture_sRGB_decode */
+extern GLboolean GLAD_EXT_texture_sRGB_decode;
+#define GL_TEXTURE_SRGB_DECODE_EXT             0x8A48
+#define GL_DECODE_EXT                          0x8A49
+#define GL_SKIP_DECODE_EXT                     0x8A4A
+
+ /* GL_EXT_texture_storage */
+extern GLboolean GLAD_EXT_texture_storage;
+#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT        0x912F
+#define GL_ALPHA8_EXT                          0x803C
+#define GL_LUMINANCE8_EXT                      0x8040
+#define GL_LUMINANCE8_ALPHA8_EXT               0x8045
+#define GL_RGBA32F_EXT                         0x8814
+#define GL_RGB32F_EXT                          0x8815
+#define GL_ALPHA32F_EXT                        0x8816
+#define GL_LUMINANCE32F_EXT                    0x8818
+#define GL_LUMINANCE_ALPHA32F_EXT              0x8819
+#define GL_ALPHA16F_EXT                        0x881C
+#define GL_LUMINANCE16F_EXT                    0x881E
+#define GL_LUMINANCE_ALPHA16F_EXT              0x881F
+#define GL_RGB10_A2_EXT                        0x8059
+#define GL_RGB10_EXT                           0x8052
+#define GL_BGRA8_EXT                           0x93A1
+#define GL_R32F_EXT                            0x822E
+#define GL_RG32F_EXT                           0x8230
+typedef void (APIENTRYP pfn_glTexStorage1DEXT) (GLenum, GLsizei, GLenum, GLsizei);
+extern pfn_glTexStorage1DEXT fp_glTexStorage1DEXT;
+typedef void (APIENTRYP pfn_glTexStorage2DEXT) (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
+extern pfn_glTexStorage2DEXT fp_glTexStorage2DEXT;
+typedef void (APIENTRYP pfn_glTexStorage3DEXT) (GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei);
+extern pfn_glTexStorage3DEXT fp_glTexStorage3DEXT;
+
+ /* GL_EXT_texture_swizzle */
+extern GLboolean GLAD_EXT_texture_swizzle;
+#define GL_TEXTURE_SWIZZLE_R_EXT               0x8E42
+#define GL_TEXTURE_SWIZZLE_G_EXT               0x8E43
+#define GL_TEXTURE_SWIZZLE_B_EXT               0x8E44
+#define GL_TEXTURE_SWIZZLE_A_EXT               0x8E45
+#define GL_TEXTURE_SWIZZLE_RGBA_EXT            0x8E46
+
+ /* GL_EXT_texture_type_2_10_10_10_REV */
+extern GLboolean GLAD_EXT_texture_type_2_10_10_10_REV;
+#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT     0x8368
+
+ /* GL_EXT_texture_view */
+extern GLboolean GLAD_EXT_texture_view;
+#define GL_TEXTURE_VIEW_MIN_LEVEL_EXT          0x82DB
+#define GL_TEXTURE_VIEW_NUM_LEVELS_EXT         0x82DC
+#define GL_TEXTURE_VIEW_MIN_LAYER_EXT          0x82DD
+#define GL_TEXTURE_VIEW_NUM_LAYERS_EXT         0x82DE
+typedef void (APIENTRYP pfn_glTextureViewEXT) (GLuint, GLenum, GLuint, GLenum, GLuint, GLuint, GLuint, GLuint);
+extern pfn_glTextureViewEXT fp_glTextureViewEXT;
+
+ /* GL_EXT_timer_query */
+extern GLboolean GLAD_EXT_timer_query;
+
+ /* GL_EXT_transform_feedback */
+extern GLboolean GLAD_EXT_transform_feedback;
+#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT       0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT  0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT  0x8C85
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT  0x8C8F
+#define GL_INTERLEAVED_ATTRIBS_EXT             0x8C8C
+#define GL_SEPARATE_ATTRIBS_EXT                0x8C8D
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT  0x8C88
+#define GL_RASTERIZER_DISCARD_EXT              0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT  0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT  0x8C8B
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT  0x8C80
+#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT     0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT  0x8C7F
+#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT  0x8C76
+typedef void (APIENTRYP pfn_glBeginTransformFeedbackEXT) (GLenum);
+extern pfn_glBeginTransformFeedbackEXT fp_glBeginTransformFeedbackEXT;
+typedef void (APIENTRYP pfn_glEndTransformFeedbackEXT) ();
+extern pfn_glEndTransformFeedbackEXT fp_glEndTransformFeedbackEXT;
+typedef void (APIENTRYP pfn_glBindBufferRangeEXT) (GLenum, GLuint, GLuint, GLintptr, GLsizeiptr);
+extern pfn_glBindBufferRangeEXT fp_glBindBufferRangeEXT;
+typedef void (APIENTRYP pfn_glBindBufferOffsetEXT) (GLenum, GLuint, GLuint, GLintptr);
+extern pfn_glBindBufferOffsetEXT fp_glBindBufferOffsetEXT;
+typedef void (APIENTRYP pfn_glBindBufferBaseEXT) (GLenum, GLuint, GLuint);
+extern pfn_glBindBufferBaseEXT fp_glBindBufferBaseEXT;
+typedef void (APIENTRYP pfn_glTransformFeedbackVaryingsEXT) (GLuint, GLsizei, const GLchar**, GLenum);
+extern pfn_glTransformFeedbackVaryingsEXT fp_glTransformFeedbackVaryingsEXT;
+typedef void (APIENTRYP pfn_glGetTransformFeedbackVaryingEXT) (GLuint, GLuint, GLsizei, GLsizei*, GLsizei*, GLenum*, GLchar*);
+extern pfn_glGetTransformFeedbackVaryingEXT fp_glGetTransformFeedbackVaryingEXT;
+
+ /* GL_EXT_unpack_subimage */
+extern GLboolean GLAD_EXT_unpack_subimage;
+#define GL_UNPACK_ROW_LENGTH_EXT               0x0CF2
+#define GL_UNPACK_SKIP_ROWS_EXT                0x0CF3
+#define GL_UNPACK_SKIP_PIXELS_EXT              0x0CF4
+
+ /* GL_EXT_vertex_array_bgra */
+extern GLboolean GLAD_EXT_vertex_array_bgra;
+
+ /* GL_EXT_vertex_attrib_64bit */
+extern GLboolean GLAD_EXT_vertex_attrib_64bit;
+#define GL_DOUBLE_VEC2_EXT                     0x8FFC
+#define GL_DOUBLE_VEC3_EXT                     0x8FFD
+#define GL_DOUBLE_VEC4_EXT                     0x8FFE
+#define GL_DOUBLE_MAT2_EXT                     0x8F46
+#define GL_DOUBLE_MAT3_EXT                     0x8F47
+#define GL_DOUBLE_MAT4_EXT                     0x8F48
+#define GL_DOUBLE_MAT2x3_EXT                   0x8F49
+#define GL_DOUBLE_MAT2x4_EXT                   0x8F4A
+#define GL_DOUBLE_MAT3x2_EXT                   0x8F4B
+#define GL_DOUBLE_MAT3x4_EXT                   0x8F4C
+#define GL_DOUBLE_MAT4x2_EXT                   0x8F4D
+#define GL_DOUBLE_MAT4x3_EXT                   0x8F4E
+typedef void (APIENTRYP pfn_glVertexAttribL1dEXT) (GLuint, GLdouble);
+extern pfn_glVertexAttribL1dEXT fp_glVertexAttribL1dEXT;
+typedef void (APIENTRYP pfn_glVertexAttribL2dEXT) (GLuint, GLdouble, GLdouble);
+extern pfn_glVertexAttribL2dEXT fp_glVertexAttribL2dEXT;
+typedef void (APIENTRYP pfn_glVertexAttribL3dEXT) (GLuint, GLdouble, GLdouble, GLdouble);
+extern pfn_glVertexAttribL3dEXT fp_glVertexAttribL3dEXT;
+typedef void (APIENTRYP pfn_glVertexAttribL4dEXT) (GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
+extern pfn_glVertexAttribL4dEXT fp_glVertexAttribL4dEXT;
+typedef void (APIENTRYP pfn_glVertexAttribL1dvEXT) (GLuint, const GLdouble*);
+extern pfn_glVertexAttribL1dvEXT fp_glVertexAttribL1dvEXT;
+typedef void (APIENTRYP pfn_glVertexAttribL2dvEXT) (GLuint, const GLdouble*);
+extern pfn_glVertexAttribL2dvEXT fp_glVertexAttribL2dvEXT;
+typedef void (APIENTRYP pfn_glVertexAttribL3dvEXT) (GLuint, const GLdouble*);
+extern pfn_glVertexAttribL3dvEXT fp_glVertexAttribL3dvEXT;
+typedef void (APIENTRYP pfn_glVertexAttribL4dvEXT) (GLuint, const GLdouble*);
+extern pfn_glVertexAttribL4dvEXT fp_glVertexAttribL4dvEXT;
+typedef void (APIENTRYP pfn_glVertexAttribLPointerEXT) (GLuint, GLint, GLenum, GLsizei, const void*);
+extern pfn_glVertexAttribLPointerEXT fp_glVertexAttribLPointerEXT;
+typedef void (APIENTRYP pfn_glGetVertexAttribLdvEXT) (GLuint, GLenum, GLdouble*);
+extern pfn_glGetVertexAttribLdvEXT fp_glGetVertexAttribLdvEXT;
+
+ /* GL_EXT_x11_sync_object */
+extern GLboolean GLAD_EXT_x11_sync_object;
+#define GL_SYNC_X11_FENCE_EXT                  0x90E1
+typedef GLsync (APIENTRYP pfn_glImportSyncEXT) (GLenum, GLintptr, GLbitfield);
+extern pfn_glImportSyncEXT fp_glImportSyncEXT;
+
+ /* GL_OES_compressed_ETC1_RGB8_sub_texture */
+extern GLboolean GLAD_OES_compressed_ETC1_RGB8_sub_texture;
+
+ /* GL_OES_compressed_ETC1_RGB8_texture */
+extern GLboolean GLAD_OES_compressed_ETC1_RGB8_texture;
+#define GL_ETC1_RGB8_OES                       0x8D64
+
+ /* GL_OES_depth24 */
+extern GLboolean GLAD_OES_depth24;
+#define GL_DEPTH_COMPONENT24_OES               0x81A6
+
+ /* GL_OES_depth32 */
+extern GLboolean GLAD_OES_depth32;
+#define GL_DEPTH_COMPONENT32_OES               0x81A7
+
+ /* GL_OES_depth_texture */
+extern GLboolean GLAD_OES_depth_texture;
+
+ /* GL_OES_EGL_image */
+extern GLboolean GLAD_OES_EGL_image;
+typedef void (APIENTRYP pfn_glEGLImageTargetTexture2DOES) (GLenum, GLeglImageOES);
+extern pfn_glEGLImageTargetTexture2DOES fp_glEGLImageTargetTexture2DOES;
+typedef void (APIENTRYP pfn_glEGLImageTargetRenderbufferStorageOES) (GLenum, GLeglImageOES);
+extern pfn_glEGLImageTargetRenderbufferStorageOES fp_glEGLImageTargetRenderbufferStorageOES;
+
+ /* GL_OES_EGL_image_external */
+extern GLboolean GLAD_OES_EGL_image_external;
+#define GL_TEXTURE_EXTERNAL_OES                0x8D65
+#define GL_TEXTURE_BINDING_EXTERNAL_OES        0x8D67
+#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES    0x8D68
+#define GL_SAMPLER_EXTERNAL_OES                0x8D66
+
+ /* GL_OES_element_index_uint */
+extern GLboolean GLAD_OES_element_index_uint;
+
+ /* GL_OES_fbo_render_mipmap */
+extern GLboolean GLAD_OES_fbo_render_mipmap;
+
+ /* GL_OES_fragment_precision_high */
+extern GLboolean GLAD_OES_fragment_precision_high;
+
+ /* GL_OES_get_program_binary */
+extern GLboolean GLAD_OES_get_program_binary;
+#define GL_PROGRAM_BINARY_LENGTH_OES           0x8741
+#define GL_NUM_PROGRAM_BINARY_FORMATS_OES      0x87FE
+#define GL_PROGRAM_BINARY_FORMATS_OES          0x87FF
+typedef void (APIENTRYP pfn_glGetProgramBinaryOES) (GLuint, GLsizei, GLsizei*, GLenum*, void*);
+extern pfn_glGetProgramBinaryOES fp_glGetProgramBinaryOES;
+typedef void (APIENTRYP pfn_glProgramBinaryOES) (GLuint, GLenum, const void*, GLint);
+extern pfn_glProgramBinaryOES fp_glProgramBinaryOES;
+
+ /* GL_OES_mapbuffer */
+extern GLboolean GLAD_OES_mapbuffer;
+#define GL_WRITE_ONLY_OES                      0x88B9
+#define GL_BUFFER_ACCESS_OES                   0x88BB
+#define GL_BUFFER_MAPPED_OES                   0x88BC
+#define GL_BUFFER_MAP_POINTER_OES              0x88BD
+typedef void* (APIENTRYP pfn_glMapBufferOES) (GLenum, GLenum);
+extern pfn_glMapBufferOES fp_glMapBufferOES;
+typedef GLboolean (APIENTRYP pfn_glUnmapBufferOES) (GLenum);
+extern pfn_glUnmapBufferOES fp_glUnmapBufferOES;
+typedef void (APIENTRYP pfn_glGetBufferPointervOES) (GLenum, GLenum, void**);
+extern pfn_glGetBufferPointervOES fp_glGetBufferPointervOES;
+
+ /* GL_OES_packed_depth_stencil */
+extern GLboolean GLAD_OES_packed_depth_stencil;
+#define GL_DEPTH_STENCIL_OES                   0x84F9
+#define GL_UNSIGNED_INT_24_8_OES               0x84FA
+#define GL_DEPTH24_STENCIL8_OES                0x88F0
+
+ /* GL_OES_required_internalformat */
+extern GLboolean GLAD_OES_required_internalformat;
+#define GL_ALPHA8_OES                          0x803C
+#define GL_DEPTH_COMPONENT16_OES               0x81A5
+#define GL_LUMINANCE4_ALPHA4_OES               0x8043
+#define GL_LUMINANCE8_ALPHA8_OES               0x8045
+#define GL_LUMINANCE8_OES                      0x8040
+#define GL_RGBA4_OES                           0x8056
+#define GL_RGB5_A1_OES                         0x8057
+#define GL_RGB565_OES                          0x8D62
+#define GL_RGB8_OES                            0x8051
+#define GL_RGBA8_OES                           0x8058
+
+ /* GL_OES_rgb8_rgba8 */
+extern GLboolean GLAD_OES_rgb8_rgba8;
+
+ /* GL_OES_sample_shading */
+extern GLboolean GLAD_OES_sample_shading;
+#define GL_SAMPLE_SHADING_OES                  0x8C36
+#define GL_MIN_SAMPLE_SHADING_VALUE_OES        0x8C37
+typedef void (APIENTRYP pfn_glMinSampleShadingOES) (GLfloat);
+extern pfn_glMinSampleShadingOES fp_glMinSampleShadingOES;
+
+ /* GL_OES_sample_variables */
+extern GLboolean GLAD_OES_sample_variables;
+
+ /* GL_OES_shader_image_atomic */
+extern GLboolean GLAD_OES_shader_image_atomic;
+
+ /* GL_OES_shader_multisample_interpolation */
+extern GLboolean GLAD_OES_shader_multisample_interpolation;
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_OES  0x8E5B
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_OES  0x8E5C
+#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS_OES  0x8E5D
+
+ /* GL_OES_standard_derivatives */
+extern GLboolean GLAD_OES_standard_derivatives;
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES  0x8B8B
+
+ /* GL_OES_stencil1 */
+extern GLboolean GLAD_OES_stencil1;
+#define GL_STENCIL_INDEX1_OES                  0x8D46
+
+ /* GL_OES_stencil4 */
+extern GLboolean GLAD_OES_stencil4;
+#define GL_STENCIL_INDEX4_OES                  0x8D47
+
+ /* GL_OES_surfaceless_context */
+extern GLboolean GLAD_OES_surfaceless_context;
+#define GL_FRAMEBUFFER_UNDEFINED_OES           0x8219
+
+ /* GL_OES_texture_3D */
+extern GLboolean GLAD_OES_texture_3D;
+#define GL_TEXTURE_WRAP_R_OES                  0x8072
+#define GL_TEXTURE_3D_OES                      0x806F
+#define GL_TEXTURE_BINDING_3D_OES              0x806A
+#define GL_MAX_3D_TEXTURE_SIZE_OES             0x8073
+#define GL_SAMPLER_3D_OES                      0x8B5F
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES  0x8CD4
+typedef void (APIENTRYP pfn_glTexImage3DOES) (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const void*);
+extern pfn_glTexImage3DOES fp_glTexImage3DOES;
+typedef void (APIENTRYP pfn_glTexSubImage3DOES) (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const void*);
+extern pfn_glTexSubImage3DOES fp_glTexSubImage3DOES;
+typedef void (APIENTRYP pfn_glCopyTexSubImage3DOES) (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+extern pfn_glCopyTexSubImage3DOES fp_glCopyTexSubImage3DOES;
+typedef void (APIENTRYP pfn_glCompressedTexImage3DOES) (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const void*);
+extern pfn_glCompressedTexImage3DOES fp_glCompressedTexImage3DOES;
+typedef void (APIENTRYP pfn_glCompressedTexSubImage3DOES) (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const void*);
+extern pfn_glCompressedTexSubImage3DOES fp_glCompressedTexSubImage3DOES;
+typedef void (APIENTRYP pfn_glFramebufferTexture3DOES) (GLenum, GLenum, GLenum, GLuint, GLint, GLint);
+extern pfn_glFramebufferTexture3DOES fp_glFramebufferTexture3DOES;
+
+ /* GL_OES_texture_compression_astc */
+extern GLboolean GLAD_OES_texture_compression_astc;
+#define GL_COMPRESSED_RGBA_ASTC_3x3x3_OES      0x93C0
+#define GL_COMPRESSED_RGBA_ASTC_4x3x3_OES      0x93C1
+#define GL_COMPRESSED_RGBA_ASTC_4x4x3_OES      0x93C2
+#define GL_COMPRESSED_RGBA_ASTC_4x4x4_OES      0x93C3
+#define GL_COMPRESSED_RGBA_ASTC_5x4x4_OES      0x93C4
+#define GL_COMPRESSED_RGBA_ASTC_5x5x4_OES      0x93C5
+#define GL_COMPRESSED_RGBA_ASTC_5x5x5_OES      0x93C6
+#define GL_COMPRESSED_RGBA_ASTC_6x5x5_OES      0x93C7
+#define GL_COMPRESSED_RGBA_ASTC_6x6x5_OES      0x93C8
+#define GL_COMPRESSED_RGBA_ASTC_6x6x6_OES      0x93C9
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES  0x93E0
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES  0x93E1
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES  0x93E2
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES  0x93E3
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES  0x93E4
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES  0x93E5
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES  0x93E6
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES  0x93E7
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES  0x93E8
+#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES  0x93E9
+
+ /* GL_OES_texture_float */
+extern GLboolean GLAD_OES_texture_float;
+
+ /* GL_OES_texture_float_linear */
+extern GLboolean GLAD_OES_texture_float_linear;
+
+ /* GL_OES_texture_half_float */
+extern GLboolean GLAD_OES_texture_half_float;
+#define GL_HALF_FLOAT_OES                      0x8D61
+
+ /* GL_OES_texture_half_float_linear */
+extern GLboolean GLAD_OES_texture_half_float_linear;
+
+ /* GL_OES_texture_npot */
+extern GLboolean GLAD_OES_texture_npot;
+
+ /* GL_OES_texture_stencil8 */
+extern GLboolean GLAD_OES_texture_stencil8;
+#define GL_STENCIL_INDEX_OES                   0x1901
+#define GL_STENCIL_INDEX8_OES                  0x8D48
+
+ /* GL_OES_texture_storage_multisample_2d_array */
+extern GLboolean GLAD_OES_texture_storage_multisample_2d_array;
+#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES    0x9102
+#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY_OES  0x9105
+#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY_OES    0x910B
+#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES  0x910C
+#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES  0x910D
+typedef void (APIENTRYP pfn_glTexStorage3DMultisampleOES) (GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean);
+extern pfn_glTexStorage3DMultisampleOES fp_glTexStorage3DMultisampleOES;
+
+ /* GL_OES_vertex_array_object */
+extern GLboolean GLAD_OES_vertex_array_object;
+#define GL_VERTEX_ARRAY_BINDING_OES            0x85B5
+typedef void (APIENTRYP pfn_glBindVertexArrayOES) (GLuint);
+extern pfn_glBindVertexArrayOES fp_glBindVertexArrayOES;
+typedef void (APIENTRYP pfn_glDeleteVertexArraysOES) (GLsizei, const GLuint*);
+extern pfn_glDeleteVertexArraysOES fp_glDeleteVertexArraysOES;
+typedef void (APIENTRYP pfn_glGenVertexArraysOES) (GLsizei, GLuint*);
+extern pfn_glGenVertexArraysOES fp_glGenVertexArraysOES;
+typedef GLboolean (APIENTRYP pfn_glIsVertexArrayOES) (GLuint);
+extern pfn_glIsVertexArrayOES fp_glIsVertexArrayOES;
+
+ /* GL_OES_vertex_half_float */
+extern GLboolean GLAD_OES_vertex_half_float;
+
+ /* GL_OES_vertex_type_10_10_10_2 */
+extern GLboolean GLAD_OES_vertex_type_10_10_10_2;
+#define GL_UNSIGNED_INT_10_10_10_2_OES         0x8DF6
+#define GL_INT_10_10_10_2_OES                  0x8DF7
+
+ /* GL_AMD_blend_minmax_factor */
+extern GLboolean GLAD_AMD_blend_minmax_factor;
+#define GL_FACTOR_MIN_AMD                      0x901C
+#define GL_FACTOR_MAX_AMD                      0x901D
+
+ /* GL_AMD_compressed_3DC_texture */
+extern GLboolean GLAD_AMD_compressed_3DC_texture;
+#define GL_3DC_X_AMD                           0x87F9
+#define GL_3DC_XY_AMD                          0x87FA
+
+ /* GL_AMD_compressed_ATC_texture */
+extern GLboolean GLAD_AMD_compressed_ATC_texture;
+#define GL_ATC_RGB_AMD                         0x8C92
+#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD         0x8C93
+#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD     0x87EE
+
+ /* GL_AMD_conservative_depth */
+extern GLboolean GLAD_AMD_conservative_depth;
+
+ /* GL_AMD_debug_output */
+extern GLboolean GLAD_AMD_debug_output;
+#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD        0x9143
+#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD       0x9144
+#define GL_DEBUG_LOGGED_MESSAGES_AMD           0x9145
+#define GL_DEBUG_SEVERITY_HIGH_AMD             0x9146
+#define GL_DEBUG_SEVERITY_MEDIUM_AMD           0x9147
+#define GL_DEBUG_SEVERITY_LOW_AMD              0x9148
+#define GL_DEBUG_CATEGORY_API_ERROR_AMD        0x9149
+#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD    0x914A
+#define GL_DEBUG_CATEGORY_DEPRECATION_AMD      0x914B
+#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD  0x914C
+#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD      0x914D
+#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD  0x914E
+#define GL_DEBUG_CATEGORY_APPLICATION_AMD      0x914F
+#define GL_DEBUG_CATEGORY_OTHER_AMD            0x9150
+typedef void (APIENTRYP pfn_glDebugMessageEnableAMD) (GLenum, GLenum, GLsizei, const GLuint*, GLboolean);
+extern pfn_glDebugMessageEnableAMD fp_glDebugMessageEnableAMD;
+typedef void (APIENTRYP pfn_glDebugMessageInsertAMD) (GLenum, GLenum, GLuint, GLsizei, const GLchar*);
+extern pfn_glDebugMessageInsertAMD fp_glDebugMessageInsertAMD;
+typedef void (APIENTRYP pfn_glDebugMessageCallbackAMD) (GLDEBUGPROCAMD, void*);
+extern pfn_glDebugMessageCallbackAMD fp_glDebugMessageCallbackAMD;
+typedef GLuint (APIENTRYP pfn_glGetDebugMessageLogAMD) (GLuint, GLsizei, GLenum*, GLuint*, GLuint*, GLsizei*, GLchar*);
+extern pfn_glGetDebugMessageLogAMD fp_glGetDebugMessageLogAMD;
+
+ /* GL_AMD_depth_clamp_separate */
+extern GLboolean GLAD_AMD_depth_clamp_separate;
+#define GL_DEPTH_CLAMP_NEAR_AMD                0x901E
+#define GL_DEPTH_CLAMP_FAR_AMD                 0x901F
+
+ /* GL_AMD_draw_buffers_blend */
+extern GLboolean GLAD_AMD_draw_buffers_blend;
+typedef void (APIENTRYP pfn_glBlendFuncIndexedAMD) (GLuint, GLenum, GLenum);
+extern pfn_glBlendFuncIndexedAMD fp_glBlendFuncIndexedAMD;
+typedef void (APIENTRYP pfn_glBlendFuncSeparateIndexedAMD) (GLuint, GLenum, GLenum, GLenum, GLenum);
+extern pfn_glBlendFuncSeparateIndexedAMD fp_glBlendFuncSeparateIndexedAMD;
+typedef void (APIENTRYP pfn_glBlendEquationIndexedAMD) (GLuint, GLenum);
+extern pfn_glBlendEquationIndexedAMD fp_glBlendEquationIndexedAMD;
+typedef void (APIENTRYP pfn_glBlendEquationSeparateIndexedAMD) (GLuint, GLenum, GLenum);
+extern pfn_glBlendEquationSeparateIndexedAMD fp_glBlendEquationSeparateIndexedAMD;
+
+ /* GL_AMD_gcn_shader */
+extern GLboolean GLAD_AMD_gcn_shader;
+
+ /* GL_AMD_gpu_shader_int64 */
+extern GLboolean GLAD_AMD_gpu_shader_int64;
+#define GL_INT64_NV                            0x140E
+#define GL_UNSIGNED_INT64_NV                   0x140F
+#define GL_INT8_NV                             0x8FE0
+#define GL_INT8_VEC2_NV                        0x8FE1
+#define GL_INT8_VEC3_NV                        0x8FE2
+#define GL_INT8_VEC4_NV                        0x8FE3
+#define GL_INT16_NV                            0x8FE4
+#define GL_INT16_VEC2_NV                       0x8FE5
+#define GL_INT16_VEC3_NV                       0x8FE6
+#define GL_INT16_VEC4_NV                       0x8FE7
+#define GL_INT64_VEC2_NV                       0x8FE9
+#define GL_INT64_VEC3_NV                       0x8FEA
+#define GL_INT64_VEC4_NV                       0x8FEB
+#define GL_UNSIGNED_INT8_NV                    0x8FEC
+#define GL_UNSIGNED_INT8_VEC2_NV               0x8FED
+#define GL_UNSIGNED_INT8_VEC3_NV               0x8FEE
+#define GL_UNSIGNED_INT8_VEC4_NV               0x8FEF
+#define GL_UNSIGNED_INT16_NV                   0x8FF0
+#define GL_UNSIGNED_INT16_VEC2_NV              0x8FF1
+#define GL_UNSIGNED_INT16_VEC3_NV              0x8FF2
+#define GL_UNSIGNED_INT16_VEC4_NV              0x8FF3
+#define GL_UNSIGNED_INT64_VEC2_NV              0x8FF5
+#define GL_UNSIGNED_INT64_VEC3_NV              0x8FF6
+#define GL_UNSIGNED_INT64_VEC4_NV              0x8FF7
+#define GL_FLOAT16_NV                          0x8FF8
+#define GL_FLOAT16_VEC2_NV                     0x8FF9
+#define GL_FLOAT16_VEC3_NV                     0x8FFA
+#define GL_FLOAT16_VEC4_NV                     0x8FFB
+typedef void (APIENTRYP pfn_glUniform1i64NV) (GLint, GLint64EXT);
+extern pfn_glUniform1i64NV fp_glUniform1i64NV;
+typedef void (APIENTRYP pfn_glUniform2i64NV) (GLint, GLint64EXT, GLint64EXT);
+extern pfn_glUniform2i64NV fp_glUniform2i64NV;
+typedef void (APIENTRYP pfn_glUniform3i64NV) (GLint, GLint64EXT, GLint64EXT, GLint64EXT);
+extern pfn_glUniform3i64NV fp_glUniform3i64NV;
+typedef void (APIENTRYP pfn_glUniform4i64NV) (GLint, GLint64EXT, GLint64EXT, GLint64EXT, GLint64EXT);
+extern pfn_glUniform4i64NV fp_glUniform4i64NV;
+typedef void (APIENTRYP pfn_glUniform1i64vNV) (GLint, GLsizei, const GLint64EXT*);
+extern pfn_glUniform1i64vNV fp_glUniform1i64vNV;
+typedef void (APIENTRYP pfn_glUniform2i64vNV) (GLint, GLsizei, const GLint64EXT*);
+extern pfn_glUniform2i64vNV fp_glUniform2i64vNV;
+typedef void (APIENTRYP pfn_glUniform3i64vNV) (GLint, GLsizei, const GLint64EXT*);
+extern pfn_glUniform3i64vNV fp_glUniform3i64vNV;
+typedef void (APIENTRYP pfn_glUniform4i64vNV) (GLint, GLsizei, const GLint64EXT*);
+extern pfn_glUniform4i64vNV fp_glUniform4i64vNV;
+typedef void (APIENTRYP pfn_glUniform1ui64NV) (GLint, GLuint64EXT);
+extern pfn_glUniform1ui64NV fp_glUniform1ui64NV;
+typedef void (APIENTRYP pfn_glUniform2ui64NV) (GLint, GLuint64EXT, GLuint64EXT);
+extern pfn_glUniform2ui64NV fp_glUniform2ui64NV;
+typedef void (APIENTRYP pfn_glUniform3ui64NV) (GLint, GLuint64EXT, GLuint64EXT, GLuint64EXT);
+extern pfn_glUniform3ui64NV fp_glUniform3ui64NV;
+typedef void (APIENTRYP pfn_glUniform4ui64NV) (GLint, GLuint64EXT, GLuint64EXT, GLuint64EXT, GLuint64EXT);
+extern pfn_glUniform4ui64NV fp_glUniform4ui64NV;
+typedef void (APIENTRYP pfn_glUniform1ui64vNV) (GLint, GLsizei, const GLuint64EXT*);
+extern pfn_glUniform1ui64vNV fp_glUniform1ui64vNV;
+typedef void (APIENTRYP pfn_glUniform2ui64vNV) (GLint, GLsizei, const GLuint64EXT*);
+extern pfn_glUniform2ui64vNV fp_glUniform2ui64vNV;
+typedef void (APIENTRYP pfn_glUniform3ui64vNV) (GLint, GLsizei, const GLuint64EXT*);
+extern pfn_glUniform3ui64vNV fp_glUniform3ui64vNV;
+typedef void (APIENTRYP pfn_glUniform4ui64vNV) (GLint, GLsizei, const GLuint64EXT*);
+extern pfn_glUniform4ui64vNV fp_glUniform4ui64vNV;
+typedef void (APIENTRYP pfn_glGetUniformi64vNV) (GLuint, GLint, GLint64EXT*);
+extern pfn_glGetUniformi64vNV fp_glGetUniformi64vNV;
+typedef void (APIENTRYP pfn_glGetUniformui64vNV) (GLuint, GLint, GLuint64EXT*);
+extern pfn_glGetUniformui64vNV fp_glGetUniformui64vNV;
+typedef void (APIENTRYP pfn_glProgramUniform1i64NV) (GLuint, GLint, GLint64EXT);
+extern pfn_glProgramUniform1i64NV fp_glProgramUniform1i64NV;
+typedef void (APIENTRYP pfn_glProgramUniform2i64NV) (GLuint, GLint, GLint64EXT, GLint64EXT);
+extern pfn_glProgramUniform2i64NV fp_glProgramUniform2i64NV;
+typedef void (APIENTRYP pfn_glProgramUniform3i64NV) (GLuint, GLint, GLint64EXT, GLint64EXT, GLint64EXT);
+extern pfn_glProgramUniform3i64NV fp_glProgramUniform3i64NV;
+typedef void (APIENTRYP pfn_glProgramUniform4i64NV) (GLuint, GLint, GLint64EXT, GLint64EXT, GLint64EXT, GLint64EXT);
+extern pfn_glProgramUniform4i64NV fp_glProgramUniform4i64NV;
+typedef void (APIENTRYP pfn_glProgramUniform1i64vNV) (GLuint, GLint, GLsizei, const GLint64EXT*);
+extern pfn_glProgramUniform1i64vNV fp_glProgramUniform1i64vNV;
+typedef void (APIENTRYP pfn_glProgramUniform2i64vNV) (GLuint, GLint, GLsizei, const GLint64EXT*);
+extern pfn_glProgramUniform2i64vNV fp_glProgramUniform2i64vNV;
+typedef void (APIENTRYP pfn_glProgramUniform3i64vNV) (GLuint, GLint, GLsizei, const GLint64EXT*);
+extern pfn_glProgramUniform3i64vNV fp_glProgramUniform3i64vNV;
+typedef void (APIENTRYP pfn_glProgramUniform4i64vNV) (GLuint, GLint, GLsizei, const GLint64EXT*);
+extern pfn_glProgramUniform4i64vNV fp_glProgramUniform4i64vNV;
+typedef void (APIENTRYP pfn_glProgramUniform1ui64NV) (GLuint, GLint, GLuint64EXT);
+extern pfn_glProgramUniform1ui64NV fp_glProgramUniform1ui64NV;
+typedef void (APIENTRYP pfn_glProgramUniform2ui64NV) (GLuint, GLint, GLuint64EXT, GLuint64EXT);
+extern pfn_glProgramUniform2ui64NV fp_glProgramUniform2ui64NV;
+typedef void (APIENTRYP pfn_glProgramUniform3ui64NV) (GLuint, GLint, GLuint64EXT, GLuint64EXT, GLuint64EXT);
+extern pfn_glProgramUniform3ui64NV fp_glProgramUniform3ui64NV;
+typedef void (APIENTRYP pfn_glProgramUniform4ui64NV) (GLuint, GLint, GLuint64EXT, GLuint64EXT, GLuint64EXT, GLuint64EXT);
+extern pfn_glProgramUniform4ui64NV fp_glProgramUniform4ui64NV;
+typedef void (APIENTRYP pfn_glProgramUniform1ui64vNV) (GLuint, GLint, GLsizei, const GLuint64EXT*);
+extern pfn_glProgramUniform1ui64vNV fp_glProgramUniform1ui64vNV;
+typedef void (APIENTRYP pfn_glProgramUniform2ui64vNV) (GLuint, GLint, GLsizei, const GLuint64EXT*);
+extern pfn_glProgramUniform2ui64vNV fp_glProgramUniform2ui64vNV;
+typedef void (APIENTRYP pfn_glProgramUniform3ui64vNV) (GLuint, GLint, GLsizei, const GLuint64EXT*);
+extern pfn_glProgramUniform3ui64vNV fp_glProgramUniform3ui64vNV;
+typedef void (APIENTRYP pfn_glProgramUniform4ui64vNV) (GLuint, GLint, GLsizei, const GLuint64EXT*);
+extern pfn_glProgramUniform4ui64vNV fp_glProgramUniform4ui64vNV;
+
+ /* GL_AMD_interleaved_elements */
+extern GLboolean GLAD_AMD_interleaved_elements;
+#define GL_VERTEX_ELEMENT_SWIZZLE_AMD          0x91A4
+#define GL_VERTEX_ID_SWIZZLE_AMD               0x91A5
+typedef void (APIENTRYP pfn_glVertexAttribParameteriAMD) (GLuint, GLenum, GLint);
+extern pfn_glVertexAttribParameteriAMD fp_glVertexAttribParameteriAMD;
+
+ /* GL_AMD_multi_draw_indirect */
+extern GLboolean GLAD_AMD_multi_draw_indirect;
+typedef void (APIENTRYP pfn_glMultiDrawArraysIndirectAMD) (GLenum, const void*, GLsizei, GLsizei);
+extern pfn_glMultiDrawArraysIndirectAMD fp_glMultiDrawArraysIndirectAMD;
+typedef void (APIENTRYP pfn_glMultiDrawElementsIndirectAMD) (GLenum, GLenum, const void*, GLsizei, GLsizei);
+extern pfn_glMultiDrawElementsIndirectAMD fp_glMultiDrawElementsIndirectAMD;
+
+ /* GL_AMD_name_gen_delete */
+extern GLboolean GLAD_AMD_name_gen_delete;
+#define GL_DATA_BUFFER_AMD                     0x9151
+#define GL_PERFORMANCE_MONITOR_AMD             0x9152
+#define GL_QUERY_OBJECT_AMD                    0x9153
+#define GL_VERTEX_ARRAY_OBJECT_AMD             0x9154
+#define GL_SAMPLER_OBJECT_AMD                  0x9155
+typedef void (APIENTRYP pfn_glGenNamesAMD) (GLenum, GLuint, GLuint*);
+extern pfn_glGenNamesAMD fp_glGenNamesAMD;
+typedef void (APIENTRYP pfn_glDeleteNamesAMD) (GLenum, GLuint, const GLuint*);
+extern pfn_glDeleteNamesAMD fp_glDeleteNamesAMD;
+typedef GLboolean (APIENTRYP pfn_glIsNameAMD) (GLenum, GLuint);
+extern pfn_glIsNameAMD fp_glIsNameAMD;
+
+ /* GL_AMD_occlusion_query_event */
+extern GLboolean GLAD_AMD_occlusion_query_event;
+#define GL_OCCLUSION_QUERY_EVENT_MASK_AMD      0x874F
+#define GL_QUERY_DEPTH_PASS_EVENT_BIT_AMD      0x00000001
+#define GL_QUERY_DEPTH_FAIL_EVENT_BIT_AMD      0x00000002
+#define GL_QUERY_STENCIL_FAIL_EVENT_BIT_AMD    0x00000004
+#define GL_QUERY_DEPTH_BOUNDS_FAIL_EVENT_BIT_AMD  0x00000008
+#define GL_QUERY_ALL_EVENT_BITS_AMD            0xFFFFFFFF
+typedef void (APIENTRYP pfn_glQueryObjectParameteruiAMD) (GLenum, GLuint, GLenum, GLuint);
+extern pfn_glQueryObjectParameteruiAMD fp_glQueryObjectParameteruiAMD;
+
+ /* GL_AMD_performance_monitor */
+extern GLboolean GLAD_AMD_performance_monitor;
+#define GL_COUNTER_TYPE_AMD                    0x8BC0
+#define GL_COUNTER_RANGE_AMD                   0x8BC1
+#define GL_UNSIGNED_INT64_AMD                  0x8BC2
+#define GL_PERCENTAGE_AMD                      0x8BC3
+#define GL_PERFMON_RESULT_AVAILABLE_AMD        0x8BC4
+#define GL_PERFMON_RESULT_SIZE_AMD             0x8BC5
+#define GL_PERFMON_RESULT_AMD                  0x8BC6
+typedef void (APIENTRYP pfn_glGetPerfMonitorGroupsAMD) (GLint*, GLsizei, GLuint*);
+extern pfn_glGetPerfMonitorGroupsAMD fp_glGetPerfMonitorGroupsAMD;
+typedef void (APIENTRYP pfn_glGetPerfMonitorCountersAMD) (GLuint, GLint*, GLint*, GLsizei, GLuint*);
+extern pfn_glGetPerfMonitorCountersAMD fp_glGetPerfMonitorCountersAMD;
+typedef void (APIENTRYP pfn_glGetPerfMonitorGroupStringAMD) (GLuint, GLsizei, GLsizei*, GLchar*);
+extern pfn_glGetPerfMonitorGroupStringAMD fp_glGetPerfMonitorGroupStringAMD;
+typedef void (APIENTRYP pfn_glGetPerfMonitorCounterStringAMD) (GLuint, GLuint, GLsizei, GLsizei*, GLchar*);
+extern pfn_glGetPerfMonitorCounterStringAMD fp_glGetPerfMonitorCounterStringAMD;
+typedef void (APIENTRYP pfn_glGetPerfMonitorCounterInfoAMD) (GLuint, GLuint, GLenum, void*);
+extern pfn_glGetPerfMonitorCounterInfoAMD fp_glGetPerfMonitorCounterInfoAMD;
+typedef void (APIENTRYP pfn_glGenPerfMonitorsAMD) (GLsizei, GLuint*);
+extern pfn_glGenPerfMonitorsAMD fp_glGenPerfMonitorsAMD;
+typedef void (APIENTRYP pfn_glDeletePerfMonitorsAMD) (GLsizei, GLuint*);
+extern pfn_glDeletePerfMonitorsAMD fp_glDeletePerfMonitorsAMD;
+typedef void (APIENTRYP pfn_glSelectPerfMonitorCountersAMD) (GLuint, GLboolean, GLuint, GLint, GLuint*);
+extern pfn_glSelectPerfMonitorCountersAMD fp_glSelectPerfMonitorCountersAMD;
+typedef void (APIENTRYP pfn_glBeginPerfMonitorAMD) (GLuint);
+extern pfn_glBeginPerfMonitorAMD fp_glBeginPerfMonitorAMD;
+typedef void (APIENTRYP pfn_glEndPerfMonitorAMD) (GLuint);
+extern pfn_glEndPerfMonitorAMD fp_glEndPerfMonitorAMD;
+typedef void (APIENTRYP pfn_glGetPerfMonitorCounterDataAMD) (GLuint, GLenum, GLsizei, GLuint*, GLint*);
+extern pfn_glGetPerfMonitorCounterDataAMD fp_glGetPerfMonitorCounterDataAMD;
+
+ /* GL_AMD_pinned_memory */
+extern GLboolean GLAD_AMD_pinned_memory;
+#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD  0x9160
+
+ /* GL_AMD_program_binary_Z400 */
+extern GLboolean GLAD_AMD_program_binary_Z400;
+#define GL_Z400_BINARY_AMD                     0x8740
+
+ /* GL_AMD_query_buffer_object */
+extern GLboolean GLAD_AMD_query_buffer_object;
+#define GL_QUERY_BUFFER_AMD                    0x9192
+#define GL_QUERY_BUFFER_BINDING_AMD            0x9193
+#define GL_QUERY_RESULT_NO_WAIT_AMD            0x9194
+
+ /* GL_AMD_sample_positions */
+extern GLboolean GLAD_AMD_sample_positions;
+#define GL_SUBSAMPLE_DISTANCE_AMD              0x883F
+typedef void (APIENTRYP pfn_glSetMultisamplefvAMD) (GLenum, GLuint, const GLfloat*);
+extern pfn_glSetMultisamplefvAMD fp_glSetMultisamplefvAMD;
+
+ /* GL_AMD_seamless_cubemap_per_texture */
+extern GLboolean GLAD_AMD_seamless_cubemap_per_texture;
+
+ /* GL_AMD_shader_atomic_counter_ops */
+extern GLboolean GLAD_AMD_shader_atomic_counter_ops;
+
+ /* GL_AMD_shader_stencil_export */
+extern GLboolean GLAD_AMD_shader_stencil_export;
+
+ /* GL_AMD_shader_trinary_minmax */
+extern GLboolean GLAD_AMD_shader_trinary_minmax;
+
+ /* GL_AMD_sparse_texture */
+extern GLboolean GLAD_AMD_sparse_texture;
+#define GL_VIRTUAL_PAGE_SIZE_X_AMD             0x9195
+#define GL_VIRTUAL_PAGE_SIZE_Y_AMD             0x9196
+#define GL_VIRTUAL_PAGE_SIZE_Z_AMD             0x9197
+#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD         0x9198
+#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD      0x9199
+#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS     0x919A
+#define GL_MIN_SPARSE_LEVEL_AMD                0x919B
+#define GL_MIN_LOD_WARNING_AMD                 0x919C
+#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD      0x00000001
+typedef void (APIENTRYP pfn_glTexStorageSparseAMD) (GLenum, GLenum, GLsizei, GLsizei, GLsizei, GLsizei, GLbitfield);
+extern pfn_glTexStorageSparseAMD fp_glTexStorageSparseAMD;
+typedef void (APIENTRYP pfn_glTextureStorageSparseAMD) (GLuint, GLenum, GLenum, GLsizei, GLsizei, GLsizei, GLsizei, GLbitfield);
+extern pfn_glTextureStorageSparseAMD fp_glTextureStorageSparseAMD;
+
+ /* GL_AMD_stencil_operation_extended */
+extern GLboolean GLAD_AMD_stencil_operation_extended;
+#define GL_SET_AMD                             0x874A
+#define GL_REPLACE_VALUE_AMD                   0x874B
+#define GL_STENCIL_OP_VALUE_AMD                0x874C
+#define GL_STENCIL_BACK_OP_VALUE_AMD           0x874D
+typedef void (APIENTRYP pfn_glStencilOpValueAMD) (GLenum, GLuint);
+extern pfn_glStencilOpValueAMD fp_glStencilOpValueAMD;
+
+ /* GL_AMD_texture_texture4 */
+extern GLboolean GLAD_AMD_texture_texture4;
+
+ /* GL_AMD_transform_feedback3_lines_triangles */
+extern GLboolean GLAD_AMD_transform_feedback3_lines_triangles;
+
+ /* GL_AMD_transform_feedback4 */
+extern GLboolean GLAD_AMD_transform_feedback4;
+#define GL_STREAM_RASTERIZATION_AMD            0x91A0
+
+ /* GL_AMD_vertex_shader_layer */
+extern GLboolean GLAD_AMD_vertex_shader_layer;
+
+ /* GL_AMD_vertex_shader_tessellator */
+extern GLboolean GLAD_AMD_vertex_shader_tessellator;
+#define GL_SAMPLER_BUFFER_AMD                  0x9001
+#define GL_INT_SAMPLER_BUFFER_AMD              0x9002
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD     0x9003
+#define GL_TESSELLATION_MODE_AMD               0x9004
+#define GL_TESSELLATION_FACTOR_AMD             0x9005
+#define GL_DISCRETE_AMD                        0x9006
+#define GL_CONTINUOUS_AMD                      0x9007
+typedef void (APIENTRYP pfn_glTessellationFactorAMD) (GLfloat);
+extern pfn_glTessellationFactorAMD fp_glTessellationFactorAMD;
+typedef void (APIENTRYP pfn_glTessellationModeAMD) (GLenum);
+extern pfn_glTessellationModeAMD fp_glTessellationModeAMD;
+
+ /* GL_AMD_vertex_shader_viewport_index */
+extern GLboolean GLAD_AMD_vertex_shader_viewport_index;
+
+ /* GL_ANDROID_extension_pack_es31a */
+extern GLboolean GLAD_ANDROID_extension_pack_es31a;
+
+ /* GL_ANGLE_depth_texture */
+extern GLboolean GLAD_ANGLE_depth_texture;
+
+ /* GL_ANGLE_framebuffer_blit */
+extern GLboolean GLAD_ANGLE_framebuffer_blit;
+#define GL_READ_FRAMEBUFFER_ANGLE              0x8CA8
+#define GL_DRAW_FRAMEBUFFER_ANGLE              0x8CA9
+#define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE      0x8CA6
+#define GL_READ_FRAMEBUFFER_BINDING_ANGLE      0x8CAA
+typedef void (APIENTRYP pfn_glBlitFramebufferANGLE) (GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum);
+extern pfn_glBlitFramebufferANGLE fp_glBlitFramebufferANGLE;
+
+ /* GL_ANGLE_framebuffer_multisample */
+extern GLboolean GLAD_ANGLE_framebuffer_multisample;
+#define GL_RENDERBUFFER_SAMPLES_ANGLE          0x8CAB
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE  0x8D56
+#define GL_MAX_SAMPLES_ANGLE                   0x8D57
+typedef void (APIENTRYP pfn_glRenderbufferStorageMultisampleANGLE) (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
+extern pfn_glRenderbufferStorageMultisampleANGLE fp_glRenderbufferStorageMultisampleANGLE;
+
+ /* GL_ANGLE_instanced_arrays */
+extern GLboolean GLAD_ANGLE_instanced_arrays;
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE   0x88FE
+typedef void (APIENTRYP pfn_glDrawArraysInstancedANGLE) (GLenum, GLint, GLsizei, GLsizei);
+extern pfn_glDrawArraysInstancedANGLE fp_glDrawArraysInstancedANGLE;
+typedef void (APIENTRYP pfn_glDrawElementsInstancedANGLE) (GLenum, GLsizei, GLenum, const void*, GLsizei);
+extern pfn_glDrawElementsInstancedANGLE fp_glDrawElementsInstancedANGLE;
+typedef void (APIENTRYP pfn_glVertexAttribDivisorANGLE) (GLuint, GLuint);
+extern pfn_glVertexAttribDivisorANGLE fp_glVertexAttribDivisorANGLE;
+
+ /* GL_ANGLE_pack_reverse_row_order */
+extern GLboolean GLAD_ANGLE_pack_reverse_row_order;
+#define GL_PACK_REVERSE_ROW_ORDER_ANGLE        0x93A4
+
+ /* GL_ANGLE_program_binary */
+extern GLboolean GLAD_ANGLE_program_binary;
+#define GL_PROGRAM_BINARY_ANGLE                0x93A6
+
+ /* GL_ANGLE_texture_compression_dxt3 */
+extern GLboolean GLAD_ANGLE_texture_compression_dxt3;
+#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE     0x83F2
+
+ /* GL_ANGLE_texture_compression_dxt5 */
+extern GLboolean GLAD_ANGLE_texture_compression_dxt5;
+#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE     0x83F3
+
+ /* GL_ANGLE_texture_usage */
+extern GLboolean GLAD_ANGLE_texture_usage;
+#define GL_TEXTURE_USAGE_ANGLE                 0x93A2
+#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE        0x93A3
+
+ /* GL_ANGLE_translated_shader_source */
+extern GLboolean GLAD_ANGLE_translated_shader_source;
+#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE  0x93A0
+typedef void (APIENTRYP pfn_glGetTranslatedShaderSourceANGLE) (GLuint, GLsizei, GLsizei*, GLchar*);
+extern pfn_glGetTranslatedShaderSourceANGLE fp_glGetTranslatedShaderSourceANGLE;
+
+ /* GL_APPLE_aux_depth_stencil */
+extern GLboolean GLAD_APPLE_aux_depth_stencil;
+#define GL_AUX_DEPTH_STENCIL_APPLE             0x8A14
+
+ /* GL_APPLE_client_storage */
+extern GLboolean GLAD_APPLE_client_storage;
+#define GL_UNPACK_CLIENT_STORAGE_APPLE         0x85B2
+
+ /* GL_APPLE_copy_texture_levels */
+extern GLboolean GLAD_APPLE_copy_texture_levels;
+typedef void (APIENTRYP pfn_glCopyTextureLevelsAPPLE) (GLuint, GLuint, GLint, GLsizei);
+extern pfn_glCopyTextureLevelsAPPLE fp_glCopyTextureLevelsAPPLE;
+
+ /* GL_APPLE_element_array */
+extern GLboolean GLAD_APPLE_element_array;
+#define GL_ELEMENT_ARRAY_APPLE                 0x8A0C
+#define GL_ELEMENT_ARRAY_TYPE_APPLE            0x8A0D
+#define GL_ELEMENT_ARRAY_POINTER_APPLE         0x8A0E
+typedef void (APIENTRYP pfn_glElementPointerAPPLE) (GLenum, const void*);
+extern pfn_glElementPointerAPPLE fp_glElementPointerAPPLE;
+typedef void (APIENTRYP pfn_glDrawElementArrayAPPLE) (GLenum, GLint, GLsizei);
+extern pfn_glDrawElementArrayAPPLE fp_glDrawElementArrayAPPLE;
+typedef void (APIENTRYP pfn_glDrawRangeElementArrayAPPLE) (GLenum, GLuint, GLuint, GLint, GLsizei);
+extern pfn_glDrawRangeElementArrayAPPLE fp_glDrawRangeElementArrayAPPLE;
+typedef void (APIENTRYP pfn_glMultiDrawElementArrayAPPLE) (GLenum, const GLint*, const GLsizei*, GLsizei);
+extern pfn_glMultiDrawElementArrayAPPLE fp_glMultiDrawElementArrayAPPLE;
+typedef void (APIENTRYP pfn_glMultiDrawRangeElementArrayAPPLE) (GLenum, GLuint, GLuint, const GLint*, const GLsizei*, GLsizei);
+extern pfn_glMultiDrawRangeElementArrayAPPLE fp_glMultiDrawRangeElementArrayAPPLE;
+
+ /* GL_APPLE_fence */
+extern GLboolean GLAD_APPLE_fence;
+#define GL_DRAW_PIXELS_APPLE                   0x8A0A
+#define GL_FENCE_APPLE                         0x8A0B
+typedef void (APIENTRYP pfn_glGenFencesAPPLE) (GLsizei, GLuint*);
+extern pfn_glGenFencesAPPLE fp_glGenFencesAPPLE;
+typedef void (APIENTRYP pfn_glDeleteFencesAPPLE) (GLsizei, const GLuint*);
+extern pfn_glDeleteFencesAPPLE fp_glDeleteFencesAPPLE;
+typedef void (APIENTRYP pfn_glSetFenceAPPLE) (GLuint);
+extern pfn_glSetFenceAPPLE fp_glSetFenceAPPLE;
+typedef GLboolean (APIENTRYP pfn_glIsFenceAPPLE) (GLuint);
+extern pfn_glIsFenceAPPLE fp_glIsFenceAPPLE;
+typedef GLboolean (APIENTRYP pfn_glTestFenceAPPLE) (GLuint);
+extern pfn_glTestFenceAPPLE fp_glTestFenceAPPLE;
+typedef void (APIENTRYP pfn_glFinishFenceAPPLE) (GLuint);
+extern pfn_glFinishFenceAPPLE fp_glFinishFenceAPPLE;
+typedef GLboolean (APIENTRYP pfn_glTestObjectAPPLE) (GLenum, GLuint);
+extern pfn_glTestObjectAPPLE fp_glTestObjectAPPLE;
+typedef void (APIENTRYP pfn_glFinishObjectAPPLE) (GLenum, GLint);
+extern pfn_glFinishObjectAPPLE fp_glFinishObjectAPPLE;
+
+ /* GL_APPLE_float_pixels */
+extern GLboolean GLAD_APPLE_float_pixels;
+#define GL_HALF_APPLE                          0x140B
+#define GL_RGBA_FLOAT32_APPLE                  0x8814
+#define GL_RGB_FLOAT32_APPLE                   0x8815
+#define GL_ALPHA_FLOAT32_APPLE                 0x8816
+#define GL_INTENSITY_FLOAT32_APPLE             0x8817
+#define GL_LUMINANCE_FLOAT32_APPLE             0x8818
+#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE       0x8819
+#define GL_RGBA_FLOAT16_APPLE                  0x881A
+#define GL_RGB_FLOAT16_APPLE                   0x881B
+#define GL_ALPHA_FLOAT16_APPLE                 0x881C
+#define GL_INTENSITY_FLOAT16_APPLE             0x881D
+#define GL_LUMINANCE_FLOAT16_APPLE             0x881E
+#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE       0x881F
+#define GL_COLOR_FLOAT_APPLE                   0x8A0F
+
+ /* GL_APPLE_flush_buffer_range */
+extern GLboolean GLAD_APPLE_flush_buffer_range;
+#define GL_BUFFER_SERIALIZED_MODIFY_APPLE      0x8A12
+#define GL_BUFFER_FLUSHING_UNMAP_APPLE         0x8A13
+typedef void (APIENTRYP pfn_glBufferParameteriAPPLE) (GLenum, GLenum, GLint);
+extern pfn_glBufferParameteriAPPLE fp_glBufferParameteriAPPLE;
+typedef void (APIENTRYP pfn_glFlushMappedBufferRangeAPPLE) (GLenum, GLintptr, GLsizeiptr);
+extern pfn_glFlushMappedBufferRangeAPPLE fp_glFlushMappedBufferRangeAPPLE;
+
+ /* GL_APPLE_framebuffer_multisample */
+extern GLboolean GLAD_APPLE_framebuffer_multisample;
+#define GL_RENDERBUFFER_SAMPLES_APPLE          0x8CAB
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE  0x8D56
+#define GL_MAX_SAMPLES_APPLE                   0x8D57
+#define GL_READ_FRAMEBUFFER_APPLE              0x8CA8
+#define GL_DRAW_FRAMEBUFFER_APPLE              0x8CA9
+#define GL_DRAW_FRAMEBUFFER_BINDING_APPLE      0x8CA6
+#define GL_READ_FRAMEBUFFER_BINDING_APPLE      0x8CAA
+typedef void (APIENTRYP pfn_glRenderbufferStorageMultisampleAPPLE) (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
+extern pfn_glRenderbufferStorageMultisampleAPPLE fp_glRenderbufferStorageMultisampleAPPLE;
+typedef void (APIENTRYP pfn_glResolveMultisampleFramebufferAPPLE) ();
+extern pfn_glResolveMultisampleFramebufferAPPLE fp_glResolveMultisampleFramebufferAPPLE;
+
+ /* GL_APPLE_object_purgeable */
+extern GLboolean GLAD_APPLE_object_purgeable;
+#define GL_BUFFER_OBJECT_APPLE                 0x85B3
+#define GL_RELEASED_APPLE                      0x8A19
+#define GL_VOLATILE_APPLE                      0x8A1A
+#define GL_RETAINED_APPLE                      0x8A1B
+#define GL_UNDEFINED_APPLE                     0x8A1C
+#define GL_PURGEABLE_APPLE                     0x8A1D
+typedef GLenum (APIENTRYP pfn_glObjectPurgeableAPPLE) (GLenum, GLuint, GLenum);
+extern pfn_glObjectPurgeableAPPLE fp_glObjectPurgeableAPPLE;
+typedef GLenum (APIENTRYP pfn_glObjectUnpurgeableAPPLE) (GLenum, GLuint, GLenum);
+extern pfn_glObjectUnpurgeableAPPLE fp_glObjectUnpurgeableAPPLE;
+typedef void (APIENTRYP pfn_glGetObjectParameterivAPPLE) (GLenum, GLuint, GLenum, GLint*);
+extern pfn_glGetObjectParameterivAPPLE fp_glGetObjectParameterivAPPLE;
+
+ /* GL_APPLE_rgb_422 */
+extern GLboolean GLAD_APPLE_rgb_422;
+#define GL_RGB_422_APPLE                       0x8A1F
+#define GL_UNSIGNED_SHORT_8_8_APPLE            0x85BA
+#define GL_UNSIGNED_SHORT_8_8_REV_APPLE        0x85BB
+#define GL_RGB_RAW_422_APPLE                   0x8A51
+
+ /* GL_APPLE_row_bytes */
+extern GLboolean GLAD_APPLE_row_bytes;
+#define GL_PACK_ROW_BYTES_APPLE                0x8A15
+#define GL_UNPACK_ROW_BYTES_APPLE              0x8A16
+
+ /* GL_APPLE_sync */
+extern GLboolean GLAD_APPLE_sync;
+#define GL_SYNC_OBJECT_APPLE                   0x8A53
+#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE       0x9111
+#define GL_OBJECT_TYPE_APPLE                   0x9112
+#define GL_SYNC_CONDITION_APPLE                0x9113
+#define GL_SYNC_STATUS_APPLE                   0x9114
+#define GL_SYNC_FLAGS_APPLE                    0x9115
+#define GL_SYNC_FENCE_APPLE                    0x9116
+#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE    0x9117
+#define GL_UNSIGNALED_APPLE                    0x9118
+#define GL_SIGNALED_APPLE                      0x9119
+#define GL_ALREADY_SIGNALED_APPLE              0x911A
+#define GL_TIMEOUT_EXPIRED_APPLE               0x911B
+#define GL_CONDITION_SATISFIED_APPLE           0x911C
+#define GL_WAIT_FAILED_APPLE                   0x911D
+#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE       0x00000001
+#define GL_TIMEOUT_IGNORED_APPLE               0xFFFFFFFFFFFFFFFF
+typedef GLsync (APIENTRYP pfn_glFenceSyncAPPLE) (GLenum, GLbitfield);
+extern pfn_glFenceSyncAPPLE fp_glFenceSyncAPPLE;
+typedef GLboolean (APIENTRYP pfn_glIsSyncAPPLE) (GLsync);
+extern pfn_glIsSyncAPPLE fp_glIsSyncAPPLE;
+typedef void (APIENTRYP pfn_glDeleteSyncAPPLE) (GLsync);
+extern pfn_glDeleteSyncAPPLE fp_glDeleteSyncAPPLE;
+typedef GLenum (APIENTRYP pfn_glClientWaitSyncAPPLE) (GLsync, GLbitfield, GLuint64);
+extern pfn_glClientWaitSyncAPPLE fp_glClientWaitSyncAPPLE;
+typedef void (APIENTRYP pfn_glWaitSyncAPPLE) (GLsync, GLbitfield, GLuint64);
+extern pfn_glWaitSyncAPPLE fp_glWaitSyncAPPLE;
+typedef void (APIENTRYP pfn_glGetInteger64vAPPLE) (GLenum, GLint64*);
+extern pfn_glGetInteger64vAPPLE fp_glGetInteger64vAPPLE;
+typedef void (APIENTRYP pfn_glGetSyncivAPPLE) (GLsync, GLenum, GLsizei, GLsizei*, GLint*);
+extern pfn_glGetSyncivAPPLE fp_glGetSyncivAPPLE;
+
+ /* GL_APPLE_texture_format_BGRA8888 */
+extern GLboolean GLAD_APPLE_texture_format_BGRA8888;
+
+ /* GL_APPLE_texture_max_level */
+extern GLboolean GLAD_APPLE_texture_max_level;
+#define GL_TEXTURE_MAX_LEVEL_APPLE             0x813D
+
+ /* GL_APPLE_texture_range */
+extern GLboolean GLAD_APPLE_texture_range;
+#define GL_TEXTURE_RANGE_LENGTH_APPLE          0x85B7
+#define GL_TEXTURE_RANGE_POINTER_APPLE         0x85B8
+#define GL_TEXTURE_STORAGE_HINT_APPLE          0x85BC
+#define GL_STORAGE_PRIVATE_APPLE               0x85BD
+#define GL_STORAGE_CACHED_APPLE                0x85BE
+#define GL_STORAGE_SHARED_APPLE                0x85BF
+typedef void (APIENTRYP pfn_glTextureRangeAPPLE) (GLenum, GLsizei, const void*);
+extern pfn_glTextureRangeAPPLE fp_glTextureRangeAPPLE;
+typedef void (APIENTRYP pfn_glGetTexParameterPointervAPPLE) (GLenum, GLenum, void**);
+extern pfn_glGetTexParameterPointervAPPLE fp_glGetTexParameterPointervAPPLE;
+
+ /* GL_APPLE_vertex_array_object */
+extern GLboolean GLAD_APPLE_vertex_array_object;
+#define GL_VERTEX_ARRAY_BINDING_APPLE          0x85B5
+typedef void (APIENTRYP pfn_glBindVertexArrayAPPLE) (GLuint);
+extern pfn_glBindVertexArrayAPPLE fp_glBindVertexArrayAPPLE;
+typedef void (APIENTRYP pfn_glDeleteVertexArraysAPPLE) (GLsizei, const GLuint*);
+extern pfn_glDeleteVertexArraysAPPLE fp_glDeleteVertexArraysAPPLE;
+typedef void (APIENTRYP pfn_glGenVertexArraysAPPLE) (GLsizei, GLuint*);
+extern pfn_glGenVertexArraysAPPLE fp_glGenVertexArraysAPPLE;
+typedef GLboolean (APIENTRYP pfn_glIsVertexArrayAPPLE) (GLuint);
+extern pfn_glIsVertexArrayAPPLE fp_glIsVertexArrayAPPLE;
+
+ /* GL_APPLE_vertex_array_range */
+extern GLboolean GLAD_APPLE_vertex_array_range;
+#define GL_VERTEX_ARRAY_RANGE_APPLE            0x851D
+#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE     0x851E
+#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE     0x851F
+#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE    0x8521
+#define GL_STORAGE_CLIENT_APPLE                0x85B4
+typedef void (APIENTRYP pfn_glVertexArrayRangeAPPLE) (GLsizei, void*);
+extern pfn_glVertexArrayRangeAPPLE fp_glVertexArrayRangeAPPLE;
+typedef void (APIENTRYP pfn_glFlushVertexArrayRangeAPPLE) (GLsizei, void*);
+extern pfn_glFlushVertexArrayRangeAPPLE fp_glFlushVertexArrayRangeAPPLE;
+typedef void (APIENTRYP pfn_glVertexArrayParameteriAPPLE) (GLenum, GLint);
+extern pfn_glVertexArrayParameteriAPPLE fp_glVertexArrayParameteriAPPLE;
+
+ /* GL_APPLE_vertex_program_evaluators */
+extern GLboolean GLAD_APPLE_vertex_program_evaluators;
+#define GL_VERTEX_ATTRIB_MAP1_APPLE            0x8A00
+#define GL_VERTEX_ATTRIB_MAP2_APPLE            0x8A01
+#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE       0x8A02
+#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE      0x8A03
+#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE      0x8A04
+#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE     0x8A05
+#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE       0x8A06
+#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE      0x8A07
+#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE      0x8A08
+#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE     0x8A09
+typedef void (APIENTRYP pfn_glEnableVertexAttribAPPLE) (GLuint, GLenum);
+extern pfn_glEnableVertexAttribAPPLE fp_glEnableVertexAttribAPPLE;
+typedef void (APIENTRYP pfn_glDisableVertexAttribAPPLE) (GLuint, GLenum);
+extern pfn_glDisableVertexAttribAPPLE fp_glDisableVertexAttribAPPLE;
+typedef GLboolean (APIENTRYP pfn_glIsVertexAttribEnabledAPPLE) (GLuint, GLenum);
+extern pfn_glIsVertexAttribEnabledAPPLE fp_glIsVertexAttribEnabledAPPLE;
+typedef void (APIENTRYP pfn_glMapVertexAttrib1dAPPLE) (GLuint, GLuint, GLdouble, GLdouble, GLint, GLint, const GLdouble*);
+extern pfn_glMapVertexAttrib1dAPPLE fp_glMapVertexAttrib1dAPPLE;
+typedef void (APIENTRYP pfn_glMapVertexAttrib1fAPPLE) (GLuint, GLuint, GLfloat, GLfloat, GLint, GLint, const GLfloat*);
+extern pfn_glMapVertexAttrib1fAPPLE fp_glMapVertexAttrib1fAPPLE;
+typedef void (APIENTRYP pfn_glMapVertexAttrib2dAPPLE) (GLuint, GLuint, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, const GLdouble*);
+extern pfn_glMapVertexAttrib2dAPPLE fp_glMapVertexAttrib2dAPPLE;
+typedef void (APIENTRYP pfn_glMapVertexAttrib2fAPPLE) (GLuint, GLuint, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, const GLfloat*);
+extern pfn_glMapVertexAttrib2fAPPLE fp_glMapVertexAttrib2fAPPLE;
+
+ /* GL_APPLE_ycbcr_422 */
+extern GLboolean GLAD_APPLE_ycbcr_422;
+#define GL_YCBCR_422_APPLE                     0x85B9
+
+ /* GL_ARM_mali_program_binary */
+extern GLboolean GLAD_ARM_mali_program_binary;
+#define GL_MALI_PROGRAM_BINARY_ARM             0x8F61
+
+ /* GL_ARM_mali_shader_binary */
+extern GLboolean GLAD_ARM_mali_shader_binary;
+#define GL_MALI_SHADER_BINARY_ARM              0x8F60
+
+ /* GL_ARM_rgba8 */
+extern GLboolean GLAD_ARM_rgba8;
+
+ /* GL_ARM_shader_framebuffer_fetch */
+extern GLboolean GLAD_ARM_shader_framebuffer_fetch;
+#define GL_FETCH_PER_SAMPLE_ARM                0x8F65
+#define GL_FRAGMENT_SHADER_FRAMEBUFFER_FETCH_MRT_ARM  0x8F66
+
+ /* GL_ARM_shader_framebuffer_fetch_depth_stencil */
+extern GLboolean GLAD_ARM_shader_framebuffer_fetch_depth_stencil;
+
+ /* GL_ATI_meminfo */
+extern GLboolean GLAD_ATI_meminfo;
+#define GL_VBO_FREE_MEMORY_ATI                 0x87FB
+#define GL_TEXTURE_FREE_MEMORY_ATI             0x87FC
+#define GL_RENDERBUFFER_FREE_MEMORY_ATI        0x87FD
+
+ /* GL_ATI_pixel_format_float */
+extern GLboolean GLAD_ATI_pixel_format_float;
+#define GL_RGBA_FLOAT_MODE_ATI                 0x8820
+#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI     0x8835
+
+ /* GL_DMP_shader_binary */
+extern GLboolean GLAD_DMP_shader_binary;
+#define GL_SHADER_BINARY_DMP                   0x9250
+
+ /* GL_FJ_shader_binary_GCCSO */
+extern GLboolean GLAD_FJ_shader_binary_GCCSO;
+#define GL_GCCSO_SHADER_BINARY_FJ              0x9260
+
+ /* GL_GREMEDY_frame_terminator */
+extern GLboolean GLAD_GREMEDY_frame_terminator;
+typedef void (APIENTRYP pfn_glFrameTerminatorGREMEDY) ();
+extern pfn_glFrameTerminatorGREMEDY fp_glFrameTerminatorGREMEDY;
+
+ /* GL_GREMEDY_string_marker */
+extern GLboolean GLAD_GREMEDY_string_marker;
+typedef void (APIENTRYP pfn_glStringMarkerGREMEDY) (GLsizei, const void*);
+extern pfn_glStringMarkerGREMEDY fp_glStringMarkerGREMEDY;
+
+ /* GL_IMG_multisampled_render_to_texture */
+extern GLboolean GLAD_IMG_multisampled_render_to_texture;
+#define GL_RENDERBUFFER_SAMPLES_IMG            0x9133
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG  0x9134
+#define GL_MAX_SAMPLES_IMG                     0x9135
+#define GL_TEXTURE_SAMPLES_IMG                 0x9136
+typedef void (APIENTRYP pfn_glRenderbufferStorageMultisampleIMG) (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
+extern pfn_glRenderbufferStorageMultisampleIMG fp_glRenderbufferStorageMultisampleIMG;
+typedef void (APIENTRYP pfn_glFramebufferTexture2DMultisampleIMG) (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei);
+extern pfn_glFramebufferTexture2DMultisampleIMG fp_glFramebufferTexture2DMultisampleIMG;
+
+ /* GL_IMG_program_binary */
+extern GLboolean GLAD_IMG_program_binary;
+#define GL_SGX_PROGRAM_BINARY_IMG              0x9130
+
+ /* GL_IMG_read_format */
+extern GLboolean GLAD_IMG_read_format;
+#define GL_BGRA_IMG                            0x80E1
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG      0x8365
+
+ /* GL_IMG_shader_binary */
+extern GLboolean GLAD_IMG_shader_binary;
+#define GL_SGX_BINARY_IMG                      0x8C0A
+
+ /* GL_IMG_texture_compression_pvrtc */
+extern GLboolean GLAD_IMG_texture_compression_pvrtc;
+#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG     0x8C00
+#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG     0x8C01
+#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG    0x8C02
+#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG    0x8C03
+
+ /* GL_IMG_texture_compression_pvrtc2 */
+extern GLboolean GLAD_IMG_texture_compression_pvrtc2;
+#define GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG    0x9137
+#define GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG    0x9138
+
+ /* GL_INGR_blend_func_separate */
+extern GLboolean GLAD_INGR_blend_func_separate;
+typedef void (APIENTRYP pfn_glBlendFuncSeparateINGR) (GLenum, GLenum, GLenum, GLenum);
+extern pfn_glBlendFuncSeparateINGR fp_glBlendFuncSeparateINGR;
+
+ /* GL_INTEL_fragment_shader_ordering */
+extern GLboolean GLAD_INTEL_fragment_shader_ordering;
+
+ /* GL_INTEL_map_texture */
+extern GLboolean GLAD_INTEL_map_texture;
+#define GL_TEXTURE_MEMORY_LAYOUT_INTEL         0x83FF
+#define GL_LAYOUT_DEFAULT_INTEL                0
+#define GL_LAYOUT_LINEAR_INTEL                 1
+#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL      2
+typedef void (APIENTRYP pfn_glSyncTextureINTEL) (GLuint);
+extern pfn_glSyncTextureINTEL fp_glSyncTextureINTEL;
+typedef void (APIENTRYP pfn_glUnmapTexture2DINTEL) (GLuint, GLint);
+extern pfn_glUnmapTexture2DINTEL fp_glUnmapTexture2DINTEL;
+typedef void* (APIENTRYP pfn_glMapTexture2DINTEL) (GLuint, GLint, GLbitfield, GLint*, GLenum*);
+extern pfn_glMapTexture2DINTEL fp_glMapTexture2DINTEL;
+
+ /* GL_INTEL_performance_query */
+extern GLboolean GLAD_INTEL_performance_query;
+#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL      0x00000000
+#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL      0x00000001
+#define GL_PERFQUERY_WAIT_INTEL                0x83FB
+#define GL_PERFQUERY_FLUSH_INTEL               0x83FA
+#define GL_PERFQUERY_DONOT_FLUSH_INTEL         0x83F9
+#define GL_PERFQUERY_COUNTER_EVENT_INTEL       0x94F0
+#define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL  0x94F1
+#define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL  0x94F2
+#define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL  0x94F3
+#define GL_PERFQUERY_COUNTER_RAW_INTEL         0x94F4
+#define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL   0x94F5
+#define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL  0x94F8
+#define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL  0x94F9
+#define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL  0x94FA
+#define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL  0x94FB
+#define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL  0x94FC
+#define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL  0x94FD
+#define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL  0x94FE
+#define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL  0x94FF
+#define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL  0x9500
+typedef void (APIENTRYP pfn_glBeginPerfQueryINTEL) (GLuint);
+extern pfn_glBeginPerfQueryINTEL fp_glBeginPerfQueryINTEL;
+typedef void (APIENTRYP pfn_glCreatePerfQueryINTEL) (GLuint, GLuint*);
+extern pfn_glCreatePerfQueryINTEL fp_glCreatePerfQueryINTEL;
+typedef void (APIENTRYP pfn_glDeletePerfQueryINTEL) (GLuint);
+extern pfn_glDeletePerfQueryINTEL fp_glDeletePerfQueryINTEL;
+typedef void (APIENTRYP pfn_glEndPerfQueryINTEL) (GLuint);
+extern pfn_glEndPerfQueryINTEL fp_glEndPerfQueryINTEL;
+typedef void (APIENTRYP pfn_glGetFirstPerfQueryIdINTEL) (GLuint*);
+extern pfn_glGetFirstPerfQueryIdINTEL fp_glGetFirstPerfQueryIdINTEL;
+typedef void (APIENTRYP pfn_glGetNextPerfQueryIdINTEL) (GLuint, GLuint*);
+extern pfn_glGetNextPerfQueryIdINTEL fp_glGetNextPerfQueryIdINTEL;
+typedef void (APIENTRYP pfn_glGetPerfCounterInfoINTEL) (GLuint, GLuint, GLuint, GLchar*, GLuint, GLchar*, GLuint*, GLuint*, GLuint*, GLuint*, GLuint64*);
+extern pfn_glGetPerfCounterInfoINTEL fp_glGetPerfCounterInfoINTEL;
+typedef void (APIENTRYP pfn_glGetPerfQueryDataINTEL) (GLuint, GLuint, GLsizei, GLvoid*, GLuint*);
+extern pfn_glGetPerfQueryDataINTEL fp_glGetPerfQueryDataINTEL;
+typedef void (APIENTRYP pfn_glGetPerfQueryIdByNameINTEL) (GLchar*, GLuint*);
+extern pfn_glGetPerfQueryIdByNameINTEL fp_glGetPerfQueryIdByNameINTEL;
+typedef void (APIENTRYP pfn_glGetPerfQueryInfoINTEL) (GLuint, GLuint, GLchar*, GLuint*, GLuint*, GLuint*, GLuint*);
+extern pfn_glGetPerfQueryInfoINTEL fp_glGetPerfQueryInfoINTEL;
+
+ /* GL_MESA_pack_invert */
+extern GLboolean GLAD_MESA_pack_invert;
+#define GL_PACK_INVERT_MESA                    0x8758
+
+ /* GL_MESA_ycbcr_texture */
+extern GLboolean GLAD_MESA_ycbcr_texture;
+#define GL_UNSIGNED_SHORT_8_8_MESA             0x85BA
+#define GL_UNSIGNED_SHORT_8_8_REV_MESA         0x85BB
+#define GL_YCBCR_MESA                          0x8757
+
+ /* GL_MESAX_texture_stack */
+extern GLboolean GLAD_MESAX_texture_stack;
+#define GL_TEXTURE_1D_STACK_MESAX              0x8759
+#define GL_TEXTURE_2D_STACK_MESAX              0x875A
+#define GL_PROXY_TEXTURE_1D_STACK_MESAX        0x875B
+#define GL_PROXY_TEXTURE_2D_STACK_MESAX        0x875C
+#define GL_TEXTURE_1D_STACK_BINDING_MESAX      0x875D
+#define GL_TEXTURE_2D_STACK_BINDING_MESAX      0x875E
+
+ /* GL_NV_bindless_multi_draw_indirect */
+extern GLboolean GLAD_NV_bindless_multi_draw_indirect;
+typedef void (APIENTRYP pfn_glMultiDrawArraysIndirectBindlessNV) (GLenum, const void*, GLsizei, GLsizei, GLint);
+extern pfn_glMultiDrawArraysIndirectBindlessNV fp_glMultiDrawArraysIndirectBindlessNV;
+typedef void (APIENTRYP pfn_glMultiDrawElementsIndirectBindlessNV) (GLenum, GLenum, const void*, GLsizei, GLsizei, GLint);
+extern pfn_glMultiDrawElementsIndirectBindlessNV fp_glMultiDrawElementsIndirectBindlessNV;
+
+ /* GL_NV_bindless_multi_draw_indirect_count */
+extern GLboolean GLAD_NV_bindless_multi_draw_indirect_count;
+typedef void (APIENTRYP pfn_glMultiDrawArraysIndirectBindlessCountNV) (GLenum, const void*, GLsizei, GLsizei, GLsizei, GLint);
+extern pfn_glMultiDrawArraysIndirectBindlessCountNV fp_glMultiDrawArraysIndirectBindlessCountNV;
+typedef void (APIENTRYP pfn_glMultiDrawElementsIndirectBindlessCountNV) (GLenum, GLenum, const void*, GLsizei, GLsizei, GLsizei, GLint);
+extern pfn_glMultiDrawElementsIndirectBindlessCountNV fp_glMultiDrawElementsIndirectBindlessCountNV;
+
+ /* GL_NV_bindless_texture */
+extern GLboolean GLAD_NV_bindless_texture;
+typedef GLuint64 (APIENTRYP pfn_glGetTextureHandleNV) (GLuint);
+extern pfn_glGetTextureHandleNV fp_glGetTextureHandleNV;
+typedef GLuint64 (APIENTRYP pfn_glGetTextureSamplerHandleNV) (GLuint, GLuint);
+extern pfn_glGetTextureSamplerHandleNV fp_glGetTextureSamplerHandleNV;
+typedef void (APIENTRYP pfn_glMakeTextureHandleResidentNV) (GLuint64);
+extern pfn_glMakeTextureHandleResidentNV fp_glMakeTextureHandleResidentNV;
+typedef void (APIENTRYP pfn_glMakeTextureHandleNonResidentNV) (GLuint64);
+extern pfn_glMakeTextureHandleNonResidentNV fp_glMakeTextureHandleNonResidentNV;
+typedef GLuint64 (APIENTRYP pfn_glGetImageHandleNV) (GLuint, GLint, GLboolean, GLint, GLenum);
+extern pfn_glGetImageHandleNV fp_glGetImageHandleNV;
+typedef void (APIENTRYP pfn_glMakeImageHandleResidentNV) (GLuint64, GLenum);
+extern pfn_glMakeImageHandleResidentNV fp_glMakeImageHandleResidentNV;
+typedef void (APIENTRYP pfn_glMakeImageHandleNonResidentNV) (GLuint64);
+extern pfn_glMakeImageHandleNonResidentNV fp_glMakeImageHandleNonResidentNV;
+typedef void (APIENTRYP pfn_glUniformHandleui64NV) (GLint, GLuint64);
+extern pfn_glUniformHandleui64NV fp_glUniformHandleui64NV;
+typedef void (APIENTRYP pfn_glUniformHandleui64vNV) (GLint, GLsizei, const GLuint64*);
+extern pfn_glUniformHandleui64vNV fp_glUniformHandleui64vNV;
+typedef void (APIENTRYP pfn_glProgramUniformHandleui64NV) (GLuint, GLint, GLuint64);
+extern pfn_glProgramUniformHandleui64NV fp_glProgramUniformHandleui64NV;
+typedef void (APIENTRYP pfn_glProgramUniformHandleui64vNV) (GLuint, GLint, GLsizei, const GLuint64*);
+extern pfn_glProgramUniformHandleui64vNV fp_glProgramUniformHandleui64vNV;
+typedef GLboolean (APIENTRYP pfn_glIsTextureHandleResidentNV) (GLuint64);
+extern pfn_glIsTextureHandleResidentNV fp_glIsTextureHandleResidentNV;
+typedef GLboolean (APIENTRYP pfn_glIsImageHandleResidentNV) (GLuint64);
+extern pfn_glIsImageHandleResidentNV fp_glIsImageHandleResidentNV;
+
+ /* GL_NV_blend_equation_advanced */
+extern GLboolean GLAD_NV_blend_equation_advanced;
+#define GL_BLEND_OVERLAP_NV                    0x9281
+#define GL_BLEND_PREMULTIPLIED_SRC_NV          0x9280
+#define GL_BLUE_NV                             0x1905
+#define GL_COLORBURN_NV                        0x929A
+#define GL_COLORDODGE_NV                       0x9299
+#define GL_CONJOINT_NV                         0x9284
+#define GL_CONTRAST_NV                         0x92A1
+#define GL_DARKEN_NV                           0x9297
+#define GL_DIFFERENCE_NV                       0x929E
+#define GL_DISJOINT_NV                         0x9283
+#define GL_DST_ATOP_NV                         0x928F
+#define GL_DST_IN_NV                           0x928B
+#define GL_DST_NV                              0x9287
+#define GL_DST_OUT_NV                          0x928D
+#define GL_DST_OVER_NV                         0x9289
+#define GL_EXCLUSION_NV                        0x92A0
+#define GL_GREEN_NV                            0x1904
+#define GL_HARDLIGHT_NV                        0x929B
+#define GL_HARDMIX_NV                          0x92A9
+#define GL_HSL_COLOR_NV                        0x92AF
+#define GL_HSL_HUE_NV                          0x92AD
+#define GL_HSL_LUMINOSITY_NV                   0x92B0
+#define GL_HSL_SATURATION_NV                   0x92AE
+#define GL_INVERT_OVG_NV                       0x92B4
+#define GL_INVERT_RGB_NV                       0x92A3
+#define GL_LIGHTEN_NV                          0x9298
+#define GL_LINEARBURN_NV                       0x92A5
+#define GL_LINEARDODGE_NV                      0x92A4
+#define GL_LINEARLIGHT_NV                      0x92A7
+#define GL_MINUS_CLAMPED_NV                    0x92B3
+#define GL_MINUS_NV                            0x929F
+#define GL_MULTIPLY_NV                         0x9294
+#define GL_OVERLAY_NV                          0x9296
+#define GL_PINLIGHT_NV                         0x92A8
+#define GL_PLUS_CLAMPED_ALPHA_NV               0x92B2
+#define GL_PLUS_CLAMPED_NV                     0x92B1
+#define GL_PLUS_DARKER_NV                      0x9292
+#define GL_PLUS_NV                             0x9291
+#define GL_RED_NV                              0x1903
+#define GL_SCREEN_NV                           0x9295
+#define GL_SOFTLIGHT_NV                        0x929C
+#define GL_SRC_ATOP_NV                         0x928E
+#define GL_SRC_IN_NV                           0x928A
+#define GL_SRC_NV                              0x9286
+#define GL_SRC_OUT_NV                          0x928C
+#define GL_SRC_OVER_NV                         0x9288
+#define GL_UNCORRELATED_NV                     0x9282
+#define GL_VIVIDLIGHT_NV                       0x92A6
+#define GL_XOR_NV                              0x1506
+typedef void (APIENTRYP pfn_glBlendParameteriNV) (GLenum, GLint);
+extern pfn_glBlendParameteriNV fp_glBlendParameteriNV;
+typedef void (APIENTRYP pfn_glBlendBarrierNV) ();
+extern pfn_glBlendBarrierNV fp_glBlendBarrierNV;
+
+ /* GL_NV_blend_equation_advanced_coherent */
+extern GLboolean GLAD_NV_blend_equation_advanced_coherent;
+#define GL_BLEND_ADVANCED_COHERENT_NV          0x9285
+
+ /* GL_NV_compute_program5 */
+extern GLboolean GLAD_NV_compute_program5;
+#define GL_COMPUTE_PROGRAM_NV                  0x90FB
+#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV  0x90FC
+
+ /* GL_NV_conditional_render */
+extern GLboolean GLAD_NV_conditional_render;
+#define GL_QUERY_WAIT_NV                       0x8E13
+#define GL_QUERY_NO_WAIT_NV                    0x8E14
+#define GL_QUERY_BY_REGION_WAIT_NV             0x8E15
+#define GL_QUERY_BY_REGION_NO_WAIT_NV          0x8E16
+typedef void (APIENTRYP pfn_glBeginConditionalRenderNV) (GLuint, GLenum);
+extern pfn_glBeginConditionalRenderNV fp_glBeginConditionalRenderNV;
+typedef void (APIENTRYP pfn_glEndConditionalRenderNV) ();
+extern pfn_glEndConditionalRenderNV fp_glEndConditionalRenderNV;
+
+ /* GL_NV_copy_buffer */
+extern GLboolean GLAD_NV_copy_buffer;
+#define GL_COPY_READ_BUFFER_NV                 0x8F36
+#define GL_COPY_WRITE_BUFFER_NV                0x8F37
+typedef void (APIENTRYP pfn_glCopyBufferSubDataNV) (GLenum, GLenum, GLintptr, GLintptr, GLsizeiptr);
+extern pfn_glCopyBufferSubDataNV fp_glCopyBufferSubDataNV;
+
+ /* GL_NV_copy_image */
+extern GLboolean GLAD_NV_copy_image;
+typedef void (APIENTRYP pfn_glCopyImageSubDataNV) (GLuint, GLenum, GLint, GLint, GLint, GLint, GLuint, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei);
+extern pfn_glCopyImageSubDataNV fp_glCopyImageSubDataNV;
+
+ /* GL_NV_coverage_sample */
+extern GLboolean GLAD_NV_coverage_sample;
+#define GL_COVERAGE_COMPONENT_NV               0x8ED0
+#define GL_COVERAGE_COMPONENT4_NV              0x8ED1
+#define GL_COVERAGE_ATTACHMENT_NV              0x8ED2
+#define GL_COVERAGE_BUFFERS_NV                 0x8ED3
+#define GL_COVERAGE_SAMPLES_NV                 0x8ED4
+#define GL_COVERAGE_ALL_FRAGMENTS_NV           0x8ED5
+#define GL_COVERAGE_EDGE_FRAGMENTS_NV          0x8ED6
+#define GL_COVERAGE_AUTOMATIC_NV               0x8ED7
+#define GL_COVERAGE_BUFFER_BIT_NV              0x00008000
+typedef void (APIENTRYP pfn_glCoverageMaskNV) (GLboolean);
+extern pfn_glCoverageMaskNV fp_glCoverageMaskNV;
+typedef void (APIENTRYP pfn_glCoverageOperationNV) (GLenum);
+extern pfn_glCoverageOperationNV fp_glCoverageOperationNV;
+
+ /* GL_NV_deep_texture3D */
+extern GLboolean GLAD_NV_deep_texture3D;
+#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV  0x90D0
+#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV        0x90D1
+
+ /* GL_NV_depth_buffer_float */
+extern GLboolean GLAD_NV_depth_buffer_float;
+#define GL_DEPTH_COMPONENT32F_NV               0x8DAB
+#define GL_DEPTH32F_STENCIL8_NV                0x8DAC
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV   0x8DAD
+#define GL_DEPTH_BUFFER_FLOAT_MODE_NV          0x8DAF
+typedef void (APIENTRYP pfn_glDepthRangedNV) (GLdouble, GLdouble);
+extern pfn_glDepthRangedNV fp_glDepthRangedNV;
+typedef void (APIENTRYP pfn_glClearDepthdNV) (GLdouble);
+extern pfn_glClearDepthdNV fp_glClearDepthdNV;
+typedef void (APIENTRYP pfn_glDepthBoundsdNV) (GLdouble, GLdouble);
+extern pfn_glDepthBoundsdNV fp_glDepthBoundsdNV;
+
+ /* GL_NV_depth_clamp */
+extern GLboolean GLAD_NV_depth_clamp;
+#define GL_DEPTH_CLAMP_NV                      0x864F
+
+ /* GL_NV_depth_nonlinear */
+extern GLboolean GLAD_NV_depth_nonlinear;
+#define GL_DEPTH_COMPONENT16_NONLINEAR_NV      0x8E2C
+
+ /* GL_NV_draw_buffers */
+extern GLboolean GLAD_NV_draw_buffers;
+#define GL_MAX_DRAW_BUFFERS_NV                 0x8824
+#define GL_DRAW_BUFFER0_NV                     0x8825
+#define GL_DRAW_BUFFER1_NV                     0x8826
+#define GL_DRAW_BUFFER2_NV                     0x8827
+#define GL_DRAW_BUFFER3_NV                     0x8828
+#define GL_DRAW_BUFFER4_NV                     0x8829
+#define GL_DRAW_BUFFER5_NV                     0x882A
+#define GL_DRAW_BUFFER6_NV                     0x882B
+#define GL_DRAW_BUFFER7_NV                     0x882C
+#define GL_DRAW_BUFFER8_NV                     0x882D
+#define GL_DRAW_BUFFER9_NV                     0x882E
+#define GL_DRAW_BUFFER10_NV                    0x882F
+#define GL_DRAW_BUFFER11_NV                    0x8830
+#define GL_DRAW_BUFFER12_NV                    0x8831
+#define GL_DRAW_BUFFER13_NV                    0x8832
+#define GL_DRAW_BUFFER14_NV                    0x8833
+#define GL_DRAW_BUFFER15_NV                    0x8834
+#define GL_COLOR_ATTACHMENT0_NV                0x8CE0
+#define GL_COLOR_ATTACHMENT1_NV                0x8CE1
+#define GL_COLOR_ATTACHMENT2_NV                0x8CE2
+#define GL_COLOR_ATTACHMENT3_NV                0x8CE3
+#define GL_COLOR_ATTACHMENT4_NV                0x8CE4
+#define GL_COLOR_ATTACHMENT5_NV                0x8CE5
+#define GL_COLOR_ATTACHMENT6_NV                0x8CE6
+#define GL_COLOR_ATTACHMENT7_NV                0x8CE7
+#define GL_COLOR_ATTACHMENT8_NV                0x8CE8
+#define GL_COLOR_ATTACHMENT9_NV                0x8CE9
+#define GL_COLOR_ATTACHMENT10_NV               0x8CEA
+#define GL_COLOR_ATTACHMENT11_NV               0x8CEB
+#define GL_COLOR_ATTACHMENT12_NV               0x8CEC
+#define GL_COLOR_ATTACHMENT13_NV               0x8CED
+#define GL_COLOR_ATTACHMENT14_NV               0x8CEE
+#define GL_COLOR_ATTACHMENT15_NV               0x8CEF
+typedef void (APIENTRYP pfn_glDrawBuffersNV) (GLsizei, const GLenum*);
+extern pfn_glDrawBuffersNV fp_glDrawBuffersNV;
+
+ /* GL_NV_draw_instanced */
+extern GLboolean GLAD_NV_draw_instanced;
+typedef void (APIENTRYP pfn_glDrawArraysInstancedNV) (GLenum, GLint, GLsizei, GLsizei);
+extern pfn_glDrawArraysInstancedNV fp_glDrawArraysInstancedNV;
+typedef void (APIENTRYP pfn_glDrawElementsInstancedNV) (GLenum, GLsizei, GLenum, const void*, GLsizei);
+extern pfn_glDrawElementsInstancedNV fp_glDrawElementsInstancedNV;
+
+ /* GL_NV_draw_texture */
+extern GLboolean GLAD_NV_draw_texture;
+typedef void (APIENTRYP pfn_glDrawTextureNV) (GLuint, GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+extern pfn_glDrawTextureNV fp_glDrawTextureNV;
+
+ /* GL_NV_explicit_attrib_location */
+extern GLboolean GLAD_NV_explicit_attrib_location;
+
+ /* GL_NV_explicit_multisample */
+extern GLboolean GLAD_NV_explicit_multisample;
+#define GL_SAMPLE_POSITION_NV                  0x8E50
+#define GL_SAMPLE_MASK_NV                      0x8E51
+#define GL_SAMPLE_MASK_VALUE_NV                0x8E52
+#define GL_TEXTURE_BINDING_RENDERBUFFER_NV     0x8E53
+#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV  0x8E54
+#define GL_TEXTURE_RENDERBUFFER_NV             0x8E55
+#define GL_SAMPLER_RENDERBUFFER_NV             0x8E56
+#define GL_INT_SAMPLER_RENDERBUFFER_NV         0x8E57
+#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV  0x8E58
+#define GL_MAX_SAMPLE_MASK_WORDS_NV            0x8E59
+typedef void (APIENTRYP pfn_glGetMultisamplefvNV) (GLenum, GLuint, GLfloat*);
+extern pfn_glGetMultisamplefvNV fp_glGetMultisamplefvNV;
+typedef void (APIENTRYP pfn_glSampleMaskIndexedNV) (GLuint, GLbitfield);
+extern pfn_glSampleMaskIndexedNV fp_glSampleMaskIndexedNV;
+typedef void (APIENTRYP pfn_glTexRenderbufferNV) (GLenum, GLuint);
+extern pfn_glTexRenderbufferNV fp_glTexRenderbufferNV;
+
+ /* GL_NV_fbo_color_attachments */
+extern GLboolean GLAD_NV_fbo_color_attachments;
+#define GL_MAX_COLOR_ATTACHMENTS_NV            0x8CDF
+
+ /* GL_NV_fence */
+extern GLboolean GLAD_NV_fence;
+#define GL_ALL_COMPLETED_NV                    0x84F2
+#define GL_FENCE_STATUS_NV                     0x84F3
+#define GL_FENCE_CONDITION_NV                  0x84F4
+typedef void (APIENTRYP pfn_glDeleteFencesNV) (GLsizei, const GLuint*);
+extern pfn_glDeleteFencesNV fp_glDeleteFencesNV;
+typedef void (APIENTRYP pfn_glGenFencesNV) (GLsizei, GLuint*);
+extern pfn_glGenFencesNV fp_glGenFencesNV;
+typedef GLboolean (APIENTRYP pfn_glIsFenceNV) (GLuint);
+extern pfn_glIsFenceNV fp_glIsFenceNV;
+typedef GLboolean (APIENTRYP pfn_glTestFenceNV) (GLuint);
+extern pfn_glTestFenceNV fp_glTestFenceNV;
+typedef void (APIENTRYP pfn_glGetFenceivNV) (GLuint, GLenum, GLint*);
+extern pfn_glGetFenceivNV fp_glGetFenceivNV;
+typedef void (APIENTRYP pfn_glFinishFenceNV) (GLuint);
+extern pfn_glFinishFenceNV fp_glFinishFenceNV;
+typedef void (APIENTRYP pfn_glSetFenceNV) (GLuint, GLenum);
+extern pfn_glSetFenceNV fp_glSetFenceNV;
+
+ /* GL_NV_float_buffer */
+extern GLboolean GLAD_NV_float_buffer;
+#define GL_FLOAT_R_NV                          0x8880
+#define GL_FLOAT_RG_NV                         0x8881
+#define GL_FLOAT_RGB_NV                        0x8882
+#define GL_FLOAT_RGBA_NV                       0x8883
+#define GL_FLOAT_R16_NV                        0x8884
+#define GL_FLOAT_R32_NV                        0x8885
+#define GL_FLOAT_RG16_NV                       0x8886
+#define GL_FLOAT_RG32_NV                       0x8887
+#define GL_FLOAT_RGB16_NV                      0x8888
+#define GL_FLOAT_RGB32_NV                      0x8889
+#define GL_FLOAT_RGBA16_NV                     0x888A
+#define GL_FLOAT_RGBA32_NV                     0x888B
+#define GL_TEXTURE_FLOAT_COMPONENTS_NV         0x888C
+#define GL_FLOAT_CLEAR_COLOR_VALUE_NV          0x888D
+#define GL_FLOAT_RGBA_MODE_NV                  0x888E
+
+ /* GL_NV_fragment_program4 */
+extern GLboolean GLAD_NV_fragment_program4;
+
+ /* GL_NV_framebuffer_blit */
+extern GLboolean GLAD_NV_framebuffer_blit;
+#define GL_READ_FRAMEBUFFER_NV                 0x8CA8
+#define GL_DRAW_FRAMEBUFFER_NV                 0x8CA9
+#define GL_DRAW_FRAMEBUFFER_BINDING_NV         0x8CA6
+#define GL_READ_FRAMEBUFFER_BINDING_NV         0x8CAA
+typedef void (APIENTRYP pfn_glBlitFramebufferNV) (GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum);
+extern pfn_glBlitFramebufferNV fp_glBlitFramebufferNV;
+
+ /* GL_NV_framebuffer_multisample */
+extern GLboolean GLAD_NV_framebuffer_multisample;
+#define GL_RENDERBUFFER_SAMPLES_NV             0x8CAB
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV  0x8D56
+#define GL_MAX_SAMPLES_NV                      0x8D57
+typedef void (APIENTRYP pfn_glRenderbufferStorageMultisampleNV) (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
+extern pfn_glRenderbufferStorageMultisampleNV fp_glRenderbufferStorageMultisampleNV;
+
+ /* GL_NV_framebuffer_multisample_coverage */
+extern GLboolean GLAD_NV_framebuffer_multisample_coverage;
+#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV    0x8CAB
+#define GL_RENDERBUFFER_COLOR_SAMPLES_NV       0x8E10
+#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV   0x8E11
+#define GL_MULTISAMPLE_COVERAGE_MODES_NV       0x8E12
+typedef void (APIENTRYP pfn_glRenderbufferStorageMultisampleCoverageNV) (GLenum, GLsizei, GLsizei, GLenum, GLsizei, GLsizei);
+extern pfn_glRenderbufferStorageMultisampleCoverageNV fp_glRenderbufferStorageMultisampleCoverageNV;
+
+ /* GL_NV_generate_mipmap_sRGB */
+extern GLboolean GLAD_NV_generate_mipmap_sRGB;
+
+ /* GL_NV_geometry_program4 */
+extern GLboolean GLAD_NV_geometry_program4;
+#define GL_GEOMETRY_PROGRAM_NV                 0x8C26
+#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV      0x8C27
+#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV  0x8C28
+typedef void (APIENTRYP pfn_glProgramVertexLimitNV) (GLenum, GLint);
+extern pfn_glProgramVertexLimitNV fp_glProgramVertexLimitNV;
+typedef void (APIENTRYP pfn_glFramebufferTextureFaceEXT) (GLenum, GLenum, GLuint, GLint, GLenum);
+extern pfn_glFramebufferTextureFaceEXT fp_glFramebufferTextureFaceEXT;
+
+ /* GL_NV_geometry_shader4 */
+extern GLboolean GLAD_NV_geometry_shader4;
+
+ /* GL_NV_gpu_program4 */
+extern GLboolean GLAD_NV_gpu_program4;
+#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV         0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV         0x8905
+#define GL_PROGRAM_ATTRIB_COMPONENTS_NV        0x8906
+#define GL_PROGRAM_RESULT_COMPONENTS_NV        0x8907
+#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV    0x8908
+#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV    0x8909
+#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV      0x8DA5
+#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV      0x8DA6
+typedef void (APIENTRYP pfn_glProgramLocalParameterI4iNV) (GLenum, GLuint, GLint, GLint, GLint, GLint);
+extern pfn_glProgramLocalParameterI4iNV fp_glProgramLocalParameterI4iNV;
+typedef void (APIENTRYP pfn_glProgramLocalParameterI4ivNV) (GLenum, GLuint, const GLint*);
+extern pfn_glProgramLocalParameterI4ivNV fp_glProgramLocalParameterI4ivNV;
+typedef void (APIENTRYP pfn_glProgramLocalParametersI4ivNV) (GLenum, GLuint, GLsizei, const GLint*);
+extern pfn_glProgramLocalParametersI4ivNV fp_glProgramLocalParametersI4ivNV;
+typedef void (APIENTRYP pfn_glProgramLocalParameterI4uiNV) (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint);
+extern pfn_glProgramLocalParameterI4uiNV fp_glProgramLocalParameterI4uiNV;
+typedef void (APIENTRYP pfn_glProgramLocalParameterI4uivNV) (GLenum, GLuint, const GLuint*);
+extern pfn_glProgramLocalParameterI4uivNV fp_glProgramLocalParameterI4uivNV;
+typedef void (APIENTRYP pfn_glProgramLocalParametersI4uivNV) (GLenum, GLuint, GLsizei, const GLuint*);
+extern pfn_glProgramLocalParametersI4uivNV fp_glProgramLocalParametersI4uivNV;
+typedef void (APIENTRYP pfn_glProgramEnvParameterI4iNV) (GLenum, GLuint, GLint, GLint, GLint, GLint);
+extern pfn_glProgramEnvParameterI4iNV fp_glProgramEnvParameterI4iNV;
+typedef void (APIENTRYP pfn_glProgramEnvParameterI4ivNV) (GLenum, GLuint, const GLint*);
+extern pfn_glProgramEnvParameterI4ivNV fp_glProgramEnvParameterI4ivNV;
+typedef void (APIENTRYP pfn_glProgramEnvParametersI4ivNV) (GLenum, GLuint, GLsizei, const GLint*);
+extern pfn_glProgramEnvParametersI4ivNV fp_glProgramEnvParametersI4ivNV;
+typedef void (APIENTRYP pfn_glProgramEnvParameterI4uiNV) (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint);
+extern pfn_glProgramEnvParameterI4uiNV fp_glProgramEnvParameterI4uiNV;
+typedef void (APIENTRYP pfn_glProgramEnvParameterI4uivNV) (GLenum, GLuint, const GLuint*);
+extern pfn_glProgramEnvParameterI4uivNV fp_glProgramEnvParameterI4uivNV;
+typedef void (APIENTRYP pfn_glProgramEnvParametersI4uivNV) (GLenum, GLuint, GLsizei, const GLuint*);
+extern pfn_glProgramEnvParametersI4uivNV fp_glProgramEnvParametersI4uivNV;
+typedef void (APIENTRYP pfn_glGetProgramLocalParameterIivNV) (GLenum, GLuint, GLint*);
+extern pfn_glGetProgramLocalParameterIivNV fp_glGetProgramLocalParameterIivNV;
+typedef void (APIENTRYP pfn_glGetProgramLocalParameterIuivNV) (GLenum, GLuint, GLuint*);
+extern pfn_glGetProgramLocalParameterIuivNV fp_glGetProgramLocalParameterIuivNV;
+typedef void (APIENTRYP pfn_glGetProgramEnvParameterIivNV) (GLenum, GLuint, GLint*);
+extern pfn_glGetProgramEnvParameterIivNV fp_glGetProgramEnvParameterIivNV;
+typedef void (APIENTRYP pfn_glGetProgramEnvParameterIuivNV) (GLenum, GLuint, GLuint*);
+extern pfn_glGetProgramEnvParameterIuivNV fp_glGetProgramEnvParameterIuivNV;
+
+ /* GL_NV_gpu_program5 */
+extern GLboolean GLAD_NV_gpu_program5;
+#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV  0x8E5A
+#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV  0x8E5B
+#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV  0x8E5C
+#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV  0x8E5D
+#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV  0x8E5E
+#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV  0x8E5F
+#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV  0x8F44
+#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV       0x8F45
+typedef void (APIENTRYP pfn_glProgramSubroutineParametersuivNV) (GLenum, GLsizei, const GLuint*);
+extern pfn_glProgramSubroutineParametersuivNV fp_glProgramSubroutineParametersuivNV;
+typedef void (APIENTRYP pfn_glGetProgramSubroutineParameteruivNV) (GLenum, GLuint, GLuint*);
+extern pfn_glGetProgramSubroutineParameteruivNV fp_glGetProgramSubroutineParameteruivNV;
+
+ /* GL_NV_gpu_program5_mem_extended */
+extern GLboolean GLAD_NV_gpu_program5_mem_extended;
+
+ /* GL_NV_gpu_shader5 */
+extern GLboolean GLAD_NV_gpu_shader5;
+
+ /* GL_NV_half_float */
+extern GLboolean GLAD_NV_half_float;
+#define GL_HALF_FLOAT_NV                       0x140B
+typedef void (APIENTRYP pfn_glVertex2hNV) (GLhalfNV, GLhalfNV);
+extern pfn_glVertex2hNV fp_glVertex2hNV;
+typedef void (APIENTRYP pfn_glVertex2hvNV) (const GLhalfNV*);
+extern pfn_glVertex2hvNV fp_glVertex2hvNV;
+typedef void (APIENTRYP pfn_glVertex3hNV) (GLhalfNV, GLhalfNV, GLhalfNV);
+extern pfn_glVertex3hNV fp_glVertex3hNV;
+typedef void (APIENTRYP pfn_glVertex3hvNV) (const GLhalfNV*);
+extern pfn_glVertex3hvNV fp_glVertex3hvNV;
+typedef void (APIENTRYP pfn_glVertex4hNV) (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV);
+extern pfn_glVertex4hNV fp_glVertex4hNV;
+typedef void (APIENTRYP pfn_glVertex4hvNV) (const GLhalfNV*);
+extern pfn_glVertex4hvNV fp_glVertex4hvNV;
+typedef void (APIENTRYP pfn_glNormal3hNV) (GLhalfNV, GLhalfNV, GLhalfNV);
+extern pfn_glNormal3hNV fp_glNormal3hNV;
+typedef void (APIENTRYP pfn_glNormal3hvNV) (const GLhalfNV*);
+extern pfn_glNormal3hvNV fp_glNormal3hvNV;
+typedef void (APIENTRYP pfn_glColor3hNV) (GLhalfNV, GLhalfNV, GLhalfNV);
+extern pfn_glColor3hNV fp_glColor3hNV;
+typedef void (APIENTRYP pfn_glColor3hvNV) (const GLhalfNV*);
+extern pfn_glColor3hvNV fp_glColor3hvNV;
+typedef void (APIENTRYP pfn_glColor4hNV) (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV);
+extern pfn_glColor4hNV fp_glColor4hNV;
+typedef void (APIENTRYP pfn_glColor4hvNV) (const GLhalfNV*);
+extern pfn_glColor4hvNV fp_glColor4hvNV;
+typedef void (APIENTRYP pfn_glTexCoord1hNV) (GLhalfNV);
+extern pfn_glTexCoord1hNV fp_glTexCoord1hNV;
+typedef void (APIENTRYP pfn_glTexCoord1hvNV) (const GLhalfNV*);
+extern pfn_glTexCoord1hvNV fp_glTexCoord1hvNV;
+typedef void (APIENTRYP pfn_glTexCoord2hNV) (GLhalfNV, GLhalfNV);
+extern pfn_glTexCoord2hNV fp_glTexCoord2hNV;
+typedef void (APIENTRYP pfn_glTexCoord2hvNV) (const GLhalfNV*);
+extern pfn_glTexCoord2hvNV fp_glTexCoord2hvNV;
+typedef void (APIENTRYP pfn_glTexCoord3hNV) (GLhalfNV, GLhalfNV, GLhalfNV);
+extern pfn_glTexCoord3hNV fp_glTexCoord3hNV;
+typedef void (APIENTRYP pfn_glTexCoord3hvNV) (const GLhalfNV*);
+extern pfn_glTexCoord3hvNV fp_glTexCoord3hvNV;
+typedef void (APIENTRYP pfn_glTexCoord4hNV) (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV);
+extern pfn_glTexCoord4hNV fp_glTexCoord4hNV;
+typedef void (APIENTRYP pfn_glTexCoord4hvNV) (const GLhalfNV*);
+extern pfn_glTexCoord4hvNV fp_glTexCoord4hvNV;
+typedef void (APIENTRYP pfn_glMultiTexCoord1hNV) (GLenum, GLhalfNV);
+extern pfn_glMultiTexCoord1hNV fp_glMultiTexCoord1hNV;
+typedef void (APIENTRYP pfn_glMultiTexCoord1hvNV) (GLenum, const GLhalfNV*);
+extern pfn_glMultiTexCoord1hvNV fp_glMultiTexCoord1hvNV;
+typedef void (APIENTRYP pfn_glMultiTexCoord2hNV) (GLenum, GLhalfNV, GLhalfNV);
+extern pfn_glMultiTexCoord2hNV fp_glMultiTexCoord2hNV;
+typedef void (APIENTRYP pfn_glMultiTexCoord2hvNV) (GLenum, const GLhalfNV*);
+extern pfn_glMultiTexCoord2hvNV fp_glMultiTexCoord2hvNV;
+typedef void (APIENTRYP pfn_glMultiTexCoord3hNV) (GLenum, GLhalfNV, GLhalfNV, GLhalfNV);
+extern pfn_glMultiTexCoord3hNV fp_glMultiTexCoord3hNV;
+typedef void (APIENTRYP pfn_glMultiTexCoord3hvNV) (GLenum, const GLhalfNV*);
+extern pfn_glMultiTexCoord3hvNV fp_glMultiTexCoord3hvNV;
+typedef void (APIENTRYP pfn_glMultiTexCoord4hNV) (GLenum, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV);
+extern pfn_glMultiTexCoord4hNV fp_glMultiTexCoord4hNV;
+typedef void (APIENTRYP pfn_glMultiTexCoord4hvNV) (GLenum, const GLhalfNV*);
+extern pfn_glMultiTexCoord4hvNV fp_glMultiTexCoord4hvNV;
+typedef void (APIENTRYP pfn_glFogCoordhNV) (GLhalfNV);
+extern pfn_glFogCoordhNV fp_glFogCoordhNV;
+typedef void (APIENTRYP pfn_glFogCoordhvNV) (const GLhalfNV*);
+extern pfn_glFogCoordhvNV fp_glFogCoordhvNV;
+typedef void (APIENTRYP pfn_glSecondaryColor3hNV) (GLhalfNV, GLhalfNV, GLhalfNV);
+extern pfn_glSecondaryColor3hNV fp_glSecondaryColor3hNV;
+typedef void (APIENTRYP pfn_glSecondaryColor3hvNV) (const GLhalfNV*);
+extern pfn_glSecondaryColor3hvNV fp_glSecondaryColor3hvNV;
+typedef void (APIENTRYP pfn_glVertexWeighthNV) (GLhalfNV);
+extern pfn_glVertexWeighthNV fp_glVertexWeighthNV;
+typedef void (APIENTRYP pfn_glVertexWeighthvNV) (const GLhalfNV*);
+extern pfn_glVertexWeighthvNV fp_glVertexWeighthvNV;
+typedef void (APIENTRYP pfn_glVertexAttrib1hNV) (GLuint, GLhalfNV);
+extern pfn_glVertexAttrib1hNV fp_glVertexAttrib1hNV;
+typedef void (APIENTRYP pfn_glVertexAttrib1hvNV) (GLuint, const GLhalfNV*);
+extern pfn_glVertexAttrib1hvNV fp_glVertexAttrib1hvNV;
+typedef void (APIENTRYP pfn_glVertexAttrib2hNV) (GLuint, GLhalfNV, GLhalfNV);
+extern pfn_glVertexAttrib2hNV fp_glVertexAttrib2hNV;
+typedef void (APIENTRYP pfn_glVertexAttrib2hvNV) (GLuint, const GLhalfNV*);
+extern pfn_glVertexAttrib2hvNV fp_glVertexAttrib2hvNV;
+typedef void (APIENTRYP pfn_glVertexAttrib3hNV) (GLuint, GLhalfNV, GLhalfNV, GLhalfNV);
+extern pfn_glVertexAttrib3hNV fp_glVertexAttrib3hNV;
+typedef void (APIENTRYP pfn_glVertexAttrib3hvNV) (GLuint, const GLhalfNV*);
+extern pfn_glVertexAttrib3hvNV fp_glVertexAttrib3hvNV;
+typedef void (APIENTRYP pfn_glVertexAttrib4hNV) (GLuint, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV);
+extern pfn_glVertexAttrib4hNV fp_glVertexAttrib4hNV;
+typedef void (APIENTRYP pfn_glVertexAttrib4hvNV) (GLuint, const GLhalfNV*);
+extern pfn_glVertexAttrib4hvNV fp_glVertexAttrib4hvNV;
+typedef void (APIENTRYP pfn_glVertexAttribs1hvNV) (GLuint, GLsizei, const GLhalfNV*);
+extern pfn_glVertexAttribs1hvNV fp_glVertexAttribs1hvNV;
+typedef void (APIENTRYP pfn_glVertexAttribs2hvNV) (GLuint, GLsizei, const GLhalfNV*);
+extern pfn_glVertexAttribs2hvNV fp_glVertexAttribs2hvNV;
+typedef void (APIENTRYP pfn_glVertexAttribs3hvNV) (GLuint, GLsizei, const GLhalfNV*);
+extern pfn_glVertexAttribs3hvNV fp_glVertexAttribs3hvNV;
+typedef void (APIENTRYP pfn_glVertexAttribs4hvNV) (GLuint, GLsizei, const GLhalfNV*);
+extern pfn_glVertexAttribs4hvNV fp_glVertexAttribs4hvNV;
+
+ /* GL_NV_instanced_arrays */
+extern GLboolean GLAD_NV_instanced_arrays;
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV      0x88FE
+typedef void (APIENTRYP pfn_glVertexAttribDivisorNV) (GLuint, GLuint);
+extern pfn_glVertexAttribDivisorNV fp_glVertexAttribDivisorNV;
+
+ /* GL_NV_multisample_coverage */
+extern GLboolean GLAD_NV_multisample_coverage;
+#define GL_SAMPLES_ARB                         0x80A9
+#define GL_COLOR_SAMPLES_NV                    0x8E20
+
+ /* GL_NV_non_square_matrices */
+extern GLboolean GLAD_NV_non_square_matrices;
+#define GL_FLOAT_MAT2x3_NV                     0x8B65
+#define GL_FLOAT_MAT2x4_NV                     0x8B66
+#define GL_FLOAT_MAT3x2_NV                     0x8B67
+#define GL_FLOAT_MAT3x4_NV                     0x8B68
+#define GL_FLOAT_MAT4x2_NV                     0x8B69
+#define GL_FLOAT_MAT4x3_NV                     0x8B6A
+typedef void (APIENTRYP pfn_glUniformMatrix2x3fvNV) (GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glUniformMatrix2x3fvNV fp_glUniformMatrix2x3fvNV;
+typedef void (APIENTRYP pfn_glUniformMatrix3x2fvNV) (GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glUniformMatrix3x2fvNV fp_glUniformMatrix3x2fvNV;
+typedef void (APIENTRYP pfn_glUniformMatrix2x4fvNV) (GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glUniformMatrix2x4fvNV fp_glUniformMatrix2x4fvNV;
+typedef void (APIENTRYP pfn_glUniformMatrix4x2fvNV) (GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glUniformMatrix4x2fvNV fp_glUniformMatrix4x2fvNV;
+typedef void (APIENTRYP pfn_glUniformMatrix3x4fvNV) (GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glUniformMatrix3x4fvNV fp_glUniformMatrix3x4fvNV;
+typedef void (APIENTRYP pfn_glUniformMatrix4x3fvNV) (GLint, GLsizei, GLboolean, const GLfloat*);
+extern pfn_glUniformMatrix4x3fvNV fp_glUniformMatrix4x3fvNV;
+
+ /* GL_NV_occlusion_query */
+extern GLboolean GLAD_NV_occlusion_query;
+#define GL_PIXEL_COUNTER_BITS_NV               0x8864
+#define GL_CURRENT_OCCLUSION_QUERY_ID_NV       0x8865
+#define GL_PIXEL_COUNT_NV                      0x8866
+#define GL_PIXEL_COUNT_AVAILABLE_NV            0x8867
+typedef void (APIENTRYP pfn_glGenOcclusionQueriesNV) (GLsizei, GLuint*);
+extern pfn_glGenOcclusionQueriesNV fp_glGenOcclusionQueriesNV;
+typedef void (APIENTRYP pfn_glDeleteOcclusionQueriesNV) (GLsizei, const GLuint*);
+extern pfn_glDeleteOcclusionQueriesNV fp_glDeleteOcclusionQueriesNV;
+typedef GLboolean (APIENTRYP pfn_glIsOcclusionQueryNV) (GLuint);
+extern pfn_glIsOcclusionQueryNV fp_glIsOcclusionQueryNV;
+typedef void (APIENTRYP pfn_glBeginOcclusionQueryNV) (GLuint);
+extern pfn_glBeginOcclusionQueryNV fp_glBeginOcclusionQueryNV;
+typedef void (APIENTRYP pfn_glEndOcclusionQueryNV) ();
+extern pfn_glEndOcclusionQueryNV fp_glEndOcclusionQueryNV;
+typedef void (APIENTRYP pfn_glGetOcclusionQueryivNV) (GLuint, GLenum, GLint*);
+extern pfn_glGetOcclusionQueryivNV fp_glGetOcclusionQueryivNV;
+typedef void (APIENTRYP pfn_glGetOcclusionQueryuivNV) (GLuint, GLenum, GLuint*);
+extern pfn_glGetOcclusionQueryuivNV fp_glGetOcclusionQueryuivNV;
+
+ /* GL_NV_parameter_buffer_object */
+extern GLboolean GLAD_NV_parameter_buffer_object;
+#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV  0x8DA0
+#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV  0x8DA1
+#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV  0x8DA2
+#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV  0x8DA3
+#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV  0x8DA4
+typedef void (APIENTRYP pfn_glProgramBufferParametersfvNV) (GLenum, GLuint, GLuint, GLsizei, const GLfloat*);
+extern pfn_glProgramBufferParametersfvNV fp_glProgramBufferParametersfvNV;
+typedef void (APIENTRYP pfn_glProgramBufferParametersIivNV) (GLenum, GLuint, GLuint, GLsizei, const GLint*);
+extern pfn_glProgramBufferParametersIivNV fp_glProgramBufferParametersIivNV;
+typedef void (APIENTRYP pfn_glProgramBufferParametersIuivNV) (GLenum, GLuint, GLuint, GLsizei, const GLuint*);
+extern pfn_glProgramBufferParametersIuivNV fp_glProgramBufferParametersIuivNV;
+
+ /* GL_NV_parameter_buffer_object2 */
+extern GLboolean GLAD_NV_parameter_buffer_object2;
+
+ /* GL_NV_path_rendering */
+extern GLboolean GLAD_NV_path_rendering;
+#define GL_PATH_FORMAT_SVG_NV                  0x9070
+#define GL_PATH_FORMAT_PS_NV                   0x9071
+#define GL_STANDARD_FONT_NAME_NV               0x9072
+#define GL_SYSTEM_FONT_NAME_NV                 0x9073
+#define GL_FILE_NAME_NV                        0x9074
+#define GL_PATH_STROKE_WIDTH_NV                0x9075
+#define GL_PATH_END_CAPS_NV                    0x9076
+#define GL_PATH_INITIAL_END_CAP_NV             0x9077
+#define GL_PATH_TERMINAL_END_CAP_NV            0x9078
+#define GL_PATH_JOIN_STYLE_NV                  0x9079
+#define GL_PATH_MITER_LIMIT_NV                 0x907A
+#define GL_PATH_DASH_CAPS_NV                   0x907B
+#define GL_PATH_INITIAL_DASH_CAP_NV            0x907C
+#define GL_PATH_TERMINAL_DASH_CAP_NV           0x907D
+#define GL_PATH_DASH_OFFSET_NV                 0x907E
+#define GL_PATH_CLIENT_LENGTH_NV               0x907F
+#define GL_PATH_FILL_MODE_NV                   0x9080
+#define GL_PATH_FILL_MASK_NV                   0x9081
+#define GL_PATH_FILL_COVER_MODE_NV             0x9082
+#define GL_PATH_STROKE_COVER_MODE_NV           0x9083
+#define GL_PATH_STROKE_MASK_NV                 0x9084
+#define GL_COUNT_UP_NV                         0x9088
+#define GL_COUNT_DOWN_NV                       0x9089
+#define GL_PATH_OBJECT_BOUNDING_BOX_NV         0x908A
+#define GL_CONVEX_HULL_NV                      0x908B
+#define GL_BOUNDING_BOX_NV                     0x908D
+#define GL_TRANSLATE_X_NV                      0x908E
+#define GL_TRANSLATE_Y_NV                      0x908F
+#define GL_TRANSLATE_2D_NV                     0x9090
+#define GL_TRANSLATE_3D_NV                     0x9091
+#define GL_AFFINE_2D_NV                        0x9092
+#define GL_AFFINE_3D_NV                        0x9094
+#define GL_TRANSPOSE_AFFINE_2D_NV              0x9096
+#define GL_TRANSPOSE_AFFINE_3D_NV              0x9098
+#define GL_UTF8_NV                             0x909A
+#define GL_UTF16_NV                            0x909B
+#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV   0x909C
+#define GL_PATH_COMMAND_COUNT_NV               0x909D
+#define GL_PATH_COORD_COUNT_NV                 0x909E
+#define GL_PATH_DASH_ARRAY_COUNT_NV            0x909F
+#define GL_PATH_COMPUTED_LENGTH_NV             0x90A0
+#define GL_PATH_FILL_BOUNDING_BOX_NV           0x90A1
+#define GL_PATH_STROKE_BOUNDING_BOX_NV         0x90A2
+#define GL_SQUARE_NV                           0x90A3
+#define GL_ROUND_NV                            0x90A4
+#define GL_TRIANGULAR_NV                       0x90A5
+#define GL_BEVEL_NV                            0x90A6
+#define GL_MITER_REVERT_NV                     0x90A7
+#define GL_MITER_TRUNCATE_NV                   0x90A8
+#define GL_SKIP_MISSING_GLYPH_NV               0x90A9
+#define GL_USE_MISSING_GLYPH_NV                0x90AA
+#define GL_PATH_ERROR_POSITION_NV              0x90AB
+#define GL_PATH_FOG_GEN_MODE_NV                0x90AC
+#define GL_ACCUM_ADJACENT_PAIRS_NV             0x90AD
+#define GL_ADJACENT_PAIRS_NV                   0x90AE
+#define GL_FIRST_TO_REST_NV                    0x90AF
+#define GL_PATH_GEN_MODE_NV                    0x90B0
+#define GL_PATH_GEN_COEFF_NV                   0x90B1
+#define GL_PATH_GEN_COLOR_FORMAT_NV            0x90B2
+#define GL_PATH_GEN_COMPONENTS_NV              0x90B3
+#define GL_PATH_STENCIL_FUNC_NV                0x90B7
+#define GL_PATH_STENCIL_REF_NV                 0x90B8
+#define GL_PATH_STENCIL_VALUE_MASK_NV          0x90B9
+#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV  0x90BD
+#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV  0x90BE
+#define GL_PATH_COVER_DEPTH_FUNC_NV            0x90BF
+#define GL_PATH_DASH_OFFSET_RESET_NV           0x90B4
+#define GL_MOVE_TO_RESETS_NV                   0x90B5
+#define GL_MOVE_TO_CONTINUES_NV                0x90B6
+#define GL_CLOSE_PATH_NV                       0x00
+#define GL_MOVE_TO_NV                          0x02
+#define GL_RELATIVE_MOVE_TO_NV                 0x03
+#define GL_LINE_TO_NV                          0x04
+#define GL_RELATIVE_LINE_TO_NV                 0x05
+#define GL_HORIZONTAL_LINE_TO_NV               0x06
+#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV      0x07
+#define GL_VERTICAL_LINE_TO_NV                 0x08
+#define GL_RELATIVE_VERTICAL_LINE_TO_NV        0x09
+#define GL_QUADRATIC_CURVE_TO_NV               0x0A
+#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV      0x0B
+#define GL_CUBIC_CURVE_TO_NV                   0x0C
+#define GL_RELATIVE_CUBIC_CURVE_TO_NV          0x0D
+#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV        0x0E
+#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV  0x0F
+#define GL_SMOOTH_CUBIC_CURVE_TO_NV            0x10
+#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV   0x11
+#define GL_SMALL_CCW_ARC_TO_NV                 0x12
+#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV        0x13
+#define GL_SMALL_CW_ARC_TO_NV                  0x14
+#define GL_RELATIVE_SMALL_CW_ARC_TO_NV         0x15
+#define GL_LARGE_CCW_ARC_TO_NV                 0x16
+#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV        0x17
+#define GL_LARGE_CW_ARC_TO_NV                  0x18
+#define GL_RELATIVE_LARGE_CW_ARC_TO_NV         0x19
+#define GL_RESTART_PATH_NV                     0xF0
+#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV         0xF2
+#define GL_DUP_LAST_CUBIC_CURVE_TO_NV          0xF4
+#define GL_RECT_NV                             0xF6
+#define GL_CIRCULAR_CCW_ARC_TO_NV              0xF8
+#define GL_CIRCULAR_CW_ARC_TO_NV               0xFA
+#define GL_CIRCULAR_TANGENT_ARC_TO_NV          0xFC
+#define GL_ARC_TO_NV                           0xFE
+#define GL_RELATIVE_ARC_TO_NV                  0xFF
+#define GL_BOLD_BIT_NV                         0x01
+#define GL_ITALIC_BIT_NV                       0x02
+#define GL_GLYPH_WIDTH_BIT_NV                  0x01
+#define GL_GLYPH_HEIGHT_BIT_NV                 0x02
+#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV   0x04
+#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV   0x08
+#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV  0x10
+#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV     0x20
+#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV     0x40
+#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV  0x80
+#define GL_GLYPH_HAS_KERNING_BIT_NV            0x100
+#define GL_FONT_X_MIN_BOUNDS_BIT_NV            0x00010000
+#define GL_FONT_Y_MIN_BOUNDS_BIT_NV            0x00020000
+#define GL_FONT_X_MAX_BOUNDS_BIT_NV            0x00040000
+#define GL_FONT_Y_MAX_BOUNDS_BIT_NV            0x00080000
+#define GL_FONT_UNITS_PER_EM_BIT_NV            0x00100000
+#define GL_FONT_ASCENDER_BIT_NV                0x00200000
+#define GL_FONT_DESCENDER_BIT_NV               0x00400000
+#define GL_FONT_HEIGHT_BIT_NV                  0x00800000
+#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV       0x01000000
+#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV      0x02000000
+#define GL_FONT_UNDERLINE_POSITION_BIT_NV      0x04000000
+#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV     0x08000000
+#define GL_FONT_HAS_KERNING_BIT_NV             0x10000000
+#define GL_PRIMARY_COLOR_NV                    0x852C
+#define GL_SECONDARY_COLOR_NV                  0x852D
+#define GL_ROUNDED_RECT_NV                     0xE8
+#define GL_RELATIVE_ROUNDED_RECT_NV            0xE9
+#define GL_ROUNDED_RECT2_NV                    0xEA
+#define GL_RELATIVE_ROUNDED_RECT2_NV           0xEB
+#define GL_ROUNDED_RECT4_NV                    0xEC
+#define GL_RELATIVE_ROUNDED_RECT4_NV           0xED
+#define GL_ROUNDED_RECT8_NV                    0xEE
+#define GL_RELATIVE_ROUNDED_RECT8_NV           0xEF
+#define GL_RELATIVE_RECT_NV                    0xF7
+#define GL_FONT_GLYPHS_AVAILABLE_NV            0x9368
+#define GL_FONT_TARGET_UNAVAILABLE_NV          0x9369
+#define GL_FONT_UNAVAILABLE_NV                 0x936A
+#define GL_FONT_UNINTELLIGIBLE_NV              0x936B
+#define GL_CONIC_CURVE_TO_NV                   0x1A
+#define GL_RELATIVE_CONIC_CURVE_TO_NV          0x1B
+#define GL_FONT_NUM_GLYPH_INDICES_BIT_NV       0x20000000
+#define GL_STANDARD_FONT_FORMAT_NV             0x936C
+#define GL_2_BYTES_NV                          0x1407
+#define GL_3_BYTES_NV                          0x1408
+#define GL_4_BYTES_NV                          0x1409
+#define GL_EYE_LINEAR_NV                       0x2400
+#define GL_OBJECT_LINEAR_NV                    0x2401
+#define GL_CONSTANT_NV                         0x8576
+#define GL_PATH_PROJECTION_NV                  0x1701
+#define GL_PATH_MODELVIEW_NV                   0x1700
+#define GL_PATH_MODELVIEW_STACK_DEPTH_NV       0x0BA3
+#define GL_PATH_MODELVIEW_MATRIX_NV            0x0BA6
+#define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV   0x0D36
+#define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV  0x84E3
+#define GL_PATH_PROJECTION_STACK_DEPTH_NV      0x0BA4
+#define GL_PATH_PROJECTION_MATRIX_NV           0x0BA7
+#define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV  0x0D38
+#define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV  0x84E4
+#define GL_FRAGMENT_INPUT_NV                   0x936D
+typedef GLuint (APIENTRYP pfn_glGenPathsNV) (GLsizei);
+extern pfn_glGenPathsNV fp_glGenPathsNV;
+typedef void (APIENTRYP pfn_glDeletePathsNV) (GLuint, GLsizei);
+extern pfn_glDeletePathsNV fp_glDeletePathsNV;
+typedef GLboolean (APIENTRYP pfn_glIsPathNV) (GLuint);
+extern pfn_glIsPathNV fp_glIsPathNV;
+typedef void (APIENTRYP pfn_glPathCommandsNV) (GLuint, GLsizei, const GLubyte*, GLsizei, GLenum, const void*);
+extern pfn_glPathCommandsNV fp_glPathCommandsNV;
+typedef void (APIENTRYP pfn_glPathCoordsNV) (GLuint, GLsizei, GLenum, const void*);
+extern pfn_glPathCoordsNV fp_glPathCoordsNV;
+typedef void (APIENTRYP pfn_glPathSubCommandsNV) (GLuint, GLsizei, GLsizei, GLsizei, const GLubyte*, GLsizei, GLenum, const void*);
+extern pfn_glPathSubCommandsNV fp_glPathSubCommandsNV;
+typedef void (APIENTRYP pfn_glPathSubCoordsNV) (GLuint, GLsizei, GLsizei, GLenum, const void*);
+extern pfn_glPathSubCoordsNV fp_glPathSubCoordsNV;
+typedef void (APIENTRYP pfn_glPathStringNV) (GLuint, GLenum, GLsizei, const void*);
+extern pfn_glPathStringNV fp_glPathStringNV;
+typedef void (APIENTRYP pfn_glPathGlyphsNV) (GLuint, GLenum, const void*, GLbitfield, GLsizei, GLenum, const void*, GLenum, GLuint, GLfloat);
+extern pfn_glPathGlyphsNV fp_glPathGlyphsNV;
+typedef void (APIENTRYP pfn_glPathGlyphRangeNV) (GLuint, GLenum, const void*, GLbitfield, GLuint, GLsizei, GLenum, GLuint, GLfloat);
+extern pfn_glPathGlyphRangeNV fp_glPathGlyphRangeNV;
+typedef void (APIENTRYP pfn_glWeightPathsNV) (GLuint, GLsizei, const GLuint*, const GLfloat*);
+extern pfn_glWeightPathsNV fp_glWeightPathsNV;
+typedef void (APIENTRYP pfn_glCopyPathNV) (GLuint, GLuint);
+extern pfn_glCopyPathNV fp_glCopyPathNV;
+typedef void (APIENTRYP pfn_glInterpolatePathsNV) (GLuint, GLuint, GLuint, GLfloat);
+extern pfn_glInterpolatePathsNV fp_glInterpolatePathsNV;
+typedef void (APIENTRYP pfn_glTransformPathNV) (GLuint, GLuint, GLenum, const GLfloat*);
+extern pfn_glTransformPathNV fp_glTransformPathNV;
+typedef void (APIENTRYP pfn_glPathParameterivNV) (GLuint, GLenum, const GLint*);
+extern pfn_glPathParameterivNV fp_glPathParameterivNV;
+typedef void (APIENTRYP pfn_glPathParameteriNV) (GLuint, GLenum, GLint);
+extern pfn_glPathParameteriNV fp_glPathParameteriNV;
+typedef void (APIENTRYP pfn_glPathParameterfvNV) (GLuint, GLenum, const GLfloat*);
+extern pfn_glPathParameterfvNV fp_glPathParameterfvNV;
+typedef void (APIENTRYP pfn_glPathParameterfNV) (GLuint, GLenum, GLfloat);
+extern pfn_glPathParameterfNV fp_glPathParameterfNV;
+typedef void (APIENTRYP pfn_glPathDashArrayNV) (GLuint, GLsizei, const GLfloat*);
+extern pfn_glPathDashArrayNV fp_glPathDashArrayNV;
+typedef void (APIENTRYP pfn_glPathStencilFuncNV) (GLenum, GLint, GLuint);
+extern pfn_glPathStencilFuncNV fp_glPathStencilFuncNV;
+typedef void (APIENTRYP pfn_glPathStencilDepthOffsetNV) (GLfloat, GLfloat);
+extern pfn_glPathStencilDepthOffsetNV fp_glPathStencilDepthOffsetNV;
+typedef void (APIENTRYP pfn_glStencilFillPathNV) (GLuint, GLenum, GLuint);
+extern pfn_glStencilFillPathNV fp_glStencilFillPathNV;
+typedef void (APIENTRYP pfn_glStencilStrokePathNV) (GLuint, GLint, GLuint);
+extern pfn_glStencilStrokePathNV fp_glStencilStrokePathNV;
+typedef void (APIENTRYP pfn_glStencilFillPathInstancedNV) (GLsizei, GLenum, const void*, GLuint, GLenum, GLuint, GLenum, const GLfloat*);
+extern pfn_glStencilFillPathInstancedNV fp_glStencilFillPathInstancedNV;
+typedef void (APIENTRYP pfn_glStencilStrokePathInstancedNV) (GLsizei, GLenum, const void*, GLuint, GLint, GLuint, GLenum, const GLfloat*);
+extern pfn_glStencilStrokePathInstancedNV fp_glStencilStrokePathInstancedNV;
+typedef void (APIENTRYP pfn_glPathCoverDepthFuncNV) (GLenum);
+extern pfn_glPathCoverDepthFuncNV fp_glPathCoverDepthFuncNV;
+typedef void (APIENTRYP pfn_glPathColorGenNV) (GLenum, GLenum, GLenum, const GLfloat*);
+extern pfn_glPathColorGenNV fp_glPathColorGenNV;
+typedef void (APIENTRYP pfn_glPathTexGenNV) (GLenum, GLenum, GLint, const GLfloat*);
+extern pfn_glPathTexGenNV fp_glPathTexGenNV;
+typedef void (APIENTRYP pfn_glPathFogGenNV) (GLenum);
+extern pfn_glPathFogGenNV fp_glPathFogGenNV;
+typedef void (APIENTRYP pfn_glCoverFillPathNV) (GLuint, GLenum);
+extern pfn_glCoverFillPathNV fp_glCoverFillPathNV;
+typedef void (APIENTRYP pfn_glCoverStrokePathNV) (GLuint, GLenum);
+extern pfn_glCoverStrokePathNV fp_glCoverStrokePathNV;
+typedef void (APIENTRYP pfn_glCoverFillPathInstancedNV) (GLsizei, GLenum, const void*, GLuint, GLenum, GLenum, const GLfloat*);
+extern pfn_glCoverFillPathInstancedNV fp_glCoverFillPathInstancedNV;
+typedef void (APIENTRYP pfn_glCoverStrokePathInstancedNV) (GLsizei, GLenum, const void*, GLuint, GLenum, GLenum, const GLfloat*);
+extern pfn_glCoverStrokePathInstancedNV fp_glCoverStrokePathInstancedNV;
+typedef void (APIENTRYP pfn_glGetPathParameterivNV) (GLuint, GLenum, GLint*);
+extern pfn_glGetPathParameterivNV fp_glGetPathParameterivNV;
+typedef void (APIENTRYP pfn_glGetPathParameterfvNV) (GLuint, GLenum, GLfloat*);
+extern pfn_glGetPathParameterfvNV fp_glGetPathParameterfvNV;
+typedef void (APIENTRYP pfn_glGetPathCommandsNV) (GLuint, GLubyte*);
+extern pfn_glGetPathCommandsNV fp_glGetPathCommandsNV;
+typedef void (APIENTRYP pfn_glGetPathCoordsNV) (GLuint, GLfloat*);
+extern pfn_glGetPathCoordsNV fp_glGetPathCoordsNV;
+typedef void (APIENTRYP pfn_glGetPathDashArrayNV) (GLuint, GLfloat*);
+extern pfn_glGetPathDashArrayNV fp_glGetPathDashArrayNV;
+typedef void (APIENTRYP pfn_glGetPathMetricsNV) (GLbitfield, GLsizei, GLenum, const void*, GLuint, GLsizei, GLfloat*);
+extern pfn_glGetPathMetricsNV fp_glGetPathMetricsNV;
+typedef void (APIENTRYP pfn_glGetPathMetricRangeNV) (GLbitfield, GLuint, GLsizei, GLsizei, GLfloat*);
+extern pfn_glGetPathMetricRangeNV fp_glGetPathMetricRangeNV;
+typedef void (APIENTRYP pfn_glGetPathSpacingNV) (GLenum, GLsizei, GLenum, const void*, GLuint, GLfloat, GLfloat, GLenum, GLfloat*);
+extern pfn_glGetPathSpacingNV fp_glGetPathSpacingNV;
+typedef void (APIENTRYP pfn_glGetPathColorGenivNV) (GLenum, GLenum, GLint*);
+extern pfn_glGetPathColorGenivNV fp_glGetPathColorGenivNV;
+typedef void (APIENTRYP pfn_glGetPathColorGenfvNV) (GLenum, GLenum, GLfloat*);
+extern pfn_glGetPathColorGenfvNV fp_glGetPathColorGenfvNV;
+typedef void (APIENTRYP pfn_glGetPathTexGenivNV) (GLenum, GLenum, GLint*);
+extern pfn_glGetPathTexGenivNV fp_glGetPathTexGenivNV;
+typedef void (APIENTRYP pfn_glGetPathTexGenfvNV) (GLenum, GLenum, GLfloat*);
+extern pfn_glGetPathTexGenfvNV fp_glGetPathTexGenfvNV;
+typedef GLboolean (APIENTRYP pfn_glIsPointInFillPathNV) (GLuint, GLuint, GLfloat, GLfloat);
+extern pfn_glIsPointInFillPathNV fp_glIsPointInFillPathNV;
+typedef GLboolean (APIENTRYP pfn_glIsPointInStrokePathNV) (GLuint, GLfloat, GLfloat);
+extern pfn_glIsPointInStrokePathNV fp_glIsPointInStrokePathNV;
+typedef GLfloat (APIENTRYP pfn_glGetPathLengthNV) (GLuint, GLsizei, GLsizei);
+extern pfn_glGetPathLengthNV fp_glGetPathLengthNV;
+typedef GLboolean (APIENTRYP pfn_glPointAlongPathNV) (GLuint, GLsizei, GLsizei, GLfloat, GLfloat*, GLfloat*, GLfloat*, GLfloat*);
+extern pfn_glPointAlongPathNV fp_glPointAlongPathNV;
+typedef void (APIENTRYP pfn_glMatrixLoad3x2fNV) (GLenum, const GLfloat*);
+extern pfn_glMatrixLoad3x2fNV fp_glMatrixLoad3x2fNV;
+typedef void (APIENTRYP pfn_glMatrixLoad3x3fNV) (GLenum, const GLfloat*);
+extern pfn_glMatrixLoad3x3fNV fp_glMatrixLoad3x3fNV;
+typedef void (APIENTRYP pfn_glMatrixLoadTranspose3x3fNV) (GLenum, const GLfloat*);
+extern pfn_glMatrixLoadTranspose3x3fNV fp_glMatrixLoadTranspose3x3fNV;
+typedef void (APIENTRYP pfn_glMatrixMult3x2fNV) (GLenum, const GLfloat*);
+extern pfn_glMatrixMult3x2fNV fp_glMatrixMult3x2fNV;
+typedef void (APIENTRYP pfn_glMatrixMult3x3fNV) (GLenum, const GLfloat*);
+extern pfn_glMatrixMult3x3fNV fp_glMatrixMult3x3fNV;
+typedef void (APIENTRYP pfn_glMatrixMultTranspose3x3fNV) (GLenum, const GLfloat*);
+extern pfn_glMatrixMultTranspose3x3fNV fp_glMatrixMultTranspose3x3fNV;
+typedef void (APIENTRYP pfn_glStencilThenCoverFillPathNV) (GLuint, GLenum, GLuint, GLenum);
+extern pfn_glStencilThenCoverFillPathNV fp_glStencilThenCoverFillPathNV;
+typedef void (APIENTRYP pfn_glStencilThenCoverStrokePathNV) (GLuint, GLint, GLuint, GLenum);
+extern pfn_glStencilThenCoverStrokePathNV fp_glStencilThenCoverStrokePathNV;
+typedef void (APIENTRYP pfn_glStencilThenCoverFillPathInstancedNV) (GLsizei, GLenum, const void*, GLuint, GLenum, GLuint, GLenum, GLenum, const GLfloat*);
+extern pfn_glStencilThenCoverFillPathInstancedNV fp_glStencilThenCoverFillPathInstancedNV;
+typedef void (APIENTRYP pfn_glStencilThenCoverStrokePathInstancedNV) (GLsizei, GLenum, const void*, GLuint, GLint, GLuint, GLenum, GLenum, const GLfloat*);
+extern pfn_glStencilThenCoverStrokePathInstancedNV fp_glStencilThenCoverStrokePathInstancedNV;
+typedef GLenum (APIENTRYP pfn_glPathGlyphIndexRangeNV) (GLenum, const void*, GLbitfield, GLuint, GLfloat, GLuint);
+extern pfn_glPathGlyphIndexRangeNV fp_glPathGlyphIndexRangeNV;
+typedef GLenum (APIENTRYP pfn_glPathGlyphIndexArrayNV) (GLuint, GLenum, const void*, GLbitfield, GLuint, GLsizei, GLuint, GLfloat);
+extern pfn_glPathGlyphIndexArrayNV fp_glPathGlyphIndexArrayNV;
+typedef GLenum (APIENTRYP pfn_glPathMemoryGlyphIndexArrayNV) (GLuint, GLenum, GLsizeiptr, const void*, GLsizei, GLuint, GLsizei, GLuint, GLfloat);
+extern pfn_glPathMemoryGlyphIndexArrayNV fp_glPathMemoryGlyphIndexArrayNV;
+typedef void (APIENTRYP pfn_glProgramPathFragmentInputGenNV) (GLuint, GLint, GLenum, GLint, const GLfloat*);
+extern pfn_glProgramPathFragmentInputGenNV fp_glProgramPathFragmentInputGenNV;
+typedef void (APIENTRYP pfn_glGetProgramResourcefvNV) (GLuint, GLenum, GLuint, GLsizei, const GLenum*, GLsizei, GLsizei*, GLfloat*);
+extern pfn_glGetProgramResourcefvNV fp_glGetProgramResourcefvNV;
+
+ /* GL_NV_present_video */
+extern GLboolean GLAD_NV_present_video;
+#define GL_FRAME_NV                            0x8E26
+#define GL_FIELDS_NV                           0x8E27
+#define GL_CURRENT_TIME_NV                     0x8E28
+#define GL_NUM_FILL_STREAMS_NV                 0x8E29
+#define GL_PRESENT_TIME_NV                     0x8E2A
+#define GL_PRESENT_DURATION_NV                 0x8E2B
+typedef void (APIENTRYP pfn_glPresentFrameKeyedNV) (GLuint, GLuint64EXT, GLuint, GLuint, GLenum, GLenum, GLuint, GLuint, GLenum, GLuint, GLuint);
+extern pfn_glPresentFrameKeyedNV fp_glPresentFrameKeyedNV;
+typedef void (APIENTRYP pfn_glPresentFrameDualFillNV) (GLuint, GLuint64EXT, GLuint, GLuint, GLenum, GLenum, GLuint, GLenum, GLuint, GLenum, GLuint, GLenum, GLuint);
+extern pfn_glPresentFrameDualFillNV fp_glPresentFrameDualFillNV;
+typedef void (APIENTRYP pfn_glGetVideoivNV) (GLuint, GLenum, GLint*);
+extern pfn_glGetVideoivNV fp_glGetVideoivNV;
+typedef void (APIENTRYP pfn_glGetVideouivNV) (GLuint, GLenum, GLuint*);
+extern pfn_glGetVideouivNV fp_glGetVideouivNV;
+typedef void (APIENTRYP pfn_glGetVideoi64vNV) (GLuint, GLenum, GLint64EXT*);
+extern pfn_glGetVideoi64vNV fp_glGetVideoi64vNV;
+typedef void (APIENTRYP pfn_glGetVideoui64vNV) (GLuint, GLenum, GLuint64EXT*);
+extern pfn_glGetVideoui64vNV fp_glGetVideoui64vNV;
+
+ /* GL_NV_primitive_restart */
+extern GLboolean GLAD_NV_primitive_restart;
+#define GL_PRIMITIVE_RESTART_NV                0x8558
+#define GL_PRIMITIVE_RESTART_INDEX_NV          0x8559
+typedef void (APIENTRYP pfn_glPrimitiveRestartNV) ();
+extern pfn_glPrimitiveRestartNV fp_glPrimitiveRestartNV;
+typedef void (APIENTRYP pfn_glPrimitiveRestartIndexNV) (GLuint);
+extern pfn_glPrimitiveRestartIndexNV fp_glPrimitiveRestartIndexNV;
+
+ /* GL_NV_read_buffer */
+extern GLboolean GLAD_NV_read_buffer;
+#define GL_READ_BUFFER_NV                      0x0C02
+typedef void (APIENTRYP pfn_glReadBufferNV) (GLenum);
+extern pfn_glReadBufferNV fp_glReadBufferNV;
+
+ /* GL_NV_read_buffer_front */
+extern GLboolean GLAD_NV_read_buffer_front;
+
+ /* GL_NV_read_depth */
+extern GLboolean GLAD_NV_read_depth;
+
+ /* GL_NV_read_depth_stencil */
+extern GLboolean GLAD_NV_read_depth_stencil;
+
+ /* GL_NV_read_stencil */
+extern GLboolean GLAD_NV_read_stencil;
+
+ /* GL_NV_shader_atomic_counters */
+extern GLboolean GLAD_NV_shader_atomic_counters;
+
+ /* GL_NV_shader_atomic_float */
+extern GLboolean GLAD_NV_shader_atomic_float;
+
+ /* GL_NV_shader_atomic_int64 */
+extern GLboolean GLAD_NV_shader_atomic_int64;
+
+ /* GL_NV_shader_buffer_load */
+extern GLboolean GLAD_NV_shader_buffer_load;
+#define GL_BUFFER_GPU_ADDRESS_NV               0x8F1D
+#define GL_GPU_ADDRESS_NV                      0x8F34
+#define GL_MAX_SHADER_BUFFER_ADDRESS_NV        0x8F35
+typedef void (APIENTRYP pfn_glMakeBufferResidentNV) (GLenum, GLenum);
+extern pfn_glMakeBufferResidentNV fp_glMakeBufferResidentNV;
+typedef void (APIENTRYP pfn_glMakeBufferNonResidentNV) (GLenum);
+extern pfn_glMakeBufferNonResidentNV fp_glMakeBufferNonResidentNV;
+typedef GLboolean (APIENTRYP pfn_glIsBufferResidentNV) (GLenum);
+extern pfn_glIsBufferResidentNV fp_glIsBufferResidentNV;
+typedef void (APIENTRYP pfn_glMakeNamedBufferResidentNV) (GLuint, GLenum);
+extern pfn_glMakeNamedBufferResidentNV fp_glMakeNamedBufferResidentNV;
+typedef void (APIENTRYP pfn_glMakeNamedBufferNonResidentNV) (GLuint);
+extern pfn_glMakeNamedBufferNonResidentNV fp_glMakeNamedBufferNonResidentNV;
+typedef GLboolean (APIENTRYP pfn_glIsNamedBufferResidentNV) (GLuint);
+extern pfn_glIsNamedBufferResidentNV fp_glIsNamedBufferResidentNV;
+typedef void (APIENTRYP pfn_glGetBufferParameterui64vNV) (GLenum, GLenum, GLuint64EXT*);
+extern pfn_glGetBufferParameterui64vNV fp_glGetBufferParameterui64vNV;
+typedef void (APIENTRYP pfn_glGetNamedBufferParameterui64vNV) (GLuint, GLenum, GLuint64EXT*);
+extern pfn_glGetNamedBufferParameterui64vNV fp_glGetNamedBufferParameterui64vNV;
+typedef void (APIENTRYP pfn_glGetIntegerui64vNV) (GLenum, GLuint64EXT*);
+extern pfn_glGetIntegerui64vNV fp_glGetIntegerui64vNV;
+typedef void (APIENTRYP pfn_glUniformui64NV) (GLint, GLuint64EXT);
+extern pfn_glUniformui64NV fp_glUniformui64NV;
+typedef void (APIENTRYP pfn_glUniformui64vNV) (GLint, GLsizei, const GLuint64EXT*);
+extern pfn_glUniformui64vNV fp_glUniformui64vNV;
+typedef void (APIENTRYP pfn_glProgramUniformui64NV) (GLuint, GLint, GLuint64EXT);
+extern pfn_glProgramUniformui64NV fp_glProgramUniformui64NV;
+typedef void (APIENTRYP pfn_glProgramUniformui64vNV) (GLuint, GLint, GLsizei, const GLuint64EXT*);
+extern pfn_glProgramUniformui64vNV fp_glProgramUniformui64vNV;
+
+ /* GL_NV_shader_buffer_store */
+extern GLboolean GLAD_NV_shader_buffer_store;
+#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV  0x00000010
+
+ /* GL_NV_shader_storage_buffer_object */
+extern GLboolean GLAD_NV_shader_storage_buffer_object;
+
+ /* GL_NV_shader_thread_group */
+extern GLboolean GLAD_NV_shader_thread_group;
+#define GL_WARP_SIZE_NV                        0x9339
+#define GL_WARPS_PER_SM_NV                     0x933A
+#define GL_SM_COUNT_NV                         0x933B
+
+ /* GL_NV_shader_thread_shuffle */
+extern GLboolean GLAD_NV_shader_thread_shuffle;
+
+ /* GL_NV_shadow_samplers_array */
+extern GLboolean GLAD_NV_shadow_samplers_array;
+#define GL_SAMPLER_2D_ARRAY_SHADOW_NV          0x8DC4
+
+ /* GL_NV_shadow_samplers_cube */
+extern GLboolean GLAD_NV_shadow_samplers_cube;
+#define GL_SAMPLER_CUBE_SHADOW_NV              0x8DC5
+
+ /* GL_NV_sRGB_formats */
+extern GLboolean GLAD_NV_sRGB_formats;
+#define GL_SLUMINANCE_NV                       0x8C46
+#define GL_SLUMINANCE_ALPHA_NV                 0x8C44
+#define GL_SRGB8_NV                            0x8C41
+#define GL_SLUMINANCE8_NV                      0x8C47
+#define GL_SLUMINANCE8_ALPHA8_NV               0x8C45
+#define GL_COMPRESSED_SRGB_S3TC_DXT1_NV        0x8C4C
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV  0x8C4D
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV  0x8C4E
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV  0x8C4F
+#define GL_ETC1_SRGB8_NV                       0x88EE
+
+ /* GL_NV_tessellation_program5 */
+extern GLboolean GLAD_NV_tessellation_program5;
+#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV        0x86D8
+#define GL_TESS_CONTROL_PROGRAM_NV             0x891E
+#define GL_TESS_EVALUATION_PROGRAM_NV          0x891F
+#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV  0x8C74
+#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV  0x8C75
+
+ /* GL_NV_texture_barrier */
+extern GLboolean GLAD_NV_texture_barrier;
+typedef void (APIENTRYP pfn_glTextureBarrierNV) ();
+extern pfn_glTextureBarrierNV fp_glTextureBarrierNV;
+
+ /* GL_NV_texture_border_clamp */
+extern GLboolean GLAD_NV_texture_border_clamp;
+#define GL_TEXTURE_BORDER_COLOR_NV             0x1004
+#define GL_CLAMP_TO_BORDER_NV                  0x812D
+
+ /* GL_NV_texture_compression_s3tc_update */
+extern GLboolean GLAD_NV_texture_compression_s3tc_update;
+
+ /* GL_NV_texture_multisample */
+extern GLboolean GLAD_NV_texture_multisample;
+#define GL_TEXTURE_COVERAGE_SAMPLES_NV         0x9045
+#define GL_TEXTURE_COLOR_SAMPLES_NV            0x9046
+typedef void (APIENTRYP pfn_glTexImage2DMultisampleCoverageNV) (GLenum, GLsizei, GLsizei, GLint, GLsizei, GLsizei, GLboolean);
+extern pfn_glTexImage2DMultisampleCoverageNV fp_glTexImage2DMultisampleCoverageNV;
+typedef void (APIENTRYP pfn_glTexImage3DMultisampleCoverageNV) (GLenum, GLsizei, GLsizei, GLint, GLsizei, GLsizei, GLsizei, GLboolean);
+extern pfn_glTexImage3DMultisampleCoverageNV fp_glTexImage3DMultisampleCoverageNV;
+typedef void (APIENTRYP pfn_glTextureImage2DMultisampleNV) (GLuint, GLenum, GLsizei, GLint, GLsizei, GLsizei, GLboolean);
+extern pfn_glTextureImage2DMultisampleNV fp_glTextureImage2DMultisampleNV;
+typedef void (APIENTRYP pfn_glTextureImage3DMultisampleNV) (GLuint, GLenum, GLsizei, GLint, GLsizei, GLsizei, GLsizei, GLboolean);
+extern pfn_glTextureImage3DMultisampleNV fp_glTextureImage3DMultisampleNV;
+typedef void (APIENTRYP pfn_glTextureImage2DMultisampleCoverageNV) (GLuint, GLenum, GLsizei, GLsizei, GLint, GLsizei, GLsizei, GLboolean);
+extern pfn_glTextureImage2DMultisampleCoverageNV fp_glTextureImage2DMultisampleCoverageNV;
+typedef void (APIENTRYP pfn_glTextureImage3DMultisampleCoverageNV) (GLuint, GLenum, GLsizei, GLsizei, GLint, GLsizei, GLsizei, GLsizei, GLboolean);
+extern pfn_glTextureImage3DMultisampleCoverageNV fp_glTextureImage3DMultisampleCoverageNV;
+
+ /* GL_NV_texture_npot_2D_mipmap */
+extern GLboolean GLAD_NV_texture_npot_2D_mipmap;
+
+ /* GL_NV_transform_feedback */
+extern GLboolean GLAD_NV_transform_feedback;
+#define GL_BACK_PRIMARY_COLOR_NV               0x8C77
+#define GL_BACK_SECONDARY_COLOR_NV             0x8C78
+#define GL_TEXTURE_COORD_NV                    0x8C79
+#define GL_CLIP_DISTANCE_NV                    0x8C7A
+#define GL_VERTEX_ID_NV                        0x8C7B
+#define GL_PRIMITIVE_ID_NV                     0x8C7C
+#define GL_GENERIC_ATTRIB_NV                   0x8C7D
+#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV       0x8C7E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV   0x8C7F
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV  0x8C80
+#define GL_ACTIVE_VARYINGS_NV                  0x8C81
+#define GL_ACTIVE_VARYING_MAX_LENGTH_NV        0x8C82
+#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV      0x8C83
+#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV  0x8C84
+#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV   0x8C85
+#define GL_TRANSFORM_FEEDBACK_RECORD_NV        0x8C86
+#define GL_PRIMITIVES_GENERATED_NV             0x8C87
+#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV  0x8C88
+#define GL_RASTERIZER_DISCARD_NV               0x8C89
+#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV  0x8C8A
+#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV  0x8C8B
+#define GL_INTERLEAVED_ATTRIBS_NV              0x8C8C
+#define GL_SEPARATE_ATTRIBS_NV                 0x8C8D
+#define GL_TRANSFORM_FEEDBACK_BUFFER_NV        0x8C8E
+#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV  0x8C8F
+#define GL_LAYER_NV                            0x8DAA
+#define GL_NEXT_BUFFER_NV                      -2
+#define GL_SKIP_COMPONENTS4_NV                 -3
+#define GL_SKIP_COMPONENTS3_NV                 -4
+#define GL_SKIP_COMPONENTS2_NV                 -5
+#define GL_SKIP_COMPONENTS1_NV                 -6
+typedef void (APIENTRYP pfn_glBeginTransformFeedbackNV) (GLenum);
+extern pfn_glBeginTransformFeedbackNV fp_glBeginTransformFeedbackNV;
+typedef void (APIENTRYP pfn_glEndTransformFeedbackNV) ();
+extern pfn_glEndTransformFeedbackNV fp_glEndTransformFeedbackNV;
+typedef void (APIENTRYP pfn_glTransformFeedbackAttribsNV) (GLsizei, const GLint*, GLenum);
+extern pfn_glTransformFeedbackAttribsNV fp_glTransformFeedbackAttribsNV;
+typedef void (APIENTRYP pfn_glBindBufferRangeNV) (GLenum, GLuint, GLuint, GLintptr, GLsizeiptr);
+extern pfn_glBindBufferRangeNV fp_glBindBufferRangeNV;
+typedef void (APIENTRYP pfn_glBindBufferOffsetNV) (GLenum, GLuint, GLuint, GLintptr);
+extern pfn_glBindBufferOffsetNV fp_glBindBufferOffsetNV;
+typedef void (APIENTRYP pfn_glBindBufferBaseNV) (GLenum, GLuint, GLuint);
+extern pfn_glBindBufferBaseNV fp_glBindBufferBaseNV;
+typedef void (APIENTRYP pfn_glTransformFeedbackVaryingsNV) (GLuint, GLsizei, const GLint*, GLenum);
+extern pfn_glTransformFeedbackVaryingsNV fp_glTransformFeedbackVaryingsNV;
+typedef void (APIENTRYP pfn_glActiveVaryingNV) (GLuint, const GLchar*);
+extern pfn_glActiveVaryingNV fp_glActiveVaryingNV;
+typedef GLint (APIENTRYP pfn_glGetVaryingLocationNV) (GLuint, const GLchar*);
+extern pfn_glGetVaryingLocationNV fp_glGetVaryingLocationNV;
+typedef void (APIENTRYP pfn_glGetActiveVaryingNV) (GLuint, GLuint, GLsizei, GLsizei*, GLsizei*, GLenum*, GLchar*);
+extern pfn_glGetActiveVaryingNV fp_glGetActiveVaryingNV;
+typedef void (APIENTRYP pfn_glGetTransformFeedbackVaryingNV) (GLuint, GLuint, GLint*);
+extern pfn_glGetTransformFeedbackVaryingNV fp_glGetTransformFeedbackVaryingNV;
+typedef void (APIENTRYP pfn_glTransformFeedbackStreamAttribsNV) (GLsizei, const GLint*, GLsizei, const GLint*, GLenum);
+extern pfn_glTransformFeedbackStreamAttribsNV fp_glTransformFeedbackStreamAttribsNV;
+
+ /* GL_NV_transform_feedback2 */
+extern GLboolean GLAD_NV_transform_feedback2;
+#define GL_TRANSFORM_FEEDBACK_NV               0x8E22
+#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV  0x8E23
+#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV  0x8E24
+#define GL_TRANSFORM_FEEDBACK_BINDING_NV       0x8E25
+typedef void (APIENTRYP pfn_glBindTransformFeedbackNV) (GLenum, GLuint);
+extern pfn_glBindTransformFeedbackNV fp_glBindTransformFeedbackNV;
+typedef void (APIENTRYP pfn_glDeleteTransformFeedbacksNV) (GLsizei, const GLuint*);
+extern pfn_glDeleteTransformFeedbacksNV fp_glDeleteTransformFeedbacksNV;
+typedef void (APIENTRYP pfn_glGenTransformFeedbacksNV) (GLsizei, GLuint*);
+extern pfn_glGenTransformFeedbacksNV fp_glGenTransformFeedbacksNV;
+typedef GLboolean (APIENTRYP pfn_glIsTransformFeedbackNV) (GLuint);
+extern pfn_glIsTransformFeedbackNV fp_glIsTransformFeedbackNV;
+typedef void (APIENTRYP pfn_glPauseTransformFeedbackNV) ();
+extern pfn_glPauseTransformFeedbackNV fp_glPauseTransformFeedbackNV;
+typedef void (APIENTRYP pfn_glResumeTransformFeedbackNV) ();
+extern pfn_glResumeTransformFeedbackNV fp_glResumeTransformFeedbackNV;
+typedef void (APIENTRYP pfn_glDrawTransformFeedbackNV) (GLenum, GLuint);
+extern pfn_glDrawTransformFeedbackNV fp_glDrawTransformFeedbackNV;
+
+ /* GL_NV_vdpau_interop */
+extern GLboolean GLAD_NV_vdpau_interop;
+#define GL_SURFACE_STATE_NV                    0x86EB
+#define GL_SURFACE_REGISTERED_NV               0x86FD
+#define GL_SURFACE_MAPPED_NV                   0x8700
+#define GL_WRITE_DISCARD_NV                    0x88BE
+typedef void (APIENTRYP pfn_glVDPAUInitNV) (const void*, const void*);
+extern pfn_glVDPAUInitNV fp_glVDPAUInitNV;
+typedef void (APIENTRYP pfn_glVDPAUFiniNV) ();
+extern pfn_glVDPAUFiniNV fp_glVDPAUFiniNV;
+typedef GLvdpauSurfaceNV (APIENTRYP pfn_glVDPAURegisterVideoSurfaceNV) (const void*, GLenum, GLsizei, const GLuint*);
+extern pfn_glVDPAURegisterVideoSurfaceNV fp_glVDPAURegisterVideoSurfaceNV;
+typedef GLvdpauSurfaceNV (APIENTRYP pfn_glVDPAURegisterOutputSurfaceNV) (const void*, GLenum, GLsizei, const GLuint*);
+extern pfn_glVDPAURegisterOutputSurfaceNV fp_glVDPAURegisterOutputSurfaceNV;
+typedef GLboolean (APIENTRYP pfn_glVDPAUIsSurfaceNV) (GLvdpauSurfaceNV);
+extern pfn_glVDPAUIsSurfaceNV fp_glVDPAUIsSurfaceNV;
+typedef void (APIENTRYP pfn_glVDPAUUnregisterSurfaceNV) (GLvdpauSurfaceNV);
+extern pfn_glVDPAUUnregisterSurfaceNV fp_glVDPAUUnregisterSurfaceNV;
+typedef void (APIENTRYP pfn_glVDPAUGetSurfaceivNV) (GLvdpauSurfaceNV, GLenum, GLsizei, GLsizei*, GLint*);
+extern pfn_glVDPAUGetSurfaceivNV fp_glVDPAUGetSurfaceivNV;
+typedef void (APIENTRYP pfn_glVDPAUSurfaceAccessNV) (GLvdpauSurfaceNV, GLenum);
+extern pfn_glVDPAUSurfaceAccessNV fp_glVDPAUSurfaceAccessNV;
+typedef void (APIENTRYP pfn_glVDPAUMapSurfacesNV) (GLsizei, const GLvdpauSurfaceNV*);
+extern pfn_glVDPAUMapSurfacesNV fp_glVDPAUMapSurfacesNV;
+typedef void (APIENTRYP pfn_glVDPAUUnmapSurfacesNV) (GLsizei, const GLvdpauSurfaceNV*);
+extern pfn_glVDPAUUnmapSurfacesNV fp_glVDPAUUnmapSurfacesNV;
+
+ /* GL_NV_vertex_attrib_integer_64bit */
+extern GLboolean GLAD_NV_vertex_attrib_integer_64bit;
+typedef void (APIENTRYP pfn_glVertexAttribL1i64NV) (GLuint, GLint64EXT);
+extern pfn_glVertexAttribL1i64NV fp_glVertexAttribL1i64NV;
+typedef void (APIENTRYP pfn_glVertexAttribL2i64NV) (GLuint, GLint64EXT, GLint64EXT);
+extern pfn_glVertexAttribL2i64NV fp_glVertexAttribL2i64NV;
+typedef void (APIENTRYP pfn_glVertexAttribL3i64NV) (GLuint, GLint64EXT, GLint64EXT, GLint64EXT);
+extern pfn_glVertexAttribL3i64NV fp_glVertexAttribL3i64NV;
+typedef void (APIENTRYP pfn_glVertexAttribL4i64NV) (GLuint, GLint64EXT, GLint64EXT, GLint64EXT, GLint64EXT);
+extern pfn_glVertexAttribL4i64NV fp_glVertexAttribL4i64NV;
+typedef void (APIENTRYP pfn_glVertexAttribL1i64vNV) (GLuint, const GLint64EXT*);
+extern pfn_glVertexAttribL1i64vNV fp_glVertexAttribL1i64vNV;
+typedef void (APIENTRYP pfn_glVertexAttribL2i64vNV) (GLuint, const GLint64EXT*);
+extern pfn_glVertexAttribL2i64vNV fp_glVertexAttribL2i64vNV;
+typedef void (APIENTRYP pfn_glVertexAttribL3i64vNV) (GLuint, const GLint64EXT*);
+extern pfn_glVertexAttribL3i64vNV fp_glVertexAttribL3i64vNV;
+typedef void (APIENTRYP pfn_glVertexAttribL4i64vNV) (GLuint, const GLint64EXT*);
+extern pfn_glVertexAttribL4i64vNV fp_glVertexAttribL4i64vNV;
+typedef void (APIENTRYP pfn_glVertexAttribL1ui64NV) (GLuint, GLuint64EXT);
+extern pfn_glVertexAttribL1ui64NV fp_glVertexAttribL1ui64NV;
+typedef void (APIENTRYP pfn_glVertexAttribL2ui64NV) (GLuint, GLuint64EXT, GLuint64EXT);
+extern pfn_glVertexAttribL2ui64NV fp_glVertexAttribL2ui64NV;
+typedef void (APIENTRYP pfn_glVertexAttribL3ui64NV) (GLuint, GLuint64EXT, GLuint64EXT, GLuint64EXT);
+extern pfn_glVertexAttribL3ui64NV fp_glVertexAttribL3ui64NV;
+typedef void (APIENTRYP pfn_glVertexAttribL4ui64NV) (GLuint, GLuint64EXT, GLuint64EXT, GLuint64EXT, GLuint64EXT);
+extern pfn_glVertexAttribL4ui64NV fp_glVertexAttribL4ui64NV;
+typedef void (APIENTRYP pfn_glVertexAttribL1ui64vNV) (GLuint, const GLuint64EXT*);
+extern pfn_glVertexAttribL1ui64vNV fp_glVertexAttribL1ui64vNV;
+typedef void (APIENTRYP pfn_glVertexAttribL2ui64vNV) (GLuint, const GLuint64EXT*);
+extern pfn_glVertexAttribL2ui64vNV fp_glVertexAttribL2ui64vNV;
+typedef void (APIENTRYP pfn_glVertexAttribL3ui64vNV) (GLuint, const GLuint64EXT*);
+extern pfn_glVertexAttribL3ui64vNV fp_glVertexAttribL3ui64vNV;
+typedef void (APIENTRYP pfn_glVertexAttribL4ui64vNV) (GLuint, const GLuint64EXT*);
+extern pfn_glVertexAttribL4ui64vNV fp_glVertexAttribL4ui64vNV;
+typedef void (APIENTRYP pfn_glGetVertexAttribLi64vNV) (GLuint, GLenum, GLint64EXT*);
+extern pfn_glGetVertexAttribLi64vNV fp_glGetVertexAttribLi64vNV;
+typedef void (APIENTRYP pfn_glGetVertexAttribLui64vNV) (GLuint, GLenum, GLuint64EXT*);
+extern pfn_glGetVertexAttribLui64vNV fp_glGetVertexAttribLui64vNV;
+typedef void (APIENTRYP pfn_glVertexAttribLFormatNV) (GLuint, GLint, GLenum, GLsizei);
+extern pfn_glVertexAttribLFormatNV fp_glVertexAttribLFormatNV;
+
+ /* GL_NV_vertex_buffer_unified_memory */
+extern GLboolean GLAD_NV_vertex_buffer_unified_memory;
+#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV      0x8F1E
+#define GL_ELEMENT_ARRAY_UNIFIED_NV            0x8F1F
+#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV      0x8F20
+#define GL_VERTEX_ARRAY_ADDRESS_NV             0x8F21
+#define GL_NORMAL_ARRAY_ADDRESS_NV             0x8F22
+#define GL_COLOR_ARRAY_ADDRESS_NV              0x8F23
+#define GL_INDEX_ARRAY_ADDRESS_NV              0x8F24
+#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV      0x8F25
+#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV          0x8F26
+#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV    0x8F27
+#define GL_FOG_COORD_ARRAY_ADDRESS_NV          0x8F28
+#define GL_ELEMENT_ARRAY_ADDRESS_NV            0x8F29
+#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV       0x8F2A
+#define GL_VERTEX_ARRAY_LENGTH_NV              0x8F2B
+#define GL_NORMAL_ARRAY_LENGTH_NV              0x8F2C
+#define GL_COLOR_ARRAY_LENGTH_NV               0x8F2D
+#define GL_INDEX_ARRAY_LENGTH_NV               0x8F2E
+#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV       0x8F2F
+#define GL_EDGE_FLAG_ARRAY_LENGTH_NV           0x8F30
+#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV     0x8F31
+#define GL_FOG_COORD_ARRAY_LENGTH_NV           0x8F32
+#define GL_ELEMENT_ARRAY_LENGTH_NV             0x8F33
+#define GL_DRAW_INDIRECT_UNIFIED_NV            0x8F40
+#define GL_DRAW_INDIRECT_ADDRESS_NV            0x8F41
+#define GL_DRAW_INDIRECT_LENGTH_NV             0x8F42
+typedef void (APIENTRYP pfn_glBufferAddressRangeNV) (GLenum, GLuint, GLuint64EXT, GLsizeiptr);
+extern pfn_glBufferAddressRangeNV fp_glBufferAddressRangeNV;
+typedef void (APIENTRYP pfn_glVertexFormatNV) (GLint, GLenum, GLsizei);
+extern pfn_glVertexFormatNV fp_glVertexFormatNV;
+typedef void (APIENTRYP pfn_glNormalFormatNV) (GLenum, GLsizei);
+extern pfn_glNormalFormatNV fp_glNormalFormatNV;
+typedef void (APIENTRYP pfn_glColorFormatNV) (GLint, GLenum, GLsizei);
+extern pfn_glColorFormatNV fp_glColorFormatNV;
+typedef void (APIENTRYP pfn_glIndexFormatNV) (GLenum, GLsizei);
+extern pfn_glIndexFormatNV fp_glIndexFormatNV;
+typedef void (APIENTRYP pfn_glTexCoordFormatNV) (GLint, GLenum, GLsizei);
+extern pfn_glTexCoordFormatNV fp_glTexCoordFormatNV;
+typedef void (APIENTRYP pfn_glEdgeFlagFormatNV) (GLsizei);
+extern pfn_glEdgeFlagFormatNV fp_glEdgeFlagFormatNV;
+typedef void (APIENTRYP pfn_glSecondaryColorFormatNV) (GLint, GLenum, GLsizei);
+extern pfn_glSecondaryColorFormatNV fp_glSecondaryColorFormatNV;
+typedef void (APIENTRYP pfn_glFogCoordFormatNV) (GLenum, GLsizei);
+extern pfn_glFogCoordFormatNV fp_glFogCoordFormatNV;
+typedef void (APIENTRYP pfn_glVertexAttribFormatNV) (GLuint, GLint, GLenum, GLboolean, GLsizei);
+extern pfn_glVertexAttribFormatNV fp_glVertexAttribFormatNV;
+typedef void (APIENTRYP pfn_glVertexAttribIFormatNV) (GLuint, GLint, GLenum, GLsizei);
+extern pfn_glVertexAttribIFormatNV fp_glVertexAttribIFormatNV;
+typedef void (APIENTRYP pfn_glGetIntegerui64i_vNV) (GLenum, GLuint, GLuint64EXT*);
+extern pfn_glGetIntegerui64i_vNV fp_glGetIntegerui64i_vNV;
+
+ /* GL_NV_vertex_program4 */
+extern GLboolean GLAD_NV_vertex_program4;
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV      0x88FD
+typedef void (APIENTRYP pfn_glVertexAttribI1iEXT) (GLuint, GLint);
+extern pfn_glVertexAttribI1iEXT fp_glVertexAttribI1iEXT;
+typedef void (APIENTRYP pfn_glVertexAttribI2iEXT) (GLuint, GLint, GLint);
+extern pfn_glVertexAttribI2iEXT fp_glVertexAttribI2iEXT;
+typedef void (APIENTRYP pfn_glVertexAttribI3iEXT) (GLuint, GLint, GLint, GLint);
+extern pfn_glVertexAttribI3iEXT fp_glVertexAttribI3iEXT;
+typedef void (APIENTRYP pfn_glVertexAttribI4iEXT) (GLuint, GLint, GLint, GLint, GLint);
+extern pfn_glVertexAttribI4iEXT fp_glVertexAttribI4iEXT;
+typedef void (APIENTRYP pfn_glVertexAttribI1uiEXT) (GLuint, GLuint);
+extern pfn_glVertexAttribI1uiEXT fp_glVertexAttribI1uiEXT;
+typedef void (APIENTRYP pfn_glVertexAttribI2uiEXT) (GLuint, GLuint, GLuint);
+extern pfn_glVertexAttribI2uiEXT fp_glVertexAttribI2uiEXT;
+typedef void (APIENTRYP pfn_glVertexAttribI3uiEXT) (GLuint, GLuint, GLuint, GLuint);
+extern pfn_glVertexAttribI3uiEXT fp_glVertexAttribI3uiEXT;
+typedef void (APIENTRYP pfn_glVertexAttribI4uiEXT) (GLuint, GLuint, GLuint, GLuint, GLuint);
+extern pfn_glVertexAttribI4uiEXT fp_glVertexAttribI4uiEXT;
+typedef void (APIENTRYP pfn_glVertexAttribI1ivEXT) (GLuint, const GLint*);
+extern pfn_glVertexAttribI1ivEXT fp_glVertexAttribI1ivEXT;
+typedef void (APIENTRYP pfn_glVertexAttribI2ivEXT) (GLuint, const GLint*);
+extern pfn_glVertexAttribI2ivEXT fp_glVertexAttribI2ivEXT;
+typedef void (APIENTRYP pfn_glVertexAttribI3ivEXT) (GLuint, const GLint*);
+extern pfn_glVertexAttribI3ivEXT fp_glVertexAttribI3ivEXT;
+typedef void (APIENTRYP pfn_glVertexAttribI4ivEXT) (GLuint, const GLint*);
+extern pfn_glVertexAttribI4ivEXT fp_glVertexAttribI4ivEXT;
+typedef void (APIENTRYP pfn_glVertexAttribI1uivEXT) (GLuint, const GLuint*);
+extern pfn_glVertexAttribI1uivEXT fp_glVertexAttribI1uivEXT;
+typedef void (APIENTRYP pfn_glVertexAttribI2uivEXT) (GLuint, const GLuint*);
+extern pfn_glVertexAttribI2uivEXT fp_glVertexAttribI2uivEXT;
+typedef void (APIENTRYP pfn_glVertexAttribI3uivEXT) (GLuint, const GLuint*);
+extern pfn_glVertexAttribI3uivEXT fp_glVertexAttribI3uivEXT;
+typedef void (APIENTRYP pfn_glVertexAttribI4uivEXT) (GLuint, const GLuint*);
+extern pfn_glVertexAttribI4uivEXT fp_glVertexAttribI4uivEXT;
+typedef void (APIENTRYP pfn_glVertexAttribI4bvEXT) (GLuint, const GLbyte*);
+extern pfn_glVertexAttribI4bvEXT fp_glVertexAttribI4bvEXT;
+typedef void (APIENTRYP pfn_glVertexAttribI4svEXT) (GLuint, const GLshort*);
+extern pfn_glVertexAttribI4svEXT fp_glVertexAttribI4svEXT;
+typedef void (APIENTRYP pfn_glVertexAttribI4ubvEXT) (GLuint, const GLubyte*);
+extern pfn_glVertexAttribI4ubvEXT fp_glVertexAttribI4ubvEXT;
+typedef void (APIENTRYP pfn_glVertexAttribI4usvEXT) (GLuint, const GLushort*);
+extern pfn_glVertexAttribI4usvEXT fp_glVertexAttribI4usvEXT;
+typedef void (APIENTRYP pfn_glVertexAttribIPointerEXT) (GLuint, GLint, GLenum, GLsizei, const void*);
+extern pfn_glVertexAttribIPointerEXT fp_glVertexAttribIPointerEXT;
+typedef void (APIENTRYP pfn_glGetVertexAttribIivEXT) (GLuint, GLenum, GLint*);
+extern pfn_glGetVertexAttribIivEXT fp_glGetVertexAttribIivEXT;
+typedef void (APIENTRYP pfn_glGetVertexAttribIuivEXT) (GLuint, GLenum, GLuint*);
+extern pfn_glGetVertexAttribIuivEXT fp_glGetVertexAttribIuivEXT;
+
+ /* GL_NV_video_capture */
+extern GLboolean GLAD_NV_video_capture;
+#define GL_VIDEO_BUFFER_NV                     0x9020
+#define GL_VIDEO_BUFFER_BINDING_NV             0x9021
+#define GL_FIELD_UPPER_NV                      0x9022
+#define GL_FIELD_LOWER_NV                      0x9023
+#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV        0x9024
+#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV  0x9025
+#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV   0x9026
+#define GL_LAST_VIDEO_CAPTURE_STATUS_NV        0x9027
+#define GL_VIDEO_BUFFER_PITCH_NV               0x9028
+#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV    0x9029
+#define GL_VIDEO_COLOR_CONVERSION_MAX_NV       0x902A
+#define GL_VIDEO_COLOR_CONVERSION_MIN_NV       0x902B
+#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV    0x902C
+#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV     0x902D
+#define GL_PARTIAL_SUCCESS_NV                  0x902E
+#define GL_SUCCESS_NV                          0x902F
+#define GL_FAILURE_NV                          0x9030
+#define GL_YCBYCR8_422_NV                      0x9031
+#define GL_YCBAYCR8A_4224_NV                   0x9032
+#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV       0x9033
+#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV  0x9034
+#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV       0x9035
+#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV  0x9036
+#define GL_Z4Y12Z4CB12Z4CR12_444_NV            0x9037
+#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV        0x9038
+#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV       0x9039
+#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV  0x903A
+#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV  0x903B
+#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV     0x903C
+typedef void (APIENTRYP pfn_glBeginVideoCaptureNV) (GLuint);
+extern pfn_glBeginVideoCaptureNV fp_glBeginVideoCaptureNV;
+typedef void (APIENTRYP pfn_glBindVideoCaptureStreamBufferNV) (GLuint, GLuint, GLenum, GLintptrARB);
+extern pfn_glBindVideoCaptureStreamBufferNV fp_glBindVideoCaptureStreamBufferNV;
+typedef void (APIENTRYP pfn_glBindVideoCaptureStreamTextureNV) (GLuint, GLuint, GLenum, GLenum, GLuint);
+extern pfn_glBindVideoCaptureStreamTextureNV fp_glBindVideoCaptureStreamTextureNV;
+typedef void (APIENTRYP pfn_glEndVideoCaptureNV) (GLuint);
+extern pfn_glEndVideoCaptureNV fp_glEndVideoCaptureNV;
+typedef void (APIENTRYP pfn_glGetVideoCaptureivNV) (GLuint, GLenum, GLint*);
+extern pfn_glGetVideoCaptureivNV fp_glGetVideoCaptureivNV;
+typedef void (APIENTRYP pfn_glGetVideoCaptureStreamivNV) (GLuint, GLuint, GLenum, GLint*);
+extern pfn_glGetVideoCaptureStreamivNV fp_glGetVideoCaptureStreamivNV;
+typedef void (APIENTRYP pfn_glGetVideoCaptureStreamfvNV) (GLuint, GLuint, GLenum, GLfloat*);
+extern pfn_glGetVideoCaptureStreamfvNV fp_glGetVideoCaptureStreamfvNV;
+typedef void (APIENTRYP pfn_glGetVideoCaptureStreamdvNV) (GLuint, GLuint, GLenum, GLdouble*);
+extern pfn_glGetVideoCaptureStreamdvNV fp_glGetVideoCaptureStreamdvNV;
+typedef GLenum (APIENTRYP pfn_glVideoCaptureNV) (GLuint, GLuint*, GLuint64EXT*);
+extern pfn_glVideoCaptureNV fp_glVideoCaptureNV;
+typedef void (APIENTRYP pfn_glVideoCaptureStreamParameterivNV) (GLuint, GLuint, GLenum, const GLint*);
+extern pfn_glVideoCaptureStreamParameterivNV fp_glVideoCaptureStreamParameterivNV;
+typedef void (APIENTRYP pfn_glVideoCaptureStreamParameterfvNV) (GLuint, GLuint, GLenum, const GLfloat*);
+extern pfn_glVideoCaptureStreamParameterfvNV fp_glVideoCaptureStreamParameterfvNV;
+typedef void (APIENTRYP pfn_glVideoCaptureStreamParameterdvNV) (GLuint, GLuint, GLenum, const GLdouble*);
+extern pfn_glVideoCaptureStreamParameterdvNV fp_glVideoCaptureStreamParameterdvNV;
+
+ /* GL_NVX_conditional_render */
+extern GLboolean GLAD_NVX_conditional_render;
+typedef void (APIENTRYP pfn_glBeginConditionalRenderNVX) (GLuint);
+extern pfn_glBeginConditionalRenderNVX fp_glBeginConditionalRenderNVX;
+typedef void (APIENTRYP pfn_glEndConditionalRenderNVX) ();
+extern pfn_glEndConditionalRenderNVX fp_glEndConditionalRenderNVX;
+
+ /* GL_NVX_gpu_memory_info */
+extern GLboolean GLAD_NVX_gpu_memory_info;
+#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX  0x9047
+#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX  0x9048
+#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX  0x9049
+#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX  0x904A
+#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX  0x904B
+
+ /* GL_QCOM_alpha_test */
+extern GLboolean GLAD_QCOM_alpha_test;
+#define GL_ALPHA_TEST_QCOM                     0x0BC0
+#define GL_ALPHA_TEST_FUNC_QCOM                0x0BC1
+#define GL_ALPHA_TEST_REF_QCOM                 0x0BC2
+typedef void (APIENTRYP pfn_glAlphaFuncQCOM) (GLenum, GLclampf);
+extern pfn_glAlphaFuncQCOM fp_glAlphaFuncQCOM;
+
+ /* GL_QCOM_binning_control */
+extern GLboolean GLAD_QCOM_binning_control;
+#define GL_BINNING_CONTROL_HINT_QCOM           0x8FB0
+#define GL_CPU_OPTIMIZED_QCOM                  0x8FB1
+#define GL_GPU_OPTIMIZED_QCOM                  0x8FB2
+#define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM   0x8FB3
+
+ /* GL_QCOM_driver_control */
+extern GLboolean GLAD_QCOM_driver_control;
+typedef void (APIENTRYP pfn_glGetDriverControlsQCOM) (GLint*, GLsizei, GLuint*);
+extern pfn_glGetDriverControlsQCOM fp_glGetDriverControlsQCOM;
+typedef void (APIENTRYP pfn_glGetDriverControlStringQCOM) (GLuint, GLsizei, GLsizei*, GLchar*);
+extern pfn_glGetDriverControlStringQCOM fp_glGetDriverControlStringQCOM;
+typedef void (APIENTRYP pfn_glEnableDriverControlQCOM) (GLuint);
+extern pfn_glEnableDriverControlQCOM fp_glEnableDriverControlQCOM;
+typedef void (APIENTRYP pfn_glDisableDriverControlQCOM) (GLuint);
+extern pfn_glDisableDriverControlQCOM fp_glDisableDriverControlQCOM;
+
+ /* GL_QCOM_extended_get */
+extern GLboolean GLAD_QCOM_extended_get;
+#define GL_TEXTURE_WIDTH_QCOM                  0x8BD2
+#define GL_TEXTURE_HEIGHT_QCOM                 0x8BD3
+#define GL_TEXTURE_DEPTH_QCOM                  0x8BD4
+#define GL_TEXTURE_INTERNAL_FORMAT_QCOM        0x8BD5
+#define GL_TEXTURE_FORMAT_QCOM                 0x8BD6
+#define GL_TEXTURE_TYPE_QCOM                   0x8BD7
+#define GL_TEXTURE_IMAGE_VALID_QCOM            0x8BD8
+#define GL_TEXTURE_NUM_LEVELS_QCOM             0x8BD9
+#define GL_TEXTURE_TARGET_QCOM                 0x8BDA
+#define GL_TEXTURE_OBJECT_VALID_QCOM           0x8BDB
+#define GL_STATE_RESTORE                       0x8BDC
+typedef void (APIENTRYP pfn_glExtGetTexturesQCOM) (GLuint*, GLint, GLint*);
+extern pfn_glExtGetTexturesQCOM fp_glExtGetTexturesQCOM;
+typedef void (APIENTRYP pfn_glExtGetBuffersQCOM) (GLuint*, GLint, GLint*);
+extern pfn_glExtGetBuffersQCOM fp_glExtGetBuffersQCOM;
+typedef void (APIENTRYP pfn_glExtGetRenderbuffersQCOM) (GLuint*, GLint, GLint*);
+extern pfn_glExtGetRenderbuffersQCOM fp_glExtGetRenderbuffersQCOM;
+typedef void (APIENTRYP pfn_glExtGetFramebuffersQCOM) (GLuint*, GLint, GLint*);
+extern pfn_glExtGetFramebuffersQCOM fp_glExtGetFramebuffersQCOM;
+typedef void (APIENTRYP pfn_glExtGetTexLevelParameterivQCOM) (GLuint, GLenum, GLint, GLenum, GLint*);
+extern pfn_glExtGetTexLevelParameterivQCOM fp_glExtGetTexLevelParameterivQCOM;
+typedef void (APIENTRYP pfn_glExtTexObjectStateOverrideiQCOM) (GLenum, GLenum, GLint);
+extern pfn_glExtTexObjectStateOverrideiQCOM fp_glExtTexObjectStateOverrideiQCOM;
+typedef void (APIENTRYP pfn_glExtGetTexSubImageQCOM) (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, void*);
+extern pfn_glExtGetTexSubImageQCOM fp_glExtGetTexSubImageQCOM;
+typedef void (APIENTRYP pfn_glExtGetBufferPointervQCOM) (GLenum, void**);
+extern pfn_glExtGetBufferPointervQCOM fp_glExtGetBufferPointervQCOM;
+
+ /* GL_QCOM_extended_get2 */
+extern GLboolean GLAD_QCOM_extended_get2;
+typedef void (APIENTRYP pfn_glExtGetShadersQCOM) (GLuint*, GLint, GLint*);
+extern pfn_glExtGetShadersQCOM fp_glExtGetShadersQCOM;
+typedef void (APIENTRYP pfn_glExtGetProgramsQCOM) (GLuint*, GLint, GLint*);
+extern pfn_glExtGetProgramsQCOM fp_glExtGetProgramsQCOM;
+typedef GLboolean (APIENTRYP pfn_glExtIsProgramBinaryQCOM) (GLuint);
+extern pfn_glExtIsProgramBinaryQCOM fp_glExtIsProgramBinaryQCOM;
+typedef void (APIENTRYP pfn_glExtGetProgramBinarySourceQCOM) (GLuint, GLenum, GLchar*, GLint*);
+extern pfn_glExtGetProgramBinarySourceQCOM fp_glExtGetProgramBinarySourceQCOM;
+
+ /* GL_QCOM_perfmon_global_mode */
+extern GLboolean GLAD_QCOM_perfmon_global_mode;
+#define GL_PERFMON_GLOBAL_MODE_QCOM            0x8FA0
+
+ /* GL_QCOM_tiled_rendering */
+extern GLboolean GLAD_QCOM_tiled_rendering;
+#define GL_COLOR_BUFFER_BIT0_QCOM              0x00000001
+#define GL_COLOR_BUFFER_BIT1_QCOM              0x00000002
+#define GL_COLOR_BUFFER_BIT2_QCOM              0x00000004
+#define GL_COLOR_BUFFER_BIT3_QCOM              0x00000008
+#define GL_COLOR_BUFFER_BIT4_QCOM              0x00000010
+#define GL_COLOR_BUFFER_BIT5_QCOM              0x00000020
+#define GL_COLOR_BUFFER_BIT6_QCOM              0x00000040
+#define GL_COLOR_BUFFER_BIT7_QCOM              0x00000080
+#define GL_DEPTH_BUFFER_BIT0_QCOM              0x00000100
+#define GL_DEPTH_BUFFER_BIT1_QCOM              0x00000200
+#define GL_DEPTH_BUFFER_BIT2_QCOM              0x00000400
+#define GL_DEPTH_BUFFER_BIT3_QCOM              0x00000800
+#define GL_DEPTH_BUFFER_BIT4_QCOM              0x00001000
+#define GL_DEPTH_BUFFER_BIT5_QCOM              0x00002000
+#define GL_DEPTH_BUFFER_BIT6_QCOM              0x00004000
+#define GL_DEPTH_BUFFER_BIT7_QCOM              0x00008000
+#define GL_STENCIL_BUFFER_BIT0_QCOM            0x00010000
+#define GL_STENCIL_BUFFER_BIT1_QCOM            0x00020000
+#define GL_STENCIL_BUFFER_BIT2_QCOM            0x00040000
+#define GL_STENCIL_BUFFER_BIT3_QCOM            0x00080000
+#define GL_STENCIL_BUFFER_BIT4_QCOM            0x00100000
+#define GL_STENCIL_BUFFER_BIT5_QCOM            0x00200000
+#define GL_STENCIL_BUFFER_BIT6_QCOM            0x00400000
+#define GL_STENCIL_BUFFER_BIT7_QCOM            0x00800000
+#define GL_MULTISAMPLE_BUFFER_BIT0_QCOM        0x01000000
+#define GL_MULTISAMPLE_BUFFER_BIT1_QCOM        0x02000000
+#define GL_MULTISAMPLE_BUFFER_BIT2_QCOM        0x04000000
+#define GL_MULTISAMPLE_BUFFER_BIT3_QCOM        0x08000000
+#define GL_MULTISAMPLE_BUFFER_BIT4_QCOM        0x10000000
+#define GL_MULTISAMPLE_BUFFER_BIT5_QCOM        0x20000000
+#define GL_MULTISAMPLE_BUFFER_BIT6_QCOM        0x40000000
+#define GL_MULTISAMPLE_BUFFER_BIT7_QCOM        0x80000000
+typedef void (APIENTRYP pfn_glStartTilingQCOM) (GLuint, GLuint, GLuint, GLuint, GLbitfield);
+extern pfn_glStartTilingQCOM fp_glStartTilingQCOM;
+typedef void (APIENTRYP pfn_glEndTilingQCOM) (GLbitfield);
+extern pfn_glEndTilingQCOM fp_glEndTilingQCOM;
+
+ /* GL_QCOM_writeonly_rendering */
+extern GLboolean GLAD_QCOM_writeonly_rendering;
+#define GL_WRITEONLY_RENDERING_QCOM            0x8823
+
+ /* GL_SGIX_calligraphic_fragment */
+extern GLboolean GLAD_SGIX_calligraphic_fragment;
+#define GL_CALLIGRAPHIC_FRAGMENT_SGIX          0x8183
+
+ /* GL_SGIX_depth_pass_instrument */
+extern GLboolean GLAD_SGIX_depth_pass_instrument;
+
+ /* GL_SGIX_pixel_tiles */
+extern GLboolean GLAD_SGIX_pixel_tiles;
+#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX      0x813E
+#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX     0x813F
+#define GL_PIXEL_TILE_WIDTH_SGIX               0x8140
+#define GL_PIXEL_TILE_HEIGHT_SGIX              0x8141
+#define GL_PIXEL_TILE_GRID_WIDTH_SGIX          0x8142
+#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX         0x8143
+#define GL_PIXEL_TILE_GRID_DEPTH_SGIX          0x8144
+#define GL_PIXEL_TILE_CACHE_SIZE_SGIX          0x8145
+
+ /* GL_SGIX_scalebias_hint */
+extern GLboolean GLAD_SGIX_scalebias_hint;
+#define GL_SCALEBIAS_HINT_SGIX                 0x8322
+
+ /* GL_SGIX_subsample */
+extern GLboolean GLAD_SGIX_subsample;
+#define GL_PACK_SUBSAMPLE_RATE_SGIX            0x85A0
+#define GL_UNPACK_SUBSAMPLE_RATE_SGIX          0x85A1
+#define GL_PIXEL_SUBSAMPLE_4444_SGIX           0x85A2
+#define GL_PIXEL_SUBSAMPLE_2424_SGIX           0x85A3
+#define GL_PIXEL_SUBSAMPLE_4242_SGIX           0x85A4
+
+ /* GL_SGIX_ycrcb_subsample */
+extern GLboolean GLAD_SGIX_ycrcb_subsample;
+
+ /* GL_SGIX_ycrcba */
+extern GLboolean GLAD_SGIX_ycrcba;
+#define GL_YCRCB_SGIX                          0x8318
+#define GL_YCRCBA_SGIX                         0x8319
+
+ /* GL_VIV_shader_binary */
+extern GLboolean GLAD_VIV_shader_binary;
+#define GL_SHADER_BINARY_VIV                   0x8FC4
+
+} /* namespace glad */
+
+#endif /* __glad_hpp_ */

+ 2358 - 0
src/libraries/glad/gladfuncs.hpp

@@ -0,0 +1,2358 @@
+
+/**
+ * The MIT License (MIT)
+ * 
+ * Copyright (c) 2013 David Herberth, modified by Alex Szpakowski
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ **/
+ 
+
+#ifndef __glad_funcs_hpp_
+#define __glad_funcs_hpp_
+
+#include "glad.hpp"
+
+namespace glad {
+
+
+/* GL_VERSION_1_0 */
+inline void glCullFace(GLenum mode) { fp_glCullFace(mode); }
+inline void glFrontFace(GLenum mode) { fp_glFrontFace(mode); }
+inline void glHint(GLenum target, GLenum mode) { fp_glHint(target, mode); }
+inline void glLineWidth(GLfloat width) { fp_glLineWidth(width); }
+inline void glPointSize(GLfloat size) { fp_glPointSize(size); }
+inline void glPolygonMode(GLenum face, GLenum mode) { fp_glPolygonMode(face, mode); }
+inline void glScissor(GLint x, GLint y, GLsizei width, GLsizei height) { fp_glScissor(x, y, width, height); }
+inline void glTexParameterf(GLenum target, GLenum pname, GLfloat param) { fp_glTexParameterf(target, pname, param); }
+inline void glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params) { fp_glTexParameterfv(target, pname, params); }
+inline void glTexParameteri(GLenum target, GLenum pname, GLint param) { fp_glTexParameteri(target, pname, param); }
+inline void glTexParameteriv(GLenum target, GLenum pname, const GLint* params) { fp_glTexParameteriv(target, pname, params); }
+inline void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void* pixels) { fp_glTexImage1D(target, level, internalformat, width, border, format, type, pixels); }
+inline void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels) { fp_glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels); }
+inline void glDrawBuffer(GLenum buf) { fp_glDrawBuffer(buf); }
+inline void glClear(GLbitfield mask) { fp_glClear(mask); }
+inline void glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) { fp_glClearColor(red, green, blue, alpha); }
+inline void glClearStencil(GLint s) { fp_glClearStencil(s); }
+inline void glClearDepth(GLdouble depth) { fp_glClearDepth(depth); }
+inline void glStencilMask(GLuint mask) { fp_glStencilMask(mask); }
+inline void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) { fp_glColorMask(red, green, blue, alpha); }
+inline void glDepthMask(GLboolean flag) { fp_glDepthMask(flag); }
+inline void glDisable(GLenum cap) { fp_glDisable(cap); }
+inline void glEnable(GLenum cap) { fp_glEnable(cap); }
+inline void glFinish() { fp_glFinish(); }
+inline void glFlush() { fp_glFlush(); }
+inline void glBlendFunc(GLenum sfactor, GLenum dfactor) { fp_glBlendFunc(sfactor, dfactor); }
+inline void glLogicOp(GLenum opcode) { fp_glLogicOp(opcode); }
+inline void glStencilFunc(GLenum func, GLint ref, GLuint mask) { fp_glStencilFunc(func, ref, mask); }
+inline void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass) { fp_glStencilOp(fail, zfail, zpass); }
+inline void glDepthFunc(GLenum func) { fp_glDepthFunc(func); }
+inline void glPixelStoref(GLenum pname, GLfloat param) { fp_glPixelStoref(pname, param); }
+inline void glPixelStorei(GLenum pname, GLint param) { fp_glPixelStorei(pname, param); }
+inline void glReadBuffer(GLenum src) { fp_glReadBuffer(src); }
+inline void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels) { fp_glReadPixels(x, y, width, height, format, type, pixels); }
+inline void glGetBooleanv(GLenum pname, GLboolean* data) { fp_glGetBooleanv(pname, data); }
+inline void glGetDoublev(GLenum pname, GLdouble* data) { fp_glGetDoublev(pname, data); }
+inline GLenum glGetError() { return fp_glGetError(); }
+inline void glGetFloatv(GLenum pname, GLfloat* data) { fp_glGetFloatv(pname, data); }
+inline void glGetIntegerv(GLenum pname, GLint* data) { fp_glGetIntegerv(pname, data); }
+inline const GLubyte* glGetString(GLenum name) { return fp_glGetString(name); }
+inline void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void* pixels) { fp_glGetTexImage(target, level, format, type, pixels); }
+inline void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params) { fp_glGetTexParameterfv(target, pname, params); }
+inline void glGetTexParameteriv(GLenum target, GLenum pname, GLint* params) { fp_glGetTexParameteriv(target, pname, params); }
+inline void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat* params) { fp_glGetTexLevelParameterfv(target, level, pname, params); }
+inline void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint* params) { fp_glGetTexLevelParameteriv(target, level, pname, params); }
+inline GLboolean glIsEnabled(GLenum cap) { return fp_glIsEnabled(cap); }
+inline void glDepthRange(GLdouble near, GLdouble far) { fp_glDepthRange(near, far); }
+inline void glViewport(GLint x, GLint y, GLsizei width, GLsizei height) { fp_glViewport(x, y, width, height); }
+inline void glNewList(GLuint list, GLenum mode) { fp_glNewList(list, mode); }
+inline void glEndList() { fp_glEndList(); }
+inline void glCallList(GLuint list) { fp_glCallList(list); }
+inline void glCallLists(GLsizei n, GLenum type, const void* lists) { fp_glCallLists(n, type, lists); }
+inline void glDeleteLists(GLuint list, GLsizei range) { fp_glDeleteLists(list, range); }
+inline GLuint glGenLists(GLsizei range) { return fp_glGenLists(range); }
+inline void glListBase(GLuint base) { fp_glListBase(base); }
+inline void glBegin(GLenum mode) { fp_glBegin(mode); }
+inline void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte* bitmap) { fp_glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap); }
+inline void glColor3b(GLbyte red, GLbyte green, GLbyte blue) { fp_glColor3b(red, green, blue); }
+inline void glColor3bv(const GLbyte* v) { fp_glColor3bv(v); }
+inline void glColor3d(GLdouble red, GLdouble green, GLdouble blue) { fp_glColor3d(red, green, blue); }
+inline void glColor3dv(const GLdouble* v) { fp_glColor3dv(v); }
+inline void glColor3f(GLfloat red, GLfloat green, GLfloat blue) { fp_glColor3f(red, green, blue); }
+inline void glColor3fv(const GLfloat* v) { fp_glColor3fv(v); }
+inline void glColor3i(GLint red, GLint green, GLint blue) { fp_glColor3i(red, green, blue); }
+inline void glColor3iv(const GLint* v) { fp_glColor3iv(v); }
+inline void glColor3s(GLshort red, GLshort green, GLshort blue) { fp_glColor3s(red, green, blue); }
+inline void glColor3sv(const GLshort* v) { fp_glColor3sv(v); }
+inline void glColor3ub(GLubyte red, GLubyte green, GLubyte blue) { fp_glColor3ub(red, green, blue); }
+inline void glColor3ubv(const GLubyte* v) { fp_glColor3ubv(v); }
+inline void glColor3ui(GLuint red, GLuint green, GLuint blue) { fp_glColor3ui(red, green, blue); }
+inline void glColor3uiv(const GLuint* v) { fp_glColor3uiv(v); }
+inline void glColor3us(GLushort red, GLushort green, GLushort blue) { fp_glColor3us(red, green, blue); }
+inline void glColor3usv(const GLushort* v) { fp_glColor3usv(v); }
+inline void glColor4b(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) { fp_glColor4b(red, green, blue, alpha); }
+inline void glColor4bv(const GLbyte* v) { fp_glColor4bv(v); }
+inline void glColor4d(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) { fp_glColor4d(red, green, blue, alpha); }
+inline void glColor4dv(const GLdouble* v) { fp_glColor4dv(v); }
+inline void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) { fp_glColor4f(red, green, blue, alpha); }
+inline void glColor4fv(const GLfloat* v) { fp_glColor4fv(v); }
+inline void glColor4i(GLint red, GLint green, GLint blue, GLint alpha) { fp_glColor4i(red, green, blue, alpha); }
+inline void glColor4iv(const GLint* v) { fp_glColor4iv(v); }
+inline void glColor4s(GLshort red, GLshort green, GLshort blue, GLshort alpha) { fp_glColor4s(red, green, blue, alpha); }
+inline void glColor4sv(const GLshort* v) { fp_glColor4sv(v); }
+inline void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) { fp_glColor4ub(red, green, blue, alpha); }
+inline void glColor4ubv(const GLubyte* v) { fp_glColor4ubv(v); }
+inline void glColor4ui(GLuint red, GLuint green, GLuint blue, GLuint alpha) { fp_glColor4ui(red, green, blue, alpha); }
+inline void glColor4uiv(const GLuint* v) { fp_glColor4uiv(v); }
+inline void glColor4us(GLushort red, GLushort green, GLushort blue, GLushort alpha) { fp_glColor4us(red, green, blue, alpha); }
+inline void glColor4usv(const GLushort* v) { fp_glColor4usv(v); }
+inline void glEdgeFlag(GLboolean flag) { fp_glEdgeFlag(flag); }
+inline void glEdgeFlagv(const GLboolean* flag) { fp_glEdgeFlagv(flag); }
+inline void glEnd() { fp_glEnd(); }
+inline void glIndexd(GLdouble c) { fp_glIndexd(c); }
+inline void glIndexdv(const GLdouble* c) { fp_glIndexdv(c); }
+inline void glIndexf(GLfloat c) { fp_glIndexf(c); }
+inline void glIndexfv(const GLfloat* c) { fp_glIndexfv(c); }
+inline void glIndexi(GLint c) { fp_glIndexi(c); }
+inline void glIndexiv(const GLint* c) { fp_glIndexiv(c); }
+inline void glIndexs(GLshort c) { fp_glIndexs(c); }
+inline void glIndexsv(const GLshort* c) { fp_glIndexsv(c); }
+inline void glNormal3b(GLbyte nx, GLbyte ny, GLbyte nz) { fp_glNormal3b(nx, ny, nz); }
+inline void glNormal3bv(const GLbyte* v) { fp_glNormal3bv(v); }
+inline void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz) { fp_glNormal3d(nx, ny, nz); }
+inline void glNormal3dv(const GLdouble* v) { fp_glNormal3dv(v); }
+inline void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz) { fp_glNormal3f(nx, ny, nz); }
+inline void glNormal3fv(const GLfloat* v) { fp_glNormal3fv(v); }
+inline void glNormal3i(GLint nx, GLint ny, GLint nz) { fp_glNormal3i(nx, ny, nz); }
+inline void glNormal3iv(const GLint* v) { fp_glNormal3iv(v); }
+inline void glNormal3s(GLshort nx, GLshort ny, GLshort nz) { fp_glNormal3s(nx, ny, nz); }
+inline void glNormal3sv(const GLshort* v) { fp_glNormal3sv(v); }
+inline void glRasterPos2d(GLdouble x, GLdouble y) { fp_glRasterPos2d(x, y); }
+inline void glRasterPos2dv(const GLdouble* v) { fp_glRasterPos2dv(v); }
+inline void glRasterPos2f(GLfloat x, GLfloat y) { fp_glRasterPos2f(x, y); }
+inline void glRasterPos2fv(const GLfloat* v) { fp_glRasterPos2fv(v); }
+inline void glRasterPos2i(GLint x, GLint y) { fp_glRasterPos2i(x, y); }
+inline void glRasterPos2iv(const GLint* v) { fp_glRasterPos2iv(v); }
+inline void glRasterPos2s(GLshort x, GLshort y) { fp_glRasterPos2s(x, y); }
+inline void glRasterPos2sv(const GLshort* v) { fp_glRasterPos2sv(v); }
+inline void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z) { fp_glRasterPos3d(x, y, z); }
+inline void glRasterPos3dv(const GLdouble* v) { fp_glRasterPos3dv(v); }
+inline void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z) { fp_glRasterPos3f(x, y, z); }
+inline void glRasterPos3fv(const GLfloat* v) { fp_glRasterPos3fv(v); }
+inline void glRasterPos3i(GLint x, GLint y, GLint z) { fp_glRasterPos3i(x, y, z); }
+inline void glRasterPos3iv(const GLint* v) { fp_glRasterPos3iv(v); }
+inline void glRasterPos3s(GLshort x, GLshort y, GLshort z) { fp_glRasterPos3s(x, y, z); }
+inline void glRasterPos3sv(const GLshort* v) { fp_glRasterPos3sv(v); }
+inline void glRasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w) { fp_glRasterPos4d(x, y, z, w); }
+inline void glRasterPos4dv(const GLdouble* v) { fp_glRasterPos4dv(v); }
+inline void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w) { fp_glRasterPos4f(x, y, z, w); }
+inline void glRasterPos4fv(const GLfloat* v) { fp_glRasterPos4fv(v); }
+inline void glRasterPos4i(GLint x, GLint y, GLint z, GLint w) { fp_glRasterPos4i(x, y, z, w); }
+inline void glRasterPos4iv(const GLint* v) { fp_glRasterPos4iv(v); }
+inline void glRasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w) { fp_glRasterPos4s(x, y, z, w); }
+inline void glRasterPos4sv(const GLshort* v) { fp_glRasterPos4sv(v); }
+inline void glRectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) { fp_glRectd(x1, y1, x2, y2); }
+inline void glRectdv(const GLdouble* v1, const GLdouble* v2) { fp_glRectdv(v1, v2); }
+inline void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2) { fp_glRectf(x1, y1, x2, y2); }
+inline void glRectfv(const GLfloat* v1, const GLfloat* v2) { fp_glRectfv(v1, v2); }
+inline void glRecti(GLint x1, GLint y1, GLint x2, GLint y2) { fp_glRecti(x1, y1, x2, y2); }
+inline void glRectiv(const GLint* v1, const GLint* v2) { fp_glRectiv(v1, v2); }
+inline void glRects(GLshort x1, GLshort y1, GLshort x2, GLshort y2) { fp_glRects(x1, y1, x2, y2); }
+inline void glRectsv(const GLshort* v1, const GLshort* v2) { fp_glRectsv(v1, v2); }
+inline void glTexCoord1d(GLdouble s) { fp_glTexCoord1d(s); }
+inline void glTexCoord1dv(const GLdouble* v) { fp_glTexCoord1dv(v); }
+inline void glTexCoord1f(GLfloat s) { fp_glTexCoord1f(s); }
+inline void glTexCoord1fv(const GLfloat* v) { fp_glTexCoord1fv(v); }
+inline void glTexCoord1i(GLint s) { fp_glTexCoord1i(s); }
+inline void glTexCoord1iv(const GLint* v) { fp_glTexCoord1iv(v); }
+inline void glTexCoord1s(GLshort s) { fp_glTexCoord1s(s); }
+inline void glTexCoord1sv(const GLshort* v) { fp_glTexCoord1sv(v); }
+inline void glTexCoord2d(GLdouble s, GLdouble t) { fp_glTexCoord2d(s, t); }
+inline void glTexCoord2dv(const GLdouble* v) { fp_glTexCoord2dv(v); }
+inline void glTexCoord2f(GLfloat s, GLfloat t) { fp_glTexCoord2f(s, t); }
+inline void glTexCoord2fv(const GLfloat* v) { fp_glTexCoord2fv(v); }
+inline void glTexCoord2i(GLint s, GLint t) { fp_glTexCoord2i(s, t); }
+inline void glTexCoord2iv(const GLint* v) { fp_glTexCoord2iv(v); }
+inline void glTexCoord2s(GLshort s, GLshort t) { fp_glTexCoord2s(s, t); }
+inline void glTexCoord2sv(const GLshort* v) { fp_glTexCoord2sv(v); }
+inline void glTexCoord3d(GLdouble s, GLdouble t, GLdouble r) { fp_glTexCoord3d(s, t, r); }
+inline void glTexCoord3dv(const GLdouble* v) { fp_glTexCoord3dv(v); }
+inline void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r) { fp_glTexCoord3f(s, t, r); }
+inline void glTexCoord3fv(const GLfloat* v) { fp_glTexCoord3fv(v); }
+inline void glTexCoord3i(GLint s, GLint t, GLint r) { fp_glTexCoord3i(s, t, r); }
+inline void glTexCoord3iv(const GLint* v) { fp_glTexCoord3iv(v); }
+inline void glTexCoord3s(GLshort s, GLshort t, GLshort r) { fp_glTexCoord3s(s, t, r); }
+inline void glTexCoord3sv(const GLshort* v) { fp_glTexCoord3sv(v); }
+inline void glTexCoord4d(GLdouble s, GLdouble t, GLdouble r, GLdouble q) { fp_glTexCoord4d(s, t, r, q); }
+inline void glTexCoord4dv(const GLdouble* v) { fp_glTexCoord4dv(v); }
+inline void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q) { fp_glTexCoord4f(s, t, r, q); }
+inline void glTexCoord4fv(const GLfloat* v) { fp_glTexCoord4fv(v); }
+inline void glTexCoord4i(GLint s, GLint t, GLint r, GLint q) { fp_glTexCoord4i(s, t, r, q); }
+inline void glTexCoord4iv(const GLint* v) { fp_glTexCoord4iv(v); }
+inline void glTexCoord4s(GLshort s, GLshort t, GLshort r, GLshort q) { fp_glTexCoord4s(s, t, r, q); }
+inline void glTexCoord4sv(const GLshort* v) { fp_glTexCoord4sv(v); }
+inline void glVertex2d(GLdouble x, GLdouble y) { fp_glVertex2d(x, y); }
+inline void glVertex2dv(const GLdouble* v) { fp_glVertex2dv(v); }
+inline void glVertex2f(GLfloat x, GLfloat y) { fp_glVertex2f(x, y); }
+inline void glVertex2fv(const GLfloat* v) { fp_glVertex2fv(v); }
+inline void glVertex2i(GLint x, GLint y) { fp_glVertex2i(x, y); }
+inline void glVertex2iv(const GLint* v) { fp_glVertex2iv(v); }
+inline void glVertex2s(GLshort x, GLshort y) { fp_glVertex2s(x, y); }
+inline void glVertex2sv(const GLshort* v) { fp_glVertex2sv(v); }
+inline void glVertex3d(GLdouble x, GLdouble y, GLdouble z) { fp_glVertex3d(x, y, z); }
+inline void glVertex3dv(const GLdouble* v) { fp_glVertex3dv(v); }
+inline void glVertex3f(GLfloat x, GLfloat y, GLfloat z) { fp_glVertex3f(x, y, z); }
+inline void glVertex3fv(const GLfloat* v) { fp_glVertex3fv(v); }
+inline void glVertex3i(GLint x, GLint y, GLint z) { fp_glVertex3i(x, y, z); }
+inline void glVertex3iv(const GLint* v) { fp_glVertex3iv(v); }
+inline void glVertex3s(GLshort x, GLshort y, GLshort z) { fp_glVertex3s(x, y, z); }
+inline void glVertex3sv(const GLshort* v) { fp_glVertex3sv(v); }
+inline void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w) { fp_glVertex4d(x, y, z, w); }
+inline void glVertex4dv(const GLdouble* v) { fp_glVertex4dv(v); }
+inline void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w) { fp_glVertex4f(x, y, z, w); }
+inline void glVertex4fv(const GLfloat* v) { fp_glVertex4fv(v); }
+inline void glVertex4i(GLint x, GLint y, GLint z, GLint w) { fp_glVertex4i(x, y, z, w); }
+inline void glVertex4iv(const GLint* v) { fp_glVertex4iv(v); }
+inline void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w) { fp_glVertex4s(x, y, z, w); }
+inline void glVertex4sv(const GLshort* v) { fp_glVertex4sv(v); }
+inline void glClipPlane(GLenum plane, const GLdouble* equation) { fp_glClipPlane(plane, equation); }
+inline void glColorMaterial(GLenum face, GLenum mode) { fp_glColorMaterial(face, mode); }
+inline void glFogf(GLenum pname, GLfloat param) { fp_glFogf(pname, param); }
+inline void glFogfv(GLenum pname, const GLfloat* params) { fp_glFogfv(pname, params); }
+inline void glFogi(GLenum pname, GLint param) { fp_glFogi(pname, param); }
+inline void glFogiv(GLenum pname, const GLint* params) { fp_glFogiv(pname, params); }
+inline void glLightf(GLenum light, GLenum pname, GLfloat param) { fp_glLightf(light, pname, param); }
+inline void glLightfv(GLenum light, GLenum pname, const GLfloat* params) { fp_glLightfv(light, pname, params); }
+inline void glLighti(GLenum light, GLenum pname, GLint param) { fp_glLighti(light, pname, param); }
+inline void glLightiv(GLenum light, GLenum pname, const GLint* params) { fp_glLightiv(light, pname, params); }
+inline void glLightModelf(GLenum pname, GLfloat param) { fp_glLightModelf(pname, param); }
+inline void glLightModelfv(GLenum pname, const GLfloat* params) { fp_glLightModelfv(pname, params); }
+inline void glLightModeli(GLenum pname, GLint param) { fp_glLightModeli(pname, param); }
+inline void glLightModeliv(GLenum pname, const GLint* params) { fp_glLightModeliv(pname, params); }
+inline void glLineStipple(GLint factor, GLushort pattern) { fp_glLineStipple(factor, pattern); }
+inline void glMaterialf(GLenum face, GLenum pname, GLfloat param) { fp_glMaterialf(face, pname, param); }
+inline void glMaterialfv(GLenum face, GLenum pname, const GLfloat* params) { fp_glMaterialfv(face, pname, params); }
+inline void glMateriali(GLenum face, GLenum pname, GLint param) { fp_glMateriali(face, pname, param); }
+inline void glMaterialiv(GLenum face, GLenum pname, const GLint* params) { fp_glMaterialiv(face, pname, params); }
+inline void glPolygonStipple(const GLubyte* mask) { fp_glPolygonStipple(mask); }
+inline void glShadeModel(GLenum mode) { fp_glShadeModel(mode); }
+inline void glTexEnvf(GLenum target, GLenum pname, GLfloat param) { fp_glTexEnvf(target, pname, param); }
+inline void glTexEnvfv(GLenum target, GLenum pname, const GLfloat* params) { fp_glTexEnvfv(target, pname, params); }
+inline void glTexEnvi(GLenum target, GLenum pname, GLint param) { fp_glTexEnvi(target, pname, param); }
+inline void glTexEnviv(GLenum target, GLenum pname, const GLint* params) { fp_glTexEnviv(target, pname, params); }
+inline void glTexGend(GLenum coord, GLenum pname, GLdouble param) { fp_glTexGend(coord, pname, param); }
+inline void glTexGendv(GLenum coord, GLenum pname, const GLdouble* params) { fp_glTexGendv(coord, pname, params); }
+inline void glTexGenf(GLenum coord, GLenum pname, GLfloat param) { fp_glTexGenf(coord, pname, param); }
+inline void glTexGenfv(GLenum coord, GLenum pname, const GLfloat* params) { fp_glTexGenfv(coord, pname, params); }
+inline void glTexGeni(GLenum coord, GLenum pname, GLint param) { fp_glTexGeni(coord, pname, param); }
+inline void glTexGeniv(GLenum coord, GLenum pname, const GLint* params) { fp_glTexGeniv(coord, pname, params); }
+inline void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat* buffer) { fp_glFeedbackBuffer(size, type, buffer); }
+inline void glSelectBuffer(GLsizei size, GLuint* buffer) { fp_glSelectBuffer(size, buffer); }
+inline GLint glRenderMode(GLenum mode) { return fp_glRenderMode(mode); }
+inline void glInitNames() { fp_glInitNames(); }
+inline void glLoadName(GLuint name) { fp_glLoadName(name); }
+inline void glPassThrough(GLfloat token) { fp_glPassThrough(token); }
+inline void glPopName() { fp_glPopName(); }
+inline void glPushName(GLuint name) { fp_glPushName(name); }
+inline void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) { fp_glClearAccum(red, green, blue, alpha); }
+inline void glClearIndex(GLfloat c) { fp_glClearIndex(c); }
+inline void glIndexMask(GLuint mask) { fp_glIndexMask(mask); }
+inline void glAccum(GLenum op, GLfloat value) { fp_glAccum(op, value); }
+inline void glPopAttrib() { fp_glPopAttrib(); }
+inline void glPushAttrib(GLbitfield mask) { fp_glPushAttrib(mask); }
+inline void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points) { fp_glMap1d(target, u1, u2, stride, order, points); }
+inline void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points) { fp_glMap1f(target, u1, u2, stride, order, points); }
+inline void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points) { fp_glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); }
+inline void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points) { fp_glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); }
+inline void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2) { fp_glMapGrid1d(un, u1, u2); }
+inline void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2) { fp_glMapGrid1f(un, u1, u2); }
+inline void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2) { fp_glMapGrid2d(un, u1, u2, vn, v1, v2); }
+inline void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2) { fp_glMapGrid2f(un, u1, u2, vn, v1, v2); }
+inline void glEvalCoord1d(GLdouble u) { fp_glEvalCoord1d(u); }
+inline void glEvalCoord1dv(const GLdouble* u) { fp_glEvalCoord1dv(u); }
+inline void glEvalCoord1f(GLfloat u) { fp_glEvalCoord1f(u); }
+inline void glEvalCoord1fv(const GLfloat* u) { fp_glEvalCoord1fv(u); }
+inline void glEvalCoord2d(GLdouble u, GLdouble v) { fp_glEvalCoord2d(u, v); }
+inline void glEvalCoord2dv(const GLdouble* u) { fp_glEvalCoord2dv(u); }
+inline void glEvalCoord2f(GLfloat u, GLfloat v) { fp_glEvalCoord2f(u, v); }
+inline void glEvalCoord2fv(const GLfloat* u) { fp_glEvalCoord2fv(u); }
+inline void glEvalMesh1(GLenum mode, GLint i1, GLint i2) { fp_glEvalMesh1(mode, i1, i2); }
+inline void glEvalPoint1(GLint i) { fp_glEvalPoint1(i); }
+inline void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) { fp_glEvalMesh2(mode, i1, i2, j1, j2); }
+inline void glEvalPoint2(GLint i, GLint j) { fp_glEvalPoint2(i, j); }
+inline void glAlphaFunc(GLenum func, GLfloat ref) { fp_glAlphaFunc(func, ref); }
+inline void glPixelZoom(GLfloat xfactor, GLfloat yfactor) { fp_glPixelZoom(xfactor, yfactor); }
+inline void glPixelTransferf(GLenum pname, GLfloat param) { fp_glPixelTransferf(pname, param); }
+inline void glPixelTransferi(GLenum pname, GLint param) { fp_glPixelTransferi(pname, param); }
+inline void glPixelMapfv(GLenum map, GLsizei mapsize, const GLfloat* values) { fp_glPixelMapfv(map, mapsize, values); }
+inline void glPixelMapuiv(GLenum map, GLsizei mapsize, const GLuint* values) { fp_glPixelMapuiv(map, mapsize, values); }
+inline void glPixelMapusv(GLenum map, GLsizei mapsize, const GLushort* values) { fp_glPixelMapusv(map, mapsize, values); }
+inline void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type) { fp_glCopyPixels(x, y, width, height, type); }
+inline void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels) { fp_glDrawPixels(width, height, format, type, pixels); }
+inline void glGetClipPlane(GLenum plane, GLdouble* equation) { fp_glGetClipPlane(plane, equation); }
+inline void glGetLightfv(GLenum light, GLenum pname, GLfloat* params) { fp_glGetLightfv(light, pname, params); }
+inline void glGetLightiv(GLenum light, GLenum pname, GLint* params) { fp_glGetLightiv(light, pname, params); }
+inline void glGetMapdv(GLenum target, GLenum query, GLdouble* v) { fp_glGetMapdv(target, query, v); }
+inline void glGetMapfv(GLenum target, GLenum query, GLfloat* v) { fp_glGetMapfv(target, query, v); }
+inline void glGetMapiv(GLenum target, GLenum query, GLint* v) { fp_glGetMapiv(target, query, v); }
+inline void glGetMaterialfv(GLenum face, GLenum pname, GLfloat* params) { fp_glGetMaterialfv(face, pname, params); }
+inline void glGetMaterialiv(GLenum face, GLenum pname, GLint* params) { fp_glGetMaterialiv(face, pname, params); }
+inline void glGetPixelMapfv(GLenum map, GLfloat* values) { fp_glGetPixelMapfv(map, values); }
+inline void glGetPixelMapuiv(GLenum map, GLuint* values) { fp_glGetPixelMapuiv(map, values); }
+inline void glGetPixelMapusv(GLenum map, GLushort* values) { fp_glGetPixelMapusv(map, values); }
+inline void glGetPolygonStipple(GLubyte* mask) { fp_glGetPolygonStipple(mask); }
+inline void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat* params) { fp_glGetTexEnvfv(target, pname, params); }
+inline void glGetTexEnviv(GLenum target, GLenum pname, GLint* params) { fp_glGetTexEnviv(target, pname, params); }
+inline void glGetTexGendv(GLenum coord, GLenum pname, GLdouble* params) { fp_glGetTexGendv(coord, pname, params); }
+inline void glGetTexGenfv(GLenum coord, GLenum pname, GLfloat* params) { fp_glGetTexGenfv(coord, pname, params); }
+inline void glGetTexGeniv(GLenum coord, GLenum pname, GLint* params) { fp_glGetTexGeniv(coord, pname, params); }
+inline GLboolean glIsList(GLuint list) { return fp_glIsList(list); }
+inline void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) { fp_glFrustum(left, right, bottom, top, zNear, zFar); }
+inline void glLoadIdentity() { fp_glLoadIdentity(); }
+inline void glLoadMatrixf(const GLfloat* m) { fp_glLoadMatrixf(m); }
+inline void glLoadMatrixd(const GLdouble* m) { fp_glLoadMatrixd(m); }
+inline void glMatrixMode(GLenum mode) { fp_glMatrixMode(mode); }
+inline void glMultMatrixf(const GLfloat* m) { fp_glMultMatrixf(m); }
+inline void glMultMatrixd(const GLdouble* m) { fp_glMultMatrixd(m); }
+inline void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) { fp_glOrtho(left, right, bottom, top, zNear, zFar); }
+inline void glPopMatrix() { fp_glPopMatrix(); }
+inline void glPushMatrix() { fp_glPushMatrix(); }
+inline void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z) { fp_glRotated(angle, x, y, z); }
+inline void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z) { fp_glRotatef(angle, x, y, z); }
+inline void glScaled(GLdouble x, GLdouble y, GLdouble z) { fp_glScaled(x, y, z); }
+inline void glScalef(GLfloat x, GLfloat y, GLfloat z) { fp_glScalef(x, y, z); }
+inline void glTranslated(GLdouble x, GLdouble y, GLdouble z) { fp_glTranslated(x, y, z); }
+inline void glTranslatef(GLfloat x, GLfloat y, GLfloat z) { fp_glTranslatef(x, y, z); }
+
+/* GL_VERSION_1_1 */
+inline void glDrawArrays(GLenum mode, GLint first, GLsizei count) { fp_glDrawArrays(mode, first, count); }
+inline void glDrawElements(GLenum mode, GLsizei count, GLenum type, const void* indices) { fp_glDrawElements(mode, count, type, indices); }
+inline void glGetPointerv(GLenum pname, void** params) { fp_glGetPointerv(pname, params); }
+inline void glPolygonOffset(GLfloat factor, GLfloat units) { fp_glPolygonOffset(factor, units); }
+inline void glCopyTexImage1D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) { fp_glCopyTexImage1D(target, level, internalformat, x, y, width, border); }
+inline void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) { fp_glCopyTexImage2D(target, level, internalformat, x, y, width, height, border); }
+inline void glCopyTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) { fp_glCopyTexSubImage1D(target, level, xoffset, x, y, width); }
+inline void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) { fp_glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); }
+inline void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void* pixels) { fp_glTexSubImage1D(target, level, xoffset, width, format, type, pixels); }
+inline void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels) { fp_glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels); }
+inline void glBindTexture(GLenum target, GLuint texture) { fp_glBindTexture(target, texture); }
+inline void glDeleteTextures(GLsizei n, const GLuint* textures) { fp_glDeleteTextures(n, textures); }
+inline void glGenTextures(GLsizei n, GLuint* textures) { fp_glGenTextures(n, textures); }
+inline GLboolean glIsTexture(GLuint texture) { return fp_glIsTexture(texture); }
+inline void glArrayElement(GLint i) { fp_glArrayElement(i); }
+inline void glColorPointer(GLint size, GLenum type, GLsizei stride, const void* pointer) { fp_glColorPointer(size, type, stride, pointer); }
+inline void glDisableClientState(GLenum array) { fp_glDisableClientState(array); }
+inline void glEdgeFlagPointer(GLsizei stride, const void* pointer) { fp_glEdgeFlagPointer(stride, pointer); }
+inline void glEnableClientState(GLenum array) { fp_glEnableClientState(array); }
+inline void glIndexPointer(GLenum type, GLsizei stride, const void* pointer) { fp_glIndexPointer(type, stride, pointer); }
+inline void glInterleavedArrays(GLenum format, GLsizei stride, const void* pointer) { fp_glInterleavedArrays(format, stride, pointer); }
+inline void glNormalPointer(GLenum type, GLsizei stride, const void* pointer) { fp_glNormalPointer(type, stride, pointer); }
+inline void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const void* pointer) { fp_glTexCoordPointer(size, type, stride, pointer); }
+inline void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void* pointer) { fp_glVertexPointer(size, type, stride, pointer); }
+inline GLboolean glAreTexturesResident(GLsizei n, const GLuint* textures, GLboolean* residences) { return fp_glAreTexturesResident(n, textures, residences); }
+inline void glPrioritizeTextures(GLsizei n, const GLuint* textures, const GLfloat* priorities) { fp_glPrioritizeTextures(n, textures, priorities); }
+inline void glIndexub(GLubyte c) { fp_glIndexub(c); }
+inline void glIndexubv(const GLubyte* c) { fp_glIndexubv(c); }
+inline void glPopClientAttrib() { fp_glPopClientAttrib(); }
+inline void glPushClientAttrib(GLbitfield mask) { fp_glPushClientAttrib(mask); }
+
+/* GL_VERSION_1_2 */
+inline void glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void* indices) { fp_glDrawRangeElements(mode, start, end, count, type, indices); }
+inline void glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels) { fp_glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, pixels); }
+inline void glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels) { fp_glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels); }
+inline void glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) { fp_glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); }
+
+/* GL_VERSION_1_3 */
+inline void glActiveTexture(GLenum texture) { fp_glActiveTexture(texture); }
+inline void glSampleCoverage(GLfloat value, GLboolean invert) { fp_glSampleCoverage(value, invert); }
+inline void glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data) { fp_glCompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data); }
+inline void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data) { fp_glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data); }
+inline void glCompressedTexImage1D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void* data) { fp_glCompressedTexImage1D(target, level, internalformat, width, border, imageSize, data); }
+inline void glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data) { fp_glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); }
+inline void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data) { fp_glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); }
+inline void glCompressedTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* data) { fp_glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); }
+inline void glGetCompressedTexImage(GLenum target, GLint level, void* img) { fp_glGetCompressedTexImage(target, level, img); }
+inline void glClientActiveTexture(GLenum texture) { fp_glClientActiveTexture(texture); }
+inline void glMultiTexCoord1d(GLenum target, GLdouble s) { fp_glMultiTexCoord1d(target, s); }
+inline void glMultiTexCoord1dv(GLenum target, const GLdouble* v) { fp_glMultiTexCoord1dv(target, v); }
+inline void glMultiTexCoord1f(GLenum target, GLfloat s) { fp_glMultiTexCoord1f(target, s); }
+inline void glMultiTexCoord1fv(GLenum target, const GLfloat* v) { fp_glMultiTexCoord1fv(target, v); }
+inline void glMultiTexCoord1i(GLenum target, GLint s) { fp_glMultiTexCoord1i(target, s); }
+inline void glMultiTexCoord1iv(GLenum target, const GLint* v) { fp_glMultiTexCoord1iv(target, v); }
+inline void glMultiTexCoord1s(GLenum target, GLshort s) { fp_glMultiTexCoord1s(target, s); }
+inline void glMultiTexCoord1sv(GLenum target, const GLshort* v) { fp_glMultiTexCoord1sv(target, v); }
+inline void glMultiTexCoord2d(GLenum target, GLdouble s, GLdouble t) { fp_glMultiTexCoord2d(target, s, t); }
+inline void glMultiTexCoord2dv(GLenum target, const GLdouble* v) { fp_glMultiTexCoord2dv(target, v); }
+inline void glMultiTexCoord2f(GLenum target, GLfloat s, GLfloat t) { fp_glMultiTexCoord2f(target, s, t); }
+inline void glMultiTexCoord2fv(GLenum target, const GLfloat* v) { fp_glMultiTexCoord2fv(target, v); }
+inline void glMultiTexCoord2i(GLenum target, GLint s, GLint t) { fp_glMultiTexCoord2i(target, s, t); }
+inline void glMultiTexCoord2iv(GLenum target, const GLint* v) { fp_glMultiTexCoord2iv(target, v); }
+inline void glMultiTexCoord2s(GLenum target, GLshort s, GLshort t) { fp_glMultiTexCoord2s(target, s, t); }
+inline void glMultiTexCoord2sv(GLenum target, const GLshort* v) { fp_glMultiTexCoord2sv(target, v); }
+inline void glMultiTexCoord3d(GLenum target, GLdouble s, GLdouble t, GLdouble r) { fp_glMultiTexCoord3d(target, s, t, r); }
+inline void glMultiTexCoord3dv(GLenum target, const GLdouble* v) { fp_glMultiTexCoord3dv(target, v); }
+inline void glMultiTexCoord3f(GLenum target, GLfloat s, GLfloat t, GLfloat r) { fp_glMultiTexCoord3f(target, s, t, r); }
+inline void glMultiTexCoord3fv(GLenum target, const GLfloat* v) { fp_glMultiTexCoord3fv(target, v); }
+inline void glMultiTexCoord3i(GLenum target, GLint s, GLint t, GLint r) { fp_glMultiTexCoord3i(target, s, t, r); }
+inline void glMultiTexCoord3iv(GLenum target, const GLint* v) { fp_glMultiTexCoord3iv(target, v); }
+inline void glMultiTexCoord3s(GLenum target, GLshort s, GLshort t, GLshort r) { fp_glMultiTexCoord3s(target, s, t, r); }
+inline void glMultiTexCoord3sv(GLenum target, const GLshort* v) { fp_glMultiTexCoord3sv(target, v); }
+inline void glMultiTexCoord4d(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) { fp_glMultiTexCoord4d(target, s, t, r, q); }
+inline void glMultiTexCoord4dv(GLenum target, const GLdouble* v) { fp_glMultiTexCoord4dv(target, v); }
+inline void glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) { fp_glMultiTexCoord4f(target, s, t, r, q); }
+inline void glMultiTexCoord4fv(GLenum target, const GLfloat* v) { fp_glMultiTexCoord4fv(target, v); }
+inline void glMultiTexCoord4i(GLenum target, GLint s, GLint t, GLint r, GLint q) { fp_glMultiTexCoord4i(target, s, t, r, q); }
+inline void glMultiTexCoord4iv(GLenum target, const GLint* v) { fp_glMultiTexCoord4iv(target, v); }
+inline void glMultiTexCoord4s(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) { fp_glMultiTexCoord4s(target, s, t, r, q); }
+inline void glMultiTexCoord4sv(GLenum target, const GLshort* v) { fp_glMultiTexCoord4sv(target, v); }
+inline void glLoadTransposeMatrixf(const GLfloat* m) { fp_glLoadTransposeMatrixf(m); }
+inline void glLoadTransposeMatrixd(const GLdouble* m) { fp_glLoadTransposeMatrixd(m); }
+inline void glMultTransposeMatrixf(const GLfloat* m) { fp_glMultTransposeMatrixf(m); }
+inline void glMultTransposeMatrixd(const GLdouble* m) { fp_glMultTransposeMatrixd(m); }
+
+/* GL_VERSION_1_4 */
+inline void glBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) { fp_glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); }
+inline void glMultiDrawArrays(GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount) { fp_glMultiDrawArrays(mode, first, count, drawcount); }
+inline void glMultiDrawElements(GLenum mode, const GLsizei* count, GLenum type, const void** indices, GLsizei drawcount) { fp_glMultiDrawElements(mode, count, type, indices, drawcount); }
+inline void glPointParameterf(GLenum pname, GLfloat param) { fp_glPointParameterf(pname, param); }
+inline void glPointParameterfv(GLenum pname, const GLfloat* params) { fp_glPointParameterfv(pname, params); }
+inline void glPointParameteri(GLenum pname, GLint param) { fp_glPointParameteri(pname, param); }
+inline void glPointParameteriv(GLenum pname, const GLint* params) { fp_glPointParameteriv(pname, params); }
+inline void glFogCoordf(GLfloat coord) { fp_glFogCoordf(coord); }
+inline void glFogCoordfv(const GLfloat* coord) { fp_glFogCoordfv(coord); }
+inline void glFogCoordd(GLdouble coord) { fp_glFogCoordd(coord); }
+inline void glFogCoorddv(const GLdouble* coord) { fp_glFogCoorddv(coord); }
+inline void glFogCoordPointer(GLenum type, GLsizei stride, const void* pointer) { fp_glFogCoordPointer(type, stride, pointer); }
+inline void glSecondaryColor3b(GLbyte red, GLbyte green, GLbyte blue) { fp_glSecondaryColor3b(red, green, blue); }
+inline void glSecondaryColor3bv(const GLbyte* v) { fp_glSecondaryColor3bv(v); }
+inline void glSecondaryColor3d(GLdouble red, GLdouble green, GLdouble blue) { fp_glSecondaryColor3d(red, green, blue); }
+inline void glSecondaryColor3dv(const GLdouble* v) { fp_glSecondaryColor3dv(v); }
+inline void glSecondaryColor3f(GLfloat red, GLfloat green, GLfloat blue) { fp_glSecondaryColor3f(red, green, blue); }
+inline void glSecondaryColor3fv(const GLfloat* v) { fp_glSecondaryColor3fv(v); }
+inline void glSecondaryColor3i(GLint red, GLint green, GLint blue) { fp_glSecondaryColor3i(red, green, blue); }
+inline void glSecondaryColor3iv(const GLint* v) { fp_glSecondaryColor3iv(v); }
+inline void glSecondaryColor3s(GLshort red, GLshort green, GLshort blue) { fp_glSecondaryColor3s(red, green, blue); }
+inline void glSecondaryColor3sv(const GLshort* v) { fp_glSecondaryColor3sv(v); }
+inline void glSecondaryColor3ub(GLubyte red, GLubyte green, GLubyte blue) { fp_glSecondaryColor3ub(red, green, blue); }
+inline void glSecondaryColor3ubv(const GLubyte* v) { fp_glSecondaryColor3ubv(v); }
+inline void glSecondaryColor3ui(GLuint red, GLuint green, GLuint blue) { fp_glSecondaryColor3ui(red, green, blue); }
+inline void glSecondaryColor3uiv(const GLuint* v) { fp_glSecondaryColor3uiv(v); }
+inline void glSecondaryColor3us(GLushort red, GLushort green, GLushort blue) { fp_glSecondaryColor3us(red, green, blue); }
+inline void glSecondaryColor3usv(const GLushort* v) { fp_glSecondaryColor3usv(v); }
+inline void glSecondaryColorPointer(GLint size, GLenum type, GLsizei stride, const void* pointer) { fp_glSecondaryColorPointer(size, type, stride, pointer); }
+inline void glWindowPos2d(GLdouble x, GLdouble y) { fp_glWindowPos2d(x, y); }
+inline void glWindowPos2dv(const GLdouble* v) { fp_glWindowPos2dv(v); }
+inline void glWindowPos2f(GLfloat x, GLfloat y) { fp_glWindowPos2f(x, y); }
+inline void glWindowPos2fv(const GLfloat* v) { fp_glWindowPos2fv(v); }
+inline void glWindowPos2i(GLint x, GLint y) { fp_glWindowPos2i(x, y); }
+inline void glWindowPos2iv(const GLint* v) { fp_glWindowPos2iv(v); }
+inline void glWindowPos2s(GLshort x, GLshort y) { fp_glWindowPos2s(x, y); }
+inline void glWindowPos2sv(const GLshort* v) { fp_glWindowPos2sv(v); }
+inline void glWindowPos3d(GLdouble x, GLdouble y, GLdouble z) { fp_glWindowPos3d(x, y, z); }
+inline void glWindowPos3dv(const GLdouble* v) { fp_glWindowPos3dv(v); }
+inline void glWindowPos3f(GLfloat x, GLfloat y, GLfloat z) { fp_glWindowPos3f(x, y, z); }
+inline void glWindowPos3fv(const GLfloat* v) { fp_glWindowPos3fv(v); }
+inline void glWindowPos3i(GLint x, GLint y, GLint z) { fp_glWindowPos3i(x, y, z); }
+inline void glWindowPos3iv(const GLint* v) { fp_glWindowPos3iv(v); }
+inline void glWindowPos3s(GLshort x, GLshort y, GLshort z) { fp_glWindowPos3s(x, y, z); }
+inline void glWindowPos3sv(const GLshort* v) { fp_glWindowPos3sv(v); }
+inline void glBlendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) { fp_glBlendColor(red, green, blue, alpha); }
+inline void glBlendEquation(GLenum mode) { fp_glBlendEquation(mode); }
+
+/* GL_VERSION_1_5 */
+inline void glGenQueries(GLsizei n, GLuint* ids) { fp_glGenQueries(n, ids); }
+inline void glDeleteQueries(GLsizei n, const GLuint* ids) { fp_glDeleteQueries(n, ids); }
+inline GLboolean glIsQuery(GLuint id) { return fp_glIsQuery(id); }
+inline void glBeginQuery(GLenum target, GLuint id) { fp_glBeginQuery(target, id); }
+inline void glEndQuery(GLenum target) { fp_glEndQuery(target); }
+inline void glGetQueryiv(GLenum target, GLenum pname, GLint* params) { fp_glGetQueryiv(target, pname, params); }
+inline void glGetQueryObjectiv(GLuint id, GLenum pname, GLint* params) { fp_glGetQueryObjectiv(id, pname, params); }
+inline void glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params) { fp_glGetQueryObjectuiv(id, pname, params); }
+inline void glBindBuffer(GLenum target, GLuint buffer) { fp_glBindBuffer(target, buffer); }
+inline void glDeleteBuffers(GLsizei n, const GLuint* buffers) { fp_glDeleteBuffers(n, buffers); }
+inline void glGenBuffers(GLsizei n, GLuint* buffers) { fp_glGenBuffers(n, buffers); }
+inline GLboolean glIsBuffer(GLuint buffer) { return fp_glIsBuffer(buffer); }
+inline void glBufferData(GLenum target, GLsizeiptr size, const void* data, GLenum usage) { fp_glBufferData(target, size, data, usage); }
+inline void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const void* data) { fp_glBufferSubData(target, offset, size, data); }
+inline void glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, void* data) { fp_glGetBufferSubData(target, offset, size, data); }
+inline void* glMapBuffer(GLenum target, GLenum access) { return fp_glMapBuffer(target, access); }
+inline GLboolean glUnmapBuffer(GLenum target) { return fp_glUnmapBuffer(target); }
+inline void glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params) { fp_glGetBufferParameteriv(target, pname, params); }
+inline void glGetBufferPointerv(GLenum target, GLenum pname, void** params) { fp_glGetBufferPointerv(target, pname, params); }
+
+/* GL_VERSION_2_0 */
+inline void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) { fp_glBlendEquationSeparate(modeRGB, modeAlpha); }
+inline void glDrawBuffers(GLsizei n, const GLenum* bufs) { fp_glDrawBuffers(n, bufs); }
+inline void glStencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) { fp_glStencilOpSeparate(face, sfail, dpfail, dppass); }
+inline void glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask) { fp_glStencilFuncSeparate(face, func, ref, mask); }
+inline void glStencilMaskSeparate(GLenum face, GLuint mask) { fp_glStencilMaskSeparate(face, mask); }
+inline void glAttachShader(GLuint program, GLuint shader) { fp_glAttachShader(program, shader); }
+inline void glBindAttribLocation(GLuint program, GLuint index, const GLchar* name) { fp_glBindAttribLocation(program, index, name); }
+inline void glCompileShader(GLuint shader) { fp_glCompileShader(shader); }
+inline GLuint glCreateProgram() { return fp_glCreateProgram(); }
+inline GLuint glCreateShader(GLenum type) { return fp_glCreateShader(type); }
+inline void glDeleteProgram(GLuint program) { fp_glDeleteProgram(program); }
+inline void glDeleteShader(GLuint shader) { fp_glDeleteShader(shader); }
+inline void glDetachShader(GLuint program, GLuint shader) { fp_glDetachShader(program, shader); }
+inline void glDisableVertexAttribArray(GLuint index) { fp_glDisableVertexAttribArray(index); }
+inline void glEnableVertexAttribArray(GLuint index) { fp_glEnableVertexAttribArray(index); }
+inline void glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* type, GLchar* name) { fp_glGetActiveAttrib(program, index, bufSize, length, size, type, name); }
+inline void glGetActiveUniform(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* type, GLchar* name) { fp_glGetActiveUniform(program, index, bufSize, length, size, type, name); }
+inline void glGetAttachedShaders(GLuint program, GLsizei maxCount, GLsizei* count, GLuint* shaders) { fp_glGetAttachedShaders(program, maxCount, count, shaders); }
+inline GLint glGetAttribLocation(GLuint program, const GLchar* name) { return fp_glGetAttribLocation(program, name); }
+inline void glGetProgramiv(GLuint program, GLenum pname, GLint* params) { fp_glGetProgramiv(program, pname, params); }
+inline void glGetProgramInfoLog(GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) { fp_glGetProgramInfoLog(program, bufSize, length, infoLog); }
+inline void glGetShaderiv(GLuint shader, GLenum pname, GLint* params) { fp_glGetShaderiv(shader, pname, params); }
+inline void glGetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) { fp_glGetShaderInfoLog(shader, bufSize, length, infoLog); }
+inline void glGetShaderSource(GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source) { fp_glGetShaderSource(shader, bufSize, length, source); }
+inline GLint glGetUniformLocation(GLuint program, const GLchar* name) { return fp_glGetUniformLocation(program, name); }
+inline void glGetUniformfv(GLuint program, GLint location, GLfloat* params) { fp_glGetUniformfv(program, location, params); }
+inline void glGetUniformiv(GLuint program, GLint location, GLint* params) { fp_glGetUniformiv(program, location, params); }
+inline void glGetVertexAttribdv(GLuint index, GLenum pname, GLdouble* params) { fp_glGetVertexAttribdv(index, pname, params); }
+inline void glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params) { fp_glGetVertexAttribfv(index, pname, params); }
+inline void glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params) { fp_glGetVertexAttribiv(index, pname, params); }
+inline void glGetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer) { fp_glGetVertexAttribPointerv(index, pname, pointer); }
+inline GLboolean glIsProgram(GLuint program) { return fp_glIsProgram(program); }
+inline GLboolean glIsShader(GLuint shader) { return fp_glIsShader(shader); }
+inline void glLinkProgram(GLuint program) { fp_glLinkProgram(program); }
+inline void glShaderSource(GLuint shader, GLsizei count, const GLchar** string, const GLint* length) { fp_glShaderSource(shader, count, string, length); }
+inline void glUseProgram(GLuint program) { fp_glUseProgram(program); }
+inline void glUniform1f(GLint location, GLfloat v0) { fp_glUniform1f(location, v0); }
+inline void glUniform2f(GLint location, GLfloat v0, GLfloat v1) { fp_glUniform2f(location, v0, v1); }
+inline void glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) { fp_glUniform3f(location, v0, v1, v2); }
+inline void glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) { fp_glUniform4f(location, v0, v1, v2, v3); }
+inline void glUniform1i(GLint location, GLint v0) { fp_glUniform1i(location, v0); }
+inline void glUniform2i(GLint location, GLint v0, GLint v1) { fp_glUniform2i(location, v0, v1); }
+inline void glUniform3i(GLint location, GLint v0, GLint v1, GLint v2) { fp_glUniform3i(location, v0, v1, v2); }
+inline void glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) { fp_glUniform4i(location, v0, v1, v2, v3); }
+inline void glUniform1fv(GLint location, GLsizei count, const GLfloat* value) { fp_glUniform1fv(location, count, value); }
+inline void glUniform2fv(GLint location, GLsizei count, const GLfloat* value) { fp_glUniform2fv(location, count, value); }
+inline void glUniform3fv(GLint location, GLsizei count, const GLfloat* value) { fp_glUniform3fv(location, count, value); }
+inline void glUniform4fv(GLint location, GLsizei count, const GLfloat* value) { fp_glUniform4fv(location, count, value); }
+inline void glUniform1iv(GLint location, GLsizei count, const GLint* value) { fp_glUniform1iv(location, count, value); }
+inline void glUniform2iv(GLint location, GLsizei count, const GLint* value) { fp_glUniform2iv(location, count, value); }
+inline void glUniform3iv(GLint location, GLsizei count, const GLint* value) { fp_glUniform3iv(location, count, value); }
+inline void glUniform4iv(GLint location, GLsizei count, const GLint* value) { fp_glUniform4iv(location, count, value); }
+inline void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glUniformMatrix2fv(location, count, transpose, value); }
+inline void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glUniformMatrix3fv(location, count, transpose, value); }
+inline void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glUniformMatrix4fv(location, count, transpose, value); }
+inline void glValidateProgram(GLuint program) { fp_glValidateProgram(program); }
+inline void glVertexAttrib1d(GLuint index, GLdouble x) { fp_glVertexAttrib1d(index, x); }
+inline void glVertexAttrib1dv(GLuint index, const GLdouble* v) { fp_glVertexAttrib1dv(index, v); }
+inline void glVertexAttrib1f(GLuint index, GLfloat x) { fp_glVertexAttrib1f(index, x); }
+inline void glVertexAttrib1fv(GLuint index, const GLfloat* v) { fp_glVertexAttrib1fv(index, v); }
+inline void glVertexAttrib1s(GLuint index, GLshort x) { fp_glVertexAttrib1s(index, x); }
+inline void glVertexAttrib1sv(GLuint index, const GLshort* v) { fp_glVertexAttrib1sv(index, v); }
+inline void glVertexAttrib2d(GLuint index, GLdouble x, GLdouble y) { fp_glVertexAttrib2d(index, x, y); }
+inline void glVertexAttrib2dv(GLuint index, const GLdouble* v) { fp_glVertexAttrib2dv(index, v); }
+inline void glVertexAttrib2f(GLuint index, GLfloat x, GLfloat y) { fp_glVertexAttrib2f(index, x, y); }
+inline void glVertexAttrib2fv(GLuint index, const GLfloat* v) { fp_glVertexAttrib2fv(index, v); }
+inline void glVertexAttrib2s(GLuint index, GLshort x, GLshort y) { fp_glVertexAttrib2s(index, x, y); }
+inline void glVertexAttrib2sv(GLuint index, const GLshort* v) { fp_glVertexAttrib2sv(index, v); }
+inline void glVertexAttrib3d(GLuint index, GLdouble x, GLdouble y, GLdouble z) { fp_glVertexAttrib3d(index, x, y, z); }
+inline void glVertexAttrib3dv(GLuint index, const GLdouble* v) { fp_glVertexAttrib3dv(index, v); }
+inline void glVertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z) { fp_glVertexAttrib3f(index, x, y, z); }
+inline void glVertexAttrib3fv(GLuint index, const GLfloat* v) { fp_glVertexAttrib3fv(index, v); }
+inline void glVertexAttrib3s(GLuint index, GLshort x, GLshort y, GLshort z) { fp_glVertexAttrib3s(index, x, y, z); }
+inline void glVertexAttrib3sv(GLuint index, const GLshort* v) { fp_glVertexAttrib3sv(index, v); }
+inline void glVertexAttrib4Nbv(GLuint index, const GLbyte* v) { fp_glVertexAttrib4Nbv(index, v); }
+inline void glVertexAttrib4Niv(GLuint index, const GLint* v) { fp_glVertexAttrib4Niv(index, v); }
+inline void glVertexAttrib4Nsv(GLuint index, const GLshort* v) { fp_glVertexAttrib4Nsv(index, v); }
+inline void glVertexAttrib4Nub(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) { fp_glVertexAttrib4Nub(index, x, y, z, w); }
+inline void glVertexAttrib4Nubv(GLuint index, const GLubyte* v) { fp_glVertexAttrib4Nubv(index, v); }
+inline void glVertexAttrib4Nuiv(GLuint index, const GLuint* v) { fp_glVertexAttrib4Nuiv(index, v); }
+inline void glVertexAttrib4Nusv(GLuint index, const GLushort* v) { fp_glVertexAttrib4Nusv(index, v); }
+inline void glVertexAttrib4bv(GLuint index, const GLbyte* v) { fp_glVertexAttrib4bv(index, v); }
+inline void glVertexAttrib4d(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) { fp_glVertexAttrib4d(index, x, y, z, w); }
+inline void glVertexAttrib4dv(GLuint index, const GLdouble* v) { fp_glVertexAttrib4dv(index, v); }
+inline void glVertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) { fp_glVertexAttrib4f(index, x, y, z, w); }
+inline void glVertexAttrib4fv(GLuint index, const GLfloat* v) { fp_glVertexAttrib4fv(index, v); }
+inline void glVertexAttrib4iv(GLuint index, const GLint* v) { fp_glVertexAttrib4iv(index, v); }
+inline void glVertexAttrib4s(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) { fp_glVertexAttrib4s(index, x, y, z, w); }
+inline void glVertexAttrib4sv(GLuint index, const GLshort* v) { fp_glVertexAttrib4sv(index, v); }
+inline void glVertexAttrib4ubv(GLuint index, const GLubyte* v) { fp_glVertexAttrib4ubv(index, v); }
+inline void glVertexAttrib4uiv(GLuint index, const GLuint* v) { fp_glVertexAttrib4uiv(index, v); }
+inline void glVertexAttrib4usv(GLuint index, const GLushort* v) { fp_glVertexAttrib4usv(index, v); }
+inline void glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer) { fp_glVertexAttribPointer(index, size, type, normalized, stride, pointer); }
+
+/* GL_VERSION_2_1 */
+inline void glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glUniformMatrix2x3fv(location, count, transpose, value); }
+inline void glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glUniformMatrix3x2fv(location, count, transpose, value); }
+inline void glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glUniformMatrix2x4fv(location, count, transpose, value); }
+inline void glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glUniformMatrix4x2fv(location, count, transpose, value); }
+inline void glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glUniformMatrix3x4fv(location, count, transpose, value); }
+inline void glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glUniformMatrix4x3fv(location, count, transpose, value); }
+
+/* GL_VERSION_3_0 */
+inline void glColorMaski(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) { fp_glColorMaski(index, r, g, b, a); }
+inline void glGetBooleani_v(GLenum target, GLuint index, GLboolean* data) { fp_glGetBooleani_v(target, index, data); }
+inline void glGetIntegeri_v(GLenum target, GLuint index, GLint* data) { fp_glGetIntegeri_v(target, index, data); }
+inline void glEnablei(GLenum target, GLuint index) { fp_glEnablei(target, index); }
+inline void glDisablei(GLenum target, GLuint index) { fp_glDisablei(target, index); }
+inline GLboolean glIsEnabledi(GLenum target, GLuint index) { return fp_glIsEnabledi(target, index); }
+inline void glBeginTransformFeedback(GLenum primitiveMode) { fp_glBeginTransformFeedback(primitiveMode); }
+inline void glEndTransformFeedback() { fp_glEndTransformFeedback(); }
+inline void glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) { fp_glBindBufferRange(target, index, buffer, offset, size); }
+inline void glBindBufferBase(GLenum target, GLuint index, GLuint buffer) { fp_glBindBufferBase(target, index, buffer); }
+inline void glTransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar** varyings, GLenum bufferMode) { fp_glTransformFeedbackVaryings(program, count, varyings, bufferMode); }
+inline void glGetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name) { fp_glGetTransformFeedbackVarying(program, index, bufSize, length, size, type, name); }
+inline void glClampColor(GLenum target, GLenum clamp) { fp_glClampColor(target, clamp); }
+inline void glBeginConditionalRender(GLuint id, GLenum mode) { fp_glBeginConditionalRender(id, mode); }
+inline void glEndConditionalRender() { fp_glEndConditionalRender(); }
+inline void glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer) { fp_glVertexAttribIPointer(index, size, type, stride, pointer); }
+inline void glGetVertexAttribIiv(GLuint index, GLenum pname, GLint* params) { fp_glGetVertexAttribIiv(index, pname, params); }
+inline void glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params) { fp_glGetVertexAttribIuiv(index, pname, params); }
+inline void glVertexAttribI1i(GLuint index, GLint x) { fp_glVertexAttribI1i(index, x); }
+inline void glVertexAttribI2i(GLuint index, GLint x, GLint y) { fp_glVertexAttribI2i(index, x, y); }
+inline void glVertexAttribI3i(GLuint index, GLint x, GLint y, GLint z) { fp_glVertexAttribI3i(index, x, y, z); }
+inline void glVertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w) { fp_glVertexAttribI4i(index, x, y, z, w); }
+inline void glVertexAttribI1ui(GLuint index, GLuint x) { fp_glVertexAttribI1ui(index, x); }
+inline void glVertexAttribI2ui(GLuint index, GLuint x, GLuint y) { fp_glVertexAttribI2ui(index, x, y); }
+inline void glVertexAttribI3ui(GLuint index, GLuint x, GLuint y, GLuint z) { fp_glVertexAttribI3ui(index, x, y, z); }
+inline void glVertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) { fp_glVertexAttribI4ui(index, x, y, z, w); }
+inline void glVertexAttribI1iv(GLuint index, const GLint* v) { fp_glVertexAttribI1iv(index, v); }
+inline void glVertexAttribI2iv(GLuint index, const GLint* v) { fp_glVertexAttribI2iv(index, v); }
+inline void glVertexAttribI3iv(GLuint index, const GLint* v) { fp_glVertexAttribI3iv(index, v); }
+inline void glVertexAttribI4iv(GLuint index, const GLint* v) { fp_glVertexAttribI4iv(index, v); }
+inline void glVertexAttribI1uiv(GLuint index, const GLuint* v) { fp_glVertexAttribI1uiv(index, v); }
+inline void glVertexAttribI2uiv(GLuint index, const GLuint* v) { fp_glVertexAttribI2uiv(index, v); }
+inline void glVertexAttribI3uiv(GLuint index, const GLuint* v) { fp_glVertexAttribI3uiv(index, v); }
+inline void glVertexAttribI4uiv(GLuint index, const GLuint* v) { fp_glVertexAttribI4uiv(index, v); }
+inline void glVertexAttribI4bv(GLuint index, const GLbyte* v) { fp_glVertexAttribI4bv(index, v); }
+inline void glVertexAttribI4sv(GLuint index, const GLshort* v) { fp_glVertexAttribI4sv(index, v); }
+inline void glVertexAttribI4ubv(GLuint index, const GLubyte* v) { fp_glVertexAttribI4ubv(index, v); }
+inline void glVertexAttribI4usv(GLuint index, const GLushort* v) { fp_glVertexAttribI4usv(index, v); }
+inline void glGetUniformuiv(GLuint program, GLint location, GLuint* params) { fp_glGetUniformuiv(program, location, params); }
+inline void glBindFragDataLocation(GLuint program, GLuint color, const GLchar* name) { fp_glBindFragDataLocation(program, color, name); }
+inline GLint glGetFragDataLocation(GLuint program, const GLchar* name) { return fp_glGetFragDataLocation(program, name); }
+inline void glUniform1ui(GLint location, GLuint v0) { fp_glUniform1ui(location, v0); }
+inline void glUniform2ui(GLint location, GLuint v0, GLuint v1) { fp_glUniform2ui(location, v0, v1); }
+inline void glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2) { fp_glUniform3ui(location, v0, v1, v2); }
+inline void glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) { fp_glUniform4ui(location, v0, v1, v2, v3); }
+inline void glUniform1uiv(GLint location, GLsizei count, const GLuint* value) { fp_glUniform1uiv(location, count, value); }
+inline void glUniform2uiv(GLint location, GLsizei count, const GLuint* value) { fp_glUniform2uiv(location, count, value); }
+inline void glUniform3uiv(GLint location, GLsizei count, const GLuint* value) { fp_glUniform3uiv(location, count, value); }
+inline void glUniform4uiv(GLint location, GLsizei count, const GLuint* value) { fp_glUniform4uiv(location, count, value); }
+inline void glTexParameterIiv(GLenum target, GLenum pname, const GLint* params) { fp_glTexParameterIiv(target, pname, params); }
+inline void glTexParameterIuiv(GLenum target, GLenum pname, const GLuint* params) { fp_glTexParameterIuiv(target, pname, params); }
+inline void glGetTexParameterIiv(GLenum target, GLenum pname, GLint* params) { fp_glGetTexParameterIiv(target, pname, params); }
+inline void glGetTexParameterIuiv(GLenum target, GLenum pname, GLuint* params) { fp_glGetTexParameterIuiv(target, pname, params); }
+inline void glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint* value) { fp_glClearBufferiv(buffer, drawbuffer, value); }
+inline void glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint* value) { fp_glClearBufferuiv(buffer, drawbuffer, value); }
+inline void glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat* value) { fp_glClearBufferfv(buffer, drawbuffer, value); }
+inline void glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) { fp_glClearBufferfi(buffer, drawbuffer, depth, stencil); }
+inline const GLubyte* glGetStringi(GLenum name, GLuint index) { return fp_glGetStringi(name, index); }
+inline GLboolean glIsRenderbuffer(GLuint renderbuffer) { return fp_glIsRenderbuffer(renderbuffer); }
+inline void glBindRenderbuffer(GLenum target, GLuint renderbuffer) { fp_glBindRenderbuffer(target, renderbuffer); }
+inline void glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers) { fp_glDeleteRenderbuffers(n, renderbuffers); }
+inline void glGenRenderbuffers(GLsizei n, GLuint* renderbuffers) { fp_glGenRenderbuffers(n, renderbuffers); }
+inline void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) { fp_glRenderbufferStorage(target, internalformat, width, height); }
+inline void glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params) { fp_glGetRenderbufferParameteriv(target, pname, params); }
+inline GLboolean glIsFramebuffer(GLuint framebuffer) { return fp_glIsFramebuffer(framebuffer); }
+inline void glBindFramebuffer(GLenum target, GLuint framebuffer) { fp_glBindFramebuffer(target, framebuffer); }
+inline void glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers) { fp_glDeleteFramebuffers(n, framebuffers); }
+inline void glGenFramebuffers(GLsizei n, GLuint* framebuffers) { fp_glGenFramebuffers(n, framebuffers); }
+inline GLenum glCheckFramebufferStatus(GLenum target) { return fp_glCheckFramebufferStatus(target); }
+inline void glFramebufferTexture1D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) { fp_glFramebufferTexture1D(target, attachment, textarget, texture, level); }
+inline void glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) { fp_glFramebufferTexture2D(target, attachment, textarget, texture, level); }
+inline void glFramebufferTexture3D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) { fp_glFramebufferTexture3D(target, attachment, textarget, texture, level, zoffset); }
+inline void glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) { fp_glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); }
+inline void glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params) { fp_glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); }
+inline void glGenerateMipmap(GLenum target) { fp_glGenerateMipmap(target); }
+inline void glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) { fp_glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); }
+inline void glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) { fp_glRenderbufferStorageMultisample(target, samples, internalformat, width, height); }
+inline void glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) { fp_glFramebufferTextureLayer(target, attachment, texture, level, layer); }
+inline void* glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) { return fp_glMapBufferRange(target, offset, length, access); }
+inline void glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length) { fp_glFlushMappedBufferRange(target, offset, length); }
+inline void glBindVertexArray(GLuint array) { fp_glBindVertexArray(array); }
+inline void glDeleteVertexArrays(GLsizei n, const GLuint* arrays) { fp_glDeleteVertexArrays(n, arrays); }
+inline void glGenVertexArrays(GLsizei n, GLuint* arrays) { fp_glGenVertexArrays(n, arrays); }
+inline GLboolean glIsVertexArray(GLuint array) { return fp_glIsVertexArray(array); }
+
+/* GL_VERSION_3_1 */
+inline void glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount) { fp_glDrawArraysInstanced(mode, first, count, instancecount); }
+inline void glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei instancecount) { fp_glDrawElementsInstanced(mode, count, type, indices, instancecount); }
+inline void glTexBuffer(GLenum target, GLenum internalformat, GLuint buffer) { fp_glTexBuffer(target, internalformat, buffer); }
+inline void glPrimitiveRestartIndex(GLuint index) { fp_glPrimitiveRestartIndex(index); }
+inline void glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) { fp_glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); }
+inline void glGetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar** uniformNames, GLuint* uniformIndices) { fp_glGetUniformIndices(program, uniformCount, uniformNames, uniformIndices); }
+inline void glGetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) { fp_glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params); }
+inline void glGetActiveUniformName(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName) { fp_glGetActiveUniformName(program, uniformIndex, bufSize, length, uniformName); }
+inline GLuint glGetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName) { return fp_glGetUniformBlockIndex(program, uniformBlockName); }
+inline void glGetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) { fp_glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params); }
+inline void glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) { fp_glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName); }
+inline void glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding) { fp_glUniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding); }
+
+/* GL_VERSION_3_2 */
+inline void glDrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, const void* indices, GLint basevertex) { fp_glDrawElementsBaseVertex(mode, count, type, indices, basevertex); }
+inline void glDrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void* indices, GLint basevertex) { fp_glDrawRangeElementsBaseVertex(mode, start, end, count, type, indices, basevertex); }
+inline void glDrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei instancecount, GLint basevertex) { fp_glDrawElementsInstancedBaseVertex(mode, count, type, indices, instancecount, basevertex); }
+inline void glMultiDrawElementsBaseVertex(GLenum mode, const GLsizei* count, GLenum type, const void** indices, GLsizei drawcount, const GLint* basevertex) { fp_glMultiDrawElementsBaseVertex(mode, count, type, indices, drawcount, basevertex); }
+inline void glProvokingVertex(GLenum mode) { fp_glProvokingVertex(mode); }
+inline GLsync glFenceSync(GLenum condition, GLbitfield flags) { return fp_glFenceSync(condition, flags); }
+inline GLboolean glIsSync(GLsync sync) { return fp_glIsSync(sync); }
+inline void glDeleteSync(GLsync sync) { fp_glDeleteSync(sync); }
+inline GLenum glClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) { return fp_glClientWaitSync(sync, flags, timeout); }
+inline void glWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) { fp_glWaitSync(sync, flags, timeout); }
+inline void glGetInteger64v(GLenum pname, GLint64* data) { fp_glGetInteger64v(pname, data); }
+inline void glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) { fp_glGetSynciv(sync, pname, bufSize, length, values); }
+inline void glGetInteger64i_v(GLenum target, GLuint index, GLint64* data) { fp_glGetInteger64i_v(target, index, data); }
+inline void glGetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params) { fp_glGetBufferParameteri64v(target, pname, params); }
+inline void glFramebufferTexture(GLenum target, GLenum attachment, GLuint texture, GLint level) { fp_glFramebufferTexture(target, attachment, texture, level); }
+inline void glTexImage2DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) { fp_glTexImage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations); }
+inline void glTexImage3DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) { fp_glTexImage3DMultisample(target, samples, internalformat, width, height, depth, fixedsamplelocations); }
+inline void glGetMultisamplefv(GLenum pname, GLuint index, GLfloat* val) { fp_glGetMultisamplefv(pname, index, val); }
+inline void glSampleMaski(GLuint maskNumber, GLbitfield mask) { fp_glSampleMaski(maskNumber, mask); }
+
+/* GL_VERSION_3_3 */
+inline void glBindFragDataLocationIndexed(GLuint program, GLuint colorNumber, GLuint index, const GLchar* name) { fp_glBindFragDataLocationIndexed(program, colorNumber, index, name); }
+inline GLint glGetFragDataIndex(GLuint program, const GLchar* name) { return fp_glGetFragDataIndex(program, name); }
+inline void glGenSamplers(GLsizei count, GLuint* samplers) { fp_glGenSamplers(count, samplers); }
+inline void glDeleteSamplers(GLsizei count, const GLuint* samplers) { fp_glDeleteSamplers(count, samplers); }
+inline GLboolean glIsSampler(GLuint sampler) { return fp_glIsSampler(sampler); }
+inline void glBindSampler(GLuint unit, GLuint sampler) { fp_glBindSampler(unit, sampler); }
+inline void glSamplerParameteri(GLuint sampler, GLenum pname, GLint param) { fp_glSamplerParameteri(sampler, pname, param); }
+inline void glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param) { fp_glSamplerParameteriv(sampler, pname, param); }
+inline void glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param) { fp_glSamplerParameterf(sampler, pname, param); }
+inline void glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param) { fp_glSamplerParameterfv(sampler, pname, param); }
+inline void glSamplerParameterIiv(GLuint sampler, GLenum pname, const GLint* param) { fp_glSamplerParameterIiv(sampler, pname, param); }
+inline void glSamplerParameterIuiv(GLuint sampler, GLenum pname, const GLuint* param) { fp_glSamplerParameterIuiv(sampler, pname, param); }
+inline void glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params) { fp_glGetSamplerParameteriv(sampler, pname, params); }
+inline void glGetSamplerParameterIiv(GLuint sampler, GLenum pname, GLint* params) { fp_glGetSamplerParameterIiv(sampler, pname, params); }
+inline void glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params) { fp_glGetSamplerParameterfv(sampler, pname, params); }
+inline void glGetSamplerParameterIuiv(GLuint sampler, GLenum pname, GLuint* params) { fp_glGetSamplerParameterIuiv(sampler, pname, params); }
+inline void glQueryCounter(GLuint id, GLenum target) { fp_glQueryCounter(id, target); }
+inline void glGetQueryObjecti64v(GLuint id, GLenum pname, GLint64* params) { fp_glGetQueryObjecti64v(id, pname, params); }
+inline void glGetQueryObjectui64v(GLuint id, GLenum pname, GLuint64* params) { fp_glGetQueryObjectui64v(id, pname, params); }
+inline void glVertexAttribDivisor(GLuint index, GLuint divisor) { fp_glVertexAttribDivisor(index, divisor); }
+inline void glVertexAttribP1ui(GLuint index, GLenum type, GLboolean normalized, GLuint value) { fp_glVertexAttribP1ui(index, type, normalized, value); }
+inline void glVertexAttribP1uiv(GLuint index, GLenum type, GLboolean normalized, const GLuint* value) { fp_glVertexAttribP1uiv(index, type, normalized, value); }
+inline void glVertexAttribP2ui(GLuint index, GLenum type, GLboolean normalized, GLuint value) { fp_glVertexAttribP2ui(index, type, normalized, value); }
+inline void glVertexAttribP2uiv(GLuint index, GLenum type, GLboolean normalized, const GLuint* value) { fp_glVertexAttribP2uiv(index, type, normalized, value); }
+inline void glVertexAttribP3ui(GLuint index, GLenum type, GLboolean normalized, GLuint value) { fp_glVertexAttribP3ui(index, type, normalized, value); }
+inline void glVertexAttribP3uiv(GLuint index, GLenum type, GLboolean normalized, const GLuint* value) { fp_glVertexAttribP3uiv(index, type, normalized, value); }
+inline void glVertexAttribP4ui(GLuint index, GLenum type, GLboolean normalized, GLuint value) { fp_glVertexAttribP4ui(index, type, normalized, value); }
+inline void glVertexAttribP4uiv(GLuint index, GLenum type, GLboolean normalized, const GLuint* value) { fp_glVertexAttribP4uiv(index, type, normalized, value); }
+inline void glVertexP2ui(GLenum type, GLuint value) { fp_glVertexP2ui(type, value); }
+inline void glVertexP2uiv(GLenum type, const GLuint* value) { fp_glVertexP2uiv(type, value); }
+inline void glVertexP3ui(GLenum type, GLuint value) { fp_glVertexP3ui(type, value); }
+inline void glVertexP3uiv(GLenum type, const GLuint* value) { fp_glVertexP3uiv(type, value); }
+inline void glVertexP4ui(GLenum type, GLuint value) { fp_glVertexP4ui(type, value); }
+inline void glVertexP4uiv(GLenum type, const GLuint* value) { fp_glVertexP4uiv(type, value); }
+inline void glTexCoordP1ui(GLenum type, GLuint coords) { fp_glTexCoordP1ui(type, coords); }
+inline void glTexCoordP1uiv(GLenum type, const GLuint* coords) { fp_glTexCoordP1uiv(type, coords); }
+inline void glTexCoordP2ui(GLenum type, GLuint coords) { fp_glTexCoordP2ui(type, coords); }
+inline void glTexCoordP2uiv(GLenum type, const GLuint* coords) { fp_glTexCoordP2uiv(type, coords); }
+inline void glTexCoordP3ui(GLenum type, GLuint coords) { fp_glTexCoordP3ui(type, coords); }
+inline void glTexCoordP3uiv(GLenum type, const GLuint* coords) { fp_glTexCoordP3uiv(type, coords); }
+inline void glTexCoordP4ui(GLenum type, GLuint coords) { fp_glTexCoordP4ui(type, coords); }
+inline void glTexCoordP4uiv(GLenum type, const GLuint* coords) { fp_glTexCoordP4uiv(type, coords); }
+inline void glMultiTexCoordP1ui(GLenum texture, GLenum type, GLuint coords) { fp_glMultiTexCoordP1ui(texture, type, coords); }
+inline void glMultiTexCoordP1uiv(GLenum texture, GLenum type, const GLuint* coords) { fp_glMultiTexCoordP1uiv(texture, type, coords); }
+inline void glMultiTexCoordP2ui(GLenum texture, GLenum type, GLuint coords) { fp_glMultiTexCoordP2ui(texture, type, coords); }
+inline void glMultiTexCoordP2uiv(GLenum texture, GLenum type, const GLuint* coords) { fp_glMultiTexCoordP2uiv(texture, type, coords); }
+inline void glMultiTexCoordP3ui(GLenum texture, GLenum type, GLuint coords) { fp_glMultiTexCoordP3ui(texture, type, coords); }
+inline void glMultiTexCoordP3uiv(GLenum texture, GLenum type, const GLuint* coords) { fp_glMultiTexCoordP3uiv(texture, type, coords); }
+inline void glMultiTexCoordP4ui(GLenum texture, GLenum type, GLuint coords) { fp_glMultiTexCoordP4ui(texture, type, coords); }
+inline void glMultiTexCoordP4uiv(GLenum texture, GLenum type, const GLuint* coords) { fp_glMultiTexCoordP4uiv(texture, type, coords); }
+inline void glNormalP3ui(GLenum type, GLuint coords) { fp_glNormalP3ui(type, coords); }
+inline void glNormalP3uiv(GLenum type, const GLuint* coords) { fp_glNormalP3uiv(type, coords); }
+inline void glColorP3ui(GLenum type, GLuint color) { fp_glColorP3ui(type, color); }
+inline void glColorP3uiv(GLenum type, const GLuint* color) { fp_glColorP3uiv(type, color); }
+inline void glColorP4ui(GLenum type, GLuint color) { fp_glColorP4ui(type, color); }
+inline void glColorP4uiv(GLenum type, const GLuint* color) { fp_glColorP4uiv(type, color); }
+inline void glSecondaryColorP3ui(GLenum type, GLuint color) { fp_glSecondaryColorP3ui(type, color); }
+inline void glSecondaryColorP3uiv(GLenum type, const GLuint* color) { fp_glSecondaryColorP3uiv(type, color); }
+
+/* GL_VERSION_4_0 */
+inline void glMinSampleShading(GLfloat value) { fp_glMinSampleShading(value); }
+inline void glBlendEquationi(GLuint buf, GLenum mode) { fp_glBlendEquationi(buf, mode); }
+inline void glBlendEquationSeparatei(GLuint buf, GLenum modeRGB, GLenum modeAlpha) { fp_glBlendEquationSeparatei(buf, modeRGB, modeAlpha); }
+inline void glBlendFunci(GLuint buf, GLenum src, GLenum dst) { fp_glBlendFunci(buf, src, dst); }
+inline void glBlendFuncSeparatei(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) { fp_glBlendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha); }
+inline void glDrawArraysIndirect(GLenum mode, const void* indirect) { fp_glDrawArraysIndirect(mode, indirect); }
+inline void glDrawElementsIndirect(GLenum mode, GLenum type, const void* indirect) { fp_glDrawElementsIndirect(mode, type, indirect); }
+inline void glUniform1d(GLint location, GLdouble x) { fp_glUniform1d(location, x); }
+inline void glUniform2d(GLint location, GLdouble x, GLdouble y) { fp_glUniform2d(location, x, y); }
+inline void glUniform3d(GLint location, GLdouble x, GLdouble y, GLdouble z) { fp_glUniform3d(location, x, y, z); }
+inline void glUniform4d(GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w) { fp_glUniform4d(location, x, y, z, w); }
+inline void glUniform1dv(GLint location, GLsizei count, const GLdouble* value) { fp_glUniform1dv(location, count, value); }
+inline void glUniform2dv(GLint location, GLsizei count, const GLdouble* value) { fp_glUniform2dv(location, count, value); }
+inline void glUniform3dv(GLint location, GLsizei count, const GLdouble* value) { fp_glUniform3dv(location, count, value); }
+inline void glUniform4dv(GLint location, GLsizei count, const GLdouble* value) { fp_glUniform4dv(location, count, value); }
+inline void glUniformMatrix2dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glUniformMatrix2dv(location, count, transpose, value); }
+inline void glUniformMatrix3dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glUniformMatrix3dv(location, count, transpose, value); }
+inline void glUniformMatrix4dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glUniformMatrix4dv(location, count, transpose, value); }
+inline void glUniformMatrix2x3dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glUniformMatrix2x3dv(location, count, transpose, value); }
+inline void glUniformMatrix2x4dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glUniformMatrix2x4dv(location, count, transpose, value); }
+inline void glUniformMatrix3x2dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glUniformMatrix3x2dv(location, count, transpose, value); }
+inline void glUniformMatrix3x4dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glUniformMatrix3x4dv(location, count, transpose, value); }
+inline void glUniformMatrix4x2dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glUniformMatrix4x2dv(location, count, transpose, value); }
+inline void glUniformMatrix4x3dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glUniformMatrix4x3dv(location, count, transpose, value); }
+inline void glGetUniformdv(GLuint program, GLint location, GLdouble* params) { fp_glGetUniformdv(program, location, params); }
+inline GLint glGetSubroutineUniformLocation(GLuint program, GLenum shadertype, const GLchar* name) { return fp_glGetSubroutineUniformLocation(program, shadertype, name); }
+inline GLuint glGetSubroutineIndex(GLuint program, GLenum shadertype, const GLchar* name) { return fp_glGetSubroutineIndex(program, shadertype, name); }
+inline void glGetActiveSubroutineUniformiv(GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values) { fp_glGetActiveSubroutineUniformiv(program, shadertype, index, pname, values); }
+inline void glGetActiveSubroutineUniformName(GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei* length, GLchar* name) { fp_glGetActiveSubroutineUniformName(program, shadertype, index, bufsize, length, name); }
+inline void glGetActiveSubroutineName(GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei* length, GLchar* name) { fp_glGetActiveSubroutineName(program, shadertype, index, bufsize, length, name); }
+inline void glUniformSubroutinesuiv(GLenum shadertype, GLsizei count, const GLuint* indices) { fp_glUniformSubroutinesuiv(shadertype, count, indices); }
+inline void glGetUniformSubroutineuiv(GLenum shadertype, GLint location, GLuint* params) { fp_glGetUniformSubroutineuiv(shadertype, location, params); }
+inline void glGetProgramStageiv(GLuint program, GLenum shadertype, GLenum pname, GLint* values) { fp_glGetProgramStageiv(program, shadertype, pname, values); }
+inline void glPatchParameteri(GLenum pname, GLint value) { fp_glPatchParameteri(pname, value); }
+inline void glPatchParameterfv(GLenum pname, const GLfloat* values) { fp_glPatchParameterfv(pname, values); }
+inline void glBindTransformFeedback(GLenum target, GLuint id) { fp_glBindTransformFeedback(target, id); }
+inline void glDeleteTransformFeedbacks(GLsizei n, const GLuint* ids) { fp_glDeleteTransformFeedbacks(n, ids); }
+inline void glGenTransformFeedbacks(GLsizei n, GLuint* ids) { fp_glGenTransformFeedbacks(n, ids); }
+inline GLboolean glIsTransformFeedback(GLuint id) { return fp_glIsTransformFeedback(id); }
+inline void glPauseTransformFeedback() { fp_glPauseTransformFeedback(); }
+inline void glResumeTransformFeedback() { fp_glResumeTransformFeedback(); }
+inline void glDrawTransformFeedback(GLenum mode, GLuint id) { fp_glDrawTransformFeedback(mode, id); }
+inline void glDrawTransformFeedbackStream(GLenum mode, GLuint id, GLuint stream) { fp_glDrawTransformFeedbackStream(mode, id, stream); }
+inline void glBeginQueryIndexed(GLenum target, GLuint index, GLuint id) { fp_glBeginQueryIndexed(target, index, id); }
+inline void glEndQueryIndexed(GLenum target, GLuint index) { fp_glEndQueryIndexed(target, index); }
+inline void glGetQueryIndexediv(GLenum target, GLuint index, GLenum pname, GLint* params) { fp_glGetQueryIndexediv(target, index, pname, params); }
+
+/* GL_VERSION_4_1 */
+inline void glReleaseShaderCompiler() { fp_glReleaseShaderCompiler(); }
+inline void glShaderBinary(GLsizei count, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length) { fp_glShaderBinary(count, shaders, binaryformat, binary, length); }
+inline void glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) { fp_glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision); }
+inline void glDepthRangef(GLfloat n, GLfloat f) { fp_glDepthRangef(n, f); }
+inline void glClearDepthf(GLfloat d) { fp_glClearDepthf(d); }
+inline void glGetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, void* binary) { fp_glGetProgramBinary(program, bufSize, length, binaryFormat, binary); }
+inline void glProgramBinary(GLuint program, GLenum binaryFormat, const void* binary, GLsizei length) { fp_glProgramBinary(program, binaryFormat, binary, length); }
+inline void glProgramParameteri(GLuint program, GLenum pname, GLint value) { fp_glProgramParameteri(program, pname, value); }
+inline void glUseProgramStages(GLuint pipeline, GLbitfield stages, GLuint program) { fp_glUseProgramStages(pipeline, stages, program); }
+inline void glActiveShaderProgram(GLuint pipeline, GLuint program) { fp_glActiveShaderProgram(pipeline, program); }
+inline GLuint glCreateShaderProgramv(GLenum type, GLsizei count, const GLchar** strings) { return fp_glCreateShaderProgramv(type, count, strings); }
+inline void glBindProgramPipeline(GLuint pipeline) { fp_glBindProgramPipeline(pipeline); }
+inline void glDeleteProgramPipelines(GLsizei n, const GLuint* pipelines) { fp_glDeleteProgramPipelines(n, pipelines); }
+inline void glGenProgramPipelines(GLsizei n, GLuint* pipelines) { fp_glGenProgramPipelines(n, pipelines); }
+inline GLboolean glIsProgramPipeline(GLuint pipeline) { return fp_glIsProgramPipeline(pipeline); }
+inline void glGetProgramPipelineiv(GLuint pipeline, GLenum pname, GLint* params) { fp_glGetProgramPipelineiv(pipeline, pname, params); }
+inline void glProgramUniform1i(GLuint program, GLint location, GLint v0) { fp_glProgramUniform1i(program, location, v0); }
+inline void glProgramUniform1iv(GLuint program, GLint location, GLsizei count, const GLint* value) { fp_glProgramUniform1iv(program, location, count, value); }
+inline void glProgramUniform1f(GLuint program, GLint location, GLfloat v0) { fp_glProgramUniform1f(program, location, v0); }
+inline void glProgramUniform1fv(GLuint program, GLint location, GLsizei count, const GLfloat* value) { fp_glProgramUniform1fv(program, location, count, value); }
+inline void glProgramUniform1d(GLuint program, GLint location, GLdouble v0) { fp_glProgramUniform1d(program, location, v0); }
+inline void glProgramUniform1dv(GLuint program, GLint location, GLsizei count, const GLdouble* value) { fp_glProgramUniform1dv(program, location, count, value); }
+inline void glProgramUniform1ui(GLuint program, GLint location, GLuint v0) { fp_glProgramUniform1ui(program, location, v0); }
+inline void glProgramUniform1uiv(GLuint program, GLint location, GLsizei count, const GLuint* value) { fp_glProgramUniform1uiv(program, location, count, value); }
+inline void glProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1) { fp_glProgramUniform2i(program, location, v0, v1); }
+inline void glProgramUniform2iv(GLuint program, GLint location, GLsizei count, const GLint* value) { fp_glProgramUniform2iv(program, location, count, value); }
+inline void glProgramUniform2f(GLuint program, GLint location, GLfloat v0, GLfloat v1) { fp_glProgramUniform2f(program, location, v0, v1); }
+inline void glProgramUniform2fv(GLuint program, GLint location, GLsizei count, const GLfloat* value) { fp_glProgramUniform2fv(program, location, count, value); }
+inline void glProgramUniform2d(GLuint program, GLint location, GLdouble v0, GLdouble v1) { fp_glProgramUniform2d(program, location, v0, v1); }
+inline void glProgramUniform2dv(GLuint program, GLint location, GLsizei count, const GLdouble* value) { fp_glProgramUniform2dv(program, location, count, value); }
+inline void glProgramUniform2ui(GLuint program, GLint location, GLuint v0, GLuint v1) { fp_glProgramUniform2ui(program, location, v0, v1); }
+inline void glProgramUniform2uiv(GLuint program, GLint location, GLsizei count, const GLuint* value) { fp_glProgramUniform2uiv(program, location, count, value); }
+inline void glProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2) { fp_glProgramUniform3i(program, location, v0, v1, v2); }
+inline void glProgramUniform3iv(GLuint program, GLint location, GLsizei count, const GLint* value) { fp_glProgramUniform3iv(program, location, count, value); }
+inline void glProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) { fp_glProgramUniform3f(program, location, v0, v1, v2); }
+inline void glProgramUniform3fv(GLuint program, GLint location, GLsizei count, const GLfloat* value) { fp_glProgramUniform3fv(program, location, count, value); }
+inline void glProgramUniform3d(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2) { fp_glProgramUniform3d(program, location, v0, v1, v2); }
+inline void glProgramUniform3dv(GLuint program, GLint location, GLsizei count, const GLdouble* value) { fp_glProgramUniform3dv(program, location, count, value); }
+inline void glProgramUniform3ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2) { fp_glProgramUniform3ui(program, location, v0, v1, v2); }
+inline void glProgramUniform3uiv(GLuint program, GLint location, GLsizei count, const GLuint* value) { fp_glProgramUniform3uiv(program, location, count, value); }
+inline void glProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) { fp_glProgramUniform4i(program, location, v0, v1, v2, v3); }
+inline void glProgramUniform4iv(GLuint program, GLint location, GLsizei count, const GLint* value) { fp_glProgramUniform4iv(program, location, count, value); }
+inline void glProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) { fp_glProgramUniform4f(program, location, v0, v1, v2, v3); }
+inline void glProgramUniform4fv(GLuint program, GLint location, GLsizei count, const GLfloat* value) { fp_glProgramUniform4fv(program, location, count, value); }
+inline void glProgramUniform4d(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3) { fp_glProgramUniform4d(program, location, v0, v1, v2, v3); }
+inline void glProgramUniform4dv(GLuint program, GLint location, GLsizei count, const GLdouble* value) { fp_glProgramUniform4dv(program, location, count, value); }
+inline void glProgramUniform4ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) { fp_glProgramUniform4ui(program, location, v0, v1, v2, v3); }
+inline void glProgramUniform4uiv(GLuint program, GLint location, GLsizei count, const GLuint* value) { fp_glProgramUniform4uiv(program, location, count, value); }
+inline void glProgramUniformMatrix2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glProgramUniformMatrix2fv(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glProgramUniformMatrix3fv(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glProgramUniformMatrix4fv(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix2dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glProgramUniformMatrix2dv(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix3dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glProgramUniformMatrix3dv(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix4dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glProgramUniformMatrix4dv(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix2x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glProgramUniformMatrix2x3fv(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix3x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glProgramUniformMatrix3x2fv(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix2x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glProgramUniformMatrix2x4fv(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix4x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glProgramUniformMatrix4x2fv(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix3x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glProgramUniformMatrix3x4fv(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix4x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glProgramUniformMatrix4x3fv(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix2x3dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glProgramUniformMatrix2x3dv(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix3x2dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glProgramUniformMatrix3x2dv(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix2x4dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glProgramUniformMatrix2x4dv(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix4x2dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glProgramUniformMatrix4x2dv(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix3x4dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glProgramUniformMatrix3x4dv(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix4x3dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glProgramUniformMatrix4x3dv(program, location, count, transpose, value); }
+inline void glValidateProgramPipeline(GLuint pipeline) { fp_glValidateProgramPipeline(pipeline); }
+inline void glGetProgramPipelineInfoLog(GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar* infoLog) { fp_glGetProgramPipelineInfoLog(pipeline, bufSize, length, infoLog); }
+inline void glVertexAttribL1d(GLuint index, GLdouble x) { fp_glVertexAttribL1d(index, x); }
+inline void glVertexAttribL2d(GLuint index, GLdouble x, GLdouble y) { fp_glVertexAttribL2d(index, x, y); }
+inline void glVertexAttribL3d(GLuint index, GLdouble x, GLdouble y, GLdouble z) { fp_glVertexAttribL3d(index, x, y, z); }
+inline void glVertexAttribL4d(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) { fp_glVertexAttribL4d(index, x, y, z, w); }
+inline void glVertexAttribL1dv(GLuint index, const GLdouble* v) { fp_glVertexAttribL1dv(index, v); }
+inline void glVertexAttribL2dv(GLuint index, const GLdouble* v) { fp_glVertexAttribL2dv(index, v); }
+inline void glVertexAttribL3dv(GLuint index, const GLdouble* v) { fp_glVertexAttribL3dv(index, v); }
+inline void glVertexAttribL4dv(GLuint index, const GLdouble* v) { fp_glVertexAttribL4dv(index, v); }
+inline void glVertexAttribLPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer) { fp_glVertexAttribLPointer(index, size, type, stride, pointer); }
+inline void glGetVertexAttribLdv(GLuint index, GLenum pname, GLdouble* params) { fp_glGetVertexAttribLdv(index, pname, params); }
+inline void glViewportArrayv(GLuint first, GLsizei count, const GLfloat* v) { fp_glViewportArrayv(first, count, v); }
+inline void glViewportIndexedf(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h) { fp_glViewportIndexedf(index, x, y, w, h); }
+inline void glViewportIndexedfv(GLuint index, const GLfloat* v) { fp_glViewportIndexedfv(index, v); }
+inline void glScissorArrayv(GLuint first, GLsizei count, const GLint* v) { fp_glScissorArrayv(first, count, v); }
+inline void glScissorIndexed(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height) { fp_glScissorIndexed(index, left, bottom, width, height); }
+inline void glScissorIndexedv(GLuint index, const GLint* v) { fp_glScissorIndexedv(index, v); }
+inline void glDepthRangeArrayv(GLuint first, GLsizei count, const GLdouble* v) { fp_glDepthRangeArrayv(first, count, v); }
+inline void glDepthRangeIndexed(GLuint index, GLdouble n, GLdouble f) { fp_glDepthRangeIndexed(index, n, f); }
+inline void glGetFloati_v(GLenum target, GLuint index, GLfloat* data) { fp_glGetFloati_v(target, index, data); }
+inline void glGetDoublei_v(GLenum target, GLuint index, GLdouble* data) { fp_glGetDoublei_v(target, index, data); }
+
+/* GL_VERSION_4_2 */
+inline void glDrawArraysInstancedBaseInstance(GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance) { fp_glDrawArraysInstancedBaseInstance(mode, first, count, instancecount, baseinstance); }
+inline void glDrawElementsInstancedBaseInstance(GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei instancecount, GLuint baseinstance) { fp_glDrawElementsInstancedBaseInstance(mode, count, type, indices, instancecount, baseinstance); }
+inline void glDrawElementsInstancedBaseVertexBaseInstance(GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance) { fp_glDrawElementsInstancedBaseVertexBaseInstance(mode, count, type, indices, instancecount, basevertex, baseinstance); }
+inline void glGetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params) { fp_glGetInternalformativ(target, internalformat, pname, bufSize, params); }
+inline void glGetActiveAtomicCounterBufferiv(GLuint program, GLuint bufferIndex, GLenum pname, GLint* params) { fp_glGetActiveAtomicCounterBufferiv(program, bufferIndex, pname, params); }
+inline void glBindImageTexture(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format) { fp_glBindImageTexture(unit, texture, level, layered, layer, access, format); }
+inline void glMemoryBarrier(GLbitfield barriers) { fp_glMemoryBarrier(barriers); }
+inline void glTexStorage1D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width) { fp_glTexStorage1D(target, levels, internalformat, width); }
+inline void glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) { fp_glTexStorage2D(target, levels, internalformat, width, height); }
+inline void glTexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) { fp_glTexStorage3D(target, levels, internalformat, width, height, depth); }
+inline void glDrawTransformFeedbackInstanced(GLenum mode, GLuint id, GLsizei instancecount) { fp_glDrawTransformFeedbackInstanced(mode, id, instancecount); }
+inline void glDrawTransformFeedbackStreamInstanced(GLenum mode, GLuint id, GLuint stream, GLsizei instancecount) { fp_glDrawTransformFeedbackStreamInstanced(mode, id, stream, instancecount); }
+
+/* GL_VERSION_4_3 */
+inline void glClearBufferData(GLenum target, GLenum internalformat, GLenum format, GLenum type, const void* data) { fp_glClearBufferData(target, internalformat, format, type, data); }
+inline void glClearBufferSubData(GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void* data) { fp_glClearBufferSubData(target, internalformat, offset, size, format, type, data); }
+inline void glDispatchCompute(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z) { fp_glDispatchCompute(num_groups_x, num_groups_y, num_groups_z); }
+inline void glDispatchComputeIndirect(GLintptr indirect) { fp_glDispatchComputeIndirect(indirect); }
+inline void glCopyImageSubData(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth) { fp_glCopyImageSubData(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth); }
+inline void glFramebufferParameteri(GLenum target, GLenum pname, GLint param) { fp_glFramebufferParameteri(target, pname, param); }
+inline void glGetFramebufferParameteriv(GLenum target, GLenum pname, GLint* params) { fp_glGetFramebufferParameteriv(target, pname, params); }
+inline void glGetInternalformati64v(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64* params) { fp_glGetInternalformati64v(target, internalformat, pname, bufSize, params); }
+inline void glInvalidateTexSubImage(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth) { fp_glInvalidateTexSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth); }
+inline void glInvalidateTexImage(GLuint texture, GLint level) { fp_glInvalidateTexImage(texture, level); }
+inline void glInvalidateBufferSubData(GLuint buffer, GLintptr offset, GLsizeiptr length) { fp_glInvalidateBufferSubData(buffer, offset, length); }
+inline void glInvalidateBufferData(GLuint buffer) { fp_glInvalidateBufferData(buffer); }
+inline void glInvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments) { fp_glInvalidateFramebuffer(target, numAttachments, attachments); }
+inline void glInvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height) { fp_glInvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height); }
+inline void glMultiDrawArraysIndirect(GLenum mode, const void* indirect, GLsizei drawcount, GLsizei stride) { fp_glMultiDrawArraysIndirect(mode, indirect, drawcount, stride); }
+inline void glMultiDrawElementsIndirect(GLenum mode, GLenum type, const void* indirect, GLsizei drawcount, GLsizei stride) { fp_glMultiDrawElementsIndirect(mode, type, indirect, drawcount, stride); }
+inline void glGetProgramInterfaceiv(GLuint program, GLenum programInterface, GLenum pname, GLint* params) { fp_glGetProgramInterfaceiv(program, programInterface, pname, params); }
+inline GLuint glGetProgramResourceIndex(GLuint program, GLenum programInterface, const GLchar* name) { return fp_glGetProgramResourceIndex(program, programInterface, name); }
+inline void glGetProgramResourceName(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei* length, GLchar* name) { fp_glGetProgramResourceName(program, programInterface, index, bufSize, length, name); }
+inline void glGetProgramResourceiv(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum* props, GLsizei bufSize, GLsizei* length, GLint* params) { fp_glGetProgramResourceiv(program, programInterface, index, propCount, props, bufSize, length, params); }
+inline GLint glGetProgramResourceLocation(GLuint program, GLenum programInterface, const GLchar* name) { return fp_glGetProgramResourceLocation(program, programInterface, name); }
+inline GLint glGetProgramResourceLocationIndex(GLuint program, GLenum programInterface, const GLchar* name) { return fp_glGetProgramResourceLocationIndex(program, programInterface, name); }
+inline void glShaderStorageBlockBinding(GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding) { fp_glShaderStorageBlockBinding(program, storageBlockIndex, storageBlockBinding); }
+inline void glTexBufferRange(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size) { fp_glTexBufferRange(target, internalformat, buffer, offset, size); }
+inline void glTexStorage2DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) { fp_glTexStorage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations); }
+inline void glTexStorage3DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) { fp_glTexStorage3DMultisample(target, samples, internalformat, width, height, depth, fixedsamplelocations); }
+inline void glTextureView(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers) { fp_glTextureView(texture, target, origtexture, internalformat, minlevel, numlevels, minlayer, numlayers); }
+inline void glBindVertexBuffer(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride) { fp_glBindVertexBuffer(bindingindex, buffer, offset, stride); }
+inline void glVertexAttribFormat(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset) { fp_glVertexAttribFormat(attribindex, size, type, normalized, relativeoffset); }
+inline void glVertexAttribIFormat(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset) { fp_glVertexAttribIFormat(attribindex, size, type, relativeoffset); }
+inline void glVertexAttribLFormat(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset) { fp_glVertexAttribLFormat(attribindex, size, type, relativeoffset); }
+inline void glVertexAttribBinding(GLuint attribindex, GLuint bindingindex) { fp_glVertexAttribBinding(attribindex, bindingindex); }
+inline void glVertexBindingDivisor(GLuint bindingindex, GLuint divisor) { fp_glVertexBindingDivisor(bindingindex, divisor); }
+inline void glDebugMessageControl(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled) { fp_glDebugMessageControl(source, type, severity, count, ids, enabled); }
+inline void glDebugMessageInsert(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf) { fp_glDebugMessageInsert(source, type, id, severity, length, buf); }
+inline void glDebugMessageCallback(GLDEBUGPROC callback, const void* userParam) { fp_glDebugMessageCallback(callback, userParam); }
+inline GLuint glGetDebugMessageLog(GLuint count, GLsizei bufSize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog) { return fp_glGetDebugMessageLog(count, bufSize, sources, types, ids, severities, lengths, messageLog); }
+inline void glPushDebugGroup(GLenum source, GLuint id, GLsizei length, const GLchar* message) { fp_glPushDebugGroup(source, id, length, message); }
+inline void glPopDebugGroup() { fp_glPopDebugGroup(); }
+inline void glObjectLabel(GLenum identifier, GLuint name, GLsizei length, const GLchar* label) { fp_glObjectLabel(identifier, name, length, label); }
+inline void glGetObjectLabel(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei* length, GLchar* label) { fp_glGetObjectLabel(identifier, name, bufSize, length, label); }
+inline void glObjectPtrLabel(const void* ptr, GLsizei length, const GLchar* label) { fp_glObjectPtrLabel(ptr, length, label); }
+inline void glGetObjectPtrLabel(const void* ptr, GLsizei bufSize, GLsizei* length, GLchar* label) { fp_glGetObjectPtrLabel(ptr, bufSize, length, label); }
+
+/* GL_VERSION_4_4 */
+inline void glBufferStorage(GLenum target, GLsizeiptr size, const void* data, GLbitfield flags) { fp_glBufferStorage(target, size, data, flags); }
+inline void glClearTexImage(GLuint texture, GLint level, GLenum format, GLenum type, const void* data) { fp_glClearTexImage(texture, level, format, type, data); }
+inline void glClearTexSubImage(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* data) { fp_glClearTexSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data); }
+inline void glBindBuffersBase(GLenum target, GLuint first, GLsizei count, const GLuint* buffers) { fp_glBindBuffersBase(target, first, count, buffers); }
+inline void glBindBuffersRange(GLenum target, GLuint first, GLsizei count, const GLuint* buffers, const GLintptr* offsets, const GLsizeiptr* sizes) { fp_glBindBuffersRange(target, first, count, buffers, offsets, sizes); }
+inline void glBindTextures(GLuint first, GLsizei count, const GLuint* textures) { fp_glBindTextures(first, count, textures); }
+inline void glBindSamplers(GLuint first, GLsizei count, const GLuint* samplers) { fp_glBindSamplers(first, count, samplers); }
+inline void glBindImageTextures(GLuint first, GLsizei count, const GLuint* textures) { fp_glBindImageTextures(first, count, textures); }
+inline void glBindVertexBuffers(GLuint first, GLsizei count, const GLuint* buffers, const GLintptr* offsets, const GLsizei* strides) { fp_glBindVertexBuffers(first, count, buffers, offsets, strides); }
+
+/* GL_VERSION_4_5 */
+inline void glClipControl(GLenum origin, GLenum depth) { fp_glClipControl(origin, depth); }
+inline void glCreateTransformFeedbacks(GLsizei n, GLuint* ids) { fp_glCreateTransformFeedbacks(n, ids); }
+inline void glTransformFeedbackBufferBase(GLuint xfb, GLuint index, GLuint buffer) { fp_glTransformFeedbackBufferBase(xfb, index, buffer); }
+inline void glTransformFeedbackBufferRange(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizei size) { fp_glTransformFeedbackBufferRange(xfb, index, buffer, offset, size); }
+inline void glGetTransformFeedbackiv(GLuint xfb, GLenum pname, GLint* param) { fp_glGetTransformFeedbackiv(xfb, pname, param); }
+inline void glGetTransformFeedbacki_v(GLuint xfb, GLenum pname, GLuint index, GLint* param) { fp_glGetTransformFeedbacki_v(xfb, pname, index, param); }
+inline void glGetTransformFeedbacki64_v(GLuint xfb, GLenum pname, GLuint index, GLint64* param) { fp_glGetTransformFeedbacki64_v(xfb, pname, index, param); }
+inline void glCreateBuffers(GLsizei n, GLuint* buffers) { fp_glCreateBuffers(n, buffers); }
+inline void glNamedBufferStorage(GLuint buffer, GLsizei size, const void* data, GLbitfield flags) { fp_glNamedBufferStorage(buffer, size, data, flags); }
+inline void glNamedBufferData(GLuint buffer, GLsizei size, const void* data, GLenum usage) { fp_glNamedBufferData(buffer, size, data, usage); }
+inline void glNamedBufferSubData(GLuint buffer, GLintptr offset, GLsizei size, const void* data) { fp_glNamedBufferSubData(buffer, offset, size, data); }
+inline void glCopyNamedBufferSubData(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizei size) { fp_glCopyNamedBufferSubData(readBuffer, writeBuffer, readOffset, writeOffset, size); }
+inline void glClearNamedBufferData(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void* data) { fp_glClearNamedBufferData(buffer, internalformat, format, type, data); }
+inline void glClearNamedBufferSubData(GLuint buffer, GLenum internalformat, GLintptr offset, GLsizei size, GLenum format, GLenum type, const void* data) { fp_glClearNamedBufferSubData(buffer, internalformat, offset, size, format, type, data); }
+inline void* glMapNamedBuffer(GLuint buffer, GLenum access) { return fp_glMapNamedBuffer(buffer, access); }
+inline void* glMapNamedBufferRange(GLuint buffer, GLintptr offset, GLsizei length, GLbitfield access) { return fp_glMapNamedBufferRange(buffer, offset, length, access); }
+inline GLboolean glUnmapNamedBuffer(GLuint buffer) { return fp_glUnmapNamedBuffer(buffer); }
+inline void glFlushMappedNamedBufferRange(GLuint buffer, GLintptr offset, GLsizei length) { fp_glFlushMappedNamedBufferRange(buffer, offset, length); }
+inline void glGetNamedBufferParameteriv(GLuint buffer, GLenum pname, GLint* params) { fp_glGetNamedBufferParameteriv(buffer, pname, params); }
+inline void glGetNamedBufferParameteri64v(GLuint buffer, GLenum pname, GLint64* params) { fp_glGetNamedBufferParameteri64v(buffer, pname, params); }
+inline void glGetNamedBufferPointerv(GLuint buffer, GLenum pname, void** params) { fp_glGetNamedBufferPointerv(buffer, pname, params); }
+inline void glGetNamedBufferSubData(GLuint buffer, GLintptr offset, GLsizei size, void* data) { fp_glGetNamedBufferSubData(buffer, offset, size, data); }
+inline void glCreateFramebuffers(GLsizei n, GLuint* framebuffers) { fp_glCreateFramebuffers(n, framebuffers); }
+inline void glNamedFramebufferRenderbuffer(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) { fp_glNamedFramebufferRenderbuffer(framebuffer, attachment, renderbuffertarget, renderbuffer); }
+inline void glNamedFramebufferParameteri(GLuint framebuffer, GLenum pname, GLint param) { fp_glNamedFramebufferParameteri(framebuffer, pname, param); }
+inline void glNamedFramebufferTexture(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level) { fp_glNamedFramebufferTexture(framebuffer, attachment, texture, level); }
+inline void glNamedFramebufferTextureLayer(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer) { fp_glNamedFramebufferTextureLayer(framebuffer, attachment, texture, level, layer); }
+inline void glNamedFramebufferDrawBuffer(GLuint framebuffer, GLenum buf) { fp_glNamedFramebufferDrawBuffer(framebuffer, buf); }
+inline void glNamedFramebufferDrawBuffers(GLuint framebuffer, GLsizei n, const GLenum* bufs) { fp_glNamedFramebufferDrawBuffers(framebuffer, n, bufs); }
+inline void glNamedFramebufferReadBuffer(GLuint framebuffer, GLenum src) { fp_glNamedFramebufferReadBuffer(framebuffer, src); }
+inline void glInvalidateNamedFramebufferData(GLuint framebuffer, GLsizei numAttachments, const GLenum* attachments) { fp_glInvalidateNamedFramebufferData(framebuffer, numAttachments, attachments); }
+inline void glInvalidateNamedFramebufferSubData(GLuint framebuffer, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height) { fp_glInvalidateNamedFramebufferSubData(framebuffer, numAttachments, attachments, x, y, width, height); }
+inline void glClearNamedFramebufferiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint* value) { fp_glClearNamedFramebufferiv(framebuffer, buffer, drawbuffer, value); }
+inline void glClearNamedFramebufferuiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint* value) { fp_glClearNamedFramebufferuiv(framebuffer, buffer, drawbuffer, value); }
+inline void glClearNamedFramebufferfv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat* value) { fp_glClearNamedFramebufferfv(framebuffer, buffer, drawbuffer, value); }
+inline void glClearNamedFramebufferfi(GLuint framebuffer, GLenum buffer, const GLfloat depth, GLint stencil) { fp_glClearNamedFramebufferfi(framebuffer, buffer, depth, stencil); }
+inline void glBlitNamedFramebuffer(GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) { fp_glBlitNamedFramebuffer(readFramebuffer, drawFramebuffer, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); }
+inline GLenum glCheckNamedFramebufferStatus(GLuint framebuffer, GLenum target) { return fp_glCheckNamedFramebufferStatus(framebuffer, target); }
+inline void glGetNamedFramebufferParameteriv(GLuint framebuffer, GLenum pname, GLint* param) { fp_glGetNamedFramebufferParameteriv(framebuffer, pname, param); }
+inline void glGetNamedFramebufferAttachmentParameteriv(GLuint framebuffer, GLenum attachment, GLenum pname, GLint* params) { fp_glGetNamedFramebufferAttachmentParameteriv(framebuffer, attachment, pname, params); }
+inline void glCreateRenderbuffers(GLsizei n, GLuint* renderbuffers) { fp_glCreateRenderbuffers(n, renderbuffers); }
+inline void glNamedRenderbufferStorage(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height) { fp_glNamedRenderbufferStorage(renderbuffer, internalformat, width, height); }
+inline void glNamedRenderbufferStorageMultisample(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) { fp_glNamedRenderbufferStorageMultisample(renderbuffer, samples, internalformat, width, height); }
+inline void glGetNamedRenderbufferParameteriv(GLuint renderbuffer, GLenum pname, GLint* params) { fp_glGetNamedRenderbufferParameteriv(renderbuffer, pname, params); }
+inline void glCreateTextures(GLenum target, GLsizei n, GLuint* textures) { fp_glCreateTextures(target, n, textures); }
+inline void glTextureBuffer(GLuint texture, GLenum internalformat, GLuint buffer) { fp_glTextureBuffer(texture, internalformat, buffer); }
+inline void glTextureBufferRange(GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizei size) { fp_glTextureBufferRange(texture, internalformat, buffer, offset, size); }
+inline void glTextureStorage1D(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width) { fp_glTextureStorage1D(texture, levels, internalformat, width); }
+inline void glTextureStorage2D(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) { fp_glTextureStorage2D(texture, levels, internalformat, width, height); }
+inline void glTextureStorage3D(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) { fp_glTextureStorage3D(texture, levels, internalformat, width, height, depth); }
+inline void glTextureStorage2DMultisample(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) { fp_glTextureStorage2DMultisample(texture, samples, internalformat, width, height, fixedsamplelocations); }
+inline void glTextureStorage3DMultisample(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) { fp_glTextureStorage3DMultisample(texture, samples, internalformat, width, height, depth, fixedsamplelocations); }
+inline void glTextureSubImage1D(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void* pixels) { fp_glTextureSubImage1D(texture, level, xoffset, width, format, type, pixels); }
+inline void glTextureSubImage2D(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels) { fp_glTextureSubImage2D(texture, level, xoffset, yoffset, width, height, format, type, pixels); }
+inline void glTextureSubImage3D(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels) { fp_glTextureSubImage3D(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels); }
+inline void glCompressedTextureSubImage1D(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* data) { fp_glCompressedTextureSubImage1D(texture, level, xoffset, width, format, imageSize, data); }
+inline void glCompressedTextureSubImage2D(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data) { fp_glCompressedTextureSubImage2D(texture, level, xoffset, yoffset, width, height, format, imageSize, data); }
+inline void glCompressedTextureSubImage3D(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data) { fp_glCompressedTextureSubImage3D(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); }
+inline void glCopyTextureSubImage1D(GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) { fp_glCopyTextureSubImage1D(texture, level, xoffset, x, y, width); }
+inline void glCopyTextureSubImage2D(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) { fp_glCopyTextureSubImage2D(texture, level, xoffset, yoffset, x, y, width, height); }
+inline void glCopyTextureSubImage3D(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) { fp_glCopyTextureSubImage3D(texture, level, xoffset, yoffset, zoffset, x, y, width, height); }
+inline void glTextureParameterf(GLuint texture, GLenum pname, GLfloat param) { fp_glTextureParameterf(texture, pname, param); }
+inline void glTextureParameterfv(GLuint texture, GLenum pname, const GLfloat* param) { fp_glTextureParameterfv(texture, pname, param); }
+inline void glTextureParameteri(GLuint texture, GLenum pname, GLint param) { fp_glTextureParameteri(texture, pname, param); }
+inline void glTextureParameterIiv(GLuint texture, GLenum pname, const GLint* params) { fp_glTextureParameterIiv(texture, pname, params); }
+inline void glTextureParameterIuiv(GLuint texture, GLenum pname, const GLuint* params) { fp_glTextureParameterIuiv(texture, pname, params); }
+inline void glTextureParameteriv(GLuint texture, GLenum pname, const GLint* param) { fp_glTextureParameteriv(texture, pname, param); }
+inline void glGenerateTextureMipmap(GLuint texture) { fp_glGenerateTextureMipmap(texture); }
+inline void glBindTextureUnit(GLuint unit, GLuint texture) { fp_glBindTextureUnit(unit, texture); }
+inline void glGetTextureImage(GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void* pixels) { fp_glGetTextureImage(texture, level, format, type, bufSize, pixels); }
+inline void glGetCompressedTextureImage(GLuint texture, GLint level, GLsizei bufSize, void* pixels) { fp_glGetCompressedTextureImage(texture, level, bufSize, pixels); }
+inline void glGetTextureLevelParameterfv(GLuint texture, GLint level, GLenum pname, GLfloat* params) { fp_glGetTextureLevelParameterfv(texture, level, pname, params); }
+inline void glGetTextureLevelParameteriv(GLuint texture, GLint level, GLenum pname, GLint* params) { fp_glGetTextureLevelParameteriv(texture, level, pname, params); }
+inline void glGetTextureParameterfv(GLuint texture, GLenum pname, GLfloat* params) { fp_glGetTextureParameterfv(texture, pname, params); }
+inline void glGetTextureParameterIiv(GLuint texture, GLenum pname, GLint* params) { fp_glGetTextureParameterIiv(texture, pname, params); }
+inline void glGetTextureParameterIuiv(GLuint texture, GLenum pname, GLuint* params) { fp_glGetTextureParameterIuiv(texture, pname, params); }
+inline void glGetTextureParameteriv(GLuint texture, GLenum pname, GLint* params) { fp_glGetTextureParameteriv(texture, pname, params); }
+inline void glCreateVertexArrays(GLsizei n, GLuint* arrays) { fp_glCreateVertexArrays(n, arrays); }
+inline void glDisableVertexArrayAttrib(GLuint vaobj, GLuint index) { fp_glDisableVertexArrayAttrib(vaobj, index); }
+inline void glEnableVertexArrayAttrib(GLuint vaobj, GLuint index) { fp_glEnableVertexArrayAttrib(vaobj, index); }
+inline void glVertexArrayElementBuffer(GLuint vaobj, GLuint buffer) { fp_glVertexArrayElementBuffer(vaobj, buffer); }
+inline void glVertexArrayVertexBuffer(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride) { fp_glVertexArrayVertexBuffer(vaobj, bindingindex, buffer, offset, stride); }
+inline void glVertexArrayVertexBuffers(GLuint vaobj, GLuint first, GLsizei count, const GLuint* buffers, const GLintptr* offsets, const GLsizei* strides) { fp_glVertexArrayVertexBuffers(vaobj, first, count, buffers, offsets, strides); }
+inline void glVertexArrayAttribBinding(GLuint vaobj, GLuint attribindex, GLuint bindingindex) { fp_glVertexArrayAttribBinding(vaobj, attribindex, bindingindex); }
+inline void glVertexArrayAttribFormat(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset) { fp_glVertexArrayAttribFormat(vaobj, attribindex, size, type, normalized, relativeoffset); }
+inline void glVertexArrayAttribIFormat(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset) { fp_glVertexArrayAttribIFormat(vaobj, attribindex, size, type, relativeoffset); }
+inline void glVertexArrayAttribLFormat(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset) { fp_glVertexArrayAttribLFormat(vaobj, attribindex, size, type, relativeoffset); }
+inline void glVertexArrayBindingDivisor(GLuint vaobj, GLuint bindingindex, GLuint divisor) { fp_glVertexArrayBindingDivisor(vaobj, bindingindex, divisor); }
+inline void glGetVertexArrayiv(GLuint vaobj, GLenum pname, GLint* param) { fp_glGetVertexArrayiv(vaobj, pname, param); }
+inline void glGetVertexArrayIndexediv(GLuint vaobj, GLuint index, GLenum pname, GLint* param) { fp_glGetVertexArrayIndexediv(vaobj, index, pname, param); }
+inline void glGetVertexArrayIndexed64iv(GLuint vaobj, GLuint index, GLenum pname, GLint64* param) { fp_glGetVertexArrayIndexed64iv(vaobj, index, pname, param); }
+inline void glCreateSamplers(GLsizei n, GLuint* samplers) { fp_glCreateSamplers(n, samplers); }
+inline void glCreateProgramPipelines(GLsizei n, GLuint* pipelines) { fp_glCreateProgramPipelines(n, pipelines); }
+inline void glCreateQueries(GLenum target, GLsizei n, GLuint* ids) { fp_glCreateQueries(target, n, ids); }
+inline void glMemoryBarrierByRegion(GLbitfield barriers) { fp_glMemoryBarrierByRegion(barriers); }
+inline void glGetTextureSubImage(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void* pixels) { fp_glGetTextureSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, bufSize, pixels); }
+inline void glGetCompressedTextureSubImage(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void* pixels) { fp_glGetCompressedTextureSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth, bufSize, pixels); }
+inline GLenum glGetGraphicsResetStatus() { return fp_glGetGraphicsResetStatus(); }
+inline void glGetnCompressedTexImage(GLenum target, GLint lod, GLsizei bufSize, void* pixels) { fp_glGetnCompressedTexImage(target, lod, bufSize, pixels); }
+inline void glGetnTexImage(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void* pixels) { fp_glGetnTexImage(target, level, format, type, bufSize, pixels); }
+inline void glGetnUniformdv(GLuint program, GLint location, GLsizei bufSize, GLdouble* params) { fp_glGetnUniformdv(program, location, bufSize, params); }
+inline void glGetnUniformfv(GLuint program, GLint location, GLsizei bufSize, GLfloat* params) { fp_glGetnUniformfv(program, location, bufSize, params); }
+inline void glGetnUniformiv(GLuint program, GLint location, GLsizei bufSize, GLint* params) { fp_glGetnUniformiv(program, location, bufSize, params); }
+inline void glGetnUniformuiv(GLuint program, GLint location, GLsizei bufSize, GLuint* params) { fp_glGetnUniformuiv(program, location, bufSize, params); }
+inline void glReadnPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void* data) { fp_glReadnPixels(x, y, width, height, format, type, bufSize, data); }
+inline void glGetnMapdv(GLenum target, GLenum query, GLsizei bufSize, GLdouble* v) { fp_glGetnMapdv(target, query, bufSize, v); }
+inline void glGetnMapfv(GLenum target, GLenum query, GLsizei bufSize, GLfloat* v) { fp_glGetnMapfv(target, query, bufSize, v); }
+inline void glGetnMapiv(GLenum target, GLenum query, GLsizei bufSize, GLint* v) { fp_glGetnMapiv(target, query, bufSize, v); }
+inline void glGetnPixelMapfv(GLenum map, GLsizei bufSize, GLfloat* values) { fp_glGetnPixelMapfv(map, bufSize, values); }
+inline void glGetnPixelMapuiv(GLenum map, GLsizei bufSize, GLuint* values) { fp_glGetnPixelMapuiv(map, bufSize, values); }
+inline void glGetnPixelMapusv(GLenum map, GLsizei bufSize, GLushort* values) { fp_glGetnPixelMapusv(map, bufSize, values); }
+inline void glGetnPolygonStipple(GLsizei bufSize, GLubyte* pattern) { fp_glGetnPolygonStipple(bufSize, pattern); }
+inline void glGetnColorTable(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* table) { fp_glGetnColorTable(target, format, type, bufSize, table); }
+inline void glGetnConvolutionFilter(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* image) { fp_glGetnConvolutionFilter(target, format, type, bufSize, image); }
+inline void glGetnSeparableFilter(GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void* row, GLsizei columnBufSize, void* column, void* span) { fp_glGetnSeparableFilter(target, format, type, rowBufSize, row, columnBufSize, column, span); }
+inline void glGetnHistogram(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void* values) { fp_glGetnHistogram(target, reset, format, type, bufSize, values); }
+inline void glGetnMinmax(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void* values) { fp_glGetnMinmax(target, reset, format, type, bufSize, values); }
+inline void glTextureBarrier() { fp_glTextureBarrier(); }
+
+/* GL_KHR_blend_equation_advanced */
+inline void glBlendBarrierKHR() { fp_glBlendBarrierKHR(); }
+
+/* GL_KHR_debug */
+inline void glDebugMessageControlKHR(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled) { fp_glDebugMessageControlKHR(source, type, severity, count, ids, enabled); }
+inline void glDebugMessageInsertKHR(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf) { fp_glDebugMessageInsertKHR(source, type, id, severity, length, buf); }
+inline void glDebugMessageCallbackKHR(GLDEBUGPROCKHR callback, const void* userParam) { fp_glDebugMessageCallbackKHR(callback, userParam); }
+inline GLuint glGetDebugMessageLogKHR(GLuint count, GLsizei bufSize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog) { return fp_glGetDebugMessageLogKHR(count, bufSize, sources, types, ids, severities, lengths, messageLog); }
+inline void glPushDebugGroupKHR(GLenum source, GLuint id, GLsizei length, const GLchar* message) { fp_glPushDebugGroupKHR(source, id, length, message); }
+inline void glPopDebugGroupKHR() { fp_glPopDebugGroupKHR(); }
+inline void glObjectLabelKHR(GLenum identifier, GLuint name, GLsizei length, const GLchar* label) { fp_glObjectLabelKHR(identifier, name, length, label); }
+inline void glGetObjectLabelKHR(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei* length, GLchar* label) { fp_glGetObjectLabelKHR(identifier, name, bufSize, length, label); }
+inline void glObjectPtrLabelKHR(const void* ptr, GLsizei length, const GLchar* label) { fp_glObjectPtrLabelKHR(ptr, length, label); }
+inline void glGetObjectPtrLabelKHR(const void* ptr, GLsizei bufSize, GLsizei* length, GLchar* label) { fp_glGetObjectPtrLabelKHR(ptr, bufSize, length, label); }
+inline void glGetPointervKHR(GLenum pname, void** params) { fp_glGetPointervKHR(pname, params); }
+
+/* GL_KHR_robustness */
+inline GLenum glGetGraphicsResetStatusKHR() { return fp_glGetGraphicsResetStatusKHR(); }
+inline void glReadnPixelsKHR(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void* data) { fp_glReadnPixelsKHR(x, y, width, height, format, type, bufSize, data); }
+inline void glGetnUniformfvKHR(GLuint program, GLint location, GLsizei bufSize, GLfloat* params) { fp_glGetnUniformfvKHR(program, location, bufSize, params); }
+inline void glGetnUniformivKHR(GLuint program, GLint location, GLsizei bufSize, GLint* params) { fp_glGetnUniformivKHR(program, location, bufSize, params); }
+inline void glGetnUniformuivKHR(GLuint program, GLint location, GLsizei bufSize, GLuint* params) { fp_glGetnUniformuivKHR(program, location, bufSize, params); }
+
+/* GL_ARB_bindless_texture */
+inline GLuint64 glGetTextureHandleARB(GLuint texture) { return fp_glGetTextureHandleARB(texture); }
+inline GLuint64 glGetTextureSamplerHandleARB(GLuint texture, GLuint sampler) { return fp_glGetTextureSamplerHandleARB(texture, sampler); }
+inline void glMakeTextureHandleResidentARB(GLuint64 handle) { fp_glMakeTextureHandleResidentARB(handle); }
+inline void glMakeTextureHandleNonResidentARB(GLuint64 handle) { fp_glMakeTextureHandleNonResidentARB(handle); }
+inline GLuint64 glGetImageHandleARB(GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format) { return fp_glGetImageHandleARB(texture, level, layered, layer, format); }
+inline void glMakeImageHandleResidentARB(GLuint64 handle, GLenum access) { fp_glMakeImageHandleResidentARB(handle, access); }
+inline void glMakeImageHandleNonResidentARB(GLuint64 handle) { fp_glMakeImageHandleNonResidentARB(handle); }
+inline void glUniformHandleui64ARB(GLint location, GLuint64 value) { fp_glUniformHandleui64ARB(location, value); }
+inline void glUniformHandleui64vARB(GLint location, GLsizei count, const GLuint64* value) { fp_glUniformHandleui64vARB(location, count, value); }
+inline void glProgramUniformHandleui64ARB(GLuint program, GLint location, GLuint64 value) { fp_glProgramUniformHandleui64ARB(program, location, value); }
+inline void glProgramUniformHandleui64vARB(GLuint program, GLint location, GLsizei count, const GLuint64* values) { fp_glProgramUniformHandleui64vARB(program, location, count, values); }
+inline GLboolean glIsTextureHandleResidentARB(GLuint64 handle) { return fp_glIsTextureHandleResidentARB(handle); }
+inline GLboolean glIsImageHandleResidentARB(GLuint64 handle) { return fp_glIsImageHandleResidentARB(handle); }
+inline void glVertexAttribL1ui64ARB(GLuint index, GLuint64EXT x) { fp_glVertexAttribL1ui64ARB(index, x); }
+inline void glVertexAttribL1ui64vARB(GLuint index, const GLuint64EXT* v) { fp_glVertexAttribL1ui64vARB(index, v); }
+inline void glGetVertexAttribLui64vARB(GLuint index, GLenum pname, GLuint64EXT* params) { fp_glGetVertexAttribLui64vARB(index, pname, params); }
+
+/* GL_ARB_cl_event */
+inline GLsync glCreateSyncFromCLeventARB(struct _cl_context* context, struct _cl_event* event, GLbitfield flags) { return fp_glCreateSyncFromCLeventARB(context, event, flags); }
+
+/* GL_ARB_color_buffer_float */
+inline void glClampColorARB(GLenum target, GLenum clamp) { fp_glClampColorARB(target, clamp); }
+
+/* GL_ARB_compute_variable_group_size */
+inline void glDispatchComputeGroupSizeARB(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z) { fp_glDispatchComputeGroupSizeARB(num_groups_x, num_groups_y, num_groups_z, group_size_x, group_size_y, group_size_z); }
+
+/* GL_ARB_debug_output */
+inline void glDebugMessageControlARB(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled) { fp_glDebugMessageControlARB(source, type, severity, count, ids, enabled); }
+inline void glDebugMessageInsertARB(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf) { fp_glDebugMessageInsertARB(source, type, id, severity, length, buf); }
+inline void glDebugMessageCallbackARB(GLDEBUGPROCARB callback, const void* userParam) { fp_glDebugMessageCallbackARB(callback, userParam); }
+inline GLuint glGetDebugMessageLogARB(GLuint count, GLsizei bufSize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog) { return fp_glGetDebugMessageLogARB(count, bufSize, sources, types, ids, severities, lengths, messageLog); }
+
+/* GL_ARB_draw_buffers_blend */
+inline void glBlendEquationiARB(GLuint buf, GLenum mode) { fp_glBlendEquationiARB(buf, mode); }
+inline void glBlendEquationSeparateiARB(GLuint buf, GLenum modeRGB, GLenum modeAlpha) { fp_glBlendEquationSeparateiARB(buf, modeRGB, modeAlpha); }
+inline void glBlendFunciARB(GLuint buf, GLenum src, GLenum dst) { fp_glBlendFunciARB(buf, src, dst); }
+inline void glBlendFuncSeparateiARB(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) { fp_glBlendFuncSeparateiARB(buf, srcRGB, dstRGB, srcAlpha, dstAlpha); }
+
+/* GL_ARB_draw_instanced */
+inline void glDrawArraysInstancedARB(GLenum mode, GLint first, GLsizei count, GLsizei primcount) { fp_glDrawArraysInstancedARB(mode, first, count, primcount); }
+inline void glDrawElementsInstancedARB(GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount) { fp_glDrawElementsInstancedARB(mode, count, type, indices, primcount); }
+
+/* GL_ARB_geometry_shader4 */
+inline void glProgramParameteriARB(GLuint program, GLenum pname, GLint value) { fp_glProgramParameteriARB(program, pname, value); }
+inline void glFramebufferTextureARB(GLenum target, GLenum attachment, GLuint texture, GLint level) { fp_glFramebufferTextureARB(target, attachment, texture, level); }
+inline void glFramebufferTextureLayerARB(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) { fp_glFramebufferTextureLayerARB(target, attachment, texture, level, layer); }
+inline void glFramebufferTextureFaceARB(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face) { fp_glFramebufferTextureFaceARB(target, attachment, texture, level, face); }
+
+/* GL_ARB_indirect_parameters */
+inline void glMultiDrawArraysIndirectCountARB(GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride) { fp_glMultiDrawArraysIndirectCountARB(mode, indirect, drawcount, maxdrawcount, stride); }
+inline void glMultiDrawElementsIndirectCountARB(GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride) { fp_glMultiDrawElementsIndirectCountARB(mode, type, indirect, drawcount, maxdrawcount, stride); }
+
+/* GL_ARB_instanced_arrays */
+inline void glVertexAttribDivisorARB(GLuint index, GLuint divisor) { fp_glVertexAttribDivisorARB(index, divisor); }
+
+/* GL_ARB_robustness */
+inline GLenum glGetGraphicsResetStatusARB() { return fp_glGetGraphicsResetStatusARB(); }
+inline void glGetnTexImageARB(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void* img) { fp_glGetnTexImageARB(target, level, format, type, bufSize, img); }
+inline void glReadnPixelsARB(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void* data) { fp_glReadnPixelsARB(x, y, width, height, format, type, bufSize, data); }
+inline void glGetnCompressedTexImageARB(GLenum target, GLint lod, GLsizei bufSize, void* img) { fp_glGetnCompressedTexImageARB(target, lod, bufSize, img); }
+inline void glGetnUniformfvARB(GLuint program, GLint location, GLsizei bufSize, GLfloat* params) { fp_glGetnUniformfvARB(program, location, bufSize, params); }
+inline void glGetnUniformivARB(GLuint program, GLint location, GLsizei bufSize, GLint* params) { fp_glGetnUniformivARB(program, location, bufSize, params); }
+inline void glGetnUniformuivARB(GLuint program, GLint location, GLsizei bufSize, GLuint* params) { fp_glGetnUniformuivARB(program, location, bufSize, params); }
+inline void glGetnUniformdvARB(GLuint program, GLint location, GLsizei bufSize, GLdouble* params) { fp_glGetnUniformdvARB(program, location, bufSize, params); }
+inline void glGetnMapdvARB(GLenum target, GLenum query, GLsizei bufSize, GLdouble* v) { fp_glGetnMapdvARB(target, query, bufSize, v); }
+inline void glGetnMapfvARB(GLenum target, GLenum query, GLsizei bufSize, GLfloat* v) { fp_glGetnMapfvARB(target, query, bufSize, v); }
+inline void glGetnMapivARB(GLenum target, GLenum query, GLsizei bufSize, GLint* v) { fp_glGetnMapivARB(target, query, bufSize, v); }
+inline void glGetnPixelMapfvARB(GLenum map, GLsizei bufSize, GLfloat* values) { fp_glGetnPixelMapfvARB(map, bufSize, values); }
+inline void glGetnPixelMapuivARB(GLenum map, GLsizei bufSize, GLuint* values) { fp_glGetnPixelMapuivARB(map, bufSize, values); }
+inline void glGetnPixelMapusvARB(GLenum map, GLsizei bufSize, GLushort* values) { fp_glGetnPixelMapusvARB(map, bufSize, values); }
+inline void glGetnPolygonStippleARB(GLsizei bufSize, GLubyte* pattern) { fp_glGetnPolygonStippleARB(bufSize, pattern); }
+inline void glGetnColorTableARB(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* table) { fp_glGetnColorTableARB(target, format, type, bufSize, table); }
+inline void glGetnConvolutionFilterARB(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* image) { fp_glGetnConvolutionFilterARB(target, format, type, bufSize, image); }
+inline void glGetnSeparableFilterARB(GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void* row, GLsizei columnBufSize, void* column, void* span) { fp_glGetnSeparableFilterARB(target, format, type, rowBufSize, row, columnBufSize, column, span); }
+inline void glGetnHistogramARB(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void* values) { fp_glGetnHistogramARB(target, reset, format, type, bufSize, values); }
+inline void glGetnMinmaxARB(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void* values) { fp_glGetnMinmaxARB(target, reset, format, type, bufSize, values); }
+
+/* GL_ARB_sample_shading */
+inline void glMinSampleShadingARB(GLfloat value) { fp_glMinSampleShadingARB(value); }
+
+/* GL_ARB_shading_language_include */
+inline void glNamedStringARB(GLenum type, GLint namelen, const GLchar* name, GLint stringlen, const GLchar* string) { fp_glNamedStringARB(type, namelen, name, stringlen, string); }
+inline void glDeleteNamedStringARB(GLint namelen, const GLchar* name) { fp_glDeleteNamedStringARB(namelen, name); }
+inline void glCompileShaderIncludeARB(GLuint shader, GLsizei count, const GLchar** path, const GLint* length) { fp_glCompileShaderIncludeARB(shader, count, path, length); }
+inline GLboolean glIsNamedStringARB(GLint namelen, const GLchar* name) { return fp_glIsNamedStringARB(namelen, name); }
+inline void glGetNamedStringARB(GLint namelen, const GLchar* name, GLsizei bufSize, GLint* stringlen, GLchar* string) { fp_glGetNamedStringARB(namelen, name, bufSize, stringlen, string); }
+inline void glGetNamedStringivARB(GLint namelen, const GLchar* name, GLenum pname, GLint* params) { fp_glGetNamedStringivARB(namelen, name, pname, params); }
+
+/* GL_ARB_sparse_buffer */
+inline void glBufferPageCommitmentARB(GLenum target, GLintptr offset, GLsizei size, GLboolean commit) { fp_glBufferPageCommitmentARB(target, offset, size, commit); }
+inline void glNamedBufferPageCommitmentEXT(GLuint buffer, GLintptr offset, GLsizei size, GLboolean commit) { fp_glNamedBufferPageCommitmentEXT(buffer, offset, size, commit); }
+inline void glNamedBufferPageCommitmentARB(GLuint buffer, GLintptr offset, GLsizei size, GLboolean commit) { fp_glNamedBufferPageCommitmentARB(buffer, offset, size, commit); }
+
+/* GL_ARB_sparse_texture */
+inline void glTexPageCommitmentARB(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident) { fp_glTexPageCommitmentARB(target, level, xoffset, yoffset, zoffset, width, height, depth, resident); }
+
+/* GL_ARB_texture_buffer_object */
+inline void glTexBufferARB(GLenum target, GLenum internalformat, GLuint buffer) { fp_glTexBufferARB(target, internalformat, buffer); }
+
+/* GL_EXT_bindable_uniform */
+inline void glUniformBufferEXT(GLuint program, GLint location, GLuint buffer) { fp_glUniformBufferEXT(program, location, buffer); }
+inline GLint glGetUniformBufferSizeEXT(GLuint program, GLint location) { return fp_glGetUniformBufferSizeEXT(program, location); }
+inline GLintptr glGetUniformOffsetEXT(GLuint program, GLint location) { return fp_glGetUniformOffsetEXT(program, location); }
+
+/* GL_EXT_copy_image */
+inline void glCopyImageSubDataEXT(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth) { fp_glCopyImageSubDataEXT(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth); }
+
+/* GL_EXT_debug_label */
+inline void glLabelObjectEXT(GLenum type, GLuint object, GLsizei length, const GLchar* label) { fp_glLabelObjectEXT(type, object, length, label); }
+inline void glGetObjectLabelEXT(GLenum type, GLuint object, GLsizei bufSize, GLsizei* length, GLchar* label) { fp_glGetObjectLabelEXT(type, object, bufSize, length, label); }
+
+/* GL_EXT_debug_marker */
+inline void glInsertEventMarkerEXT(GLsizei length, const GLchar* marker) { fp_glInsertEventMarkerEXT(length, marker); }
+inline void glPushGroupMarkerEXT(GLsizei length, const GLchar* marker) { fp_glPushGroupMarkerEXT(length, marker); }
+inline void glPopGroupMarkerEXT() { fp_glPopGroupMarkerEXT(); }
+
+/* GL_EXT_direct_state_access */
+inline void glMatrixLoadfEXT(GLenum mode, const GLfloat* m) { fp_glMatrixLoadfEXT(mode, m); }
+inline void glMatrixLoaddEXT(GLenum mode, const GLdouble* m) { fp_glMatrixLoaddEXT(mode, m); }
+inline void glMatrixMultfEXT(GLenum mode, const GLfloat* m) { fp_glMatrixMultfEXT(mode, m); }
+inline void glMatrixMultdEXT(GLenum mode, const GLdouble* m) { fp_glMatrixMultdEXT(mode, m); }
+inline void glMatrixLoadIdentityEXT(GLenum mode) { fp_glMatrixLoadIdentityEXT(mode); }
+inline void glMatrixRotatefEXT(GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) { fp_glMatrixRotatefEXT(mode, angle, x, y, z); }
+inline void glMatrixRotatedEXT(GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) { fp_glMatrixRotatedEXT(mode, angle, x, y, z); }
+inline void glMatrixScalefEXT(GLenum mode, GLfloat x, GLfloat y, GLfloat z) { fp_glMatrixScalefEXT(mode, x, y, z); }
+inline void glMatrixScaledEXT(GLenum mode, GLdouble x, GLdouble y, GLdouble z) { fp_glMatrixScaledEXT(mode, x, y, z); }
+inline void glMatrixTranslatefEXT(GLenum mode, GLfloat x, GLfloat y, GLfloat z) { fp_glMatrixTranslatefEXT(mode, x, y, z); }
+inline void glMatrixTranslatedEXT(GLenum mode, GLdouble x, GLdouble y, GLdouble z) { fp_glMatrixTranslatedEXT(mode, x, y, z); }
+inline void glMatrixFrustumEXT(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) { fp_glMatrixFrustumEXT(mode, left, right, bottom, top, zNear, zFar); }
+inline void glMatrixOrthoEXT(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) { fp_glMatrixOrthoEXT(mode, left, right, bottom, top, zNear, zFar); }
+inline void glMatrixPopEXT(GLenum mode) { fp_glMatrixPopEXT(mode); }
+inline void glMatrixPushEXT(GLenum mode) { fp_glMatrixPushEXT(mode); }
+inline void glClientAttribDefaultEXT(GLbitfield mask) { fp_glClientAttribDefaultEXT(mask); }
+inline void glPushClientAttribDefaultEXT(GLbitfield mask) { fp_glPushClientAttribDefaultEXT(mask); }
+inline void glTextureParameterfEXT(GLuint texture, GLenum target, GLenum pname, GLfloat param) { fp_glTextureParameterfEXT(texture, target, pname, param); }
+inline void glTextureParameterfvEXT(GLuint texture, GLenum target, GLenum pname, const GLfloat* params) { fp_glTextureParameterfvEXT(texture, target, pname, params); }
+inline void glTextureParameteriEXT(GLuint texture, GLenum target, GLenum pname, GLint param) { fp_glTextureParameteriEXT(texture, target, pname, param); }
+inline void glTextureParameterivEXT(GLuint texture, GLenum target, GLenum pname, const GLint* params) { fp_glTextureParameterivEXT(texture, target, pname, params); }
+inline void glTextureImage1DEXT(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void* pixels) { fp_glTextureImage1DEXT(texture, target, level, internalformat, width, border, format, type, pixels); }
+inline void glTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels) { fp_glTextureImage2DEXT(texture, target, level, internalformat, width, height, border, format, type, pixels); }
+inline void glTextureSubImage1DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void* pixels) { fp_glTextureSubImage1DEXT(texture, target, level, xoffset, width, format, type, pixels); }
+inline void glTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels) { fp_glTextureSubImage2DEXT(texture, target, level, xoffset, yoffset, width, height, format, type, pixels); }
+inline void glCopyTextureImage1DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) { fp_glCopyTextureImage1DEXT(texture, target, level, internalformat, x, y, width, border); }
+inline void glCopyTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) { fp_glCopyTextureImage2DEXT(texture, target, level, internalformat, x, y, width, height, border); }
+inline void glCopyTextureSubImage1DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) { fp_glCopyTextureSubImage1DEXT(texture, target, level, xoffset, x, y, width); }
+inline void glCopyTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) { fp_glCopyTextureSubImage2DEXT(texture, target, level, xoffset, yoffset, x, y, width, height); }
+inline void glGetTextureImageEXT(GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void* pixels) { fp_glGetTextureImageEXT(texture, target, level, format, type, pixels); }
+inline void glGetTextureParameterfvEXT(GLuint texture, GLenum target, GLenum pname, GLfloat* params) { fp_glGetTextureParameterfvEXT(texture, target, pname, params); }
+inline void glGetTextureParameterivEXT(GLuint texture, GLenum target, GLenum pname, GLint* params) { fp_glGetTextureParameterivEXT(texture, target, pname, params); }
+inline void glGetTextureLevelParameterfvEXT(GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat* params) { fp_glGetTextureLevelParameterfvEXT(texture, target, level, pname, params); }
+inline void glGetTextureLevelParameterivEXT(GLuint texture, GLenum target, GLint level, GLenum pname, GLint* params) { fp_glGetTextureLevelParameterivEXT(texture, target, level, pname, params); }
+inline void glTextureImage3DEXT(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels) { fp_glTextureImage3DEXT(texture, target, level, internalformat, width, height, depth, border, format, type, pixels); }
+inline void glTextureSubImage3DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels) { fp_glTextureSubImage3DEXT(texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels); }
+inline void glCopyTextureSubImage3DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) { fp_glCopyTextureSubImage3DEXT(texture, target, level, xoffset, yoffset, zoffset, x, y, width, height); }
+inline void glBindMultiTextureEXT(GLenum texunit, GLenum target, GLuint texture) { fp_glBindMultiTextureEXT(texunit, target, texture); }
+inline void glMultiTexCoordPointerEXT(GLenum texunit, GLint size, GLenum type, GLsizei stride, const void* pointer) { fp_glMultiTexCoordPointerEXT(texunit, size, type, stride, pointer); }
+inline void glMultiTexEnvfEXT(GLenum texunit, GLenum target, GLenum pname, GLfloat param) { fp_glMultiTexEnvfEXT(texunit, target, pname, param); }
+inline void glMultiTexEnvfvEXT(GLenum texunit, GLenum target, GLenum pname, const GLfloat* params) { fp_glMultiTexEnvfvEXT(texunit, target, pname, params); }
+inline void glMultiTexEnviEXT(GLenum texunit, GLenum target, GLenum pname, GLint param) { fp_glMultiTexEnviEXT(texunit, target, pname, param); }
+inline void glMultiTexEnvivEXT(GLenum texunit, GLenum target, GLenum pname, const GLint* params) { fp_glMultiTexEnvivEXT(texunit, target, pname, params); }
+inline void glMultiTexGendEXT(GLenum texunit, GLenum coord, GLenum pname, GLdouble param) { fp_glMultiTexGendEXT(texunit, coord, pname, param); }
+inline void glMultiTexGendvEXT(GLenum texunit, GLenum coord, GLenum pname, const GLdouble* params) { fp_glMultiTexGendvEXT(texunit, coord, pname, params); }
+inline void glMultiTexGenfEXT(GLenum texunit, GLenum coord, GLenum pname, GLfloat param) { fp_glMultiTexGenfEXT(texunit, coord, pname, param); }
+inline void glMultiTexGenfvEXT(GLenum texunit, GLenum coord, GLenum pname, const GLfloat* params) { fp_glMultiTexGenfvEXT(texunit, coord, pname, params); }
+inline void glMultiTexGeniEXT(GLenum texunit, GLenum coord, GLenum pname, GLint param) { fp_glMultiTexGeniEXT(texunit, coord, pname, param); }
+inline void glMultiTexGenivEXT(GLenum texunit, GLenum coord, GLenum pname, const GLint* params) { fp_glMultiTexGenivEXT(texunit, coord, pname, params); }
+inline void glGetMultiTexEnvfvEXT(GLenum texunit, GLenum target, GLenum pname, GLfloat* params) { fp_glGetMultiTexEnvfvEXT(texunit, target, pname, params); }
+inline void glGetMultiTexEnvivEXT(GLenum texunit, GLenum target, GLenum pname, GLint* params) { fp_glGetMultiTexEnvivEXT(texunit, target, pname, params); }
+inline void glGetMultiTexGendvEXT(GLenum texunit, GLenum coord, GLenum pname, GLdouble* params) { fp_glGetMultiTexGendvEXT(texunit, coord, pname, params); }
+inline void glGetMultiTexGenfvEXT(GLenum texunit, GLenum coord, GLenum pname, GLfloat* params) { fp_glGetMultiTexGenfvEXT(texunit, coord, pname, params); }
+inline void glGetMultiTexGenivEXT(GLenum texunit, GLenum coord, GLenum pname, GLint* params) { fp_glGetMultiTexGenivEXT(texunit, coord, pname, params); }
+inline void glMultiTexParameteriEXT(GLenum texunit, GLenum target, GLenum pname, GLint param) { fp_glMultiTexParameteriEXT(texunit, target, pname, param); }
+inline void glMultiTexParameterivEXT(GLenum texunit, GLenum target, GLenum pname, const GLint* params) { fp_glMultiTexParameterivEXT(texunit, target, pname, params); }
+inline void glMultiTexParameterfEXT(GLenum texunit, GLenum target, GLenum pname, GLfloat param) { fp_glMultiTexParameterfEXT(texunit, target, pname, param); }
+inline void glMultiTexParameterfvEXT(GLenum texunit, GLenum target, GLenum pname, const GLfloat* params) { fp_glMultiTexParameterfvEXT(texunit, target, pname, params); }
+inline void glMultiTexImage1DEXT(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void* pixels) { fp_glMultiTexImage1DEXT(texunit, target, level, internalformat, width, border, format, type, pixels); }
+inline void glMultiTexImage2DEXT(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels) { fp_glMultiTexImage2DEXT(texunit, target, level, internalformat, width, height, border, format, type, pixels); }
+inline void glMultiTexSubImage1DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void* pixels) { fp_glMultiTexSubImage1DEXT(texunit, target, level, xoffset, width, format, type, pixels); }
+inline void glMultiTexSubImage2DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels) { fp_glMultiTexSubImage2DEXT(texunit, target, level, xoffset, yoffset, width, height, format, type, pixels); }
+inline void glCopyMultiTexImage1DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) { fp_glCopyMultiTexImage1DEXT(texunit, target, level, internalformat, x, y, width, border); }
+inline void glCopyMultiTexImage2DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) { fp_glCopyMultiTexImage2DEXT(texunit, target, level, internalformat, x, y, width, height, border); }
+inline void glCopyMultiTexSubImage1DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) { fp_glCopyMultiTexSubImage1DEXT(texunit, target, level, xoffset, x, y, width); }
+inline void glCopyMultiTexSubImage2DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) { fp_glCopyMultiTexSubImage2DEXT(texunit, target, level, xoffset, yoffset, x, y, width, height); }
+inline void glGetMultiTexImageEXT(GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void* pixels) { fp_glGetMultiTexImageEXT(texunit, target, level, format, type, pixels); }
+inline void glGetMultiTexParameterfvEXT(GLenum texunit, GLenum target, GLenum pname, GLfloat* params) { fp_glGetMultiTexParameterfvEXT(texunit, target, pname, params); }
+inline void glGetMultiTexParameterivEXT(GLenum texunit, GLenum target, GLenum pname, GLint* params) { fp_glGetMultiTexParameterivEXT(texunit, target, pname, params); }
+inline void glGetMultiTexLevelParameterfvEXT(GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat* params) { fp_glGetMultiTexLevelParameterfvEXT(texunit, target, level, pname, params); }
+inline void glGetMultiTexLevelParameterivEXT(GLenum texunit, GLenum target, GLint level, GLenum pname, GLint* params) { fp_glGetMultiTexLevelParameterivEXT(texunit, target, level, pname, params); }
+inline void glMultiTexImage3DEXT(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels) { fp_glMultiTexImage3DEXT(texunit, target, level, internalformat, width, height, depth, border, format, type, pixels); }
+inline void glMultiTexSubImage3DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels) { fp_glMultiTexSubImage3DEXT(texunit, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels); }
+inline void glCopyMultiTexSubImage3DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) { fp_glCopyMultiTexSubImage3DEXT(texunit, target, level, xoffset, yoffset, zoffset, x, y, width, height); }
+inline void glEnableClientStateIndexedEXT(GLenum array, GLuint index) { fp_glEnableClientStateIndexedEXT(array, index); }
+inline void glDisableClientStateIndexedEXT(GLenum array, GLuint index) { fp_glDisableClientStateIndexedEXT(array, index); }
+inline void glGetFloatIndexedvEXT(GLenum target, GLuint index, GLfloat* data) { fp_glGetFloatIndexedvEXT(target, index, data); }
+inline void glGetDoubleIndexedvEXT(GLenum target, GLuint index, GLdouble* data) { fp_glGetDoubleIndexedvEXT(target, index, data); }
+inline void glGetPointerIndexedvEXT(GLenum target, GLuint index, void** data) { fp_glGetPointerIndexedvEXT(target, index, data); }
+inline void glEnableIndexedEXT(GLenum target, GLuint index) { fp_glEnableIndexedEXT(target, index); }
+inline void glDisableIndexedEXT(GLenum target, GLuint index) { fp_glDisableIndexedEXT(target, index); }
+inline GLboolean glIsEnabledIndexedEXT(GLenum target, GLuint index) { return fp_glIsEnabledIndexedEXT(target, index); }
+inline void glGetIntegerIndexedvEXT(GLenum target, GLuint index, GLint* data) { fp_glGetIntegerIndexedvEXT(target, index, data); }
+inline void glGetBooleanIndexedvEXT(GLenum target, GLuint index, GLboolean* data) { fp_glGetBooleanIndexedvEXT(target, index, data); }
+inline void glCompressedTextureImage3DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* bits) { fp_glCompressedTextureImage3DEXT(texture, target, level, internalformat, width, height, depth, border, imageSize, bits); }
+inline void glCompressedTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* bits) { fp_glCompressedTextureImage2DEXT(texture, target, level, internalformat, width, height, border, imageSize, bits); }
+inline void glCompressedTextureImage1DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void* bits) { fp_glCompressedTextureImage1DEXT(texture, target, level, internalformat, width, border, imageSize, bits); }
+inline void glCompressedTextureSubImage3DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* bits) { fp_glCompressedTextureSubImage3DEXT(texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits); }
+inline void glCompressedTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* bits) { fp_glCompressedTextureSubImage2DEXT(texture, target, level, xoffset, yoffset, width, height, format, imageSize, bits); }
+inline void glCompressedTextureSubImage1DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* bits) { fp_glCompressedTextureSubImage1DEXT(texture, target, level, xoffset, width, format, imageSize, bits); }
+inline void glGetCompressedTextureImageEXT(GLuint texture, GLenum target, GLint lod, void* img) { fp_glGetCompressedTextureImageEXT(texture, target, lod, img); }
+inline void glCompressedMultiTexImage3DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* bits) { fp_glCompressedMultiTexImage3DEXT(texunit, target, level, internalformat, width, height, depth, border, imageSize, bits); }
+inline void glCompressedMultiTexImage2DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* bits) { fp_glCompressedMultiTexImage2DEXT(texunit, target, level, internalformat, width, height, border, imageSize, bits); }
+inline void glCompressedMultiTexImage1DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void* bits) { fp_glCompressedMultiTexImage1DEXT(texunit, target, level, internalformat, width, border, imageSize, bits); }
+inline void glCompressedMultiTexSubImage3DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* bits) { fp_glCompressedMultiTexSubImage3DEXT(texunit, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits); }
+inline void glCompressedMultiTexSubImage2DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* bits) { fp_glCompressedMultiTexSubImage2DEXT(texunit, target, level, xoffset, yoffset, width, height, format, imageSize, bits); }
+inline void glCompressedMultiTexSubImage1DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* bits) { fp_glCompressedMultiTexSubImage1DEXT(texunit, target, level, xoffset, width, format, imageSize, bits); }
+inline void glGetCompressedMultiTexImageEXT(GLenum texunit, GLenum target, GLint lod, void* img) { fp_glGetCompressedMultiTexImageEXT(texunit, target, lod, img); }
+inline void glMatrixLoadTransposefEXT(GLenum mode, const GLfloat* m) { fp_glMatrixLoadTransposefEXT(mode, m); }
+inline void glMatrixLoadTransposedEXT(GLenum mode, const GLdouble* m) { fp_glMatrixLoadTransposedEXT(mode, m); }
+inline void glMatrixMultTransposefEXT(GLenum mode, const GLfloat* m) { fp_glMatrixMultTransposefEXT(mode, m); }
+inline void glMatrixMultTransposedEXT(GLenum mode, const GLdouble* m) { fp_glMatrixMultTransposedEXT(mode, m); }
+inline void glNamedBufferDataEXT(GLuint buffer, GLsizeiptr size, const void* data, GLenum usage) { fp_glNamedBufferDataEXT(buffer, size, data, usage); }
+inline void glNamedBufferSubDataEXT(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data) { fp_glNamedBufferSubDataEXT(buffer, offset, size, data); }
+inline void* glMapNamedBufferEXT(GLuint buffer, GLenum access) { return fp_glMapNamedBufferEXT(buffer, access); }
+inline GLboolean glUnmapNamedBufferEXT(GLuint buffer) { return fp_glUnmapNamedBufferEXT(buffer); }
+inline void glGetNamedBufferParameterivEXT(GLuint buffer, GLenum pname, GLint* params) { fp_glGetNamedBufferParameterivEXT(buffer, pname, params); }
+inline void glGetNamedBufferPointervEXT(GLuint buffer, GLenum pname, void** params) { fp_glGetNamedBufferPointervEXT(buffer, pname, params); }
+inline void glGetNamedBufferSubDataEXT(GLuint buffer, GLintptr offset, GLsizeiptr size, void* data) { fp_glGetNamedBufferSubDataEXT(buffer, offset, size, data); }
+inline void glProgramUniform1fEXT(GLuint program, GLint location, GLfloat v0) { fp_glProgramUniform1fEXT(program, location, v0); }
+inline void glProgramUniform2fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1) { fp_glProgramUniform2fEXT(program, location, v0, v1); }
+inline void glProgramUniform3fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) { fp_glProgramUniform3fEXT(program, location, v0, v1, v2); }
+inline void glProgramUniform4fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) { fp_glProgramUniform4fEXT(program, location, v0, v1, v2, v3); }
+inline void glProgramUniform1iEXT(GLuint program, GLint location, GLint v0) { fp_glProgramUniform1iEXT(program, location, v0); }
+inline void glProgramUniform2iEXT(GLuint program, GLint location, GLint v0, GLint v1) { fp_glProgramUniform2iEXT(program, location, v0, v1); }
+inline void glProgramUniform3iEXT(GLuint program, GLint location, GLint v0, GLint v1, GLint v2) { fp_glProgramUniform3iEXT(program, location, v0, v1, v2); }
+inline void glProgramUniform4iEXT(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) { fp_glProgramUniform4iEXT(program, location, v0, v1, v2, v3); }
+inline void glProgramUniform1fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat* value) { fp_glProgramUniform1fvEXT(program, location, count, value); }
+inline void glProgramUniform2fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat* value) { fp_glProgramUniform2fvEXT(program, location, count, value); }
+inline void glProgramUniform3fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat* value) { fp_glProgramUniform3fvEXT(program, location, count, value); }
+inline void glProgramUniform4fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat* value) { fp_glProgramUniform4fvEXT(program, location, count, value); }
+inline void glProgramUniform1ivEXT(GLuint program, GLint location, GLsizei count, const GLint* value) { fp_glProgramUniform1ivEXT(program, location, count, value); }
+inline void glProgramUniform2ivEXT(GLuint program, GLint location, GLsizei count, const GLint* value) { fp_glProgramUniform2ivEXT(program, location, count, value); }
+inline void glProgramUniform3ivEXT(GLuint program, GLint location, GLsizei count, const GLint* value) { fp_glProgramUniform3ivEXT(program, location, count, value); }
+inline void glProgramUniform4ivEXT(GLuint program, GLint location, GLsizei count, const GLint* value) { fp_glProgramUniform4ivEXT(program, location, count, value); }
+inline void glProgramUniformMatrix2fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glProgramUniformMatrix2fvEXT(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix3fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glProgramUniformMatrix3fvEXT(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix4fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glProgramUniformMatrix4fvEXT(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix2x3fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glProgramUniformMatrix2x3fvEXT(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix3x2fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glProgramUniformMatrix3x2fvEXT(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix2x4fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glProgramUniformMatrix2x4fvEXT(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix4x2fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glProgramUniformMatrix4x2fvEXT(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix3x4fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glProgramUniformMatrix3x4fvEXT(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix4x3fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glProgramUniformMatrix4x3fvEXT(program, location, count, transpose, value); }
+inline void glTextureBufferEXT(GLuint texture, GLenum target, GLenum internalformat, GLuint buffer) { fp_glTextureBufferEXT(texture, target, internalformat, buffer); }
+inline void glMultiTexBufferEXT(GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer) { fp_glMultiTexBufferEXT(texunit, target, internalformat, buffer); }
+inline void glTextureParameterIivEXT(GLuint texture, GLenum target, GLenum pname, const GLint* params) { fp_glTextureParameterIivEXT(texture, target, pname, params); }
+inline void glTextureParameterIuivEXT(GLuint texture, GLenum target, GLenum pname, const GLuint* params) { fp_glTextureParameterIuivEXT(texture, target, pname, params); }
+inline void glGetTextureParameterIivEXT(GLuint texture, GLenum target, GLenum pname, GLint* params) { fp_glGetTextureParameterIivEXT(texture, target, pname, params); }
+inline void glGetTextureParameterIuivEXT(GLuint texture, GLenum target, GLenum pname, GLuint* params) { fp_glGetTextureParameterIuivEXT(texture, target, pname, params); }
+inline void glMultiTexParameterIivEXT(GLenum texunit, GLenum target, GLenum pname, const GLint* params) { fp_glMultiTexParameterIivEXT(texunit, target, pname, params); }
+inline void glMultiTexParameterIuivEXT(GLenum texunit, GLenum target, GLenum pname, const GLuint* params) { fp_glMultiTexParameterIuivEXT(texunit, target, pname, params); }
+inline void glGetMultiTexParameterIivEXT(GLenum texunit, GLenum target, GLenum pname, GLint* params) { fp_glGetMultiTexParameterIivEXT(texunit, target, pname, params); }
+inline void glGetMultiTexParameterIuivEXT(GLenum texunit, GLenum target, GLenum pname, GLuint* params) { fp_glGetMultiTexParameterIuivEXT(texunit, target, pname, params); }
+inline void glProgramUniform1uiEXT(GLuint program, GLint location, GLuint v0) { fp_glProgramUniform1uiEXT(program, location, v0); }
+inline void glProgramUniform2uiEXT(GLuint program, GLint location, GLuint v0, GLuint v1) { fp_glProgramUniform2uiEXT(program, location, v0, v1); }
+inline void glProgramUniform3uiEXT(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2) { fp_glProgramUniform3uiEXT(program, location, v0, v1, v2); }
+inline void glProgramUniform4uiEXT(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) { fp_glProgramUniform4uiEXT(program, location, v0, v1, v2, v3); }
+inline void glProgramUniform1uivEXT(GLuint program, GLint location, GLsizei count, const GLuint* value) { fp_glProgramUniform1uivEXT(program, location, count, value); }
+inline void glProgramUniform2uivEXT(GLuint program, GLint location, GLsizei count, const GLuint* value) { fp_glProgramUniform2uivEXT(program, location, count, value); }
+inline void glProgramUniform3uivEXT(GLuint program, GLint location, GLsizei count, const GLuint* value) { fp_glProgramUniform3uivEXT(program, location, count, value); }
+inline void glProgramUniform4uivEXT(GLuint program, GLint location, GLsizei count, const GLuint* value) { fp_glProgramUniform4uivEXT(program, location, count, value); }
+inline void glNamedProgramLocalParameters4fvEXT(GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat* params) { fp_glNamedProgramLocalParameters4fvEXT(program, target, index, count, params); }
+inline void glNamedProgramLocalParameterI4iEXT(GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w) { fp_glNamedProgramLocalParameterI4iEXT(program, target, index, x, y, z, w); }
+inline void glNamedProgramLocalParameterI4ivEXT(GLuint program, GLenum target, GLuint index, const GLint* params) { fp_glNamedProgramLocalParameterI4ivEXT(program, target, index, params); }
+inline void glNamedProgramLocalParametersI4ivEXT(GLuint program, GLenum target, GLuint index, GLsizei count, const GLint* params) { fp_glNamedProgramLocalParametersI4ivEXT(program, target, index, count, params); }
+inline void glNamedProgramLocalParameterI4uiEXT(GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) { fp_glNamedProgramLocalParameterI4uiEXT(program, target, index, x, y, z, w); }
+inline void glNamedProgramLocalParameterI4uivEXT(GLuint program, GLenum target, GLuint index, const GLuint* params) { fp_glNamedProgramLocalParameterI4uivEXT(program, target, index, params); }
+inline void glNamedProgramLocalParametersI4uivEXT(GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint* params) { fp_glNamedProgramLocalParametersI4uivEXT(program, target, index, count, params); }
+inline void glGetNamedProgramLocalParameterIivEXT(GLuint program, GLenum target, GLuint index, GLint* params) { fp_glGetNamedProgramLocalParameterIivEXT(program, target, index, params); }
+inline void glGetNamedProgramLocalParameterIuivEXT(GLuint program, GLenum target, GLuint index, GLuint* params) { fp_glGetNamedProgramLocalParameterIuivEXT(program, target, index, params); }
+inline void glEnableClientStateiEXT(GLenum array, GLuint index) { fp_glEnableClientStateiEXT(array, index); }
+inline void glDisableClientStateiEXT(GLenum array, GLuint index) { fp_glDisableClientStateiEXT(array, index); }
+inline void glGetFloati_vEXT(GLenum pname, GLuint index, GLfloat* params) { fp_glGetFloati_vEXT(pname, index, params); }
+inline void glGetDoublei_vEXT(GLenum pname, GLuint index, GLdouble* params) { fp_glGetDoublei_vEXT(pname, index, params); }
+inline void glGetPointeri_vEXT(GLenum pname, GLuint index, void** params) { fp_glGetPointeri_vEXT(pname, index, params); }
+inline void glNamedProgramStringEXT(GLuint program, GLenum target, GLenum format, GLsizei len, const void* string) { fp_glNamedProgramStringEXT(program, target, format, len, string); }
+inline void glNamedProgramLocalParameter4dEXT(GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) { fp_glNamedProgramLocalParameter4dEXT(program, target, index, x, y, z, w); }
+inline void glNamedProgramLocalParameter4dvEXT(GLuint program, GLenum target, GLuint index, const GLdouble* params) { fp_glNamedProgramLocalParameter4dvEXT(program, target, index, params); }
+inline void glNamedProgramLocalParameter4fEXT(GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) { fp_glNamedProgramLocalParameter4fEXT(program, target, index, x, y, z, w); }
+inline void glNamedProgramLocalParameter4fvEXT(GLuint program, GLenum target, GLuint index, const GLfloat* params) { fp_glNamedProgramLocalParameter4fvEXT(program, target, index, params); }
+inline void glGetNamedProgramLocalParameterdvEXT(GLuint program, GLenum target, GLuint index, GLdouble* params) { fp_glGetNamedProgramLocalParameterdvEXT(program, target, index, params); }
+inline void glGetNamedProgramLocalParameterfvEXT(GLuint program, GLenum target, GLuint index, GLfloat* params) { fp_glGetNamedProgramLocalParameterfvEXT(program, target, index, params); }
+inline void glGetNamedProgramivEXT(GLuint program, GLenum target, GLenum pname, GLint* params) { fp_glGetNamedProgramivEXT(program, target, pname, params); }
+inline void glGetNamedProgramStringEXT(GLuint program, GLenum target, GLenum pname, void* string) { fp_glGetNamedProgramStringEXT(program, target, pname, string); }
+inline void glNamedRenderbufferStorageEXT(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height) { fp_glNamedRenderbufferStorageEXT(renderbuffer, internalformat, width, height); }
+inline void glGetNamedRenderbufferParameterivEXT(GLuint renderbuffer, GLenum pname, GLint* params) { fp_glGetNamedRenderbufferParameterivEXT(renderbuffer, pname, params); }
+inline void glNamedRenderbufferStorageMultisampleEXT(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) { fp_glNamedRenderbufferStorageMultisampleEXT(renderbuffer, samples, internalformat, width, height); }
+inline void glNamedRenderbufferStorageMultisampleCoverageEXT(GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height) { fp_glNamedRenderbufferStorageMultisampleCoverageEXT(renderbuffer, coverageSamples, colorSamples, internalformat, width, height); }
+inline GLenum glCheckNamedFramebufferStatusEXT(GLuint framebuffer, GLenum target) { return fp_glCheckNamedFramebufferStatusEXT(framebuffer, target); }
+inline void glNamedFramebufferTexture1DEXT(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) { fp_glNamedFramebufferTexture1DEXT(framebuffer, attachment, textarget, texture, level); }
+inline void glNamedFramebufferTexture2DEXT(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) { fp_glNamedFramebufferTexture2DEXT(framebuffer, attachment, textarget, texture, level); }
+inline void glNamedFramebufferTexture3DEXT(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) { fp_glNamedFramebufferTexture3DEXT(framebuffer, attachment, textarget, texture, level, zoffset); }
+inline void glNamedFramebufferRenderbufferEXT(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) { fp_glNamedFramebufferRenderbufferEXT(framebuffer, attachment, renderbuffertarget, renderbuffer); }
+inline void glGetNamedFramebufferAttachmentParameterivEXT(GLuint framebuffer, GLenum attachment, GLenum pname, GLint* params) { fp_glGetNamedFramebufferAttachmentParameterivEXT(framebuffer, attachment, pname, params); }
+inline void glGenerateTextureMipmapEXT(GLuint texture, GLenum target) { fp_glGenerateTextureMipmapEXT(texture, target); }
+inline void glGenerateMultiTexMipmapEXT(GLenum texunit, GLenum target) { fp_glGenerateMultiTexMipmapEXT(texunit, target); }
+inline void glFramebufferDrawBufferEXT(GLuint framebuffer, GLenum mode) { fp_glFramebufferDrawBufferEXT(framebuffer, mode); }
+inline void glFramebufferDrawBuffersEXT(GLuint framebuffer, GLsizei n, const GLenum* bufs) { fp_glFramebufferDrawBuffersEXT(framebuffer, n, bufs); }
+inline void glFramebufferReadBufferEXT(GLuint framebuffer, GLenum mode) { fp_glFramebufferReadBufferEXT(framebuffer, mode); }
+inline void glGetFramebufferParameterivEXT(GLuint framebuffer, GLenum pname, GLint* params) { fp_glGetFramebufferParameterivEXT(framebuffer, pname, params); }
+inline void glNamedCopyBufferSubDataEXT(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) { fp_glNamedCopyBufferSubDataEXT(readBuffer, writeBuffer, readOffset, writeOffset, size); }
+inline void glNamedFramebufferTextureEXT(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level) { fp_glNamedFramebufferTextureEXT(framebuffer, attachment, texture, level); }
+inline void glNamedFramebufferTextureLayerEXT(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer) { fp_glNamedFramebufferTextureLayerEXT(framebuffer, attachment, texture, level, layer); }
+inline void glNamedFramebufferTextureFaceEXT(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face) { fp_glNamedFramebufferTextureFaceEXT(framebuffer, attachment, texture, level, face); }
+inline void glTextureRenderbufferEXT(GLuint texture, GLenum target, GLuint renderbuffer) { fp_glTextureRenderbufferEXT(texture, target, renderbuffer); }
+inline void glMultiTexRenderbufferEXT(GLenum texunit, GLenum target, GLuint renderbuffer) { fp_glMultiTexRenderbufferEXT(texunit, target, renderbuffer); }
+inline void glVertexArrayVertexOffsetEXT(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset) { fp_glVertexArrayVertexOffsetEXT(vaobj, buffer, size, type, stride, offset); }
+inline void glVertexArrayColorOffsetEXT(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset) { fp_glVertexArrayColorOffsetEXT(vaobj, buffer, size, type, stride, offset); }
+inline void glVertexArrayEdgeFlagOffsetEXT(GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset) { fp_glVertexArrayEdgeFlagOffsetEXT(vaobj, buffer, stride, offset); }
+inline void glVertexArrayIndexOffsetEXT(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset) { fp_glVertexArrayIndexOffsetEXT(vaobj, buffer, type, stride, offset); }
+inline void glVertexArrayNormalOffsetEXT(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset) { fp_glVertexArrayNormalOffsetEXT(vaobj, buffer, type, stride, offset); }
+inline void glVertexArrayTexCoordOffsetEXT(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset) { fp_glVertexArrayTexCoordOffsetEXT(vaobj, buffer, size, type, stride, offset); }
+inline void glVertexArrayMultiTexCoordOffsetEXT(GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset) { fp_glVertexArrayMultiTexCoordOffsetEXT(vaobj, buffer, texunit, size, type, stride, offset); }
+inline void glVertexArrayFogCoordOffsetEXT(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset) { fp_glVertexArrayFogCoordOffsetEXT(vaobj, buffer, type, stride, offset); }
+inline void glVertexArraySecondaryColorOffsetEXT(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset) { fp_glVertexArraySecondaryColorOffsetEXT(vaobj, buffer, size, type, stride, offset); }
+inline void glVertexArrayVertexAttribOffsetEXT(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset) { fp_glVertexArrayVertexAttribOffsetEXT(vaobj, buffer, index, size, type, normalized, stride, offset); }
+inline void glVertexArrayVertexAttribIOffsetEXT(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset) { fp_glVertexArrayVertexAttribIOffsetEXT(vaobj, buffer, index, size, type, stride, offset); }
+inline void glEnableVertexArrayEXT(GLuint vaobj, GLenum array) { fp_glEnableVertexArrayEXT(vaobj, array); }
+inline void glDisableVertexArrayEXT(GLuint vaobj, GLenum array) { fp_glDisableVertexArrayEXT(vaobj, array); }
+inline void glEnableVertexArrayAttribEXT(GLuint vaobj, GLuint index) { fp_glEnableVertexArrayAttribEXT(vaobj, index); }
+inline void glDisableVertexArrayAttribEXT(GLuint vaobj, GLuint index) { fp_glDisableVertexArrayAttribEXT(vaobj, index); }
+inline void glGetVertexArrayIntegervEXT(GLuint vaobj, GLenum pname, GLint* param) { fp_glGetVertexArrayIntegervEXT(vaobj, pname, param); }
+inline void glGetVertexArrayPointervEXT(GLuint vaobj, GLenum pname, void** param) { fp_glGetVertexArrayPointervEXT(vaobj, pname, param); }
+inline void glGetVertexArrayIntegeri_vEXT(GLuint vaobj, GLuint index, GLenum pname, GLint* param) { fp_glGetVertexArrayIntegeri_vEXT(vaobj, index, pname, param); }
+inline void glGetVertexArrayPointeri_vEXT(GLuint vaobj, GLuint index, GLenum pname, void** param) { fp_glGetVertexArrayPointeri_vEXT(vaobj, index, pname, param); }
+inline void* glMapNamedBufferRangeEXT(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access) { return fp_glMapNamedBufferRangeEXT(buffer, offset, length, access); }
+inline void glFlushMappedNamedBufferRangeEXT(GLuint buffer, GLintptr offset, GLsizeiptr length) { fp_glFlushMappedNamedBufferRangeEXT(buffer, offset, length); }
+inline void glNamedBufferStorageEXT(GLuint buffer, GLsizeiptr size, const void* data, GLbitfield flags) { fp_glNamedBufferStorageEXT(buffer, size, data, flags); }
+inline void glClearNamedBufferDataEXT(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void* data) { fp_glClearNamedBufferDataEXT(buffer, internalformat, format, type, data); }
+inline void glClearNamedBufferSubDataEXT(GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void* data) { fp_glClearNamedBufferSubDataEXT(buffer, internalformat, offset, size, format, type, data); }
+inline void glNamedFramebufferParameteriEXT(GLuint framebuffer, GLenum pname, GLint param) { fp_glNamedFramebufferParameteriEXT(framebuffer, pname, param); }
+inline void glGetNamedFramebufferParameterivEXT(GLuint framebuffer, GLenum pname, GLint* params) { fp_glGetNamedFramebufferParameterivEXT(framebuffer, pname, params); }
+inline void glProgramUniform1dEXT(GLuint program, GLint location, GLdouble x) { fp_glProgramUniform1dEXT(program, location, x); }
+inline void glProgramUniform2dEXT(GLuint program, GLint location, GLdouble x, GLdouble y) { fp_glProgramUniform2dEXT(program, location, x, y); }
+inline void glProgramUniform3dEXT(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z) { fp_glProgramUniform3dEXT(program, location, x, y, z); }
+inline void glProgramUniform4dEXT(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w) { fp_glProgramUniform4dEXT(program, location, x, y, z, w); }
+inline void glProgramUniform1dvEXT(GLuint program, GLint location, GLsizei count, const GLdouble* value) { fp_glProgramUniform1dvEXT(program, location, count, value); }
+inline void glProgramUniform2dvEXT(GLuint program, GLint location, GLsizei count, const GLdouble* value) { fp_glProgramUniform2dvEXT(program, location, count, value); }
+inline void glProgramUniform3dvEXT(GLuint program, GLint location, GLsizei count, const GLdouble* value) { fp_glProgramUniform3dvEXT(program, location, count, value); }
+inline void glProgramUniform4dvEXT(GLuint program, GLint location, GLsizei count, const GLdouble* value) { fp_glProgramUniform4dvEXT(program, location, count, value); }
+inline void glProgramUniformMatrix2dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glProgramUniformMatrix2dvEXT(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix3dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glProgramUniformMatrix3dvEXT(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix4dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glProgramUniformMatrix4dvEXT(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix2x3dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glProgramUniformMatrix2x3dvEXT(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix2x4dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glProgramUniformMatrix2x4dvEXT(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix3x2dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glProgramUniformMatrix3x2dvEXT(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix3x4dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glProgramUniformMatrix3x4dvEXT(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix4x2dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glProgramUniformMatrix4x2dvEXT(program, location, count, transpose, value); }
+inline void glProgramUniformMatrix4x3dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) { fp_glProgramUniformMatrix4x3dvEXT(program, location, count, transpose, value); }
+inline void glTextureBufferRangeEXT(GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size) { fp_glTextureBufferRangeEXT(texture, target, internalformat, buffer, offset, size); }
+inline void glTextureStorage1DEXT(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width) { fp_glTextureStorage1DEXT(texture, target, levels, internalformat, width); }
+inline void glTextureStorage2DEXT(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) { fp_glTextureStorage2DEXT(texture, target, levels, internalformat, width, height); }
+inline void glTextureStorage3DEXT(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) { fp_glTextureStorage3DEXT(texture, target, levels, internalformat, width, height, depth); }
+inline void glTextureStorage2DMultisampleEXT(GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) { fp_glTextureStorage2DMultisampleEXT(texture, target, samples, internalformat, width, height, fixedsamplelocations); }
+inline void glTextureStorage3DMultisampleEXT(GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) { fp_glTextureStorage3DMultisampleEXT(texture, target, samples, internalformat, width, height, depth, fixedsamplelocations); }
+inline void glVertexArrayBindVertexBufferEXT(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride) { fp_glVertexArrayBindVertexBufferEXT(vaobj, bindingindex, buffer, offset, stride); }
+inline void glVertexArrayVertexAttribFormatEXT(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset) { fp_glVertexArrayVertexAttribFormatEXT(vaobj, attribindex, size, type, normalized, relativeoffset); }
+inline void glVertexArrayVertexAttribIFormatEXT(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset) { fp_glVertexArrayVertexAttribIFormatEXT(vaobj, attribindex, size, type, relativeoffset); }
+inline void glVertexArrayVertexAttribLFormatEXT(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset) { fp_glVertexArrayVertexAttribLFormatEXT(vaobj, attribindex, size, type, relativeoffset); }
+inline void glVertexArrayVertexAttribBindingEXT(GLuint vaobj, GLuint attribindex, GLuint bindingindex) { fp_glVertexArrayVertexAttribBindingEXT(vaobj, attribindex, bindingindex); }
+inline void glVertexArrayVertexBindingDivisorEXT(GLuint vaobj, GLuint bindingindex, GLuint divisor) { fp_glVertexArrayVertexBindingDivisorEXT(vaobj, bindingindex, divisor); }
+inline void glVertexArrayVertexAttribLOffsetEXT(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset) { fp_glVertexArrayVertexAttribLOffsetEXT(vaobj, buffer, index, size, type, stride, offset); }
+inline void glTexturePageCommitmentEXT(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident) { fp_glTexturePageCommitmentEXT(texture, level, xoffset, yoffset, zoffset, width, height, depth, resident); }
+inline void glVertexArrayVertexAttribDivisorEXT(GLuint vaobj, GLuint index, GLuint divisor) { fp_glVertexArrayVertexAttribDivisorEXT(vaobj, index, divisor); }
+
+/* GL_EXT_discard_framebuffer */
+inline void glDiscardFramebufferEXT(GLenum target, GLsizei numAttachments, const GLenum* attachments) { fp_glDiscardFramebufferEXT(target, numAttachments, attachments); }
+
+/* GL_EXT_disjoint_timer_query */
+inline void glGenQueriesEXT(GLsizei n, GLuint* ids) { fp_glGenQueriesEXT(n, ids); }
+inline void glDeleteQueriesEXT(GLsizei n, const GLuint* ids) { fp_glDeleteQueriesEXT(n, ids); }
+inline GLboolean glIsQueryEXT(GLuint id) { return fp_glIsQueryEXT(id); }
+inline void glBeginQueryEXT(GLenum target, GLuint id) { fp_glBeginQueryEXT(target, id); }
+inline void glEndQueryEXT(GLenum target) { fp_glEndQueryEXT(target); }
+inline void glQueryCounterEXT(GLuint id, GLenum target) { fp_glQueryCounterEXT(id, target); }
+inline void glGetQueryivEXT(GLenum target, GLenum pname, GLint* params) { fp_glGetQueryivEXT(target, pname, params); }
+inline void glGetQueryObjectivEXT(GLuint id, GLenum pname, GLint* params) { fp_glGetQueryObjectivEXT(id, pname, params); }
+inline void glGetQueryObjectuivEXT(GLuint id, GLenum pname, GLuint* params) { fp_glGetQueryObjectuivEXT(id, pname, params); }
+inline void glGetQueryObjecti64vEXT(GLuint id, GLenum pname, GLint64* params) { fp_glGetQueryObjecti64vEXT(id, pname, params); }
+inline void glGetQueryObjectui64vEXT(GLuint id, GLenum pname, GLuint64* params) { fp_glGetQueryObjectui64vEXT(id, pname, params); }
+
+/* GL_EXT_draw_buffers */
+inline void glDrawBuffersEXT(GLsizei n, const GLenum* bufs) { fp_glDrawBuffersEXT(n, bufs); }
+
+/* GL_EXT_draw_buffers2 */
+inline void glColorMaskIndexedEXT(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) { fp_glColorMaskIndexedEXT(index, r, g, b, a); }
+
+/* GL_EXT_draw_buffers_indexed */
+inline void glEnableiEXT(GLenum target, GLuint index) { fp_glEnableiEXT(target, index); }
+inline void glDisableiEXT(GLenum target, GLuint index) { fp_glDisableiEXT(target, index); }
+inline void glBlendEquationiEXT(GLuint buf, GLenum mode) { fp_glBlendEquationiEXT(buf, mode); }
+inline void glBlendEquationSeparateiEXT(GLuint buf, GLenum modeRGB, GLenum modeAlpha) { fp_glBlendEquationSeparateiEXT(buf, modeRGB, modeAlpha); }
+inline void glBlendFunciEXT(GLuint buf, GLenum src, GLenum dst) { fp_glBlendFunciEXT(buf, src, dst); }
+inline void glBlendFuncSeparateiEXT(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) { fp_glBlendFuncSeparateiEXT(buf, srcRGB, dstRGB, srcAlpha, dstAlpha); }
+inline void glColorMaskiEXT(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) { fp_glColorMaskiEXT(index, r, g, b, a); }
+inline GLboolean glIsEnablediEXT(GLenum target, GLuint index) { return fp_glIsEnablediEXT(target, index); }
+
+/* GL_EXT_draw_instanced */
+inline void glDrawArraysInstancedEXT(GLenum mode, GLint start, GLsizei count, GLsizei primcount) { fp_glDrawArraysInstancedEXT(mode, start, count, primcount); }
+inline void glDrawElementsInstancedEXT(GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount) { fp_glDrawElementsInstancedEXT(mode, count, type, indices, primcount); }
+
+/* GL_EXT_framebuffer_blit */
+inline void glBlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) { fp_glBlitFramebufferEXT(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); }
+
+/* GL_EXT_framebuffer_multisample */
+inline void glRenderbufferStorageMultisampleEXT(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) { fp_glRenderbufferStorageMultisampleEXT(target, samples, internalformat, width, height); }
+
+/* GL_EXT_framebuffer_object */
+inline GLboolean glIsRenderbufferEXT(GLuint renderbuffer) { return fp_glIsRenderbufferEXT(renderbuffer); }
+inline void glBindRenderbufferEXT(GLenum target, GLuint renderbuffer) { fp_glBindRenderbufferEXT(target, renderbuffer); }
+inline void glDeleteRenderbuffersEXT(GLsizei n, const GLuint* renderbuffers) { fp_glDeleteRenderbuffersEXT(n, renderbuffers); }
+inline void glGenRenderbuffersEXT(GLsizei n, GLuint* renderbuffers) { fp_glGenRenderbuffersEXT(n, renderbuffers); }
+inline void glRenderbufferStorageEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) { fp_glRenderbufferStorageEXT(target, internalformat, width, height); }
+inline void glGetRenderbufferParameterivEXT(GLenum target, GLenum pname, GLint* params) { fp_glGetRenderbufferParameterivEXT(target, pname, params); }
+inline GLboolean glIsFramebufferEXT(GLuint framebuffer) { return fp_glIsFramebufferEXT(framebuffer); }
+inline void glBindFramebufferEXT(GLenum target, GLuint framebuffer) { fp_glBindFramebufferEXT(target, framebuffer); }
+inline void glDeleteFramebuffersEXT(GLsizei n, const GLuint* framebuffers) { fp_glDeleteFramebuffersEXT(n, framebuffers); }
+inline void glGenFramebuffersEXT(GLsizei n, GLuint* framebuffers) { fp_glGenFramebuffersEXT(n, framebuffers); }
+inline GLenum glCheckFramebufferStatusEXT(GLenum target) { return fp_glCheckFramebufferStatusEXT(target); }
+inline void glFramebufferTexture1DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) { fp_glFramebufferTexture1DEXT(target, attachment, textarget, texture, level); }
+inline void glFramebufferTexture2DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) { fp_glFramebufferTexture2DEXT(target, attachment, textarget, texture, level); }
+inline void glFramebufferTexture3DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) { fp_glFramebufferTexture3DEXT(target, attachment, textarget, texture, level, zoffset); }
+inline void glFramebufferRenderbufferEXT(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) { fp_glFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer); }
+inline void glGetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, GLenum pname, GLint* params) { fp_glGetFramebufferAttachmentParameterivEXT(target, attachment, pname, params); }
+inline void glGenerateMipmapEXT(GLenum target) { fp_glGenerateMipmapEXT(target); }
+
+/* GL_EXT_geometry_shader */
+inline void glFramebufferTextureEXT(GLenum target, GLenum attachment, GLuint texture, GLint level) { fp_glFramebufferTextureEXT(target, attachment, texture, level); }
+
+/* GL_EXT_geometry_shader4 */
+inline void glProgramParameteriEXT(GLuint program, GLenum pname, GLint value) { fp_glProgramParameteriEXT(program, pname, value); }
+
+/* GL_EXT_gpu_program_parameters */
+inline void glProgramEnvParameters4fvEXT(GLenum target, GLuint index, GLsizei count, const GLfloat* params) { fp_glProgramEnvParameters4fvEXT(target, index, count, params); }
+inline void glProgramLocalParameters4fvEXT(GLenum target, GLuint index, GLsizei count, const GLfloat* params) { fp_glProgramLocalParameters4fvEXT(target, index, count, params); }
+
+/* GL_EXT_gpu_shader4 */
+inline void glGetUniformuivEXT(GLuint program, GLint location, GLuint* params) { fp_glGetUniformuivEXT(program, location, params); }
+inline void glBindFragDataLocationEXT(GLuint program, GLuint color, const GLchar* name) { fp_glBindFragDataLocationEXT(program, color, name); }
+inline GLint glGetFragDataLocationEXT(GLuint program, const GLchar* name) { return fp_glGetFragDataLocationEXT(program, name); }
+inline void glUniform1uiEXT(GLint location, GLuint v0) { fp_glUniform1uiEXT(location, v0); }
+inline void glUniform2uiEXT(GLint location, GLuint v0, GLuint v1) { fp_glUniform2uiEXT(location, v0, v1); }
+inline void glUniform3uiEXT(GLint location, GLuint v0, GLuint v1, GLuint v2) { fp_glUniform3uiEXT(location, v0, v1, v2); }
+inline void glUniform4uiEXT(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) { fp_glUniform4uiEXT(location, v0, v1, v2, v3); }
+inline void glUniform1uivEXT(GLint location, GLsizei count, const GLuint* value) { fp_glUniform1uivEXT(location, count, value); }
+inline void glUniform2uivEXT(GLint location, GLsizei count, const GLuint* value) { fp_glUniform2uivEXT(location, count, value); }
+inline void glUniform3uivEXT(GLint location, GLsizei count, const GLuint* value) { fp_glUniform3uivEXT(location, count, value); }
+inline void glUniform4uivEXT(GLint location, GLsizei count, const GLuint* value) { fp_glUniform4uivEXT(location, count, value); }
+
+/* GL_EXT_instanced_arrays */
+inline void glVertexAttribDivisorEXT(GLuint index, GLuint divisor) { fp_glVertexAttribDivisorEXT(index, divisor); }
+
+/* GL_EXT_map_buffer_range */
+inline void* glMapBufferRangeEXT(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) { return fp_glMapBufferRangeEXT(target, offset, length, access); }
+inline void glFlushMappedBufferRangeEXT(GLenum target, GLintptr offset, GLsizeiptr length) { fp_glFlushMappedBufferRangeEXT(target, offset, length); }
+
+/* GL_EXT_multisampled_render_to_texture */
+inline void glFramebufferTexture2DMultisampleEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples) { fp_glFramebufferTexture2DMultisampleEXT(target, attachment, textarget, texture, level, samples); }
+
+/* GL_EXT_multiview_draw_buffers */
+inline void glReadBufferIndexedEXT(GLenum src, GLint index) { fp_glReadBufferIndexedEXT(src, index); }
+inline void glDrawBuffersIndexedEXT(GLint n, const GLenum* location, const GLint* indices) { fp_glDrawBuffersIndexedEXT(n, location, indices); }
+inline void glGetIntegeri_vEXT(GLenum target, GLuint index, GLint* data) { fp_glGetIntegeri_vEXT(target, index, data); }
+
+/* GL_EXT_primitive_bounding_box */
+inline void glPrimitiveBoundingBoxEXT(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW) { fp_glPrimitiveBoundingBoxEXT(minX, minY, minZ, minW, maxX, maxY, maxZ, maxW); }
+
+/* GL_EXT_provoking_vertex */
+inline void glProvokingVertexEXT(GLenum mode) { fp_glProvokingVertexEXT(mode); }
+
+/* GL_EXT_robustness */
+inline GLenum glGetGraphicsResetStatusEXT() { return fp_glGetGraphicsResetStatusEXT(); }
+inline void glReadnPixelsEXT(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void* data) { fp_glReadnPixelsEXT(x, y, width, height, format, type, bufSize, data); }
+inline void glGetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSize, GLfloat* params) { fp_glGetnUniformfvEXT(program, location, bufSize, params); }
+inline void glGetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint* params) { fp_glGetnUniformivEXT(program, location, bufSize, params); }
+
+/* GL_EXT_separate_shader_objects */
+inline void glUseShaderProgramEXT(GLenum type, GLuint program) { fp_glUseShaderProgramEXT(type, program); }
+inline void glActiveProgramEXT(GLuint program) { fp_glActiveProgramEXT(program); }
+inline GLuint glCreateShaderProgramEXT(GLenum type, const GLchar* string) { return fp_glCreateShaderProgramEXT(type, string); }
+inline void glActiveShaderProgramEXT(GLuint pipeline, GLuint program) { fp_glActiveShaderProgramEXT(pipeline, program); }
+inline void glBindProgramPipelineEXT(GLuint pipeline) { fp_glBindProgramPipelineEXT(pipeline); }
+inline GLuint glCreateShaderProgramvEXT(GLenum type, GLsizei count, const GLchar** strings) { return fp_glCreateShaderProgramvEXT(type, count, strings); }
+inline void glDeleteProgramPipelinesEXT(GLsizei n, const GLuint* pipelines) { fp_glDeleteProgramPipelinesEXT(n, pipelines); }
+inline void glGenProgramPipelinesEXT(GLsizei n, GLuint* pipelines) { fp_glGenProgramPipelinesEXT(n, pipelines); }
+inline void glGetProgramPipelineInfoLogEXT(GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar* infoLog) { fp_glGetProgramPipelineInfoLogEXT(pipeline, bufSize, length, infoLog); }
+inline void glGetProgramPipelineivEXT(GLuint pipeline, GLenum pname, GLint* params) { fp_glGetProgramPipelineivEXT(pipeline, pname, params); }
+inline GLboolean glIsProgramPipelineEXT(GLuint pipeline) { return fp_glIsProgramPipelineEXT(pipeline); }
+inline void glUseProgramStagesEXT(GLuint pipeline, GLbitfield stages, GLuint program) { fp_glUseProgramStagesEXT(pipeline, stages, program); }
+inline void glValidateProgramPipelineEXT(GLuint pipeline) { fp_glValidateProgramPipelineEXT(pipeline); }
+
+/* GL_EXT_shader_image_load_store */
+inline void glBindImageTextureEXT(GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format) { fp_glBindImageTextureEXT(index, texture, level, layered, layer, access, format); }
+inline void glMemoryBarrierEXT(GLbitfield barriers) { fp_glMemoryBarrierEXT(barriers); }
+
+/* GL_EXT_stencil_clear_tag */
+inline void glStencilClearTagEXT(GLsizei stencilTagBits, GLuint stencilClearTag) { fp_glStencilClearTagEXT(stencilTagBits, stencilClearTag); }
+
+/* GL_EXT_tessellation_shader */
+inline void glPatchParameteriEXT(GLenum pname, GLint value) { fp_glPatchParameteriEXT(pname, value); }
+
+/* GL_EXT_texture_array */
+inline void glFramebufferTextureLayerEXT(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) { fp_glFramebufferTextureLayerEXT(target, attachment, texture, level, layer); }
+
+/* GL_EXT_texture_border_clamp */
+inline void glTexParameterIivEXT(GLenum target, GLenum pname, const GLint* params) { fp_glTexParameterIivEXT(target, pname, params); }
+inline void glTexParameterIuivEXT(GLenum target, GLenum pname, const GLuint* params) { fp_glTexParameterIuivEXT(target, pname, params); }
+inline void glGetTexParameterIivEXT(GLenum target, GLenum pname, GLint* params) { fp_glGetTexParameterIivEXT(target, pname, params); }
+inline void glGetTexParameterIuivEXT(GLenum target, GLenum pname, GLuint* params) { fp_glGetTexParameterIuivEXT(target, pname, params); }
+inline void glSamplerParameterIivEXT(GLuint sampler, GLenum pname, const GLint* param) { fp_glSamplerParameterIivEXT(sampler, pname, param); }
+inline void glSamplerParameterIuivEXT(GLuint sampler, GLenum pname, const GLuint* param) { fp_glSamplerParameterIuivEXT(sampler, pname, param); }
+inline void glGetSamplerParameterIivEXT(GLuint sampler, GLenum pname, GLint* params) { fp_glGetSamplerParameterIivEXT(sampler, pname, params); }
+inline void glGetSamplerParameterIuivEXT(GLuint sampler, GLenum pname, GLuint* params) { fp_glGetSamplerParameterIuivEXT(sampler, pname, params); }
+
+/* GL_EXT_texture_buffer */
+inline void glTexBufferEXT(GLenum target, GLenum internalformat, GLuint buffer) { fp_glTexBufferEXT(target, internalformat, buffer); }
+inline void glTexBufferRangeEXT(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size) { fp_glTexBufferRangeEXT(target, internalformat, buffer, offset, size); }
+
+/* GL_EXT_texture_integer */
+inline void glClearColorIiEXT(GLint red, GLint green, GLint blue, GLint alpha) { fp_glClearColorIiEXT(red, green, blue, alpha); }
+inline void glClearColorIuiEXT(GLuint red, GLuint green, GLuint blue, GLuint alpha) { fp_glClearColorIuiEXT(red, green, blue, alpha); }
+
+/* GL_EXT_texture_storage */
+inline void glTexStorage1DEXT(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width) { fp_glTexStorage1DEXT(target, levels, internalformat, width); }
+inline void glTexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) { fp_glTexStorage2DEXT(target, levels, internalformat, width, height); }
+inline void glTexStorage3DEXT(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) { fp_glTexStorage3DEXT(target, levels, internalformat, width, height, depth); }
+
+/* GL_EXT_texture_view */
+inline void glTextureViewEXT(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers) { fp_glTextureViewEXT(texture, target, origtexture, internalformat, minlevel, numlevels, minlayer, numlayers); }
+
+/* GL_EXT_transform_feedback */
+inline void glBeginTransformFeedbackEXT(GLenum primitiveMode) { fp_glBeginTransformFeedbackEXT(primitiveMode); }
+inline void glEndTransformFeedbackEXT() { fp_glEndTransformFeedbackEXT(); }
+inline void glBindBufferRangeEXT(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) { fp_glBindBufferRangeEXT(target, index, buffer, offset, size); }
+inline void glBindBufferOffsetEXT(GLenum target, GLuint index, GLuint buffer, GLintptr offset) { fp_glBindBufferOffsetEXT(target, index, buffer, offset); }
+inline void glBindBufferBaseEXT(GLenum target, GLuint index, GLuint buffer) { fp_glBindBufferBaseEXT(target, index, buffer); }
+inline void glTransformFeedbackVaryingsEXT(GLuint program, GLsizei count, const GLchar** varyings, GLenum bufferMode) { fp_glTransformFeedbackVaryingsEXT(program, count, varyings, bufferMode); }
+inline void glGetTransformFeedbackVaryingEXT(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name) { fp_glGetTransformFeedbackVaryingEXT(program, index, bufSize, length, size, type, name); }
+
+/* GL_EXT_vertex_attrib_64bit */
+inline void glVertexAttribL1dEXT(GLuint index, GLdouble x) { fp_glVertexAttribL1dEXT(index, x); }
+inline void glVertexAttribL2dEXT(GLuint index, GLdouble x, GLdouble y) { fp_glVertexAttribL2dEXT(index, x, y); }
+inline void glVertexAttribL3dEXT(GLuint index, GLdouble x, GLdouble y, GLdouble z) { fp_glVertexAttribL3dEXT(index, x, y, z); }
+inline void glVertexAttribL4dEXT(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) { fp_glVertexAttribL4dEXT(index, x, y, z, w); }
+inline void glVertexAttribL1dvEXT(GLuint index, const GLdouble* v) { fp_glVertexAttribL1dvEXT(index, v); }
+inline void glVertexAttribL2dvEXT(GLuint index, const GLdouble* v) { fp_glVertexAttribL2dvEXT(index, v); }
+inline void glVertexAttribL3dvEXT(GLuint index, const GLdouble* v) { fp_glVertexAttribL3dvEXT(index, v); }
+inline void glVertexAttribL4dvEXT(GLuint index, const GLdouble* v) { fp_glVertexAttribL4dvEXT(index, v); }
+inline void glVertexAttribLPointerEXT(GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer) { fp_glVertexAttribLPointerEXT(index, size, type, stride, pointer); }
+inline void glGetVertexAttribLdvEXT(GLuint index, GLenum pname, GLdouble* params) { fp_glGetVertexAttribLdvEXT(index, pname, params); }
+
+/* GL_EXT_x11_sync_object */
+inline GLsync glImportSyncEXT(GLenum external_sync_type, GLintptr external_sync, GLbitfield flags) { return fp_glImportSyncEXT(external_sync_type, external_sync, flags); }
+
+/* GL_OES_EGL_image */
+inline void glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image) { fp_glEGLImageTargetTexture2DOES(target, image); }
+inline void glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image) { fp_glEGLImageTargetRenderbufferStorageOES(target, image); }
+
+/* GL_OES_get_program_binary */
+inline void glGetProgramBinaryOES(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, void* binary) { fp_glGetProgramBinaryOES(program, bufSize, length, binaryFormat, binary); }
+inline void glProgramBinaryOES(GLuint program, GLenum binaryFormat, const void* binary, GLint length) { fp_glProgramBinaryOES(program, binaryFormat, binary, length); }
+
+/* GL_OES_mapbuffer */
+inline void* glMapBufferOES(GLenum target, GLenum access) { return fp_glMapBufferOES(target, access); }
+inline GLboolean glUnmapBufferOES(GLenum target) { return fp_glUnmapBufferOES(target); }
+inline void glGetBufferPointervOES(GLenum target, GLenum pname, void** params) { fp_glGetBufferPointervOES(target, pname, params); }
+
+/* GL_OES_sample_shading */
+inline void glMinSampleShadingOES(GLfloat value) { fp_glMinSampleShadingOES(value); }
+
+/* GL_OES_texture_3D */
+inline void glTexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels) { fp_glTexImage3DOES(target, level, internalformat, width, height, depth, border, format, type, pixels); }
+inline void glTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels) { fp_glTexSubImage3DOES(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels); }
+inline void glCopyTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) { fp_glCopyTexSubImage3DOES(target, level, xoffset, yoffset, zoffset, x, y, width, height); }
+inline void glCompressedTexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data) { fp_glCompressedTexImage3DOES(target, level, internalformat, width, height, depth, border, imageSize, data); }
+inline void glCompressedTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data) { fp_glCompressedTexSubImage3DOES(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); }
+inline void glFramebufferTexture3DOES(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) { fp_glFramebufferTexture3DOES(target, attachment, textarget, texture, level, zoffset); }
+
+/* GL_OES_texture_storage_multisample_2d_array */
+inline void glTexStorage3DMultisampleOES(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) { fp_glTexStorage3DMultisampleOES(target, samples, internalformat, width, height, depth, fixedsamplelocations); }
+
+/* GL_OES_vertex_array_object */
+inline void glBindVertexArrayOES(GLuint array) { fp_glBindVertexArrayOES(array); }
+inline void glDeleteVertexArraysOES(GLsizei n, const GLuint* arrays) { fp_glDeleteVertexArraysOES(n, arrays); }
+inline void glGenVertexArraysOES(GLsizei n, GLuint* arrays) { fp_glGenVertexArraysOES(n, arrays); }
+inline GLboolean glIsVertexArrayOES(GLuint array) { return fp_glIsVertexArrayOES(array); }
+
+/* GL_AMD_debug_output */
+inline void glDebugMessageEnableAMD(GLenum category, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled) { fp_glDebugMessageEnableAMD(category, severity, count, ids, enabled); }
+inline void glDebugMessageInsertAMD(GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar* buf) { fp_glDebugMessageInsertAMD(category, severity, id, length, buf); }
+inline void glDebugMessageCallbackAMD(GLDEBUGPROCAMD callback, void* userParam) { fp_glDebugMessageCallbackAMD(callback, userParam); }
+inline GLuint glGetDebugMessageLogAMD(GLuint count, GLsizei bufsize, GLenum* categories, GLuint* severities, GLuint* ids, GLsizei* lengths, GLchar* message) { return fp_glGetDebugMessageLogAMD(count, bufsize, categories, severities, ids, lengths, message); }
+
+/* GL_AMD_draw_buffers_blend */
+inline void glBlendFuncIndexedAMD(GLuint buf, GLenum src, GLenum dst) { fp_glBlendFuncIndexedAMD(buf, src, dst); }
+inline void glBlendFuncSeparateIndexedAMD(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) { fp_glBlendFuncSeparateIndexedAMD(buf, srcRGB, dstRGB, srcAlpha, dstAlpha); }
+inline void glBlendEquationIndexedAMD(GLuint buf, GLenum mode) { fp_glBlendEquationIndexedAMD(buf, mode); }
+inline void glBlendEquationSeparateIndexedAMD(GLuint buf, GLenum modeRGB, GLenum modeAlpha) { fp_glBlendEquationSeparateIndexedAMD(buf, modeRGB, modeAlpha); }
+
+/* GL_AMD_gpu_shader_int64 */
+inline void glUniform1i64NV(GLint location, GLint64EXT x) { fp_glUniform1i64NV(location, x); }
+inline void glUniform2i64NV(GLint location, GLint64EXT x, GLint64EXT y) { fp_glUniform2i64NV(location, x, y); }
+inline void glUniform3i64NV(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z) { fp_glUniform3i64NV(location, x, y, z); }
+inline void glUniform4i64NV(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w) { fp_glUniform4i64NV(location, x, y, z, w); }
+inline void glUniform1i64vNV(GLint location, GLsizei count, const GLint64EXT* value) { fp_glUniform1i64vNV(location, count, value); }
+inline void glUniform2i64vNV(GLint location, GLsizei count, const GLint64EXT* value) { fp_glUniform2i64vNV(location, count, value); }
+inline void glUniform3i64vNV(GLint location, GLsizei count, const GLint64EXT* value) { fp_glUniform3i64vNV(location, count, value); }
+inline void glUniform4i64vNV(GLint location, GLsizei count, const GLint64EXT* value) { fp_glUniform4i64vNV(location, count, value); }
+inline void glUniform1ui64NV(GLint location, GLuint64EXT x) { fp_glUniform1ui64NV(location, x); }
+inline void glUniform2ui64NV(GLint location, GLuint64EXT x, GLuint64EXT y) { fp_glUniform2ui64NV(location, x, y); }
+inline void glUniform3ui64NV(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z) { fp_glUniform3ui64NV(location, x, y, z); }
+inline void glUniform4ui64NV(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w) { fp_glUniform4ui64NV(location, x, y, z, w); }
+inline void glUniform1ui64vNV(GLint location, GLsizei count, const GLuint64EXT* value) { fp_glUniform1ui64vNV(location, count, value); }
+inline void glUniform2ui64vNV(GLint location, GLsizei count, const GLuint64EXT* value) { fp_glUniform2ui64vNV(location, count, value); }
+inline void glUniform3ui64vNV(GLint location, GLsizei count, const GLuint64EXT* value) { fp_glUniform3ui64vNV(location, count, value); }
+inline void glUniform4ui64vNV(GLint location, GLsizei count, const GLuint64EXT* value) { fp_glUniform4ui64vNV(location, count, value); }
+inline void glGetUniformi64vNV(GLuint program, GLint location, GLint64EXT* params) { fp_glGetUniformi64vNV(program, location, params); }
+inline void glGetUniformui64vNV(GLuint program, GLint location, GLuint64EXT* params) { fp_glGetUniformui64vNV(program, location, params); }
+inline void glProgramUniform1i64NV(GLuint program, GLint location, GLint64EXT x) { fp_glProgramUniform1i64NV(program, location, x); }
+inline void glProgramUniform2i64NV(GLuint program, GLint location, GLint64EXT x, GLint64EXT y) { fp_glProgramUniform2i64NV(program, location, x, y); }
+inline void glProgramUniform3i64NV(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z) { fp_glProgramUniform3i64NV(program, location, x, y, z); }
+inline void glProgramUniform4i64NV(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w) { fp_glProgramUniform4i64NV(program, location, x, y, z, w); }
+inline void glProgramUniform1i64vNV(GLuint program, GLint location, GLsizei count, const GLint64EXT* value) { fp_glProgramUniform1i64vNV(program, location, count, value); }
+inline void glProgramUniform2i64vNV(GLuint program, GLint location, GLsizei count, const GLint64EXT* value) { fp_glProgramUniform2i64vNV(program, location, count, value); }
+inline void glProgramUniform3i64vNV(GLuint program, GLint location, GLsizei count, const GLint64EXT* value) { fp_glProgramUniform3i64vNV(program, location, count, value); }
+inline void glProgramUniform4i64vNV(GLuint program, GLint location, GLsizei count, const GLint64EXT* value) { fp_glProgramUniform4i64vNV(program, location, count, value); }
+inline void glProgramUniform1ui64NV(GLuint program, GLint location, GLuint64EXT x) { fp_glProgramUniform1ui64NV(program, location, x); }
+inline void glProgramUniform2ui64NV(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y) { fp_glProgramUniform2ui64NV(program, location, x, y); }
+inline void glProgramUniform3ui64NV(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z) { fp_glProgramUniform3ui64NV(program, location, x, y, z); }
+inline void glProgramUniform4ui64NV(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w) { fp_glProgramUniform4ui64NV(program, location, x, y, z, w); }
+inline void glProgramUniform1ui64vNV(GLuint program, GLint location, GLsizei count, const GLuint64EXT* value) { fp_glProgramUniform1ui64vNV(program, location, count, value); }
+inline void glProgramUniform2ui64vNV(GLuint program, GLint location, GLsizei count, const GLuint64EXT* value) { fp_glProgramUniform2ui64vNV(program, location, count, value); }
+inline void glProgramUniform3ui64vNV(GLuint program, GLint location, GLsizei count, const GLuint64EXT* value) { fp_glProgramUniform3ui64vNV(program, location, count, value); }
+inline void glProgramUniform4ui64vNV(GLuint program, GLint location, GLsizei count, const GLuint64EXT* value) { fp_glProgramUniform4ui64vNV(program, location, count, value); }
+
+/* GL_AMD_interleaved_elements */
+inline void glVertexAttribParameteriAMD(GLuint index, GLenum pname, GLint param) { fp_glVertexAttribParameteriAMD(index, pname, param); }
+
+/* GL_AMD_multi_draw_indirect */
+inline void glMultiDrawArraysIndirectAMD(GLenum mode, const void* indirect, GLsizei primcount, GLsizei stride) { fp_glMultiDrawArraysIndirectAMD(mode, indirect, primcount, stride); }
+inline void glMultiDrawElementsIndirectAMD(GLenum mode, GLenum type, const void* indirect, GLsizei primcount, GLsizei stride) { fp_glMultiDrawElementsIndirectAMD(mode, type, indirect, primcount, stride); }
+
+/* GL_AMD_name_gen_delete */
+inline void glGenNamesAMD(GLenum identifier, GLuint num, GLuint* names) { fp_glGenNamesAMD(identifier, num, names); }
+inline void glDeleteNamesAMD(GLenum identifier, GLuint num, const GLuint* names) { fp_glDeleteNamesAMD(identifier, num, names); }
+inline GLboolean glIsNameAMD(GLenum identifier, GLuint name) { return fp_glIsNameAMD(identifier, name); }
+
+/* GL_AMD_occlusion_query_event */
+inline void glQueryObjectParameteruiAMD(GLenum target, GLuint id, GLenum pname, GLuint param) { fp_glQueryObjectParameteruiAMD(target, id, pname, param); }
+
+/* GL_AMD_performance_monitor */
+inline void glGetPerfMonitorGroupsAMD(GLint* numGroups, GLsizei groupsSize, GLuint* groups) { fp_glGetPerfMonitorGroupsAMD(numGroups, groupsSize, groups); }
+inline void glGetPerfMonitorCountersAMD(GLuint group, GLint* numCounters, GLint* maxActiveCounters, GLsizei counterSize, GLuint* counters) { fp_glGetPerfMonitorCountersAMD(group, numCounters, maxActiveCounters, counterSize, counters); }
+inline void glGetPerfMonitorGroupStringAMD(GLuint group, GLsizei bufSize, GLsizei* length, GLchar* groupString) { fp_glGetPerfMonitorGroupStringAMD(group, bufSize, length, groupString); }
+inline void glGetPerfMonitorCounterStringAMD(GLuint group, GLuint counter, GLsizei bufSize, GLsizei* length, GLchar* counterString) { fp_glGetPerfMonitorCounterStringAMD(group, counter, bufSize, length, counterString); }
+inline void glGetPerfMonitorCounterInfoAMD(GLuint group, GLuint counter, GLenum pname, void* data) { fp_glGetPerfMonitorCounterInfoAMD(group, counter, pname, data); }
+inline void glGenPerfMonitorsAMD(GLsizei n, GLuint* monitors) { fp_glGenPerfMonitorsAMD(n, monitors); }
+inline void glDeletePerfMonitorsAMD(GLsizei n, GLuint* monitors) { fp_glDeletePerfMonitorsAMD(n, monitors); }
+inline void glSelectPerfMonitorCountersAMD(GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint* counterList) { fp_glSelectPerfMonitorCountersAMD(monitor, enable, group, numCounters, counterList); }
+inline void glBeginPerfMonitorAMD(GLuint monitor) { fp_glBeginPerfMonitorAMD(monitor); }
+inline void glEndPerfMonitorAMD(GLuint monitor) { fp_glEndPerfMonitorAMD(monitor); }
+inline void glGetPerfMonitorCounterDataAMD(GLuint monitor, GLenum pname, GLsizei dataSize, GLuint* data, GLint* bytesWritten) { fp_glGetPerfMonitorCounterDataAMD(monitor, pname, dataSize, data, bytesWritten); }
+
+/* GL_AMD_sample_positions */
+inline void glSetMultisamplefvAMD(GLenum pname, GLuint index, const GLfloat* val) { fp_glSetMultisamplefvAMD(pname, index, val); }
+
+/* GL_AMD_sparse_texture */
+inline void glTexStorageSparseAMD(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags) { fp_glTexStorageSparseAMD(target, internalFormat, width, height, depth, layers, flags); }
+inline void glTextureStorageSparseAMD(GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags) { fp_glTextureStorageSparseAMD(texture, target, internalFormat, width, height, depth, layers, flags); }
+
+/* GL_AMD_stencil_operation_extended */
+inline void glStencilOpValueAMD(GLenum face, GLuint value) { fp_glStencilOpValueAMD(face, value); }
+
+/* GL_AMD_vertex_shader_tessellator */
+inline void glTessellationFactorAMD(GLfloat factor) { fp_glTessellationFactorAMD(factor); }
+inline void glTessellationModeAMD(GLenum mode) { fp_glTessellationModeAMD(mode); }
+
+/* GL_ANGLE_framebuffer_blit */
+inline void glBlitFramebufferANGLE(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) { fp_glBlitFramebufferANGLE(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); }
+
+/* GL_ANGLE_framebuffer_multisample */
+inline void glRenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) { fp_glRenderbufferStorageMultisampleANGLE(target, samples, internalformat, width, height); }
+
+/* GL_ANGLE_instanced_arrays */
+inline void glDrawArraysInstancedANGLE(GLenum mode, GLint first, GLsizei count, GLsizei primcount) { fp_glDrawArraysInstancedANGLE(mode, first, count, primcount); }
+inline void glDrawElementsInstancedANGLE(GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount) { fp_glDrawElementsInstancedANGLE(mode, count, type, indices, primcount); }
+inline void glVertexAttribDivisorANGLE(GLuint index, GLuint divisor) { fp_glVertexAttribDivisorANGLE(index, divisor); }
+
+/* GL_ANGLE_translated_shader_source */
+inline void glGetTranslatedShaderSourceANGLE(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source) { fp_glGetTranslatedShaderSourceANGLE(shader, bufsize, length, source); }
+
+/* GL_APPLE_copy_texture_levels */
+inline void glCopyTextureLevelsAPPLE(GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount) { fp_glCopyTextureLevelsAPPLE(destinationTexture, sourceTexture, sourceBaseLevel, sourceLevelCount); }
+
+/* GL_APPLE_element_array */
+inline void glElementPointerAPPLE(GLenum type, const void* pointer) { fp_glElementPointerAPPLE(type, pointer); }
+inline void glDrawElementArrayAPPLE(GLenum mode, GLint first, GLsizei count) { fp_glDrawElementArrayAPPLE(mode, first, count); }
+inline void glDrawRangeElementArrayAPPLE(GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count) { fp_glDrawRangeElementArrayAPPLE(mode, start, end, first, count); }
+inline void glMultiDrawElementArrayAPPLE(GLenum mode, const GLint* first, const GLsizei* count, GLsizei primcount) { fp_glMultiDrawElementArrayAPPLE(mode, first, count, primcount); }
+inline void glMultiDrawRangeElementArrayAPPLE(GLenum mode, GLuint start, GLuint end, const GLint* first, const GLsizei* count, GLsizei primcount) { fp_glMultiDrawRangeElementArrayAPPLE(mode, start, end, first, count, primcount); }
+
+/* GL_APPLE_fence */
+inline void glGenFencesAPPLE(GLsizei n, GLuint* fences) { fp_glGenFencesAPPLE(n, fences); }
+inline void glDeleteFencesAPPLE(GLsizei n, const GLuint* fences) { fp_glDeleteFencesAPPLE(n, fences); }
+inline void glSetFenceAPPLE(GLuint fence) { fp_glSetFenceAPPLE(fence); }
+inline GLboolean glIsFenceAPPLE(GLuint fence) { return fp_glIsFenceAPPLE(fence); }
+inline GLboolean glTestFenceAPPLE(GLuint fence) { return fp_glTestFenceAPPLE(fence); }
+inline void glFinishFenceAPPLE(GLuint fence) { fp_glFinishFenceAPPLE(fence); }
+inline GLboolean glTestObjectAPPLE(GLenum object, GLuint name) { return fp_glTestObjectAPPLE(object, name); }
+inline void glFinishObjectAPPLE(GLenum object, GLint name) { fp_glFinishObjectAPPLE(object, name); }
+
+/* GL_APPLE_flush_buffer_range */
+inline void glBufferParameteriAPPLE(GLenum target, GLenum pname, GLint param) { fp_glBufferParameteriAPPLE(target, pname, param); }
+inline void glFlushMappedBufferRangeAPPLE(GLenum target, GLintptr offset, GLsizeiptr size) { fp_glFlushMappedBufferRangeAPPLE(target, offset, size); }
+
+/* GL_APPLE_framebuffer_multisample */
+inline void glRenderbufferStorageMultisampleAPPLE(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) { fp_glRenderbufferStorageMultisampleAPPLE(target, samples, internalformat, width, height); }
+inline void glResolveMultisampleFramebufferAPPLE() { fp_glResolveMultisampleFramebufferAPPLE(); }
+
+/* GL_APPLE_object_purgeable */
+inline GLenum glObjectPurgeableAPPLE(GLenum objectType, GLuint name, GLenum option) { return fp_glObjectPurgeableAPPLE(objectType, name, option); }
+inline GLenum glObjectUnpurgeableAPPLE(GLenum objectType, GLuint name, GLenum option) { return fp_glObjectUnpurgeableAPPLE(objectType, name, option); }
+inline void glGetObjectParameterivAPPLE(GLenum objectType, GLuint name, GLenum pname, GLint* params) { fp_glGetObjectParameterivAPPLE(objectType, name, pname, params); }
+
+/* GL_APPLE_sync */
+inline GLsync glFenceSyncAPPLE(GLenum condition, GLbitfield flags) { return fp_glFenceSyncAPPLE(condition, flags); }
+inline GLboolean glIsSyncAPPLE(GLsync sync) { return fp_glIsSyncAPPLE(sync); }
+inline void glDeleteSyncAPPLE(GLsync sync) { fp_glDeleteSyncAPPLE(sync); }
+inline GLenum glClientWaitSyncAPPLE(GLsync sync, GLbitfield flags, GLuint64 timeout) { return fp_glClientWaitSyncAPPLE(sync, flags, timeout); }
+inline void glWaitSyncAPPLE(GLsync sync, GLbitfield flags, GLuint64 timeout) { fp_glWaitSyncAPPLE(sync, flags, timeout); }
+inline void glGetInteger64vAPPLE(GLenum pname, GLint64* params) { fp_glGetInteger64vAPPLE(pname, params); }
+inline void glGetSyncivAPPLE(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) { fp_glGetSyncivAPPLE(sync, pname, bufSize, length, values); }
+
+/* GL_APPLE_texture_range */
+inline void glTextureRangeAPPLE(GLenum target, GLsizei length, const void* pointer) { fp_glTextureRangeAPPLE(target, length, pointer); }
+inline void glGetTexParameterPointervAPPLE(GLenum target, GLenum pname, void** params) { fp_glGetTexParameterPointervAPPLE(target, pname, params); }
+
+/* GL_APPLE_vertex_array_object */
+inline void glBindVertexArrayAPPLE(GLuint array) { fp_glBindVertexArrayAPPLE(array); }
+inline void glDeleteVertexArraysAPPLE(GLsizei n, const GLuint* arrays) { fp_glDeleteVertexArraysAPPLE(n, arrays); }
+inline void glGenVertexArraysAPPLE(GLsizei n, GLuint* arrays) { fp_glGenVertexArraysAPPLE(n, arrays); }
+inline GLboolean glIsVertexArrayAPPLE(GLuint array) { return fp_glIsVertexArrayAPPLE(array); }
+
+/* GL_APPLE_vertex_array_range */
+inline void glVertexArrayRangeAPPLE(GLsizei length, void* pointer) { fp_glVertexArrayRangeAPPLE(length, pointer); }
+inline void glFlushVertexArrayRangeAPPLE(GLsizei length, void* pointer) { fp_glFlushVertexArrayRangeAPPLE(length, pointer); }
+inline void glVertexArrayParameteriAPPLE(GLenum pname, GLint param) { fp_glVertexArrayParameteriAPPLE(pname, param); }
+
+/* GL_APPLE_vertex_program_evaluators */
+inline void glEnableVertexAttribAPPLE(GLuint index, GLenum pname) { fp_glEnableVertexAttribAPPLE(index, pname); }
+inline void glDisableVertexAttribAPPLE(GLuint index, GLenum pname) { fp_glDisableVertexAttribAPPLE(index, pname); }
+inline GLboolean glIsVertexAttribEnabledAPPLE(GLuint index, GLenum pname) { return fp_glIsVertexAttribEnabledAPPLE(index, pname); }
+inline void glMapVertexAttrib1dAPPLE(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points) { fp_glMapVertexAttrib1dAPPLE(index, size, u1, u2, stride, order, points); }
+inline void glMapVertexAttrib1fAPPLE(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points) { fp_glMapVertexAttrib1fAPPLE(index, size, u1, u2, stride, order, points); }
+inline void glMapVertexAttrib2dAPPLE(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points) { fp_glMapVertexAttrib2dAPPLE(index, size, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); }
+inline void glMapVertexAttrib2fAPPLE(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points) { fp_glMapVertexAttrib2fAPPLE(index, size, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); }
+
+/* GL_GREMEDY_frame_terminator */
+inline void glFrameTerminatorGREMEDY() { fp_glFrameTerminatorGREMEDY(); }
+
+/* GL_GREMEDY_string_marker */
+inline void glStringMarkerGREMEDY(GLsizei len, const void* string) { fp_glStringMarkerGREMEDY(len, string); }
+
+/* GL_IMG_multisampled_render_to_texture */
+inline void glRenderbufferStorageMultisampleIMG(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) { fp_glRenderbufferStorageMultisampleIMG(target, samples, internalformat, width, height); }
+inline void glFramebufferTexture2DMultisampleIMG(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples) { fp_glFramebufferTexture2DMultisampleIMG(target, attachment, textarget, texture, level, samples); }
+
+/* GL_INGR_blend_func_separate */
+inline void glBlendFuncSeparateINGR(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) { fp_glBlendFuncSeparateINGR(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); }
+
+/* GL_INTEL_map_texture */
+inline void glSyncTextureINTEL(GLuint texture) { fp_glSyncTextureINTEL(texture); }
+inline void glUnmapTexture2DINTEL(GLuint texture, GLint level) { fp_glUnmapTexture2DINTEL(texture, level); }
+inline void* glMapTexture2DINTEL(GLuint texture, GLint level, GLbitfield access, GLint* stride, GLenum* layout) { return fp_glMapTexture2DINTEL(texture, level, access, stride, layout); }
+
+/* GL_INTEL_performance_query */
+inline void glBeginPerfQueryINTEL(GLuint queryHandle) { fp_glBeginPerfQueryINTEL(queryHandle); }
+inline void glCreatePerfQueryINTEL(GLuint queryId, GLuint* queryHandle) { fp_glCreatePerfQueryINTEL(queryId, queryHandle); }
+inline void glDeletePerfQueryINTEL(GLuint queryHandle) { fp_glDeletePerfQueryINTEL(queryHandle); }
+inline void glEndPerfQueryINTEL(GLuint queryHandle) { fp_glEndPerfQueryINTEL(queryHandle); }
+inline void glGetFirstPerfQueryIdINTEL(GLuint* queryId) { fp_glGetFirstPerfQueryIdINTEL(queryId); }
+inline void glGetNextPerfQueryIdINTEL(GLuint queryId, GLuint* nextQueryId) { fp_glGetNextPerfQueryIdINTEL(queryId, nextQueryId); }
+inline void glGetPerfCounterInfoINTEL(GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar* counterName, GLuint counterDescLength, GLchar* counterDesc, GLuint* counterOffset, GLuint* counterDataSize, GLuint* counterTypeEnum, GLuint* counterDataTypeEnum, GLuint64* rawCounterMaxValue) { fp_glGetPerfCounterInfoINTEL(queryId, counterId, counterNameLength, counterName, counterDescLength, counterDesc, counterOffset, counterDataSize, counterTypeEnum, counterDataTypeEnum, rawCounterMaxValue); }
+inline void glGetPerfQueryDataINTEL(GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid* data, GLuint* bytesWritten) { fp_glGetPerfQueryDataINTEL(queryHandle, flags, dataSize, data, bytesWritten); }
+inline void glGetPerfQueryIdByNameINTEL(GLchar* queryName, GLuint* queryId) { fp_glGetPerfQueryIdByNameINTEL(queryName, queryId); }
+inline void glGetPerfQueryInfoINTEL(GLuint queryId, GLuint queryNameLength, GLchar* queryName, GLuint* dataSize, GLuint* noCounters, GLuint* noInstances, GLuint* capsMask) { fp_glGetPerfQueryInfoINTEL(queryId, queryNameLength, queryName, dataSize, noCounters, noInstances, capsMask); }
+
+/* GL_NV_bindless_multi_draw_indirect */
+inline void glMultiDrawArraysIndirectBindlessNV(GLenum mode, const void* indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount) { fp_glMultiDrawArraysIndirectBindlessNV(mode, indirect, drawCount, stride, vertexBufferCount); }
+inline void glMultiDrawElementsIndirectBindlessNV(GLenum mode, GLenum type, const void* indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount) { fp_glMultiDrawElementsIndirectBindlessNV(mode, type, indirect, drawCount, stride, vertexBufferCount); }
+
+/* GL_NV_bindless_multi_draw_indirect_count */
+inline void glMultiDrawArraysIndirectBindlessCountNV(GLenum mode, const void* indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount) { fp_glMultiDrawArraysIndirectBindlessCountNV(mode, indirect, drawCount, maxDrawCount, stride, vertexBufferCount); }
+inline void glMultiDrawElementsIndirectBindlessCountNV(GLenum mode, GLenum type, const void* indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount) { fp_glMultiDrawElementsIndirectBindlessCountNV(mode, type, indirect, drawCount, maxDrawCount, stride, vertexBufferCount); }
+
+/* GL_NV_bindless_texture */
+inline GLuint64 glGetTextureHandleNV(GLuint texture) { return fp_glGetTextureHandleNV(texture); }
+inline GLuint64 glGetTextureSamplerHandleNV(GLuint texture, GLuint sampler) { return fp_glGetTextureSamplerHandleNV(texture, sampler); }
+inline void glMakeTextureHandleResidentNV(GLuint64 handle) { fp_glMakeTextureHandleResidentNV(handle); }
+inline void glMakeTextureHandleNonResidentNV(GLuint64 handle) { fp_glMakeTextureHandleNonResidentNV(handle); }
+inline GLuint64 glGetImageHandleNV(GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format) { return fp_glGetImageHandleNV(texture, level, layered, layer, format); }
+inline void glMakeImageHandleResidentNV(GLuint64 handle, GLenum access) { fp_glMakeImageHandleResidentNV(handle, access); }
+inline void glMakeImageHandleNonResidentNV(GLuint64 handle) { fp_glMakeImageHandleNonResidentNV(handle); }
+inline void glUniformHandleui64NV(GLint location, GLuint64 value) { fp_glUniformHandleui64NV(location, value); }
+inline void glUniformHandleui64vNV(GLint location, GLsizei count, const GLuint64* value) { fp_glUniformHandleui64vNV(location, count, value); }
+inline void glProgramUniformHandleui64NV(GLuint program, GLint location, GLuint64 value) { fp_glProgramUniformHandleui64NV(program, location, value); }
+inline void glProgramUniformHandleui64vNV(GLuint program, GLint location, GLsizei count, const GLuint64* values) { fp_glProgramUniformHandleui64vNV(program, location, count, values); }
+inline GLboolean glIsTextureHandleResidentNV(GLuint64 handle) { return fp_glIsTextureHandleResidentNV(handle); }
+inline GLboolean glIsImageHandleResidentNV(GLuint64 handle) { return fp_glIsImageHandleResidentNV(handle); }
+
+/* GL_NV_blend_equation_advanced */
+inline void glBlendParameteriNV(GLenum pname, GLint value) { fp_glBlendParameteriNV(pname, value); }
+inline void glBlendBarrierNV() { fp_glBlendBarrierNV(); }
+
+/* GL_NV_conditional_render */
+inline void glBeginConditionalRenderNV(GLuint id, GLenum mode) { fp_glBeginConditionalRenderNV(id, mode); }
+inline void glEndConditionalRenderNV() { fp_glEndConditionalRenderNV(); }
+
+/* GL_NV_copy_buffer */
+inline void glCopyBufferSubDataNV(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) { fp_glCopyBufferSubDataNV(readTarget, writeTarget, readOffset, writeOffset, size); }
+
+/* GL_NV_copy_image */
+inline void glCopyImageSubDataNV(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth) { fp_glCopyImageSubDataNV(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, width, height, depth); }
+
+/* GL_NV_coverage_sample */
+inline void glCoverageMaskNV(GLboolean mask) { fp_glCoverageMaskNV(mask); }
+inline void glCoverageOperationNV(GLenum operation) { fp_glCoverageOperationNV(operation); }
+
+/* GL_NV_depth_buffer_float */
+inline void glDepthRangedNV(GLdouble zNear, GLdouble zFar) { fp_glDepthRangedNV(zNear, zFar); }
+inline void glClearDepthdNV(GLdouble depth) { fp_glClearDepthdNV(depth); }
+inline void glDepthBoundsdNV(GLdouble zmin, GLdouble zmax) { fp_glDepthBoundsdNV(zmin, zmax); }
+
+/* GL_NV_draw_buffers */
+inline void glDrawBuffersNV(GLsizei n, const GLenum* bufs) { fp_glDrawBuffersNV(n, bufs); }
+
+/* GL_NV_draw_instanced */
+inline void glDrawArraysInstancedNV(GLenum mode, GLint first, GLsizei count, GLsizei primcount) { fp_glDrawArraysInstancedNV(mode, first, count, primcount); }
+inline void glDrawElementsInstancedNV(GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount) { fp_glDrawElementsInstancedNV(mode, count, type, indices, primcount); }
+
+/* GL_NV_draw_texture */
+inline void glDrawTextureNV(GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1) { fp_glDrawTextureNV(texture, sampler, x0, y0, x1, y1, z, s0, t0, s1, t1); }
+
+/* GL_NV_explicit_multisample */
+inline void glGetMultisamplefvNV(GLenum pname, GLuint index, GLfloat* val) { fp_glGetMultisamplefvNV(pname, index, val); }
+inline void glSampleMaskIndexedNV(GLuint index, GLbitfield mask) { fp_glSampleMaskIndexedNV(index, mask); }
+inline void glTexRenderbufferNV(GLenum target, GLuint renderbuffer) { fp_glTexRenderbufferNV(target, renderbuffer); }
+
+/* GL_NV_fence */
+inline void glDeleteFencesNV(GLsizei n, const GLuint* fences) { fp_glDeleteFencesNV(n, fences); }
+inline void glGenFencesNV(GLsizei n, GLuint* fences) { fp_glGenFencesNV(n, fences); }
+inline GLboolean glIsFenceNV(GLuint fence) { return fp_glIsFenceNV(fence); }
+inline GLboolean glTestFenceNV(GLuint fence) { return fp_glTestFenceNV(fence); }
+inline void glGetFenceivNV(GLuint fence, GLenum pname, GLint* params) { fp_glGetFenceivNV(fence, pname, params); }
+inline void glFinishFenceNV(GLuint fence) { fp_glFinishFenceNV(fence); }
+inline void glSetFenceNV(GLuint fence, GLenum condition) { fp_glSetFenceNV(fence, condition); }
+
+/* GL_NV_framebuffer_blit */
+inline void glBlitFramebufferNV(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) { fp_glBlitFramebufferNV(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); }
+
+/* GL_NV_framebuffer_multisample */
+inline void glRenderbufferStorageMultisampleNV(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) { fp_glRenderbufferStorageMultisampleNV(target, samples, internalformat, width, height); }
+
+/* GL_NV_framebuffer_multisample_coverage */
+inline void glRenderbufferStorageMultisampleCoverageNV(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height) { fp_glRenderbufferStorageMultisampleCoverageNV(target, coverageSamples, colorSamples, internalformat, width, height); }
+
+/* GL_NV_geometry_program4 */
+inline void glProgramVertexLimitNV(GLenum target, GLint limit) { fp_glProgramVertexLimitNV(target, limit); }
+inline void glFramebufferTextureFaceEXT(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face) { fp_glFramebufferTextureFaceEXT(target, attachment, texture, level, face); }
+
+/* GL_NV_gpu_program4 */
+inline void glProgramLocalParameterI4iNV(GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w) { fp_glProgramLocalParameterI4iNV(target, index, x, y, z, w); }
+inline void glProgramLocalParameterI4ivNV(GLenum target, GLuint index, const GLint* params) { fp_glProgramLocalParameterI4ivNV(target, index, params); }
+inline void glProgramLocalParametersI4ivNV(GLenum target, GLuint index, GLsizei count, const GLint* params) { fp_glProgramLocalParametersI4ivNV(target, index, count, params); }
+inline void glProgramLocalParameterI4uiNV(GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) { fp_glProgramLocalParameterI4uiNV(target, index, x, y, z, w); }
+inline void glProgramLocalParameterI4uivNV(GLenum target, GLuint index, const GLuint* params) { fp_glProgramLocalParameterI4uivNV(target, index, params); }
+inline void glProgramLocalParametersI4uivNV(GLenum target, GLuint index, GLsizei count, const GLuint* params) { fp_glProgramLocalParametersI4uivNV(target, index, count, params); }
+inline void glProgramEnvParameterI4iNV(GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w) { fp_glProgramEnvParameterI4iNV(target, index, x, y, z, w); }
+inline void glProgramEnvParameterI4ivNV(GLenum target, GLuint index, const GLint* params) { fp_glProgramEnvParameterI4ivNV(target, index, params); }
+inline void glProgramEnvParametersI4ivNV(GLenum target, GLuint index, GLsizei count, const GLint* params) { fp_glProgramEnvParametersI4ivNV(target, index, count, params); }
+inline void glProgramEnvParameterI4uiNV(GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) { fp_glProgramEnvParameterI4uiNV(target, index, x, y, z, w); }
+inline void glProgramEnvParameterI4uivNV(GLenum target, GLuint index, const GLuint* params) { fp_glProgramEnvParameterI4uivNV(target, index, params); }
+inline void glProgramEnvParametersI4uivNV(GLenum target, GLuint index, GLsizei count, const GLuint* params) { fp_glProgramEnvParametersI4uivNV(target, index, count, params); }
+inline void glGetProgramLocalParameterIivNV(GLenum target, GLuint index, GLint* params) { fp_glGetProgramLocalParameterIivNV(target, index, params); }
+inline void glGetProgramLocalParameterIuivNV(GLenum target, GLuint index, GLuint* params) { fp_glGetProgramLocalParameterIuivNV(target, index, params); }
+inline void glGetProgramEnvParameterIivNV(GLenum target, GLuint index, GLint* params) { fp_glGetProgramEnvParameterIivNV(target, index, params); }
+inline void glGetProgramEnvParameterIuivNV(GLenum target, GLuint index, GLuint* params) { fp_glGetProgramEnvParameterIuivNV(target, index, params); }
+
+/* GL_NV_gpu_program5 */
+inline void glProgramSubroutineParametersuivNV(GLenum target, GLsizei count, const GLuint* params) { fp_glProgramSubroutineParametersuivNV(target, count, params); }
+inline void glGetProgramSubroutineParameteruivNV(GLenum target, GLuint index, GLuint* param) { fp_glGetProgramSubroutineParameteruivNV(target, index, param); }
+
+/* GL_NV_half_float */
+inline void glVertex2hNV(GLhalfNV x, GLhalfNV y) { fp_glVertex2hNV(x, y); }
+inline void glVertex2hvNV(const GLhalfNV* v) { fp_glVertex2hvNV(v); }
+inline void glVertex3hNV(GLhalfNV x, GLhalfNV y, GLhalfNV z) { fp_glVertex3hNV(x, y, z); }
+inline void glVertex3hvNV(const GLhalfNV* v) { fp_glVertex3hvNV(v); }
+inline void glVertex4hNV(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w) { fp_glVertex4hNV(x, y, z, w); }
+inline void glVertex4hvNV(const GLhalfNV* v) { fp_glVertex4hvNV(v); }
+inline void glNormal3hNV(GLhalfNV nx, GLhalfNV ny, GLhalfNV nz) { fp_glNormal3hNV(nx, ny, nz); }
+inline void glNormal3hvNV(const GLhalfNV* v) { fp_glNormal3hvNV(v); }
+inline void glColor3hNV(GLhalfNV red, GLhalfNV green, GLhalfNV blue) { fp_glColor3hNV(red, green, blue); }
+inline void glColor3hvNV(const GLhalfNV* v) { fp_glColor3hvNV(v); }
+inline void glColor4hNV(GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha) { fp_glColor4hNV(red, green, blue, alpha); }
+inline void glColor4hvNV(const GLhalfNV* v) { fp_glColor4hvNV(v); }
+inline void glTexCoord1hNV(GLhalfNV s) { fp_glTexCoord1hNV(s); }
+inline void glTexCoord1hvNV(const GLhalfNV* v) { fp_glTexCoord1hvNV(v); }
+inline void glTexCoord2hNV(GLhalfNV s, GLhalfNV t) { fp_glTexCoord2hNV(s, t); }
+inline void glTexCoord2hvNV(const GLhalfNV* v) { fp_glTexCoord2hvNV(v); }
+inline void glTexCoord3hNV(GLhalfNV s, GLhalfNV t, GLhalfNV r) { fp_glTexCoord3hNV(s, t, r); }
+inline void glTexCoord3hvNV(const GLhalfNV* v) { fp_glTexCoord3hvNV(v); }
+inline void glTexCoord4hNV(GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q) { fp_glTexCoord4hNV(s, t, r, q); }
+inline void glTexCoord4hvNV(const GLhalfNV* v) { fp_glTexCoord4hvNV(v); }
+inline void glMultiTexCoord1hNV(GLenum target, GLhalfNV s) { fp_glMultiTexCoord1hNV(target, s); }
+inline void glMultiTexCoord1hvNV(GLenum target, const GLhalfNV* v) { fp_glMultiTexCoord1hvNV(target, v); }
+inline void glMultiTexCoord2hNV(GLenum target, GLhalfNV s, GLhalfNV t) { fp_glMultiTexCoord2hNV(target, s, t); }
+inline void glMultiTexCoord2hvNV(GLenum target, const GLhalfNV* v) { fp_glMultiTexCoord2hvNV(target, v); }
+inline void glMultiTexCoord3hNV(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r) { fp_glMultiTexCoord3hNV(target, s, t, r); }
+inline void glMultiTexCoord3hvNV(GLenum target, const GLhalfNV* v) { fp_glMultiTexCoord3hvNV(target, v); }
+inline void glMultiTexCoord4hNV(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q) { fp_glMultiTexCoord4hNV(target, s, t, r, q); }
+inline void glMultiTexCoord4hvNV(GLenum target, const GLhalfNV* v) { fp_glMultiTexCoord4hvNV(target, v); }
+inline void glFogCoordhNV(GLhalfNV fog) { fp_glFogCoordhNV(fog); }
+inline void glFogCoordhvNV(const GLhalfNV* fog) { fp_glFogCoordhvNV(fog); }
+inline void glSecondaryColor3hNV(GLhalfNV red, GLhalfNV green, GLhalfNV blue) { fp_glSecondaryColor3hNV(red, green, blue); }
+inline void glSecondaryColor3hvNV(const GLhalfNV* v) { fp_glSecondaryColor3hvNV(v); }
+inline void glVertexWeighthNV(GLhalfNV weight) { fp_glVertexWeighthNV(weight); }
+inline void glVertexWeighthvNV(const GLhalfNV* weight) { fp_glVertexWeighthvNV(weight); }
+inline void glVertexAttrib1hNV(GLuint index, GLhalfNV x) { fp_glVertexAttrib1hNV(index, x); }
+inline void glVertexAttrib1hvNV(GLuint index, const GLhalfNV* v) { fp_glVertexAttrib1hvNV(index, v); }
+inline void glVertexAttrib2hNV(GLuint index, GLhalfNV x, GLhalfNV y) { fp_glVertexAttrib2hNV(index, x, y); }
+inline void glVertexAttrib2hvNV(GLuint index, const GLhalfNV* v) { fp_glVertexAttrib2hvNV(index, v); }
+inline void glVertexAttrib3hNV(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z) { fp_glVertexAttrib3hNV(index, x, y, z); }
+inline void glVertexAttrib3hvNV(GLuint index, const GLhalfNV* v) { fp_glVertexAttrib3hvNV(index, v); }
+inline void glVertexAttrib4hNV(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w) { fp_glVertexAttrib4hNV(index, x, y, z, w); }
+inline void glVertexAttrib4hvNV(GLuint index, const GLhalfNV* v) { fp_glVertexAttrib4hvNV(index, v); }
+inline void glVertexAttribs1hvNV(GLuint index, GLsizei n, const GLhalfNV* v) { fp_glVertexAttribs1hvNV(index, n, v); }
+inline void glVertexAttribs2hvNV(GLuint index, GLsizei n, const GLhalfNV* v) { fp_glVertexAttribs2hvNV(index, n, v); }
+inline void glVertexAttribs3hvNV(GLuint index, GLsizei n, const GLhalfNV* v) { fp_glVertexAttribs3hvNV(index, n, v); }
+inline void glVertexAttribs4hvNV(GLuint index, GLsizei n, const GLhalfNV* v) { fp_glVertexAttribs4hvNV(index, n, v); }
+
+/* GL_NV_instanced_arrays */
+inline void glVertexAttribDivisorNV(GLuint index, GLuint divisor) { fp_glVertexAttribDivisorNV(index, divisor); }
+
+/* GL_NV_non_square_matrices */
+inline void glUniformMatrix2x3fvNV(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glUniformMatrix2x3fvNV(location, count, transpose, value); }
+inline void glUniformMatrix3x2fvNV(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glUniformMatrix3x2fvNV(location, count, transpose, value); }
+inline void glUniformMatrix2x4fvNV(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glUniformMatrix2x4fvNV(location, count, transpose, value); }
+inline void glUniformMatrix4x2fvNV(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glUniformMatrix4x2fvNV(location, count, transpose, value); }
+inline void glUniformMatrix3x4fvNV(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glUniformMatrix3x4fvNV(location, count, transpose, value); }
+inline void glUniformMatrix4x3fvNV(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { fp_glUniformMatrix4x3fvNV(location, count, transpose, value); }
+
+/* GL_NV_occlusion_query */
+inline void glGenOcclusionQueriesNV(GLsizei n, GLuint* ids) { fp_glGenOcclusionQueriesNV(n, ids); }
+inline void glDeleteOcclusionQueriesNV(GLsizei n, const GLuint* ids) { fp_glDeleteOcclusionQueriesNV(n, ids); }
+inline GLboolean glIsOcclusionQueryNV(GLuint id) { return fp_glIsOcclusionQueryNV(id); }
+inline void glBeginOcclusionQueryNV(GLuint id) { fp_glBeginOcclusionQueryNV(id); }
+inline void glEndOcclusionQueryNV() { fp_glEndOcclusionQueryNV(); }
+inline void glGetOcclusionQueryivNV(GLuint id, GLenum pname, GLint* params) { fp_glGetOcclusionQueryivNV(id, pname, params); }
+inline void glGetOcclusionQueryuivNV(GLuint id, GLenum pname, GLuint* params) { fp_glGetOcclusionQueryuivNV(id, pname, params); }
+
+/* GL_NV_parameter_buffer_object */
+inline void glProgramBufferParametersfvNV(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat* params) { fp_glProgramBufferParametersfvNV(target, bindingIndex, wordIndex, count, params); }
+inline void glProgramBufferParametersIivNV(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint* params) { fp_glProgramBufferParametersIivNV(target, bindingIndex, wordIndex, count, params); }
+inline void glProgramBufferParametersIuivNV(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint* params) { fp_glProgramBufferParametersIuivNV(target, bindingIndex, wordIndex, count, params); }
+
+/* GL_NV_path_rendering */
+inline GLuint glGenPathsNV(GLsizei range) { return fp_glGenPathsNV(range); }
+inline void glDeletePathsNV(GLuint path, GLsizei range) { fp_glDeletePathsNV(path, range); }
+inline GLboolean glIsPathNV(GLuint path) { return fp_glIsPathNV(path); }
+inline void glPathCommandsNV(GLuint path, GLsizei numCommands, const GLubyte* commands, GLsizei numCoords, GLenum coordType, const void* coords) { fp_glPathCommandsNV(path, numCommands, commands, numCoords, coordType, coords); }
+inline void glPathCoordsNV(GLuint path, GLsizei numCoords, GLenum coordType, const void* coords) { fp_glPathCoordsNV(path, numCoords, coordType, coords); }
+inline void glPathSubCommandsNV(GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte* commands, GLsizei numCoords, GLenum coordType, const void* coords) { fp_glPathSubCommandsNV(path, commandStart, commandsToDelete, numCommands, commands, numCoords, coordType, coords); }
+inline void glPathSubCoordsNV(GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void* coords) { fp_glPathSubCoordsNV(path, coordStart, numCoords, coordType, coords); }
+inline void glPathStringNV(GLuint path, GLenum format, GLsizei length, const void* pathString) { fp_glPathStringNV(path, format, length, pathString); }
+inline void glPathGlyphsNV(GLuint firstPathName, GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void* charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale) { fp_glPathGlyphsNV(firstPathName, fontTarget, fontName, fontStyle, numGlyphs, type, charcodes, handleMissingGlyphs, pathParameterTemplate, emScale); }
+inline void glPathGlyphRangeNV(GLuint firstPathName, GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale) { fp_glPathGlyphRangeNV(firstPathName, fontTarget, fontName, fontStyle, firstGlyph, numGlyphs, handleMissingGlyphs, pathParameterTemplate, emScale); }
+inline void glWeightPathsNV(GLuint resultPath, GLsizei numPaths, const GLuint* paths, const GLfloat* weights) { fp_glWeightPathsNV(resultPath, numPaths, paths, weights); }
+inline void glCopyPathNV(GLuint resultPath, GLuint srcPath) { fp_glCopyPathNV(resultPath, srcPath); }
+inline void glInterpolatePathsNV(GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight) { fp_glInterpolatePathsNV(resultPath, pathA, pathB, weight); }
+inline void glTransformPathNV(GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat* transformValues) { fp_glTransformPathNV(resultPath, srcPath, transformType, transformValues); }
+inline void glPathParameterivNV(GLuint path, GLenum pname, const GLint* value) { fp_glPathParameterivNV(path, pname, value); }
+inline void glPathParameteriNV(GLuint path, GLenum pname, GLint value) { fp_glPathParameteriNV(path, pname, value); }
+inline void glPathParameterfvNV(GLuint path, GLenum pname, const GLfloat* value) { fp_glPathParameterfvNV(path, pname, value); }
+inline void glPathParameterfNV(GLuint path, GLenum pname, GLfloat value) { fp_glPathParameterfNV(path, pname, value); }
+inline void glPathDashArrayNV(GLuint path, GLsizei dashCount, const GLfloat* dashArray) { fp_glPathDashArrayNV(path, dashCount, dashArray); }
+inline void glPathStencilFuncNV(GLenum func, GLint ref, GLuint mask) { fp_glPathStencilFuncNV(func, ref, mask); }
+inline void glPathStencilDepthOffsetNV(GLfloat factor, GLfloat units) { fp_glPathStencilDepthOffsetNV(factor, units); }
+inline void glStencilFillPathNV(GLuint path, GLenum fillMode, GLuint mask) { fp_glStencilFillPathNV(path, fillMode, mask); }
+inline void glStencilStrokePathNV(GLuint path, GLint reference, GLuint mask) { fp_glStencilStrokePathNV(path, reference, mask); }
+inline void glStencilFillPathInstancedNV(GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat* transformValues) { fp_glStencilFillPathInstancedNV(numPaths, pathNameType, paths, pathBase, fillMode, mask, transformType, transformValues); }
+inline void glStencilStrokePathInstancedNV(GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat* transformValues) { fp_glStencilStrokePathInstancedNV(numPaths, pathNameType, paths, pathBase, reference, mask, transformType, transformValues); }
+inline void glPathCoverDepthFuncNV(GLenum func) { fp_glPathCoverDepthFuncNV(func); }
+inline void glPathColorGenNV(GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat* coeffs) { fp_glPathColorGenNV(color, genMode, colorFormat, coeffs); }
+inline void glPathTexGenNV(GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat* coeffs) { fp_glPathTexGenNV(texCoordSet, genMode, components, coeffs); }
+inline void glPathFogGenNV(GLenum genMode) { fp_glPathFogGenNV(genMode); }
+inline void glCoverFillPathNV(GLuint path, GLenum coverMode) { fp_glCoverFillPathNV(path, coverMode); }
+inline void glCoverStrokePathNV(GLuint path, GLenum coverMode) { fp_glCoverStrokePathNV(path, coverMode); }
+inline void glCoverFillPathInstancedNV(GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat* transformValues) { fp_glCoverFillPathInstancedNV(numPaths, pathNameType, paths, pathBase, coverMode, transformType, transformValues); }
+inline void glCoverStrokePathInstancedNV(GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat* transformValues) { fp_glCoverStrokePathInstancedNV(numPaths, pathNameType, paths, pathBase, coverMode, transformType, transformValues); }
+inline void glGetPathParameterivNV(GLuint path, GLenum pname, GLint* value) { fp_glGetPathParameterivNV(path, pname, value); }
+inline void glGetPathParameterfvNV(GLuint path, GLenum pname, GLfloat* value) { fp_glGetPathParameterfvNV(path, pname, value); }
+inline void glGetPathCommandsNV(GLuint path, GLubyte* commands) { fp_glGetPathCommandsNV(path, commands); }
+inline void glGetPathCoordsNV(GLuint path, GLfloat* coords) { fp_glGetPathCoordsNV(path, coords); }
+inline void glGetPathDashArrayNV(GLuint path, GLfloat* dashArray) { fp_glGetPathDashArrayNV(path, dashArray); }
+inline void glGetPathMetricsNV(GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLsizei stride, GLfloat* metrics) { fp_glGetPathMetricsNV(metricQueryMask, numPaths, pathNameType, paths, pathBase, stride, metrics); }
+inline void glGetPathMetricRangeNV(GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat* metrics) { fp_glGetPathMetricRangeNV(metricQueryMask, firstPathName, numPaths, stride, metrics); }
+inline void glGetPathSpacingNV(GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat* returnedSpacing) { fp_glGetPathSpacingNV(pathListMode, numPaths, pathNameType, paths, pathBase, advanceScale, kerningScale, transformType, returnedSpacing); }
+inline void glGetPathColorGenivNV(GLenum color, GLenum pname, GLint* value) { fp_glGetPathColorGenivNV(color, pname, value); }
+inline void glGetPathColorGenfvNV(GLenum color, GLenum pname, GLfloat* value) { fp_glGetPathColorGenfvNV(color, pname, value); }
+inline void glGetPathTexGenivNV(GLenum texCoordSet, GLenum pname, GLint* value) { fp_glGetPathTexGenivNV(texCoordSet, pname, value); }
+inline void glGetPathTexGenfvNV(GLenum texCoordSet, GLenum pname, GLfloat* value) { fp_glGetPathTexGenfvNV(texCoordSet, pname, value); }
+inline GLboolean glIsPointInFillPathNV(GLuint path, GLuint mask, GLfloat x, GLfloat y) { return fp_glIsPointInFillPathNV(path, mask, x, y); }
+inline GLboolean glIsPointInStrokePathNV(GLuint path, GLfloat x, GLfloat y) { return fp_glIsPointInStrokePathNV(path, x, y); }
+inline GLfloat glGetPathLengthNV(GLuint path, GLsizei startSegment, GLsizei numSegments) { return fp_glGetPathLengthNV(path, startSegment, numSegments); }
+inline GLboolean glPointAlongPathNV(GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat* x, GLfloat* y, GLfloat* tangentX, GLfloat* tangentY) { return fp_glPointAlongPathNV(path, startSegment, numSegments, distance, x, y, tangentX, tangentY); }
+inline void glMatrixLoad3x2fNV(GLenum matrixMode, const GLfloat* m) { fp_glMatrixLoad3x2fNV(matrixMode, m); }
+inline void glMatrixLoad3x3fNV(GLenum matrixMode, const GLfloat* m) { fp_glMatrixLoad3x3fNV(matrixMode, m); }
+inline void glMatrixLoadTranspose3x3fNV(GLenum matrixMode, const GLfloat* m) { fp_glMatrixLoadTranspose3x3fNV(matrixMode, m); }
+inline void glMatrixMult3x2fNV(GLenum matrixMode, const GLfloat* m) { fp_glMatrixMult3x2fNV(matrixMode, m); }
+inline void glMatrixMult3x3fNV(GLenum matrixMode, const GLfloat* m) { fp_glMatrixMult3x3fNV(matrixMode, m); }
+inline void glMatrixMultTranspose3x3fNV(GLenum matrixMode, const GLfloat* m) { fp_glMatrixMultTranspose3x3fNV(matrixMode, m); }
+inline void glStencilThenCoverFillPathNV(GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode) { fp_glStencilThenCoverFillPathNV(path, fillMode, mask, coverMode); }
+inline void glStencilThenCoverStrokePathNV(GLuint path, GLint reference, GLuint mask, GLenum coverMode) { fp_glStencilThenCoverStrokePathNV(path, reference, mask, coverMode); }
+inline void glStencilThenCoverFillPathInstancedNV(GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat* transformValues) { fp_glStencilThenCoverFillPathInstancedNV(numPaths, pathNameType, paths, pathBase, fillMode, mask, coverMode, transformType, transformValues); }
+inline void glStencilThenCoverStrokePathInstancedNV(GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat* transformValues) { fp_glStencilThenCoverStrokePathInstancedNV(numPaths, pathNameType, paths, pathBase, reference, mask, coverMode, transformType, transformValues); }
+inline GLenum glPathGlyphIndexRangeNV(GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount) { return fp_glPathGlyphIndexRangeNV(fontTarget, fontName, fontStyle, pathParameterTemplate, emScale, baseAndCount); }
+inline GLenum glPathGlyphIndexArrayNV(GLuint firstPathName, GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale) { return fp_glPathGlyphIndexArrayNV(firstPathName, fontTarget, fontName, fontStyle, firstGlyphIndex, numGlyphs, pathParameterTemplate, emScale); }
+inline GLenum glPathMemoryGlyphIndexArrayNV(GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void* fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale) { return fp_glPathMemoryGlyphIndexArrayNV(firstPathName, fontTarget, fontSize, fontData, faceIndex, firstGlyphIndex, numGlyphs, pathParameterTemplate, emScale); }
+inline void glProgramPathFragmentInputGenNV(GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat* coeffs) { fp_glProgramPathFragmentInputGenNV(program, location, genMode, components, coeffs); }
+inline void glGetProgramResourcefvNV(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum* props, GLsizei bufSize, GLsizei* length, GLfloat* params) { fp_glGetProgramResourcefvNV(program, programInterface, index, propCount, props, bufSize, length, params); }
+
+/* GL_NV_present_video */
+inline void glPresentFrameKeyedNV(GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1) { fp_glPresentFrameKeyedNV(video_slot, minPresentTime, beginPresentTimeId, presentDurationId, type, target0, fill0, key0, target1, fill1, key1); }
+inline void glPresentFrameDualFillNV(GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3) { fp_glPresentFrameDualFillNV(video_slot, minPresentTime, beginPresentTimeId, presentDurationId, type, target0, fill0, target1, fill1, target2, fill2, target3, fill3); }
+inline void glGetVideoivNV(GLuint video_slot, GLenum pname, GLint* params) { fp_glGetVideoivNV(video_slot, pname, params); }
+inline void glGetVideouivNV(GLuint video_slot, GLenum pname, GLuint* params) { fp_glGetVideouivNV(video_slot, pname, params); }
+inline void glGetVideoi64vNV(GLuint video_slot, GLenum pname, GLint64EXT* params) { fp_glGetVideoi64vNV(video_slot, pname, params); }
+inline void glGetVideoui64vNV(GLuint video_slot, GLenum pname, GLuint64EXT* params) { fp_glGetVideoui64vNV(video_slot, pname, params); }
+
+/* GL_NV_primitive_restart */
+inline void glPrimitiveRestartNV() { fp_glPrimitiveRestartNV(); }
+inline void glPrimitiveRestartIndexNV(GLuint index) { fp_glPrimitiveRestartIndexNV(index); }
+
+/* GL_NV_read_buffer */
+inline void glReadBufferNV(GLenum mode) { fp_glReadBufferNV(mode); }
+
+/* GL_NV_shader_buffer_load */
+inline void glMakeBufferResidentNV(GLenum target, GLenum access) { fp_glMakeBufferResidentNV(target, access); }
+inline void glMakeBufferNonResidentNV(GLenum target) { fp_glMakeBufferNonResidentNV(target); }
+inline GLboolean glIsBufferResidentNV(GLenum target) { return fp_glIsBufferResidentNV(target); }
+inline void glMakeNamedBufferResidentNV(GLuint buffer, GLenum access) { fp_glMakeNamedBufferResidentNV(buffer, access); }
+inline void glMakeNamedBufferNonResidentNV(GLuint buffer) { fp_glMakeNamedBufferNonResidentNV(buffer); }
+inline GLboolean glIsNamedBufferResidentNV(GLuint buffer) { return fp_glIsNamedBufferResidentNV(buffer); }
+inline void glGetBufferParameterui64vNV(GLenum target, GLenum pname, GLuint64EXT* params) { fp_glGetBufferParameterui64vNV(target, pname, params); }
+inline void glGetNamedBufferParameterui64vNV(GLuint buffer, GLenum pname, GLuint64EXT* params) { fp_glGetNamedBufferParameterui64vNV(buffer, pname, params); }
+inline void glGetIntegerui64vNV(GLenum value, GLuint64EXT* result) { fp_glGetIntegerui64vNV(value, result); }
+inline void glUniformui64NV(GLint location, GLuint64EXT value) { fp_glUniformui64NV(location, value); }
+inline void glUniformui64vNV(GLint location, GLsizei count, const GLuint64EXT* value) { fp_glUniformui64vNV(location, count, value); }
+inline void glProgramUniformui64NV(GLuint program, GLint location, GLuint64EXT value) { fp_glProgramUniformui64NV(program, location, value); }
+inline void glProgramUniformui64vNV(GLuint program, GLint location, GLsizei count, const GLuint64EXT* value) { fp_glProgramUniformui64vNV(program, location, count, value); }
+
+/* GL_NV_texture_barrier */
+inline void glTextureBarrierNV() { fp_glTextureBarrierNV(); }
+
+/* GL_NV_texture_multisample */
+inline void glTexImage2DMultisampleCoverageNV(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations) { fp_glTexImage2DMultisampleCoverageNV(target, coverageSamples, colorSamples, internalFormat, width, height, fixedSampleLocations); }
+inline void glTexImage3DMultisampleCoverageNV(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations) { fp_glTexImage3DMultisampleCoverageNV(target, coverageSamples, colorSamples, internalFormat, width, height, depth, fixedSampleLocations); }
+inline void glTextureImage2DMultisampleNV(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations) { fp_glTextureImage2DMultisampleNV(texture, target, samples, internalFormat, width, height, fixedSampleLocations); }
+inline void glTextureImage3DMultisampleNV(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations) { fp_glTextureImage3DMultisampleNV(texture, target, samples, internalFormat, width, height, depth, fixedSampleLocations); }
+inline void glTextureImage2DMultisampleCoverageNV(GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations) { fp_glTextureImage2DMultisampleCoverageNV(texture, target, coverageSamples, colorSamples, internalFormat, width, height, fixedSampleLocations); }
+inline void glTextureImage3DMultisampleCoverageNV(GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations) { fp_glTextureImage3DMultisampleCoverageNV(texture, target, coverageSamples, colorSamples, internalFormat, width, height, depth, fixedSampleLocations); }
+
+/* GL_NV_transform_feedback */
+inline void glBeginTransformFeedbackNV(GLenum primitiveMode) { fp_glBeginTransformFeedbackNV(primitiveMode); }
+inline void glEndTransformFeedbackNV() { fp_glEndTransformFeedbackNV(); }
+inline void glTransformFeedbackAttribsNV(GLsizei count, const GLint* attribs, GLenum bufferMode) { fp_glTransformFeedbackAttribsNV(count, attribs, bufferMode); }
+inline void glBindBufferRangeNV(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) { fp_glBindBufferRangeNV(target, index, buffer, offset, size); }
+inline void glBindBufferOffsetNV(GLenum target, GLuint index, GLuint buffer, GLintptr offset) { fp_glBindBufferOffsetNV(target, index, buffer, offset); }
+inline void glBindBufferBaseNV(GLenum target, GLuint index, GLuint buffer) { fp_glBindBufferBaseNV(target, index, buffer); }
+inline void glTransformFeedbackVaryingsNV(GLuint program, GLsizei count, const GLint* locations, GLenum bufferMode) { fp_glTransformFeedbackVaryingsNV(program, count, locations, bufferMode); }
+inline void glActiveVaryingNV(GLuint program, const GLchar* name) { fp_glActiveVaryingNV(program, name); }
+inline GLint glGetVaryingLocationNV(GLuint program, const GLchar* name) { return fp_glGetVaryingLocationNV(program, name); }
+inline void glGetActiveVaryingNV(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name) { fp_glGetActiveVaryingNV(program, index, bufSize, length, size, type, name); }
+inline void glGetTransformFeedbackVaryingNV(GLuint program, GLuint index, GLint* location) { fp_glGetTransformFeedbackVaryingNV(program, index, location); }
+inline void glTransformFeedbackStreamAttribsNV(GLsizei count, const GLint* attribs, GLsizei nbuffers, const GLint* bufstreams, GLenum bufferMode) { fp_glTransformFeedbackStreamAttribsNV(count, attribs, nbuffers, bufstreams, bufferMode); }
+
+/* GL_NV_transform_feedback2 */
+inline void glBindTransformFeedbackNV(GLenum target, GLuint id) { fp_glBindTransformFeedbackNV(target, id); }
+inline void glDeleteTransformFeedbacksNV(GLsizei n, const GLuint* ids) { fp_glDeleteTransformFeedbacksNV(n, ids); }
+inline void glGenTransformFeedbacksNV(GLsizei n, GLuint* ids) { fp_glGenTransformFeedbacksNV(n, ids); }
+inline GLboolean glIsTransformFeedbackNV(GLuint id) { return fp_glIsTransformFeedbackNV(id); }
+inline void glPauseTransformFeedbackNV() { fp_glPauseTransformFeedbackNV(); }
+inline void glResumeTransformFeedbackNV() { fp_glResumeTransformFeedbackNV(); }
+inline void glDrawTransformFeedbackNV(GLenum mode, GLuint id) { fp_glDrawTransformFeedbackNV(mode, id); }
+
+/* GL_NV_vdpau_interop */
+inline void glVDPAUInitNV(const void* vdpDevice, const void* getProcAddress) { fp_glVDPAUInitNV(vdpDevice, getProcAddress); }
+inline void glVDPAUFiniNV() { fp_glVDPAUFiniNV(); }
+inline GLvdpauSurfaceNV glVDPAURegisterVideoSurfaceNV(const void* vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint* textureNames) { return fp_glVDPAURegisterVideoSurfaceNV(vdpSurface, target, numTextureNames, textureNames); }
+inline GLvdpauSurfaceNV glVDPAURegisterOutputSurfaceNV(const void* vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint* textureNames) { return fp_glVDPAURegisterOutputSurfaceNV(vdpSurface, target, numTextureNames, textureNames); }
+inline GLboolean glVDPAUIsSurfaceNV(GLvdpauSurfaceNV surface) { return fp_glVDPAUIsSurfaceNV(surface); }
+inline void glVDPAUUnregisterSurfaceNV(GLvdpauSurfaceNV surface) { fp_glVDPAUUnregisterSurfaceNV(surface); }
+inline void glVDPAUGetSurfaceivNV(GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) { fp_glVDPAUGetSurfaceivNV(surface, pname, bufSize, length, values); }
+inline void glVDPAUSurfaceAccessNV(GLvdpauSurfaceNV surface, GLenum access) { fp_glVDPAUSurfaceAccessNV(surface, access); }
+inline void glVDPAUMapSurfacesNV(GLsizei numSurfaces, const GLvdpauSurfaceNV* surfaces) { fp_glVDPAUMapSurfacesNV(numSurfaces, surfaces); }
+inline void glVDPAUUnmapSurfacesNV(GLsizei numSurface, const GLvdpauSurfaceNV* surfaces) { fp_glVDPAUUnmapSurfacesNV(numSurface, surfaces); }
+
+/* GL_NV_vertex_attrib_integer_64bit */
+inline void glVertexAttribL1i64NV(GLuint index, GLint64EXT x) { fp_glVertexAttribL1i64NV(index, x); }
+inline void glVertexAttribL2i64NV(GLuint index, GLint64EXT x, GLint64EXT y) { fp_glVertexAttribL2i64NV(index, x, y); }
+inline void glVertexAttribL3i64NV(GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z) { fp_glVertexAttribL3i64NV(index, x, y, z); }
+inline void glVertexAttribL4i64NV(GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w) { fp_glVertexAttribL4i64NV(index, x, y, z, w); }
+inline void glVertexAttribL1i64vNV(GLuint index, const GLint64EXT* v) { fp_glVertexAttribL1i64vNV(index, v); }
+inline void glVertexAttribL2i64vNV(GLuint index, const GLint64EXT* v) { fp_glVertexAttribL2i64vNV(index, v); }
+inline void glVertexAttribL3i64vNV(GLuint index, const GLint64EXT* v) { fp_glVertexAttribL3i64vNV(index, v); }
+inline void glVertexAttribL4i64vNV(GLuint index, const GLint64EXT* v) { fp_glVertexAttribL4i64vNV(index, v); }
+inline void glVertexAttribL1ui64NV(GLuint index, GLuint64EXT x) { fp_glVertexAttribL1ui64NV(index, x); }
+inline void glVertexAttribL2ui64NV(GLuint index, GLuint64EXT x, GLuint64EXT y) { fp_glVertexAttribL2ui64NV(index, x, y); }
+inline void glVertexAttribL3ui64NV(GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z) { fp_glVertexAttribL3ui64NV(index, x, y, z); }
+inline void glVertexAttribL4ui64NV(GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w) { fp_glVertexAttribL4ui64NV(index, x, y, z, w); }
+inline void glVertexAttribL1ui64vNV(GLuint index, const GLuint64EXT* v) { fp_glVertexAttribL1ui64vNV(index, v); }
+inline void glVertexAttribL2ui64vNV(GLuint index, const GLuint64EXT* v) { fp_glVertexAttribL2ui64vNV(index, v); }
+inline void glVertexAttribL3ui64vNV(GLuint index, const GLuint64EXT* v) { fp_glVertexAttribL3ui64vNV(index, v); }
+inline void glVertexAttribL4ui64vNV(GLuint index, const GLuint64EXT* v) { fp_glVertexAttribL4ui64vNV(index, v); }
+inline void glGetVertexAttribLi64vNV(GLuint index, GLenum pname, GLint64EXT* params) { fp_glGetVertexAttribLi64vNV(index, pname, params); }
+inline void glGetVertexAttribLui64vNV(GLuint index, GLenum pname, GLuint64EXT* params) { fp_glGetVertexAttribLui64vNV(index, pname, params); }
+inline void glVertexAttribLFormatNV(GLuint index, GLint size, GLenum type, GLsizei stride) { fp_glVertexAttribLFormatNV(index, size, type, stride); }
+
+/* GL_NV_vertex_buffer_unified_memory */
+inline void glBufferAddressRangeNV(GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length) { fp_glBufferAddressRangeNV(pname, index, address, length); }
+inline void glVertexFormatNV(GLint size, GLenum type, GLsizei stride) { fp_glVertexFormatNV(size, type, stride); }
+inline void glNormalFormatNV(GLenum type, GLsizei stride) { fp_glNormalFormatNV(type, stride); }
+inline void glColorFormatNV(GLint size, GLenum type, GLsizei stride) { fp_glColorFormatNV(size, type, stride); }
+inline void glIndexFormatNV(GLenum type, GLsizei stride) { fp_glIndexFormatNV(type, stride); }
+inline void glTexCoordFormatNV(GLint size, GLenum type, GLsizei stride) { fp_glTexCoordFormatNV(size, type, stride); }
+inline void glEdgeFlagFormatNV(GLsizei stride) { fp_glEdgeFlagFormatNV(stride); }
+inline void glSecondaryColorFormatNV(GLint size, GLenum type, GLsizei stride) { fp_glSecondaryColorFormatNV(size, type, stride); }
+inline void glFogCoordFormatNV(GLenum type, GLsizei stride) { fp_glFogCoordFormatNV(type, stride); }
+inline void glVertexAttribFormatNV(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride) { fp_glVertexAttribFormatNV(index, size, type, normalized, stride); }
+inline void glVertexAttribIFormatNV(GLuint index, GLint size, GLenum type, GLsizei stride) { fp_glVertexAttribIFormatNV(index, size, type, stride); }
+inline void glGetIntegerui64i_vNV(GLenum value, GLuint index, GLuint64EXT* result) { fp_glGetIntegerui64i_vNV(value, index, result); }
+
+/* GL_NV_vertex_program4 */
+inline void glVertexAttribI1iEXT(GLuint index, GLint x) { fp_glVertexAttribI1iEXT(index, x); }
+inline void glVertexAttribI2iEXT(GLuint index, GLint x, GLint y) { fp_glVertexAttribI2iEXT(index, x, y); }
+inline void glVertexAttribI3iEXT(GLuint index, GLint x, GLint y, GLint z) { fp_glVertexAttribI3iEXT(index, x, y, z); }
+inline void glVertexAttribI4iEXT(GLuint index, GLint x, GLint y, GLint z, GLint w) { fp_glVertexAttribI4iEXT(index, x, y, z, w); }
+inline void glVertexAttribI1uiEXT(GLuint index, GLuint x) { fp_glVertexAttribI1uiEXT(index, x); }
+inline void glVertexAttribI2uiEXT(GLuint index, GLuint x, GLuint y) { fp_glVertexAttribI2uiEXT(index, x, y); }
+inline void glVertexAttribI3uiEXT(GLuint index, GLuint x, GLuint y, GLuint z) { fp_glVertexAttribI3uiEXT(index, x, y, z); }
+inline void glVertexAttribI4uiEXT(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) { fp_glVertexAttribI4uiEXT(index, x, y, z, w); }
+inline void glVertexAttribI1ivEXT(GLuint index, const GLint* v) { fp_glVertexAttribI1ivEXT(index, v); }
+inline void glVertexAttribI2ivEXT(GLuint index, const GLint* v) { fp_glVertexAttribI2ivEXT(index, v); }
+inline void glVertexAttribI3ivEXT(GLuint index, const GLint* v) { fp_glVertexAttribI3ivEXT(index, v); }
+inline void glVertexAttribI4ivEXT(GLuint index, const GLint* v) { fp_glVertexAttribI4ivEXT(index, v); }
+inline void glVertexAttribI1uivEXT(GLuint index, const GLuint* v) { fp_glVertexAttribI1uivEXT(index, v); }
+inline void glVertexAttribI2uivEXT(GLuint index, const GLuint* v) { fp_glVertexAttribI2uivEXT(index, v); }
+inline void glVertexAttribI3uivEXT(GLuint index, const GLuint* v) { fp_glVertexAttribI3uivEXT(index, v); }
+inline void glVertexAttribI4uivEXT(GLuint index, const GLuint* v) { fp_glVertexAttribI4uivEXT(index, v); }
+inline void glVertexAttribI4bvEXT(GLuint index, const GLbyte* v) { fp_glVertexAttribI4bvEXT(index, v); }
+inline void glVertexAttribI4svEXT(GLuint index, const GLshort* v) { fp_glVertexAttribI4svEXT(index, v); }
+inline void glVertexAttribI4ubvEXT(GLuint index, const GLubyte* v) { fp_glVertexAttribI4ubvEXT(index, v); }
+inline void glVertexAttribI4usvEXT(GLuint index, const GLushort* v) { fp_glVertexAttribI4usvEXT(index, v); }
+inline void glVertexAttribIPointerEXT(GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer) { fp_glVertexAttribIPointerEXT(index, size, type, stride, pointer); }
+inline void glGetVertexAttribIivEXT(GLuint index, GLenum pname, GLint* params) { fp_glGetVertexAttribIivEXT(index, pname, params); }
+inline void glGetVertexAttribIuivEXT(GLuint index, GLenum pname, GLuint* params) { fp_glGetVertexAttribIuivEXT(index, pname, params); }
+
+/* GL_NV_video_capture */
+inline void glBeginVideoCaptureNV(GLuint video_capture_slot) { fp_glBeginVideoCaptureNV(video_capture_slot); }
+inline void glBindVideoCaptureStreamBufferNV(GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset) { fp_glBindVideoCaptureStreamBufferNV(video_capture_slot, stream, frame_region, offset); }
+inline void glBindVideoCaptureStreamTextureNV(GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture) { fp_glBindVideoCaptureStreamTextureNV(video_capture_slot, stream, frame_region, target, texture); }
+inline void glEndVideoCaptureNV(GLuint video_capture_slot) { fp_glEndVideoCaptureNV(video_capture_slot); }
+inline void glGetVideoCaptureivNV(GLuint video_capture_slot, GLenum pname, GLint* params) { fp_glGetVideoCaptureivNV(video_capture_slot, pname, params); }
+inline void glGetVideoCaptureStreamivNV(GLuint video_capture_slot, GLuint stream, GLenum pname, GLint* params) { fp_glGetVideoCaptureStreamivNV(video_capture_slot, stream, pname, params); }
+inline void glGetVideoCaptureStreamfvNV(GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat* params) { fp_glGetVideoCaptureStreamfvNV(video_capture_slot, stream, pname, params); }
+inline void glGetVideoCaptureStreamdvNV(GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble* params) { fp_glGetVideoCaptureStreamdvNV(video_capture_slot, stream, pname, params); }
+inline GLenum glVideoCaptureNV(GLuint video_capture_slot, GLuint* sequence_num, GLuint64EXT* capture_time) { return fp_glVideoCaptureNV(video_capture_slot, sequence_num, capture_time); }
+inline void glVideoCaptureStreamParameterivNV(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint* params) { fp_glVideoCaptureStreamParameterivNV(video_capture_slot, stream, pname, params); }
+inline void glVideoCaptureStreamParameterfvNV(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat* params) { fp_glVideoCaptureStreamParameterfvNV(video_capture_slot, stream, pname, params); }
+inline void glVideoCaptureStreamParameterdvNV(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble* params) { fp_glVideoCaptureStreamParameterdvNV(video_capture_slot, stream, pname, params); }
+
+/* GL_NVX_conditional_render */
+inline void glBeginConditionalRenderNVX(GLuint id) { fp_glBeginConditionalRenderNVX(id); }
+inline void glEndConditionalRenderNVX() { fp_glEndConditionalRenderNVX(); }
+
+/* GL_QCOM_alpha_test */
+inline void glAlphaFuncQCOM(GLenum func, GLclampf ref) { fp_glAlphaFuncQCOM(func, ref); }
+
+/* GL_QCOM_driver_control */
+inline void glGetDriverControlsQCOM(GLint* num, GLsizei size, GLuint* driverControls) { fp_glGetDriverControlsQCOM(num, size, driverControls); }
+inline void glGetDriverControlStringQCOM(GLuint driverControl, GLsizei bufSize, GLsizei* length, GLchar* driverControlString) { fp_glGetDriverControlStringQCOM(driverControl, bufSize, length, driverControlString); }
+inline void glEnableDriverControlQCOM(GLuint driverControl) { fp_glEnableDriverControlQCOM(driverControl); }
+inline void glDisableDriverControlQCOM(GLuint driverControl) { fp_glDisableDriverControlQCOM(driverControl); }
+
+/* GL_QCOM_extended_get */
+inline void glExtGetTexturesQCOM(GLuint* textures, GLint maxTextures, GLint* numTextures) { fp_glExtGetTexturesQCOM(textures, maxTextures, numTextures); }
+inline void glExtGetBuffersQCOM(GLuint* buffers, GLint maxBuffers, GLint* numBuffers) { fp_glExtGetBuffersQCOM(buffers, maxBuffers, numBuffers); }
+inline void glExtGetRenderbuffersQCOM(GLuint* renderbuffers, GLint maxRenderbuffers, GLint* numRenderbuffers) { fp_glExtGetRenderbuffersQCOM(renderbuffers, maxRenderbuffers, numRenderbuffers); }
+inline void glExtGetFramebuffersQCOM(GLuint* framebuffers, GLint maxFramebuffers, GLint* numFramebuffers) { fp_glExtGetFramebuffersQCOM(framebuffers, maxFramebuffers, numFramebuffers); }
+inline void glExtGetTexLevelParameterivQCOM(GLuint texture, GLenum face, GLint level, GLenum pname, GLint* params) { fp_glExtGetTexLevelParameterivQCOM(texture, face, level, pname, params); }
+inline void glExtTexObjectStateOverrideiQCOM(GLenum target, GLenum pname, GLint param) { fp_glExtTexObjectStateOverrideiQCOM(target, pname, param); }
+inline void glExtGetTexSubImageQCOM(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void* texels) { fp_glExtGetTexSubImageQCOM(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, texels); }
+inline void glExtGetBufferPointervQCOM(GLenum target, void** params) { fp_glExtGetBufferPointervQCOM(target, params); }
+
+/* GL_QCOM_extended_get2 */
+inline void glExtGetShadersQCOM(GLuint* shaders, GLint maxShaders, GLint* numShaders) { fp_glExtGetShadersQCOM(shaders, maxShaders, numShaders); }
+inline void glExtGetProgramsQCOM(GLuint* programs, GLint maxPrograms, GLint* numPrograms) { fp_glExtGetProgramsQCOM(programs, maxPrograms, numPrograms); }
+inline GLboolean glExtIsProgramBinaryQCOM(GLuint program) { return fp_glExtIsProgramBinaryQCOM(program); }
+inline void glExtGetProgramBinarySourceQCOM(GLuint program, GLenum shadertype, GLchar* source, GLint* length) { fp_glExtGetProgramBinarySourceQCOM(program, shadertype, source, length); }
+
+/* GL_QCOM_tiled_rendering */
+inline void glStartTilingQCOM(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask) { fp_glStartTilingQCOM(x, y, width, height, preserveMask); }
+inline void glEndTilingQCOM(GLbitfield preserveMask) { fp_glEndTilingQCOM(preserveMask); }
+
+} /* namespace glad */
+
+#endif /* __glad_funcs_hpp_ */

+ 6141 - 0
src/libraries/lodepng/lodepng.cpp

@@ -0,0 +1,6141 @@
+/*
+LodePNG version 20141130
+
+Copyright (c) 2005-2014 Lode Vandevenne
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+    1. The origin of this software must not be misrepresented; you must not
+    claim that you wrote the original software. If you use this software
+    in a product, an acknowledgment in the product documentation would be
+    appreciated but is not required.
+
+    2. Altered source versions must be plainly marked as such, and must not be
+    misrepresented as being the original software.
+
+    3. This notice may not be removed or altered from any source
+    distribution.
+*/
+
+/*
+The manual and changelog are in the header file "lodepng.h"
+Rename this file to lodepng.cpp to use it for C++, or to lodepng.c to use it for C.
+*/
+
+#include "lodepng.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef LODEPNG_COMPILE_CPP
+#include <fstream>
+#endif /*LODEPNG_COMPILE_CPP*/
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1310) /*Visual Studio: A few warning types are not desired here.*/
+#pragma warning( disable : 4244 ) /*implicit conversions: not warned by gcc -Wall -Wextra and requires too much casts*/
+#pragma warning( disable : 4996 ) /*VS does not like fopen, but fopen_s is not standard C so unusable here*/
+#endif /*_MSC_VER */
+
+/*
+This source file is built up in the following large parts. The code sections
+with the "LODEPNG_COMPILE_" #defines divide this up further in an intermixed way.
+-Tools for C and common code for PNG and Zlib
+-C Code for Zlib (huffman, deflate, ...)
+-C Code for PNG (file format chunks, adam7, PNG filters, color conversions, ...)
+-The C++ wrapper around all of the above
+*/
+
+/*The malloc, realloc and free functions defined here with "lodepng_" in front
+of the name, so that you can easily change them to others related to your
+platform if needed. Everything else in the code calls these. Pass
+-DLODEPNG_NO_COMPILE_ALLOCATORS to the compiler, or comment out
+#define LODEPNG_COMPILE_ALLOCATORS in the header, to disable the ones here and
+define them in your own project's source files without needing to change
+lodepng source code. Don't forget to remove "static" if you copypaste them
+from here.*/
+
+#ifdef LODEPNG_COMPILE_ALLOCATORS
+static void* lodepng_malloc(size_t size)
+{
+  return malloc(size);
+}
+
+static void* lodepng_realloc(void* ptr, size_t new_size)
+{
+  return realloc(ptr, new_size);
+}
+
+static void lodepng_free(void* ptr)
+{
+  free(ptr);
+}
+#else /*LODEPNG_COMPILE_ALLOCATORS*/
+void* lodepng_malloc(size_t size);
+void* lodepng_realloc(void* ptr, size_t new_size);
+void lodepng_free(void* ptr);
+#endif /*LODEPNG_COMPILE_ALLOCATORS*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* // Tools for C, and common code for PNG and Zlib.                       // */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/*
+Often in case of an error a value is assigned to a variable and then it breaks
+out of a loop (to go to the cleanup phase of a function). This macro does that.
+It makes the error handling code shorter and more readable.
+
+Example: if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83);
+*/
+#define CERROR_BREAK(errorvar, code)\
+{\
+  errorvar = code;\
+  break;\
+}
+
+/*version of CERROR_BREAK that assumes the common case where the error variable is named "error"*/
+#define ERROR_BREAK(code) CERROR_BREAK(error, code)
+
+/*Set error var to the error code, and return it.*/
+#define CERROR_RETURN_ERROR(errorvar, code)\
+{\
+  errorvar = code;\
+  return code;\
+}
+
+/*Try the code, if it returns error, also return the error.*/
+#define CERROR_TRY_RETURN(call)\
+{\
+  unsigned error = call;\
+  if(error) return error;\
+}
+
+/*Set error var to the error code, and return from the void function.*/
+#define CERROR_RETURN(errorvar, code)\
+{\
+  errorvar = code;\
+  return;\
+}
+
+/*
+About uivector, ucvector and string:
+-All of them wrap dynamic arrays or text strings in a similar way.
+-LodePNG was originally written in C++. The vectors replace the std::vectors that were used in the C++ version.
+-The string tools are made to avoid problems with compilers that declare things like strncat as deprecated.
+-They're not used in the interface, only internally in this file as static functions.
+-As with many other structs in this file, the init and cleanup functions serve as ctor and dtor.
+*/
+
+#ifdef LODEPNG_COMPILE_ZLIB
+/*dynamic vector of unsigned ints*/
+typedef struct uivector
+{
+  unsigned* data;
+  size_t size; /*size in number of unsigned longs*/
+  size_t allocsize; /*allocated size in bytes*/
+} uivector;
+
+static void uivector_cleanup(void* p)
+{
+  ((uivector*)p)->size = ((uivector*)p)->allocsize = 0;
+  lodepng_free(((uivector*)p)->data);
+  ((uivector*)p)->data = NULL;
+}
+
+/*returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned uivector_reserve(uivector* p, size_t allocsize)
+{
+  if(allocsize > p->allocsize)
+  {
+    size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2);
+    void* data = lodepng_realloc(p->data, newsize);
+    if(data)
+    {
+      p->allocsize = newsize;
+      p->data = (unsigned*)data;
+    }
+    else return 0; /*error: not enough memory*/
+  }
+  return 1;
+}
+
+/*returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned uivector_resize(uivector* p, size_t size)
+{
+  if(!uivector_reserve(p, size * sizeof(unsigned))) return 0;
+  p->size = size;
+  return 1; /*success*/
+}
+
+/*resize and give all new elements the value*/
+static unsigned uivector_resizev(uivector* p, size_t size, unsigned value)
+{
+  size_t oldsize = p->size, i;
+  if(!uivector_resize(p, size)) return 0;
+  for(i = oldsize; i < size; ++i) p->data[i] = value;
+  return 1;
+}
+
+static void uivector_init(uivector* p)
+{
+  p->data = NULL;
+  p->size = p->allocsize = 0;
+}
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/*returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned uivector_push_back(uivector* p, unsigned c)
+{
+  if(!uivector_resize(p, p->size + 1)) return 0;
+  p->data[p->size - 1] = c;
+  return 1;
+}
+
+/*copy q to p, returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned uivector_copy(uivector* p, const uivector* q)
+{
+  size_t i;
+  if(!uivector_resize(p, q->size)) return 0;
+  for(i = 0; i != q->size; ++i) p->data[i] = q->data[i];
+  return 1;
+}
+#endif /*LODEPNG_COMPILE_ENCODER*/
+#endif /*LODEPNG_COMPILE_ZLIB*/
+
+/* /////////////////////////////////////////////////////////////////////////// */
+
+/*dynamic vector of unsigned chars*/
+typedef struct ucvector
+{
+  unsigned char* data;
+  size_t size; /*used size*/
+  size_t allocsize; /*allocated size*/
+} ucvector;
+
+/*returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned ucvector_reserve(ucvector* p, size_t allocsize)
+{
+  if(allocsize > p->allocsize)
+  {
+    size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2);
+    void* data = lodepng_realloc(p->data, newsize);
+    if(data)
+    {
+      p->allocsize = newsize;
+      p->data = (unsigned char*)data;
+    }
+    else return 0; /*error: not enough memory*/
+  }
+  return 1;
+}
+
+/*returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned ucvector_resize(ucvector* p, size_t size)
+{
+  if(!ucvector_reserve(p, size * sizeof(unsigned char))) return 0;
+  p->size = size;
+  return 1; /*success*/
+}
+
+#ifdef LODEPNG_COMPILE_PNG
+
+static void ucvector_cleanup(void* p)
+{
+  ((ucvector*)p)->size = ((ucvector*)p)->allocsize = 0;
+  lodepng_free(((ucvector*)p)->data);
+  ((ucvector*)p)->data = NULL;
+}
+
+static void ucvector_init(ucvector* p)
+{
+  p->data = NULL;
+  p->size = p->allocsize = 0;
+}
+
+#ifdef LODEPNG_COMPILE_DECODER
+/*resize and give all new elements the value*/
+static unsigned ucvector_resizev(ucvector* p, size_t size, unsigned char value)
+{
+  size_t oldsize = p->size, i;
+  if(!ucvector_resize(p, size)) return 0;
+  for(i = oldsize; i < size; ++i) p->data[i] = value;
+  return 1;
+}
+#endif /*LODEPNG_COMPILE_DECODER*/
+#endif /*LODEPNG_COMPILE_PNG*/
+
+#ifdef LODEPNG_COMPILE_ZLIB
+/*you can both convert from vector to buffer&size and vica versa. If you use
+init_buffer to take over a buffer and size, it is not needed to use cleanup*/
+static void ucvector_init_buffer(ucvector* p, unsigned char* buffer, size_t size)
+{
+  p->data = buffer;
+  p->allocsize = p->size = size;
+}
+#endif /*LODEPNG_COMPILE_ZLIB*/
+
+#if (defined(LODEPNG_COMPILE_PNG) && defined(LODEPNG_COMPILE_ANCILLARY_CHUNKS)) || defined(LODEPNG_COMPILE_ENCODER)
+/*returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned ucvector_push_back(ucvector* p, unsigned char c)
+{
+  if(!ucvector_resize(p, p->size + 1)) return 0;
+  p->data[p->size - 1] = c;
+  return 1;
+}
+#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/
+
+
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#ifdef LODEPNG_COMPILE_PNG
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+/*returns 1 if success, 0 if failure ==> nothing done*/
+static unsigned string_resize(char** out, size_t size)
+{
+  char* data = (char*)lodepng_realloc(*out, size + 1);
+  if(data)
+  {
+    data[size] = 0; /*null termination char*/
+    *out = data;
+  }
+  return data != 0;
+}
+
+/*init a {char*, size_t} pair for use as string*/
+static void string_init(char** out)
+{
+  *out = NULL;
+  string_resize(out, 0);
+}
+
+/*free the above pair again*/
+static void string_cleanup(char** out)
+{
+  lodepng_free(*out);
+  *out = NULL;
+}
+
+static void string_set(char** out, const char* in)
+{
+  size_t insize = strlen(in), i;
+  if(string_resize(out, insize))
+  {
+    for(i = 0; i != insize; ++i)
+    {
+      (*out)[i] = in[i];
+    }
+  }
+}
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+#endif /*LODEPNG_COMPILE_PNG*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+
+unsigned lodepng_read32bitInt(const unsigned char* buffer)
+{
+  return (unsigned)((buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]);
+}
+
+#if defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)
+/*buffer must have at least 4 allocated bytes available*/
+static void lodepng_set32bitInt(unsigned char* buffer, unsigned value)
+{
+  buffer[0] = (unsigned char)((value >> 24) & 0xff);
+  buffer[1] = (unsigned char)((value >> 16) & 0xff);
+  buffer[2] = (unsigned char)((value >>  8) & 0xff);
+  buffer[3] = (unsigned char)((value      ) & 0xff);
+}
+#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/
+
+#ifdef LODEPNG_COMPILE_ENCODER
+static void lodepng_add32bitInt(ucvector* buffer, unsigned value)
+{
+  ucvector_resize(buffer, buffer->size + 4); /*todo: give error if resize failed*/
+  lodepng_set32bitInt(&buffer->data[buffer->size - 4], value);
+}
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / File IO                                                                / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#ifdef LODEPNG_COMPILE_DISK
+
+unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename)
+{
+  FILE* file;
+  long size;
+
+  /*provide some proper output values if error will happen*/
+  *out = 0;
+  *outsize = 0;
+
+  file = fopen(filename, "rb");
+  if(!file) return 78;
+
+  /*get filesize:*/
+  fseek(file , 0 , SEEK_END);
+  size = ftell(file);
+  rewind(file);
+
+  /*read contents of the file into the vector*/
+  *outsize = 0;
+  *out = (unsigned char*)lodepng_malloc((size_t)size);
+  if(size && (*out)) (*outsize) = fread(*out, 1, (size_t)size, file);
+
+  fclose(file);
+  if(!(*out) && size) return 83; /*the above malloc failed*/
+  return 0;
+}
+
+/*write given buffer to the file, overwriting the file, it doesn't append to it.*/
+unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename)
+{
+  FILE* file;
+  file = fopen(filename, "wb" );
+  if(!file) return 79;
+  fwrite((char*)buffer , 1 , buffersize, file);
+  fclose(file);
+  return 0;
+}
+
+#endif /*LODEPNG_COMPILE_DISK*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* // End of common code and tools. Begin of Zlib related code.            // */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#ifdef LODEPNG_COMPILE_ZLIB
+#ifdef LODEPNG_COMPILE_ENCODER
+/*TODO: this ignores potential out of memory errors*/
+#define addBitToStream(/*size_t**/ bitpointer, /*ucvector**/ bitstream, /*unsigned char*/ bit)\
+{\
+  /*add a new byte at the end*/\
+  if(((*bitpointer) & 7) == 0) ucvector_push_back(bitstream, (unsigned char)0);\
+  /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/\
+  (bitstream->data[bitstream->size - 1]) |= (bit << ((*bitpointer) & 0x7));\
+  ++(*bitpointer);\
+}
+
+static void addBitsToStream(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits)
+{
+  size_t i;
+  for(i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> i) & 1));
+}
+
+static void addBitsToStreamReversed(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits)
+{
+  size_t i;
+  for(i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> (nbits - 1 - i)) & 1));
+}
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+#ifdef LODEPNG_COMPILE_DECODER
+
+#define READBIT(bitpointer, bitstream) ((bitstream[bitpointer >> 3] >> (bitpointer & 0x7)) & (unsigned char)1)
+
+static unsigned char readBitFromStream(size_t* bitpointer, const unsigned char* bitstream)
+{
+  unsigned char result = (unsigned char)(READBIT(*bitpointer, bitstream));
+  ++(*bitpointer);
+  return result;
+}
+
+static unsigned readBitsFromStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits)
+{
+  unsigned result = 0, i;
+  for(i = 0; i != nbits; ++i)
+  {
+    result += ((unsigned)READBIT(*bitpointer, bitstream)) << i;
+    ++(*bitpointer);
+  }
+  return result;
+}
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / Deflate - Huffman                                                      / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#define FIRST_LENGTH_CODE_INDEX 257
+#define LAST_LENGTH_CODE_INDEX 285
+/*256 literals, the end code, some length codes, and 2 unused codes*/
+#define NUM_DEFLATE_CODE_SYMBOLS 288
+/*the distance codes have their own symbols, 30 used, 2 unused*/
+#define NUM_DISTANCE_SYMBOLS 32
+/*the code length codes. 0-15: code lengths, 16: copy previous 3-6 times, 17: 3-10 zeros, 18: 11-138 zeros*/
+#define NUM_CODE_LENGTH_CODES 19
+
+/*the base lengths represented by codes 257-285*/
+static const unsigned LENGTHBASE[29]
+  = {3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59,
+     67, 83, 99, 115, 131, 163, 195, 227, 258};
+
+/*the extra bits used by codes 257-285 (added to base length)*/
+static const unsigned LENGTHEXTRA[29]
+  = {0, 0, 0, 0, 0, 0, 0,  0,  1,  1,  1,  1,  2,  2,  2,  2,  3,  3,  3,  3,
+      4,  4,  4,   4,   5,   5,   5,   5,   0};
+
+/*the base backwards distances (the bits of distance codes appear after length codes and use their own huffman tree)*/
+static const unsigned DISTANCEBASE[30]
+  = {1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513,
+     769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577};
+
+/*the extra bits of backwards distances (added to base)*/
+static const unsigned DISTANCEEXTRA[30]
+  = {0, 0, 0, 0, 1, 1, 2,  2,  3,  3,  4,  4,  5,  5,   6,   6,   7,   7,   8,
+       8,    9,    9,   10,   10,   11,   11,   12,    12,    13,    13};
+
+/*the order in which "code length alphabet code lengths" are stored, out of this
+the huffman tree of the dynamic huffman tree lengths is generated*/
+static const unsigned CLCL_ORDER[NUM_CODE_LENGTH_CODES]
+  = {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/*
+Huffman tree struct, containing multiple representations of the tree
+*/
+typedef struct HuffmanTree
+{
+  unsigned* tree2d;
+  unsigned* tree1d;
+  unsigned* lengths; /*the lengths of the codes of the 1d-tree*/
+  unsigned maxbitlen; /*maximum number of bits a single code can get*/
+  unsigned numcodes; /*number of symbols in the alphabet = number of codes*/
+} HuffmanTree;
+
+/*function used for debug purposes to draw the tree in ascii art with C++*/
+/*
+static void HuffmanTree_draw(HuffmanTree* tree)
+{
+  std::cout << "tree. length: " << tree->numcodes << " maxbitlen: " << tree->maxbitlen << std::endl;
+  for(size_t i = 0; i != tree->tree1d.size; ++i)
+  {
+    if(tree->lengths.data[i])
+      std::cout << i << " " << tree->tree1d.data[i] << " " << tree->lengths.data[i] << std::endl;
+  }
+  std::cout << std::endl;
+}*/
+
+static void HuffmanTree_init(HuffmanTree* tree)
+{
+  tree->tree2d = 0;
+  tree->tree1d = 0;
+  tree->lengths = 0;
+}
+
+static void HuffmanTree_cleanup(HuffmanTree* tree)
+{
+  lodepng_free(tree->tree2d);
+  lodepng_free(tree->tree1d);
+  lodepng_free(tree->lengths);
+}
+
+/*the tree representation used by the decoder. return value is error*/
+static unsigned HuffmanTree_make2DTree(HuffmanTree* tree)
+{
+  unsigned nodefilled = 0; /*up to which node it is filled*/
+  unsigned treepos = 0; /*position in the tree (1 of the numcodes columns)*/
+  unsigned n, i;
+
+  tree->tree2d = (unsigned*)lodepng_malloc(tree->numcodes * 2 * sizeof(unsigned));
+  if(!tree->tree2d) return 83; /*alloc fail*/
+
+  /*
+  convert tree1d[] to tree2d[][]. In the 2D array, a value of 32767 means
+  uninited, a value >= numcodes is an address to another bit, a value < numcodes
+  is a code. The 2 rows are the 2 possible bit values (0 or 1), there are as
+  many columns as codes - 1.
+  A good huffmann tree has N * 2 - 1 nodes, of which N - 1 are internal nodes.
+  Here, the internal nodes are stored (what their 0 and 1 option point to).
+  There is only memory for such good tree currently, if there are more nodes
+  (due to too long length codes), error 55 will happen
+  */
+  for(n = 0; n < tree->numcodes * 2; ++n)
+  {
+    tree->tree2d[n] = 32767; /*32767 here means the tree2d isn't filled there yet*/
+  }
+
+  for(n = 0; n < tree->numcodes; ++n) /*the codes*/
+  {
+    for(i = 0; i != tree->lengths[n]; ++i) /*the bits for this code*/
+    {
+      unsigned char bit = (unsigned char)((tree->tree1d[n] >> (tree->lengths[n] - i - 1)) & 1);
+      /*oversubscribed, see comment in lodepng_error_text*/
+      if(treepos > 2147483647 || treepos + 2 > tree->numcodes) return 55;
+      if(tree->tree2d[2 * treepos + bit] == 32767) /*not yet filled in*/
+      {
+        if(i + 1 == tree->lengths[n]) /*last bit*/
+        {
+          tree->tree2d[2 * treepos + bit] = n; /*put the current code in it*/
+          treepos = 0;
+        }
+        else
+        {
+          /*put address of the next step in here, first that address has to be found of course
+          (it's just nodefilled + 1)...*/
+          ++nodefilled;
+          /*addresses encoded with numcodes added to it*/
+          tree->tree2d[2 * treepos + bit] = nodefilled + tree->numcodes;
+          treepos = nodefilled;
+        }
+      }
+      else treepos = tree->tree2d[2 * treepos + bit] - tree->numcodes;
+    }
+  }
+
+  for(n = 0; n < tree->numcodes * 2; ++n)
+  {
+    if(tree->tree2d[n] == 32767) tree->tree2d[n] = 0; /*remove possible remaining 32767's*/
+  }
+
+  return 0;
+}
+
+/*
+Second step for the ...makeFromLengths and ...makeFromFrequencies functions.
+numcodes, lengths and maxbitlen must already be filled in correctly. return
+value is error.
+*/
+static unsigned HuffmanTree_makeFromLengths2(HuffmanTree* tree)
+{
+  uivector blcount;
+  uivector nextcode;
+  unsigned error = 0;
+  unsigned bits, n;
+
+  uivector_init(&blcount);
+  uivector_init(&nextcode);
+
+  tree->tree1d = (unsigned*)lodepng_malloc(tree->numcodes * sizeof(unsigned));
+  if(!tree->tree1d) error = 83; /*alloc fail*/
+
+  if(!uivector_resizev(&blcount, tree->maxbitlen + 1, 0)
+  || !uivector_resizev(&nextcode, tree->maxbitlen + 1, 0))
+    error = 83; /*alloc fail*/
+
+  if(!error)
+  {
+    /*step 1: count number of instances of each code length*/
+    for(bits = 0; bits != tree->numcodes; ++bits) ++blcount.data[tree->lengths[bits]];
+    /*step 2: generate the nextcode values*/
+    for(bits = 1; bits <= tree->maxbitlen; ++bits)
+    {
+      nextcode.data[bits] = (nextcode.data[bits - 1] + blcount.data[bits - 1]) << 1;
+    }
+    /*step 3: generate all the codes*/
+    for(n = 0; n != tree->numcodes; ++n)
+    {
+      if(tree->lengths[n] != 0) tree->tree1d[n] = nextcode.data[tree->lengths[n]]++;
+    }
+  }
+
+  uivector_cleanup(&blcount);
+  uivector_cleanup(&nextcode);
+
+  if(!error) return HuffmanTree_make2DTree(tree);
+  else return error;
+}
+
+/*
+given the code lengths (as stored in the PNG file), generate the tree as defined
+by Deflate. maxbitlen is the maximum bits that a code in the tree can have.
+return value is error.
+*/
+static unsigned HuffmanTree_makeFromLengths(HuffmanTree* tree, const unsigned* bitlen,
+                                            size_t numcodes, unsigned maxbitlen)
+{
+  unsigned i;
+  tree->lengths = (unsigned*)lodepng_malloc(numcodes * sizeof(unsigned));
+  if(!tree->lengths) return 83; /*alloc fail*/
+  for(i = 0; i != numcodes; ++i) tree->lengths[i] = bitlen[i];
+  tree->numcodes = (unsigned)numcodes; /*number of symbols*/
+  tree->maxbitlen = maxbitlen;
+  return HuffmanTree_makeFromLengths2(tree);
+}
+
+#ifdef LODEPNG_COMPILE_ENCODER
+
+/*
+A coin, this is the terminology used for the package-merge algorithm and the
+coin collector's problem. This is used to generate the huffman tree.
+A coin can be multiple coins (when they're merged)
+*/
+typedef struct Coin
+{
+  uivector symbols;
+  float weight; /*the sum of all weights in this coin*/
+} Coin;
+
+static void coin_init(Coin* c)
+{
+  uivector_init(&c->symbols);
+}
+
+/*argument c is void* so that this dtor can be given as function pointer to the vector resize function*/
+static void coin_cleanup(void* c)
+{
+  uivector_cleanup(&((Coin*)c)->symbols);
+}
+
+static void coin_copy(Coin* c1, const Coin* c2)
+{
+  c1->weight = c2->weight;
+  uivector_copy(&c1->symbols, &c2->symbols);
+}
+
+static void add_coins(Coin* c1, const Coin* c2)
+{
+  size_t i;
+  for(i = 0; i != c2->symbols.size; ++i) uivector_push_back(&c1->symbols, c2->symbols.data[i]);
+  c1->weight += c2->weight;
+}
+
+static void init_coins(Coin* coins, size_t num)
+{
+  size_t i;
+  for(i = 0; i != num; ++i) coin_init(&coins[i]);
+}
+
+static void cleanup_coins(Coin* coins, size_t num)
+{
+  size_t i;
+  for(i = 0; i != num; ++i) coin_cleanup(&coins[i]);
+}
+
+static int coin_compare(const void* a, const void* b) {
+  float wa = ((const Coin*)a)->weight;
+  float wb = ((const Coin*)b)->weight;
+  return wa > wb ? 1 : wa < wb ? -1 : 0;
+}
+
+static unsigned append_symbol_coins(Coin* coins, const unsigned* frequencies, unsigned numcodes, size_t sum)
+{
+  unsigned i;
+  unsigned j = 0; /*index of present symbols*/
+  for(i = 0; i != numcodes; ++i)
+  {
+    if(frequencies[i] != 0) /*only include symbols that are present*/
+    {
+      coins[j].weight = frequencies[i] / (float)sum;
+      uivector_push_back(&coins[j].symbols, i);
+      ++j;
+    }
+  }
+  return 0;
+}
+
+unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies,
+                                      size_t numcodes, unsigned maxbitlen)
+{
+  unsigned i, j;
+  size_t sum = 0, numpresent = 0;
+  unsigned error = 0;
+  Coin* coins; /*the coins of the currently calculated row*/
+  Coin* prev_row; /*the previous row of coins*/
+  size_t numcoins;
+  size_t coinmem;
+
+  if(numcodes == 0) return 80; /*error: a tree of 0 symbols is not supposed to be made*/
+
+  for(i = 0; i != numcodes; ++i)
+  {
+    if(frequencies[i] > 0)
+    {
+      ++numpresent;
+      sum += frequencies[i];
+    }
+  }
+
+  for(i = 0; i != numcodes; ++i) lengths[i] = 0;
+
+  /*ensure at least two present symbols. There should be at least one symbol
+  according to RFC 1951 section 3.2.7. To decoders incorrectly require two. To
+  make these work as well ensure there are at least two symbols. The
+  Package-Merge code below also doesn't work correctly if there's only one
+  symbol, it'd give it the theoritical 0 bits but in practice zlib wants 1 bit*/
+  if(numpresent == 0)
+  {
+    lengths[0] = lengths[1] = 1; /*note that for RFC 1951 section 3.2.7, only lengths[0] = 1 is needed*/
+  }
+  else if(numpresent == 1)
+  {
+    for(i = 0; i != numcodes; ++i)
+    {
+      if(frequencies[i])
+      {
+        lengths[i] = 1;
+        lengths[i == 0 ? 1 : 0] = 1;
+        break;
+      }
+    }
+  }
+  else
+  {
+    /*Package-Merge algorithm represented by coin collector's problem
+    For every symbol, maxbitlen coins will be created*/
+
+    coinmem = numpresent * 2; /*max amount of coins needed with the current algo*/
+    coins = (Coin*)lodepng_malloc(sizeof(Coin) * coinmem);
+    prev_row = (Coin*)lodepng_malloc(sizeof(Coin) * coinmem);
+    if(!coins || !prev_row)
+    {
+      lodepng_free(coins);
+      lodepng_free(prev_row);
+      return 83; /*alloc fail*/
+    }
+    init_coins(coins, coinmem);
+    init_coins(prev_row, coinmem);
+
+    /*first row, lowest denominator*/
+    error = append_symbol_coins(coins, frequencies, numcodes, sum);
+    numcoins = numpresent;
+    qsort(coins, numcoins, sizeof(Coin), coin_compare);
+    if(!error)
+    {
+      unsigned numprev = 0;
+      for(j = 1; j <= maxbitlen && !error; ++j) /*each of the remaining rows*/
+      {
+        unsigned tempnum;
+        Coin* tempcoins;
+        /*swap prev_row and coins, and their amounts*/
+        tempcoins = prev_row; prev_row = coins; coins = tempcoins;
+        tempnum = numprev; numprev = numcoins; numcoins = tempnum;
+
+        cleanup_coins(coins, numcoins);
+        init_coins(coins, numcoins);
+
+        numcoins = 0;
+
+        /*fill in the merged coins of the previous row*/
+        for(i = 0; i + 1 < numprev; i += 2)
+        {
+          /*merge prev_row[i] and prev_row[i + 1] into new coin*/
+          Coin* coin = &coins[numcoins++];
+          coin_copy(coin, &prev_row[i]);
+          add_coins(coin, &prev_row[i + 1]);
+        }
+        /*fill in all the original symbols again*/
+        if(j < maxbitlen)
+        {
+          error = append_symbol_coins(coins + numcoins, frequencies, numcodes, sum);
+          numcoins += numpresent;
+        }
+        qsort(coins, numcoins, sizeof(Coin), coin_compare);
+      }
+    }
+
+    if(!error)
+    {
+      /*calculate the lengths of each symbol, as the amount of times a coin of each symbol is used*/
+      for(i = 0; i + 1 < numpresent; ++i)
+      {
+        Coin* coin = &coins[i];
+        for(j = 0; j < coin->symbols.size; ++j) ++lengths[coin->symbols.data[j]];
+      }
+    }
+
+    cleanup_coins(coins, coinmem);
+    lodepng_free(coins);
+    cleanup_coins(prev_row, coinmem);
+    lodepng_free(prev_row);
+  }
+
+  return error;
+}
+
+/*Create the Huffman tree given the symbol frequencies*/
+static unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree, const unsigned* frequencies,
+                                                size_t mincodes, size_t numcodes, unsigned maxbitlen)
+{
+  unsigned error = 0;
+  while(!frequencies[numcodes - 1] && numcodes > mincodes) --numcodes; /*trim zeroes*/
+  tree->maxbitlen = maxbitlen;
+  tree->numcodes = (unsigned)numcodes; /*number of symbols*/
+  tree->lengths = (unsigned*)lodepng_realloc(tree->lengths, numcodes * sizeof(unsigned));
+  if(!tree->lengths) return 83; /*alloc fail*/
+  /*initialize all lengths to 0*/
+  memset(tree->lengths, 0, numcodes * sizeof(unsigned));
+
+  error = lodepng_huffman_code_lengths(tree->lengths, frequencies, numcodes, maxbitlen);
+  if(!error) error = HuffmanTree_makeFromLengths2(tree);
+  return error;
+}
+
+static unsigned HuffmanTree_getCode(const HuffmanTree* tree, unsigned index)
+{
+  return tree->tree1d[index];
+}
+
+static unsigned HuffmanTree_getLength(const HuffmanTree* tree, unsigned index)
+{
+  return tree->lengths[index];
+}
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+/*get the literal and length code tree of a deflated block with fixed tree, as per the deflate specification*/
+static unsigned generateFixedLitLenTree(HuffmanTree* tree)
+{
+  unsigned i, error = 0;
+  unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned));
+  if(!bitlen) return 83; /*alloc fail*/
+
+  /*288 possible codes: 0-255=literals, 256=endcode, 257-285=lengthcodes, 286-287=unused*/
+  for(i =   0; i <= 143; ++i) bitlen[i] = 8;
+  for(i = 144; i <= 255; ++i) bitlen[i] = 9;
+  for(i = 256; i <= 279; ++i) bitlen[i] = 7;
+  for(i = 280; i <= 287; ++i) bitlen[i] = 8;
+
+  error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DEFLATE_CODE_SYMBOLS, 15);
+
+  lodepng_free(bitlen);
+  return error;
+}
+
+/*get the distance code tree of a deflated block with fixed tree, as specified in the deflate specification*/
+static unsigned generateFixedDistanceTree(HuffmanTree* tree)
+{
+  unsigned i, error = 0;
+  unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned));
+  if(!bitlen) return 83; /*alloc fail*/
+
+  /*there are 32 distance codes, but 30-31 are unused*/
+  for(i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen[i] = 5;
+  error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DISTANCE_SYMBOLS, 15);
+
+  lodepng_free(bitlen);
+  return error;
+}
+
+#ifdef LODEPNG_COMPILE_DECODER
+
+/*
+returns the code, or (unsigned)(-1) if error happened
+inbitlength is the length of the complete buffer, in bits (so its byte length times 8)
+*/
+static unsigned huffmanDecodeSymbol(const unsigned char* in, size_t* bp,
+                                    const HuffmanTree* codetree, size_t inbitlength)
+{
+  unsigned treepos = 0, ct;
+  for(;;)
+  {
+    if(*bp >= inbitlength) return (unsigned)(-1); /*error: end of input memory reached without endcode*/
+    /*
+    decode the symbol from the tree. The "readBitFromStream" code is inlined in
+    the expression below because this is the biggest bottleneck while decoding
+    */
+    ct = codetree->tree2d[(treepos << 1) + READBIT(*bp, in)];
+    ++(*bp);
+    if(ct < codetree->numcodes) return ct; /*the symbol is decoded, return it*/
+    else treepos = ct - codetree->numcodes; /*symbol not yet decoded, instead move tree position*/
+
+    if(treepos >= codetree->numcodes) return (unsigned)(-1); /*error: it appeared outside the codetree*/
+  }
+}
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#ifdef LODEPNG_COMPILE_DECODER
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / Inflator (Decompressor)                                                / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/*get the tree of a deflated block with fixed tree, as specified in the deflate specification*/
+static void getTreeInflateFixed(HuffmanTree* tree_ll, HuffmanTree* tree_d)
+{
+  /*TODO: check for out of memory errors*/
+  generateFixedLitLenTree(tree_ll);
+  generateFixedDistanceTree(tree_d);
+}
+
+/*get the tree of a deflated block with dynamic tree, the tree itself is also Huffman compressed with a known tree*/
+static unsigned getTreeInflateDynamic(HuffmanTree* tree_ll, HuffmanTree* tree_d,
+                                      const unsigned char* in, size_t* bp, size_t inlength)
+{
+  /*make sure that length values that aren't filled in will be 0, or a wrong tree will be generated*/
+  unsigned error = 0;
+  unsigned n, HLIT, HDIST, HCLEN, i;
+  size_t inbitlength = inlength * 8;
+
+  /*see comments in deflateDynamic for explanation of the context and these variables, it is analogous*/
+  unsigned* bitlen_ll = 0; /*lit,len code lengths*/
+  unsigned* bitlen_d = 0; /*dist code lengths*/
+  /*code length code lengths ("clcl"), the bit lengths of the huffman tree used to compress bitlen_ll and bitlen_d*/
+  unsigned* bitlen_cl = 0;
+  HuffmanTree tree_cl; /*the code tree for code length codes (the huffman tree for compressed huffman trees)*/
+
+  if((*bp) + 14 > (inlength << 3)) return 49; /*error: the bit pointer is or will go past the memory*/
+
+  /*number of literal/length codes + 257. Unlike the spec, the value 257 is added to it here already*/
+  HLIT =  readBitsFromStream(bp, in, 5) + 257;
+  /*number of distance codes. Unlike the spec, the value 1 is added to it here already*/
+  HDIST = readBitsFromStream(bp, in, 5) + 1;
+  /*number of code length codes. Unlike the spec, the value 4 is added to it here already*/
+  HCLEN = readBitsFromStream(bp, in, 4) + 4;
+
+  if((*bp) + HCLEN * 3 > (inlength << 3)) return 50; /*error: the bit pointer is or will go past the memory*/
+
+  HuffmanTree_init(&tree_cl);
+
+  while(!error)
+  {
+    /*read the code length codes out of 3 * (amount of code length codes) bits*/
+
+    bitlen_cl = (unsigned*)lodepng_malloc(NUM_CODE_LENGTH_CODES * sizeof(unsigned));
+    if(!bitlen_cl) ERROR_BREAK(83 /*alloc fail*/);
+
+    for(i = 0; i != NUM_CODE_LENGTH_CODES; ++i)
+    {
+      if(i < HCLEN) bitlen_cl[CLCL_ORDER[i]] = readBitsFromStream(bp, in, 3);
+      else bitlen_cl[CLCL_ORDER[i]] = 0; /*if not, it must stay 0*/
+    }
+
+    error = HuffmanTree_makeFromLengths(&tree_cl, bitlen_cl, NUM_CODE_LENGTH_CODES, 7);
+    if(error) break;
+
+    /*now we can use this tree to read the lengths for the tree that this function will return*/
+    bitlen_ll = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned));
+    bitlen_d = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned));
+    if(!bitlen_ll || !bitlen_d) ERROR_BREAK(83 /*alloc fail*/);
+    for(i = 0; i != NUM_DEFLATE_CODE_SYMBOLS; ++i) bitlen_ll[i] = 0;
+    for(i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen_d[i] = 0;
+
+    /*i is the current symbol we're reading in the part that contains the code lengths of lit/len and dist codes*/
+    i = 0;
+    while(i < HLIT + HDIST)
+    {
+      unsigned code = huffmanDecodeSymbol(in, bp, &tree_cl, inbitlength);
+      if(code <= 15) /*a length code*/
+      {
+        if(i < HLIT) bitlen_ll[i] = code;
+        else bitlen_d[i - HLIT] = code;
+        ++i;
+      }
+      else if(code == 16) /*repeat previous*/
+      {
+        unsigned replength = 3; /*read in the 2 bits that indicate repeat length (3-6)*/
+        unsigned value; /*set value to the previous code*/
+
+        if (i == 0) ERROR_BREAK(54); /*can't repeat previous if i is 0*/
+
+        if((*bp + 2) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/
+        replength += readBitsFromStream(bp, in, 2);
+
+        if(i < HLIT + 1) value = bitlen_ll[i - 1];
+        else value = bitlen_d[i - HLIT - 1];
+        /*repeat this value in the next lengths*/
+        for(n = 0; n < replength; ++n)
+        {
+          if(i >= HLIT + HDIST) ERROR_BREAK(13); /*error: i is larger than the amount of codes*/
+          if(i < HLIT) bitlen_ll[i] = value;
+          else bitlen_d[i - HLIT] = value;
+          ++i;
+        }
+      }
+      else if(code == 17) /*repeat "0" 3-10 times*/
+      {
+        unsigned replength = 3; /*read in the bits that indicate repeat length*/
+        if((*bp + 3) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/
+        replength += readBitsFromStream(bp, in, 3);
+
+        /*repeat this value in the next lengths*/
+        for(n = 0; n < replength; ++n)
+        {
+          if(i >= HLIT + HDIST) ERROR_BREAK(14); /*error: i is larger than the amount of codes*/
+
+          if(i < HLIT) bitlen_ll[i] = 0;
+          else bitlen_d[i - HLIT] = 0;
+          ++i;
+        }
+      }
+      else if(code == 18) /*repeat "0" 11-138 times*/
+      {
+        unsigned replength = 11; /*read in the bits that indicate repeat length*/
+        if((*bp + 7) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/
+        replength += readBitsFromStream(bp, in, 7);
+
+        /*repeat this value in the next lengths*/
+        for(n = 0; n < replength; ++n)
+        {
+          if(i >= HLIT + HDIST) ERROR_BREAK(15); /*error: i is larger than the amount of codes*/
+
+          if(i < HLIT) bitlen_ll[i] = 0;
+          else bitlen_d[i - HLIT] = 0;
+          ++i;
+        }
+      }
+      else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/
+      {
+        if(code == (unsigned)(-1))
+        {
+          /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol
+          (10=no endcode, 11=wrong jump outside of tree)*/
+          error = (*bp) > inbitlength ? 10 : 11;
+        }
+        else error = 16; /*unexisting code, this can never happen*/
+        break;
+      }
+    }
+    if(error) break;
+
+    if(bitlen_ll[256] == 0) ERROR_BREAK(64); /*the length of the end code 256 must be larger than 0*/
+
+    /*now we've finally got HLIT and HDIST, so generate the code trees, and the function is done*/
+    error = HuffmanTree_makeFromLengths(tree_ll, bitlen_ll, NUM_DEFLATE_CODE_SYMBOLS, 15);
+    if(error) break;
+    error = HuffmanTree_makeFromLengths(tree_d, bitlen_d, NUM_DISTANCE_SYMBOLS, 15);
+
+    break; /*end of error-while*/
+  }
+
+  lodepng_free(bitlen_cl);
+  lodepng_free(bitlen_ll);
+  lodepng_free(bitlen_d);
+  HuffmanTree_cleanup(&tree_cl);
+
+  return error;
+}
+
+/*inflate a block with dynamic of fixed Huffman tree*/
+static unsigned inflateHuffmanBlock(ucvector* out, const unsigned char* in, size_t* bp,
+                                    size_t* pos, size_t inlength, unsigned btype)
+{
+  unsigned error = 0;
+  HuffmanTree tree_ll; /*the huffman tree for literal and length codes*/
+  HuffmanTree tree_d; /*the huffman tree for distance codes*/
+  size_t inbitlength = inlength * 8;
+
+  HuffmanTree_init(&tree_ll);
+  HuffmanTree_init(&tree_d);
+
+  if(btype == 1) getTreeInflateFixed(&tree_ll, &tree_d);
+  else if(btype == 2) error = getTreeInflateDynamic(&tree_ll, &tree_d, in, bp, inlength);
+
+  while(!error) /*decode all symbols until end reached, breaks at end code*/
+  {
+    /*code_ll is literal, length or end code*/
+    unsigned code_ll = huffmanDecodeSymbol(in, bp, &tree_ll, inbitlength);
+    if(code_ll <= 255) /*literal symbol*/
+    {
+      /*ucvector_push_back would do the same, but for some reason the two lines below run 10% faster*/
+      if(!ucvector_resize(out, (*pos) + 1)) ERROR_BREAK(83 /*alloc fail*/);
+      out->data[*pos] = (unsigned char)code_ll;
+      ++(*pos);
+    }
+    else if(code_ll >= FIRST_LENGTH_CODE_INDEX && code_ll <= LAST_LENGTH_CODE_INDEX) /*length code*/
+    {
+      unsigned code_d, distance;
+      unsigned numextrabits_l, numextrabits_d; /*extra bits for length and distance*/
+      size_t start, forward, backward, length;
+
+      /*part 1: get length base*/
+      length = LENGTHBASE[code_ll - FIRST_LENGTH_CODE_INDEX];
+
+      /*part 2: get extra bits and add the value of that to length*/
+      numextrabits_l = LENGTHEXTRA[code_ll - FIRST_LENGTH_CODE_INDEX];
+      if((*bp + numextrabits_l) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/
+      length += readBitsFromStream(bp, in, numextrabits_l);
+
+      /*part 3: get distance code*/
+      code_d = huffmanDecodeSymbol(in, bp, &tree_d, inbitlength);
+      if(code_d > 29)
+      {
+        if(code_ll == (unsigned)(-1)) /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/
+        {
+          /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol
+          (10=no endcode, 11=wrong jump outside of tree)*/
+          error = (*bp) > inlength * 8 ? 10 : 11;
+        }
+        else error = 18; /*error: invalid distance code (30-31 are never used)*/
+        break;
+      }
+      distance = DISTANCEBASE[code_d];
+
+      /*part 4: get extra bits from distance*/
+      numextrabits_d = DISTANCEEXTRA[code_d];
+      if((*bp + numextrabits_d) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/
+      distance += readBitsFromStream(bp, in, numextrabits_d);
+
+      /*part 5: fill in all the out[n] values based on the length and dist*/
+      start = (*pos);
+      if(distance > start) ERROR_BREAK(52); /*too long backward distance*/
+      backward = start - distance;
+
+      if(!ucvector_resize(out, (*pos) + length)) ERROR_BREAK(83 /*alloc fail*/);
+      for(forward = 0; forward < length; ++forward)
+      {
+        out->data[(*pos)] = out->data[backward];
+        ++(*pos);
+        ++backward;
+        if(backward >= start) backward = start - distance;
+      }
+    }
+    else if(code_ll == 256)
+    {
+      break; /*end code, break the loop*/
+    }
+    else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/
+    {
+      /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol
+      (10=no endcode, 11=wrong jump outside of tree)*/
+      error = ((*bp) > inlength * 8) ? 10 : 11;
+      break;
+    }
+  }
+
+  HuffmanTree_cleanup(&tree_ll);
+  HuffmanTree_cleanup(&tree_d);
+
+  return error;
+}
+
+static unsigned inflateNoCompression(ucvector* out, const unsigned char* in, size_t* bp, size_t* pos, size_t inlength)
+{
+  size_t p;
+  unsigned LEN, NLEN, n, error = 0;
+
+  /*go to first boundary of byte*/
+  while(((*bp) & 0x7) != 0) ++(*bp);
+  p = (*bp) / 8; /*byte position*/
+
+  /*read LEN (2 bytes) and NLEN (2 bytes)*/
+  if(p + 4 >= inlength) return 52; /*error, bit pointer will jump past memory*/
+  LEN = in[p] + 256u * in[p + 1]; p += 2;
+  NLEN = in[p] + 256u * in[p + 1]; p += 2;
+
+  /*check if 16-bit NLEN is really the one's complement of LEN*/
+  if(LEN + NLEN != 65535) return 21; /*error: NLEN is not one's complement of LEN*/
+
+  if(!ucvector_resize(out, (*pos) + LEN)) return 83; /*alloc fail*/
+
+  /*read the literal data: LEN bytes are now stored in the out buffer*/
+  if(p + LEN > inlength) return 23; /*error: reading outside of in buffer*/
+  for(n = 0; n < LEN; ++n) out->data[(*pos)++] = in[p++];
+
+  (*bp) = p * 8;
+
+  return error;
+}
+
+static unsigned lodepng_inflatev(ucvector* out,
+                                 const unsigned char* in, size_t insize,
+                                 const LodePNGDecompressSettings* settings)
+{
+  /*bit pointer in the "in" data, current byte is bp >> 3, current bit is bp & 0x7 (from lsb to msb of the byte)*/
+  size_t bp = 0;
+  unsigned BFINAL = 0;
+  size_t pos = 0; /*byte position in the out buffer*/
+  unsigned error = 0;
+
+  (void)settings;
+
+  while(!BFINAL)
+  {
+    unsigned BTYPE;
+    if(bp + 2 >= insize * 8) return 52; /*error, bit pointer will jump past memory*/
+    BFINAL = readBitFromStream(&bp, in);
+    BTYPE = 1u * readBitFromStream(&bp, in);
+    BTYPE += 2u * readBitFromStream(&bp, in);
+
+    if(BTYPE == 3) return 20; /*error: invalid BTYPE*/
+    else if(BTYPE == 0) error = inflateNoCompression(out, in, &bp, &pos, insize); /*no compression*/
+    else error = inflateHuffmanBlock(out, in, &bp, &pos, insize, BTYPE); /*compression, BTYPE 01 or 10*/
+
+    if(error) return error;
+  }
+
+  return error;
+}
+
+unsigned lodepng_inflate(unsigned char** out, size_t* outsize,
+                         const unsigned char* in, size_t insize,
+                         const LodePNGDecompressSettings* settings)
+{
+  unsigned error;
+  ucvector v;
+  ucvector_init_buffer(&v, *out, *outsize);
+  error = lodepng_inflatev(&v, in, insize, settings);
+  *out = v.data;
+  *outsize = v.size;
+  return error;
+}
+
+static unsigned inflate(unsigned char** out, size_t* outsize,
+                        const unsigned char* in, size_t insize,
+                        const LodePNGDecompressSettings* settings)
+{
+  if(settings->custom_inflate)
+  {
+    return settings->custom_inflate(out, outsize, in, insize, settings);
+  }
+  else
+  {
+    return lodepng_inflate(out, outsize, in, insize, settings);
+  }
+}
+
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#ifdef LODEPNG_COMPILE_ENCODER
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / Deflator (Compressor)                                                  / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+static const size_t MAX_SUPPORTED_DEFLATE_LENGTH = 258;
+
+/*bitlen is the size in bits of the code*/
+static void addHuffmanSymbol(size_t* bp, ucvector* compressed, unsigned code, unsigned bitlen)
+{
+  addBitsToStreamReversed(bp, compressed, code, bitlen);
+}
+
+/*search the index in the array, that has the largest value smaller than or equal to the given value,
+given array must be sorted (if no value is smaller, it returns the size of the given array)*/
+static size_t searchCodeIndex(const unsigned* array, size_t array_size, size_t value)
+{
+  /*linear search implementation*/
+  /*for(size_t i = 1; i < array_size; ++i) if(array[i] > value) return i - 1;
+  return array_size - 1;*/
+
+  /*binary search implementation (not that much faster) (precondition: array_size > 0)*/
+  size_t left  = 1;
+  size_t right = array_size - 1;
+  while(left <= right)
+  {
+    size_t mid = (left + right) / 2;
+    if(array[mid] <= value) left = mid + 1; /*the value to find is more to the right*/
+    else if(array[mid - 1] > value) right = mid - 1; /*the value to find is more to the left*/
+    else return mid - 1;
+  }
+  return array_size - 1;
+}
+
+static void addLengthDistance(uivector* values, size_t length, size_t distance)
+{
+  /*values in encoded vector are those used by deflate:
+  0-255: literal bytes
+  256: end
+  257-285: length/distance pair (length code, followed by extra length bits, distance code, extra distance bits)
+  286-287: invalid*/
+
+  unsigned length_code = (unsigned)searchCodeIndex(LENGTHBASE, 29, length);
+  unsigned extra_length = (unsigned)(length - LENGTHBASE[length_code]);
+  unsigned dist_code = (unsigned)searchCodeIndex(DISTANCEBASE, 30, distance);
+  unsigned extra_distance = (unsigned)(distance - DISTANCEBASE[dist_code]);
+
+  uivector_push_back(values, length_code + FIRST_LENGTH_CODE_INDEX);
+  uivector_push_back(values, extra_length);
+  uivector_push_back(values, dist_code);
+  uivector_push_back(values, extra_distance);
+}
+
+/*3 bytes of data get encoded into two bytes. The hash cannot use more than 3
+bytes as input because 3 is the minimum match length for deflate*/
+static const unsigned HASH_NUM_VALUES = 65536;
+static const unsigned HASH_BIT_MASK = 65535; /*HASH_NUM_VALUES - 1, but C90 does not like that as initializer*/
+
+typedef struct Hash
+{
+  int* head; /*hash value to head circular pos - can be outdated if went around window*/
+  /*circular pos to prev circular pos*/
+  unsigned short* chain;
+  int* val; /*circular pos to hash value*/
+
+  /*TODO: do this not only for zeros but for any repeated byte. However for PNG
+  it's always going to be the zeros that dominate, so not important for PNG*/
+  int* headz; /*similar to head, but for chainz*/
+  unsigned short* chainz; /*those with same amount of zeros*/
+  unsigned short* zeros; /*length of zeros streak, used as a second hash chain*/
+} Hash;
+
+static unsigned hash_init(Hash* hash, unsigned windowsize)
+{
+  unsigned i;
+  hash->head = (int*)lodepng_malloc(sizeof(int) * HASH_NUM_VALUES);
+  hash->val = (int*)lodepng_malloc(sizeof(int) * windowsize);
+  hash->chain = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize);
+
+  hash->zeros = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize);
+  hash->headz = (int*)lodepng_malloc(sizeof(int) * (MAX_SUPPORTED_DEFLATE_LENGTH + 1));
+  hash->chainz = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize);
+
+  if(!hash->head || !hash->chain || !hash->val  || !hash->headz|| !hash->chainz || !hash->zeros)
+  {
+    return 83; /*alloc fail*/
+  }
+
+  /*initialize hash table*/
+  for(i = 0; i != HASH_NUM_VALUES; ++i) hash->head[i] = -1;
+  for(i = 0; i != windowsize; ++i) hash->val[i] = -1;
+  for(i = 0; i != windowsize; ++i) hash->chain[i] = i; /*same value as index indicates uninitialized*/
+
+  for(i = 0; i <= MAX_SUPPORTED_DEFLATE_LENGTH; ++i) hash->headz[i] = -1;
+  for(i = 0; i != windowsize; ++i) hash->chainz[i] = i; /*same value as index indicates uninitialized*/
+
+  return 0;
+}
+
+static void hash_cleanup(Hash* hash)
+{
+  lodepng_free(hash->head);
+  lodepng_free(hash->val);
+  lodepng_free(hash->chain);
+
+  lodepng_free(hash->zeros);
+  lodepng_free(hash->headz);
+  lodepng_free(hash->chainz);
+}
+
+
+
+static unsigned getHash(const unsigned char* data, size_t size, size_t pos)
+{
+  unsigned result = 0;
+  if (pos + 2 < size)
+  {
+    /*A simple shift and xor hash is used. Since the data of PNGs is dominated
+    by zeroes due to the filters, a better hash does not have a significant
+    effect on speed in traversing the chain, and causes more time spend on
+    calculating the hash.*/
+    result ^= (unsigned)(data[pos + 0] << 0u);
+    result ^= (unsigned)(data[pos + 1] << 4u);
+    result ^= (unsigned)(data[pos + 2] << 8u);
+  } else {
+    size_t amount, i;
+    if(pos >= size) return 0;
+    amount = size - pos;
+    for(i = 0; i != amount; ++i) result ^= (unsigned)(data[pos + i] << (i * 8u));
+  }
+  return result & HASH_BIT_MASK;
+}
+
+static unsigned countZeros(const unsigned char* data, size_t size, size_t pos)
+{
+  const unsigned char* start = data + pos;
+  const unsigned char* end = start + MAX_SUPPORTED_DEFLATE_LENGTH;
+  if(end > data + size) end = data + size;
+  data = start;
+  while (data != end && *data == 0) ++data;
+  /*subtracting two addresses returned as 32-bit number (max value is MAX_SUPPORTED_DEFLATE_LENGTH)*/
+  return (unsigned)(data - start);
+}
+
+/*wpos = pos & (windowsize - 1)*/
+static void updateHashChain(Hash* hash, size_t wpos, unsigned hashval, unsigned short numzeros)
+{
+  hash->val[wpos] = (int)hashval;
+  if(hash->head[hashval] != -1) hash->chain[wpos] = hash->head[hashval];
+  hash->head[hashval] = wpos;
+
+  hash->zeros[wpos] = numzeros;
+  if(hash->headz[numzeros] != -1) hash->chainz[wpos] = hash->headz[numzeros];
+  hash->headz[numzeros] = wpos;
+}
+
+/*
+LZ77-encode the data. Return value is error code. The input are raw bytes, the output
+is in the form of unsigned integers with codes representing for example literal bytes, or
+length/distance pairs.
+It uses a hash table technique to let it encode faster. When doing LZ77 encoding, a
+sliding window (of windowsize) is used, and all past bytes in that window can be used as
+the "dictionary". A brute force search through all possible distances would be slow, and
+this hash technique is one out of several ways to speed this up.
+*/
+static unsigned encodeLZ77(uivector* out, Hash* hash,
+                           const unsigned char* in, size_t inpos, size_t insize, unsigned windowsize,
+                           unsigned minmatch, unsigned nicematch, unsigned lazymatching)
+{
+  size_t pos;
+  unsigned i, error = 0;
+  /*for large window lengths, assume the user wants no compression loss. Otherwise, max hash chain length speedup.*/
+  unsigned maxchainlength = windowsize >= 8192 ? windowsize : windowsize / 8;
+  unsigned maxlazymatch = windowsize >= 8192 ? MAX_SUPPORTED_DEFLATE_LENGTH : 64;
+
+  unsigned usezeros = 1; /*not sure if setting it to false for windowsize < 8192 is better or worse*/
+  unsigned numzeros = 0;
+
+  unsigned offset; /*the offset represents the distance in LZ77 terminology*/
+  unsigned length;
+  unsigned lazy = 0;
+  unsigned lazylength = 0, lazyoffset = 0;
+  unsigned hashval;
+  unsigned current_offset, current_length;
+  unsigned prev_offset;
+  const unsigned char *lastptr, *foreptr, *backptr;
+  unsigned hashpos;
+
+  if(windowsize == 0 || windowsize > 32768) return 60; /*error: windowsize smaller/larger than allowed*/
+  if((windowsize & (windowsize - 1)) != 0) return 90; /*error: must be power of two*/
+
+  if(nicematch > MAX_SUPPORTED_DEFLATE_LENGTH) nicematch = MAX_SUPPORTED_DEFLATE_LENGTH;
+
+  for(pos = inpos; pos < insize; ++pos)
+  {
+    size_t wpos = pos & (windowsize - 1); /*position for in 'circular' hash buffers*/
+    unsigned chainlength = 0;
+
+    hashval = getHash(in, insize, pos);
+
+    if(usezeros && hashval == 0)
+    {
+      if (numzeros == 0) numzeros = countZeros(in, insize, pos);
+      else if (pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros;
+    }
+    else
+    {
+      numzeros = 0;
+    }
+
+    updateHashChain(hash, wpos, hashval, numzeros);
+
+    /*the length and offset found for the current position*/
+    length = 0;
+    offset = 0;
+
+    hashpos = hash->chain[wpos];
+
+    lastptr = &in[insize < pos + MAX_SUPPORTED_DEFLATE_LENGTH ? insize : pos + MAX_SUPPORTED_DEFLATE_LENGTH];
+
+    /*search for the longest string*/
+    prev_offset = 0;
+    for(;;)
+    {
+      if(chainlength++ >= maxchainlength) break;
+      current_offset = hashpos <= wpos ? wpos - hashpos : wpos - hashpos + windowsize;
+
+      if(current_offset < prev_offset) break; /*stop when went completely around the circular buffer*/
+      prev_offset = current_offset;
+      if(current_offset > 0)
+      {
+        /*test the next characters*/
+        foreptr = &in[pos];
+        backptr = &in[pos - current_offset];
+
+        /*common case in PNGs is lots of zeros. Quickly skip over them as a speedup*/
+        if(numzeros >= 3)
+        {
+          unsigned skip = hash->zeros[hashpos];
+          if(skip > numzeros) skip = numzeros;
+          backptr += skip;
+          foreptr += skip;
+        }
+
+        while(foreptr != lastptr && *backptr == *foreptr) /*maximum supported length by deflate is max length*/
+        {
+          ++backptr;
+          ++foreptr;
+        }
+        current_length = (unsigned)(foreptr - &in[pos]);
+
+        if(current_length > length)
+        {
+          length = current_length; /*the longest length*/
+          offset = current_offset; /*the offset that is related to this longest length*/
+          /*jump out once a length of max length is found (speed gain). This also jumps
+          out if length is MAX_SUPPORTED_DEFLATE_LENGTH*/
+          if(current_length >= nicematch) break;
+        }
+      }
+
+      if(hashpos == hash->chain[hashpos]) break;
+
+      if(numzeros >= 3 && length > numzeros) {
+        hashpos = hash->chainz[hashpos];
+        if(hash->zeros[hashpos] != numzeros) break;
+      } else {
+        hashpos = hash->chain[hashpos];
+        /*outdated hash value, happens if particular value was not encountered in whole last window*/
+        if(hash->val[hashpos] != (int)hashval) break;
+      }
+    }
+
+    if(lazymatching)
+    {
+      if(!lazy && length >= 3 && length <= maxlazymatch && length < MAX_SUPPORTED_DEFLATE_LENGTH)
+      {
+        lazy = 1;
+        lazylength = length;
+        lazyoffset = offset;
+        continue; /*try the next byte*/
+      }
+      if(lazy)
+      {
+        lazy = 0;
+        if(pos == 0) ERROR_BREAK(81);
+        if(length > lazylength + 1)
+        {
+          /*push the previous character as literal*/
+          if(!uivector_push_back(out, in[pos - 1])) ERROR_BREAK(83 /*alloc fail*/);
+        }
+        else
+        {
+          length = lazylength;
+          offset = lazyoffset;
+          hash->head[hashval] = -1; /*the same hashchain update will be done, this ensures no wrong alteration*/
+          hash->headz[numzeros] = -1; /*idem*/
+          --pos;
+        }
+      }
+    }
+    if(length >= 3 && offset > windowsize) ERROR_BREAK(86 /*too big (or overflown negative) offset*/);
+
+    /*encode it as length/distance pair or literal value*/
+    if(length < 3) /*only lengths of 3 or higher are supported as length/distance pair*/
+    {
+      if(!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/);
+    }
+    else if(length < minmatch || (length == 3 && offset > 4096))
+    {
+      /*compensate for the fact that longer offsets have more extra bits, a
+      length of only 3 may be not worth it then*/
+      if(!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/);
+    }
+    else
+    {
+      addLengthDistance(out, length, offset);
+      for(i = 1; i < length; ++i)
+      {
+        ++pos;
+        wpos = pos & (windowsize - 1);
+        hashval = getHash(in, insize, pos);
+        if(usezeros && hashval == 0)
+        {
+          if (numzeros == 0) numzeros = countZeros(in, insize, pos);
+          else if (pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros;
+        }
+        else
+        {
+          numzeros = 0;
+        }
+        updateHashChain(hash, wpos, hashval, numzeros);
+      }
+    }
+  } /*end of the loop through each character of input*/
+
+  return error;
+}
+
+/* /////////////////////////////////////////////////////////////////////////// */
+
+static unsigned deflateNoCompression(ucvector* out, const unsigned char* data, size_t datasize)
+{
+  /*non compressed deflate block data: 1 bit BFINAL,2 bits BTYPE,(5 bits): it jumps to start of next byte,
+  2 bytes LEN, 2 bytes NLEN, LEN bytes literal DATA*/
+
+  size_t i, j, numdeflateblocks = (datasize + 65534) / 65535;
+  unsigned datapos = 0;
+  for(i = 0; i != numdeflateblocks; ++i)
+  {
+    unsigned BFINAL, BTYPE, LEN, NLEN;
+    unsigned char firstbyte;
+
+    BFINAL = (i == numdeflateblocks - 1);
+    BTYPE = 0;
+
+    firstbyte = (unsigned char)(BFINAL + ((BTYPE & 1) << 1) + ((BTYPE & 2) << 1));
+    ucvector_push_back(out, firstbyte);
+
+    LEN = 65535;
+    if(datasize - datapos < 65535) LEN = (unsigned)datasize - datapos;
+    NLEN = 65535 - LEN;
+
+    ucvector_push_back(out, (unsigned char)(LEN % 256));
+    ucvector_push_back(out, (unsigned char)(LEN / 256));
+    ucvector_push_back(out, (unsigned char)(NLEN % 256));
+    ucvector_push_back(out, (unsigned char)(NLEN / 256));
+
+    /*Decompressed data*/
+    for(j = 0; j < 65535 && datapos < datasize; ++j)
+    {
+      ucvector_push_back(out, data[datapos++]);
+    }
+  }
+
+  return 0;
+}
+
+/*
+write the lz77-encoded data, which has lit, len and dist codes, to compressed stream using huffman trees.
+tree_ll: the tree for lit and len codes.
+tree_d: the tree for distance codes.
+*/
+static void writeLZ77data(size_t* bp, ucvector* out, const uivector* lz77_encoded,
+                          const HuffmanTree* tree_ll, const HuffmanTree* tree_d)
+{
+  size_t i = 0;
+  for(i = 0; i != lz77_encoded->size; ++i)
+  {
+    unsigned val = lz77_encoded->data[i];
+    addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_ll, val), HuffmanTree_getLength(tree_ll, val));
+    if(val > 256) /*for a length code, 3 more things have to be added*/
+    {
+      unsigned length_index = val - FIRST_LENGTH_CODE_INDEX;
+      unsigned n_length_extra_bits = LENGTHEXTRA[length_index];
+      unsigned length_extra_bits = lz77_encoded->data[++i];
+
+      unsigned distance_code = lz77_encoded->data[++i];
+
+      unsigned distance_index = distance_code;
+      unsigned n_distance_extra_bits = DISTANCEEXTRA[distance_index];
+      unsigned distance_extra_bits = lz77_encoded->data[++i];
+
+      addBitsToStream(bp, out, length_extra_bits, n_length_extra_bits);
+      addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_d, distance_code),
+                       HuffmanTree_getLength(tree_d, distance_code));
+      addBitsToStream(bp, out, distance_extra_bits, n_distance_extra_bits);
+    }
+  }
+}
+
+/*Deflate for a block of type "dynamic", that is, with freely, optimally, created huffman trees*/
+static unsigned deflateDynamic(ucvector* out, size_t* bp, Hash* hash,
+                               const unsigned char* data, size_t datapos, size_t dataend,
+                               const LodePNGCompressSettings* settings, unsigned final)
+{
+  unsigned error = 0;
+
+  /*
+  A block is compressed as follows: The PNG data is lz77 encoded, resulting in
+  literal bytes and length/distance pairs. This is then huffman compressed with
+  two huffman trees. One huffman tree is used for the lit and len values ("ll"),
+  another huffman tree is used for the dist values ("d"). These two trees are
+  stored using their code lengths, and to compress even more these code lengths
+  are also run-length encoded and huffman compressed. This gives a huffman tree
+  of code lengths "cl". The code lenghts used to describe this third tree are
+  the code length code lengths ("clcl").
+  */
+
+  /*The lz77 encoded data, represented with integers since there will also be length and distance codes in it*/
+  uivector lz77_encoded;
+  HuffmanTree tree_ll; /*tree for lit,len values*/
+  HuffmanTree tree_d; /*tree for distance codes*/
+  HuffmanTree tree_cl; /*tree for encoding the code lengths representing tree_ll and tree_d*/
+  uivector frequencies_ll; /*frequency of lit,len codes*/
+  uivector frequencies_d; /*frequency of dist codes*/
+  uivector frequencies_cl; /*frequency of code length codes*/
+  uivector bitlen_lld; /*lit,len,dist code lenghts (int bits), literally (without repeat codes).*/
+  uivector bitlen_lld_e; /*bitlen_lld encoded with repeat codes (this is a rudemtary run length compression)*/
+  /*bitlen_cl is the code length code lengths ("clcl"). The bit lengths of codes to represent tree_cl
+  (these are written as is in the file, it would be crazy to compress these using yet another huffman
+  tree that needs to be represented by yet another set of code lengths)*/
+  uivector bitlen_cl;
+  size_t datasize = dataend - datapos;
+
+  /*
+  Due to the huffman compression of huffman tree representations ("two levels"), there are some anologies:
+  bitlen_lld is to tree_cl what data is to tree_ll and tree_d.
+  bitlen_lld_e is to bitlen_lld what lz77_encoded is to data.
+  bitlen_cl is to bitlen_lld_e what bitlen_lld is to lz77_encoded.
+  */
+
+  unsigned BFINAL = final;
+  size_t numcodes_ll, numcodes_d, i;
+  unsigned HLIT, HDIST, HCLEN;
+
+  uivector_init(&lz77_encoded);
+  HuffmanTree_init(&tree_ll);
+  HuffmanTree_init(&tree_d);
+  HuffmanTree_init(&tree_cl);
+  uivector_init(&frequencies_ll);
+  uivector_init(&frequencies_d);
+  uivector_init(&frequencies_cl);
+  uivector_init(&bitlen_lld);
+  uivector_init(&bitlen_lld_e);
+  uivector_init(&bitlen_cl);
+
+  /*This while loop never loops due to a break at the end, it is here to
+  allow breaking out of it to the cleanup phase on error conditions.*/
+  while(!error)
+  {
+    if(settings->use_lz77)
+    {
+      error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize,
+                         settings->minmatch, settings->nicematch, settings->lazymatching);
+      if(error) break;
+    }
+    else
+    {
+      if(!uivector_resize(&lz77_encoded, datasize)) ERROR_BREAK(83 /*alloc fail*/);
+      for(i = datapos; i < dataend; ++i) lz77_encoded.data[i] = data[i]; /*no LZ77, but still will be Huffman compressed*/
+    }
+
+    if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83 /*alloc fail*/);
+    if(!uivector_resizev(&frequencies_d, 30, 0)) ERROR_BREAK(83 /*alloc fail*/);
+
+    /*Count the frequencies of lit, len and dist codes*/
+    for(i = 0; i != lz77_encoded.size; ++i)
+    {
+      unsigned symbol = lz77_encoded.data[i];
+      ++frequencies_ll.data[symbol];
+      if(symbol > 256)
+      {
+        unsigned dist = lz77_encoded.data[i + 2];
+        ++frequencies_d.data[dist];
+        i += 3;
+      }
+    }
+    frequencies_ll.data[256] = 1; /*there will be exactly 1 end code, at the end of the block*/
+
+    /*Make both huffman trees, one for the lit and len codes, one for the dist codes*/
+    error = HuffmanTree_makeFromFrequencies(&tree_ll, frequencies_ll.data, 257, frequencies_ll.size, 15);
+    if(error) break;
+    /*2, not 1, is chosen for mincodes: some buggy PNG decoders require at least 2 symbols in the dist tree*/
+    error = HuffmanTree_makeFromFrequencies(&tree_d, frequencies_d.data, 2, frequencies_d.size, 15);
+    if(error) break;
+
+    numcodes_ll = tree_ll.numcodes; if(numcodes_ll > 286) numcodes_ll = 286;
+    numcodes_d = tree_d.numcodes; if(numcodes_d > 30) numcodes_d = 30;
+    /*store the code lengths of both generated trees in bitlen_lld*/
+    for(i = 0; i != numcodes_ll; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_ll, (unsigned)i));
+    for(i = 0; i != numcodes_d; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_d, (unsigned)i));
+
+    /*run-length compress bitlen_ldd into bitlen_lld_e by using repeat codes 16 (copy length 3-6 times),
+    17 (3-10 zeroes), 18 (11-138 zeroes)*/
+    for(i = 0; i != (unsigned)bitlen_lld.size; ++i)
+    {
+      unsigned j = 0; /*amount of repititions*/
+      while(i + j + 1 < (unsigned)bitlen_lld.size && bitlen_lld.data[i + j + 1] == bitlen_lld.data[i]) ++j;
+
+      if(bitlen_lld.data[i] == 0 && j >= 2) /*repeat code for zeroes*/
+      {
+        ++j; /*include the first zero*/
+        if(j <= 10) /*repeat code 17 supports max 10 zeroes*/
+        {
+          uivector_push_back(&bitlen_lld_e, 17);
+          uivector_push_back(&bitlen_lld_e, j - 3);
+        }
+        else /*repeat code 18 supports max 138 zeroes*/
+        {
+          if(j > 138) j = 138;
+          uivector_push_back(&bitlen_lld_e, 18);
+          uivector_push_back(&bitlen_lld_e, j - 11);
+        }
+        i += (j - 1);
+      }
+      else if(j >= 3) /*repeat code for value other than zero*/
+      {
+        size_t k;
+        unsigned num = j / 6, rest = j % 6;
+        uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]);
+        for(k = 0; k < num; ++k)
+        {
+          uivector_push_back(&bitlen_lld_e, 16);
+          uivector_push_back(&bitlen_lld_e, 6 - 3);
+        }
+        if(rest >= 3)
+        {
+          uivector_push_back(&bitlen_lld_e, 16);
+          uivector_push_back(&bitlen_lld_e, rest - 3);
+        }
+        else j -= rest;
+        i += j;
+      }
+      else /*too short to benefit from repeat code*/
+      {
+        uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]);
+      }
+    }
+
+    /*generate tree_cl, the huffmantree of huffmantrees*/
+
+    if(!uivector_resizev(&frequencies_cl, NUM_CODE_LENGTH_CODES, 0)) ERROR_BREAK(83 /*alloc fail*/);
+    for(i = 0; i != bitlen_lld_e.size; ++i)
+    {
+      ++frequencies_cl.data[bitlen_lld_e.data[i]];
+      /*after a repeat code come the bits that specify the number of repetitions,
+      those don't need to be in the frequencies_cl calculation*/
+      if(bitlen_lld_e.data[i] >= 16) ++i;
+    }
+
+    error = HuffmanTree_makeFromFrequencies(&tree_cl, frequencies_cl.data,
+                                            frequencies_cl.size, frequencies_cl.size, 7);
+    if(error) break;
+
+    if(!uivector_resize(&bitlen_cl, tree_cl.numcodes)) ERROR_BREAK(83 /*alloc fail*/);
+    for(i = 0; i != tree_cl.numcodes; ++i)
+    {
+      /*lenghts of code length tree is in the order as specified by deflate*/
+      bitlen_cl.data[i] = HuffmanTree_getLength(&tree_cl, CLCL_ORDER[i]);
+    }
+    while(bitlen_cl.data[bitlen_cl.size - 1] == 0 && bitlen_cl.size > 4)
+    {
+      /*remove zeros at the end, but minimum size must be 4*/
+      if(!uivector_resize(&bitlen_cl, bitlen_cl.size - 1)) ERROR_BREAK(83 /*alloc fail*/);
+    }
+    if(error) break;
+
+    /*
+    Write everything into the output
+
+    After the BFINAL and BTYPE, the dynamic block consists out of the following:
+    - 5 bits HLIT, 5 bits HDIST, 4 bits HCLEN
+    - (HCLEN+4)*3 bits code lengths of code length alphabet
+    - HLIT + 257 code lenghts of lit/length alphabet (encoded using the code length
+      alphabet, + possible repetition codes 16, 17, 18)
+    - HDIST + 1 code lengths of distance alphabet (encoded using the code length
+      alphabet, + possible repetition codes 16, 17, 18)
+    - compressed data
+    - 256 (end code)
+    */
+
+    /*Write block type*/
+    addBitToStream(bp, out, BFINAL);
+    addBitToStream(bp, out, 0); /*first bit of BTYPE "dynamic"*/
+    addBitToStream(bp, out, 1); /*second bit of BTYPE "dynamic"*/
+
+    /*write the HLIT, HDIST and HCLEN values*/
+    HLIT = (unsigned)(numcodes_ll - 257);
+    HDIST = (unsigned)(numcodes_d - 1);
+    HCLEN = (unsigned)bitlen_cl.size - 4;
+    /*trim zeroes for HCLEN. HLIT and HDIST were already trimmed at tree creation*/
+    while(!bitlen_cl.data[HCLEN + 4 - 1] && HCLEN > 0) --HCLEN;
+    addBitsToStream(bp, out, HLIT, 5);
+    addBitsToStream(bp, out, HDIST, 5);
+    addBitsToStream(bp, out, HCLEN, 4);
+
+    /*write the code lenghts of the code length alphabet*/
+    for(i = 0; i != HCLEN + 4; ++i) addBitsToStream(bp, out, bitlen_cl.data[i], 3);
+
+    /*write the lenghts of the lit/len AND the dist alphabet*/
+    for(i = 0; i != bitlen_lld_e.size; ++i)
+    {
+      addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_cl, bitlen_lld_e.data[i]),
+                       HuffmanTree_getLength(&tree_cl, bitlen_lld_e.data[i]));
+      /*extra bits of repeat codes*/
+      if(bitlen_lld_e.data[i] == 16) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 2);
+      else if(bitlen_lld_e.data[i] == 17) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 3);
+      else if(bitlen_lld_e.data[i] == 18) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 7);
+    }
+
+    /*write the compressed data symbols*/
+    writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d);
+    /*error: the length of the end code 256 must be larger than 0*/
+    if(HuffmanTree_getLength(&tree_ll, 256) == 0) ERROR_BREAK(64);
+
+    /*write the end code*/
+    addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256));
+
+    break; /*end of error-while*/
+  }
+
+  /*cleanup*/
+  uivector_cleanup(&lz77_encoded);
+  HuffmanTree_cleanup(&tree_ll);
+  HuffmanTree_cleanup(&tree_d);
+  HuffmanTree_cleanup(&tree_cl);
+  uivector_cleanup(&frequencies_ll);
+  uivector_cleanup(&frequencies_d);
+  uivector_cleanup(&frequencies_cl);
+  uivector_cleanup(&bitlen_lld_e);
+  uivector_cleanup(&bitlen_lld);
+  uivector_cleanup(&bitlen_cl);
+
+  return error;
+}
+
+static unsigned deflateFixed(ucvector* out, size_t* bp, Hash* hash,
+                             const unsigned char* data,
+                             size_t datapos, size_t dataend,
+                             const LodePNGCompressSettings* settings, unsigned final)
+{
+  HuffmanTree tree_ll; /*tree for literal values and length codes*/
+  HuffmanTree tree_d; /*tree for distance codes*/
+
+  unsigned BFINAL = final;
+  unsigned error = 0;
+  size_t i;
+
+  HuffmanTree_init(&tree_ll);
+  HuffmanTree_init(&tree_d);
+
+  generateFixedLitLenTree(&tree_ll);
+  generateFixedDistanceTree(&tree_d);
+
+  addBitToStream(bp, out, BFINAL);
+  addBitToStream(bp, out, 1); /*first bit of BTYPE*/
+  addBitToStream(bp, out, 0); /*second bit of BTYPE*/
+
+  if(settings->use_lz77) /*LZ77 encoded*/
+  {
+    uivector lz77_encoded;
+    uivector_init(&lz77_encoded);
+    error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize,
+                       settings->minmatch, settings->nicematch, settings->lazymatching);
+    if(!error) writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d);
+    uivector_cleanup(&lz77_encoded);
+  }
+  else /*no LZ77, but still will be Huffman compressed*/
+  {
+    for(i = datapos; i < dataend; ++i)
+    {
+      addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, data[i]), HuffmanTree_getLength(&tree_ll, data[i]));
+    }
+  }
+  /*add END code*/
+  if(!error) addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256));
+
+  /*cleanup*/
+  HuffmanTree_cleanup(&tree_ll);
+  HuffmanTree_cleanup(&tree_d);
+
+  return error;
+}
+
+static unsigned lodepng_deflatev(ucvector* out, const unsigned char* in, size_t insize,
+                                 const LodePNGCompressSettings* settings)
+{
+  unsigned error = 0;
+  size_t i, blocksize, numdeflateblocks;
+  size_t bp = 0; /*the bit pointer*/
+  Hash hash;
+
+  if(settings->btype > 2) return 61;
+  else if(settings->btype == 0) return deflateNoCompression(out, in, insize);
+  else if(settings->btype == 1) blocksize = insize;
+  else /*if(settings->btype == 2)*/
+  {
+    blocksize = insize / 8 + 8;
+    if(blocksize < 65535) blocksize = 65535;
+  }
+
+  numdeflateblocks = (insize + blocksize - 1) / blocksize;
+  if(numdeflateblocks == 0) numdeflateblocks = 1;
+
+  error = hash_init(&hash, settings->windowsize);
+  if(error) return error;
+
+  for(i = 0; i != numdeflateblocks && !error; ++i)
+  {
+    unsigned final = (i == numdeflateblocks - 1);
+    size_t start = i * blocksize;
+    size_t end = start + blocksize;
+    if(end > insize) end = insize;
+
+    if(settings->btype == 1) error = deflateFixed(out, &bp, &hash, in, start, end, settings, final);
+    else if(settings->btype == 2) error = deflateDynamic(out, &bp, &hash, in, start, end, settings, final);
+  }
+
+  hash_cleanup(&hash);
+
+  return error;
+}
+
+unsigned lodepng_deflate(unsigned char** out, size_t* outsize,
+                         const unsigned char* in, size_t insize,
+                         const LodePNGCompressSettings* settings)
+{
+  unsigned error;
+  ucvector v;
+  ucvector_init_buffer(&v, *out, *outsize);
+  error = lodepng_deflatev(&v, in, insize, settings);
+  *out = v.data;
+  *outsize = v.size;
+  return error;
+}
+
+static unsigned deflate(unsigned char** out, size_t* outsize,
+                        const unsigned char* in, size_t insize,
+                        const LodePNGCompressSettings* settings)
+{
+  if(settings->custom_deflate)
+  {
+    return settings->custom_deflate(out, outsize, in, insize, settings);
+  }
+  else
+  {
+    return lodepng_deflate(out, outsize, in, insize, settings);
+  }
+}
+
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / Adler32                                                                  */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+static unsigned update_adler32(unsigned adler, const unsigned char* data, unsigned len)
+{
+   unsigned s1 = adler & 0xffff;
+   unsigned s2 = (adler >> 16) & 0xffff;
+
+  while(len > 0)
+  {
+    /*at least 5550 sums can be done before the sums overflow, saving a lot of module divisions*/
+    unsigned amount = len > 5550 ? 5550 : len;
+    len -= amount;
+    while(amount > 0)
+    {
+      s1 += (*data++);
+      s2 += s1;
+      --amount;
+    }
+    s1 %= 65521;
+    s2 %= 65521;
+  }
+
+  return (s2 << 16) | s1;
+}
+
+/*Return the adler32 of the bytes data[0..len-1]*/
+static unsigned adler32(const unsigned char* data, unsigned len)
+{
+  return update_adler32(1L, data, len);
+}
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / Zlib                                                                   / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#ifdef LODEPNG_COMPILE_DECODER
+
+unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in,
+                                 size_t insize, const LodePNGDecompressSettings* settings)
+{
+  unsigned error = 0;
+  unsigned CM, CINFO, FDICT;
+
+  if(insize < 2) return 53; /*error, size of zlib data too small*/
+  /*read information from zlib header*/
+  if((in[0] * 256 + in[1]) % 31 != 0)
+  {
+    /*error: 256 * in[0] + in[1] must be a multiple of 31, the FCHECK value is supposed to be made that way*/
+    return 24;
+  }
+
+  CM = in[0] & 15;
+  CINFO = (in[0] >> 4) & 15;
+  /*FCHECK = in[1] & 31;*/ /*FCHECK is already tested above*/
+  FDICT = (in[1] >> 5) & 1;
+  /*FLEVEL = (in[1] >> 6) & 3;*/ /*FLEVEL is not used here*/
+
+  if(CM != 8 || CINFO > 7)
+  {
+    /*error: only compression method 8: inflate with sliding window of 32k is supported by the PNG spec*/
+    return 25;
+  }
+  if(FDICT != 0)
+  {
+    /*error: the specification of PNG says about the zlib stream:
+      "The additional flags shall not specify a preset dictionary."*/
+    return 26;
+  }
+
+  error = inflate(out, outsize, in + 2, insize - 2, settings);
+  if(error) return error;
+
+  if(!settings->ignore_adler32)
+  {
+    unsigned ADLER32 = lodepng_read32bitInt(&in[insize - 4]);
+    unsigned checksum = adler32(*out, (unsigned)(*outsize));
+    if(checksum != ADLER32) return 58; /*error, adler checksum not correct, data must be corrupted*/
+  }
+
+  return 0; /*no error*/
+}
+
+static unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in,
+                                size_t insize, const LodePNGDecompressSettings* settings)
+{
+  if(settings->custom_zlib)
+  {
+    return settings->custom_zlib(out, outsize, in, insize, settings);
+  }
+  else
+  {
+    return lodepng_zlib_decompress(out, outsize, in, insize, settings);
+  }
+}
+
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#ifdef LODEPNG_COMPILE_ENCODER
+
+unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in,
+                               size_t insize, const LodePNGCompressSettings* settings)
+{
+  /*initially, *out must be NULL and outsize 0, if you just give some random *out
+  that's pointing to a non allocated buffer, this'll crash*/
+  ucvector outv;
+  size_t i;
+  unsigned error;
+  unsigned char* deflatedata = 0;
+  size_t deflatesize = 0;
+
+  /*zlib data: 1 byte CMF (CM+CINFO), 1 byte FLG, deflate data, 4 byte ADLER32 checksum of the Decompressed data*/
+  unsigned CMF = 120; /*0b01111000: CM 8, CINFO 7. With CINFO 7, any window size up to 32768 can be used.*/
+  unsigned FLEVEL = 0;
+  unsigned FDICT = 0;
+  unsigned CMFFLG = 256 * CMF + FDICT * 32 + FLEVEL * 64;
+  unsigned FCHECK = 31 - CMFFLG % 31;
+  CMFFLG += FCHECK;
+
+  /*ucvector-controlled version of the output buffer, for dynamic array*/
+  ucvector_init_buffer(&outv, *out, *outsize);
+
+  ucvector_push_back(&outv, (unsigned char)(CMFFLG / 256));
+  ucvector_push_back(&outv, (unsigned char)(CMFFLG % 256));
+
+  error = deflate(&deflatedata, &deflatesize, in, insize, settings);
+
+  if(!error)
+  {
+    unsigned ADLER32 = adler32(in, (unsigned)insize);
+    for(i = 0; i != deflatesize; ++i) ucvector_push_back(&outv, deflatedata[i]);
+    lodepng_free(deflatedata);
+    lodepng_add32bitInt(&outv, ADLER32);
+  }
+
+  *out = outv.data;
+  *outsize = outv.size;
+
+  return error;
+}
+
+/* compress using the default or custom zlib function */
+static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in,
+                              size_t insize, const LodePNGCompressSettings* settings)
+{
+  if(settings->custom_zlib)
+  {
+    return settings->custom_zlib(out, outsize, in, insize, settings);
+  }
+  else
+  {
+    return lodepng_zlib_compress(out, outsize, in, insize, settings);
+  }
+}
+
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+#else /*no LODEPNG_COMPILE_ZLIB*/
+
+#ifdef LODEPNG_COMPILE_DECODER
+static unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in,
+                                size_t insize, const LodePNGDecompressSettings* settings)
+{
+  if (!settings->custom_zlib) return 87; /*no custom zlib function provided */
+  return settings->custom_zlib(out, outsize, in, insize, settings);
+}
+#endif /*LODEPNG_COMPILE_DECODER*/
+#ifdef LODEPNG_COMPILE_ENCODER
+static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in,
+                              size_t insize, const LodePNGCompressSettings* settings)
+{
+  if (!settings->custom_zlib) return 87; /*no custom zlib function provided */
+  return settings->custom_zlib(out, outsize, in, insize, settings);
+}
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+#endif /*LODEPNG_COMPILE_ZLIB*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#ifdef LODEPNG_COMPILE_ENCODER
+
+/*this is a good tradeoff between speed and compression ratio*/
+#define DEFAULT_WINDOWSIZE 2048
+
+void lodepng_compress_settings_init(LodePNGCompressSettings* settings)
+{
+  /*compress with dynamic huffman tree (not in the mathematical sense, just not the predefined one)*/
+  settings->btype = 2;
+  settings->use_lz77 = 1;
+  settings->windowsize = DEFAULT_WINDOWSIZE;
+  settings->minmatch = 3;
+  settings->nicematch = 128;
+  settings->lazymatching = 1;
+
+  settings->custom_zlib = 0;
+  settings->custom_deflate = 0;
+  settings->custom_context = 0;
+}
+
+const LodePNGCompressSettings lodepng_default_compress_settings = {2, 1, DEFAULT_WINDOWSIZE, 3, 128, 1, 0, 0, 0};
+
+
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+#ifdef LODEPNG_COMPILE_DECODER
+
+void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings)
+{
+  settings->ignore_adler32 = 0;
+
+  settings->custom_zlib = 0;
+  settings->custom_inflate = 0;
+  settings->custom_context = 0;
+}
+
+const LodePNGDecompressSettings lodepng_default_decompress_settings = {0, 0, 0, 0};
+
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* // End of Zlib related code. Begin of PNG related code.                 // */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#ifdef LODEPNG_COMPILE_PNG
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / CRC32                                                                  / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/* CRC polynomial: 0xedb88320 */
+static unsigned lodepng_crc32_table[256] = {
+           0u, 1996959894u, 3993919788u, 2567524794u,  124634137u, 1886057615u, 3915621685u, 2657392035u,
+   249268274u, 2044508324u, 3772115230u, 2547177864u,  162941995u, 2125561021u, 3887607047u, 2428444049u,
+   498536548u, 1789927666u, 4089016648u, 2227061214u,  450548861u, 1843258603u, 4107580753u, 2211677639u,
+   325883990u, 1684777152u, 4251122042u, 2321926636u,  335633487u, 1661365465u, 4195302755u, 2366115317u,
+   997073096u, 1281953886u, 3579855332u, 2724688242u, 1006888145u, 1258607687u, 3524101629u, 2768942443u,
+   901097722u, 1119000684u, 3686517206u, 2898065728u,  853044451u, 1172266101u, 3705015759u, 2882616665u,
+   651767980u, 1373503546u, 3369554304u, 3218104598u,  565507253u, 1454621731u, 3485111705u, 3099436303u,
+   671266974u, 1594198024u, 3322730930u, 2970347812u,  795835527u, 1483230225u, 3244367275u, 3060149565u,
+  1994146192u,   31158534u, 2563907772u, 4023717930u, 1907459465u,  112637215u, 2680153253u, 3904427059u,
+  2013776290u,  251722036u, 2517215374u, 3775830040u, 2137656763u,  141376813u, 2439277719u, 3865271297u,
+  1802195444u,  476864866u, 2238001368u, 4066508878u, 1812370925u,  453092731u, 2181625025u, 4111451223u,
+  1706088902u,  314042704u, 2344532202u, 4240017532u, 1658658271u,  366619977u, 2362670323u, 4224994405u,
+  1303535960u,  984961486u, 2747007092u, 3569037538u, 1256170817u, 1037604311u, 2765210733u, 3554079995u,
+  1131014506u,  879679996u, 2909243462u, 3663771856u, 1141124467u,  855842277u, 2852801631u, 3708648649u,
+  1342533948u,  654459306u, 3188396048u, 3373015174u, 1466479909u,  544179635u, 3110523913u, 3462522015u,
+  1591671054u,  702138776u, 2966460450u, 3352799412u, 1504918807u,  783551873u, 3082640443u, 3233442989u,
+  3988292384u, 2596254646u,   62317068u, 1957810842u, 3939845945u, 2647816111u,   81470997u, 1943803523u,
+  3814918930u, 2489596804u,  225274430u, 2053790376u, 3826175755u, 2466906013u,  167816743u, 2097651377u,
+  4027552580u, 2265490386u,  503444072u, 1762050814u, 4150417245u, 2154129355u,  426522225u, 1852507879u,
+  4275313526u, 2312317920u,  282753626u, 1742555852u, 4189708143u, 2394877945u,  397917763u, 1622183637u,
+  3604390888u, 2714866558u,  953729732u, 1340076626u, 3518719985u, 2797360999u, 1068828381u, 1219638859u,
+  3624741850u, 2936675148u,  906185462u, 1090812512u, 3747672003u, 2825379669u,  829329135u, 1181335161u,
+  3412177804u, 3160834842u,  628085408u, 1382605366u, 3423369109u, 3138078467u,  570562233u, 1426400815u,
+  3317316542u, 2998733608u,  733239954u, 1555261956u, 3268935591u, 3050360625u,  752459403u, 1541320221u,
+  2607071920u, 3965973030u, 1969922972u,   40735498u, 2617837225u, 3943577151u, 1913087877u,   83908371u,
+  2512341634u, 3803740692u, 2075208622u,  213261112u, 2463272603u, 3855990285u, 2094854071u,  198958881u,
+  2262029012u, 4057260610u, 1759359992u,  534414190u, 2176718541u, 4139329115u, 1873836001u,  414664567u,
+  2282248934u, 4279200368u, 1711684554u,  285281116u, 2405801727u, 4167216745u, 1634467795u,  376229701u,
+  2685067896u, 3608007406u, 1308918612u,  956543938u, 2808555105u, 3495958263u, 1231636301u, 1047427035u,
+  2932959818u, 3654703836u, 1088359270u,  936918000u, 2847714899u, 3736837829u, 1202900863u,  817233897u,
+  3183342108u, 3401237130u, 1404277552u,  615818150u, 3134207493u, 3453421203u, 1423857449u,  601450431u,
+  3009837614u, 3294710456u, 1567103746u,  711928724u, 3020668471u, 3272380065u, 1510334235u,  755167117u
+};
+
+/*Return the CRC of the bytes buf[0..len-1].*/
+unsigned lodepng_crc32(const unsigned char* buf, size_t len)
+{
+  unsigned c = 0xffffffffL;
+  size_t n;
+
+  for(n = 0; n < len; ++n)
+  {
+    c = lodepng_crc32_table[(c ^ buf[n]) & 0xff] ^ (c >> 8);
+  }
+  return c ^ 0xffffffffL;
+}
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / Reading and writing single bits and bytes from/to stream for LodePNG   / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+static unsigned char readBitFromReversedStream(size_t* bitpointer, const unsigned char* bitstream)
+{
+  unsigned char result = (unsigned char)((bitstream[(*bitpointer) >> 3] >> (7 - ((*bitpointer) & 0x7))) & 1);
+  ++(*bitpointer);
+  return result;
+}
+
+static unsigned readBitsFromReversedStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits)
+{
+  unsigned result = 0;
+  size_t i;
+  for(i = nbits - 1; i < nbits; --i)
+  {
+    result += (unsigned)readBitFromReversedStream(bitpointer, bitstream) << i;
+  }
+  return result;
+}
+
+#ifdef LODEPNG_COMPILE_DECODER
+static void setBitOfReversedStream0(size_t* bitpointer, unsigned char* bitstream, unsigned char bit)
+{
+  /*the current bit in bitstream must be 0 for this to work*/
+  if(bit)
+  {
+    /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/
+    bitstream[(*bitpointer) >> 3] |= (bit << (7 - ((*bitpointer) & 0x7)));
+  }
+  ++(*bitpointer);
+}
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+static void setBitOfReversedStream(size_t* bitpointer, unsigned char* bitstream, unsigned char bit)
+{
+  /*the current bit in bitstream may be 0 or 1 for this to work*/
+  if(bit == 0) bitstream[(*bitpointer) >> 3] &=  (unsigned char)(~(1 << (7 - ((*bitpointer) & 0x7))));
+  else         bitstream[(*bitpointer) >> 3] |=  (1 << (7 - ((*bitpointer) & 0x7)));
+  ++(*bitpointer);
+}
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / PNG chunks                                                             / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+unsigned lodepng_chunk_length(const unsigned char* chunk)
+{
+  return lodepng_read32bitInt(&chunk[0]);
+}
+
+void lodepng_chunk_type(char type[5], const unsigned char* chunk)
+{
+  unsigned i;
+  for(i = 0; i != 4; ++i) type[i] = (char)chunk[4 + i];
+  type[4] = 0; /*null termination char*/
+}
+
+unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type)
+{
+  if(strlen(type) != 4) return 0;
+  return (chunk[4] == type[0] && chunk[5] == type[1] && chunk[6] == type[2] && chunk[7] == type[3]);
+}
+
+unsigned char lodepng_chunk_ancillary(const unsigned char* chunk)
+{
+  return((chunk[4] & 32) != 0);
+}
+
+unsigned char lodepng_chunk_private(const unsigned char* chunk)
+{
+  return((chunk[6] & 32) != 0);
+}
+
+unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk)
+{
+  return((chunk[7] & 32) != 0);
+}
+
+unsigned char* lodepng_chunk_data(unsigned char* chunk)
+{
+  return &chunk[8];
+}
+
+const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk)
+{
+  return &chunk[8];
+}
+
+unsigned lodepng_chunk_check_crc(const unsigned char* chunk)
+{
+  unsigned length = lodepng_chunk_length(chunk);
+  unsigned CRC = lodepng_read32bitInt(&chunk[length + 8]);
+  /*the CRC is taken of the data and the 4 chunk type letters, not the length*/
+  unsigned checksum = lodepng_crc32(&chunk[4], length + 4);
+  if(CRC != checksum) return 1;
+  else return 0;
+}
+
+void lodepng_chunk_generate_crc(unsigned char* chunk)
+{
+  unsigned length = lodepng_chunk_length(chunk);
+  unsigned CRC = lodepng_crc32(&chunk[4], length + 4);
+  lodepng_set32bitInt(chunk + 8 + length, CRC);
+}
+
+unsigned char* lodepng_chunk_next(unsigned char* chunk)
+{
+  unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12;
+  return &chunk[total_chunk_length];
+}
+
+const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk)
+{
+  unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12;
+  return &chunk[total_chunk_length];
+}
+
+unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk)
+{
+  unsigned i;
+  unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12;
+  unsigned char *chunk_start, *new_buffer;
+  size_t new_length = (*outlength) + total_chunk_length;
+  if(new_length < total_chunk_length || new_length < (*outlength)) return 77; /*integer overflow happened*/
+
+  new_buffer = (unsigned char*)lodepng_realloc(*out, new_length);
+  if(!new_buffer) return 83; /*alloc fail*/
+  (*out) = new_buffer;
+  (*outlength) = new_length;
+  chunk_start = &(*out)[new_length - total_chunk_length];
+
+  for(i = 0; i != total_chunk_length; ++i) chunk_start[i] = chunk[i];
+
+  return 0;
+}
+
+unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,
+                              const char* type, const unsigned char* data)
+{
+  unsigned i;
+  unsigned char *chunk, *new_buffer;
+  size_t new_length = (*outlength) + length + 12;
+  if(new_length < length + 12 || new_length < (*outlength)) return 77; /*integer overflow happened*/
+  new_buffer = (unsigned char*)lodepng_realloc(*out, new_length);
+  if(!new_buffer) return 83; /*alloc fail*/
+  (*out) = new_buffer;
+  (*outlength) = new_length;
+  chunk = &(*out)[(*outlength) - length - 12];
+
+  /*1: length*/
+  lodepng_set32bitInt(chunk, (unsigned)length);
+
+  /*2: chunk name (4 letters)*/
+  chunk[4] = (unsigned char)type[0];
+  chunk[5] = (unsigned char)type[1];
+  chunk[6] = (unsigned char)type[2];
+  chunk[7] = (unsigned char)type[3];
+
+  /*3: the data*/
+  for(i = 0; i != length; ++i) chunk[8 + i] = data[i];
+
+  /*4: CRC (of the chunkname characters and the data)*/
+  lodepng_chunk_generate_crc(chunk);
+
+  return 0;
+}
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / Color types and such                                                   / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/*return type is a LodePNG error code*/
+static unsigned checkColorValidity(LodePNGColorType colortype, unsigned bd) /*bd = bitdepth*/
+{
+  switch(colortype)
+  {
+    case 0: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8 || bd == 16)) return 37; break; /*grey*/
+    case 2: if(!(                                 bd == 8 || bd == 16)) return 37; break; /*RGB*/
+    case 3: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8            )) return 37; break; /*palette*/
+    case 4: if(!(                                 bd == 8 || bd == 16)) return 37; break; /*grey + alpha*/
+    case 6: if(!(                                 bd == 8 || bd == 16)) return 37; break; /*RGBA*/
+    default: return 31;
+  }
+  return 0; /*allowed color type / bits combination*/
+}
+
+static unsigned getNumColorChannels(LodePNGColorType colortype)
+{
+  switch(colortype)
+  {
+    case 0: return 1; /*grey*/
+    case 2: return 3; /*RGB*/
+    case 3: return 1; /*palette*/
+    case 4: return 2; /*grey + alpha*/
+    case 6: return 4; /*RGBA*/
+  }
+  return 0; /*unexisting color type*/
+}
+
+static unsigned lodepng_get_bpp_lct(LodePNGColorType colortype, unsigned bitdepth)
+{
+  /*bits per pixel is amount of channels * bits per channel*/
+  return getNumColorChannels(colortype) * bitdepth;
+}
+
+/* ////////////////////////////////////////////////////////////////////////// */
+
+void lodepng_color_mode_init(LodePNGColorMode* info)
+{
+  info->key_defined = 0;
+  info->key_r = info->key_g = info->key_b = 0;
+  info->colortype = LCT_RGBA;
+  info->bitdepth = 8;
+  info->palette = 0;
+  info->palettesize = 0;
+}
+
+void lodepng_color_mode_cleanup(LodePNGColorMode* info)
+{
+  lodepng_palette_clear(info);
+}
+
+unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source)
+{
+  size_t i;
+  lodepng_color_mode_cleanup(dest);
+  *dest = *source;
+  if(source->palette)
+  {
+    dest->palette = (unsigned char*)lodepng_malloc(1024);
+    if(!dest->palette && source->palettesize) return 83; /*alloc fail*/
+    for(i = 0; i != source->palettesize * 4; ++i) dest->palette[i] = source->palette[i];
+  }
+  return 0;
+}
+
+static int lodepng_color_mode_equal(const LodePNGColorMode* a, const LodePNGColorMode* b)
+{
+  size_t i;
+  if(a->colortype != b->colortype) return 0;
+  if(a->bitdepth != b->bitdepth) return 0;
+  if(a->key_defined != b->key_defined) return 0;
+  if(a->key_defined)
+  {
+    if(a->key_r != b->key_r) return 0;
+    if(a->key_g != b->key_g) return 0;
+    if(a->key_b != b->key_b) return 0;
+  }
+  if(a->palettesize != b->palettesize) return 0;
+  for(i = 0; i != a->palettesize * 4; ++i)
+  {
+    if(a->palette[i] != b->palette[i]) return 0;
+  }
+  return 1;
+}
+
+void lodepng_palette_clear(LodePNGColorMode* info)
+{
+  if(info->palette) lodepng_free(info->palette);
+  info->palette = 0;
+  info->palettesize = 0;
+}
+
+unsigned lodepng_palette_add(LodePNGColorMode* info,
+                             unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+{
+  unsigned char* data;
+  /*the same resize technique as C++ std::vectors is used, and here it's made so that for a palette with
+  the max of 256 colors, it'll have the exact alloc size*/
+  if(!info->palette) /*allocate palette if empty*/
+  {
+    /*room for 256 colors with 4 bytes each*/
+    data = (unsigned char*)lodepng_realloc(info->palette, 1024);
+    if(!data) return 83; /*alloc fail*/
+    else info->palette = data;
+  }
+  info->palette[4 * info->palettesize + 0] = r;
+  info->palette[4 * info->palettesize + 1] = g;
+  info->palette[4 * info->palettesize + 2] = b;
+  info->palette[4 * info->palettesize + 3] = a;
+  ++info->palettesize;
+  return 0;
+}
+
+unsigned lodepng_get_bpp(const LodePNGColorMode* info)
+{
+  /*calculate bits per pixel out of colortype and bitdepth*/
+  return lodepng_get_bpp_lct(info->colortype, info->bitdepth);
+}
+
+unsigned lodepng_get_channels(const LodePNGColorMode* info)
+{
+  return getNumColorChannels(info->colortype);
+}
+
+unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info)
+{
+  return info->colortype == LCT_GREY || info->colortype == LCT_GREY_ALPHA;
+}
+
+unsigned lodepng_is_alpha_type(const LodePNGColorMode* info)
+{
+  return (info->colortype & 4) != 0; /*4 or 6*/
+}
+
+unsigned lodepng_is_palette_type(const LodePNGColorMode* info)
+{
+  return info->colortype == LCT_PALETTE;
+}
+
+unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info)
+{
+  size_t i;
+  for(i = 0; i != info->palettesize; ++i)
+  {
+    if(info->palette[i * 4 + 3] < 255) return 1;
+  }
+  return 0;
+}
+
+unsigned lodepng_can_have_alpha(const LodePNGColorMode* info)
+{
+  return info->key_defined
+      || lodepng_is_alpha_type(info)
+      || lodepng_has_palette_alpha(info);
+}
+
+size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color)
+{
+  return (w * h * lodepng_get_bpp(color) + 7) / 8;
+}
+
+size_t lodepng_get_raw_size_lct(unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth)
+{
+  return (w * h * lodepng_get_bpp_lct(colortype, bitdepth) + 7) / 8;
+}
+
+
+#ifdef LODEPNG_COMPILE_PNG
+#ifdef LODEPNG_COMPILE_DECODER
+/*in an idat chunk, each scanline is a multiple of 8 bits, unlike the lodepng output buffer*/
+static size_t lodepng_get_raw_size_idat(unsigned w, unsigned h, const LodePNGColorMode* color)
+{
+  return h * ((w * lodepng_get_bpp(color) + 7) / 8);
+}
+#endif /*LODEPNG_COMPILE_DECODER*/
+#endif /*LODEPNG_COMPILE_PNG*/
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+
+static void LodePNGUnknownChunks_init(LodePNGInfo* info)
+{
+  unsigned i;
+  for(i = 0; i != 3; ++i) info->unknown_chunks_data[i] = 0;
+  for(i = 0; i != 3; ++i) info->unknown_chunks_size[i] = 0;
+}
+
+static void LodePNGUnknownChunks_cleanup(LodePNGInfo* info)
+{
+  unsigned i;
+  for(i = 0; i != 3; ++i) lodepng_free(info->unknown_chunks_data[i]);
+}
+
+static unsigned LodePNGUnknownChunks_copy(LodePNGInfo* dest, const LodePNGInfo* src)
+{
+  unsigned i;
+
+  LodePNGUnknownChunks_cleanup(dest);
+
+  for(i = 0; i != 3; ++i)
+  {
+    size_t j;
+    dest->unknown_chunks_size[i] = src->unknown_chunks_size[i];
+    dest->unknown_chunks_data[i] = (unsigned char*)lodepng_malloc(src->unknown_chunks_size[i]);
+    if(!dest->unknown_chunks_data[i] && dest->unknown_chunks_size[i]) return 83; /*alloc fail*/
+    for(j = 0; j < src->unknown_chunks_size[i]; ++j)
+    {
+      dest->unknown_chunks_data[i][j] = src->unknown_chunks_data[i][j];
+    }
+  }
+
+  return 0;
+}
+
+/******************************************************************************/
+
+static void LodePNGText_init(LodePNGInfo* info)
+{
+  info->text_num = 0;
+  info->text_keys = NULL;
+  info->text_strings = NULL;
+}
+
+static void LodePNGText_cleanup(LodePNGInfo* info)
+{
+  size_t i;
+  for(i = 0; i != info->text_num; ++i)
+  {
+    string_cleanup(&info->text_keys[i]);
+    string_cleanup(&info->text_strings[i]);
+  }
+  lodepng_free(info->text_keys);
+  lodepng_free(info->text_strings);
+}
+
+static unsigned LodePNGText_copy(LodePNGInfo* dest, const LodePNGInfo* source)
+{
+  size_t i = 0;
+  dest->text_keys = 0;
+  dest->text_strings = 0;
+  dest->text_num = 0;
+  for(i = 0; i != source->text_num; ++i)
+  {
+    CERROR_TRY_RETURN(lodepng_add_text(dest, source->text_keys[i], source->text_strings[i]));
+  }
+  return 0;
+}
+
+void lodepng_clear_text(LodePNGInfo* info)
+{
+  LodePNGText_cleanup(info);
+}
+
+unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str)
+{
+  char** new_keys = (char**)(lodepng_realloc(info->text_keys, sizeof(char*) * (info->text_num + 1)));
+  char** new_strings = (char**)(lodepng_realloc(info->text_strings, sizeof(char*) * (info->text_num + 1)));
+  if(!new_keys || !new_strings)
+  {
+    lodepng_free(new_keys);
+    lodepng_free(new_strings);
+    return 83; /*alloc fail*/
+  }
+
+  ++info->text_num;
+  info->text_keys = new_keys;
+  info->text_strings = new_strings;
+
+  string_init(&info->text_keys[info->text_num - 1]);
+  string_set(&info->text_keys[info->text_num - 1], key);
+
+  string_init(&info->text_strings[info->text_num - 1]);
+  string_set(&info->text_strings[info->text_num - 1], str);
+
+  return 0;
+}
+
+/******************************************************************************/
+
+static void LodePNGIText_init(LodePNGInfo* info)
+{
+  info->itext_num = 0;
+  info->itext_keys = NULL;
+  info->itext_langtags = NULL;
+  info->itext_transkeys = NULL;
+  info->itext_strings = NULL;
+}
+
+static void LodePNGIText_cleanup(LodePNGInfo* info)
+{
+  size_t i;
+  for(i = 0; i != info->itext_num; ++i)
+  {
+    string_cleanup(&info->itext_keys[i]);
+    string_cleanup(&info->itext_langtags[i]);
+    string_cleanup(&info->itext_transkeys[i]);
+    string_cleanup(&info->itext_strings[i]);
+  }
+  lodepng_free(info->itext_keys);
+  lodepng_free(info->itext_langtags);
+  lodepng_free(info->itext_transkeys);
+  lodepng_free(info->itext_strings);
+}
+
+static unsigned LodePNGIText_copy(LodePNGInfo* dest, const LodePNGInfo* source)
+{
+  size_t i = 0;
+  dest->itext_keys = 0;
+  dest->itext_langtags = 0;
+  dest->itext_transkeys = 0;
+  dest->itext_strings = 0;
+  dest->itext_num = 0;
+  for(i = 0; i != source->itext_num; ++i)
+  {
+    CERROR_TRY_RETURN(lodepng_add_itext(dest, source->itext_keys[i], source->itext_langtags[i],
+                                        source->itext_transkeys[i], source->itext_strings[i]));
+  }
+  return 0;
+}
+
+void lodepng_clear_itext(LodePNGInfo* info)
+{
+  LodePNGIText_cleanup(info);
+}
+
+unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag,
+                           const char* transkey, const char* str)
+{
+  char** new_keys = (char**)(lodepng_realloc(info->itext_keys, sizeof(char*) * (info->itext_num + 1)));
+  char** new_langtags = (char**)(lodepng_realloc(info->itext_langtags, sizeof(char*) * (info->itext_num + 1)));
+  char** new_transkeys = (char**)(lodepng_realloc(info->itext_transkeys, sizeof(char*) * (info->itext_num + 1)));
+  char** new_strings = (char**)(lodepng_realloc(info->itext_strings, sizeof(char*) * (info->itext_num + 1)));
+  if(!new_keys || !new_langtags || !new_transkeys || !new_strings)
+  {
+    lodepng_free(new_keys);
+    lodepng_free(new_langtags);
+    lodepng_free(new_transkeys);
+    lodepng_free(new_strings);
+    return 83; /*alloc fail*/
+  }
+
+  ++info->itext_num;
+  info->itext_keys = new_keys;
+  info->itext_langtags = new_langtags;
+  info->itext_transkeys = new_transkeys;
+  info->itext_strings = new_strings;
+
+  string_init(&info->itext_keys[info->itext_num - 1]);
+  string_set(&info->itext_keys[info->itext_num - 1], key);
+
+  string_init(&info->itext_langtags[info->itext_num - 1]);
+  string_set(&info->itext_langtags[info->itext_num - 1], langtag);
+
+  string_init(&info->itext_transkeys[info->itext_num - 1]);
+  string_set(&info->itext_transkeys[info->itext_num - 1], transkey);
+
+  string_init(&info->itext_strings[info->itext_num - 1]);
+  string_set(&info->itext_strings[info->itext_num - 1], str);
+
+  return 0;
+}
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+
+void lodepng_info_init(LodePNGInfo* info)
+{
+  lodepng_color_mode_init(&info->color);
+  info->interlace_method = 0;
+  info->compression_method = 0;
+  info->filter_method = 0;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  info->background_defined = 0;
+  info->background_r = info->background_g = info->background_b = 0;
+
+  LodePNGText_init(info);
+  LodePNGIText_init(info);
+
+  info->time_defined = 0;
+  info->phys_defined = 0;
+
+  LodePNGUnknownChunks_init(info);
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+}
+
+void lodepng_info_cleanup(LodePNGInfo* info)
+{
+  lodepng_color_mode_cleanup(&info->color);
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  LodePNGText_cleanup(info);
+  LodePNGIText_cleanup(info);
+
+  LodePNGUnknownChunks_cleanup(info);
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+}
+
+unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source)
+{
+  lodepng_info_cleanup(dest);
+  *dest = *source;
+  lodepng_color_mode_init(&dest->color);
+  CERROR_TRY_RETURN(lodepng_color_mode_copy(&dest->color, &source->color));
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  CERROR_TRY_RETURN(LodePNGText_copy(dest, source));
+  CERROR_TRY_RETURN(LodePNGIText_copy(dest, source));
+
+  LodePNGUnknownChunks_init(dest);
+  CERROR_TRY_RETURN(LodePNGUnknownChunks_copy(dest, source));
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+  return 0;
+}
+
+void lodepng_info_swap(LodePNGInfo* a, LodePNGInfo* b)
+{
+  LodePNGInfo temp = *a;
+  *a = *b;
+  *b = temp;
+}
+
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/*index: bitgroup index, bits: bitgroup size(1, 2 or 4), in: bitgroup value, out: octet array to add bits to*/
+static void addColorBits(unsigned char* out, size_t index, unsigned bits, unsigned in)
+{
+  unsigned m = bits == 1 ? 7 : bits == 2 ? 3 : 1; /*8 / bits - 1*/
+  /*p = the partial index in the byte, e.g. with 4 palettebits it is 0 for first half or 1 for second half*/
+  unsigned p = index & m;
+  in &= (1u << bits) - 1u; /*filter out any other bits of the input value*/
+  in = in << (bits * (m - p));
+  if(p == 0) out[index * bits / 8] = in;
+  else out[index * bits / 8] |= in;
+}
+
+typedef struct ColorTree ColorTree;
+
+/*
+One node of a color tree
+This is the data structure used to count the number of unique colors and to get a palette
+index for a color. It's like an octree, but because the alpha channel is used too, each
+node has 16 instead of 8 children.
+*/
+struct ColorTree
+{
+  ColorTree* children[16]; /*up to 16 pointers to ColorTree of next level*/
+  int index; /*the payload. Only has a meaningful value if this is in the last level*/
+};
+
+static void color_tree_init(ColorTree* tree)
+{
+  int i;
+  for(i = 0; i != 16; ++i) tree->children[i] = 0;
+  tree->index = -1;
+}
+
+static void color_tree_cleanup(ColorTree* tree)
+{
+  int i;
+  for(i = 0; i != 16; ++i)
+  {
+    if(tree->children[i])
+    {
+      color_tree_cleanup(tree->children[i]);
+      lodepng_free(tree->children[i]);
+    }
+  }
+}
+
+/*returns -1 if color not present, its index otherwise*/
+static int color_tree_get(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+{
+  int bit = 0;
+  for(bit = 0; bit < 8; ++bit)
+  {
+    int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1);
+    if(!tree->children[i]) return -1;
+    else tree = tree->children[i];
+  }
+  return tree ? tree->index : -1;
+}
+
+#ifdef LODEPNG_COMPILE_ENCODER
+static int color_tree_has(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+{
+  return color_tree_get(tree, r, g, b, a) >= 0;
+}
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+/*color is not allowed to already exist.
+Index should be >= 0 (it's signed to be compatible with using -1 for "doesn't exist")*/
+static void color_tree_add(ColorTree* tree,
+                           unsigned char r, unsigned char g, unsigned char b, unsigned char a, unsigned index)
+{
+  int bit;
+  for(bit = 0; bit < 8; ++bit)
+  {
+    int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1);
+    if(!tree->children[i])
+    {
+      tree->children[i] = (ColorTree*)lodepng_malloc(sizeof(ColorTree));
+      color_tree_init(tree->children[i]);
+    }
+    tree = tree->children[i];
+  }
+  tree->index = (int)index;
+}
+
+/*put a pixel, given its RGBA color, into image of any color type*/
+static unsigned rgba8ToPixel(unsigned char* out, size_t i,
+                             const LodePNGColorMode* mode, ColorTree* tree /*for palette*/,
+                             unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+{
+  if(mode->colortype == LCT_GREY)
+  {
+    unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/;
+    if(mode->bitdepth == 8) out[i] = grey;
+    else if(mode->bitdepth == 16) out[i * 2 + 0] = out[i * 2 + 1] = grey;
+    else
+    {
+      /*take the most significant bits of grey*/
+      grey = (grey >> (8 - mode->bitdepth)) & ((1 << mode->bitdepth) - 1);
+      addColorBits(out, i, mode->bitdepth, grey);
+    }
+  }
+  else if(mode->colortype == LCT_RGB)
+  {
+    if(mode->bitdepth == 8)
+    {
+      out[i * 3 + 0] = r;
+      out[i * 3 + 1] = g;
+      out[i * 3 + 2] = b;
+    }
+    else
+    {
+      out[i * 6 + 0] = out[i * 6 + 1] = r;
+      out[i * 6 + 2] = out[i * 6 + 3] = g;
+      out[i * 6 + 4] = out[i * 6 + 5] = b;
+    }
+  }
+  else if(mode->colortype == LCT_PALETTE)
+  {
+    int index = color_tree_get(tree, r, g, b, a);
+    if(index < 0) return 82; /*color not in palette*/
+    if(mode->bitdepth == 8) out[i] = index;
+    else addColorBits(out, i, mode->bitdepth, (unsigned)index);
+  }
+  else if(mode->colortype == LCT_GREY_ALPHA)
+  {
+    unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/;
+    if(mode->bitdepth == 8)
+    {
+      out[i * 2 + 0] = grey;
+      out[i * 2 + 1] = a;
+    }
+    else if(mode->bitdepth == 16)
+    {
+      out[i * 4 + 0] = out[i * 4 + 1] = grey;
+      out[i * 4 + 2] = out[i * 4 + 3] = a;
+    }
+  }
+  else if(mode->colortype == LCT_RGBA)
+  {
+    if(mode->bitdepth == 8)
+    {
+      out[i * 4 + 0] = r;
+      out[i * 4 + 1] = g;
+      out[i * 4 + 2] = b;
+      out[i * 4 + 3] = a;
+    }
+    else
+    {
+      out[i * 8 + 0] = out[i * 8 + 1] = r;
+      out[i * 8 + 2] = out[i * 8 + 3] = g;
+      out[i * 8 + 4] = out[i * 8 + 5] = b;
+      out[i * 8 + 6] = out[i * 8 + 7] = a;
+    }
+  }
+
+  return 0; /*no error*/
+}
+
+/*put a pixel, given its RGBA16 color, into image of any color 16-bitdepth type*/
+static void rgba16ToPixel(unsigned char* out, size_t i,
+                         const LodePNGColorMode* mode,
+                         unsigned short r, unsigned short g, unsigned short b, unsigned short a)
+{
+  if(mode->colortype == LCT_GREY)
+  {
+    unsigned short grey = r; /*((unsigned)r + g + b) / 3*/;
+    out[i * 2 + 0] = (grey >> 8) & 255;
+    out[i * 2 + 1] = grey & 255;
+  }
+  else if(mode->colortype == LCT_RGB)
+  {
+    out[i * 6 + 0] = (r >> 8) & 255;
+    out[i * 6 + 1] = r & 255;
+    out[i * 6 + 2] = (g >> 8) & 255;
+    out[i * 6 + 3] = g & 255;
+    out[i * 6 + 4] = (b >> 8) & 255;
+    out[i * 6 + 5] = b & 255;
+  }
+  else if(mode->colortype == LCT_GREY_ALPHA)
+  {
+    unsigned short grey = r; /*((unsigned)r + g + b) / 3*/;
+    out[i * 4 + 0] = (grey >> 8) & 255;
+    out[i * 4 + 1] = grey & 255;
+    out[i * 4 + 2] = (a >> 8) & 255;
+    out[i * 4 + 3] = a & 255;
+  }
+  else if(mode->colortype == LCT_RGBA)
+  {
+    out[i * 8 + 0] = (r >> 8) & 255;
+    out[i * 8 + 1] = r & 255;
+    out[i * 8 + 2] = (g >> 8) & 255;
+    out[i * 8 + 3] = g & 255;
+    out[i * 8 + 4] = (b >> 8) & 255;
+    out[i * 8 + 5] = b & 255;
+    out[i * 8 + 6] = (a >> 8) & 255;
+    out[i * 8 + 7] = a & 255;
+  }
+}
+
+/*Get RGBA8 color of pixel with index i (y * width + x) from the raw image with given color type.*/
+static void getPixelColorRGBA8(unsigned char* r, unsigned char* g,
+                               unsigned char* b, unsigned char* a,
+                               const unsigned char* in, size_t i,
+                               const LodePNGColorMode* mode)
+{
+  if(mode->colortype == LCT_GREY)
+  {
+    if(mode->bitdepth == 8)
+    {
+      *r = *g = *b = in[i];
+      if(mode->key_defined && *r == mode->key_r) *a = 0;
+      else *a = 255;
+    }
+    else if(mode->bitdepth == 16)
+    {
+      *r = *g = *b = in[i * 2 + 0];
+      if(mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0;
+      else *a = 255;
+    }
+    else
+    {
+      unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/
+      size_t j = i * mode->bitdepth;
+      unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth);
+      *r = *g = *b = (value * 255) / highest;
+      if(mode->key_defined && value == mode->key_r) *a = 0;
+      else *a = 255;
+    }
+  }
+  else if(mode->colortype == LCT_RGB)
+  {
+    if(mode->bitdepth == 8)
+    {
+      *r = in[i * 3 + 0]; *g = in[i * 3 + 1]; *b = in[i * 3 + 2];
+      if(mode->key_defined && *r == mode->key_r && *g == mode->key_g && *b == mode->key_b) *a = 0;
+      else *a = 255;
+    }
+    else
+    {
+      *r = in[i * 6 + 0];
+      *g = in[i * 6 + 2];
+      *b = in[i * 6 + 4];
+      if(mode->key_defined && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r
+         && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g
+         && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0;
+      else *a = 255;
+    }
+  }
+  else if(mode->colortype == LCT_PALETTE)
+  {
+    unsigned index;
+    if(mode->bitdepth == 8) index = in[i];
+    else
+    {
+      size_t j = i * mode->bitdepth;
+      index = readBitsFromReversedStream(&j, in, mode->bitdepth);
+    }
+
+    if(index >= mode->palettesize)
+    {
+      /*This is an error according to the PNG spec, but common PNG decoders make it black instead.
+      Done here too, slightly faster due to no error handling needed.*/
+      *r = *g = *b = 0;
+      *a = 255;
+    }
+    else
+    {
+      *r = mode->palette[index * 4 + 0];
+      *g = mode->palette[index * 4 + 1];
+      *b = mode->palette[index * 4 + 2];
+      *a = mode->palette[index * 4 + 3];
+    }
+  }
+  else if(mode->colortype == LCT_GREY_ALPHA)
+  {
+    if(mode->bitdepth == 8)
+    {
+      *r = *g = *b = in[i * 2 + 0];
+      *a = in[i * 2 + 1];
+    }
+    else
+    {
+      *r = *g = *b = in[i * 4 + 0];
+      *a = in[i * 4 + 2];
+    }
+  }
+  else if(mode->colortype == LCT_RGBA)
+  {
+    if(mode->bitdepth == 8)
+    {
+      *r = in[i * 4 + 0];
+      *g = in[i * 4 + 1];
+      *b = in[i * 4 + 2];
+      *a = in[i * 4 + 3];
+    }
+    else
+    {
+      *r = in[i * 8 + 0];
+      *g = in[i * 8 + 2];
+      *b = in[i * 8 + 4];
+      *a = in[i * 8 + 6];
+    }
+  }
+}
+
+/*Similar to getPixelColorRGBA8, but with all the for loops inside of the color
+mode test cases, optimized to convert the colors much faster, when converting
+to RGBA or RGB with 8 bit per cannel. buffer must be RGBA or RGB output with
+enough memory, if has_alpha is true the output is RGBA. mode has the color mode
+of the input buffer.*/
+static void getPixelColorsRGBA8(unsigned char* buffer, size_t numpixels,
+                                unsigned has_alpha, const unsigned char* in,
+                                const LodePNGColorMode* mode)
+{
+  unsigned num_channels = has_alpha ? 4 : 3;
+  size_t i;
+  if(mode->colortype == LCT_GREY)
+  {
+    if(mode->bitdepth == 8)
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = buffer[1] = buffer[2] = in[i];
+        if(has_alpha) buffer[3] = mode->key_defined && in[i] == mode->key_r ? 0 : 255;
+      }
+    }
+    else if(mode->bitdepth == 16)
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = buffer[1] = buffer[2] = in[i * 2];
+        if(has_alpha) buffer[3] = mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r ? 0 : 255;
+      }
+    }
+    else
+    {
+      unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/
+      size_t j = 0;
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth);
+        buffer[0] = buffer[1] = buffer[2] = (value * 255) / highest;
+        if(has_alpha) buffer[3] = mode->key_defined && value == mode->key_r ? 0 : 255;
+      }
+    }
+  }
+  else if(mode->colortype == LCT_RGB)
+  {
+    if(mode->bitdepth == 8)
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = in[i * 3 + 0];
+        buffer[1] = in[i * 3 + 1];
+        buffer[2] = in[i * 3 + 2];
+        if(has_alpha) buffer[3] = mode->key_defined && buffer[0] == mode->key_r
+           && buffer[1]== mode->key_g && buffer[2] == mode->key_b ? 0 : 255;
+      }
+    }
+    else
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = in[i * 6 + 0];
+        buffer[1] = in[i * 6 + 2];
+        buffer[2] = in[i * 6 + 4];
+        if(has_alpha) buffer[3] = mode->key_defined
+           && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r
+           && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g
+           && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b ? 0 : 255;
+      }
+    }
+  }
+  else if(mode->colortype == LCT_PALETTE)
+  {
+    unsigned index;
+    size_t j = 0;
+    for(i = 0; i != numpixels; ++i, buffer += num_channels)
+    {
+      if(mode->bitdepth == 8) index = in[i];
+      else index = readBitsFromReversedStream(&j, in, mode->bitdepth);
+
+      if(index >= mode->palettesize)
+      {
+        /*This is an error according to the PNG spec, but most PNG decoders make it black instead.
+        Done here too, slightly faster due to no error handling needed.*/
+        buffer[0] = buffer[1] = buffer[2] = 0;
+        if(has_alpha) buffer[3] = 255;
+      }
+      else
+      {
+        buffer[0] = mode->palette[index * 4 + 0];
+        buffer[1] = mode->palette[index * 4 + 1];
+        buffer[2] = mode->palette[index * 4 + 2];
+        if(has_alpha) buffer[3] = mode->palette[index * 4 + 3];
+      }
+    }
+  }
+  else if(mode->colortype == LCT_GREY_ALPHA)
+  {
+    if(mode->bitdepth == 8)
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = buffer[1] = buffer[2] = in[i * 2 + 0];
+        if(has_alpha) buffer[3] = in[i * 2 + 1];
+      }
+    }
+    else
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = buffer[1] = buffer[2] = in[i * 4 + 0];
+        if(has_alpha) buffer[3] = in[i * 4 + 2];
+      }
+    }
+  }
+  else if(mode->colortype == LCT_RGBA)
+  {
+    if(mode->bitdepth == 8)
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = in[i * 4 + 0];
+        buffer[1] = in[i * 4 + 1];
+        buffer[2] = in[i * 4 + 2];
+        if(has_alpha) buffer[3] = in[i * 4 + 3];
+      }
+    }
+    else
+    {
+      for(i = 0; i != numpixels; ++i, buffer += num_channels)
+      {
+        buffer[0] = in[i * 8 + 0];
+        buffer[1] = in[i * 8 + 2];
+        buffer[2] = in[i * 8 + 4];
+        if(has_alpha) buffer[3] = in[i * 8 + 6];
+      }
+    }
+  }
+}
+
+/*Get RGBA16 color of pixel with index i (y * width + x) from the raw image with
+given color type, but the given color type must be 16-bit itself.*/
+static void getPixelColorRGBA16(unsigned short* r, unsigned short* g, unsigned short* b, unsigned short* a,
+                                const unsigned char* in, size_t i, const LodePNGColorMode* mode)
+{
+  if(mode->colortype == LCT_GREY)
+  {
+    *r = *g = *b = 256 * in[i * 2 + 0] + in[i * 2 + 1];
+    if(mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0;
+    else *a = 65535;
+  }
+  else if(mode->colortype == LCT_RGB)
+  {
+    *r = 256 * in[i * 6 + 0] + in[i * 6 + 1];
+    *g = 256 * in[i * 6 + 2] + in[i * 6 + 3];
+    *b = 256 * in[i * 6 + 4] + in[i * 6 + 5];
+    if(mode->key_defined && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r
+       && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g
+       && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0;
+    else *a = 65535;
+  }
+  else if(mode->colortype == LCT_GREY_ALPHA)
+  {
+    *r = *g = *b = 256 * in[i * 4 + 0] + in[i * 4 + 1];
+    *a = 256 * in[i * 4 + 2] + in[i * 4 + 3];
+  }
+  else if(mode->colortype == LCT_RGBA)
+  {
+    *r = 256 * in[i * 8 + 0] + in[i * 8 + 1];
+    *g = 256 * in[i * 8 + 2] + in[i * 8 + 3];
+    *b = 256 * in[i * 8 + 4] + in[i * 8 + 5];
+    *a = 256 * in[i * 8 + 6] + in[i * 8 + 7];
+  }
+}
+
+unsigned lodepng_convert(unsigned char* out, const unsigned char* in,
+                         LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in,
+                         unsigned w, unsigned h)
+{
+  size_t i;
+  ColorTree tree;
+  size_t numpixels = w * h;
+
+  if(lodepng_color_mode_equal(mode_out, mode_in))
+  {
+    size_t numbytes = lodepng_get_raw_size(w, h, mode_in);
+    for(i = 0; i != numbytes; ++i) out[i] = in[i];
+    return 0;
+  }
+
+  if(mode_out->colortype == LCT_PALETTE)
+  {
+    size_t palsize = 1u << mode_out->bitdepth;
+    if(mode_out->palettesize < palsize) palsize = mode_out->palettesize;
+    color_tree_init(&tree);
+    for(i = 0; i != palsize; ++i)
+    {
+      unsigned char* p = &mode_out->palette[i * 4];
+      color_tree_add(&tree, p[0], p[1], p[2], p[3], i);
+    }
+  }
+
+  if(mode_in->bitdepth == 16 && mode_out->bitdepth == 16)
+  {
+    for(i = 0; i != numpixels; ++i)
+    {
+      unsigned short r = 0, g = 0, b = 0, a = 0;
+      getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode_in);
+      rgba16ToPixel(out, i, mode_out, r, g, b, a);
+    }
+  }
+  else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGBA)
+  {
+    getPixelColorsRGBA8(out, numpixels, 1, in, mode_in);
+  }
+  else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGB)
+  {
+    getPixelColorsRGBA8(out, numpixels, 0, in, mode_in);
+  }
+  else
+  {
+    unsigned char r = 0, g = 0, b = 0, a = 0;
+    for(i = 0; i != numpixels; ++i)
+    {
+      getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode_in);
+      rgba8ToPixel(out, i, mode_out, &tree, r, g, b, a);
+    }
+  }
+
+  if(mode_out->colortype == LCT_PALETTE)
+  {
+    color_tree_cleanup(&tree);
+  }
+
+  return 0; /*no error (this function currently never has one, but maybe OOM detection added later.)*/
+}
+
+#ifdef LODEPNG_COMPILE_ENCODER
+
+void lodepng_color_profile_init(LodePNGColorProfile* profile)
+{
+  profile->colored = 0;
+  profile->key = 0;
+  profile->alpha = 0;
+  profile->key_r = profile->key_g = profile->key_b = 0;
+  profile->numcolors = 0;
+  profile->bits = 1;
+}
+
+/*function used for debug purposes with C++*/
+/*void printColorProfile(LodePNGColorProfile* p)
+{
+  std::cout << "colored: " << (int)p->colored << ", ";
+  std::cout << "key: " << (int)p->key << ", ";
+  std::cout << "key_r: " << (int)p->key_r << ", ";
+  std::cout << "key_g: " << (int)p->key_g << ", ";
+  std::cout << "key_b: " << (int)p->key_b << ", ";
+  std::cout << "alpha: " << (int)p->alpha << ", ";
+  std::cout << "numcolors: " << (int)p->numcolors << ", ";
+  std::cout << "bits: " << (int)p->bits << std::endl;
+}*/
+
+/*Returns how many bits needed to represent given value (max 8 bit)*/
+static unsigned getValueRequiredBits(unsigned char value)
+{
+  if(value == 0 || value == 255) return 1;
+  /*The scaling of 2-bit and 4-bit values uses multiples of 85 and 17*/
+  if(value % 17 == 0) return value % 85 == 0 ? 2 : 4;
+  return 8;
+}
+
+/*profile must already have been inited with mode.
+It's ok to set some parameters of profile to done already.*/
+unsigned lodepng_get_color_profile(LodePNGColorProfile* profile,
+                                   const unsigned char* in, unsigned w, unsigned h,
+                                   const LodePNGColorMode* mode)
+{
+  unsigned error = 0;
+  size_t i;
+  ColorTree tree;
+  size_t numpixels = w * h;
+
+  unsigned colored_done = lodepng_is_greyscale_type(mode) ? 1 : 0;
+  unsigned alpha_done = lodepng_can_have_alpha(mode) ? 0 : 1;
+  unsigned numcolors_done = 0;
+  unsigned bpp = lodepng_get_bpp(mode);
+  unsigned bits_done = bpp == 1 ? 1 : 0;
+  unsigned maxnumcolors = 257;
+  unsigned sixteen = 0;
+  if(bpp <= 8) maxnumcolors = bpp == 1 ? 2 : (bpp == 2 ? 4 : (bpp == 4 ? 16 : 256));
+
+  color_tree_init(&tree);
+
+  /*Check if the 16-bit input is truly 16-bit*/
+  if(mode->bitdepth == 16)
+  {
+    unsigned short r, g, b, a;
+    for(i = 0; i != numpixels; ++i)
+    {
+      getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode);
+      if((r & 255) != ((r >> 8) & 255) || (g & 255) != ((g >> 8) & 255) ||
+         (b & 255) != ((b >> 8) & 255) || (a & 255) != ((a >> 8) & 255)) /*first and second byte differ*/
+      {
+        sixteen = 1;
+        break;
+      }
+    }
+  }
+
+  if(sixteen)
+  {
+    unsigned short r = 0, g = 0, b = 0, a = 0;
+    profile->bits = 16;
+    bits_done = numcolors_done = 1; /*counting colors no longer useful, palette doesn't support 16-bit*/
+
+    for(i = 0; i != numpixels; ++i)
+    {
+      getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode);
+
+      if(!colored_done && (r != g || r != b))
+      {
+        profile->colored = 1;
+        colored_done = 1;
+      }
+
+      if(!alpha_done)
+      {
+        unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b);
+        if(a != 65535 && (a != 0 || (profile->key && !matchkey)))
+        {
+          profile->alpha = 1;
+          alpha_done = 1;
+          if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/
+        }
+        else if(a == 0 && !profile->alpha && !profile->key)
+        {
+          profile->key = 1;
+          profile->key_r = r;
+          profile->key_g = g;
+          profile->key_b = b;
+        }
+        else if(a == 65535 && profile->key && matchkey)
+        {
+          /* Color key cannot be used if an opaque pixel also has that RGB color. */
+          profile->alpha = 1;
+          alpha_done = 1;
+        }
+      }
+
+      if(alpha_done && numcolors_done && colored_done && bits_done) break;
+    }
+  }
+  else /* < 16-bit */
+  {
+    for(i = 0; i != numpixels; ++i)
+    {
+      unsigned char r = 0, g = 0, b = 0, a = 0;
+      getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode);
+
+      if(!bits_done && profile->bits < 8)
+      {
+        /*only r is checked, < 8 bits is only relevant for greyscale*/
+        unsigned bits = getValueRequiredBits(r);
+        if(bits > profile->bits) profile->bits = bits;
+      }
+      bits_done = (profile->bits >= bpp);
+
+      if(!colored_done && (r != g || r != b))
+      {
+        profile->colored = 1;
+        colored_done = 1;
+        if(profile->bits < 8) profile->bits = 8; /*PNG has no colored modes with less than 8-bit per channel*/
+      }
+
+      if(!alpha_done)
+      {
+        unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b);
+        if(a != 255 && (a != 0 || (profile->key && !matchkey)))
+        {
+          profile->alpha = 1;
+          alpha_done = 1;
+          if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/
+        }
+        else if(a == 0 && !profile->alpha && !profile->key)
+        {
+          profile->key = 1;
+          profile->key_r = r;
+          profile->key_g = g;
+          profile->key_b = b;
+        }
+        else if(a == 255 && profile->key && matchkey)
+        {
+          /* Color key cannot be used if an opaque pixel also has that RGB color. */
+          profile->alpha = 1;
+          alpha_done = 1;
+          if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/
+        }
+      }
+
+      if(!numcolors_done)
+      {
+        if(!color_tree_has(&tree, r, g, b, a))
+        {
+          color_tree_add(&tree, r, g, b, a, profile->numcolors);
+          if(profile->numcolors < 256)
+          {
+            unsigned char* p = profile->palette;
+            unsigned n = profile->numcolors;
+            p[n * 4 + 0] = r;
+            p[n * 4 + 1] = g;
+            p[n * 4 + 2] = b;
+            p[n * 4 + 3] = a;
+          }
+          ++profile->numcolors;
+          numcolors_done = profile->numcolors >= maxnumcolors;
+        }
+      }
+
+      if(alpha_done && numcolors_done && colored_done && bits_done) break;
+    }
+
+    /*make the profile's key always 16-bit for consistency - repeat each byte twice*/
+    profile->key_r += (profile->key_r << 8);
+    profile->key_g += (profile->key_g << 8);
+    profile->key_b += (profile->key_b << 8);
+  }
+
+  color_tree_cleanup(&tree);
+  return error;
+}
+
+/*Automatically chooses color type that gives smallest amount of bits in the
+output image, e.g. grey if there are only greyscale pixels, palette if there
+are less than 256 colors, ...
+Updates values of mode with a potentially smaller color model. mode_out should
+contain the user chosen color model, but will be overwritten with the new chosen one.*/
+unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out,
+                                   const unsigned char* image, unsigned w, unsigned h,
+                                   const LodePNGColorMode* mode_in)
+{
+  LodePNGColorProfile prof;
+  unsigned error = 0;
+  unsigned i, n, palettebits, grey_ok, palette_ok;
+
+  lodepng_color_profile_init(&prof);
+  error = lodepng_get_color_profile(&prof, image, w, h, mode_in);
+  if(error) return error;
+  mode_out->key_defined = 0;
+
+  if(prof.key && w * h <= 16) {
+    prof.alpha = 1; /*too few pixels to justify tRNS chunk overhead*/
+    if(prof.bits < 8) prof.bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/
+  }
+  grey_ok = !prof.colored && !prof.alpha; /*grey without alpha, with potentially low bits*/
+  n = prof.numcolors;
+  palettebits = n <= 2 ? 1 : (n <= 4 ? 2 : (n <= 16 ? 4 : 8));
+  palette_ok = n <= 256 && (n * 2 < w * h) && prof.bits <= 8;
+  if(w * h < n * 2) palette_ok = 0; /*don't add palette overhead if image has only a few pixels*/
+  if(grey_ok && prof.bits <= palettebits) palette_ok = 0; /*grey is less overhead*/
+
+  if(palette_ok)
+  {
+    unsigned char* p = prof.palette;
+    lodepng_palette_clear(mode_out); /*remove potential earlier palette*/
+    for(i = 0; i != prof.numcolors; ++i)
+    {
+      error = lodepng_palette_add(mode_out, p[i * 4 + 0], p[i * 4 + 1], p[i * 4 + 2], p[i * 4 + 3]);
+      if(error) break;
+    }
+
+    mode_out->colortype = LCT_PALETTE;
+    mode_out->bitdepth = palettebits;
+
+    if(mode_in->colortype == LCT_PALETTE && mode_in->palettesize >= mode_out->palettesize
+        && mode_in->bitdepth == mode_out->bitdepth)
+    {
+      /*If input should have same palette colors, keep original to preserve its order and prevent conversion*/
+      lodepng_color_mode_cleanup(mode_out);
+      lodepng_color_mode_copy(mode_out, mode_in);
+    }
+  }
+  else /*8-bit or 16-bit per channel*/
+  {
+    mode_out->bitdepth = prof.bits;
+    mode_out->colortype = prof.alpha ? (prof.colored ? LCT_RGBA : LCT_GREY_ALPHA)
+                                     : (prof.colored ? LCT_RGB : LCT_GREY);
+
+    if(prof.key && !prof.alpha)
+    {
+      unsigned mask = (1u << mode_out->bitdepth) - 1u; /*profile always uses 16-bit, mask converts it*/
+      mode_out->key_r = prof.key_r & mask;
+      mode_out->key_g = prof.key_g & mask;
+      mode_out->key_b = prof.key_b & mask;
+      mode_out->key_defined = 1;
+    }
+  }
+
+  return error;
+}
+
+#endif /* #ifdef LODEPNG_COMPILE_ENCODER */
+
+/*
+Paeth predicter, used by PNG filter type 4
+The parameters are of type short, but should come from unsigned chars, the shorts
+are only needed to make the paeth calculation correct.
+*/
+static unsigned char paethPredictor(short a, short b, short c)
+{
+  short pa = abs(b - c);
+  short pb = abs(a - c);
+  short pc = abs(a + b - c - c);
+
+  if(pc < pa && pc < pb) return (unsigned char)c;
+  else if(pb < pa) return (unsigned char)b;
+  else return (unsigned char)a;
+}
+
+/*shared values used by multiple Adam7 related functions*/
+
+static const unsigned ADAM7_IX[7] = { 0, 4, 0, 2, 0, 1, 0 }; /*x start values*/
+static const unsigned ADAM7_IY[7] = { 0, 0, 4, 0, 2, 0, 1 }; /*y start values*/
+static const unsigned ADAM7_DX[7] = { 8, 8, 4, 4, 2, 2, 1 }; /*x delta values*/
+static const unsigned ADAM7_DY[7] = { 8, 8, 8, 4, 4, 2, 2 }; /*y delta values*/
+
+/*
+Outputs various dimensions and positions in the image related to the Adam7 reduced images.
+passw: output containing the width of the 7 passes
+passh: output containing the height of the 7 passes
+filter_passstart: output containing the index of the start and end of each
+ reduced image with filter bytes
+padded_passstart output containing the index of the start and end of each
+ reduced image when without filter bytes but with padded scanlines
+passstart: output containing the index of the start and end of each reduced
+ image without padding between scanlines, but still padding between the images
+w, h: width and height of non-interlaced image
+bpp: bits per pixel
+"padded" is only relevant if bpp is less than 8 and a scanline or image does not
+ end at a full byte
+*/
+static void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7], size_t filter_passstart[8],
+                                size_t padded_passstart[8], size_t passstart[8], unsigned w, unsigned h, unsigned bpp)
+{
+  /*the passstart values have 8 values: the 8th one indicates the byte after the end of the 7th (= last) pass*/
+  unsigned i;
+
+  /*calculate width and height in pixels of each pass*/
+  for(i = 0; i != 7; ++i)
+  {
+    passw[i] = (w + ADAM7_DX[i] - ADAM7_IX[i] - 1) / ADAM7_DX[i];
+    passh[i] = (h + ADAM7_DY[i] - ADAM7_IY[i] - 1) / ADAM7_DY[i];
+    if(passw[i] == 0) passh[i] = 0;
+    if(passh[i] == 0) passw[i] = 0;
+  }
+
+  filter_passstart[0] = padded_passstart[0] = passstart[0] = 0;
+  for(i = 0; i != 7; ++i)
+  {
+    /*if passw[i] is 0, it's 0 bytes, not 1 (no filtertype-byte)*/
+    filter_passstart[i + 1] = filter_passstart[i]
+                            + ((passw[i] && passh[i]) ? passh[i] * (1 + (passw[i] * bpp + 7) / 8) : 0);
+    /*bits padded if needed to fill full byte at end of each scanline*/
+    padded_passstart[i + 1] = padded_passstart[i] + passh[i] * ((passw[i] * bpp + 7) / 8);
+    /*only padded at end of reduced image*/
+    passstart[i + 1] = passstart[i] + (passh[i] * passw[i] * bpp + 7) / 8;
+  }
+}
+
+#ifdef LODEPNG_COMPILE_DECODER
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / PNG Decoder                                                            / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/*read the information from the header and store it in the LodePNGInfo. return value is error*/
+unsigned lodepng_inspect(unsigned* w, unsigned* h, LodePNGState* state,
+                         const unsigned char* in, size_t insize)
+{
+  LodePNGInfo* info = &state->info_png;
+  if(insize == 0 || in == 0)
+  {
+    CERROR_RETURN_ERROR(state->error, 48); /*error: the given data is empty*/
+  }
+  if(insize < 33)
+  {
+    CERROR_RETURN_ERROR(state->error, 27); /*error: the data length is smaller than the length of a PNG header*/
+  }
+
+  /*when decoding a new PNG image, make sure all parameters created after previous decoding are reset*/
+  lodepng_info_cleanup(info);
+  lodepng_info_init(info);
+
+  if(in[0] != 137 || in[1] != 80 || in[2] != 78 || in[3] != 71
+     || in[4] != 13 || in[5] != 10 || in[6] != 26 || in[7] != 10)
+  {
+    CERROR_RETURN_ERROR(state->error, 28); /*error: the first 8 bytes are not the correct PNG signature*/
+  }
+  if(in[12] != 'I' || in[13] != 'H' || in[14] != 'D' || in[15] != 'R')
+  {
+    CERROR_RETURN_ERROR(state->error, 29); /*error: it doesn't start with a IHDR chunk!*/
+  }
+
+  /*read the values given in the header*/
+  *w = lodepng_read32bitInt(&in[16]);
+  *h = lodepng_read32bitInt(&in[20]);
+  info->color.bitdepth = in[24];
+  info->color.colortype = (LodePNGColorType)in[25];
+  info->compression_method = in[26];
+  info->filter_method = in[27];
+  info->interlace_method = in[28];
+
+  if(*w == 0 || *h == 0)
+  {
+    CERROR_RETURN_ERROR(state->error, 93);
+  }
+
+  if(!state->decoder.ignore_crc)
+  {
+    unsigned CRC = lodepng_read32bitInt(&in[29]);
+    unsigned checksum = lodepng_crc32(&in[12], 17);
+    if(CRC != checksum)
+    {
+      CERROR_RETURN_ERROR(state->error, 57); /*invalid CRC*/
+    }
+  }
+
+  /*error: only compression method 0 is allowed in the specification*/
+  if(info->compression_method != 0) CERROR_RETURN_ERROR(state->error, 32);
+  /*error: only filter method 0 is allowed in the specification*/
+  if(info->filter_method != 0) CERROR_RETURN_ERROR(state->error, 33);
+  /*error: only interlace methods 0 and 1 exist in the specification*/
+  if(info->interlace_method > 1) CERROR_RETURN_ERROR(state->error, 34);
+
+  state->error = checkColorValidity(info->color.colortype, info->color.bitdepth);
+  return state->error;
+}
+
+static unsigned unfilterScanline(unsigned char* recon, const unsigned char* scanline, const unsigned char* precon,
+                                 size_t bytewidth, unsigned char filterType, size_t length)
+{
+  /*
+  For PNG filter method 0
+  unfilter a PNG image scanline by scanline. when the pixels are smaller than 1 byte,
+  the filter works byte per byte (bytewidth = 1)
+  precon is the previous unfiltered scanline, recon the result, scanline the current one
+  the incoming scanlines do NOT include the filtertype byte, that one is given in the parameter filterType instead
+  recon and scanline MAY be the same memory address! precon must be disjoint.
+  */
+
+  size_t i;
+  switch(filterType)
+  {
+    case 0:
+      for(i = 0; i != length; ++i) recon[i] = scanline[i];
+      break;
+    case 1:
+      for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i];
+      for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + recon[i - bytewidth];
+      break;
+    case 2:
+      if(precon)
+      {
+        for(i = 0; i != length; ++i) recon[i] = scanline[i] + precon[i];
+      }
+      else
+      {
+        for(i = 0; i != length; ++i) recon[i] = scanline[i];
+      }
+      break;
+    case 3:
+      if(precon)
+      {
+        for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i] + precon[i] / 2;
+        for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + ((recon[i - bytewidth] + precon[i]) / 2);
+      }
+      else
+      {
+        for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i];
+        for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + recon[i - bytewidth] / 2;
+      }
+      break;
+    case 4:
+      if(precon)
+      {
+        for(i = 0; i != bytewidth; ++i)
+        {
+          recon[i] = (scanline[i] + precon[i]); /*paethPredictor(0, precon[i], 0) is always precon[i]*/
+        }
+        for(i = bytewidth; i < length; ++i)
+        {
+          recon[i] = (scanline[i] + paethPredictor(recon[i - bytewidth], precon[i], precon[i - bytewidth]));
+        }
+      }
+      else
+      {
+        for(i = 0; i != bytewidth; ++i)
+        {
+          recon[i] = scanline[i];
+        }
+        for(i = bytewidth; i < length; ++i)
+        {
+          /*paethPredictor(recon[i - bytewidth], 0, 0) is always recon[i - bytewidth]*/
+          recon[i] = (scanline[i] + recon[i - bytewidth]);
+        }
+      }
+      break;
+    default: return 36; /*error: unexisting filter type given*/
+  }
+  return 0;
+}
+
+static unsigned unfilter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp)
+{
+  /*
+  For PNG filter method 0
+  this function unfilters a single image (e.g. without interlacing this is called once, with Adam7 seven times)
+  out must have enough bytes allocated already, in must have the scanlines + 1 filtertype byte per scanline
+  w and h are image dimensions or dimensions of reduced image, bpp is bits per pixel
+  in and out are allowed to be the same memory address (but aren't the same size since in has the extra filter bytes)
+  */
+
+  unsigned y;
+  unsigned char* prevline = 0;
+
+  /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/
+  size_t bytewidth = (bpp + 7) / 8;
+  size_t linebytes = (w * bpp + 7) / 8;
+
+  for(y = 0; y < h; ++y)
+  {
+    size_t outindex = linebytes * y;
+    size_t inindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/
+    unsigned char filterType = in[inindex];
+
+    CERROR_TRY_RETURN(unfilterScanline(&out[outindex], &in[inindex + 1], prevline, bytewidth, filterType, linebytes));
+
+    prevline = &out[outindex];
+  }
+
+  return 0;
+}
+
+/*
+in: Adam7 interlaced image, with no padding bits between scanlines, but between
+ reduced images so that each reduced image starts at a byte.
+out: the same pixels, but re-ordered so that they're now a non-interlaced image with size w*h
+bpp: bits per pixel
+out has the following size in bits: w * h * bpp.
+in is possibly bigger due to padding bits between reduced images.
+out must be big enough AND must be 0 everywhere if bpp < 8 in the current implementation
+(because that's likely a little bit faster)
+NOTE: comments about padding bits are only relevant if bpp < 8
+*/
+static void Adam7_deinterlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp)
+{
+  unsigned passw[7], passh[7];
+  size_t filter_passstart[8], padded_passstart[8], passstart[8];
+  unsigned i;
+
+  Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);
+
+  if(bpp >= 8)
+  {
+    for(i = 0; i != 7; ++i)
+    {
+      unsigned x, y, b;
+      size_t bytewidth = bpp / 8;
+      for(y = 0; y < passh[i]; ++y)
+      for(x = 0; x < passw[i]; ++x)
+      {
+        size_t pixelinstart = passstart[i] + (y * passw[i] + x) * bytewidth;
+        size_t pixeloutstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth;
+        for(b = 0; b < bytewidth; ++b)
+        {
+          out[pixeloutstart + b] = in[pixelinstart + b];
+        }
+      }
+    }
+  }
+  else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/
+  {
+    for(i = 0; i != 7; ++i)
+    {
+      unsigned x, y, b;
+      unsigned ilinebits = bpp * passw[i];
+      unsigned olinebits = bpp * w;
+      size_t obp, ibp; /*bit pointers (for out and in buffer)*/
+      for(y = 0; y < passh[i]; ++y)
+      for(x = 0; x < passw[i]; ++x)
+      {
+        ibp = (8 * passstart[i]) + (y * ilinebits + x * bpp);
+        obp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp;
+        for(b = 0; b < bpp; ++b)
+        {
+          unsigned char bit = readBitFromReversedStream(&ibp, in);
+          /*note that this function assumes the out buffer is completely 0, use setBitOfReversedStream otherwise*/
+          setBitOfReversedStream0(&obp, out, bit);
+        }
+      }
+    }
+  }
+}
+
+static void removePaddingBits(unsigned char* out, const unsigned char* in,
+                              size_t olinebits, size_t ilinebits, unsigned h)
+{
+  /*
+  After filtering there are still padding bits if scanlines have non multiple of 8 bit amounts. They need
+  to be removed (except at last scanline of (Adam7-reduced) image) before working with pure image buffers
+  for the Adam7 code, the color convert code and the output to the user.
+  in and out are allowed to be the same buffer, in may also be higher but still overlapping; in must
+  have >= ilinebits*h bits, out must have >= olinebits*h bits, olinebits must be <= ilinebits
+  also used to move bits after earlier such operations happened, e.g. in a sequence of reduced images from Adam7
+  only useful if (ilinebits - olinebits) is a value in the range 1..7
+  */
+  unsigned y;
+  size_t diff = ilinebits - olinebits;
+  size_t ibp = 0, obp = 0; /*input and output bit pointers*/
+  for(y = 0; y < h; ++y)
+  {
+    size_t x;
+    for(x = 0; x < olinebits; ++x)
+    {
+      unsigned char bit = readBitFromReversedStream(&ibp, in);
+      setBitOfReversedStream(&obp, out, bit);
+    }
+    ibp += diff;
+  }
+}
+
+/*out must be buffer big enough to contain full image, and in must contain the full decompressed data from
+the IDAT chunks (with filter index bytes and possible padding bits)
+return value is error*/
+static unsigned postProcessScanlines(unsigned char* out, unsigned char* in,
+                                     unsigned w, unsigned h, const LodePNGInfo* info_png)
+{
+  /*
+  This function converts the filtered-padded-interlaced data into pure 2D image buffer with the PNG's colortype.
+  Steps:
+  *) if no Adam7: 1) unfilter 2) remove padding bits (= posible extra bits per scanline if bpp < 8)
+  *) if adam7: 1) 7x unfilter 2) 7x remove padding bits 3) Adam7_deinterlace
+  NOTE: the in buffer will be overwritten with intermediate data!
+  */
+  unsigned bpp = lodepng_get_bpp(&info_png->color);
+  if(bpp == 0) return 31; /*error: invalid colortype*/
+
+  if(info_png->interlace_method == 0)
+  {
+    if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8)
+    {
+      CERROR_TRY_RETURN(unfilter(in, in, w, h, bpp));
+      removePaddingBits(out, in, w * bpp, ((w * bpp + 7) / 8) * 8, h);
+    }
+    /*we can immediatly filter into the out buffer, no other steps needed*/
+    else CERROR_TRY_RETURN(unfilter(out, in, w, h, bpp));
+  }
+  else /*interlace_method is 1 (Adam7)*/
+  {
+    unsigned passw[7], passh[7]; size_t filter_passstart[8], padded_passstart[8], passstart[8];
+    unsigned i;
+
+    Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);
+
+    for(i = 0; i != 7; ++i)
+    {
+      CERROR_TRY_RETURN(unfilter(&in[padded_passstart[i]], &in[filter_passstart[i]], passw[i], passh[i], bpp));
+      /*TODO: possible efficiency improvement: if in this reduced image the bits fit nicely in 1 scanline,
+      move bytes instead of bits or move not at all*/
+      if(bpp < 8)
+      {
+        /*remove padding bits in scanlines; after this there still may be padding
+        bits between the different reduced images: each reduced image still starts nicely at a byte*/
+        removePaddingBits(&in[passstart[i]], &in[padded_passstart[i]], passw[i] * bpp,
+                          ((passw[i] * bpp + 7) / 8) * 8, passh[i]);
+      }
+    }
+
+    Adam7_deinterlace(out, in, w, h, bpp);
+  }
+
+  return 0;
+}
+
+static unsigned readChunk_PLTE(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength)
+{
+  unsigned pos = 0, i;
+  if(color->palette) lodepng_free(color->palette);
+  color->palettesize = chunkLength / 3;
+  color->palette = (unsigned char*)lodepng_malloc(4 * color->palettesize);
+  if(!color->palette && color->palettesize)
+  {
+    color->palettesize = 0;
+    return 83; /*alloc fail*/
+  }
+  if(color->palettesize > 256) return 38; /*error: palette too big*/
+
+  for(i = 0; i != color->palettesize; ++i)
+  {
+    color->palette[4 * i + 0] = data[pos++]; /*R*/
+    color->palette[4 * i + 1] = data[pos++]; /*G*/
+    color->palette[4 * i + 2] = data[pos++]; /*B*/
+    color->palette[4 * i + 3] = 255; /*alpha*/
+  }
+
+  return 0; /* OK */
+}
+
+static unsigned readChunk_tRNS(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength)
+{
+  unsigned i;
+  if(color->colortype == LCT_PALETTE)
+  {
+    /*error: more alpha values given than there are palette entries*/
+    if(chunkLength > color->palettesize) return 38;
+
+    for(i = 0; i != chunkLength; ++i) color->palette[4 * i + 3] = data[i];
+  }
+  else if(color->colortype == LCT_GREY)
+  {
+    /*error: this chunk must be 2 bytes for greyscale image*/
+    if(chunkLength != 2) return 30;
+
+    color->key_defined = 1;
+    color->key_r = color->key_g = color->key_b = 256u * data[0] + data[1];
+  }
+  else if(color->colortype == LCT_RGB)
+  {
+    /*error: this chunk must be 6 bytes for RGB image*/
+    if(chunkLength != 6) return 41;
+
+    color->key_defined = 1;
+    color->key_r = 256u * data[0] + data[1];
+    color->key_g = 256u * data[2] + data[3];
+    color->key_b = 256u * data[4] + data[5];
+  }
+  else return 42; /*error: tRNS chunk not allowed for other color models*/
+
+  return 0; /* OK */
+}
+
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+/*background color chunk (bKGD)*/
+static unsigned readChunk_bKGD(LodePNGInfo* info, const unsigned char* data, size_t chunkLength)
+{
+  if(info->color.colortype == LCT_PALETTE)
+  {
+    /*error: this chunk must be 1 byte for indexed color image*/
+    if(chunkLength != 1) return 43;
+
+    info->background_defined = 1;
+    info->background_r = info->background_g = info->background_b = data[0];
+  }
+  else if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA)
+  {
+    /*error: this chunk must be 2 bytes for greyscale image*/
+    if(chunkLength != 2) return 44;
+
+    info->background_defined = 1;
+    info->background_r = info->background_g = info->background_b = 256u * data[0] + data[1];
+  }
+  else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA)
+  {
+    /*error: this chunk must be 6 bytes for greyscale image*/
+    if(chunkLength != 6) return 45;
+
+    info->background_defined = 1;
+    info->background_r = 256u * data[0] + data[1];
+    info->background_g = 256u * data[2] + data[3];
+    info->background_b = 256u * data[4] + data[5];
+  }
+
+  return 0; /* OK */
+}
+
+/*text chunk (tEXt)*/
+static unsigned readChunk_tEXt(LodePNGInfo* info, const unsigned char* data, size_t chunkLength)
+{
+  unsigned error = 0;
+  char *key = 0, *str = 0;
+  unsigned i;
+
+  while(!error) /*not really a while loop, only used to break on error*/
+  {
+    unsigned length, string2_begin;
+
+    length = 0;
+    while(length < chunkLength && data[length] != 0) ++length;
+    /*even though it's not allowed by the standard, no error is thrown if
+    there's no null termination char, if the text is empty*/
+    if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/
+
+    key = (char*)lodepng_malloc(length + 1);
+    if(!key) CERROR_BREAK(error, 83); /*alloc fail*/
+
+    key[length] = 0;
+    for(i = 0; i != length; ++i) key[i] = (char)data[i];
+
+    string2_begin = length + 1; /*skip keyword null terminator*/
+
+    length = chunkLength < string2_begin ? 0 : chunkLength - string2_begin;
+    str = (char*)lodepng_malloc(length + 1);
+    if(!str) CERROR_BREAK(error, 83); /*alloc fail*/
+
+    str[length] = 0;
+    for(i = 0; i != length; ++i) str[i] = (char)data[string2_begin + i];
+
+    error = lodepng_add_text(info, key, str);
+
+    break;
+  }
+
+  lodepng_free(key);
+  lodepng_free(str);
+
+  return error;
+}
+
+/*compressed text chunk (zTXt)*/
+static unsigned readChunk_zTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings,
+                               const unsigned char* data, size_t chunkLength)
+{
+  unsigned error = 0;
+  unsigned i;
+
+  unsigned length, string2_begin;
+  char *key = 0;
+  ucvector decoded;
+
+  ucvector_init(&decoded);
+
+  while(!error) /*not really a while loop, only used to break on error*/
+  {
+    for(length = 0; length < chunkLength && data[length] != 0; ++length) ;
+    if(length + 2 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/
+    if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/
+
+    key = (char*)lodepng_malloc(length + 1);
+    if(!key) CERROR_BREAK(error, 83); /*alloc fail*/
+
+    key[length] = 0;
+    for(i = 0; i != length; ++i) key[i] = (char)data[i];
+
+    if(data[length + 1] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/
+
+    string2_begin = length + 2;
+    if(string2_begin > chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/
+
+    length = chunkLength - string2_begin;
+    /*will fail if zlib error, e.g. if length is too small*/
+    error = zlib_decompress(&decoded.data, &decoded.size,
+                            (unsigned char*)(&data[string2_begin]),
+                            length, zlibsettings);
+    if(error) break;
+    ucvector_push_back(&decoded, 0);
+
+    error = lodepng_add_text(info, key, (char*)decoded.data);
+
+    break;
+  }
+
+  lodepng_free(key);
+  ucvector_cleanup(&decoded);
+
+  return error;
+}
+
+/*international text chunk (iTXt)*/
+static unsigned readChunk_iTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings,
+                               const unsigned char* data, size_t chunkLength)
+{
+  unsigned error = 0;
+  unsigned i;
+
+  unsigned length, begin, compressed;
+  char *key = 0, *langtag = 0, *transkey = 0;
+  ucvector decoded;
+  ucvector_init(&decoded);
+
+  while(!error) /*not really a while loop, only used to break on error*/
+  {
+    /*Quick check if the chunk length isn't too small. Even without check
+    it'd still fail with other error checks below if it's too short. This just gives a different error code.*/
+    if(chunkLength < 5) CERROR_BREAK(error, 30); /*iTXt chunk too short*/
+
+    /*read the key*/
+    for(length = 0; length < chunkLength && data[length] != 0; ++length) ;
+    if(length + 3 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination char, corrupt?*/
+    if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/
+
+    key = (char*)lodepng_malloc(length + 1);
+    if(!key) CERROR_BREAK(error, 83); /*alloc fail*/
+
+    key[length] = 0;
+    for(i = 0; i != length; ++i) key[i] = (char)data[i];
+
+    /*read the compression method*/
+    compressed = data[length + 1];
+    if(data[length + 2] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/
+
+    /*even though it's not allowed by the standard, no error is thrown if
+    there's no null termination char, if the text is empty for the next 3 texts*/
+
+    /*read the langtag*/
+    begin = length + 3;
+    length = 0;
+    for(i = begin; i < chunkLength && data[i] != 0; ++i) ++length;
+
+    langtag = (char*)lodepng_malloc(length + 1);
+    if(!langtag) CERROR_BREAK(error, 83); /*alloc fail*/
+
+    langtag[length] = 0;
+    for(i = 0; i != length; ++i) langtag[i] = (char)data[begin + i];
+
+    /*read the transkey*/
+    begin += length + 1;
+    length = 0;
+    for(i = begin; i < chunkLength && data[i] != 0; ++i) ++length;
+
+    transkey = (char*)lodepng_malloc(length + 1);
+    if(!transkey) CERROR_BREAK(error, 83); /*alloc fail*/
+
+    transkey[length] = 0;
+    for(i = 0; i != length; ++i) transkey[i] = (char)data[begin + i];
+
+    /*read the actual text*/
+    begin += length + 1;
+
+    length = chunkLength < begin ? 0 : chunkLength - begin;
+
+    if(compressed)
+    {
+      /*will fail if zlib error, e.g. if length is too small*/
+      error = zlib_decompress(&decoded.data, &decoded.size,
+                              (unsigned char*)(&data[begin]),
+                              length, zlibsettings);
+      if(error) break;
+      if(decoded.allocsize < decoded.size) decoded.allocsize = decoded.size;
+      ucvector_push_back(&decoded, 0);
+    }
+    else
+    {
+      if(!ucvector_resize(&decoded, length + 1)) CERROR_BREAK(error, 83 /*alloc fail*/);
+
+      decoded.data[length] = 0;
+      for(i = 0; i != length; ++i) decoded.data[i] = data[begin + i];
+    }
+
+    error = lodepng_add_itext(info, key, langtag, transkey, (char*)decoded.data);
+
+    break;
+  }
+
+  lodepng_free(key);
+  lodepng_free(langtag);
+  lodepng_free(transkey);
+  ucvector_cleanup(&decoded);
+
+  return error;
+}
+
+static unsigned readChunk_tIME(LodePNGInfo* info, const unsigned char* data, size_t chunkLength)
+{
+  if(chunkLength != 7) return 73; /*invalid tIME chunk size*/
+
+  info->time_defined = 1;
+  info->time.year = 256u * data[0] + data[1];
+  info->time.month = data[2];
+  info->time.day = data[3];
+  info->time.hour = data[4];
+  info->time.minute = data[5];
+  info->time.second = data[6];
+
+  return 0; /* OK */
+}
+
+static unsigned readChunk_pHYs(LodePNGInfo* info, const unsigned char* data, size_t chunkLength)
+{
+  if(chunkLength != 9) return 74; /*invalid pHYs chunk size*/
+
+  info->phys_defined = 1;
+  info->phys_x = 16777216u * data[0] + 65536u * data[1] + 256u * data[2] + data[3];
+  info->phys_y = 16777216u * data[4] + 65536u * data[5] + 256u * data[6] + data[7];
+  info->phys_unit = data[8];
+
+  return 0; /* OK */
+}
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+
+/*read a PNG, the result will be in the same color type as the PNG (hence "generic")*/
+static void decodeGeneric(unsigned char** out, unsigned* w, unsigned* h,
+                          LodePNGState* state,
+                          const unsigned char* in, size_t insize)
+{
+  unsigned char IEND = 0;
+  const unsigned char* chunk;
+  size_t i;
+  ucvector idat; /*the data from idat chunks*/
+  ucvector scanlines;
+  size_t predict;
+  size_t numpixels;
+
+  /*for unknown chunk order*/
+  unsigned unknown = 0;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  unsigned critical_pos = 1; /*1 = after IHDR, 2 = after PLTE, 3 = after IDAT*/
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+
+  /*provide some proper output values if error will happen*/
+  *out = 0;
+
+  state->error = lodepng_inspect(w, h, state, in, insize); /*reads header and resets other parameters in state->info_png*/
+  if(state->error) return;
+
+  numpixels = *w * *h;
+
+  /*multiplication overflow*/
+  if(*h != 0 && numpixels / *h != *w) CERROR_RETURN(state->error, 92);
+  /*multiplication overflow possible further below. Allows up to 2^31-1 pixel
+  bytes with 16-bit RGBA, the rest is room for filter bytes.*/
+  if(numpixels > 268435455) CERROR_RETURN(state->error, 92);
+
+  ucvector_init(&idat);
+  chunk = &in[33]; /*first byte of the first chunk after the header*/
+
+  /*loop through the chunks, ignoring unknown chunks and stopping at IEND chunk.
+  IDAT data is put at the start of the in buffer*/
+  while(!IEND && !state->error)
+  {
+    unsigned chunkLength;
+    const unsigned char* data; /*the data in the chunk*/
+
+    /*error: size of the in buffer too small to contain next chunk*/
+    if((size_t)((chunk - in) + 12) > insize || chunk < in) CERROR_BREAK(state->error, 30);
+
+    /*length of the data of the chunk, excluding the length bytes, chunk type and CRC bytes*/
+    chunkLength = lodepng_chunk_length(chunk);
+    /*error: chunk length larger than the max PNG chunk size*/
+    if(chunkLength > 2147483647) CERROR_BREAK(state->error, 63);
+
+    if((size_t)((chunk - in) + chunkLength + 12) > insize || (chunk + chunkLength + 12) < in)
+    {
+      CERROR_BREAK(state->error, 64); /*error: size of the in buffer too small to contain next chunk*/
+    }
+
+    data = lodepng_chunk_data_const(chunk);
+
+    /*IDAT chunk, containing compressed image data*/
+    if(lodepng_chunk_type_equals(chunk, "IDAT"))
+    {
+      size_t oldsize = idat.size;
+      if(!ucvector_resize(&idat, oldsize + chunkLength)) CERROR_BREAK(state->error, 83 /*alloc fail*/);
+      for(i = 0; i != chunkLength; ++i) idat.data[oldsize + i] = data[i];
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+      critical_pos = 3;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    }
+    /*IEND chunk*/
+    else if(lodepng_chunk_type_equals(chunk, "IEND"))
+    {
+      IEND = 1;
+    }
+    /*palette chunk (PLTE)*/
+    else if(lodepng_chunk_type_equals(chunk, "PLTE"))
+    {
+      state->error = readChunk_PLTE(&state->info_png.color, data, chunkLength);
+      if(state->error) break;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+      critical_pos = 2;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    }
+    /*palette transparency chunk (tRNS)*/
+    else if(lodepng_chunk_type_equals(chunk, "tRNS"))
+    {
+      state->error = readChunk_tRNS(&state->info_png.color, data, chunkLength);
+      if(state->error) break;
+    }
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+    /*background color chunk (bKGD)*/
+    else if(lodepng_chunk_type_equals(chunk, "bKGD"))
+    {
+      state->error = readChunk_bKGD(&state->info_png, data, chunkLength);
+      if(state->error) break;
+    }
+    /*text chunk (tEXt)*/
+    else if(lodepng_chunk_type_equals(chunk, "tEXt"))
+    {
+      if(state->decoder.read_text_chunks)
+      {
+        state->error = readChunk_tEXt(&state->info_png, data, chunkLength);
+        if(state->error) break;
+      }
+    }
+    /*compressed text chunk (zTXt)*/
+    else if(lodepng_chunk_type_equals(chunk, "zTXt"))
+    {
+      if(state->decoder.read_text_chunks)
+      {
+        state->error = readChunk_zTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength);
+        if(state->error) break;
+      }
+    }
+    /*international text chunk (iTXt)*/
+    else if(lodepng_chunk_type_equals(chunk, "iTXt"))
+    {
+      if(state->decoder.read_text_chunks)
+      {
+        state->error = readChunk_iTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength);
+        if(state->error) break;
+      }
+    }
+    else if(lodepng_chunk_type_equals(chunk, "tIME"))
+    {
+      state->error = readChunk_tIME(&state->info_png, data, chunkLength);
+      if(state->error) break;
+    }
+    else if(lodepng_chunk_type_equals(chunk, "pHYs"))
+    {
+      state->error = readChunk_pHYs(&state->info_png, data, chunkLength);
+      if(state->error) break;
+    }
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    else /*it's not an implemented chunk type, so ignore it: skip over the data*/
+    {
+      /*error: unknown critical chunk (5th bit of first byte of chunk type is 0)*/
+      if(!lodepng_chunk_ancillary(chunk)) CERROR_BREAK(state->error, 69);
+
+      unknown = 1;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+      if(state->decoder.remember_unknown_chunks)
+      {
+        state->error = lodepng_chunk_append(&state->info_png.unknown_chunks_data[critical_pos - 1],
+                                            &state->info_png.unknown_chunks_size[critical_pos - 1], chunk);
+        if(state->error) break;
+      }
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    }
+
+    if(!state->decoder.ignore_crc && !unknown) /*check CRC if wanted, only on known chunk types*/
+    {
+      if(lodepng_chunk_check_crc(chunk)) CERROR_BREAK(state->error, 57); /*invalid CRC*/
+    }
+
+    if(!IEND) chunk = lodepng_chunk_next_const(chunk);
+  }
+
+  ucvector_init(&scanlines);
+  /*predict output size, to allocate exact size for output buffer to avoid more dynamic allocation.
+  If the decompressed size does not match the prediction, the image must be corrupt.*/
+  if(state->info_png.interlace_method == 0)
+  {
+    /*The extra *h is added because this are the filter bytes every scanline starts with*/
+    predict = lodepng_get_raw_size_idat(*w, *h, &state->info_png.color) + *h;
+  }
+  else
+  {
+    /*Adam-7 interlaced: predicted size is the sum of the 7 sub-images sizes*/
+    const LodePNGColorMode* color = &state->info_png.color;
+    predict = 0;
+    predict += lodepng_get_raw_size_idat((*w + 7) / 8, (*h + 7) / 8, color) + (*h + 7) / 8;
+    if(*w > 4) predict += lodepng_get_raw_size_idat((*w + 3) / 8, (*h + 7) / 8, color) + (*h + 7) / 8;
+    predict += lodepng_get_raw_size_idat((*w + 3) / 4, (*h + 3) / 8, color) + (*h + 3) / 8;
+    if(*w > 2) predict += lodepng_get_raw_size_idat((*w + 1) / 4, (*h + 3) / 4, color) + (*h + 3) / 4;
+    predict += lodepng_get_raw_size_idat((*w + 1) / 2, (*h + 1) / 4, color) + (*h + 1) / 4;
+    if(*w > 1) predict += lodepng_get_raw_size_idat((*w + 0) / 2, (*h + 1) / 2, color) + (*h + 1) / 2;
+    predict += lodepng_get_raw_size_idat((*w + 0) / 1, (*h + 0) / 2, color) + (*h + 0) / 2;
+  }
+  if(!state->error && !ucvector_reserve(&scanlines, predict)) state->error = 83; /*alloc fail*/
+  if(!state->error)
+  {
+    state->error = zlib_decompress(&scanlines.data, &scanlines.size, idat.data,
+                                   idat.size, &state->decoder.zlibsettings);
+    if(!state->error && scanlines.size != predict) state->error = 91; /*decompressed size doesn't match prediction*/
+  }
+  ucvector_cleanup(&idat);
+
+  if(!state->error)
+  {
+    size_t outsize = lodepng_get_raw_size(*w, *h, &state->info_png.color);
+    ucvector outv;
+    ucvector_init(&outv);
+    if(!ucvector_resizev(&outv, outsize, 0)) state->error = 83; /*alloc fail*/
+    if(!state->error) state->error = postProcessScanlines(outv.data, scanlines.data, *w, *h, &state->info_png);
+    *out = outv.data;
+  }
+  ucvector_cleanup(&scanlines);
+}
+
+unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h,
+                        LodePNGState* state,
+                        const unsigned char* in, size_t insize)
+{
+  *out = 0;
+  decodeGeneric(out, w, h, state, in, insize);
+  if(state->error) return state->error;
+  if(!state->decoder.color_convert || lodepng_color_mode_equal(&state->info_raw, &state->info_png.color))
+  {
+    /*same color type, no copying or converting of data needed*/
+    /*store the info_png color settings on the info_raw so that the info_raw still reflects what colortype
+    the raw image has to the end user*/
+    if(!state->decoder.color_convert)
+    {
+      state->error = lodepng_color_mode_copy(&state->info_raw, &state->info_png.color);
+      if(state->error) return state->error;
+    }
+  }
+  else
+  {
+    /*color conversion needed; sort of copy of the data*/
+    unsigned char* data = *out;
+    size_t outsize;
+
+    /*TODO: check if this works according to the statement in the documentation: "The converter can convert
+    from greyscale input color type, to 8-bit greyscale or greyscale with alpha"*/
+    if(!(state->info_raw.colortype == LCT_RGB || state->info_raw.colortype == LCT_RGBA)
+       && !(state->info_raw.bitdepth == 8))
+    {
+      return 56; /*unsupported color mode conversion*/
+    }
+
+    outsize = lodepng_get_raw_size(*w, *h, &state->info_raw);
+    *out = (unsigned char*)lodepng_malloc(outsize);
+    if(!(*out))
+    {
+      state->error = 83; /*alloc fail*/
+    }
+    else state->error = lodepng_convert(*out, data, &state->info_raw,
+                                        &state->info_png.color, *w, *h);
+    lodepng_free(data);
+  }
+  return state->error;
+}
+
+unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in,
+                               size_t insize, LodePNGColorType colortype, unsigned bitdepth)
+{
+  unsigned error;
+  LodePNGState state;
+  lodepng_state_init(&state);
+  state.info_raw.colortype = colortype;
+  state.info_raw.bitdepth = bitdepth;
+  error = lodepng_decode(out, w, h, &state, in, insize);
+  lodepng_state_cleanup(&state);
+  return error;
+}
+
+unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize)
+{
+  return lodepng_decode_memory(out, w, h, in, insize, LCT_RGBA, 8);
+}
+
+unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize)
+{
+  return lodepng_decode_memory(out, w, h, in, insize, LCT_RGB, 8);
+}
+
+#ifdef LODEPNG_COMPILE_DISK
+unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename,
+                             LodePNGColorType colortype, unsigned bitdepth)
+{
+  unsigned char* buffer;
+  size_t buffersize;
+  unsigned error;
+  error = lodepng_load_file(&buffer, &buffersize, filename);
+  if(!error) error = lodepng_decode_memory(out, w, h, buffer, buffersize, colortype, bitdepth);
+  lodepng_free(buffer);
+  return error;
+}
+
+unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename)
+{
+  return lodepng_decode_file(out, w, h, filename, LCT_RGBA, 8);
+}
+
+unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename)
+{
+  return lodepng_decode_file(out, w, h, filename, LCT_RGB, 8);
+}
+#endif /*LODEPNG_COMPILE_DISK*/
+
+void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings)
+{
+  settings->color_convert = 1;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  settings->read_text_chunks = 1;
+  settings->remember_unknown_chunks = 0;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+  settings->ignore_crc = 0;
+  lodepng_decompress_settings_init(&settings->zlibsettings);
+}
+
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER)
+
+void lodepng_state_init(LodePNGState* state)
+{
+#ifdef LODEPNG_COMPILE_DECODER
+  lodepng_decoder_settings_init(&state->decoder);
+#endif /*LODEPNG_COMPILE_DECODER*/
+#ifdef LODEPNG_COMPILE_ENCODER
+  lodepng_encoder_settings_init(&state->encoder);
+#endif /*LODEPNG_COMPILE_ENCODER*/
+  lodepng_color_mode_init(&state->info_raw);
+  lodepng_info_init(&state->info_png);
+  state->error = 1;
+}
+
+void lodepng_state_cleanup(LodePNGState* state)
+{
+  lodepng_color_mode_cleanup(&state->info_raw);
+  lodepng_info_cleanup(&state->info_png);
+}
+
+void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source)
+{
+  lodepng_state_cleanup(dest);
+  *dest = *source;
+  lodepng_color_mode_init(&dest->info_raw);
+  lodepng_info_init(&dest->info_png);
+  dest->error = lodepng_color_mode_copy(&dest->info_raw, &source->info_raw); if(dest->error) return;
+  dest->error = lodepng_info_copy(&dest->info_png, &source->info_png); if(dest->error) return;
+}
+
+#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */
+
+#ifdef LODEPNG_COMPILE_ENCODER
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* / PNG Encoder                                                            / */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+/*chunkName must be string of 4 characters*/
+static unsigned addChunk(ucvector* out, const char* chunkName, const unsigned char* data, size_t length)
+{
+  CERROR_TRY_RETURN(lodepng_chunk_create(&out->data, &out->size, (unsigned)length, chunkName, data));
+  out->allocsize = out->size; /*fix the allocsize again*/
+  return 0;
+}
+
+static void writeSignature(ucvector* out)
+{
+  /*8 bytes PNG signature, aka the magic bytes*/
+  ucvector_push_back(out, 137);
+  ucvector_push_back(out, 80);
+  ucvector_push_back(out, 78);
+  ucvector_push_back(out, 71);
+  ucvector_push_back(out, 13);
+  ucvector_push_back(out, 10);
+  ucvector_push_back(out, 26);
+  ucvector_push_back(out, 10);
+}
+
+static unsigned addChunk_IHDR(ucvector* out, unsigned w, unsigned h,
+                              LodePNGColorType colortype, unsigned bitdepth, unsigned interlace_method)
+{
+  unsigned error = 0;
+  ucvector header;
+  ucvector_init(&header);
+
+  lodepng_add32bitInt(&header, w); /*width*/
+  lodepng_add32bitInt(&header, h); /*height*/
+  ucvector_push_back(&header, (unsigned char)bitdepth); /*bit depth*/
+  ucvector_push_back(&header, (unsigned char)colortype); /*color type*/
+  ucvector_push_back(&header, 0); /*compression method*/
+  ucvector_push_back(&header, 0); /*filter method*/
+  ucvector_push_back(&header, interlace_method); /*interlace method*/
+
+  error = addChunk(out, "IHDR", header.data, header.size);
+  ucvector_cleanup(&header);
+
+  return error;
+}
+
+static unsigned addChunk_PLTE(ucvector* out, const LodePNGColorMode* info)
+{
+  unsigned error = 0;
+  size_t i;
+  ucvector PLTE;
+  ucvector_init(&PLTE);
+  for(i = 0; i != info->palettesize * 4; ++i)
+  {
+    /*add all channels except alpha channel*/
+    if(i % 4 != 3) ucvector_push_back(&PLTE, info->palette[i]);
+  }
+  error = addChunk(out, "PLTE", PLTE.data, PLTE.size);
+  ucvector_cleanup(&PLTE);
+
+  return error;
+}
+
+static unsigned addChunk_tRNS(ucvector* out, const LodePNGColorMode* info)
+{
+  unsigned error = 0;
+  size_t i;
+  ucvector tRNS;
+  ucvector_init(&tRNS);
+  if(info->colortype == LCT_PALETTE)
+  {
+    size_t amount = info->palettesize;
+    /*the tail of palette values that all have 255 as alpha, does not have to be encoded*/
+    for(i = info->palettesize; i != 0; --i)
+    {
+      if(info->palette[4 * (i - 1) + 3] == 255) --amount;
+      else break;
+    }
+    /*add only alpha channel*/
+    for(i = 0; i != amount; ++i) ucvector_push_back(&tRNS, info->palette[4 * i + 3]);
+  }
+  else if(info->colortype == LCT_GREY)
+  {
+    if(info->key_defined)
+    {
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_r / 256));
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_r % 256));
+    }
+  }
+  else if(info->colortype == LCT_RGB)
+  {
+    if(info->key_defined)
+    {
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_r / 256));
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_r % 256));
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_g / 256));
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_g % 256));
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_b / 256));
+      ucvector_push_back(&tRNS, (unsigned char)(info->key_b % 256));
+    }
+  }
+
+  error = addChunk(out, "tRNS", tRNS.data, tRNS.size);
+  ucvector_cleanup(&tRNS);
+
+  return error;
+}
+
+static unsigned addChunk_IDAT(ucvector* out, const unsigned char* data, size_t datasize,
+                              LodePNGCompressSettings* zlibsettings)
+{
+  ucvector zlibdata;
+  unsigned error = 0;
+
+  /*compress with the Zlib compressor*/
+  ucvector_init(&zlibdata);
+  error = zlib_compress(&zlibdata.data, &zlibdata.size, data, datasize, zlibsettings);
+  if(!error) error = addChunk(out, "IDAT", zlibdata.data, zlibdata.size);
+  ucvector_cleanup(&zlibdata);
+
+  return error;
+}
+
+static unsigned addChunk_IEND(ucvector* out)
+{
+  unsigned error = 0;
+  error = addChunk(out, "IEND", 0, 0);
+  return error;
+}
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+
+static unsigned addChunk_tEXt(ucvector* out, const char* keyword, const char* textstring)
+{
+  unsigned error = 0;
+  size_t i;
+  ucvector text;
+  ucvector_init(&text);
+  for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)keyword[i]);
+  if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/
+  ucvector_push_back(&text, 0); /*0 termination char*/
+  for(i = 0; textstring[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)textstring[i]);
+  error = addChunk(out, "tEXt", text.data, text.size);
+  ucvector_cleanup(&text);
+
+  return error;
+}
+
+static unsigned addChunk_zTXt(ucvector* out, const char* keyword, const char* textstring,
+                              LodePNGCompressSettings* zlibsettings)
+{
+  unsigned error = 0;
+  ucvector data, compressed;
+  size_t i, textsize = strlen(textstring);
+
+  ucvector_init(&data);
+  ucvector_init(&compressed);
+  for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]);
+  if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/
+  ucvector_push_back(&data, 0); /*0 termination char*/
+  ucvector_push_back(&data, 0); /*compression method: 0*/
+
+  error = zlib_compress(&compressed.data, &compressed.size,
+                        (unsigned char*)textstring, textsize, zlibsettings);
+  if(!error)
+  {
+    for(i = 0; i != compressed.size; ++i) ucvector_push_back(&data, compressed.data[i]);
+    error = addChunk(out, "zTXt", data.data, data.size);
+  }
+
+  ucvector_cleanup(&compressed);
+  ucvector_cleanup(&data);
+  return error;
+}
+
+static unsigned addChunk_iTXt(ucvector* out, unsigned compressed, const char* keyword, const char* langtag,
+                              const char* transkey, const char* textstring, LodePNGCompressSettings* zlibsettings)
+{
+  unsigned error = 0;
+  ucvector data;
+  size_t i, textsize = strlen(textstring);
+
+  ucvector_init(&data);
+
+  for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]);
+  if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/
+  ucvector_push_back(&data, 0); /*null termination char*/
+  ucvector_push_back(&data, compressed ? 1 : 0); /*compression flag*/
+  ucvector_push_back(&data, 0); /*compression method*/
+  for(i = 0; langtag[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)langtag[i]);
+  ucvector_push_back(&data, 0); /*null termination char*/
+  for(i = 0; transkey[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)transkey[i]);
+  ucvector_push_back(&data, 0); /*null termination char*/
+
+  if(compressed)
+  {
+    ucvector compressed_data;
+    ucvector_init(&compressed_data);
+    error = zlib_compress(&compressed_data.data, &compressed_data.size,
+                          (unsigned char*)textstring, textsize, zlibsettings);
+    if(!error)
+    {
+      for(i = 0; i != compressed_data.size; ++i) ucvector_push_back(&data, compressed_data.data[i]);
+    }
+    ucvector_cleanup(&compressed_data);
+  }
+  else /*not compressed*/
+  {
+    for(i = 0; textstring[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)textstring[i]);
+  }
+
+  if(!error) error = addChunk(out, "iTXt", data.data, data.size);
+  ucvector_cleanup(&data);
+  return error;
+}
+
+static unsigned addChunk_bKGD(ucvector* out, const LodePNGInfo* info)
+{
+  unsigned error = 0;
+  ucvector bKGD;
+  ucvector_init(&bKGD);
+  if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA)
+  {
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_r / 256));
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_r % 256));
+  }
+  else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA)
+  {
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_r / 256));
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_r % 256));
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_g / 256));
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_g % 256));
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_b / 256));
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_b % 256));
+  }
+  else if(info->color.colortype == LCT_PALETTE)
+  {
+    ucvector_push_back(&bKGD, (unsigned char)(info->background_r % 256)); /*palette index*/
+  }
+
+  error = addChunk(out, "bKGD", bKGD.data, bKGD.size);
+  ucvector_cleanup(&bKGD);
+
+  return error;
+}
+
+static unsigned addChunk_tIME(ucvector* out, const LodePNGTime* time)
+{
+  unsigned error = 0;
+  unsigned char* data = (unsigned char*)lodepng_malloc(7);
+  if(!data) return 83; /*alloc fail*/
+  data[0] = (unsigned char)(time->year / 256);
+  data[1] = (unsigned char)(time->year % 256);
+  data[2] = (unsigned char)time->month;
+  data[3] = (unsigned char)time->day;
+  data[4] = (unsigned char)time->hour;
+  data[5] = (unsigned char)time->minute;
+  data[6] = (unsigned char)time->second;
+  error = addChunk(out, "tIME", data, 7);
+  lodepng_free(data);
+  return error;
+}
+
+static unsigned addChunk_pHYs(ucvector* out, const LodePNGInfo* info)
+{
+  unsigned error = 0;
+  ucvector data;
+  ucvector_init(&data);
+
+  lodepng_add32bitInt(&data, info->phys_x);
+  lodepng_add32bitInt(&data, info->phys_y);
+  ucvector_push_back(&data, info->phys_unit);
+
+  error = addChunk(out, "pHYs", data.data, data.size);
+  ucvector_cleanup(&data);
+
+  return error;
+}
+
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+
+static void filterScanline(unsigned char* out, const unsigned char* scanline, const unsigned char* prevline,
+                           size_t length, size_t bytewidth, unsigned char filterType)
+{
+  size_t i;
+  switch(filterType)
+  {
+    case 0: /*None*/
+      for(i = 0; i != length; ++i) out[i] = scanline[i];
+      break;
+    case 1: /*Sub*/
+      for(i = 0; i != bytewidth; ++i) out[i] = scanline[i];
+      for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - scanline[i - bytewidth];
+      break;
+    case 2: /*Up*/
+      if(prevline)
+      {
+        for(i = 0; i != length; ++i) out[i] = scanline[i] - prevline[i];
+      }
+      else
+      {
+        for(i = 0; i != length; ++i) out[i] = scanline[i];
+      }
+      break;
+    case 3: /*Average*/
+      if(prevline)
+      {
+        for(i = 0; i != bytewidth; ++i) out[i] = scanline[i] - prevline[i] / 2;
+        for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - ((scanline[i - bytewidth] + prevline[i]) / 2);
+      }
+      else
+      {
+        for(i = 0; i != bytewidth; ++i) out[i] = scanline[i];
+        for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - scanline[i - bytewidth] / 2;
+      }
+      break;
+    case 4: /*Paeth*/
+      if(prevline)
+      {
+        /*paethPredictor(0, prevline[i], 0) is always prevline[i]*/
+        for(i = 0; i != bytewidth; ++i) out[i] = (scanline[i] - prevline[i]);
+        for(i = bytewidth; i < length; ++i)
+        {
+          out[i] = (scanline[i] - paethPredictor(scanline[i - bytewidth], prevline[i], prevline[i - bytewidth]));
+        }
+      }
+      else
+      {
+        for(i = 0; i != bytewidth; ++i) out[i] = scanline[i];
+        /*paethPredictor(scanline[i - bytewidth], 0, 0) is always scanline[i - bytewidth]*/
+        for(i = bytewidth; i < length; ++i) out[i] = (scanline[i] - scanline[i - bytewidth]);
+      }
+      break;
+    default: return; /*unexisting filter type given*/
+  }
+}
+
+/* log2 approximation. A slight bit faster than std::log. */
+static float flog2(float f)
+{
+  float result = 0;
+  while(f > 32) { result += 4; f /= 16; }
+  while(f > 2) { ++result; f /= 2; }
+  return result + 1.442695f * (f * f * f / 3 - 3 * f * f / 2 + 3 * f - 1.83333f);
+}
+
+static unsigned filter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h,
+                       const LodePNGColorMode* info, const LodePNGEncoderSettings* settings)
+{
+  /*
+  For PNG filter method 0
+  out must be a buffer with as size: h + (w * h * bpp + 7) / 8, because there are
+  the scanlines with 1 extra byte per scanline
+  */
+
+  unsigned bpp = lodepng_get_bpp(info);
+  /*the width of a scanline in bytes, not including the filter type*/
+  size_t linebytes = (w * bpp + 7) / 8;
+  /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/
+  size_t bytewidth = (bpp + 7) / 8;
+  const unsigned char* prevline = 0;
+  unsigned x, y;
+  unsigned error = 0;
+  LodePNGFilterStrategy strategy = settings->filter_strategy;
+
+  /*
+  There is a heuristic called the minimum sum of absolute differences heuristic, suggested by the PNG standard:
+   *  If the image type is Palette, or the bit depth is smaller than 8, then do not filter the image (i.e.
+      use fixed filtering, with the filter None).
+   * (The other case) If the image type is Grayscale or RGB (with or without Alpha), and the bit depth is
+     not smaller than 8, then use adaptive filtering heuristic as follows: independently for each row, apply
+     all five filters and select the filter that produces the smallest sum of absolute values per row.
+  This heuristic is used if filter strategy is LFS_MINSUM and filter_palette_zero is true.
+
+  If filter_palette_zero is true and filter_strategy is not LFS_MINSUM, the above heuristic is followed,
+  but for "the other case", whatever strategy filter_strategy is set to instead of the minimum sum
+  heuristic is used.
+  */
+  if(settings->filter_palette_zero &&
+     (info->colortype == LCT_PALETTE || info->bitdepth < 8)) strategy = LFS_ZERO;
+
+  if(bpp == 0) return 31; /*error: invalid color type*/
+
+  if(strategy == LFS_ZERO)
+  {
+    for(y = 0; y != h; ++y)
+    {
+      size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/
+      size_t inindex = linebytes * y;
+      out[outindex] = 0; /*filter type byte*/
+      filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, 0);
+      prevline = &in[inindex];
+    }
+  }
+  else if(strategy == LFS_MINSUM)
+  {
+    /*adaptive filtering*/
+    size_t sum[5];
+    ucvector attempt[5]; /*five filtering attempts, one for each filter type*/
+    size_t smallest = 0;
+    unsigned char type, bestType = 0;
+
+    for(type = 0; type != 5; ++type)
+    {
+      ucvector_init(&attempt[type]);
+      if(!ucvector_resize(&attempt[type], linebytes)) return 83; /*alloc fail*/
+    }
+
+    if(!error)
+    {
+      for(y = 0; y != h; ++y)
+      {
+        /*try the 5 filter types*/
+        for(type = 0; type != 5; ++type)
+        {
+          filterScanline(attempt[type].data, &in[y * linebytes], prevline, linebytes, bytewidth, type);
+
+          /*calculate the sum of the result*/
+          sum[type] = 0;
+          if(type == 0)
+          {
+            for(x = 0; x != linebytes; ++x) sum[type] += (unsigned char)(attempt[type].data[x]);
+          }
+          else
+          {
+            for(x = 0; x != linebytes; ++x)
+            {
+              /*For differences, each byte should be treated as signed, values above 127 are negative
+              (converted to signed char). Filtertype 0 isn't a difference though, so use unsigned there.
+              This means filtertype 0 is almost never chosen, but that is justified.*/
+              unsigned char s = attempt[type].data[x];
+              sum[type] += s < 128 ? s : (255U - s);
+            }
+          }
+
+          /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/
+          if(type == 0 || sum[type] < smallest)
+          {
+            bestType = type;
+            smallest = sum[type];
+          }
+        }
+
+        prevline = &in[y * linebytes];
+
+        /*now fill the out values*/
+        out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/
+        for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType].data[x];
+      }
+    }
+
+    for(type = 0; type != 5; ++type) ucvector_cleanup(&attempt[type]);
+  }
+  else if(strategy == LFS_ENTROPY)
+  {
+    float sum[5];
+    ucvector attempt[5]; /*five filtering attempts, one for each filter type*/
+    float smallest = 0;
+    unsigned type, bestType = 0;
+    unsigned count[256];
+
+    for(type = 0; type != 5; ++type)
+    {
+      ucvector_init(&attempt[type]);
+      if(!ucvector_resize(&attempt[type], linebytes)) return 83; /*alloc fail*/
+    }
+
+    for(y = 0; y != h; ++y)
+    {
+      /*try the 5 filter types*/
+      for(type = 0; type != 5; ++type)
+      {
+        filterScanline(attempt[type].data, &in[y * linebytes], prevline, linebytes, bytewidth, type);
+        for(x = 0; x != 256; ++x) count[x] = 0;
+        for(x = 0; x != linebytes; ++x) ++count[attempt[type].data[x]];
+        ++count[type]; /*the filter type itself is part of the scanline*/
+        sum[type] = 0;
+        for(x = 0; x != 256; ++x)
+        {
+          float p = count[x] / (float)(linebytes + 1);
+          sum[type] += count[x] == 0 ? 0 : flog2(1 / p) * p;
+        }
+        /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/
+        if(type == 0 || sum[type] < smallest)
+        {
+          bestType = type;
+          smallest = sum[type];
+        }
+      }
+
+      prevline = &in[y * linebytes];
+
+      /*now fill the out values*/
+      out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/
+      for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType].data[x];
+    }
+
+    for(type = 0; type != 5; ++type) ucvector_cleanup(&attempt[type]);
+  }
+  else if(strategy == LFS_PREDEFINED)
+  {
+    for(y = 0; y != h; ++y)
+    {
+      size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/
+      size_t inindex = linebytes * y;
+      unsigned char type = settings->predefined_filters[y];
+      out[outindex] = type; /*filter type byte*/
+      filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, type);
+      prevline = &in[inindex];
+    }
+  }
+  else if(strategy == LFS_BRUTE_FORCE)
+  {
+    /*brute force filter chooser.
+    deflate the scanline after every filter attempt to see which one deflates best.
+    This is very slow and gives only slightly smaller, sometimes even larger, result*/
+    size_t size[5];
+    ucvector attempt[5]; /*five filtering attempts, one for each filter type*/
+    size_t smallest = 0;
+    unsigned type = 0, bestType = 0;
+    unsigned char* dummy;
+    LodePNGCompressSettings zlibsettings = settings->zlibsettings;
+    /*use fixed tree on the attempts so that the tree is not adapted to the filtertype on purpose,
+    to simulate the true case where the tree is the same for the whole image. Sometimes it gives
+    better result with dynamic tree anyway. Using the fixed tree sometimes gives worse, but in rare
+    cases better compression. It does make this a bit less slow, so it's worth doing this.*/
+    zlibsettings.btype = 1;
+    /*a custom encoder likely doesn't read the btype setting and is optimized for complete PNG
+    images only, so disable it*/
+    zlibsettings.custom_zlib = 0;
+    zlibsettings.custom_deflate = 0;
+    for(type = 0; type != 5; ++type)
+    {
+      ucvector_init(&attempt[type]);
+      ucvector_resize(&attempt[type], linebytes); /*todo: give error if resize failed*/
+    }
+    for(y = 0; y != h; ++y) /*try the 5 filter types*/
+    {
+      for(type = 0; type != 5; ++type)
+      {
+        unsigned testsize = attempt[type].size;
+        /*if(testsize > 8) testsize /= 8;*/ /*it already works good enough by testing a part of the row*/
+
+        filterScanline(attempt[type].data, &in[y * linebytes], prevline, linebytes, bytewidth, type);
+        size[type] = 0;
+        dummy = 0;
+        zlib_compress(&dummy, &size[type], attempt[type].data, testsize, &zlibsettings);
+        lodepng_free(dummy);
+        /*check if this is smallest size (or if type == 0 it's the first case so always store the values)*/
+        if(type == 0 || size[type] < smallest)
+        {
+          bestType = type;
+          smallest = size[type];
+        }
+      }
+      prevline = &in[y * linebytes];
+      out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/
+      for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType].data[x];
+    }
+    for(type = 0; type != 5; ++type) ucvector_cleanup(&attempt[type]);
+  }
+  else return 88; /* unknown filter strategy */
+
+  return error;
+}
+
+static void addPaddingBits(unsigned char* out, const unsigned char* in,
+                           size_t olinebits, size_t ilinebits, unsigned h)
+{
+  /*The opposite of the removePaddingBits function
+  olinebits must be >= ilinebits*/
+  unsigned y;
+  size_t diff = olinebits - ilinebits;
+  size_t obp = 0, ibp = 0; /*bit pointers*/
+  for(y = 0; y != h; ++y)
+  {
+    size_t x;
+    for(x = 0; x < ilinebits; ++x)
+    {
+      unsigned char bit = readBitFromReversedStream(&ibp, in);
+      setBitOfReversedStream(&obp, out, bit);
+    }
+    /*obp += diff; --> no, fill in some value in the padding bits too, to avoid
+    "Use of uninitialised value of size ###" warning from valgrind*/
+    for(x = 0; x != diff; ++x) setBitOfReversedStream(&obp, out, 0);
+  }
+}
+
+/*
+in: non-interlaced image with size w*h
+out: the same pixels, but re-ordered according to PNG's Adam7 interlacing, with
+ no padding bits between scanlines, but between reduced images so that each
+ reduced image starts at a byte.
+bpp: bits per pixel
+there are no padding bits, not between scanlines, not between reduced images
+in has the following size in bits: w * h * bpp.
+out is possibly bigger due to padding bits between reduced images
+NOTE: comments about padding bits are only relevant if bpp < 8
+*/
+static void Adam7_interlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp)
+{
+  unsigned passw[7], passh[7];
+  size_t filter_passstart[8], padded_passstart[8], passstart[8];
+  unsigned i;
+
+  Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);
+
+  if(bpp >= 8)
+  {
+    for(i = 0; i != 7; ++i)
+    {
+      unsigned x, y, b;
+      size_t bytewidth = bpp / 8;
+      for(y = 0; y < passh[i]; ++y)
+      for(x = 0; x < passw[i]; ++x)
+      {
+        size_t pixelinstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth;
+        size_t pixeloutstart = passstart[i] + (y * passw[i] + x) * bytewidth;
+        for(b = 0; b < bytewidth; ++b)
+        {
+          out[pixeloutstart + b] = in[pixelinstart + b];
+        }
+      }
+    }
+  }
+  else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/
+  {
+    for(i = 0; i != 7; ++i)
+    {
+      unsigned x, y, b;
+      unsigned ilinebits = bpp * passw[i];
+      unsigned olinebits = bpp * w;
+      size_t obp, ibp; /*bit pointers (for out and in buffer)*/
+      for(y = 0; y < passh[i]; ++y)
+      for(x = 0; x < passw[i]; ++x)
+      {
+        ibp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp;
+        obp = (8 * passstart[i]) + (y * ilinebits + x * bpp);
+        for(b = 0; b < bpp; ++b)
+        {
+          unsigned char bit = readBitFromReversedStream(&ibp, in);
+          setBitOfReversedStream(&obp, out, bit);
+        }
+      }
+    }
+  }
+}
+
+/*out must be buffer big enough to contain uncompressed IDAT chunk data, and in must contain the full image.
+return value is error**/
+static unsigned preProcessScanlines(unsigned char** out, size_t* outsize, const unsigned char* in,
+                                    unsigned w, unsigned h,
+                                    const LodePNGInfo* info_png, const LodePNGEncoderSettings* settings)
+{
+  /*
+  This function converts the pure 2D image with the PNG's colortype, into filtered-padded-interlaced data. Steps:
+  *) if no Adam7: 1) add padding bits (= posible extra bits per scanline if bpp < 8) 2) filter
+  *) if adam7: 1) Adam7_interlace 2) 7x add padding bits 3) 7x filter
+  */
+  unsigned bpp = lodepng_get_bpp(&info_png->color);
+  unsigned error = 0;
+
+  if(info_png->interlace_method == 0)
+  {
+    *outsize = h + (h * ((w * bpp + 7) / 8)); /*image size plus an extra byte per scanline + possible padding bits*/
+    *out = (unsigned char*)lodepng_malloc(*outsize);
+    if(!(*out) && (*outsize)) error = 83; /*alloc fail*/
+
+    if(!error)
+    {
+      /*non multiple of 8 bits per scanline, padding bits needed per scanline*/
+      if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8)
+      {
+        unsigned char* padded = (unsigned char*)lodepng_malloc(h * ((w * bpp + 7) / 8));
+        if(!padded) error = 83; /*alloc fail*/
+        if(!error)
+        {
+          addPaddingBits(padded, in, ((w * bpp + 7) / 8) * 8, w * bpp, h);
+          error = filter(*out, padded, w, h, &info_png->color, settings);
+        }
+        lodepng_free(padded);
+      }
+      else
+      {
+        /*we can immediatly filter into the out buffer, no other steps needed*/
+        error = filter(*out, in, w, h, &info_png->color, settings);
+      }
+    }
+  }
+  else /*interlace_method is 1 (Adam7)*/
+  {
+    unsigned passw[7], passh[7];
+    size_t filter_passstart[8], padded_passstart[8], passstart[8];
+    unsigned char* adam7;
+
+    Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp);
+
+    *outsize = filter_passstart[7]; /*image size plus an extra byte per scanline + possible padding bits*/
+    *out = (unsigned char*)lodepng_malloc(*outsize);
+    if(!(*out)) error = 83; /*alloc fail*/
+
+    adam7 = (unsigned char*)lodepng_malloc(passstart[7]);
+    if(!adam7 && passstart[7]) error = 83; /*alloc fail*/
+
+    if(!error)
+    {
+      unsigned i;
+
+      Adam7_interlace(adam7, in, w, h, bpp);
+      for(i = 0; i != 7; ++i)
+      {
+        if(bpp < 8)
+        {
+          unsigned char* padded = (unsigned char*)lodepng_malloc(padded_passstart[i + 1] - padded_passstart[i]);
+          if(!padded) ERROR_BREAK(83); /*alloc fail*/
+          addPaddingBits(padded, &adam7[passstart[i]],
+                         ((passw[i] * bpp + 7) / 8) * 8, passw[i] * bpp, passh[i]);
+          error = filter(&(*out)[filter_passstart[i]], padded,
+                         passw[i], passh[i], &info_png->color, settings);
+          lodepng_free(padded);
+        }
+        else
+        {
+          error = filter(&(*out)[filter_passstart[i]], &adam7[padded_passstart[i]],
+                         passw[i], passh[i], &info_png->color, settings);
+        }
+
+        if(error) break;
+      }
+    }
+
+    lodepng_free(adam7);
+  }
+
+  return error;
+}
+
+/*
+palette must have 4 * palettesize bytes allocated, and given in format RGBARGBARGBARGBA...
+returns 0 if the palette is opaque,
+returns 1 if the palette has a single color with alpha 0 ==> color key
+returns 2 if the palette is semi-translucent.
+*/
+static unsigned getPaletteTranslucency(const unsigned char* palette, size_t palettesize)
+{
+  size_t i;
+  unsigned key = 0;
+  unsigned r = 0, g = 0, b = 0; /*the value of the color with alpha 0, so long as color keying is possible*/
+  for(i = 0; i != palettesize; ++i)
+  {
+    if(!key && palette[4 * i + 3] == 0)
+    {
+      r = palette[4 * i + 0]; g = palette[4 * i + 1]; b = palette[4 * i + 2];
+      key = 1;
+      i = (size_t)(-1); /*restart from beginning, to detect earlier opaque colors with key's value*/
+    }
+    else if(palette[4 * i + 3] != 255) return 2;
+    /*when key, no opaque RGB may have key's RGB*/
+    else if(key && r == palette[i * 4 + 0] && g == palette[i * 4 + 1] && b == palette[i * 4 + 2]) return 2;
+  }
+  return key;
+}
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+static unsigned addUnknownChunks(ucvector* out, unsigned char* data, size_t datasize)
+{
+  unsigned char* inchunk = data;
+  while((size_t)(inchunk - data) < datasize)
+  {
+    CERROR_TRY_RETURN(lodepng_chunk_append(&out->data, &out->size, inchunk));
+    out->allocsize = out->size; /*fix the allocsize again*/
+    inchunk = lodepng_chunk_next(inchunk);
+  }
+  return 0;
+}
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+
+unsigned lodepng_encode(unsigned char** out, size_t* outsize,
+                        const unsigned char* image, unsigned w, unsigned h,
+                        LodePNGState* state)
+{
+  LodePNGInfo info;
+  ucvector outv;
+  unsigned char* data = 0; /*uncompressed version of the IDAT chunk data*/
+  size_t datasize = 0;
+
+  /*provide some proper output values if error will happen*/
+  *out = 0;
+  *outsize = 0;
+  state->error = 0;
+
+  lodepng_info_init(&info);
+  lodepng_info_copy(&info, &state->info_png);
+
+  if((info.color.colortype == LCT_PALETTE || state->encoder.force_palette)
+      && (info.color.palettesize == 0 || info.color.palettesize > 256))
+  {
+    state->error = 68; /*invalid palette size, it is only allowed to be 1-256*/
+    return state->error;
+  }
+
+  if(state->encoder.auto_convert)
+  {
+    state->error = lodepng_auto_choose_color(&info.color, image, w, h, &state->info_raw);
+  }
+  if(state->error) return state->error;
+
+  if(state->encoder.zlibsettings.btype > 2)
+  {
+    CERROR_RETURN_ERROR(state->error, 61); /*error: unexisting btype*/
+  }
+  if(state->info_png.interlace_method > 1)
+  {
+    CERROR_RETURN_ERROR(state->error, 71); /*error: unexisting interlace mode*/
+  }
+
+  state->error = checkColorValidity(info.color.colortype, info.color.bitdepth);
+  if(state->error) return state->error; /*error: unexisting color type given*/
+  state->error = checkColorValidity(state->info_raw.colortype, state->info_raw.bitdepth);
+  if(state->error) return state->error; /*error: unexisting color type given*/
+
+  if(!lodepng_color_mode_equal(&state->info_raw, &info.color))
+  {
+    unsigned char* converted;
+    size_t size = (w * h * lodepng_get_bpp(&info.color) + 7) / 8;
+
+    converted = (unsigned char*)lodepng_malloc(size);
+    if(!converted && size) state->error = 83; /*alloc fail*/
+    if(!state->error)
+    {
+      state->error = lodepng_convert(converted, image, &info.color, &state->info_raw, w, h);
+    }
+    if(!state->error) preProcessScanlines(&data, &datasize, converted, w, h, &info, &state->encoder);
+    lodepng_free(converted);
+  }
+  else preProcessScanlines(&data, &datasize, image, w, h, &info, &state->encoder);
+
+  ucvector_init(&outv);
+  while(!state->error) /*while only executed once, to break on error*/
+  {
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+    size_t i;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    /*write signature and chunks*/
+    writeSignature(&outv);
+    /*IHDR*/
+    addChunk_IHDR(&outv, w, h, info.color.colortype, info.color.bitdepth, info.interlace_method);
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+    /*unknown chunks between IHDR and PLTE*/
+    if(info.unknown_chunks_data[0])
+    {
+      state->error = addUnknownChunks(&outv, info.unknown_chunks_data[0], info.unknown_chunks_size[0]);
+      if(state->error) break;
+    }
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    /*PLTE*/
+    if(info.color.colortype == LCT_PALETTE)
+    {
+      addChunk_PLTE(&outv, &info.color);
+    }
+    if(state->encoder.force_palette && (info.color.colortype == LCT_RGB || info.color.colortype == LCT_RGBA))
+    {
+      addChunk_PLTE(&outv, &info.color);
+    }
+    /*tRNS*/
+    if(info.color.colortype == LCT_PALETTE && getPaletteTranslucency(info.color.palette, info.color.palettesize) != 0)
+    {
+      addChunk_tRNS(&outv, &info.color);
+    }
+    if((info.color.colortype == LCT_GREY || info.color.colortype == LCT_RGB) && info.color.key_defined)
+    {
+      addChunk_tRNS(&outv, &info.color);
+    }
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+    /*bKGD (must come between PLTE and the IDAt chunks*/
+    if(info.background_defined) addChunk_bKGD(&outv, &info);
+    /*pHYs (must come before the IDAT chunks)*/
+    if(info.phys_defined) addChunk_pHYs(&outv, &info);
+
+    /*unknown chunks between PLTE and IDAT*/
+    if(info.unknown_chunks_data[1])
+    {
+      state->error = addUnknownChunks(&outv, info.unknown_chunks_data[1], info.unknown_chunks_size[1]);
+      if(state->error) break;
+    }
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    /*IDAT (multiple IDAT chunks must be consecutive)*/
+    state->error = addChunk_IDAT(&outv, data, datasize, &state->encoder.zlibsettings);
+    if(state->error) break;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+    /*tIME*/
+    if(info.time_defined) addChunk_tIME(&outv, &info.time);
+    /*tEXt and/or zTXt*/
+    for(i = 0; i != info.text_num; ++i)
+    {
+      if(strlen(info.text_keys[i]) > 79)
+      {
+        state->error = 66; /*text chunk too large*/
+        break;
+      }
+      if(strlen(info.text_keys[i]) < 1)
+      {
+        state->error = 67; /*text chunk too small*/
+        break;
+      }
+      if(state->encoder.text_compression)
+      {
+        addChunk_zTXt(&outv, info.text_keys[i], info.text_strings[i], &state->encoder.zlibsettings);
+      }
+      else
+      {
+        addChunk_tEXt(&outv, info.text_keys[i], info.text_strings[i]);
+      }
+    }
+    /*LodePNG version id in text chunk*/
+    if(state->encoder.add_id)
+    {
+      unsigned alread_added_id_text = 0;
+      for(i = 0; i != info.text_num; ++i)
+      {
+        if(!strcmp(info.text_keys[i], "LodePNG"))
+        {
+          alread_added_id_text = 1;
+          break;
+        }
+      }
+      if(alread_added_id_text == 0)
+      {
+        addChunk_tEXt(&outv, "LodePNG", LODEPNG_VERSION_STRING); /*it's shorter as tEXt than as zTXt chunk*/
+      }
+    }
+    /*iTXt*/
+    for(i = 0; i != info.itext_num; ++i)
+    {
+      if(strlen(info.itext_keys[i]) > 79)
+      {
+        state->error = 66; /*text chunk too large*/
+        break;
+      }
+      if(strlen(info.itext_keys[i]) < 1)
+      {
+        state->error = 67; /*text chunk too small*/
+        break;
+      }
+      addChunk_iTXt(&outv, state->encoder.text_compression,
+                    info.itext_keys[i], info.itext_langtags[i], info.itext_transkeys[i], info.itext_strings[i],
+                    &state->encoder.zlibsettings);
+    }
+
+    /*unknown chunks between IDAT and IEND*/
+    if(info.unknown_chunks_data[2])
+    {
+      state->error = addUnknownChunks(&outv, info.unknown_chunks_data[2], info.unknown_chunks_size[2]);
+      if(state->error) break;
+    }
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+    addChunk_IEND(&outv);
+
+    break; /*this isn't really a while loop; no error happened so break out now!*/
+  }
+
+  lodepng_info_cleanup(&info);
+  lodepng_free(data);
+  /*instead of cleaning the vector up, give it to the output*/
+  *out = outv.data;
+  *outsize = outv.size;
+
+  return state->error;
+}
+
+unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, const unsigned char* image,
+                               unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth)
+{
+  unsigned error;
+  LodePNGState state;
+  lodepng_state_init(&state);
+  state.info_raw.colortype = colortype;
+  state.info_raw.bitdepth = bitdepth;
+  state.info_png.color.colortype = colortype;
+  state.info_png.color.bitdepth = bitdepth;
+  lodepng_encode(out, outsize, image, w, h, &state);
+  error = state.error;
+  lodepng_state_cleanup(&state);
+  return error;
+}
+
+unsigned lodepng_encode32(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h)
+{
+  return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGBA, 8);
+}
+
+unsigned lodepng_encode24(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h)
+{
+  return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGB, 8);
+}
+
+#ifdef LODEPNG_COMPILE_DISK
+unsigned lodepng_encode_file(const char* filename, const unsigned char* image, unsigned w, unsigned h,
+                             LodePNGColorType colortype, unsigned bitdepth)
+{
+  unsigned char* buffer;
+  size_t buffersize;
+  unsigned error = lodepng_encode_memory(&buffer, &buffersize, image, w, h, colortype, bitdepth);
+  if(!error) error = lodepng_save_file(buffer, buffersize, filename);
+  lodepng_free(buffer);
+  return error;
+}
+
+unsigned lodepng_encode32_file(const char* filename, const unsigned char* image, unsigned w, unsigned h)
+{
+  return lodepng_encode_file(filename, image, w, h, LCT_RGBA, 8);
+}
+
+unsigned lodepng_encode24_file(const char* filename, const unsigned char* image, unsigned w, unsigned h)
+{
+  return lodepng_encode_file(filename, image, w, h, LCT_RGB, 8);
+}
+#endif /*LODEPNG_COMPILE_DISK*/
+
+void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings)
+{
+  lodepng_compress_settings_init(&settings->zlibsettings);
+  settings->filter_palette_zero = 1;
+  settings->filter_strategy = LFS_MINSUM;
+  settings->auto_convert = 1;
+  settings->force_palette = 0;
+  settings->predefined_filters = 0;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  settings->add_id = 0;
+  settings->text_compression = 1;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+}
+
+#endif /*LODEPNG_COMPILE_ENCODER*/
+#endif /*LODEPNG_COMPILE_PNG*/
+
+#ifdef LODEPNG_COMPILE_ERROR_TEXT
+/*
+This returns the description of a numerical error code in English. This is also
+the documentation of all the error codes.
+*/
+const char* lodepng_error_text(unsigned code)
+{
+  switch(code)
+  {
+    case 0: return "no error, everything went ok";
+    case 1: return "nothing done yet"; /*the Encoder/Decoder has done nothing yet, error checking makes no sense yet*/
+    case 10: return "end of input memory reached without huffman end code"; /*while huffman decoding*/
+    case 11: return "error in code tree made it jump outside of huffman tree"; /*while huffman decoding*/
+    case 13: return "problem while processing dynamic deflate block";
+    case 14: return "problem while processing dynamic deflate block";
+    case 15: return "problem while processing dynamic deflate block";
+    case 16: return "unexisting code while processing dynamic deflate block";
+    case 17: return "end of out buffer memory reached while inflating";
+    case 18: return "invalid distance code while inflating";
+    case 19: return "end of out buffer memory reached while inflating";
+    case 20: return "invalid deflate block BTYPE encountered while decoding";
+    case 21: return "NLEN is not ones complement of LEN in a deflate block";
+     /*end of out buffer memory reached while inflating:
+     This can happen if the inflated deflate data is longer than the amount of bytes required to fill up
+     all the pixels of the image, given the color depth and image dimensions. Something that doesn't
+     happen in a normal, well encoded, PNG image.*/
+    case 22: return "end of out buffer memory reached while inflating";
+    case 23: return "end of in buffer memory reached while inflating";
+    case 24: return "invalid FCHECK in zlib header";
+    case 25: return "invalid compression method in zlib header";
+    case 26: return "FDICT encountered in zlib header while it's not used for PNG";
+    case 27: return "PNG file is smaller than a PNG header";
+    /*Checks the magic file header, the first 8 bytes of the PNG file*/
+    case 28: return "incorrect PNG signature, it's no PNG or corrupted";
+    case 29: return "first chunk is not the header chunk";
+    case 30: return "chunk length too large, chunk broken off at end of file";
+    case 31: return "illegal PNG color type or bpp";
+    case 32: return "illegal PNG compression method";
+    case 33: return "illegal PNG filter method";
+    case 34: return "illegal PNG interlace method";
+    case 35: return "chunk length of a chunk is too large or the chunk too small";
+    case 36: return "illegal PNG filter type encountered";
+    case 37: return "illegal bit depth for this color type given";
+    case 38: return "the palette is too big"; /*more than 256 colors*/
+    case 39: return "more palette alpha values given in tRNS chunk than there are colors in the palette";
+    case 40: return "tRNS chunk has wrong size for greyscale image";
+    case 41: return "tRNS chunk has wrong size for RGB image";
+    case 42: return "tRNS chunk appeared while it was not allowed for this color type";
+    case 43: return "bKGD chunk has wrong size for palette image";
+    case 44: return "bKGD chunk has wrong size for greyscale image";
+    case 45: return "bKGD chunk has wrong size for RGB image";
+    /*the input data is empty, maybe a PNG file doesn't exist or is in the wrong path*/
+    case 48: return "empty input or file doesn't exist";
+    case 49: return "jumped past memory while generating dynamic huffman tree";
+    case 50: return "jumped past memory while generating dynamic huffman tree";
+    case 51: return "jumped past memory while inflating huffman block";
+    case 52: return "jumped past memory while inflating";
+    case 53: return "size of zlib data too small";
+    case 54: return "repeat symbol in tree while there was no value symbol yet";
+    /*jumped past tree while generating huffman tree, this could be when the
+    tree will have more leaves than symbols after generating it out of the
+    given lenghts. They call this an oversubscribed dynamic bit lengths tree in zlib.*/
+    case 55: return "jumped past tree while generating huffman tree";
+    case 56: return "given output image colortype or bitdepth not supported for color conversion";
+    case 57: return "invalid CRC encountered (checking CRC can be disabled)";
+    case 58: return "invalid ADLER32 encountered (checking ADLER32 can be disabled)";
+    case 59: return "requested color conversion not supported";
+    case 60: return "invalid window size given in the settings of the encoder (must be 0-32768)";
+    case 61: return "invalid BTYPE given in the settings of the encoder (only 0, 1 and 2 are allowed)";
+    /*LodePNG leaves the choice of RGB to greyscale conversion formula to the user.*/
+    case 62: return "conversion from color to greyscale not supported";
+    case 63: return "length of a chunk too long, max allowed for PNG is 2147483647 bytes per chunk"; /*(2^31-1)*/
+    /*this would result in the inability of a deflated block to ever contain an end code. It must be at least 1.*/
+    case 64: return "the length of the END symbol 256 in the Huffman tree is 0";
+    case 66: return "the length of a text chunk keyword given to the encoder is longer than the maximum of 79 bytes";
+    case 67: return "the length of a text chunk keyword given to the encoder is smaller than the minimum of 1 byte";
+    case 68: return "tried to encode a PLTE chunk with a palette that has less than 1 or more than 256 colors";
+    case 69: return "unknown chunk type with 'critical' flag encountered by the decoder";
+    case 71: return "unexisting interlace mode given to encoder (must be 0 or 1)";
+    case 72: return "while decoding, unexisting compression method encountering in zTXt or iTXt chunk (it must be 0)";
+    case 73: return "invalid tIME chunk size";
+    case 74: return "invalid pHYs chunk size";
+    /*length could be wrong, or data chopped off*/
+    case 75: return "no null termination char found while decoding text chunk";
+    case 76: return "iTXt chunk too short to contain required bytes";
+    case 77: return "integer overflow in buffer size";
+    case 78: return "failed to open file for reading"; /*file doesn't exist or couldn't be opened for reading*/
+    case 79: return "failed to open file for writing";
+    case 80: return "tried creating a tree of 0 symbols";
+    case 81: return "lazy matching at pos 0 is impossible";
+    case 82: return "color conversion to palette requested while a color isn't in palette";
+    case 83: return "memory allocation failed";
+    case 84: return "given image too small to contain all pixels to be encoded";
+    case 86: return "impossible offset in lz77 encoding (internal bug)";
+    case 87: return "must provide custom zlib function pointer if LODEPNG_COMPILE_ZLIB is not defined";
+    case 88: return "invalid filter strategy given for LodePNGEncoderSettings.filter_strategy";
+    case 89: return "text chunk keyword too short or long: must have size 1-79";
+    /*the windowsize in the LodePNGCompressSettings. Requiring POT(==> & instead of %) makes encoding 12% faster.*/
+    case 90: return "windowsize must be a power of two";
+    case 91: return "invalid decompressed idat size";
+    case 92: return "too many pixels, not supported";
+    case 93: return "zero width or height is invalid";
+  }
+  return "unknown error code";
+}
+#endif /*LODEPNG_COMPILE_ERROR_TEXT*/
+
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* // C++ Wrapper                                                          // */
+/* ////////////////////////////////////////////////////////////////////////// */
+/* ////////////////////////////////////////////////////////////////////////// */
+
+#ifdef LODEPNG_COMPILE_CPP
+namespace lodepng
+{
+
+#ifdef LODEPNG_COMPILE_DISK
+void load_file(std::vector<unsigned char>& buffer, const std::string& filename)
+{
+  std::ifstream file(filename.c_str(), std::ios::in|std::ios::binary|std::ios::ate);
+
+  /*get filesize*/
+  std::streamsize size = 0;
+  if(file.seekg(0, std::ios::end).good()) size = file.tellg();
+  if(file.seekg(0, std::ios::beg).good()) size -= file.tellg();
+
+  /*read contents of the file into the vector*/
+  buffer.resize(size_t(size));
+  if(size > 0) file.read((char*)(&buffer[0]), size);
+}
+
+/*write given buffer to the file, overwriting the file, it doesn't append to it.*/
+void save_file(const std::vector<unsigned char>& buffer, const std::string& filename)
+{
+  std::ofstream file(filename.c_str(), std::ios::out|std::ios::binary);
+  file.write(buffer.empty() ? 0 : (char*)&buffer[0], std::streamsize(buffer.size()));
+}
+#endif //LODEPNG_COMPILE_DISK
+
+#ifdef LODEPNG_COMPILE_ZLIB
+#ifdef LODEPNG_COMPILE_DECODER
+unsigned decompress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
+                    const LodePNGDecompressSettings& settings)
+{
+  unsigned char* buffer = 0;
+  size_t buffersize = 0;
+  unsigned error = zlib_decompress(&buffer, &buffersize, in, insize, &settings);
+  if(buffer)
+  {
+    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
+    lodepng_free(buffer);
+  }
+  return error;
+}
+
+unsigned decompress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
+                    const LodePNGDecompressSettings& settings)
+{
+  return decompress(out, in.empty() ? 0 : &in[0], in.size(), settings);
+}
+#endif //LODEPNG_COMPILE_DECODER
+
+#ifdef LODEPNG_COMPILE_ENCODER
+unsigned compress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
+                  const LodePNGCompressSettings& settings)
+{
+  unsigned char* buffer = 0;
+  size_t buffersize = 0;
+  unsigned error = zlib_compress(&buffer, &buffersize, in, insize, &settings);
+  if(buffer)
+  {
+    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
+    lodepng_free(buffer);
+  }
+  return error;
+}
+
+unsigned compress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
+                  const LodePNGCompressSettings& settings)
+{
+  return compress(out, in.empty() ? 0 : &in[0], in.size(), settings);
+}
+#endif //LODEPNG_COMPILE_ENCODER
+#endif //LODEPNG_COMPILE_ZLIB
+
+
+#ifdef LODEPNG_COMPILE_PNG
+
+State::State()
+{
+  lodepng_state_init(this);
+}
+
+State::State(const State& other)
+{
+  lodepng_state_init(this);
+  lodepng_state_copy(this, &other);
+}
+
+State::~State()
+{
+  lodepng_state_cleanup(this);
+}
+
+State& State::operator=(const State& other)
+{
+  lodepng_state_copy(this, &other);
+  return *this;
+}
+
+#ifdef LODEPNG_COMPILE_DECODER
+
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, const unsigned char* in,
+                size_t insize, LodePNGColorType colortype, unsigned bitdepth)
+{
+  unsigned char* buffer;
+  unsigned error = lodepng_decode_memory(&buffer, &w, &h, in, insize, colortype, bitdepth);
+  if(buffer && !error)
+  {
+    State state;
+    state.info_raw.colortype = colortype;
+    state.info_raw.bitdepth = bitdepth;
+    size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw);
+    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
+    lodepng_free(buffer);
+  }
+  return error;
+}
+
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                const std::vector<unsigned char>& in, LodePNGColorType colortype, unsigned bitdepth)
+{
+  return decode(out, w, h, in.empty() ? 0 : &in[0], (unsigned)in.size(), colortype, bitdepth);
+}
+
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                State& state,
+                const unsigned char* in, size_t insize)
+{
+  unsigned char* buffer = NULL;
+  unsigned error = lodepng_decode(&buffer, &w, &h, &state, in, insize);
+  if(buffer && !error)
+  {
+    size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw);
+    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
+  }
+  lodepng_free(buffer);
+  return error;
+}
+
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                State& state,
+                const std::vector<unsigned char>& in)
+{
+  return decode(out, w, h, state, in.empty() ? 0 : &in[0], in.size());
+}
+
+#ifdef LODEPNG_COMPILE_DISK
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, const std::string& filename,
+                LodePNGColorType colortype, unsigned bitdepth)
+{
+  std::vector<unsigned char> buffer;
+  load_file(buffer, filename);
+  return decode(out, w, h, buffer, colortype, bitdepth);
+}
+#endif //LODEPNG_COMPILE_DECODER
+#endif //LODEPNG_COMPILE_DISK
+
+#ifdef LODEPNG_COMPILE_ENCODER
+unsigned encode(std::vector<unsigned char>& out, const unsigned char* in, unsigned w, unsigned h,
+                LodePNGColorType colortype, unsigned bitdepth)
+{
+  unsigned char* buffer;
+  size_t buffersize;
+  unsigned error = lodepng_encode_memory(&buffer, &buffersize, in, w, h, colortype, bitdepth);
+  if(buffer)
+  {
+    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
+    lodepng_free(buffer);
+  }
+  return error;
+}
+
+unsigned encode(std::vector<unsigned char>& out,
+                const std::vector<unsigned char>& in, unsigned w, unsigned h,
+                LodePNGColorType colortype, unsigned bitdepth)
+{
+  if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84;
+  return encode(out, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth);
+}
+
+unsigned encode(std::vector<unsigned char>& out,
+                const unsigned char* in, unsigned w, unsigned h,
+                State& state)
+{
+  unsigned char* buffer;
+  size_t buffersize;
+  unsigned error = lodepng_encode(&buffer, &buffersize, in, w, h, &state);
+  if(buffer)
+  {
+    out.insert(out.end(), &buffer[0], &buffer[buffersize]);
+    lodepng_free(buffer);
+  }
+  return error;
+}
+
+unsigned encode(std::vector<unsigned char>& out,
+                const std::vector<unsigned char>& in, unsigned w, unsigned h,
+                State& state)
+{
+  if(lodepng_get_raw_size(w, h, &state.info_raw) > in.size()) return 84;
+  return encode(out, in.empty() ? 0 : &in[0], w, h, state);
+}
+
+#ifdef LODEPNG_COMPILE_DISK
+unsigned encode(const std::string& filename,
+                const unsigned char* in, unsigned w, unsigned h,
+                LodePNGColorType colortype, unsigned bitdepth)
+{
+  std::vector<unsigned char> buffer;
+  unsigned error = encode(buffer, in, w, h, colortype, bitdepth);
+  if(!error) save_file(buffer, filename);
+  return error;
+}
+
+unsigned encode(const std::string& filename,
+                const std::vector<unsigned char>& in, unsigned w, unsigned h,
+                LodePNGColorType colortype, unsigned bitdepth)
+{
+  if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84;
+  return encode(filename, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth);
+}
+#endif //LODEPNG_COMPILE_DISK
+#endif //LODEPNG_COMPILE_ENCODER
+#endif //LODEPNG_COMPILE_PNG
+} //namespace lodepng
+#endif /*LODEPNG_COMPILE_CPP*/

+ 1708 - 0
src/libraries/lodepng/lodepng.h

@@ -0,0 +1,1708 @@
+/*
+LodePNG version 20141130
+
+Copyright (c) 2005-2014 Lode Vandevenne
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+    1. The origin of this software must not be misrepresented; you must not
+    claim that you wrote the original software. If you use this software
+    in a product, an acknowledgment in the product documentation would be
+    appreciated but is not required.
+
+    2. Altered source versions must be plainly marked as such, and must not be
+    misrepresented as being the original software.
+
+    3. This notice may not be removed or altered from any source
+    distribution.
+*/
+
+#ifndef LODEPNG_H
+#define LODEPNG_H
+
+#include <string.h> /*for size_t*/
+
+#ifdef __cplusplus
+#include <vector>
+#include <string>
+#endif /*__cplusplus*/
+
+#define LODEPNG_VERSION_STRING "20141130"
+
+/*
+The following #defines are used to create code sections. They can be disabled
+to disable code sections, which can give faster compile time and smaller binary.
+The "NO_COMPILE" defines are designed to be used to pass as defines to the
+compiler command to disable them without modifying this header, e.g.
+-DLODEPNG_NO_COMPILE_ZLIB for gcc.
+*/
+/*deflate & zlib. If disabled, you must specify alternative zlib functions in
+the custom_zlib field of the compress and decompress settings*/
+#ifndef LODEPNG_NO_COMPILE_ZLIB
+#define LODEPNG_COMPILE_ZLIB
+#endif
+/*png encoder and png decoder*/
+#ifndef LODEPNG_NO_COMPILE_PNG
+#define LODEPNG_COMPILE_PNG
+#endif
+/*deflate&zlib decoder and png decoder*/
+#ifndef LODEPNG_NO_COMPILE_DECODER
+#define LODEPNG_COMPILE_DECODER
+#endif
+/*deflate&zlib encoder and png encoder*/
+#ifndef LODEPNG_NO_COMPILE_ENCODER
+#define LODEPNG_COMPILE_ENCODER
+#endif
+/*the optional built in harddisk file loading and saving functions*/
+#ifndef LODEPNG_NO_COMPILE_DISK
+//#define LODEPNG_COMPILE_DISK
+#endif
+/*support for chunks other than IHDR, IDAT, PLTE, tRNS, IEND: ancillary and unknown chunks*/
+#ifndef LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS
+#define LODEPNG_COMPILE_ANCILLARY_CHUNKS
+#endif
+/*ability to convert error numerical codes to English text string*/
+#ifndef LODEPNG_NO_COMPILE_ERROR_TEXT
+#define LODEPNG_COMPILE_ERROR_TEXT
+#endif
+/*Compile the default allocators (C's free, malloc and realloc). If you disable this,
+you can define the functions lodepng_free, lodepng_malloc and lodepng_realloc in your
+source files with custom allocators.*/
+#ifndef LODEPNG_NO_COMPILE_ALLOCATORS
+#define LODEPNG_COMPILE_ALLOCATORS
+#endif
+/*compile the C++ version (you can disable the C++ wrapper here even when compiling for C++)*/
+#ifdef __cplusplus
+#ifndef LODEPNG_NO_COMPILE_CPP
+#define LODEPNG_COMPILE_CPP
+#endif
+#endif
+
+#ifdef LODEPNG_COMPILE_PNG
+/*The PNG color types (also used for raw).*/
+typedef enum LodePNGColorType
+{
+  LCT_GREY = 0, /*greyscale: 1,2,4,8,16 bit*/
+  LCT_RGB = 2, /*RGB: 8,16 bit*/
+  LCT_PALETTE = 3, /*palette: 1,2,4,8 bit*/
+  LCT_GREY_ALPHA = 4, /*greyscale with alpha: 8,16 bit*/
+  LCT_RGBA = 6 /*RGB with alpha: 8,16 bit*/
+} LodePNGColorType;
+
+#ifdef LODEPNG_COMPILE_DECODER
+/*
+Converts PNG data in memory to raw pixel data.
+out: Output parameter. Pointer to buffer that will contain the raw pixel data.
+     After decoding, its size is w * h * (bytes per pixel) bytes larger than
+     initially. Bytes per pixel depends on colortype and bitdepth.
+     Must be freed after usage with free(*out).
+     Note: for 16-bit per channel colors, uses big endian format like PNG does.
+w: Output parameter. Pointer to width of pixel data.
+h: Output parameter. Pointer to height of pixel data.
+in: Memory buffer with the PNG file.
+insize: size of the in buffer.
+colortype: the desired color type for the raw output image. See explanation on PNG color types.
+bitdepth: the desired bit depth for the raw output image. See explanation on PNG color types.
+Return value: LodePNG error code (0 means no error).
+*/
+unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h,
+                               const unsigned char* in, size_t insize,
+                               LodePNGColorType colortype, unsigned bitdepth);
+
+/*Same as lodepng_decode_memory, but always decodes to 32-bit RGBA raw image*/
+unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h,
+                          const unsigned char* in, size_t insize);
+
+/*Same as lodepng_decode_memory, but always decodes to 24-bit RGB raw image*/
+unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h,
+                          const unsigned char* in, size_t insize);
+
+#ifdef LODEPNG_COMPILE_DISK
+/*
+Load PNG from disk, from file with given name.
+Same as the other decode functions, but instead takes a filename as input.
+*/
+unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h,
+                             const char* filename,
+                             LodePNGColorType colortype, unsigned bitdepth);
+
+/*Same as lodepng_decode_file, but always decodes to 32-bit RGBA raw image.*/
+unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h,
+                               const char* filename);
+
+/*Same as lodepng_decode_file, but always decodes to 24-bit RGB raw image.*/
+unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h,
+                               const char* filename);
+#endif /*LODEPNG_COMPILE_DISK*/
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/*
+Converts raw pixel data into a PNG image in memory. The colortype and bitdepth
+  of the output PNG image cannot be chosen, they are automatically determined
+  by the colortype, bitdepth and content of the input pixel data.
+  Note: for 16-bit per channel colors, needs big endian format like PNG does.
+out: Output parameter. Pointer to buffer that will contain the PNG image data.
+     Must be freed after usage with free(*out).
+outsize: Output parameter. Pointer to the size in bytes of the out buffer.
+image: The raw pixel data to encode. The size of this buffer should be
+       w * h * (bytes per pixel), bytes per pixel depends on colortype and bitdepth.
+w: width of the raw pixel data in pixels.
+h: height of the raw pixel data in pixels.
+colortype: the color type of the raw input image. See explanation on PNG color types.
+bitdepth: the bit depth of the raw input image. See explanation on PNG color types.
+Return value: LodePNG error code (0 means no error).
+*/
+unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize,
+                               const unsigned char* image, unsigned w, unsigned h,
+                               LodePNGColorType colortype, unsigned bitdepth);
+
+/*Same as lodepng_encode_memory, but always encodes from 32-bit RGBA raw image.*/
+unsigned lodepng_encode32(unsigned char** out, size_t* outsize,
+                          const unsigned char* image, unsigned w, unsigned h);
+
+/*Same as lodepng_encode_memory, but always encodes from 24-bit RGB raw image.*/
+unsigned lodepng_encode24(unsigned char** out, size_t* outsize,
+                          const unsigned char* image, unsigned w, unsigned h);
+
+#ifdef LODEPNG_COMPILE_DISK
+/*
+Converts raw pixel data into a PNG file on disk.
+Same as the other encode functions, but instead takes a filename as output.
+NOTE: This overwrites existing files without warning!
+*/
+unsigned lodepng_encode_file(const char* filename,
+                             const unsigned char* image, unsigned w, unsigned h,
+                             LodePNGColorType colortype, unsigned bitdepth);
+
+/*Same as lodepng_encode_file, but always encodes from 32-bit RGBA raw image.*/
+unsigned lodepng_encode32_file(const char* filename,
+                               const unsigned char* image, unsigned w, unsigned h);
+
+/*Same as lodepng_encode_file, but always encodes from 24-bit RGB raw image.*/
+unsigned lodepng_encode24_file(const char* filename,
+                               const unsigned char* image, unsigned w, unsigned h);
+#endif /*LODEPNG_COMPILE_DISK*/
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+
+#ifdef LODEPNG_COMPILE_CPP
+namespace lodepng
+{
+#ifdef LODEPNG_COMPILE_DECODER
+/*Same as lodepng_decode_memory, but decodes to an std::vector. The colortype
+is the format to output the pixels to. Default is RGBA 8-bit per channel.*/
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                const unsigned char* in, size_t insize,
+                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                const std::vector<unsigned char>& in,
+                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
+#ifdef LODEPNG_COMPILE_DISK
+/*
+Converts PNG file from disk to raw pixel data in memory.
+Same as the other decode functions, but instead takes a filename as input.
+*/
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                const std::string& filename,
+                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
+#endif //LODEPNG_COMPILE_DISK
+#endif //LODEPNG_COMPILE_DECODER
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/*Same as lodepng_encode_memory, but encodes to an std::vector. colortype
+is that of the raw input data. The output PNG color type will be auto chosen.*/
+unsigned encode(std::vector<unsigned char>& out,
+                const unsigned char* in, unsigned w, unsigned h,
+                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
+unsigned encode(std::vector<unsigned char>& out,
+                const std::vector<unsigned char>& in, unsigned w, unsigned h,
+                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
+#ifdef LODEPNG_COMPILE_DISK
+/*
+Converts 32-bit RGBA raw pixel data into a PNG file on disk.
+Same as the other encode functions, but instead takes a filename as output.
+NOTE: This overwrites existing files without warning!
+*/
+unsigned encode(const std::string& filename,
+                const unsigned char* in, unsigned w, unsigned h,
+                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
+unsigned encode(const std::string& filename,
+                const std::vector<unsigned char>& in, unsigned w, unsigned h,
+                LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8);
+#endif //LODEPNG_COMPILE_DISK
+#endif //LODEPNG_COMPILE_ENCODER
+} //namespace lodepng
+#endif /*LODEPNG_COMPILE_CPP*/
+#endif /*LODEPNG_COMPILE_PNG*/
+
+#ifdef LODEPNG_COMPILE_ERROR_TEXT
+/*Returns an English description of the numerical error code.*/
+const char* lodepng_error_text(unsigned code);
+#endif /*LODEPNG_COMPILE_ERROR_TEXT*/
+
+#ifdef LODEPNG_COMPILE_DECODER
+/*Settings for zlib decompression*/
+typedef struct LodePNGDecompressSettings LodePNGDecompressSettings;
+struct LodePNGDecompressSettings
+{
+  unsigned ignore_adler32; /*if 1, continue and don't give an error message if the Adler32 checksum is corrupted*/
+
+  /*use custom zlib decoder instead of built in one (default: null)*/
+  unsigned (*custom_zlib)(unsigned char**, size_t*,
+                          const unsigned char*, size_t,
+                          const LodePNGDecompressSettings*);
+  /*use custom deflate decoder instead of built in one (default: null)
+  if custom_zlib is used, custom_deflate is ignored since only the built in
+  zlib function will call custom_deflate*/
+  unsigned (*custom_inflate)(unsigned char**, size_t*,
+                             const unsigned char*, size_t,
+                             const LodePNGDecompressSettings*);
+
+  const void* custom_context; /*optional custom settings for custom functions*/
+};
+
+extern const LodePNGDecompressSettings lodepng_default_decompress_settings;
+void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings);
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/*
+Settings for zlib compression. Tweaking these settings tweaks the balance
+between speed and compression ratio.
+*/
+typedef struct LodePNGCompressSettings LodePNGCompressSettings;
+struct LodePNGCompressSettings /*deflate = compress*/
+{
+  /*LZ77 related settings*/
+  unsigned btype; /*the block type for LZ (0, 1, 2 or 3, see zlib standard). Should be 2 for proper compression.*/
+  unsigned use_lz77; /*whether or not to use LZ77. Should be 1 for proper compression.*/
+  unsigned windowsize; /*must be a power of two <= 32768. higher compresses more but is slower. Default value: 2048.*/
+  unsigned minmatch; /*mininum lz77 length. 3 is normally best, 6 can be better for some PNGs. Default: 0*/
+  unsigned nicematch; /*stop searching if >= this length found. Set to 258 for best compression. Default: 128*/
+  unsigned lazymatching; /*use lazy matching: better compression but a bit slower. Default: true*/
+
+  /*use custom zlib encoder instead of built in one (default: null)*/
+  unsigned (*custom_zlib)(unsigned char**, size_t*,
+                          const unsigned char*, size_t,
+                          const LodePNGCompressSettings*);
+  /*use custom deflate encoder instead of built in one (default: null)
+  if custom_zlib is used, custom_deflate is ignored since only the built in
+  zlib function will call custom_deflate*/
+  unsigned (*custom_deflate)(unsigned char**, size_t*,
+                             const unsigned char*, size_t,
+                             const LodePNGCompressSettings*);
+
+  const void* custom_context; /*optional custom settings for custom functions*/
+};
+
+extern const LodePNGCompressSettings lodepng_default_compress_settings;
+void lodepng_compress_settings_init(LodePNGCompressSettings* settings);
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+#ifdef LODEPNG_COMPILE_PNG
+/*
+Color mode of an image. Contains all information required to decode the pixel
+bits to RGBA colors. This information is the same as used in the PNG file
+format, and is used both for PNG and raw image data in LodePNG.
+*/
+typedef struct LodePNGColorMode
+{
+  /*header (IHDR)*/
+  LodePNGColorType colortype; /*color type, see PNG standard or documentation further in this header file*/
+  unsigned bitdepth;  /*bits per sample, see PNG standard or documentation further in this header file*/
+
+  /*
+  palette (PLTE and tRNS)
+
+  Dynamically allocated with the colors of the palette, including alpha.
+  When encoding a PNG, to store your colors in the palette of the LodePNGColorMode, first use
+  lodepng_palette_clear, then for each color use lodepng_palette_add.
+  If you encode an image without alpha with palette, don't forget to put value 255 in each A byte of the palette.
+
+  When decoding, by default you can ignore this palette, since LodePNG already
+  fills the palette colors in the pixels of the raw RGBA output.
+
+  The palette is only supported for color type 3.
+  */
+  unsigned char* palette; /*palette in RGBARGBA... order. When allocated, must be either 0, or have size 1024*/
+  size_t palettesize; /*palette size in number of colors (amount of bytes is 4 * palettesize)*/
+
+  /*
+  transparent color key (tRNS)
+
+  This color uses the same bit depth as the bitdepth value in this struct, which can be 1-bit to 16-bit.
+  For greyscale PNGs, r, g and b will all 3 be set to the same.
+
+  When decoding, by default you can ignore this information, since LodePNG sets
+  pixels with this key to transparent already in the raw RGBA output.
+
+  The color key is only supported for color types 0 and 2.
+  */
+  unsigned key_defined; /*is a transparent color key given? 0 = false, 1 = true*/
+  unsigned key_r;       /*red/greyscale component of color key*/
+  unsigned key_g;       /*green component of color key*/
+  unsigned key_b;       /*blue component of color key*/
+} LodePNGColorMode;
+
+/*init, cleanup and copy functions to use with this struct*/
+void lodepng_color_mode_init(LodePNGColorMode* info);
+void lodepng_color_mode_cleanup(LodePNGColorMode* info);
+/*return value is error code (0 means no error)*/
+unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source);
+
+void lodepng_palette_clear(LodePNGColorMode* info);
+/*add 1 color to the palette*/
+unsigned lodepng_palette_add(LodePNGColorMode* info,
+                             unsigned char r, unsigned char g, unsigned char b, unsigned char a);
+
+/*get the total amount of bits per pixel, based on colortype and bitdepth in the struct*/
+unsigned lodepng_get_bpp(const LodePNGColorMode* info);
+/*get the amount of color channels used, based on colortype in the struct.
+If a palette is used, it counts as 1 channel.*/
+unsigned lodepng_get_channels(const LodePNGColorMode* info);
+/*is it a greyscale type? (only colortype 0 or 4)*/
+unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info);
+/*has it got an alpha channel? (only colortype 2 or 6)*/
+unsigned lodepng_is_alpha_type(const LodePNGColorMode* info);
+/*has it got a palette? (only colortype 3)*/
+unsigned lodepng_is_palette_type(const LodePNGColorMode* info);
+/*only returns true if there is a palette and there is a value in the palette with alpha < 255.
+Loops through the palette to check this.*/
+unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info);
+/*
+Check if the given color info indicates the possibility of having non-opaque pixels in the PNG image.
+Returns true if the image can have translucent or invisible pixels (it still be opaque if it doesn't use such pixels).
+Returns false if the image can only have opaque pixels.
+In detail, it returns true only if it's a color type with alpha, or has a palette with non-opaque values,
+or if "key_defined" is true.
+*/
+unsigned lodepng_can_have_alpha(const LodePNGColorMode* info);
+/*Returns the byte size of a raw image buffer with given width, height and color mode*/
+size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color);
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+/*The information of a Time chunk in PNG.*/
+typedef struct LodePNGTime
+{
+  unsigned year;    /*2 bytes used (0-65535)*/
+  unsigned month;   /*1-12*/
+  unsigned day;     /*1-31*/
+  unsigned hour;    /*0-23*/
+  unsigned minute;  /*0-59*/
+  unsigned second;  /*0-60 (to allow for leap seconds)*/
+} LodePNGTime;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+
+/*Information about the PNG image, except pixels, width and height.*/
+typedef struct LodePNGInfo
+{
+  /*header (IHDR), palette (PLTE) and transparency (tRNS) chunks*/
+  unsigned compression_method;/*compression method of the original file. Always 0.*/
+  unsigned filter_method;     /*filter method of the original file*/
+  unsigned interlace_method;  /*interlace method of the original file*/
+  LodePNGColorMode color;     /*color type and bits, palette and transparency of the PNG file*/
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  /*
+  suggested background color chunk (bKGD)
+  This color uses the same color mode as the PNG (except alpha channel), which can be 1-bit to 16-bit.
+
+  For greyscale PNGs, r, g and b will all 3 be set to the same. When encoding
+  the encoder writes the red one. For palette PNGs: When decoding, the RGB value
+  will be stored, not a palette index. But when encoding, specify the index of
+  the palette in background_r, the other two are then ignored.
+
+  The decoder does not use this background color to edit the color of pixels.
+  */
+  unsigned background_defined; /*is a suggested background color given?*/
+  unsigned background_r;       /*red component of suggested background color*/
+  unsigned background_g;       /*green component of suggested background color*/
+  unsigned background_b;       /*blue component of suggested background color*/
+
+  /*
+  non-international text chunks (tEXt and zTXt)
+
+  The char** arrays each contain num strings. The actual messages are in
+  text_strings, while text_keys are keywords that give a short description what
+  the actual text represents, e.g. Title, Author, Description, or anything else.
+
+  A keyword is minimum 1 character and maximum 79 characters long. It's
+  discouraged to use a single line length longer than 79 characters for texts.
+
+  Don't allocate these text buffers yourself. Use the init/cleanup functions
+  correctly and use lodepng_add_text and lodepng_clear_text.
+  */
+  size_t text_num; /*the amount of texts in these char** buffers (there may be more texts in itext)*/
+  char** text_keys; /*the keyword of a text chunk (e.g. "Comment")*/
+  char** text_strings; /*the actual text*/
+
+  /*
+  international text chunks (iTXt)
+  Similar to the non-international text chunks, but with additional strings
+  "langtags" and "transkeys".
+  */
+  size_t itext_num; /*the amount of international texts in this PNG*/
+  char** itext_keys; /*the English keyword of the text chunk (e.g. "Comment")*/
+  char** itext_langtags; /*language tag for this text's language, ISO/IEC 646 string, e.g. ISO 639 language tag*/
+  char** itext_transkeys; /*keyword translated to the international language - UTF-8 string*/
+  char** itext_strings; /*the actual international text - UTF-8 string*/
+
+  /*time chunk (tIME)*/
+  unsigned time_defined; /*set to 1 to make the encoder generate a tIME chunk*/
+  LodePNGTime time;
+
+  /*phys chunk (pHYs)*/
+  unsigned phys_defined; /*if 0, there is no pHYs chunk and the values below are undefined, if 1 else there is one*/
+  unsigned phys_x; /*pixels per unit in x direction*/
+  unsigned phys_y; /*pixels per unit in y direction*/
+  unsigned phys_unit; /*may be 0 (unknown unit) or 1 (metre)*/
+
+  /*
+  unknown chunks
+  There are 3 buffers, one for each position in the PNG where unknown chunks can appear
+  each buffer contains all unknown chunks for that position consecutively
+  The 3 buffers are the unknown chunks between certain critical chunks:
+  0: IHDR-PLTE, 1: PLTE-IDAT, 2: IDAT-IEND
+  Do not allocate or traverse this data yourself. Use the chunk traversing functions declared
+  later, such as lodepng_chunk_next and lodepng_chunk_append, to read/write this struct.
+  */
+  unsigned char* unknown_chunks_data[3];
+  size_t unknown_chunks_size[3]; /*size in bytes of the unknown chunks, given for protection*/
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+} LodePNGInfo;
+
+/*init, cleanup and copy functions to use with this struct*/
+void lodepng_info_init(LodePNGInfo* info);
+void lodepng_info_cleanup(LodePNGInfo* info);
+/*return value is error code (0 means no error)*/
+unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source);
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+void lodepng_clear_text(LodePNGInfo* info); /*use this to clear the texts again after you filled them in*/
+unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str); /*push back both texts at once*/
+
+void lodepng_clear_itext(LodePNGInfo* info); /*use this to clear the itexts again after you filled them in*/
+unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag,
+                           const char* transkey, const char* str); /*push back the 4 texts of 1 chunk at once*/
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+
+/*
+Converts raw buffer from one color type to another color type, based on
+LodePNGColorMode structs to describe the input and output color type.
+See the reference manual at the end of this header file to see which color conversions are supported.
+return value = LodePNG error code (0 if all went ok, an error if the conversion isn't supported)
+The out buffer must have size (w * h * bpp + 7) / 8, where bpp is the bits per pixel
+of the output color type (lodepng_get_bpp).
+For < 8 bpp images, there should not be padding bits at the end of scanlines.
+For 16-bit per channel colors, uses big endian format like PNG does.
+Return value is LodePNG error code
+*/
+unsigned lodepng_convert(unsigned char* out, const unsigned char* in,
+                         LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in,
+                         unsigned w, unsigned h);
+
+#ifdef LODEPNG_COMPILE_DECODER
+/*
+Settings for the decoder. This contains settings for the PNG and the Zlib
+decoder, but not the Info settings from the Info structs.
+*/
+typedef struct LodePNGDecoderSettings
+{
+  LodePNGDecompressSettings zlibsettings; /*in here is the setting to ignore Adler32 checksums*/
+
+  unsigned ignore_crc; /*ignore CRC checksums*/
+
+  unsigned color_convert; /*whether to convert the PNG to the color type you want. Default: yes*/
+
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  unsigned read_text_chunks; /*if false but remember_unknown_chunks is true, they're stored in the unknown chunks*/
+  /*store all bytes from unknown chunks in the LodePNGInfo (off by default, useful for a png editor)*/
+  unsigned remember_unknown_chunks;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+} LodePNGDecoderSettings;
+
+void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings);
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/*automatically use color type with less bits per pixel if losslessly possible. Default: AUTO*/
+typedef enum LodePNGFilterStrategy
+{
+  /*every filter at zero*/
+  LFS_ZERO,
+  /*Use filter that gives minumum sum, as described in the official PNG filter heuristic.*/
+  LFS_MINSUM,
+  /*Use the filter type that gives smallest Shannon entropy for this scanline. Depending
+  on the image, this is better or worse than minsum.*/
+  LFS_ENTROPY,
+  /*
+  Brute-force-search PNG filters by compressing each filter for each scanline.
+  Experimental, very slow, and only rarely gives better compression than MINSUM.
+  */
+  LFS_BRUTE_FORCE,
+  /*use predefined_filters buffer: you specify the filter type for each scanline*/
+  LFS_PREDEFINED
+} LodePNGFilterStrategy;
+
+/*Gives characteristics about the colors of the image, which helps decide which color model to use for encoding.
+Used internally by default if "auto_convert" is enabled. Public because it's useful for custom algorithms.*/
+typedef struct LodePNGColorProfile
+{
+  unsigned colored; /*not greyscale*/
+  unsigned key; /*if true, image is not opaque. Only if true and alpha is false, color key is possible.*/
+  unsigned short key_r; /*these values are always in 16-bit bitdepth in the profile*/
+  unsigned short key_g;
+  unsigned short key_b;
+  unsigned alpha; /*alpha channel or alpha palette required*/
+  unsigned numcolors; /*amount of colors, up to 257. Not valid if bits == 16.*/
+  unsigned char palette[1024]; /*Remembers up to the first 256 RGBA colors, in no particular order*/
+  unsigned bits; /*bits per channel (not for palette). 1,2 or 4 for greyscale only. 16 if 16-bit per channel required.*/
+} LodePNGColorProfile;
+
+void lodepng_color_profile_init(LodePNGColorProfile* profile);
+
+/*Get a LodePNGColorProfile of the image.*/
+unsigned lodepng_get_color_profile(LodePNGColorProfile* profile,
+                                   const unsigned char* image, unsigned w, unsigned h,
+                                   const LodePNGColorMode* mode_in);
+/*The function LodePNG uses internally to decide the PNG color with auto_convert.
+Chooses an optimal color model, e.g. grey if only grey pixels, palette if < 256 colors, ...*/
+unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out,
+                                   const unsigned char* image, unsigned w, unsigned h,
+                                   const LodePNGColorMode* mode_in);
+
+/*Settings for the encoder.*/
+typedef struct LodePNGEncoderSettings
+{
+  LodePNGCompressSettings zlibsettings; /*settings for the zlib encoder, such as window size, ...*/
+
+  unsigned auto_convert; /*automatically choose output PNG color type. Default: true*/
+
+  /*If true, follows the official PNG heuristic: if the PNG uses a palette or lower than
+  8 bit depth, set all filters to zero. Otherwise use the filter_strategy. Note that to
+  completely follow the official PNG heuristic, filter_palette_zero must be true and
+  filter_strategy must be LFS_MINSUM*/
+  unsigned filter_palette_zero;
+  /*Which filter strategy to use when not using zeroes due to filter_palette_zero.
+  Set filter_palette_zero to 0 to ensure always using your chosen strategy. Default: LFS_MINSUM*/
+  LodePNGFilterStrategy filter_strategy;
+  /*used if filter_strategy is LFS_PREDEFINED. In that case, this must point to a buffer with
+  the same length as the amount of scanlines in the image, and each value must <= 5. You
+  have to cleanup this buffer, LodePNG will never free it. Don't forget that filter_palette_zero
+  must be set to 0 to ensure this is also used on palette or low bitdepth images.*/
+  const unsigned char* predefined_filters;
+
+  /*force creating a PLTE chunk if colortype is 2 or 6 (= a suggested palette).
+  If colortype is 3, PLTE is _always_ created.*/
+  unsigned force_palette;
+#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS
+  /*add LodePNG identifier and version as a text chunk, for debugging*/
+  unsigned add_id;
+  /*encode text chunks as zTXt chunks instead of tEXt chunks, and use compression in iTXt chunks*/
+  unsigned text_compression;
+#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
+} LodePNGEncoderSettings;
+
+void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings);
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+
+#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER)
+/*The settings, state and information for extended encoding and decoding.*/
+typedef struct LodePNGState
+{
+#ifdef LODEPNG_COMPILE_DECODER
+  LodePNGDecoderSettings decoder; /*the decoding settings*/
+#endif /*LODEPNG_COMPILE_DECODER*/
+#ifdef LODEPNG_COMPILE_ENCODER
+  LodePNGEncoderSettings encoder; /*the encoding settings*/
+#endif /*LODEPNG_COMPILE_ENCODER*/
+  LodePNGColorMode info_raw; /*specifies the format in which you would like to get the raw pixel buffer*/
+  LodePNGInfo info_png; /*info of the PNG image obtained after decoding*/
+  unsigned error;
+#ifdef LODEPNG_COMPILE_CPP
+  //For the lodepng::State subclass.
+  virtual ~LodePNGState(){}
+#endif
+} LodePNGState;
+
+/*init, cleanup and copy functions to use with this struct*/
+void lodepng_state_init(LodePNGState* state);
+void lodepng_state_cleanup(LodePNGState* state);
+void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source);
+#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */
+
+#ifdef LODEPNG_COMPILE_DECODER
+/*
+Same as lodepng_decode_memory, but uses a LodePNGState to allow custom settings and
+getting much more information about the PNG image and color mode.
+*/
+unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h,
+                        LodePNGState* state,
+                        const unsigned char* in, size_t insize);
+
+/*
+Read the PNG header, but not the actual data. This returns only the information
+that is in the header chunk of the PNG, such as width, height and color type. The
+information is placed in the info_png field of the LodePNGState.
+*/
+unsigned lodepng_inspect(unsigned* w, unsigned* h,
+                         LodePNGState* state,
+                         const unsigned char* in, size_t insize);
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/*This function allocates the out buffer with standard malloc and stores the size in *outsize.*/
+unsigned lodepng_encode(unsigned char** out, size_t* outsize,
+                        const unsigned char* image, unsigned w, unsigned h,
+                        LodePNGState* state);
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+/*
+The lodepng_chunk functions are normally not needed, except to traverse the
+unknown chunks stored in the LodePNGInfo struct, or add new ones to it.
+It also allows traversing the chunks of an encoded PNG file yourself.
+
+PNG standard chunk naming conventions:
+First byte: uppercase = critical, lowercase = ancillary
+Second byte: uppercase = public, lowercase = private
+Third byte: must be uppercase
+Fourth byte: uppercase = unsafe to copy, lowercase = safe to copy
+*/
+
+/*
+Gets the length of the data of the chunk. Total chunk length has 12 bytes more.
+There must be at least 4 bytes to read from. If the result value is too large,
+it may be corrupt data.
+*/
+unsigned lodepng_chunk_length(const unsigned char* chunk);
+
+/*puts the 4-byte type in null terminated string*/
+void lodepng_chunk_type(char type[5], const unsigned char* chunk);
+
+/*check if the type is the given type*/
+unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type);
+
+/*0: it's one of the critical chunk types, 1: it's an ancillary chunk (see PNG standard)*/
+unsigned char lodepng_chunk_ancillary(const unsigned char* chunk);
+
+/*0: public, 1: private (see PNG standard)*/
+unsigned char lodepng_chunk_private(const unsigned char* chunk);
+
+/*0: the chunk is unsafe to copy, 1: the chunk is safe to copy (see PNG standard)*/
+unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk);
+
+/*get pointer to the data of the chunk, where the input points to the header of the chunk*/
+unsigned char* lodepng_chunk_data(unsigned char* chunk);
+const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk);
+
+/*returns 0 if the crc is correct, 1 if it's incorrect (0 for OK as usual!)*/
+unsigned lodepng_chunk_check_crc(const unsigned char* chunk);
+
+/*generates the correct CRC from the data and puts it in the last 4 bytes of the chunk*/
+void lodepng_chunk_generate_crc(unsigned char* chunk);
+
+/*iterate to next chunks. don't use on IEND chunk, as there is no next chunk then*/
+unsigned char* lodepng_chunk_next(unsigned char* chunk);
+const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk);
+
+/*
+Appends chunk to the data in out. The given chunk should already have its chunk header.
+The out variable and outlength are updated to reflect the new reallocated buffer.
+Returns error code (0 if it went ok)
+*/
+unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk);
+
+/*
+Appends new chunk to out. The chunk to append is given by giving its length, type
+and data separately. The type is a 4-letter string.
+The out variable and outlength are updated to reflect the new reallocated buffer.
+Returne error code (0 if it went ok)
+*/
+unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,
+                              const char* type, const unsigned char* data);
+
+
+/*Calculate CRC32 of buffer*/
+unsigned lodepng_crc32(const unsigned char* buf, size_t len);
+#endif /*LODEPNG_COMPILE_PNG*/
+
+
+#ifdef LODEPNG_COMPILE_ZLIB
+/*
+This zlib part can be used independently to zlib compress and decompress a
+buffer. It cannot be used to create gzip files however, and it only supports the
+part of zlib that is required for PNG, it does not support dictionaries.
+*/
+
+#ifdef LODEPNG_COMPILE_DECODER
+/*Inflate a buffer. Inflate is the decompression step of deflate. Out buffer must be freed after use.*/
+unsigned lodepng_inflate(unsigned char** out, size_t* outsize,
+                         const unsigned char* in, size_t insize,
+                         const LodePNGDecompressSettings* settings);
+
+/*
+Decompresses Zlib data. Reallocates the out buffer and appends the data. The
+data must be according to the zlib specification.
+Either, *out must be NULL and *outsize must be 0, or, *out must be a valid
+buffer and *outsize its size in bytes. out must be freed by user after usage.
+*/
+unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize,
+                                 const unsigned char* in, size_t insize,
+                                 const LodePNGDecompressSettings* settings);
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#ifdef LODEPNG_COMPILE_ENCODER
+/*
+Compresses data with Zlib. Reallocates the out buffer and appends the data.
+Zlib adds a small header and trailer around the deflate data.
+The data is output in the format of the zlib specification.
+Either, *out must be NULL and *outsize must be 0, or, *out must be a valid
+buffer and *outsize its size in bytes. out must be freed by user after usage.
+*/
+unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize,
+                               const unsigned char* in, size_t insize,
+                               const LodePNGCompressSettings* settings);
+
+/*
+Find length-limited Huffman code for given frequencies. This function is in the
+public interface only for tests, it's used internally by lodepng_deflate.
+*/
+unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies,
+                                      size_t numcodes, unsigned maxbitlen);
+
+/*Compress a buffer with deflate. See RFC 1951. Out buffer must be freed after use.*/
+unsigned lodepng_deflate(unsigned char** out, size_t* outsize,
+                         const unsigned char* in, size_t insize,
+                         const LodePNGCompressSettings* settings);
+
+#endif /*LODEPNG_COMPILE_ENCODER*/
+#endif /*LODEPNG_COMPILE_ZLIB*/
+
+#ifdef LODEPNG_COMPILE_DISK
+/*
+Load a file from disk into buffer. The function allocates the out buffer, and
+after usage you should free it.
+out: output parameter, contains pointer to loaded buffer.
+outsize: output parameter, size of the allocated out buffer
+filename: the path to the file to load
+return value: error code (0 means ok)
+*/
+unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename);
+
+/*
+Save a file from buffer to disk. Warning, if it exists, this function overwrites
+the file without warning!
+buffer: the buffer to write
+buffersize: size of the buffer to write
+filename: the path to the file to save to
+return value: error code (0 means ok)
+*/
+unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename);
+#endif /*LODEPNG_COMPILE_DISK*/
+
+#ifdef LODEPNG_COMPILE_CPP
+//The LodePNG C++ wrapper uses std::vectors instead of manually allocated memory buffers.
+namespace lodepng
+{
+#ifdef LODEPNG_COMPILE_PNG
+class State : public LodePNGState
+{
+  public:
+    State();
+    State(const State& other);
+    virtual ~State();
+    State& operator=(const State& other);
+};
+
+#ifdef LODEPNG_COMPILE_DECODER
+//Same as other lodepng::decode, but using a State for more settings and information.
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                State& state,
+                const unsigned char* in, size_t insize);
+unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h,
+                State& state,
+                const std::vector<unsigned char>& in);
+#endif /*LODEPNG_COMPILE_DECODER*/
+
+#ifdef LODEPNG_COMPILE_ENCODER
+//Same as other lodepng::encode, but using a State for more settings and information.
+unsigned encode(std::vector<unsigned char>& out,
+                const unsigned char* in, unsigned w, unsigned h,
+                State& state);
+unsigned encode(std::vector<unsigned char>& out,
+                const std::vector<unsigned char>& in, unsigned w, unsigned h,
+                State& state);
+#endif /*LODEPNG_COMPILE_ENCODER*/
+
+#ifdef LODEPNG_COMPILE_DISK
+/*
+Load a file from disk into an std::vector. If the vector is empty, then either
+the file doesn't exist or is an empty file.
+*/
+void load_file(std::vector<unsigned char>& buffer, const std::string& filename);
+
+/*
+Save the binary data in an std::vector to a file on disk. The file is overwritten
+without warning.
+*/
+void save_file(const std::vector<unsigned char>& buffer, const std::string& filename);
+#endif //LODEPNG_COMPILE_DISK
+#endif //LODEPNG_COMPILE_PNG
+
+#ifdef LODEPNG_COMPILE_ZLIB
+#ifdef LODEPNG_COMPILE_DECODER
+//Zlib-decompress an unsigned char buffer
+unsigned decompress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
+                    const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);
+
+//Zlib-decompress an std::vector
+unsigned decompress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
+                    const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings);
+#endif //LODEPNG_COMPILE_DECODER
+
+#ifdef LODEPNG_COMPILE_ENCODER
+//Zlib-compress an unsigned char buffer
+unsigned compress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize,
+                  const LodePNGCompressSettings& settings = lodepng_default_compress_settings);
+
+//Zlib-compress an std::vector
+unsigned compress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in,
+                  const LodePNGCompressSettings& settings = lodepng_default_compress_settings);
+#endif //LODEPNG_COMPILE_ENCODER
+#endif //LODEPNG_COMPILE_ZLIB
+} //namespace lodepng
+#endif /*LODEPNG_COMPILE_CPP*/
+
+/*
+TODO:
+[.] test if there are no memory leaks or security exploits - done a lot but needs to be checked often
+[.] check compatibility with vareous compilers  - done but needs to be redone for every newer version
+[X] converting color to 16-bit per channel types
+[ ] read all public PNG chunk types (but never let the color profile and gamma ones touch RGB values)
+[ ] make sure encoder generates no chunks with size > (2^31)-1
+[ ] partial decoding (stream processing)
+[X] let the "isFullyOpaque" function check color keys and transparent palettes too
+[X] better name for the variables "codes", "codesD", "codelengthcodes", "clcl" and "lldl"
+[ ] don't stop decoding on errors like 69, 57, 58 (make warnings)
+[ ] let the C++ wrapper catch exceptions coming from the standard library and return LodePNG error codes
+[ ] allow user to provide custom color conversion functions, e.g. for premultiplied alpha, padding bits or not, ...
+*/
+
+#endif /*LODEPNG_H inclusion guard*/
+
+/*
+LodePNG Documentation
+---------------------
+
+0. table of contents
+--------------------
+
+  1. about
+   1.1. supported features
+   1.2. features not supported
+  2. C and C++ version
+  3. security
+  4. decoding
+  5. encoding
+  6. color conversions
+    6.1. PNG color types
+    6.2. color conversions
+    6.3. padding bits
+    6.4. A note about 16-bits per channel and endianness
+  7. error values
+  8. chunks and PNG editing
+  9. compiler support
+  10. examples
+   10.1. decoder C++ example
+   10.2. decoder C example
+  11. changes
+  12. contact information
+
+
+1. about
+--------
+
+PNG is a file format to store raster images losslessly with good compression,
+supporting different color types and alpha channel.
+
+LodePNG is a PNG codec according to the Portable Network Graphics (PNG)
+Specification (Second Edition) - W3C Recommendation 10 November 2003.
+
+The specifications used are:
+
+*) Portable Network Graphics (PNG) Specification (Second Edition):
+     http://www.w3.org/TR/2003/REC-PNG-20031110
+*) RFC 1950 ZLIB Compressed Data Format version 3.3:
+     http://www.gzip.org/zlib/rfc-zlib.html
+*) RFC 1951 DEFLATE Compressed Data Format Specification ver 1.3:
+     http://www.gzip.org/zlib/rfc-deflate.html
+
+The most recent version of LodePNG can currently be found at
+http://lodev.org/lodepng/
+
+LodePNG works both in C (ISO C90) and C++, with a C++ wrapper that adds
+extra functionality.
+
+LodePNG exists out of two files:
+-lodepng.h: the header file for both C and C++
+-lodepng.c(pp): give it the name lodepng.c or lodepng.cpp (or .cc) depending on your usage
+
+If you want to start using LodePNG right away without reading this doc, get the
+examples from the LodePNG website to see how to use it in code, or check the
+smaller examples in chapter 13 here.
+
+LodePNG is simple but only supports the basic requirements. To achieve
+simplicity, the following design choices were made: There are no dependencies
+on any external library. There are functions to decode and encode a PNG with
+a single function call, and extended versions of these functions taking a
+LodePNGState struct allowing to specify or get more information. By default
+the colors of the raw image are always RGB or RGBA, no matter what color type
+the PNG file uses. To read and write files, there are simple functions to
+convert the files to/from buffers in memory.
+
+This all makes LodePNG suitable for loading textures in games, demos and small
+programs, ... It's less suitable for full fledged image editors, loading PNGs
+over network (it requires all the image data to be available before decoding can
+begin), life-critical systems, ...
+
+1.1. supported features
+-----------------------
+
+The following features are supported by the decoder:
+
+*) decoding of PNGs with any color type, bit depth and interlace mode, to a 24- or 32-bit color raw image,
+   or the same color type as the PNG
+*) encoding of PNGs, from any raw image to 24- or 32-bit color, or the same color type as the raw image
+*) Adam7 interlace and deinterlace for any color type
+*) loading the image from harddisk or decoding it from a buffer from other sources than harddisk
+*) support for alpha channels, including RGBA color model, translucent palettes and color keying
+*) zlib decompression (inflate)
+*) zlib compression (deflate)
+*) CRC32 and ADLER32 checksums
+*) handling of unknown chunks, allowing making a PNG editor that stores custom and unknown chunks.
+*) the following chunks are supported (generated/interpreted) by both encoder and decoder:
+    IHDR: header information
+    PLTE: color palette
+    IDAT: pixel data
+    IEND: the final chunk
+    tRNS: transparency for palettized images
+    tEXt: textual information
+    zTXt: compressed textual information
+    iTXt: international textual information
+    bKGD: suggested background color
+    pHYs: physical dimensions
+    tIME: modification time
+
+1.2. features not supported
+---------------------------
+
+The following features are _not_ supported:
+
+*) some features needed to make a conformant PNG-Editor might be still missing.
+*) partial loading/stream processing. All data must be available and is processed in one call.
+*) The following public chunks are not supported but treated as unknown chunks by LodePNG
+    cHRM, gAMA, iCCP, sRGB, sBIT, hIST, sPLT
+   Some of these are not supported on purpose: LodePNG wants to provide the RGB values
+   stored in the pixels, not values modified by system dependent gamma or color models.
+
+
+2. C and C++ version
+--------------------
+
+The C version uses buffers allocated with alloc that you need to free()
+yourself. You need to use init and cleanup functions for each struct whenever
+using a struct from the C version to avoid exploits and memory leaks.
+
+The C++ version has extra functions with std::vectors in the interface and the
+lodepng::State class which is a LodePNGState with constructor and destructor.
+
+These files work without modification for both C and C++ compilers because all
+the additional C++ code is in "#ifdef __cplusplus" blocks that make C-compilers
+ignore it, and the C code is made to compile both with strict ISO C90 and C++.
+
+To use the C++ version, you need to rename the source file to lodepng.cpp
+(instead of lodepng.c), and compile it with a C++ compiler.
+
+To use the C version, you need to rename the source file to lodepng.c (instead
+of lodepng.cpp), and compile it with a C compiler.
+
+
+3. Security
+-----------
+
+Even if carefully designed, it's always possible that LodePNG contains possible
+exploits. If you discover one, please let me know, and it will be fixed.
+
+When using LodePNG, care has to be taken with the C version of LodePNG, as well
+as the C-style structs when working with C++. The following conventions are used
+for all C-style structs:
+
+-if a struct has a corresponding init function, always call the init function when making a new one
+-if a struct has a corresponding cleanup function, call it before the struct disappears to avoid memory leaks
+-if a struct has a corresponding copy function, use the copy function instead of "=".
+ The destination must also be inited already.
+
+
+4. Decoding
+-----------
+
+Decoding converts a PNG compressed image to a raw pixel buffer.
+
+Most documentation on using the decoder is at its declarations in the header
+above. For C, simple decoding can be done with functions such as
+lodepng_decode32, and more advanced decoding can be done with the struct
+LodePNGState and lodepng_decode. For C++, all decoding can be done with the
+various lodepng::decode functions, and lodepng::State can be used for advanced
+features.
+
+When using the LodePNGState, it uses the following fields for decoding:
+*) LodePNGInfo info_png: it stores extra information about the PNG (the input) in here
+*) LodePNGColorMode info_raw: here you can say what color mode of the raw image (the output) you want to get
+*) LodePNGDecoderSettings decoder: you can specify a few extra settings for the decoder to use
+
+LodePNGInfo info_png
+--------------------
+
+After decoding, this contains extra information of the PNG image, except the actual
+pixels, width and height because these are already gotten directly from the decoder
+functions.
+
+It contains for example the original color type of the PNG image, text comments,
+suggested background color, etc... More details about the LodePNGInfo struct are
+at its declaration documentation.
+
+LodePNGColorMode info_raw
+-------------------------
+
+When decoding, here you can specify which color type you want
+the resulting raw image to be. If this is different from the colortype of the
+PNG, then the decoder will automatically convert the result. This conversion
+always works, except if you want it to convert a color PNG to greyscale or to
+a palette with missing colors.
+
+By default, 32-bit color is used for the result.
+
+LodePNGDecoderSettings decoder
+------------------------------
+
+The settings can be used to ignore the errors created by invalid CRC and Adler32
+chunks, and to disable the decoding of tEXt chunks.
+
+There's also a setting color_convert, true by default. If false, no conversion
+is done, the resulting data will be as it was in the PNG (after decompression)
+and you'll have to puzzle the colors of the pixels together yourself using the
+color type information in the LodePNGInfo.
+
+
+5. Encoding
+-----------
+
+Encoding converts a raw pixel buffer to a PNG compressed image.
+
+Most documentation on using the encoder is at its declarations in the header
+above. For C, simple encoding can be done with functions such as
+lodepng_encode32, and more advanced decoding can be done with the struct
+LodePNGState and lodepng_encode. For C++, all encoding can be done with the
+various lodepng::encode functions, and lodepng::State can be used for advanced
+features.
+
+Like the decoder, the encoder can also give errors. However it gives less errors
+since the encoder input is trusted, the decoder input (a PNG image that could
+be forged by anyone) is not trusted.
+
+When using the LodePNGState, it uses the following fields for encoding:
+*) LodePNGInfo info_png: here you specify how you want the PNG (the output) to be.
+*) LodePNGColorMode info_raw: here you say what color type of the raw image (the input) has
+*) LodePNGEncoderSettings encoder: you can specify a few settings for the encoder to use
+
+LodePNGInfo info_png
+--------------------
+
+When encoding, you use this the opposite way as when decoding: for encoding,
+you fill in the values you want the PNG to have before encoding. By default it's
+not needed to specify a color type for the PNG since it's automatically chosen,
+but it's possible to choose it yourself given the right settings.
+
+The encoder will not always exactly match the LodePNGInfo struct you give,
+it tries as close as possible. Some things are ignored by the encoder. The
+encoder uses, for example, the following settings from it when applicable:
+colortype and bitdepth, text chunks, time chunk, the color key, the palette, the
+background color, the interlace method, unknown chunks, ...
+
+When encoding to a PNG with colortype 3, the encoder will generate a PLTE chunk.
+If the palette contains any colors for which the alpha channel is not 255 (so
+there are translucent colors in the palette), it'll add a tRNS chunk.
+
+LodePNGColorMode info_raw
+-------------------------
+
+You specify the color type of the raw image that you give to the input here,
+including a possible transparent color key and palette you happen to be using in
+your raw image data.
+
+By default, 32-bit color is assumed, meaning your input has to be in RGBA
+format with 4 bytes (unsigned chars) per pixel.
+
+LodePNGEncoderSettings encoder
+------------------------------
+
+The following settings are supported (some are in sub-structs):
+*) auto_convert: when this option is enabled, the encoder will
+automatically choose the smallest possible color mode (including color key) that
+can encode the colors of all pixels without information loss.
+*) btype: the block type for LZ77. 0 = uncompressed, 1 = fixed huffman tree,
+   2 = dynamic huffman tree (best compression). Should be 2 for proper
+   compression.
+*) use_lz77: whether or not to use LZ77 for compressed block types. Should be
+   true for proper compression.
+*) windowsize: the window size used by the LZ77 encoder (1 - 32768). Has value
+   2048 by default, but can be set to 32768 for better, but slow, compression.
+*) force_palette: if colortype is 2 or 6, you can make the encoder write a PLTE
+   chunk if force_palette is true. This can used as suggested palette to convert
+   to by viewers that don't support more than 256 colors (if those still exist)
+*) add_id: add text chunk "Encoder: LodePNG <version>" to the image.
+*) text_compression: default 1. If 1, it'll store texts as zTXt instead of tEXt chunks.
+  zTXt chunks use zlib compression on the text. This gives a smaller result on
+  large texts but a larger result on small texts (such as a single program name).
+  It's all tEXt or all zTXt though, there's no separate setting per text yet.
+
+
+6. color conversions
+--------------------
+
+An important thing to note about LodePNG, is that the color type of the PNG, and
+the color type of the raw image, are completely independent. By default, when
+you decode a PNG, you get the result as a raw image in the color type you want,
+no matter whether the PNG was encoded with a palette, greyscale or RGBA color.
+And if you encode an image, by default LodePNG will automatically choose the PNG
+color type that gives good compression based on the values of colors and amount
+of colors in the image. It can be configured to let you control it instead as
+well, though.
+
+To be able to do this, LodePNG does conversions from one color mode to another.
+It can convert from almost any color type to any other color type, except the
+following conversions: RGB to greyscale is not supported, and converting to a
+palette when the palette doesn't have a required color is not supported. This is
+not supported on purpose: this is information loss which requires a color
+reduction algorithm that is beyong the scope of a PNG encoder (yes, RGB to grey
+is easy, but there are multiple ways if you want to give some channels more
+weight).
+
+By default, when decoding, you get the raw image in 32-bit RGBA or 24-bit RGB
+color, no matter what color type the PNG has. And by default when encoding,
+LodePNG automatically picks the best color model for the output PNG, and expects
+the input image to be 32-bit RGBA or 24-bit RGB. So, unless you want to control
+the color format of the images yourself, you can skip this chapter.
+
+6.1. PNG color types
+--------------------
+
+A PNG image can have many color types, ranging from 1-bit color to 64-bit color,
+as well as palettized color modes. After the zlib decompression and unfiltering
+in the PNG image is done, the raw pixel data will have that color type and thus
+a certain amount of bits per pixel. If you want the output raw image after
+decoding to have another color type, a conversion is done by LodePNG.
+
+The PNG specification gives the following color types:
+
+0: greyscale, bit depths 1, 2, 4, 8, 16
+2: RGB, bit depths 8 and 16
+3: palette, bit depths 1, 2, 4 and 8
+4: greyscale with alpha, bit depths 8 and 16
+6: RGBA, bit depths 8 and 16
+
+Bit depth is the amount of bits per pixel per color channel. So the total amount
+of bits per pixel is: amount of channels * bitdepth.
+
+6.2. color conversions
+----------------------
+
+As explained in the sections about the encoder and decoder, you can specify
+color types and bit depths in info_png and info_raw to change the default
+behaviour.
+
+If, when decoding, you want the raw image to be something else than the default,
+you need to set the color type and bit depth you want in the LodePNGColorMode,
+or the parameters colortype and bitdepth of the simple decoding function.
+
+If, when encoding, you use another color type than the default in the raw input
+image, you need to specify its color type and bit depth in the LodePNGColorMode
+of the raw image, or use the parameters colortype and bitdepth of the simple
+encoding function.
+
+If, when encoding, you don't want LodePNG to choose the output PNG color type
+but control it yourself, you need to set auto_convert in the encoder settings
+to false, and specify the color type you want in the LodePNGInfo of the
+encoder (including palette: it can generate a palette if auto_convert is true,
+otherwise not).
+
+If the input and output color type differ (whether user chosen or auto chosen),
+LodePNG will do a color conversion, which follows the rules below, and may
+sometimes result in an error.
+
+To avoid some confusion:
+-the decoder converts from PNG to raw image
+-the encoder converts from raw image to PNG
+-the colortype and bitdepth in LodePNGColorMode info_raw, are those of the raw image
+-the colortype and bitdepth in the color field of LodePNGInfo info_png, are those of the PNG
+-when encoding, the color type in LodePNGInfo is ignored if auto_convert
+ is enabled, it is automatically generated instead
+-when decoding, the color type in LodePNGInfo is set by the decoder to that of the original
+ PNG image, but it can be ignored since the raw image has the color type you requested instead
+-if the color type of the LodePNGColorMode and PNG image aren't the same, a conversion
+ between the color types is done if the color types are supported. If it is not
+ supported, an error is returned. If the types are the same, no conversion is done.
+-even though some conversions aren't supported, LodePNG supports loading PNGs from any
+ colortype and saving PNGs to any colortype, sometimes it just requires preparing
+ the raw image correctly before encoding.
+-both encoder and decoder use the same color converter.
+
+Non supported color conversions:
+-color to greyscale: no error is thrown, but the result will look ugly because
+only the red channel is taken
+-anything to palette when that palette does not have that color in it: in this
+case an error is thrown
+
+Supported color conversions:
+-anything to 8-bit RGB, 8-bit RGBA, 16-bit RGB, 16-bit RGBA
+-any grey or grey+alpha, to grey or grey+alpha
+-anything to a palette, as long as the palette has the requested colors in it
+-removing alpha channel
+-higher to smaller bitdepth, and vice versa
+
+If you want no color conversion to be done (e.g. for speed or control):
+-In the encoder, you can make it save a PNG with any color type by giving the
+raw color mode and LodePNGInfo the same color mode, and setting auto_convert to
+false.
+-In the decoder, you can make it store the pixel data in the same color type
+as the PNG has, by setting the color_convert setting to false. Settings in
+info_raw are then ignored.
+
+The function lodepng_convert does the color conversion. It is available in the
+interface but normally isn't needed since the encoder and decoder already call
+it.
+
+6.3. padding bits
+-----------------
+
+In the PNG file format, if a less than 8-bit per pixel color type is used and the scanlines
+have a bit amount that isn't a multiple of 8, then padding bits are used so that each
+scanline starts at a fresh byte. But that is NOT true for the LodePNG raw input and output.
+The raw input image you give to the encoder, and the raw output image you get from the decoder
+will NOT have these padding bits, e.g. in the case of a 1-bit image with a width
+of 7 pixels, the first pixel of the second scanline will the the 8th bit of the first byte,
+not the first bit of a new byte.
+
+6.4. A note about 16-bits per channel and endianness
+----------------------------------------------------
+
+LodePNG uses unsigned char arrays for 16-bit per channel colors too, just like
+for any other color format. The 16-bit values are stored in big endian (most
+significant byte first) in these arrays. This is the opposite order of the
+little endian used by x86 CPU's.
+
+LodePNG always uses big endian because the PNG file format does so internally.
+Conversions to other formats than PNG uses internally are not supported by
+LodePNG on purpose, there are myriads of formats, including endianness of 16-bit
+colors, the order in which you store R, G, B and A, and so on. Supporting and
+converting to/from all that is outside the scope of LodePNG.
+
+This may mean that, depending on your use case, you may want to convert the big
+endian output of LodePNG to little endian with a for loop. This is certainly not
+always needed, many applications and libraries support big endian 16-bit colors
+anyway, but it means you cannot simply cast the unsigned char* buffer to an
+unsigned short* buffer on x86 CPUs.
+
+
+7. error values
+---------------
+
+All functions in LodePNG that return an error code, return 0 if everything went
+OK, or a non-zero code if there was an error.
+
+The meaning of the LodePNG error values can be retrieved with the function
+lodepng_error_text: given the numerical error code, it returns a description
+of the error in English as a string.
+
+Check the implementation of lodepng_error_text to see the meaning of each code.
+
+
+8. chunks and PNG editing
+-------------------------
+
+If you want to add extra chunks to a PNG you encode, or use LodePNG for a PNG
+editor that should follow the rules about handling of unknown chunks, or if your
+program is able to read other types of chunks than the ones handled by LodePNG,
+then that's possible with the chunk functions of LodePNG.
+
+A PNG chunk has the following layout:
+
+4 bytes length
+4 bytes type name
+length bytes data
+4 bytes CRC
+
+8.1. iterating through chunks
+-----------------------------
+
+If you have a buffer containing the PNG image data, then the first chunk (the
+IHDR chunk) starts at byte number 8 of that buffer. The first 8 bytes are the
+signature of the PNG and are not part of a chunk. But if you start at byte 8
+then you have a chunk, and can check the following things of it.
+
+NOTE: none of these functions check for memory buffer boundaries. To avoid
+exploits, always make sure the buffer contains all the data of the chunks.
+When using lodepng_chunk_next, make sure the returned value is within the
+allocated memory.
+
+unsigned lodepng_chunk_length(const unsigned char* chunk):
+
+Get the length of the chunk's data. The total chunk length is this length + 12.
+
+void lodepng_chunk_type(char type[5], const unsigned char* chunk):
+unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type):
+
+Get the type of the chunk or compare if it's a certain type
+
+unsigned char lodepng_chunk_critical(const unsigned char* chunk):
+unsigned char lodepng_chunk_private(const unsigned char* chunk):
+unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk):
+
+Check if the chunk is critical in the PNG standard (only IHDR, PLTE, IDAT and IEND are).
+Check if the chunk is private (public chunks are part of the standard, private ones not).
+Check if the chunk is safe to copy. If it's not, then, when modifying data in a critical
+chunk, unsafe to copy chunks of the old image may NOT be saved in the new one if your
+program doesn't handle that type of unknown chunk.
+
+unsigned char* lodepng_chunk_data(unsigned char* chunk):
+const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk):
+
+Get a pointer to the start of the data of the chunk.
+
+unsigned lodepng_chunk_check_crc(const unsigned char* chunk):
+void lodepng_chunk_generate_crc(unsigned char* chunk):
+
+Check if the crc is correct or generate a correct one.
+
+unsigned char* lodepng_chunk_next(unsigned char* chunk):
+const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk):
+
+Iterate to the next chunk. This works if you have a buffer with consecutive chunks. Note that these
+functions do no boundary checking of the allocated data whatsoever, so make sure there is enough
+data available in the buffer to be able to go to the next chunk.
+
+unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk):
+unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,
+                              const char* type, const unsigned char* data):
+
+These functions are used to create new chunks that are appended to the data in *out that has
+length *outlength. The append function appends an existing chunk to the new data. The create
+function creates a new chunk with the given parameters and appends it. Type is the 4-letter
+name of the chunk.
+
+8.2. chunks in info_png
+-----------------------
+
+The LodePNGInfo struct contains fields with the unknown chunk in it. It has 3
+buffers (each with size) to contain 3 types of unknown chunks:
+the ones that come before the PLTE chunk, the ones that come between the PLTE
+and the IDAT chunks, and the ones that come after the IDAT chunks.
+It's necessary to make the distionction between these 3 cases because the PNG
+standard forces to keep the ordering of unknown chunks compared to the critical
+chunks, but does not force any other ordering rules.
+
+info_png.unknown_chunks_data[0] is the chunks before PLTE
+info_png.unknown_chunks_data[1] is the chunks after PLTE, before IDAT
+info_png.unknown_chunks_data[2] is the chunks after IDAT
+
+The chunks in these 3 buffers can be iterated through and read by using the same
+way described in the previous subchapter.
+
+When using the decoder to decode a PNG, you can make it store all unknown chunks
+if you set the option settings.remember_unknown_chunks to 1. By default, this
+option is off (0).
+
+The encoder will always encode unknown chunks that are stored in the info_png.
+If you need it to add a particular chunk that isn't known by LodePNG, you can
+use lodepng_chunk_append or lodepng_chunk_create to the chunk data in
+info_png.unknown_chunks_data[x].
+
+Chunks that are known by LodePNG should not be added in that way. E.g. to make
+LodePNG add a bKGD chunk, set background_defined to true and add the correct
+parameters there instead.
+
+
+9. compiler support
+-------------------
+
+No libraries other than the current standard C library are needed to compile
+LodePNG. For the C++ version, only the standard C++ library is needed on top.
+Add the files lodepng.c(pp) and lodepng.h to your project, include
+lodepng.h where needed, and your program can read/write PNG files.
+
+It is compatible with C90 and up, and C++03 and up.
+
+If performance is important, use optimization when compiling! For both the
+encoder and decoder, this makes a large difference.
+
+Make sure that LodePNG is compiled with the same compiler of the same version
+and with the same settings as the rest of the program, or the interfaces with
+std::vectors and std::strings in C++ can be incompatible.
+
+CHAR_BITS must be 8 or higher, because LodePNG uses unsigned chars for octets.
+
+*) gcc and g++
+
+LodePNG is developed in gcc so this compiler is natively supported. It gives no
+warnings with compiler options "-Wall -Wextra -pedantic -ansi", with gcc and g++
+version 4.7.1 on Linux, 32-bit and 64-bit.
+
+*) Clang
+
+Fully supported and warning-free.
+
+*) Mingw
+
+The Mingw compiler (a port of gcc for Windows) should be fully supported by
+LodePNG.
+
+*) Visual Studio and Visual C++ Express Edition
+
+LodePNG should be warning-free with warning level W4. Two warnings were disabled
+with pragmas though: warning 4244 about implicit conversions, and warning 4996
+where it wants to use a non-standard function fopen_s instead of the standard C
+fopen.
+
+Visual Studio may want "stdafx.h" files to be included in each source file and
+give an error "unexpected end of file while looking for precompiled header".
+This is not standard C++ and will not be added to the stock LodePNG. You can
+disable it for lodepng.cpp only by right clicking it, Properties, C/C++,
+Precompiled Headers, and set it to Not Using Precompiled Headers there.
+
+NOTE: Modern versions of VS should be fully supported, but old versions, e.g.
+VS6, are not guaranteed to work.
+
+*) Compilers on Macintosh
+
+LodePNG has been reported to work both with gcc and LLVM for Macintosh, both for
+C and C++.
+
+*) Other Compilers
+
+If you encounter problems on any compilers, feel free to let me know and I may
+try to fix it if the compiler is modern and standards complient.
+
+
+10. examples
+------------
+
+This decoder example shows the most basic usage of LodePNG. More complex
+examples can be found on the LodePNG website.
+
+10.1. decoder C++ example
+-------------------------
+
+#include "lodepng.h"
+#include <iostream>
+
+int main(int argc, char *argv[])
+{
+  const char* filename = argc > 1 ? argv[1] : "test.png";
+
+  //load and decode
+  std::vector<unsigned char> image;
+  unsigned width, height;
+  unsigned error = lodepng::decode(image, width, height, filename);
+
+  //if there's an error, display it
+  if(error) std::cout << "decoder error " << error << ": " << lodepng_error_text(error) << std::endl;
+
+  //the pixels are now in the vector "image", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ...
+}
+
+10.2. decoder C example
+-----------------------
+
+#include "lodepng.h"
+
+int main(int argc, char *argv[])
+{
+  unsigned error;
+  unsigned char* image;
+  size_t width, height;
+  const char* filename = argc > 1 ? argv[1] : "test.png";
+
+  error = lodepng_decode32_file(&image, &width, &height, filename);
+
+  if(error) printf("decoder error %u: %s\n", error, lodepng_error_text(error));
+
+  / * use image here * /
+
+  free(image);
+  return 0;
+}
+
+
+11. changes
+-----------
+
+The version number of LodePNG is the date of the change given in the format
+yyyymmdd.
+
+Some changes aren't backwards compatible. Those are indicated with a (!)
+symbol.
+
+*) 23 aug 2014: Reduced needless memory usage of decoder.
+*) 28 jun 2014: Removed fix_png setting, always support palette OOB for
+    simplicity. Made ColorProfile public.
+*) 09 jun 2014: Faster encoder by fixing hash bug and more zeros optimization.
+*) 22 dec 2013: Power of two windowsize required for optimization.
+*) 15 apr 2013: Fixed bug with LAC_ALPHA and color key.
+*) 25 mar 2013: Added an optional feature to ignore some PNG errors (fix_png).
+*) 11 mar 2013 (!): Bugfix with custom free. Changed from "my" to "lodepng_"
+    prefix for the custom allocators and made it possible with a new #define to
+    use custom ones in your project without needing to change lodepng's code.
+*) 28 jan 2013: Bugfix with color key.
+*) 27 okt 2012: Tweaks in text chunk keyword length error handling.
+*) 8 okt 2012 (!): Added new filter strategy (entropy) and new auto color mode.
+    (no palette). Better deflate tree encoding. New compression tweak settings.
+    Faster color conversions while decoding. Some internal cleanups.
+*) 23 sep 2012: Reduced warnings in Visual Studio a little bit.
+*) 1 sep 2012 (!): Removed #define's for giving custom (de)compression functions
+    and made it work with function pointers instead.
+*) 23 jun 2012: Added more filter strategies. Made it easier to use custom alloc
+    and free functions and toggle #defines from compiler flags. Small fixes.
+*) 6 may 2012 (!): Made plugging in custom zlib/deflate functions more flexible.
+*) 22 apr 2012 (!): Made interface more consistent, renaming a lot. Removed
+    redundant C++ codec classes. Reduced amount of structs. Everything changed,
+    but it is cleaner now imho and functionality remains the same. Also fixed
+    several bugs and shrinked the implementation code. Made new samples.
+*) 6 nov 2011 (!): By default, the encoder now automatically chooses the best
+    PNG color model and bit depth, based on the amount and type of colors of the
+    raw image. For this, autoLeaveOutAlphaChannel replaced by auto_choose_color.
+*) 9 okt 2011: simpler hash chain implementation for the encoder.
+*) 8 sep 2011: lz77 encoder lazy matching instead of greedy matching.
+*) 23 aug 2011: tweaked the zlib compression parameters after benchmarking.
+    A bug with the PNG filtertype heuristic was fixed, so that it chooses much
+    better ones (it's quite significant). A setting to do an experimental, slow,
+    brute force search for PNG filter types is added.
+*) 17 aug 2011 (!): changed some C zlib related function names.
+*) 16 aug 2011: made the code less wide (max 120 characters per line).
+*) 17 apr 2011: code cleanup. Bugfixes. Convert low to 16-bit per sample colors.
+*) 21 feb 2011: fixed compiling for C90. Fixed compiling with sections disabled.
+*) 11 dec 2010: encoding is made faster, based on suggestion by Peter Eastman
+    to optimize long sequences of zeros.
+*) 13 nov 2010: added LodePNG_InfoColor_hasPaletteAlpha and
+    LodePNG_InfoColor_canHaveAlpha functions for convenience.
+*) 7 nov 2010: added LodePNG_error_text function to get error code description.
+*) 30 okt 2010: made decoding slightly faster
+*) 26 okt 2010: (!) changed some C function and struct names (more consistent).
+     Reorganized the documentation and the declaration order in the header.
+*) 08 aug 2010: only changed some comments and external samples.
+*) 05 jul 2010: fixed bug thanks to warnings in the new gcc version.
+*) 14 mar 2010: fixed bug where too much memory was allocated for char buffers.
+*) 02 sep 2008: fixed bug where it could create empty tree that linux apps could
+    read by ignoring the problem but windows apps couldn't.
+*) 06 jun 2008: added more error checks for out of memory cases.
+*) 26 apr 2008: added a few more checks here and there to ensure more safety.
+*) 06 mar 2008: crash with encoding of strings fixed
+*) 02 feb 2008: support for international text chunks added (iTXt)
+*) 23 jan 2008: small cleanups, and #defines to divide code in sections
+*) 20 jan 2008: support for unknown chunks allowing using LodePNG for an editor.
+*) 18 jan 2008: support for tIME and pHYs chunks added to encoder and decoder.
+*) 17 jan 2008: ability to encode and decode compressed zTXt chunks added
+    Also vareous fixes, such as in the deflate and the padding bits code.
+*) 13 jan 2008: Added ability to encode Adam7-interlaced images. Improved
+    filtering code of encoder.
+*) 07 jan 2008: (!) changed LodePNG to use ISO C90 instead of C++. A
+    C++ wrapper around this provides an interface almost identical to before.
+    Having LodePNG be pure ISO C90 makes it more portable. The C and C++ code
+    are together in these files but it works both for C and C++ compilers.
+*) 29 dec 2007: (!) changed most integer types to unsigned int + other tweaks
+*) 30 aug 2007: bug fixed which makes this Borland C++ compatible
+*) 09 aug 2007: some VS2005 warnings removed again
+*) 21 jul 2007: deflate code placed in new namespace separate from zlib code
+*) 08 jun 2007: fixed bug with 2- and 4-bit color, and small interlaced images
+*) 04 jun 2007: improved support for Visual Studio 2005: crash with accessing
+    invalid std::vector element [0] fixed, and level 3 and 4 warnings removed
+*) 02 jun 2007: made the encoder add a tag with version by default
+*) 27 may 2007: zlib and png code separated (but still in the same file),
+    simple encoder/decoder functions added for more simple usage cases
+*) 19 may 2007: minor fixes, some code cleaning, new error added (error 69),
+    moved some examples from here to lodepng_examples.cpp
+*) 12 may 2007: palette decoding bug fixed
+*) 24 apr 2007: changed the license from BSD to the zlib license
+*) 11 mar 2007: very simple addition: ability to encode bKGD chunks.
+*) 04 mar 2007: (!) tEXt chunk related fixes, and support for encoding
+    palettized PNG images. Plus little interface change with palette and texts.
+*) 03 mar 2007: Made it encode dynamic Huffman shorter with repeat codes.
+    Fixed a bug where the end code of a block had length 0 in the Huffman tree.
+*) 26 feb 2007: Huffman compression with dynamic trees (BTYPE 2) now implemented
+    and supported by the encoder, resulting in smaller PNGs at the output.
+*) 27 jan 2007: Made the Adler-32 test faster so that a timewaste is gone.
+*) 24 jan 2007: gave encoder an error interface. Added color conversion from any
+    greyscale type to 8-bit greyscale with or without alpha.
+*) 21 jan 2007: (!) Totally changed the interface. It allows more color types
+    to convert to and is more uniform. See the manual for how it works now.
+*) 07 jan 2007: Some cleanup & fixes, and a few changes over the last days:
+    encode/decode custom tEXt chunks, separate classes for zlib & deflate, and
+    at last made the decoder give errors for incorrect Adler32 or Crc.
+*) 01 jan 2007: Fixed bug with encoding PNGs with less than 8 bits per channel.
+*) 29 dec 2006: Added support for encoding images without alpha channel, and
+    cleaned out code as well as making certain parts faster.
+*) 28 dec 2006: Added "Settings" to the encoder.
+*) 26 dec 2006: The encoder now does LZ77 encoding and produces much smaller files now.
+    Removed some code duplication in the decoder. Fixed little bug in an example.
+*) 09 dec 2006: (!) Placed output parameters of public functions as first parameter.
+    Fixed a bug of the decoder with 16-bit per color.
+*) 15 okt 2006: Changed documentation structure
+*) 09 okt 2006: Encoder class added. It encodes a valid PNG image from the
+    given image buffer, however for now it's not compressed.
+*) 08 sep 2006: (!) Changed to interface with a Decoder class
+*) 30 jul 2006: (!) LodePNG_InfoPng , width and height are now retrieved in different
+    way. Renamed decodePNG to decodePNGGeneric.
+*) 29 jul 2006: (!) Changed the interface: image info is now returned as a
+    struct of type LodePNG::LodePNG_Info, instead of a vector, which was a bit clumsy.
+*) 28 jul 2006: Cleaned the code and added new error checks.
+    Corrected terminology "deflate" into "inflate".
+*) 23 jun 2006: Added SDL example in the documentation in the header, this
+    example allows easy debugging by displaying the PNG and its transparency.
+*) 22 jun 2006: (!) Changed way to obtain error value. Added
+    loadFile function for convenience. Made decodePNG32 faster.
+*) 21 jun 2006: (!) Changed type of info vector to unsigned.
+    Changed position of palette in info vector. Fixed an important bug that
+    happened on PNGs with an uncompressed block.
+*) 16 jun 2006: Internally changed unsigned into unsigned where
+    needed, and performed some optimizations.
+*) 07 jun 2006: (!) Renamed functions to decodePNG and placed them
+    in LodePNG namespace. Changed the order of the parameters. Rewrote the
+    documentation in the header. Renamed files to lodepng.cpp and lodepng.h
+*) 22 apr 2006: Optimized and improved some code
+*) 07 sep 2005: (!) Changed to std::vector interface
+*) 12 aug 2005: Initial release (C++, decoder only)
+
+
+12. contact information
+-----------------------
+
+Feel free to contact me with suggestions, problems, comments, ... concerning
+LodePNG. If you encounter a PNG image that doesn't work properly with this
+decoder, feel free to send it and I'll use it to find and fix the problem.
+
+My email address is (puzzle the account and domain together with an @ symbol):
+Domain: gmail dot com.
+Account: lode dot vandevenne.
+
+
+Copyright (c) 2005-2014 Lode Vandevenne
+*/

+ 6329 - 0
src/libraries/stb/stb_image.h

@@ -0,0 +1,6329 @@
+/* stb_image - v2.02 - public domain image loader - http://nothings.org/stb_image.h
+                                     no warranty implied; use at your own risk
+
+   Do this:
+      #define STB_IMAGE_IMPLEMENTATION
+   before you include this file in *one* C or C++ file to create the implementation.
+
+   // i.e. it should look like this:
+   #include ...
+   #include ...
+   #include ...
+   #define STB_IMAGE_IMPLEMENTATION
+   #include "stb_image.h"
+
+   You can #define STBI_ASSERT(x) before the #include to avoid using assert.h.
+   And #define STBI_MALLOC, STBI_REALLOC, and STBI_FREE to avoid using malloc,realloc,free
+
+
+   QUICK NOTES:
+      Primarily of interest to game developers and other people who can
+          avoid problematic images and only need the trivial interface
+
+      JPEG baseline & progressive (12 bpc/arithmetic not supported, same as stock IJG lib)
+      PNG 1/2/4/8-bit-per-channel (16 bpc not supported)
+
+      TGA (not sure what subset, if a subset)
+      BMP non-1bpp, non-RLE
+      PSD (composited view only, no extra channels)
+
+      GIF (*comp always reports as 4-channel)
+      HDR (radiance rgbE format)
+      PIC (Softimage PIC)
+      PNM (PPM and PGM binary only)
+
+      - decode from memory or through FILE (define STBI_NO_STDIO to remove code)
+      - decode from arbitrary I/O callbacks
+      - SIMD acceleration on x86/x64 (SSE2) and ARM (NEON)
+
+   Full documentation under "DOCUMENTATION" below.
+
+
+   Revision 2.00 release notes:
+
+      - Progressive JPEG is now supported.
+
+      - PPM and PGM binary formats are now supported, thanks to Ken Miller.
+
+      - x86 platforms now make use of SSE2 SIMD instructions for
+        JPEG decoding, and ARM platforms can use NEON SIMD if requested.
+        This work was done by Fabian "ryg" Giesen. SSE2 is used by
+        default, but NEON must be enabled explicitly; see docs.
+
+        With other JPEG optimizations included in this version, we see
+        2x speedup on a JPEG on an x86 machine, and a 1.5x speedup
+        on a JPEG on an ARM machine, relative to previous versions of this
+        library. The same results will not obtain for all JPGs and for all
+        x86/ARM machines. (Note that progressive JPEGs are significantly
+        slower to decode than regular JPEGs.) This doesn't mean that this
+        is the fastest JPEG decoder in the land; rather, it brings it
+        closer to parity with standard libraries. If you want the fastest
+        decode, look elsewhere. (See "Philosophy" section of docs below.)
+
+        See final bullet items below for more info on SIMD.
+
+      - Added STBI_MALLOC, STBI_REALLOC, and STBI_FREE macros for replacing
+        the memory allocator. Unlike other STBI libraries, these macros don't
+        support a context parameter, so if you need to pass a context in to
+        the allocator, you'll have to store it in a global or a thread-local
+        variable.
+
+      - Split existing STBI_NO_HDR flag into two flags, STBI_NO_HDR and
+        STBI_NO_LINEAR.
+            STBI_NO_HDR:     suppress implementation of .hdr reader format
+            STBI_NO_LINEAR:  suppress high-dynamic-range light-linear float API
+
+      - You can suppress implementation of any of the decoders to reduce
+        your code footprint by #defining one or more of the following
+        symbols before creating the implementation.
+
+            STBI_NO_JPEG
+            STBI_NO_PNG
+            STBI_NO_BMP
+            STBI_NO_PSD
+            STBI_NO_TGA
+            STBI_NO_GIF
+            STBI_NO_HDR
+            STBI_NO_PIC
+            STBI_NO_PNM   (.ppm and .pgm)
+
+      - You can request *only* certain decoders and suppress all other ones
+        (this will be more forward-compatible, as addition of new decoders
+        doesn't require you to disable them explicitly):
+
+            STBI_ONLY_JPEG
+            STBI_ONLY_PNG
+            STBI_ONLY_BMP
+            STBI_ONLY_PSD
+            STBI_ONLY_TGA
+            STBI_ONLY_GIF
+            STBI_ONLY_HDR
+            STBI_ONLY_PIC
+            STBI_ONLY_PNM   (.ppm and .pgm)
+
+         Note that you can define multiples of these, and you will get all
+         of them ("only x" and "only y" is interpreted to mean "only x&y").
+
+       - If you use STBI_NO_PNG (or _ONLY_ without PNG), and you still
+         want the zlib decoder to be available, #define STBI_SUPPORT_ZLIB
+
+      - Compilation of all SIMD code can be suppressed with
+            #define STBI_NO_SIMD
+        It should not be necessary to disable SIMD unless you have issues
+        compiling (e.g. using an x86 compiler which doesn't support SSE
+        intrinsics or that doesn't support the method used to detect
+        SSE2 support at run-time), and even those can be reported as
+        bugs so I can refine the built-in compile-time checking to be
+        smarter.
+
+      - The old STBI_SIMD system which allowed installing a user-defined
+        IDCT etc. has been removed. If you need this, don't upgrade. My
+        assumption is that almost nobody was doing this, and those who
+        were will find the built-in SIMD more satisfactory anyway.
+
+      - RGB values computed for JPEG images are slightly different from
+        previous versions of stb_image. (This is due to using less
+        integer precision in SIMD.) The C code has been adjusted so
+        that the same RGB values will be computed regardless of whether
+        SIMD support is available, so your app should always produce
+        consistent results. But these results are slightly different from
+        previous versions. (Specifically, about 3% of available YCbCr values
+        will compute different RGB results from pre-1.49 versions by +-1;
+        most of the deviating values are one smaller in the G channel.)
+
+      - If you must produce consistent results with previous versions of
+        stb_image, #define STBI_JPEG_OLD and you will get the same results
+        you used to; however, you will not get the SIMD speedups for
+        the YCbCr-to-RGB conversion step (although you should still see
+        significant JPEG speedup from the other changes).
+
+        Please note that STBI_JPEG_OLD is a temporary feature; it will be
+        removed in future versions of the library. It is only intended for
+        near-term back-compatibility use.
+
+
+   Latest revision history:
+      2.02  (2015-01-19) fix incorrect assert, fix warning
+      2.01  (2015-01-17) fix various warnings
+      2.00b (2014-12-25) fix STBI_MALLOC in progressive JPEG
+      2.00  (2014-12-25) optimize JPEG, including x86 SSE2 & ARM NEON SIMD
+                         progressive JPEG
+                         PGM/PPM support
+                         STBI_MALLOC,STBI_REALLOC,STBI_FREE
+                         STBI_NO_*, STBI_ONLY_*
+                         GIF bugfix
+      1.48  (2014-12-14) fix incorrectly-named assert()
+      1.47  (2014-12-14) 1/2/4-bit PNG support (both grayscale and paletted)
+                         optimize PNG
+                         fix bug in interlaced PNG with user-specified channel count
+      1.46  (2014-08-26) fix broken tRNS chunk in non-paletted PNG
+      1.45  (2014-08-16) workaround MSVC-ARM internal compiler error by wrapping malloc
+
+   See end of file for full revision history.
+
+
+ ============================    Contributors    =========================
+
+ Image formats                                Bug fixes & warning fixes
+    Sean Barrett (jpeg, png, bmp)                Marc LeBlanc
+    Nicolas Schulz (hdr, psd)                    Christpher Lloyd
+    Jonathan Dummer (tga)                        Dave Moore
+    Jean-Marc Lienher (gif)                      Won Chun
+    Tom Seddon (pic)                             the Horde3D community
+    Thatcher Ulrich (psd)                        Janez Zemva
+    Ken Miller (pgm, ppm)                        Jonathan Blow
+                                                 Laurent Gomila
+                                                 Aruelien Pocheville
+ Extensions, features                            Ryamond Barbiero
+    Jetro Lauha (stbi_info)                      David Woo
+    Martin "SpartanJ" Golini (stbi_info)         Martin Golini
+    James "moose2000" Brown (iPhone PNG)         Roy Eltham
+    Ben "Disch" Wenger (io callbacks)            Luke Graham
+    Omar Cornut (1/2/4-bit PNG)                  Thomas Ruf
+                                                 John Bartholomew
+                                                 Ken Hamada
+ Optimizations & bugfixes                        Cort Stratton
+    Fabian "ryg" Giesen                          Blazej Dariusz Roszkowski
+    Arseny Kapoulkine                            Thibault Reuille
+                                                 Paul Du Bois
+                                                 Guillaume George
+  If your name should be here but                Jerry Jansson
+  isn't, let Sean know.                          Hayaki Saito
+                                                 Johan Duparc
+                                                 Ronny Chevalier
+                                                 Michal Cichon
+                                                 Tero Hanninen
+                                                 Sergio Gonzalez
+                                                 Cass Everitt
+                                                 Engin Manap
+
+License:
+   This software is in the public domain. Where that dedication is not
+   recognized, you are granted a perpetual, irrevocable license to copy
+   and modify this file however you want.
+
+*/
+
+#ifndef STBI_INCLUDE_STB_IMAGE_H
+#define STBI_INCLUDE_STB_IMAGE_H
+
+// DOCUMENTATION
+//
+// Limitations:
+//    - no 16-bit-per-channel PNG
+//    - no 12-bit-per-channel JPEG
+//    - no JPEGs with arithmetic coding
+//    - no 1-bit BMP
+//    - GIF always returns *comp=4
+//
+// Basic usage (see HDR discussion below for HDR usage):
+//    int x,y,n;
+//    unsigned char *data = stbi_load(filename, &x, &y, &n, 0);
+//    // ... process data if not NULL ...
+//    // ... x = width, y = height, n = # 8-bit components per pixel ...
+//    // ... replace '0' with '1'..'4' to force that many components per pixel
+//    // ... but 'n' will always be the number that it would have been if you said 0
+//    stbi_image_free(data)
+//
+// Standard parameters:
+//    int *x       -- outputs image width in pixels
+//    int *y       -- outputs image height in pixels
+//    int *comp    -- outputs # of image components in image file
+//    int req_comp -- if non-zero, # of image components requested in result
+//
+// The return value from an image loader is an 'unsigned char *' which points
+// to the pixel data, or NULL on an allocation failure or if the image is
+// corrupt or invalid. The pixel data consists of *y scanlines of *x pixels,
+// with each pixel consisting of N interleaved 8-bit components; the first
+// pixel pointed to is top-left-most in the image. There is no padding between
+// image scanlines or between pixels, regardless of format. The number of
+// components N is 'req_comp' if req_comp is non-zero, or *comp otherwise.
+// If req_comp is non-zero, *comp has the number of components that _would_
+// have been output otherwise. E.g. if you set req_comp to 4, you will always
+// get RGBA output, but you can check *comp to see if it's trivially opaque
+// because e.g. there were only 3 channels in the source image.
+//
+// An output image with N components has the following components interleaved
+// in this order in each pixel:
+//
+//     N=#comp     components
+//       1           grey
+//       2           grey, alpha
+//       3           red, green, blue
+//       4           red, green, blue, alpha
+//
+// If image loading fails for any reason, the return value will be NULL,
+// and *x, *y, *comp will be unchanged. The function stbi_failure_reason()
+// can be queried for an extremely brief, end-user unfriendly explanation
+// of why the load failed. Define STBI_NO_FAILURE_STRINGS to avoid
+// compiling these strings at all, and STBI_FAILURE_USERMSG to get slightly
+// more user-friendly ones.
+//
+// Paletted PNG, BMP, GIF, and PIC images are automatically depalettized.
+//
+// ===========================================================================
+//
+// Philosophy
+//
+// stb libraries are designed with the following priorities:
+//
+//    1. easy to use
+//    2. easy to maintain
+//    3. good performance
+//
+// Sometimes I let "good performance" creep up in priority over "easy to maintain",
+// and for best performance I may provide less-easy-to-use APIs that give higher
+// performance, in addition to the easy to use ones. Nevertheless, it's important
+// to keep in mind that from the standpoint of you, a client of this library,
+// all you care about is #1 and #3, and stb libraries do not emphasize #3 above all.
+//
+// Some secondary priorities arise directly from the first two, some of which
+// make more explicit reasons why performance can't be emphasized.
+//
+//    - Portable ("ease of use")
+//    - Small footprint ("easy to maintain")
+//    - No dependencies ("ease of use")
+//
+// ===========================================================================
+//
+// I/O callbacks
+//
+// I/O callbacks allow you to read from arbitrary sources, like packaged
+// files or some other source. Data read from callbacks are processed
+// through a small internal buffer (currently 128 bytes) to try to reduce
+// overhead.
+//
+// The three functions you must define are "read" (reads some bytes of data),
+// "skip" (skips some bytes of data), "eof" (reports if the stream is at the end).
+//
+// ===========================================================================
+//
+// SIMD support
+//
+// The JPEG decoder will try to automatically use SIMD kernels on x86 when
+// supported by the compiler. For ARM Neon support, you must explicitly
+// request it.
+//
+// (The old do-it-yourself SIMD API is no longer supported in the current
+// code.)
+//
+// On x86, SSE2 will automatically be used when available based on a run-time
+// test; if not, the generic C versions are used as a fall-back. On ARM targets,
+// the typical path is to have separate builds for NEON and non-NEON devices
+// (at least this is true for iOS and Android). Therefore, the NEON support is
+// toggled by a build flag: define STBI_NEON to get NEON loops.
+//
+// The output of the JPEG decoder is slightly different from versions where
+// SIMD support was introduced (that is, for versions before 1.49). The
+// difference is only +-1 in the 8-bit RGB channels, and only on a small
+// fraction of pixels. You can force the pre-1.49 behavior by defining
+// STBI_JPEG_OLD, but this will disable some of the SIMD decoding path
+// and hence cost some performance.
+//
+// If for some reason you do not want to use any of SIMD code, or if
+// you have issues compiling it, you can disable it entirely by
+// defining STBI_NO_SIMD.
+//
+// ===========================================================================
+//
+// HDR image support   (disable by defining STBI_NO_HDR)
+//
+// stb_image now supports loading HDR images in general, and currently
+// the Radiance .HDR file format, although the support is provided
+// generically. You can still load any file through the existing interface;
+// if you attempt to load an HDR file, it will be automatically remapped to
+// LDR, assuming gamma 2.2 and an arbitrary scale factor defaulting to 1;
+// both of these constants can be reconfigured through this interface:
+//
+//     stbi_hdr_to_ldr_gamma(2.2f);
+//     stbi_hdr_to_ldr_scale(1.0f);
+//
+// (note, do not use _inverse_ constants; stbi_image will invert them
+// appropriately).
+//
+// Additionally, there is a new, parallel interface for loading files as
+// (linear) floats to preserve the full dynamic range:
+//
+//    float *data = stbi_loadf(filename, &x, &y, &n, 0);
+//
+// If you load LDR images through this interface, those images will
+// be promoted to floating point values, run through the inverse of
+// constants corresponding to the above:
+//
+//     stbi_ldr_to_hdr_scale(1.0f);
+//     stbi_ldr_to_hdr_gamma(2.2f);
+//
+// Finally, given a filename (or an open file or memory block--see header
+// file for details) containing image data, you can query for the "most
+// appropriate" interface to use (that is, whether the image is HDR or
+// not), using:
+//
+//     stbi_is_hdr(char *filename);
+//
+// ===========================================================================
+//
+// iPhone PNG support:
+//
+// By default we convert iphone-formatted PNGs back to RGB, even though
+// they are internally encoded differently. You can disable this conversion
+// by by calling stbi_convert_iphone_png_to_rgb(0), in which case
+// you will always just get the native iphone "format" through (which
+// is BGR stored in RGB).
+//
+// Call stbi_set_unpremultiply_on_load(1) as well to force a divide per
+// pixel to remove any premultiplied alpha *only* if the image file explicitly
+// says there's premultiplied data (currently only happens in iPhone images,
+// and only if iPhone convert-to-rgb processing is on).
+//
+
+
+#ifndef STBI_NO_STDIO
+#include <stdio.h>
+#endif // STBI_NO_STDIO
+
+#define STBI_VERSION 1
+
+enum
+{
+   STBI_default = 0, // only used for req_comp
+
+   STBI_grey       = 1,
+   STBI_grey_alpha = 2,
+   STBI_rgb        = 3,
+   STBI_rgb_alpha  = 4
+};
+
+typedef unsigned char stbi_uc;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef STB_IMAGE_STATIC
+#define STBIDEF static
+#else
+#define STBIDEF extern
+#endif
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// PRIMARY API - works on images of any type
+//
+
+//
+// load image by filename, open file, or memory buffer
+//
+
+typedef struct
+{
+   int      (*read)  (void *user,char *data,int size);   // fill 'data' with 'size' bytes.  return number of bytes actually read
+   void     (*skip)  (void *user,int n);                 // skip the next 'n' bytes, or 'unget' the last -n bytes if negative
+   int      (*eof)   (void *user);                       // returns nonzero if we are at end of file/data
+} stbi_io_callbacks;
+
+STBIDEF stbi_uc *stbi_load               (char              const *filename,           int *x, int *y, int *comp, int req_comp);
+STBIDEF stbi_uc *stbi_load_from_memory   (stbi_uc           const *buffer, int len   , int *x, int *y, int *comp, int req_comp);
+STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk  , void *user, int *x, int *y, int *comp, int req_comp);
+
+#ifndef STBI_NO_STDIO
+STBIDEF stbi_uc *stbi_load_from_file  (FILE *f,                  int *x, int *y, int *comp, int req_comp);
+// for stbi_load_from_file, file pointer is left pointing immediately after image
+#endif
+
+#ifndef STBI_NO_LINEAR
+   STBIDEF float *stbi_loadf                 (char const *filename,           int *x, int *y, int *comp, int req_comp);
+   STBIDEF float *stbi_loadf_from_memory     (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp);
+   STBIDEF float *stbi_loadf_from_callbacks  (stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp);
+
+   #ifndef STBI_NO_STDIO
+   STBIDEF float *stbi_loadf_from_file  (FILE *f,                int *x, int *y, int *comp, int req_comp);
+   #endif
+#endif
+
+#ifndef STBI_NO_HDR
+   STBIDEF void   stbi_hdr_to_ldr_gamma(float gamma);
+   STBIDEF void   stbi_hdr_to_ldr_scale(float scale);
+#endif
+
+#ifndef STBI_NO_LINEAR
+   STBIDEF void   stbi_ldr_to_hdr_gamma(float gamma);
+   STBIDEF void   stbi_ldr_to_hdr_scale(float scale);
+#endif // STBI_NO_HDR
+
+// stbi_is_hdr is always defined, but always returns false if STBI_NO_HDR
+STBIDEF int    stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user);
+STBIDEF int    stbi_is_hdr_from_memory(stbi_uc const *buffer, int len);
+#ifndef STBI_NO_STDIO
+STBIDEF int      stbi_is_hdr          (char const *filename);
+STBIDEF int      stbi_is_hdr_from_file(FILE *f);
+#endif // STBI_NO_STDIO
+
+
+// get a VERY brief reason for failure
+// NOT THREADSAFE
+STBIDEF const char *stbi_failure_reason  (void);
+
+// free the loaded image -- this is just free()
+STBIDEF void     stbi_image_free      (void *retval_from_stbi_load);
+
+// get image dimensions & components without fully decoding
+STBIDEF int      stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp);
+STBIDEF int      stbi_info_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp);
+
+#ifndef STBI_NO_STDIO
+STBIDEF int      stbi_info            (char const *filename,     int *x, int *y, int *comp);
+STBIDEF int      stbi_info_from_file  (FILE *f,                  int *x, int *y, int *comp);
+
+#endif
+
+
+
+// for image formats that explicitly notate that they have premultiplied alpha,
+// we just return the colors as stored in the file. set this flag to force
+// unpremultiplication. results are undefined if the unpremultiply overflow.
+STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply);
+
+// indicate whether we should process iphone images back to canonical format,
+// or just pass them through "as-is"
+STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert);
+
+
+// ZLIB client - used by PNG, available for other purposes
+
+STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen);
+STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header);
+STBIDEF char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen);
+STBIDEF int   stbi_zlib_decode_buffer(char *obuffer, int olen, const char *ibuffer, int ilen);
+
+STBIDEF char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, int *outlen);
+STBIDEF int   stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+//
+//
+////   end header file   /////////////////////////////////////////////////////
+#endif // STBI_INCLUDE_STB_IMAGE_H
+
+#ifdef STB_IMAGE_IMPLEMENTATION
+
+#if defined(STBI_ONLY_JPEG) || defined(STBI_ONLY_PNG) || defined(STBI_ONLY_BMP) \
+  || defined(STBI_ONLY_TGA) || defined(STBI_ONLY_GIF) || defined(STBI_ONLY_PSD) \
+  || defined(STBI_ONLY_HDR) || defined(STBI_ONLY_PIC) || defined(STBI_ONLY_PNM) \
+  || defined(STBI_ONLY_ZLIB)
+   #ifndef STBI_ONLY_JPEG
+   #define STBI_NO_JPEG
+   #endif
+   #ifndef STBI_ONLY_PNG
+   #define STBI_NO_PNG
+   #endif
+   #ifndef STBI_ONLY_BMP
+   #define STBI_NO_BMP
+   #endif
+   #ifndef STBI_ONLY_PSD
+   #define STBI_NO_PSD
+   #endif
+   #ifndef STBI_ONLY_TGA
+   #define STBI_NO_TGA
+   #endif
+   #ifndef STBI_ONLY_GIF
+   #define STBI_NO_GIF
+   #endif
+   #ifndef STBI_ONLY_HDR
+   #define STBI_NO_HDR
+   #endif
+   #ifndef STBI_ONLY_PIC
+   #define STBI_NO_PIC
+   #endif
+   #ifndef STBI_ONLY_PNM
+   #define STBI_NO_PNM
+   #endif
+#endif
+
+#if defined(STBI_NO_PNG) && !defined(STBI_SUPPORT_ZLIB) && !defined(STBI_NO_ZLIB)
+#define STBI_NO_ZLIB
+#endif
+
+
+#include <stdarg.h>
+#include <stddef.h> // ptrdiff_t on osx
+#include <stdlib.h>
+#include <string.h>
+
+#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR)
+#include <math.h>  // ldexp
+#endif
+
+#ifndef STBI_NO_STDIO
+#include <stdio.h>
+#endif
+
+#ifndef STBI_ASSERT
+#include <assert.h>
+#define STBI_ASSERT(x) assert(x)
+#endif
+
+
+#ifndef _MSC_VER
+   #ifdef __cplusplus
+   #define stbi_inline inline
+   #else
+   #define stbi_inline
+   #endif
+#else
+   #define stbi_inline __forceinline
+#endif
+
+
+#ifdef _MSC_VER
+typedef unsigned short stbi__uint16;
+typedef   signed short stbi__int16;
+typedef unsigned int   stbi__uint32;
+typedef   signed int   stbi__int32;
+#else
+#include <stdint.h>
+typedef uint16_t stbi__uint16;
+typedef int16_t  stbi__int16;
+typedef uint32_t stbi__uint32;
+typedef int32_t  stbi__int32;
+#endif
+
+// should produce compiler error if size is wrong
+typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1];
+
+#ifdef _MSC_VER
+#define STBI_NOTUSED(v)  (void)(v)
+#else
+#define STBI_NOTUSED(v)  (void)sizeof(v)
+#endif
+
+#ifdef _MSC_VER
+#define STBI_HAS_LROTL
+#endif
+
+#ifdef STBI_HAS_LROTL
+   #define stbi_lrot(x,y)  _lrotl(x,y)
+#else
+   #define stbi_lrot(x,y)  (((x) << (y)) | ((x) >> (32 - (y))))
+#endif
+
+#if defined(STBI_MALLOC) && defined(STBI_FREE) && defined(STBI_REALLOC)
+// ok
+#elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && !defined(STBI_REALLOC)
+// ok
+#else
+#error "Must define all or none of STBI_MALLOC, STBI_FREE, and STBI_REALLOC."
+#endif
+
+#ifndef STBI_MALLOC
+#define STBI_MALLOC(sz)    malloc(sz)
+#define STBI_REALLOC(p,sz) realloc(p,sz)
+#define STBI_FREE(p)       free(p)
+#endif
+
+#if defined(__GNUC__) && !defined(__SSE2__) && !defined(STBI_NO_SIMD)
+// gcc doesn't support sse2 intrinsics unless you compile with -msse2,
+// (but compiling with -msse2 allows the compiler to use SSE2 everywhere;
+// this is just broken and gcc are jerks for not fixing it properly
+// http://www.virtualdub.org/blog/pivot/entry.php?id=363 )
+#define STBI_NO_SIMD
+#endif
+
+#if !defined(STBI_NO_SIMD) && (defined(__x86_64__) || defined(_M_X64) || defined(__i386) || defined(_M_IX86))
+#define STBI_SSE2
+#include <emmintrin.h>
+
+#ifdef _MSC_VER
+
+#if _MSC_VER >= 1400  // not VC6
+#include <intrin.h> // __cpuid
+static int stbi__cpuid3(void)
+{
+   int info[4];
+   __cpuid(info,1);
+   return info[3];
+}
+#else
+static int stbi__cpuid3(void)
+{
+   int res;
+   __asm {
+      mov  eax,1
+      cpuid
+      mov  res,edx
+   }
+   return res;
+}
+#endif
+
+#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name
+
+static int stbi__sse2_available()
+{
+   int info3 = stbi__cpuid3();
+   return ((info3 >> 26) & 1) != 0;
+}
+#else // assume GCC-style if not VC++
+#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16)))
+
+static int stbi__sse2_available()
+{
+#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 // GCC 4.8 or later
+   // GCC 4.8+ has a nice way to do this
+   return __builtin_cpu_supports("sse2");
+#else
+   // portable way to do this, preferably without using GCC inline ASM?
+   // just bail for now.
+   return 0;
+#endif
+}
+#endif
+#endif
+
+// ARM NEON
+#if defined(STBI_NO_SIMD) && defined(STBI_NEON)
+#undef STBI_NEON
+#endif
+
+#ifdef STBI_NEON
+#include <arm_neon.h>
+// assume GCC or Clang on ARM targets
+#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16)))
+#endif
+
+#ifndef STBI_SIMD_ALIGN
+#define STBI_SIMD_ALIGN(type, name) type name
+#endif
+
+///////////////////////////////////////////////
+//
+//  stbi__context struct and start_xxx functions
+
+// stbi__context structure is our basic context used by all images, so it
+// contains all the IO context, plus some basic image information
+typedef struct
+{
+   stbi__uint32 img_x, img_y;
+   int img_n, img_out_n;
+
+   stbi_io_callbacks io;
+   void *io_user_data;
+
+   int read_from_callbacks;
+   int buflen;
+   stbi_uc buffer_start[128];
+
+   stbi_uc *img_buffer, *img_buffer_end;
+   stbi_uc *img_buffer_original;
+} stbi__context;
+
+
+static void stbi__refill_buffer(stbi__context *s);
+
+// initialize a memory-decode context
+static void stbi__start_mem(stbi__context *s, stbi_uc const *buffer, int len)
+{
+   s->io.read = NULL;
+   s->read_from_callbacks = 0;
+   s->img_buffer = s->img_buffer_original = (stbi_uc *) buffer;
+   s->img_buffer_end = (stbi_uc *) buffer+len;
+}
+
+// initialize a callback-based context
+static void stbi__start_callbacks(stbi__context *s, stbi_io_callbacks *c, void *user)
+{
+   s->io = *c;
+   s->io_user_data = user;
+   s->buflen = sizeof(s->buffer_start);
+   s->read_from_callbacks = 1;
+   s->img_buffer_original = s->buffer_start;
+   stbi__refill_buffer(s);
+}
+
+#ifndef STBI_NO_STDIO
+
+static int stbi__stdio_read(void *user, char *data, int size)
+{
+   return (int) fread(data,1,size,(FILE*) user);
+}
+
+static void stbi__stdio_skip(void *user, int n)
+{
+   fseek((FILE*) user, n, SEEK_CUR);
+}
+
+static int stbi__stdio_eof(void *user)
+{
+   return feof((FILE*) user);
+}
+
+static stbi_io_callbacks stbi__stdio_callbacks =
+{
+   stbi__stdio_read,
+   stbi__stdio_skip,
+   stbi__stdio_eof,
+};
+
+static void stbi__start_file(stbi__context *s, FILE *f)
+{
+   stbi__start_callbacks(s, &stbi__stdio_callbacks, (void *) f);
+}
+
+//static void stop_file(stbi__context *s) { }
+
+#endif // !STBI_NO_STDIO
+
+static void stbi__rewind(stbi__context *s)
+{
+   // conceptually rewind SHOULD rewind to the beginning of the stream,
+   // but we just rewind to the beginning of the initial buffer, because
+   // we only use it after doing 'test', which only ever looks at at most 92 bytes
+   s->img_buffer = s->img_buffer_original;
+}
+
+#ifndef STBI_NO_JPEG
+static int      stbi__jpeg_test(stbi__context *s);
+static stbi_uc *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
+static int      stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp);
+#endif
+
+#ifndef STBI_NO_PNG
+static int      stbi__png_test(stbi__context *s);
+static stbi_uc *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
+static int      stbi__png_info(stbi__context *s, int *x, int *y, int *comp);
+#endif
+
+#ifndef STBI_NO_BMP
+static int      stbi__bmp_test(stbi__context *s);
+static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
+static int      stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp);
+#endif
+
+#ifndef STBI_NO_TGA
+static int      stbi__tga_test(stbi__context *s);
+static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
+static int      stbi__tga_info(stbi__context *s, int *x, int *y, int *comp);
+#endif
+
+#ifndef STBI_NO_PSD
+static int      stbi__psd_test(stbi__context *s);
+static stbi_uc *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
+static int      stbi__psd_info(stbi__context *s, int *x, int *y, int *comp);
+#endif
+
+#ifndef STBI_NO_HDR
+static int      stbi__hdr_test(stbi__context *s);
+static float   *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
+static int      stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp);
+#endif
+
+#ifndef STBI_NO_PIC
+static int      stbi__pic_test(stbi__context *s);
+static stbi_uc *stbi__pic_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
+static int      stbi__pic_info(stbi__context *s, int *x, int *y, int *comp);
+#endif
+
+#ifndef STBI_NO_GIF
+static int      stbi__gif_test(stbi__context *s);
+static stbi_uc *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
+static int      stbi__gif_info(stbi__context *s, int *x, int *y, int *comp);
+#endif
+
+#ifndef STBI_NO_PNM
+static int      stbi__pnm_test(stbi__context *s);
+static stbi_uc *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp);
+static int      stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp);
+#endif
+
+// this is not threadsafe
+static const char *stbi__g_failure_reason;
+
+STBIDEF const char *stbi_failure_reason(void)
+{
+   return stbi__g_failure_reason;
+}
+
+static int stbi__err(const char *str)
+{
+   stbi__g_failure_reason = str;
+   return 0;
+}
+
+static void *stbi__malloc(size_t size)
+{
+    return STBI_MALLOC(size);
+}
+
+// stbi__err - error
+// stbi__errpf - error returning pointer to float
+// stbi__errpuc - error returning pointer to unsigned char
+
+#ifdef STBI_NO_FAILURE_STRINGS
+   #define stbi__err(x,y)  0
+#elif defined(STBI_FAILURE_USERMSG)
+   #define stbi__err(x,y)  stbi__err(y)
+#else
+   #define stbi__err(x,y)  stbi__err(x)
+#endif
+
+#define stbi__errpf(x,y)   ((float *) (stbi__err(x,y)?NULL:NULL))
+#define stbi__errpuc(x,y)  ((unsigned char *) (stbi__err(x,y)?NULL:NULL))
+
+STBIDEF void stbi_image_free(void *retval_from_stbi_load)
+{
+   STBI_FREE(retval_from_stbi_load);
+}
+
+#ifndef STBI_NO_LINEAR
+static float   *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp);
+#endif
+
+#ifndef STBI_NO_HDR
+static stbi_uc *stbi__hdr_to_ldr(float   *data, int x, int y, int comp);
+#endif
+
+static unsigned char *stbi_load_main(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+{
+   #ifndef STBI_NO_JPEG
+   if (stbi__jpeg_test(s)) return stbi__jpeg_load(s,x,y,comp,req_comp);
+   #endif
+   #ifndef STBI_NO_PNG
+   if (stbi__png_test(s))  return stbi__png_load(s,x,y,comp,req_comp);
+   #endif
+   #ifndef STBI_NO_BMP
+   if (stbi__bmp_test(s))  return stbi__bmp_load(s,x,y,comp,req_comp);
+   #endif
+   #ifndef STBI_NO_GIF
+   if (stbi__gif_test(s))  return stbi__gif_load(s,x,y,comp,req_comp);
+   #endif
+   #ifndef STBI_NO_PSD
+   if (stbi__psd_test(s))  return stbi__psd_load(s,x,y,comp,req_comp);
+   #endif
+   #ifndef STBI_NO_PIC
+   if (stbi__pic_test(s))  return stbi__pic_load(s,x,y,comp,req_comp);
+   #endif
+   #ifndef STBI_NO_PNM
+   if (stbi__pnm_test(s))  return stbi__pnm_load(s,x,y,comp,req_comp);
+   #endif
+
+   #ifndef STBI_NO_HDR
+   if (stbi__hdr_test(s)) {
+      float *hdr = stbi__hdr_load(s, x,y,comp,req_comp);
+      return stbi__hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp);
+   }
+   #endif
+
+   #ifndef STBI_NO_TGA
+   // test tga last because it's a crappy test!
+   if (stbi__tga_test(s))
+      return stbi__tga_load(s,x,y,comp,req_comp);
+   #endif
+
+   return stbi__errpuc("unknown image type", "Image not of any known type, or corrupt");
+}
+
+#ifndef STBI_NO_STDIO
+
+static FILE *stbi__fopen(char const *filename, char const *mode)
+{
+   FILE *f;
+#if defined(_MSC_VER) && _MSC_VER >= 1400
+   if (0 != fopen_s(&f, filename, mode))
+      f=0;
+#else
+   f = fopen(filename, mode);
+#endif
+   return f;
+}
+
+
+STBIDEF stbi_uc *stbi_load(char const *filename, int *x, int *y, int *comp, int req_comp)
+{
+   FILE *f = stbi__fopen(filename, "rb");
+   unsigned char *result;
+   if (!f) return stbi__errpuc("can't fopen", "Unable to open file");
+   result = stbi_load_from_file(f,x,y,comp,req_comp);
+   fclose(f);
+   return result;
+}
+
+STBIDEF stbi_uc *stbi_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp)
+{
+   unsigned char *result;
+   stbi__context s;
+   stbi__start_file(&s,f);
+   result = stbi_load_main(&s,x,y,comp,req_comp);
+   if (result) {
+      // need to 'unget' all the characters in the IO buffer
+      fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR);
+   }
+   return result;
+}
+#endif //!STBI_NO_STDIO
+
+STBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp)
+{
+   stbi__context s;
+   stbi__start_mem(&s,buffer,len);
+   return stbi_load_main(&s,x,y,comp,req_comp);
+}
+
+STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp)
+{
+   stbi__context s;
+   stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user);
+   return stbi_load_main(&s,x,y,comp,req_comp);
+}
+
+#ifndef STBI_NO_LINEAR
+static float *stbi_loadf_main(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+{
+   unsigned char *data;
+   #ifndef STBI_NO_HDR
+   if (stbi__hdr_test(s))
+      return stbi__hdr_load(s,x,y,comp,req_comp);
+   #endif
+   data = stbi_load_main(s, x, y, comp, req_comp);
+   if (data)
+      return stbi__ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp);
+   return stbi__errpf("unknown image type", "Image not of any known type, or corrupt");
+}
+
+STBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp)
+{
+   stbi__context s;
+   stbi__start_mem(&s,buffer,len);
+   return stbi_loadf_main(&s,x,y,comp,req_comp);
+}
+
+STBIDEF float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp)
+{
+   stbi__context s;
+   stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user);
+   return stbi_loadf_main(&s,x,y,comp,req_comp);
+}
+
+#ifndef STBI_NO_STDIO
+STBIDEF float *stbi_loadf(char const *filename, int *x, int *y, int *comp, int req_comp)
+{
+   float *result;
+   FILE *f = stbi__fopen(filename, "rb");
+   if (!f) return stbi__errpf("can't fopen", "Unable to open file");
+   result = stbi_loadf_from_file(f,x,y,comp,req_comp);
+   fclose(f);
+   return result;
+}
+
+STBIDEF float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, int req_comp)
+{
+   stbi__context s;
+   stbi__start_file(&s,f);
+   return stbi_loadf_main(&s,x,y,comp,req_comp);
+}
+#endif // !STBI_NO_STDIO
+
+#endif // !STBI_NO_LINEAR
+
+// these is-hdr-or-not is defined independent of whether STBI_NO_LINEAR is
+// defined, for API simplicity; if STBI_NO_LINEAR is defined, it always
+// reports false!
+
+STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len)
+{
+   #ifndef STBI_NO_HDR
+   stbi__context s;
+   stbi__start_mem(&s,buffer,len);
+   return stbi__hdr_test(&s);
+   #else
+   STBI_NOTUSED(buffer);
+   STBI_NOTUSED(len);
+   return 0;
+   #endif
+}
+
+#ifndef STBI_NO_STDIO
+STBIDEF int      stbi_is_hdr          (char const *filename)
+{
+   FILE *f = stbi__fopen(filename, "rb");
+   int result=0;
+   if (f) {
+      result = stbi_is_hdr_from_file(f);
+      fclose(f);
+   }
+   return result;
+}
+
+STBIDEF int      stbi_is_hdr_from_file(FILE *f)
+{
+   #ifndef STBI_NO_HDR
+   stbi__context s;
+   stbi__start_file(&s,f);
+   return stbi__hdr_test(&s);
+   #else
+   STBI_NOTUSED(f);
+   return 0;
+   #endif
+}
+#endif // !STBI_NO_STDIO
+
+STBIDEF int      stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user)
+{
+   #ifndef STBI_NO_HDR
+   stbi__context s;
+   stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user);
+   return stbi__hdr_test(&s);
+   #else
+   STBI_NOTUSED(clbk);
+   STBI_NOTUSED(user);
+   return 0;
+   #endif
+}
+
+static float stbi__h2l_gamma_i=1.0f/2.2f, stbi__h2l_scale_i=1.0f;
+static float stbi__l2h_gamma=2.2f, stbi__l2h_scale=1.0f;
+
+#ifndef STBI_NO_LINEAR
+STBIDEF void   stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = gamma; }
+STBIDEF void   stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = scale; }
+#endif
+
+STBIDEF void   stbi_hdr_to_ldr_gamma(float gamma) { stbi__h2l_gamma_i = 1/gamma; }
+STBIDEF void   stbi_hdr_to_ldr_scale(float scale) { stbi__h2l_scale_i = 1/scale; }
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Common code used by all image loaders
+//
+
+enum
+{
+   STBI__SCAN_load=0,
+   STBI__SCAN_type,
+   STBI__SCAN_header
+};
+
+static void stbi__refill_buffer(stbi__context *s)
+{
+   int n = (s->io.read)(s->io_user_data,(char*)s->buffer_start,s->buflen);
+   if (n == 0) {
+      // at end of file, treat same as if from memory, but need to handle case
+      // where s->img_buffer isn't pointing to safe memory, e.g. 0-byte file
+      s->read_from_callbacks = 0;
+      s->img_buffer = s->buffer_start;
+      s->img_buffer_end = s->buffer_start+1;
+      *s->img_buffer = 0;
+   } else {
+      s->img_buffer = s->buffer_start;
+      s->img_buffer_end = s->buffer_start + n;
+   }
+}
+
+stbi_inline static stbi_uc stbi__get8(stbi__context *s)
+{
+   if (s->img_buffer < s->img_buffer_end)
+      return *s->img_buffer++;
+   if (s->read_from_callbacks) {
+      stbi__refill_buffer(s);
+      return *s->img_buffer++;
+   }
+   return 0;
+}
+
+stbi_inline static int stbi__at_eof(stbi__context *s)
+{
+   if (s->io.read) {
+      if (!(s->io.eof)(s->io_user_data)) return 0;
+      // if feof() is true, check if buffer = end
+      // special case: we've only got the special 0 character at the end
+      if (s->read_from_callbacks == 0) return 1;
+   }
+
+   return s->img_buffer >= s->img_buffer_end;
+}
+
+static void stbi__skip(stbi__context *s, int n)
+{
+   if (s->io.read) {
+      int blen = (int) (s->img_buffer_end - s->img_buffer);
+      if (blen < n) {
+         s->img_buffer = s->img_buffer_end;
+         (s->io.skip)(s->io_user_data, n - blen);
+         return;
+      }
+   }
+   s->img_buffer += n;
+}
+
+static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n)
+{
+   if (s->io.read) {
+      int blen = (int) (s->img_buffer_end - s->img_buffer);
+      if (blen < n) {
+         int res, count;
+
+         memcpy(buffer, s->img_buffer, blen);
+
+         count = (s->io.read)(s->io_user_data, (char*) buffer + blen, n - blen);
+         res = (count == (n-blen));
+         s->img_buffer = s->img_buffer_end;
+         return res;
+      }
+   }
+
+   if (s->img_buffer+n <= s->img_buffer_end) {
+      memcpy(buffer, s->img_buffer, n);
+      s->img_buffer += n;
+      return 1;
+   } else
+      return 0;
+}
+
+static int stbi__get16be(stbi__context *s)
+{
+   int z = stbi__get8(s);
+   return (z << 8) + stbi__get8(s);
+}
+
+static stbi__uint32 stbi__get32be(stbi__context *s)
+{
+   stbi__uint32 z = stbi__get16be(s);
+   return (z << 16) + stbi__get16be(s);
+}
+
+static int stbi__get16le(stbi__context *s)
+{
+   int z = stbi__get8(s);
+   return z + (stbi__get8(s) << 8);
+}
+
+static stbi__uint32 stbi__get32le(stbi__context *s)
+{
+   stbi__uint32 z = stbi__get16le(s);
+   return z + (stbi__get16le(s) << 16);
+}
+
+#define STBI__BYTECAST(x)  ((stbi_uc) ((x) & 255))  // truncate int to byte without warnings
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//  generic converter from built-in img_n to req_comp
+//    individual types do this automatically as much as possible (e.g. jpeg
+//    does all cases internally since it needs to colorspace convert anyway,
+//    and it never has alpha, so very few cases ). png can automatically
+//    interleave an alpha=255 channel, but falls back to this for other cases
+//
+//  assume data buffer is malloced, so malloc a new one and free that one
+//  only failure mode is malloc failing
+
+static stbi_uc stbi__compute_y(int r, int g, int b)
+{
+   return (stbi_uc) (((r*77) + (g*150) +  (29*b)) >> 8);
+}
+
+static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int req_comp, unsigned int x, unsigned int y)
+{
+   int i,j;
+   unsigned char *good;
+
+   if (req_comp == img_n) return data;
+   STBI_ASSERT(req_comp >= 1 && req_comp <= 4);
+
+   good = (unsigned char *) stbi__malloc(req_comp * x * y);
+   if (good == NULL) {
+      STBI_FREE(data);
+      return stbi__errpuc("outofmem", "Out of memory");
+   }
+
+   for (j=0; j < (int) y; ++j) {
+      unsigned char *src  = data + j * x * img_n   ;
+      unsigned char *dest = good + j * x * req_comp;
+
+      #define COMBO(a,b)  ((a)*8+(b))
+      #define CASE(a,b)   case COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b)
+      // convert source image with img_n components to one with req_comp components;
+      // avoid switch per pixel, so use switch per scanline and massive macros
+      switch (COMBO(img_n, req_comp)) {
+         CASE(1,2) dest[0]=src[0], dest[1]=255; break;
+         CASE(1,3) dest[0]=dest[1]=dest[2]=src[0]; break;
+         CASE(1,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=255; break;
+         CASE(2,1) dest[0]=src[0]; break;
+         CASE(2,3) dest[0]=dest[1]=dest[2]=src[0]; break;
+         CASE(2,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=src[1]; break;
+         CASE(3,4) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2],dest[3]=255; break;
+         CASE(3,1) dest[0]=stbi__compute_y(src[0],src[1],src[2]); break;
+         CASE(3,2) dest[0]=stbi__compute_y(src[0],src[1],src[2]), dest[1] = 255; break;
+         CASE(4,1) dest[0]=stbi__compute_y(src[0],src[1],src[2]); break;
+         CASE(4,2) dest[0]=stbi__compute_y(src[0],src[1],src[2]), dest[1] = src[3]; break;
+         CASE(4,3) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2]; break;
+         default: STBI_ASSERT(0);
+      }
+      #undef CASE
+   }
+
+   STBI_FREE(data);
+   return good;
+}
+
+#ifndef STBI_NO_LINEAR
+static float   *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp)
+{
+   int i,k,n;
+   float *output = (float *) stbi__malloc(x * y * comp * sizeof(float));
+   if (output == NULL) { STBI_FREE(data); return stbi__errpf("outofmem", "Out of memory"); }
+   // compute number of non-alpha components
+   if (comp & 1) n = comp; else n = comp-1;
+   for (i=0; i < x*y; ++i) {
+      for (k=0; k < n; ++k) {
+         output[i*comp + k] = (float) (pow(data[i*comp+k]/255.0f, stbi__l2h_gamma) * stbi__l2h_scale);
+      }
+      if (k < comp) output[i*comp + k] = data[i*comp+k]/255.0f;
+   }
+   STBI_FREE(data);
+   return output;
+}
+#endif
+
+#ifndef STBI_NO_HDR
+#define stbi__float2int(x)   ((int) (x))
+static stbi_uc *stbi__hdr_to_ldr(float   *data, int x, int y, int comp)
+{
+   int i,k,n;
+   stbi_uc *output = (stbi_uc *) stbi__malloc(x * y * comp);
+   if (output == NULL) { STBI_FREE(data); return stbi__errpuc("outofmem", "Out of memory"); }
+   // compute number of non-alpha components
+   if (comp & 1) n = comp; else n = comp-1;
+   for (i=0; i < x*y; ++i) {
+      for (k=0; k < n; ++k) {
+         float z = (float) pow(data[i*comp+k]*stbi__h2l_scale_i, stbi__h2l_gamma_i) * 255 + 0.5f;
+         if (z < 0) z = 0;
+         if (z > 255) z = 255;
+         output[i*comp + k] = (stbi_uc) stbi__float2int(z);
+      }
+      if (k < comp) {
+         float z = data[i*comp+k] * 255 + 0.5f;
+         if (z < 0) z = 0;
+         if (z > 255) z = 255;
+         output[i*comp + k] = (stbi_uc) stbi__float2int(z);
+      }
+   }
+   STBI_FREE(data);
+   return output;
+}
+#endif
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//  "baseline" JPEG/JFIF decoder
+//
+//    simple implementation
+//      - doesn't support delayed output of y-dimension
+//      - simple interface (only one output format: 8-bit interleaved RGB)
+//      - doesn't try to recover corrupt jpegs
+//      - doesn't allow partial loading, loading multiple at once
+//      - still fast on x86 (copying globals into locals doesn't help x86)
+//      - allocates lots of intermediate memory (full size of all components)
+//        - non-interleaved case requires this anyway
+//        - allows good upsampling (see next)
+//    high-quality
+//      - upsampled channels are bilinearly interpolated, even across blocks
+//      - quality integer IDCT derived from IJG's 'slow'
+//    performance
+//      - fast huffman; reasonable integer IDCT
+//      - some SIMD kernels for common paths on targets with SSE2/NEON
+//      - uses a lot of intermediate memory, could cache poorly
+
+#ifndef STBI_NO_JPEG
+
+// huffman decoding acceleration
+#define FAST_BITS   9  // larger handles more cases; smaller stomps less cache
+
+typedef struct
+{
+   stbi_uc  fast[1 << FAST_BITS];
+   // weirdly, repacking this into AoS is a 10% speed loss, instead of a win
+   stbi__uint16 code[256];
+   stbi_uc  values[256];
+   stbi_uc  size[257];
+   unsigned int maxcode[18];
+   int    delta[17];   // old 'firstsymbol' - old 'firstcode'
+} stbi__huffman;
+
+typedef struct
+{
+   stbi__context *s;
+   stbi__huffman huff_dc[4];
+   stbi__huffman huff_ac[4];
+   stbi_uc dequant[4][64];
+   stbi__int16 fast_ac[4][1 << FAST_BITS];
+
+// sizes for components, interleaved MCUs
+   int img_h_max, img_v_max;
+   int img_mcu_x, img_mcu_y;
+   int img_mcu_w, img_mcu_h;
+
+// definition of jpeg image component
+   struct
+   {
+      int id;
+      int h,v;
+      int tq;
+      int hd,ha;
+      int dc_pred;
+
+      int x,y,w2,h2;
+      stbi_uc *data;
+      void *raw_data, *raw_coeff;
+      stbi_uc *linebuf;
+      short   *coeff;   // progressive only
+      int      coeff_w, coeff_h; // number of 8x8 coefficient blocks
+   } img_comp[4];
+
+   stbi__uint32   code_buffer; // jpeg entropy-coded buffer
+   int            code_bits;   // number of valid bits
+   unsigned char  marker;      // marker seen while filling entropy buffer
+   int            nomore;      // flag if we saw a marker so must stop
+
+   int            progressive;
+   int            spec_start;
+   int            spec_end;
+   int            succ_high;
+   int            succ_low;
+   int            eob_run;
+
+   int scan_n, order[4];
+   int restart_interval, todo;
+
+// kernels
+   void (*idct_block_kernel)(stbi_uc *out, int out_stride, short data[64]);
+   void (*YCbCr_to_RGB_kernel)(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step);
+   stbi_uc *(*resample_row_hv_2_kernel)(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs);
+} stbi__jpeg;
+
+static int stbi__build_huffman(stbi__huffman *h, int *count)
+{
+   int i,j,k=0,code;
+   // build size list for each symbol (from JPEG spec)
+   for (i=0; i < 16; ++i)
+      for (j=0; j < count[i]; ++j)
+         h->size[k++] = (stbi_uc) (i+1);
+   h->size[k] = 0;
+
+   // compute actual symbols (from jpeg spec)
+   code = 0;
+   k = 0;
+   for(j=1; j <= 16; ++j) {
+      // compute delta to add to code to compute symbol id
+      h->delta[j] = k - code;
+      if (h->size[k] == j) {
+         while (h->size[k] == j)
+            h->code[k++] = (stbi__uint16) (code++);
+         if (code-1 >= (1 << j)) return stbi__err("bad code lengths","Corrupt JPEG");
+      }
+      // compute largest code + 1 for this size, preshifted as needed later
+      h->maxcode[j] = code << (16-j);
+      code <<= 1;
+   }
+   h->maxcode[j] = 0xffffffff;
+
+   // build non-spec acceleration table; 255 is flag for not-accelerated
+   memset(h->fast, 255, 1 << FAST_BITS);
+   for (i=0; i < k; ++i) {
+      int s = h->size[i];
+      if (s <= FAST_BITS) {
+         int c = h->code[i] << (FAST_BITS-s);
+         int m = 1 << (FAST_BITS-s);
+         for (j=0; j < m; ++j) {
+            h->fast[c+j] = (stbi_uc) i;
+         }
+      }
+   }
+   return 1;
+}
+
+// build a table that decodes both magnitude and value of small ACs in
+// one go.
+static void stbi__build_fast_ac(stbi__int16 *fast_ac, stbi__huffman *h)
+{
+   int i;
+   for (i=0; i < (1 << FAST_BITS); ++i) {
+      stbi_uc fast = h->fast[i];
+      fast_ac[i] = 0;
+      if (fast < 255) {
+         int rs = h->values[fast];
+         int run = (rs >> 4) & 15;
+         int magbits = rs & 15;
+         int len = h->size[fast];
+
+         if (magbits && len + magbits <= FAST_BITS) {
+            // magnitude code followed by receive_extend code
+            int k = ((i << len) & ((1 << FAST_BITS) - 1)) >> (FAST_BITS - magbits);
+            int m = 1 << (magbits - 1);
+            if (k < m) k += (-1 << magbits) + 1;
+            // if the result is small enough, we can fit it in fast_ac table
+            if (k >= -128 && k <= 127)
+               fast_ac[i] = (stbi__int16) ((k << 8) + (run << 4) + (len + magbits));
+         }
+      }
+   }
+}
+
+static void stbi__grow_buffer_unsafe(stbi__jpeg *j)
+{
+   do {
+      int b = j->nomore ? 0 : stbi__get8(j->s);
+      if (b == 0xff) {
+         int c = stbi__get8(j->s);
+         if (c != 0) {
+            j->marker = (unsigned char) c;
+            j->nomore = 1;
+            return;
+         }
+      }
+      j->code_buffer |= b << (24 - j->code_bits);
+      j->code_bits += 8;
+   } while (j->code_bits <= 24);
+}
+
+// (1 << n) - 1
+static stbi__uint32 stbi__bmask[17]={0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535};
+
+// decode a jpeg huffman value from the bitstream
+stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffman *h)
+{
+   unsigned int temp;
+   int c,k;
+
+   if (j->code_bits < 16) stbi__grow_buffer_unsafe(j);
+
+   // look at the top FAST_BITS and determine what symbol ID it is,
+   // if the code is <= FAST_BITS
+   c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1);
+   k = h->fast[c];
+   if (k < 255) {
+      int s = h->size[k];
+      if (s > j->code_bits)
+         return -1;
+      j->code_buffer <<= s;
+      j->code_bits -= s;
+      return h->values[k];
+   }
+
+   // naive test is to shift the code_buffer down so k bits are
+   // valid, then test against maxcode. To speed this up, we've
+   // preshifted maxcode left so that it has (16-k) 0s at the
+   // end; in other words, regardless of the number of bits, it
+   // wants to be compared against something shifted to have 16;
+   // that way we don't need to shift inside the loop.
+   temp = j->code_buffer >> 16;
+   for (k=FAST_BITS+1 ; ; ++k)
+      if (temp < h->maxcode[k])
+         break;
+   if (k == 17) {
+      // error! code not found
+      j->code_bits -= 16;
+      return -1;
+   }
+
+   if (k > j->code_bits)
+      return -1;
+
+   // convert the huffman code to the symbol id
+   c = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k];
+   STBI_ASSERT((((j->code_buffer) >> (32 - h->size[c])) & stbi__bmask[h->size[c]]) == h->code[c]);
+
+   // convert the id to a symbol
+   j->code_bits -= k;
+   j->code_buffer <<= k;
+   return h->values[c];
+}
+
+// bias[n] = (-1<<n) + 1
+static int const stbi__jbias[16] = {0,-1,-3,-7,-15,-31,-63,-127,-255,-511,-1023,-2047,-4095,-8191,-16383,-32767};
+
+// combined JPEG 'receive' and JPEG 'extend', since baseline
+// always extends everything it receives.
+stbi_inline static int stbi__extend_receive(stbi__jpeg *j, int n)
+{
+   unsigned int k;
+   int sgn;
+   if (j->code_bits < n) stbi__grow_buffer_unsafe(j);
+
+   sgn = (stbi__int32)j->code_buffer >> 31; // sign bit is always in MSB
+   k = stbi_lrot(j->code_buffer, n);
+   j->code_buffer = k & ~stbi__bmask[n];
+   k &= stbi__bmask[n];
+   j->code_bits -= n;
+   return k + (stbi__jbias[n] & ~sgn);
+}
+
+// get some unsigned bits
+stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg *j, int n)
+{
+   unsigned int k;
+   if (j->code_bits < n) stbi__grow_buffer_unsafe(j);
+   k = stbi_lrot(j->code_buffer, n);
+   j->code_buffer = k & ~stbi__bmask[n];
+   k &= stbi__bmask[n];
+   j->code_bits -= n;
+   return k;
+}
+
+stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg *j)
+{
+   unsigned int k;
+   if (j->code_bits < 1) stbi__grow_buffer_unsafe(j);
+   k = j->code_buffer;
+   j->code_buffer <<= 1;
+   --j->code_bits;
+   return k & 0x80000000;
+}
+
+// given a value that's at position X in the zigzag stream,
+// where does it appear in the 8x8 matrix coded as row-major?
+static stbi_uc stbi__jpeg_dezigzag[64+15] =
+{
+    0,  1,  8, 16,  9,  2,  3, 10,
+   17, 24, 32, 25, 18, 11,  4,  5,
+   12, 19, 26, 33, 40, 48, 41, 34,
+   27, 20, 13,  6,  7, 14, 21, 28,
+   35, 42, 49, 56, 57, 50, 43, 36,
+   29, 22, 15, 23, 30, 37, 44, 51,
+   58, 59, 52, 45, 38, 31, 39, 46,
+   53, 60, 61, 54, 47, 55, 62, 63,
+   // let corrupt input sample past end
+   63, 63, 63, 63, 63, 63, 63, 63,
+   63, 63, 63, 63, 63, 63, 63
+};
+
+// decode one 64-entry block--
+static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__huffman *hdc, stbi__huffman *hac, stbi__int16 *fac, int b, stbi_uc *dequant)
+{
+   int diff,dc,k;
+   int t;
+
+   if (j->code_bits < 16) stbi__grow_buffer_unsafe(j);
+   t = stbi__jpeg_huff_decode(j, hdc);
+   if (t < 0) return stbi__err("bad huffman code","Corrupt JPEG");
+
+   // 0 all the ac values now so we can do it 32-bits at a time
+   memset(data,0,64*sizeof(data[0]));
+
+   diff = t ? stbi__extend_receive(j, t) : 0;
+   dc = j->img_comp[b].dc_pred + diff;
+   j->img_comp[b].dc_pred = dc;
+   data[0] = (short) (dc * dequant[0]);
+
+   // decode AC components, see JPEG spec
+   k = 1;
+   do {
+      unsigned int zig;
+      int c,r,s;
+      if (j->code_bits < 16) stbi__grow_buffer_unsafe(j);
+      c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1);
+      r = fac[c];
+      if (r) { // fast-AC path
+         k += (r >> 4) & 15; // run
+         s = r & 15; // combined length
+         j->code_buffer <<= s;
+         j->code_bits -= s;
+         // decode into unzigzag'd location
+         zig = stbi__jpeg_dezigzag[k++];
+         data[zig] = (short) ((r >> 8) * dequant[zig]);
+      } else {
+         int rs = stbi__jpeg_huff_decode(j, hac);
+         if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG");
+         s = rs & 15;
+         r = rs >> 4;
+         if (s == 0) {
+            if (rs != 0xf0) break; // end block
+            k += 16;
+         } else {
+            k += r;
+            // decode into unzigzag'd location
+            zig = stbi__jpeg_dezigzag[k++];
+            data[zig] = (short) (stbi__extend_receive(j,s) * dequant[zig]);
+         }
+      }
+   } while (k < 64);
+   return 1;
+}
+
+static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg *j, short data[64], stbi__huffman *hdc, int b)
+{
+   int diff,dc;
+   int t;
+   if (j->spec_end != 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG");
+
+   if (j->code_bits < 16) stbi__grow_buffer_unsafe(j);
+
+   if (j->succ_high == 0) {
+      // first scan for DC coefficient, must be first
+      memset(data,0,64*sizeof(data[0])); // 0 all the ac values now
+      t = stbi__jpeg_huff_decode(j, hdc);
+      diff = t ? stbi__extend_receive(j, t) : 0;
+
+      dc = j->img_comp[b].dc_pred + diff;
+      j->img_comp[b].dc_pred = dc;
+      data[0] = (short) (dc << j->succ_low);
+   } else {
+      // refinement scan for DC coefficient
+      if (stbi__jpeg_get_bit(j))
+         data[0] += (short) (1 << j->succ_low);
+   }
+   return 1;
+}
+
+// @OPTIMIZE: store non-zigzagged during the decode passes,
+// and only de-zigzag when dequantizing
+static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64], stbi__huffman *hac, stbi__int16 *fac)
+{
+   int k;
+   if (j->spec_start == 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG");
+
+   if (j->succ_high == 0) {
+      int shift = j->succ_low;
+
+      if (j->eob_run) {
+         --j->eob_run;
+         return 1;
+      }
+
+      k = j->spec_start;
+      do {
+         unsigned int zig;
+         int c,r,s;
+         if (j->code_bits < 16) stbi__grow_buffer_unsafe(j);
+         c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1);
+         r = fac[c];
+         if (r) { // fast-AC path
+            k += (r >> 4) & 15; // run
+            s = r & 15; // combined length
+            j->code_buffer <<= s;
+            j->code_bits -= s;
+            zig = stbi__jpeg_dezigzag[k++];
+            data[zig] = (short) ((r >> 8) << shift);
+         } else {
+            int rs = stbi__jpeg_huff_decode(j, hac);
+            if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG");
+            s = rs & 15;
+            r = rs >> 4;
+            if (s == 0) {
+               if (r < 15) {
+                  j->eob_run = (1 << r);
+                  if (r)
+                     j->eob_run += stbi__jpeg_get_bits(j, r);
+                  --j->eob_run;
+                  break;
+               }
+               k += 16;
+            } else {
+               k += r;
+               zig = stbi__jpeg_dezigzag[k++];
+               data[zig] = (short) (stbi__extend_receive(j,s) << shift);
+            }
+         }
+      } while (k <= j->spec_end);
+   } else {
+      // refinement scan for these AC coefficients
+
+      short bit = (short) (1 << j->succ_low);
+
+      if (j->eob_run) {
+         --j->eob_run;
+         for (k = j->spec_start; k <= j->spec_end; ++k) {
+            short *p = &data[stbi__jpeg_dezigzag[k]];
+            if (*p != 0)
+               if (stbi__jpeg_get_bit(j))
+                  if ((*p & bit)==0) {
+                     if (*p > 0)
+                        *p += bit;
+                     else
+                        *p -= bit;
+                  }
+         }
+      } else {
+         k = j->spec_start;
+         do {
+            int r,s;
+            int rs = stbi__jpeg_huff_decode(j, hac); // @OPTIMIZE see if we can use the fast path here, advance-by-r is so slow, eh
+            if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG");
+            s = rs & 15;
+            r = rs >> 4;
+            if (s == 0) {
+               if (r < 15) {
+                  j->eob_run = (1 << r) - 1;
+                  if (r)
+                     j->eob_run += stbi__jpeg_get_bits(j, r);
+                  r = 64; // force end of block
+               } else
+                  r = 16; // r=15 is the code for 16 0s
+            } else {
+               if (s != 1) return stbi__err("bad huffman code", "Corrupt JPEG");
+               // sign bit
+               if (stbi__jpeg_get_bit(j))
+                  s = bit;
+               else
+                  s = -bit;
+            }
+
+            // advance by r
+            while (k <= j->spec_end) {
+               short *p = &data[stbi__jpeg_dezigzag[k]];
+               if (*p != 0) {
+                  if (stbi__jpeg_get_bit(j))
+                     if ((*p & bit)==0) {
+                        if (*p > 0)
+                           *p += bit;
+                        else
+                           *p -= bit;
+                     }
+                  ++k;
+               } else {
+                  if (r == 0) {
+                     if (s)
+                        data[stbi__jpeg_dezigzag[k++]] = (short) s;
+                     break;
+                  }
+                  --r;
+                  ++k;
+               }
+            }
+         } while (k <= j->spec_end);
+      }
+   }
+   return 1;
+}
+
+// take a -128..127 value and stbi__clamp it and convert to 0..255
+stbi_inline static stbi_uc stbi__clamp(int x)
+{
+   // trick to use a single test to catch both cases
+   if ((unsigned int) x > 255) {
+      if (x < 0) return 0;
+      if (x > 255) return 255;
+   }
+   return (stbi_uc) x;
+}
+
+#define stbi__f2f(x)  ((int) (((x) * 4096 + 0.5)))
+#define stbi__fsh(x)  ((x) << 12)
+
+// derived from jidctint -- DCT_ISLOW
+#define STBI__IDCT_1D(s0,s1,s2,s3,s4,s5,s6,s7) \
+   int t0,t1,t2,t3,p1,p2,p3,p4,p5,x0,x1,x2,x3; \
+   p2 = s2;                                    \
+   p3 = s6;                                    \
+   p1 = (p2+p3) * stbi__f2f(0.5411961f);       \
+   t2 = p1 + p3*stbi__f2f(-1.847759065f);      \
+   t3 = p1 + p2*stbi__f2f( 0.765366865f);      \
+   p2 = s0;                                    \
+   p3 = s4;                                    \
+   t0 = stbi__fsh(p2+p3);                      \
+   t1 = stbi__fsh(p2-p3);                      \
+   x0 = t0+t3;                                 \
+   x3 = t0-t3;                                 \
+   x1 = t1+t2;                                 \
+   x2 = t1-t2;                                 \
+   t0 = s7;                                    \
+   t1 = s5;                                    \
+   t2 = s3;                                    \
+   t3 = s1;                                    \
+   p3 = t0+t2;                                 \
+   p4 = t1+t3;                                 \
+   p1 = t0+t3;                                 \
+   p2 = t1+t2;                                 \
+   p5 = (p3+p4)*stbi__f2f( 1.175875602f);      \
+   t0 = t0*stbi__f2f( 0.298631336f);           \
+   t1 = t1*stbi__f2f( 2.053119869f);           \
+   t2 = t2*stbi__f2f( 3.072711026f);           \
+   t3 = t3*stbi__f2f( 1.501321110f);           \
+   p1 = p5 + p1*stbi__f2f(-0.899976223f);      \
+   p2 = p5 + p2*stbi__f2f(-2.562915447f);      \
+   p3 = p3*stbi__f2f(-1.961570560f);           \
+   p4 = p4*stbi__f2f(-0.390180644f);           \
+   t3 += p1+p4;                                \
+   t2 += p2+p3;                                \
+   t1 += p2+p4;                                \
+   t0 += p1+p3;
+
+static void stbi__idct_block(stbi_uc *out, int out_stride, short data[64])
+{
+   int i,val[64],*v=val;
+   stbi_uc *o;
+   short *d = data;
+
+   // columns
+   for (i=0; i < 8; ++i,++d, ++v) {
+      // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing
+      if (d[ 8]==0 && d[16]==0 && d[24]==0 && d[32]==0
+           && d[40]==0 && d[48]==0 && d[56]==0) {
+         //    no shortcut                 0     seconds
+         //    (1|2|3|4|5|6|7)==0          0     seconds
+         //    all separate               -0.047 seconds
+         //    1 && 2|3 && 4|5 && 6|7:    -0.047 seconds
+         int dcterm = d[0] << 2;
+         v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm;
+      } else {
+         STBI__IDCT_1D(d[ 0],d[ 8],d[16],d[24],d[32],d[40],d[48],d[56])
+         // constants scaled things up by 1<<12; let's bring them back
+         // down, but keep 2 extra bits of precision
+         x0 += 512; x1 += 512; x2 += 512; x3 += 512;
+         v[ 0] = (x0+t3) >> 10;
+         v[56] = (x0-t3) >> 10;
+         v[ 8] = (x1+t2) >> 10;
+         v[48] = (x1-t2) >> 10;
+         v[16] = (x2+t1) >> 10;
+         v[40] = (x2-t1) >> 10;
+         v[24] = (x3+t0) >> 10;
+         v[32] = (x3-t0) >> 10;
+      }
+   }
+
+   for (i=0, v=val, o=out; i < 8; ++i,v+=8,o+=out_stride) {
+      // no fast case since the first 1D IDCT spread components out
+      STBI__IDCT_1D(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7])
+      // constants scaled things up by 1<<12, plus we had 1<<2 from first
+      // loop, plus horizontal and vertical each scale by sqrt(8) so together
+      // we've got an extra 1<<3, so 1<<17 total we need to remove.
+      // so we want to round that, which means adding 0.5 * 1<<17,
+      // aka 65536. Also, we'll end up with -128 to 127 that we want
+      // to encode as 0..255 by adding 128, so we'll add that before the shift
+      x0 += 65536 + (128<<17);
+      x1 += 65536 + (128<<17);
+      x2 += 65536 + (128<<17);
+      x3 += 65536 + (128<<17);
+      // tried computing the shifts into temps, or'ing the temps to see
+      // if any were out of range, but that was slower
+      o[0] = stbi__clamp((x0+t3) >> 17);
+      o[7] = stbi__clamp((x0-t3) >> 17);
+      o[1] = stbi__clamp((x1+t2) >> 17);
+      o[6] = stbi__clamp((x1-t2) >> 17);
+      o[2] = stbi__clamp((x2+t1) >> 17);
+      o[5] = stbi__clamp((x2-t1) >> 17);
+      o[3] = stbi__clamp((x3+t0) >> 17);
+      o[4] = stbi__clamp((x3-t0) >> 17);
+   }
+}
+
+#ifdef STBI_SSE2
+// sse2 integer IDCT. not the fastest possible implementation but it
+// produces bit-identical results to the generic C version so it's
+// fully "transparent".
+static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64])
+{
+   // This is constructed to match our regular (generic) integer IDCT exactly.
+   __m128i row0, row1, row2, row3, row4, row5, row6, row7;
+   __m128i tmp;
+
+   // dot product constant: even elems=x, odd elems=y
+   #define dct_const(x,y)  _mm_setr_epi16((x),(y),(x),(y),(x),(y),(x),(y))
+
+   // out(0) = c0[even]*x + c0[odd]*y   (c0, x, y 16-bit, out 32-bit)
+   // out(1) = c1[even]*x + c1[odd]*y
+   #define dct_rot(out0,out1, x,y,c0,c1) \
+      __m128i c0##lo = _mm_unpacklo_epi16((x),(y)); \
+      __m128i c0##hi = _mm_unpackhi_epi16((x),(y)); \
+      __m128i out0##_l = _mm_madd_epi16(c0##lo, c0); \
+      __m128i out0##_h = _mm_madd_epi16(c0##hi, c0); \
+      __m128i out1##_l = _mm_madd_epi16(c0##lo, c1); \
+      __m128i out1##_h = _mm_madd_epi16(c0##hi, c1)
+
+   // out = in << 12  (in 16-bit, out 32-bit)
+   #define dct_widen(out, in) \
+      __m128i out##_l = _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), (in)), 4); \
+      __m128i out##_h = _mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), (in)), 4)
+
+   // wide add
+   #define dct_wadd(out, a, b) \
+      __m128i out##_l = _mm_add_epi32(a##_l, b##_l); \
+      __m128i out##_h = _mm_add_epi32(a##_h, b##_h)
+
+   // wide sub
+   #define dct_wsub(out, a, b) \
+      __m128i out##_l = _mm_sub_epi32(a##_l, b##_l); \
+      __m128i out##_h = _mm_sub_epi32(a##_h, b##_h)
+
+   // butterfly a/b, add bias, then shift by "s" and pack
+   #define dct_bfly32o(out0, out1, a,b,bias,s) \
+      { \
+         __m128i abiased_l = _mm_add_epi32(a##_l, bias); \
+         __m128i abiased_h = _mm_add_epi32(a##_h, bias); \
+         dct_wadd(sum, abiased, b); \
+         dct_wsub(dif, abiased, b); \
+         out0 = _mm_packs_epi32(_mm_srai_epi32(sum_l, s), _mm_srai_epi32(sum_h, s)); \
+         out1 = _mm_packs_epi32(_mm_srai_epi32(dif_l, s), _mm_srai_epi32(dif_h, s)); \
+      }
+
+   // 8-bit interleave step (for transposes)
+   #define dct_interleave8(a, b) \
+      tmp = a; \
+      a = _mm_unpacklo_epi8(a, b); \
+      b = _mm_unpackhi_epi8(tmp, b)
+
+   // 16-bit interleave step (for transposes)
+   #define dct_interleave16(a, b) \
+      tmp = a; \
+      a = _mm_unpacklo_epi16(a, b); \
+      b = _mm_unpackhi_epi16(tmp, b)
+
+   #define dct_pass(bias,shift) \
+      { \
+         /* even part */ \
+         dct_rot(t2e,t3e, row2,row6, rot0_0,rot0_1); \
+         __m128i sum04 = _mm_add_epi16(row0, row4); \
+         __m128i dif04 = _mm_sub_epi16(row0, row4); \
+         dct_widen(t0e, sum04); \
+         dct_widen(t1e, dif04); \
+         dct_wadd(x0, t0e, t3e); \
+         dct_wsub(x3, t0e, t3e); \
+         dct_wadd(x1, t1e, t2e); \
+         dct_wsub(x2, t1e, t2e); \
+         /* odd part */ \
+         dct_rot(y0o,y2o, row7,row3, rot2_0,rot2_1); \
+         dct_rot(y1o,y3o, row5,row1, rot3_0,rot3_1); \
+         __m128i sum17 = _mm_add_epi16(row1, row7); \
+         __m128i sum35 = _mm_add_epi16(row3, row5); \
+         dct_rot(y4o,y5o, sum17,sum35, rot1_0,rot1_1); \
+         dct_wadd(x4, y0o, y4o); \
+         dct_wadd(x5, y1o, y5o); \
+         dct_wadd(x6, y2o, y5o); \
+         dct_wadd(x7, y3o, y4o); \
+         dct_bfly32o(row0,row7, x0,x7,bias,shift); \
+         dct_bfly32o(row1,row6, x1,x6,bias,shift); \
+         dct_bfly32o(row2,row5, x2,x5,bias,shift); \
+         dct_bfly32o(row3,row4, x3,x4,bias,shift); \
+      }
+
+   __m128i rot0_0 = dct_const(stbi__f2f(0.5411961f), stbi__f2f(0.5411961f) + stbi__f2f(-1.847759065f));
+   __m128i rot0_1 = dct_const(stbi__f2f(0.5411961f) + stbi__f2f( 0.765366865f), stbi__f2f(0.5411961f));
+   __m128i rot1_0 = dct_const(stbi__f2f(1.175875602f) + stbi__f2f(-0.899976223f), stbi__f2f(1.175875602f));
+   __m128i rot1_1 = dct_const(stbi__f2f(1.175875602f), stbi__f2f(1.175875602f) + stbi__f2f(-2.562915447f));
+   __m128i rot2_0 = dct_const(stbi__f2f(-1.961570560f) + stbi__f2f( 0.298631336f), stbi__f2f(-1.961570560f));
+   __m128i rot2_1 = dct_const(stbi__f2f(-1.961570560f), stbi__f2f(-1.961570560f) + stbi__f2f( 3.072711026f));
+   __m128i rot3_0 = dct_const(stbi__f2f(-0.390180644f) + stbi__f2f( 2.053119869f), stbi__f2f(-0.390180644f));
+   __m128i rot3_1 = dct_const(stbi__f2f(-0.390180644f), stbi__f2f(-0.390180644f) + stbi__f2f( 1.501321110f));
+
+   // rounding biases in column/row passes, see stbi__idct_block for explanation.
+   __m128i bias_0 = _mm_set1_epi32(512);
+   __m128i bias_1 = _mm_set1_epi32(65536 + (128<<17));
+
+   // load
+   row0 = _mm_load_si128((const __m128i *) (data + 0*8));
+   row1 = _mm_load_si128((const __m128i *) (data + 1*8));
+   row2 = _mm_load_si128((const __m128i *) (data + 2*8));
+   row3 = _mm_load_si128((const __m128i *) (data + 3*8));
+   row4 = _mm_load_si128((const __m128i *) (data + 4*8));
+   row5 = _mm_load_si128((const __m128i *) (data + 5*8));
+   row6 = _mm_load_si128((const __m128i *) (data + 6*8));
+   row7 = _mm_load_si128((const __m128i *) (data + 7*8));
+
+   // column pass
+   dct_pass(bias_0, 10);
+
+   {
+      // 16bit 8x8 transpose pass 1
+      dct_interleave16(row0, row4);
+      dct_interleave16(row1, row5);
+      dct_interleave16(row2, row6);
+      dct_interleave16(row3, row7);
+
+      // transpose pass 2
+      dct_interleave16(row0, row2);
+      dct_interleave16(row1, row3);
+      dct_interleave16(row4, row6);
+      dct_interleave16(row5, row7);
+
+      // transpose pass 3
+      dct_interleave16(row0, row1);
+      dct_interleave16(row2, row3);
+      dct_interleave16(row4, row5);
+      dct_interleave16(row6, row7);
+   }
+
+   // row pass
+   dct_pass(bias_1, 17);
+
+   {
+      // pack
+      __m128i p0 = _mm_packus_epi16(row0, row1); // a0a1a2a3...a7b0b1b2b3...b7
+      __m128i p1 = _mm_packus_epi16(row2, row3);
+      __m128i p2 = _mm_packus_epi16(row4, row5);
+      __m128i p3 = _mm_packus_epi16(row6, row7);
+
+      // 8bit 8x8 transpose pass 1
+      dct_interleave8(p0, p2); // a0e0a1e1...
+      dct_interleave8(p1, p3); // c0g0c1g1...
+
+      // transpose pass 2
+      dct_interleave8(p0, p1); // a0c0e0g0...
+      dct_interleave8(p2, p3); // b0d0f0h0...
+
+      // transpose pass 3
+      dct_interleave8(p0, p2); // a0b0c0d0...
+      dct_interleave8(p1, p3); // a4b4c4d4...
+
+      // store
+      _mm_storel_epi64((__m128i *) out, p0); out += out_stride;
+      _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p0, 0x4e)); out += out_stride;
+      _mm_storel_epi64((__m128i *) out, p2); out += out_stride;
+      _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p2, 0x4e)); out += out_stride;
+      _mm_storel_epi64((__m128i *) out, p1); out += out_stride;
+      _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p1, 0x4e)); out += out_stride;
+      _mm_storel_epi64((__m128i *) out, p3); out += out_stride;
+      _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p3, 0x4e));
+   }
+
+#undef dct_const
+#undef dct_rot
+#undef dct_widen
+#undef dct_wadd
+#undef dct_wsub
+#undef dct_bfly32o
+#undef dct_interleave8
+#undef dct_interleave16
+#undef dct_pass
+}
+
+#endif // STBI_SSE2
+
+#ifdef STBI_NEON
+
+// NEON integer IDCT. should produce bit-identical
+// results to the generic C version.
+static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64])
+{
+   int16x8_t row0, row1, row2, row3, row4, row5, row6, row7;
+
+   int16x4_t rot0_0 = vdup_n_s16(stbi__f2f(0.5411961f));
+   int16x4_t rot0_1 = vdup_n_s16(stbi__f2f(-1.847759065f));
+   int16x4_t rot0_2 = vdup_n_s16(stbi__f2f( 0.765366865f));
+   int16x4_t rot1_0 = vdup_n_s16(stbi__f2f( 1.175875602f));
+   int16x4_t rot1_1 = vdup_n_s16(stbi__f2f(-0.899976223f));
+   int16x4_t rot1_2 = vdup_n_s16(stbi__f2f(-2.562915447f));
+   int16x4_t rot2_0 = vdup_n_s16(stbi__f2f(-1.961570560f));
+   int16x4_t rot2_1 = vdup_n_s16(stbi__f2f(-0.390180644f));
+   int16x4_t rot3_0 = vdup_n_s16(stbi__f2f( 0.298631336f));
+   int16x4_t rot3_1 = vdup_n_s16(stbi__f2f( 2.053119869f));
+   int16x4_t rot3_2 = vdup_n_s16(stbi__f2f( 3.072711026f));
+   int16x4_t rot3_3 = vdup_n_s16(stbi__f2f( 1.501321110f));
+
+#define dct_long_mul(out, inq, coeff) \
+   int32x4_t out##_l = vmull_s16(vget_low_s16(inq), coeff); \
+   int32x4_t out##_h = vmull_s16(vget_high_s16(inq), coeff)
+
+#define dct_long_mac(out, acc, inq, coeff) \
+   int32x4_t out##_l = vmlal_s16(acc##_l, vget_low_s16(inq), coeff); \
+   int32x4_t out##_h = vmlal_s16(acc##_h, vget_high_s16(inq), coeff)
+
+#define dct_widen(out, inq) \
+   int32x4_t out##_l = vshll_n_s16(vget_low_s16(inq), 12); \
+   int32x4_t out##_h = vshll_n_s16(vget_high_s16(inq), 12)
+
+// wide add
+#define dct_wadd(out, a, b) \
+   int32x4_t out##_l = vaddq_s32(a##_l, b##_l); \
+   int32x4_t out##_h = vaddq_s32(a##_h, b##_h)
+
+// wide sub
+#define dct_wsub(out, a, b) \
+   int32x4_t out##_l = vsubq_s32(a##_l, b##_l); \
+   int32x4_t out##_h = vsubq_s32(a##_h, b##_h)
+
+// butterfly a/b, then shift using "shiftop" by "s" and pack
+#define dct_bfly32o(out0,out1, a,b,shiftop,s) \
+   { \
+      dct_wadd(sum, a, b); \
+      dct_wsub(dif, a, b); \
+      out0 = vcombine_s16(shiftop(sum_l, s), shiftop(sum_h, s)); \
+      out1 = vcombine_s16(shiftop(dif_l, s), shiftop(dif_h, s)); \
+   }
+
+#define dct_pass(shiftop, shift) \
+   { \
+      /* even part */ \
+      int16x8_t sum26 = vaddq_s16(row2, row6); \
+      dct_long_mul(p1e, sum26, rot0_0); \
+      dct_long_mac(t2e, p1e, row6, rot0_1); \
+      dct_long_mac(t3e, p1e, row2, rot0_2); \
+      int16x8_t sum04 = vaddq_s16(row0, row4); \
+      int16x8_t dif04 = vsubq_s16(row0, row4); \
+      dct_widen(t0e, sum04); \
+      dct_widen(t1e, dif04); \
+      dct_wadd(x0, t0e, t3e); \
+      dct_wsub(x3, t0e, t3e); \
+      dct_wadd(x1, t1e, t2e); \
+      dct_wsub(x2, t1e, t2e); \
+      /* odd part */ \
+      int16x8_t sum15 = vaddq_s16(row1, row5); \
+      int16x8_t sum17 = vaddq_s16(row1, row7); \
+      int16x8_t sum35 = vaddq_s16(row3, row5); \
+      int16x8_t sum37 = vaddq_s16(row3, row7); \
+      int16x8_t sumodd = vaddq_s16(sum17, sum35); \
+      dct_long_mul(p5o, sumodd, rot1_0); \
+      dct_long_mac(p1o, p5o, sum17, rot1_1); \
+      dct_long_mac(p2o, p5o, sum35, rot1_2); \
+      dct_long_mul(p3o, sum37, rot2_0); \
+      dct_long_mul(p4o, sum15, rot2_1); \
+      dct_wadd(sump13o, p1o, p3o); \
+      dct_wadd(sump24o, p2o, p4o); \
+      dct_wadd(sump23o, p2o, p3o); \
+      dct_wadd(sump14o, p1o, p4o); \
+      dct_long_mac(x4, sump13o, row7, rot3_0); \
+      dct_long_mac(x5, sump24o, row5, rot3_1); \
+      dct_long_mac(x6, sump23o, row3, rot3_2); \
+      dct_long_mac(x7, sump14o, row1, rot3_3); \
+      dct_bfly32o(row0,row7, x0,x7,shiftop,shift); \
+      dct_bfly32o(row1,row6, x1,x6,shiftop,shift); \
+      dct_bfly32o(row2,row5, x2,x5,shiftop,shift); \
+      dct_bfly32o(row3,row4, x3,x4,shiftop,shift); \
+   }
+
+   // load
+   row0 = vld1q_s16(data + 0*8);
+   row1 = vld1q_s16(data + 1*8);
+   row2 = vld1q_s16(data + 2*8);
+   row3 = vld1q_s16(data + 3*8);
+   row4 = vld1q_s16(data + 4*8);
+   row5 = vld1q_s16(data + 5*8);
+   row6 = vld1q_s16(data + 6*8);
+   row7 = vld1q_s16(data + 7*8);
+
+   // add DC bias
+   row0 = vaddq_s16(row0, vsetq_lane_s16(1024, vdupq_n_s16(0), 0));
+
+   // column pass
+   dct_pass(vrshrn_n_s32, 10);
+
+   // 16bit 8x8 transpose
+   {
+// these three map to a single VTRN.16, VTRN.32, and VSWP, respectively.
+// whether compilers actually get this is another story, sadly.
+#define dct_trn16(x, y) { int16x8x2_t t = vtrnq_s16(x, y); x = t.val[0]; y = t.val[1]; }
+#define dct_trn32(x, y) { int32x4x2_t t = vtrnq_s32(vreinterpretq_s32_s16(x), vreinterpretq_s32_s16(y)); x = vreinterpretq_s16_s32(t.val[0]); y = vreinterpretq_s16_s32(t.val[1]); }
+#define dct_trn64(x, y) { int16x8_t x0 = x; int16x8_t y0 = y; x = vcombine_s16(vget_low_s16(x0), vget_low_s16(y0)); y = vcombine_s16(vget_high_s16(x0), vget_high_s16(y0)); }
+
+      // pass 1
+      dct_trn16(row0, row1); // a0b0a2b2a4b4a6b6
+      dct_trn16(row2, row3);
+      dct_trn16(row4, row5);
+      dct_trn16(row6, row7);
+
+      // pass 2
+      dct_trn32(row0, row2); // a0b0c0d0a4b4c4d4
+      dct_trn32(row1, row3);
+      dct_trn32(row4, row6);
+      dct_trn32(row5, row7);
+
+      // pass 3
+      dct_trn64(row0, row4); // a0b0c0d0e0f0g0h0
+      dct_trn64(row1, row5);
+      dct_trn64(row2, row6);
+      dct_trn64(row3, row7);
+
+#undef dct_trn16
+#undef dct_trn32
+#undef dct_trn64
+   }
+
+   // row pass
+   // vrshrn_n_s32 only supports shifts up to 16, we need
+   // 17. so do a non-rounding shift of 16 first then follow
+   // up with a rounding shift by 1.
+   dct_pass(vshrn_n_s32, 16);
+
+   {
+      // pack and round
+      uint8x8_t p0 = vqrshrun_n_s16(row0, 1);
+      uint8x8_t p1 = vqrshrun_n_s16(row1, 1);
+      uint8x8_t p2 = vqrshrun_n_s16(row2, 1);
+      uint8x8_t p3 = vqrshrun_n_s16(row3, 1);
+      uint8x8_t p4 = vqrshrun_n_s16(row4, 1);
+      uint8x8_t p5 = vqrshrun_n_s16(row5, 1);
+      uint8x8_t p6 = vqrshrun_n_s16(row6, 1);
+      uint8x8_t p7 = vqrshrun_n_s16(row7, 1);
+
+      // again, these can translate into one instruction, but often don't.
+#define dct_trn8_8(x, y) { uint8x8x2_t t = vtrn_u8(x, y); x = t.val[0]; y = t.val[1]; }
+#define dct_trn8_16(x, y) { uint16x4x2_t t = vtrn_u16(vreinterpret_u16_u8(x), vreinterpret_u16_u8(y)); x = vreinterpret_u8_u16(t.val[0]); y = vreinterpret_u8_u16(t.val[1]); }
+#define dct_trn8_32(x, y) { uint32x2x2_t t = vtrn_u32(vreinterpret_u32_u8(x), vreinterpret_u32_u8(y)); x = vreinterpret_u8_u32(t.val[0]); y = vreinterpret_u8_u32(t.val[1]); }
+
+      // sadly can't use interleaved stores here since we only write
+      // 8 bytes to each scan line!
+
+      // 8x8 8-bit transpose pass 1
+      dct_trn8_8(p0, p1);
+      dct_trn8_8(p2, p3);
+      dct_trn8_8(p4, p5);
+      dct_trn8_8(p6, p7);
+
+      // pass 2
+      dct_trn8_16(p0, p2);
+      dct_trn8_16(p1, p3);
+      dct_trn8_16(p4, p6);
+      dct_trn8_16(p5, p7);
+
+      // pass 3
+      dct_trn8_32(p0, p4);
+      dct_trn8_32(p1, p5);
+      dct_trn8_32(p2, p6);
+      dct_trn8_32(p3, p7);
+
+      // store
+      vst1_u8(out, p0); out += out_stride;
+      vst1_u8(out, p1); out += out_stride;
+      vst1_u8(out, p2); out += out_stride;
+      vst1_u8(out, p3); out += out_stride;
+      vst1_u8(out, p4); out += out_stride;
+      vst1_u8(out, p5); out += out_stride;
+      vst1_u8(out, p6); out += out_stride;
+      vst1_u8(out, p7);
+
+#undef dct_trn8_8
+#undef dct_trn8_16
+#undef dct_trn8_32
+   }
+
+#undef dct_long_mul
+#undef dct_long_mac
+#undef dct_widen
+#undef dct_wadd
+#undef dct_wsub
+#undef dct_bfly32o
+#undef dct_pass
+}
+
+#endif // STBI_NEON
+
+#define STBI__MARKER_none  0xff
+// if there's a pending marker from the entropy stream, return that
+// otherwise, fetch from the stream and get a marker. if there's no
+// marker, return 0xff, which is never a valid marker value
+static stbi_uc stbi__get_marker(stbi__jpeg *j)
+{
+   stbi_uc x;
+   if (j->marker != STBI__MARKER_none) { x = j->marker; j->marker = STBI__MARKER_none; return x; }
+   x = stbi__get8(j->s);
+   if (x != 0xff) return STBI__MARKER_none;
+   while (x == 0xff)
+      x = stbi__get8(j->s);
+   return x;
+}
+
+// in each scan, we'll have scan_n components, and the order
+// of the components is specified by order[]
+#define STBI__RESTART(x)     ((x) >= 0xd0 && (x) <= 0xd7)
+
+// after a restart interval, stbi__jpeg_reset the entropy decoder and
+// the dc prediction
+static void stbi__jpeg_reset(stbi__jpeg *j)
+{
+   j->code_bits = 0;
+   j->code_buffer = 0;
+   j->nomore = 0;
+   j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = 0;
+   j->marker = STBI__MARKER_none;
+   j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff;
+   j->eob_run = 0;
+   // no more than 1<<31 MCUs if no restart_interal? that's plenty safe,
+   // since we don't even allow 1<<30 pixels
+}
+
+static int stbi__parse_entropy_coded_data(stbi__jpeg *z)
+{
+   stbi__jpeg_reset(z);
+   if (!z->progressive) {
+      if (z->scan_n == 1) {
+         int i,j;
+         STBI_SIMD_ALIGN(short, data[64]);
+         int n = z->order[0];
+         // non-interleaved data, we just need to process one block at a time,
+         // in trivial scanline order
+         // number of blocks to do just depends on how many actual "pixels" this
+         // component has, independent of interleaved MCU blocking and such
+         int w = (z->img_comp[n].x+7) >> 3;
+         int h = (z->img_comp[n].y+7) >> 3;
+         for (j=0; j < h; ++j) {
+            for (i=0; i < w; ++i) {
+               int ha = z->img_comp[n].ha;
+               if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0;
+               z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data);
+               // every data block is an MCU, so countdown the restart interval
+               if (--z->todo <= 0) {
+                  if (z->code_bits < 24) stbi__grow_buffer_unsafe(z);
+                  // if it's NOT a restart, then just bail, so we get corrupt data
+                  // rather than no data
+                  if (!STBI__RESTART(z->marker)) return 1;
+                  stbi__jpeg_reset(z);
+               }
+            }
+         }
+         return 1;
+      } else { // interleaved
+         int i,j,k,x,y;
+         STBI_SIMD_ALIGN(short, data[64]);
+         for (j=0; j < z->img_mcu_y; ++j) {
+            for (i=0; i < z->img_mcu_x; ++i) {
+               // scan an interleaved mcu... process scan_n components in order
+               for (k=0; k < z->scan_n; ++k) {
+                  int n = z->order[k];
+                  // scan out an mcu's worth of this component; that's just determined
+                  // by the basic H and V specified for the component
+                  for (y=0; y < z->img_comp[n].v; ++y) {
+                     for (x=0; x < z->img_comp[n].h; ++x) {
+                        int x2 = (i*z->img_comp[n].h + x)*8;
+                        int y2 = (j*z->img_comp[n].v + y)*8;
+                        int ha = z->img_comp[n].ha;
+                        if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0;
+                        z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data);
+                     }
+                  }
+               }
+               // after all interleaved components, that's an interleaved MCU,
+               // so now count down the restart interval
+               if (--z->todo <= 0) {
+                  if (z->code_bits < 24) stbi__grow_buffer_unsafe(z);
+                  if (!STBI__RESTART(z->marker)) return 1;
+                  stbi__jpeg_reset(z);
+               }
+            }
+         }
+         return 1;
+      }
+   } else {
+      if (z->scan_n == 1) {
+         int i,j;
+         int n = z->order[0];
+         // non-interleaved data, we just need to process one block at a time,
+         // in trivial scanline order
+         // number of blocks to do just depends on how many actual "pixels" this
+         // component has, independent of interleaved MCU blocking and such
+         int w = (z->img_comp[n].x+7) >> 3;
+         int h = (z->img_comp[n].y+7) >> 3;
+         for (j=0; j < h; ++j) {
+            for (i=0; i < w; ++i) {
+               short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w);
+               if (z->spec_start == 0) {
+                  if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n))
+                     return 0;
+               } else {
+                  int ha = z->img_comp[n].ha;
+                  if (!stbi__jpeg_decode_block_prog_ac(z, data, &z->huff_ac[ha], z->fast_ac[ha]))
+                     return 0;
+               }
+               // every data block is an MCU, so countdown the restart interval
+               if (--z->todo <= 0) {
+                  if (z->code_bits < 24) stbi__grow_buffer_unsafe(z);
+                  if (!STBI__RESTART(z->marker)) return 1;
+                  stbi__jpeg_reset(z);
+               }
+            }
+         }
+         return 1;
+      } else { // interleaved
+         int i,j,k,x,y;
+         for (j=0; j < z->img_mcu_y; ++j) {
+            for (i=0; i < z->img_mcu_x; ++i) {
+               // scan an interleaved mcu... process scan_n components in order
+               for (k=0; k < z->scan_n; ++k) {
+                  int n = z->order[k];
+                  // scan out an mcu's worth of this component; that's just determined
+                  // by the basic H and V specified for the component
+                  for (y=0; y < z->img_comp[n].v; ++y) {
+                     for (x=0; x < z->img_comp[n].h; ++x) {
+                        int x2 = (i*z->img_comp[n].h + x);
+                        int y2 = (j*z->img_comp[n].v + y);
+                        short *data = z->img_comp[n].coeff + 64 * (x2 + y2 * z->img_comp[n].coeff_w);
+                        if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n))
+                           return 0;
+                     }
+                  }
+               }
+               // after all interleaved components, that's an interleaved MCU,
+               // so now count down the restart interval
+               if (--z->todo <= 0) {
+                  if (z->code_bits < 24) stbi__grow_buffer_unsafe(z);
+                  if (!STBI__RESTART(z->marker)) return 1;
+                  stbi__jpeg_reset(z);
+               }
+            }
+         }
+         return 1;
+      }
+   }
+}
+
+static void stbi__jpeg_dequantize(short *data, stbi_uc *dequant)
+{
+   int i;
+   for (i=0; i < 64; ++i)
+      data[i] *= dequant[i];
+}
+
+static void stbi__jpeg_finish(stbi__jpeg *z)
+{
+   if (z->progressive) {
+      // dequantize and idct the data
+      int i,j,n;
+      for (n=0; n < z->s->img_n; ++n) {
+         int w = (z->img_comp[n].x+7) >> 3;
+         int h = (z->img_comp[n].y+7) >> 3;
+         for (j=0; j < h; ++j) {
+            for (i=0; i < w; ++i) {
+               short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w);
+               stbi__jpeg_dequantize(data, z->dequant[z->img_comp[n].tq]);
+               z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data);
+            }
+         }
+      }
+   }
+}
+
+static int stbi__process_marker(stbi__jpeg *z, int m)
+{
+   int L;
+   switch (m) {
+      case STBI__MARKER_none: // no marker found
+         return stbi__err("expected marker","Corrupt JPEG");
+
+      case 0xDD: // DRI - specify restart interval
+         if (stbi__get16be(z->s) != 4) return stbi__err("bad DRI len","Corrupt JPEG");
+         z->restart_interval = stbi__get16be(z->s);
+         return 1;
+
+      case 0xDB: // DQT - define quantization table
+         L = stbi__get16be(z->s)-2;
+         while (L > 0) {
+            int q = stbi__get8(z->s);
+            int p = q >> 4;
+            int t = q & 15,i;
+            if (p != 0) return stbi__err("bad DQT type","Corrupt JPEG");
+            if (t > 3) return stbi__err("bad DQT table","Corrupt JPEG");
+            for (i=0; i < 64; ++i)
+               z->dequant[t][stbi__jpeg_dezigzag[i]] = stbi__get8(z->s);
+            L -= 65;
+         }
+         return L==0;
+
+      case 0xC4: // DHT - define huffman table
+         L = stbi__get16be(z->s)-2;
+         while (L > 0) {
+            stbi_uc *v;
+            int sizes[16],i,n=0;
+            int q = stbi__get8(z->s);
+            int tc = q >> 4;
+            int th = q & 15;
+            if (tc > 1 || th > 3) return stbi__err("bad DHT header","Corrupt JPEG");
+            for (i=0; i < 16; ++i) {
+               sizes[i] = stbi__get8(z->s);
+               n += sizes[i];
+            }
+            L -= 17;
+            if (tc == 0) {
+               if (!stbi__build_huffman(z->huff_dc+th, sizes)) return 0;
+               v = z->huff_dc[th].values;
+            } else {
+               if (!stbi__build_huffman(z->huff_ac+th, sizes)) return 0;
+               v = z->huff_ac[th].values;
+            }
+            for (i=0; i < n; ++i)
+               v[i] = stbi__get8(z->s);
+            if (tc != 0)
+               stbi__build_fast_ac(z->fast_ac[th], z->huff_ac + th);
+            L -= n;
+         }
+         return L==0;
+   }
+   // check for comment block or APP blocks
+   if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) {
+      stbi__skip(z->s, stbi__get16be(z->s)-2);
+      return 1;
+   }
+   return 0;
+}
+
+// after we see SOS
+static int stbi__process_scan_header(stbi__jpeg *z)
+{
+   int i;
+   int Ls = stbi__get16be(z->s);
+   z->scan_n = stbi__get8(z->s);
+   if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int) z->s->img_n) return stbi__err("bad SOS component count","Corrupt JPEG");
+   if (Ls != 6+2*z->scan_n) return stbi__err("bad SOS len","Corrupt JPEG");
+   for (i=0; i < z->scan_n; ++i) {
+      int id = stbi__get8(z->s), which;
+      int q = stbi__get8(z->s);
+      for (which = 0; which < z->s->img_n; ++which)
+         if (z->img_comp[which].id == id)
+            break;
+      if (which == z->s->img_n) return 0; // no match
+      z->img_comp[which].hd = q >> 4;   if (z->img_comp[which].hd > 3) return stbi__err("bad DC huff","Corrupt JPEG");
+      z->img_comp[which].ha = q & 15;   if (z->img_comp[which].ha > 3) return stbi__err("bad AC huff","Corrupt JPEG");
+      z->order[i] = which;
+   }
+
+   {
+      int aa;
+      z->spec_start = stbi__get8(z->s);
+      z->spec_end   = stbi__get8(z->s); // should be 63, but might be 0
+      aa = stbi__get8(z->s);
+      z->succ_high = (aa >> 4);
+      z->succ_low  = (aa & 15);
+      if (z->progressive) {
+         if (z->spec_start > 63 || z->spec_end > 63  || z->spec_start > z->spec_end || z->succ_high > 13 || z->succ_low > 13)
+            return stbi__err("bad SOS", "Corrupt JPEG");
+      } else {
+         if (z->spec_start != 0) return stbi__err("bad SOS","Corrupt JPEG");
+         if (z->succ_high != 0 || z->succ_low != 0) return stbi__err("bad SOS","Corrupt JPEG");
+         z->spec_end = 63;
+      }
+   }
+
+   return 1;
+}
+
+static int stbi__process_frame_header(stbi__jpeg *z, int scan)
+{
+   stbi__context *s = z->s;
+   int Lf,p,i,q, h_max=1,v_max=1,c;
+   Lf = stbi__get16be(s);         if (Lf < 11) return stbi__err("bad SOF len","Corrupt JPEG"); // JPEG
+   p  = stbi__get8(s);            if (p != 8) return stbi__err("only 8-bit","JPEG format not supported: 8-bit only"); // JPEG baseline
+   s->img_y = stbi__get16be(s);   if (s->img_y == 0) return stbi__err("no header height", "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG
+   s->img_x = stbi__get16be(s);   if (s->img_x == 0) return stbi__err("0 width","Corrupt JPEG"); // JPEG requires
+   c = stbi__get8(s);
+   if (c != 3 && c != 1) return stbi__err("bad component count","Corrupt JPEG");    // JFIF requires
+   s->img_n = c;
+   for (i=0; i < c; ++i) {
+      z->img_comp[i].data = NULL;
+      z->img_comp[i].linebuf = NULL;
+   }
+
+   if (Lf != 8+3*s->img_n) return stbi__err("bad SOF len","Corrupt JPEG");
+
+   for (i=0; i < s->img_n; ++i) {
+      z->img_comp[i].id = stbi__get8(s);
+      if (z->img_comp[i].id != i+1)   // JFIF requires
+         if (z->img_comp[i].id != i)  // some version of jpegtran outputs non-JFIF-compliant files!
+            return stbi__err("bad component ID","Corrupt JPEG");
+      q = stbi__get8(s);
+      z->img_comp[i].h = (q >> 4);  if (!z->img_comp[i].h || z->img_comp[i].h > 4) return stbi__err("bad H","Corrupt JPEG");
+      z->img_comp[i].v = q & 15;    if (!z->img_comp[i].v || z->img_comp[i].v > 4) return stbi__err("bad V","Corrupt JPEG");
+      z->img_comp[i].tq = stbi__get8(s);  if (z->img_comp[i].tq > 3) return stbi__err("bad TQ","Corrupt JPEG");
+   }
+
+   if (scan != STBI__SCAN_load) return 1;
+
+   if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to decode");
+
+   for (i=0; i < s->img_n; ++i) {
+      if (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h;
+      if (z->img_comp[i].v > v_max) v_max = z->img_comp[i].v;
+   }
+
+   // compute interleaved mcu info
+   z->img_h_max = h_max;
+   z->img_v_max = v_max;
+   z->img_mcu_w = h_max * 8;
+   z->img_mcu_h = v_max * 8;
+   z->img_mcu_x = (s->img_x + z->img_mcu_w-1) / z->img_mcu_w;
+   z->img_mcu_y = (s->img_y + z->img_mcu_h-1) / z->img_mcu_h;
+
+   for (i=0; i < s->img_n; ++i) {
+      // number of effective pixels (e.g. for non-interleaved MCU)
+      z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max-1) / h_max;
+      z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max-1) / v_max;
+      // to simplify generation, we'll allocate enough memory to decode
+      // the bogus oversized data from using interleaved MCUs and their
+      // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't
+      // discard the extra data until colorspace conversion
+      z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8;
+      z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8;
+      z->img_comp[i].raw_data = stbi__malloc(z->img_comp[i].w2 * z->img_comp[i].h2+15);
+
+      if (z->img_comp[i].raw_data == NULL) {
+         for(--i; i >= 0; --i) {
+            STBI_FREE(z->img_comp[i].raw_data);
+            z->img_comp[i].data = NULL;
+         }
+         return stbi__err("outofmem", "Out of memory");
+      }
+      // align blocks for idct using mmx/sse
+      z->img_comp[i].data = (stbi_uc*) (((size_t) z->img_comp[i].raw_data + 15) & ~15);
+      z->img_comp[i].linebuf = NULL;
+      if (z->progressive) {
+         z->img_comp[i].coeff_w = (z->img_comp[i].w2 + 7) >> 3;
+         z->img_comp[i].coeff_h = (z->img_comp[i].h2 + 7) >> 3;
+         z->img_comp[i].raw_coeff = STBI_MALLOC(z->img_comp[i].coeff_w * z->img_comp[i].coeff_h * 64 * sizeof(short) + 15);
+         z->img_comp[i].coeff = (short*) (((size_t) z->img_comp[i].raw_coeff + 15) & ~15);
+      } else {
+         z->img_comp[i].coeff = 0;
+         z->img_comp[i].raw_coeff = 0;
+      }
+   }
+
+   return 1;
+}
+
+// use comparisons since in some cases we handle more than one case (e.g. SOF)
+#define stbi__DNL(x)         ((x) == 0xdc)
+#define stbi__SOI(x)         ((x) == 0xd8)
+#define stbi__EOI(x)         ((x) == 0xd9)
+#define stbi__SOF(x)         ((x) == 0xc0 || (x) == 0xc1 || (x) == 0xc2)
+#define stbi__SOS(x)         ((x) == 0xda)
+
+#define stbi__SOF_progressive(x)   ((x) == 0xc2)
+
+static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan)
+{
+   int m;
+   z->marker = STBI__MARKER_none; // initialize cached marker to empty
+   m = stbi__get_marker(z);
+   if (!stbi__SOI(m)) return stbi__err("no SOI","Corrupt JPEG");
+   if (scan == STBI__SCAN_type) return 1;
+   m = stbi__get_marker(z);
+   while (!stbi__SOF(m)) {
+      if (!stbi__process_marker(z,m)) return 0;
+      m = stbi__get_marker(z);
+      while (m == STBI__MARKER_none) {
+         // some files have extra padding after their blocks, so ok, we'll scan
+         if (stbi__at_eof(z->s)) return stbi__err("no SOF", "Corrupt JPEG");
+         m = stbi__get_marker(z);
+      }
+   }
+   z->progressive = stbi__SOF_progressive(m);
+   if (!stbi__process_frame_header(z, scan)) return 0;
+   return 1;
+}
+
+// decode image to YCbCr format
+static int stbi__decode_jpeg_image(stbi__jpeg *j)
+{
+   int m;
+   j->restart_interval = 0;
+   if (!stbi__decode_jpeg_header(j, STBI__SCAN_load)) return 0;
+   m = stbi__get_marker(j);
+   while (!stbi__EOI(m)) {
+      if (stbi__SOS(m)) {
+         if (!stbi__process_scan_header(j)) return 0;
+         if (!stbi__parse_entropy_coded_data(j)) return 0;
+         if (j->marker == STBI__MARKER_none ) {
+            // handle 0s at the end of image data from IP Kamera 9060
+            while (!stbi__at_eof(j->s)) {
+               int x = stbi__get8(j->s);
+               if (x == 255) {
+                  j->marker = stbi__get8(j->s);
+                  break;
+               } else if (x != 0) {
+                  return stbi__err("junk before marker", "Corrupt JPEG");
+               }
+            }
+            // if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0
+         }
+      } else {
+         if (!stbi__process_marker(j, m)) return 0;
+      }
+      m = stbi__get_marker(j);
+   }
+   if (j->progressive)
+      stbi__jpeg_finish(j);
+   return 1;
+}
+
+// static jfif-centered resampling (across block boundaries)
+
+typedef stbi_uc *(*resample_row_func)(stbi_uc *out, stbi_uc *in0, stbi_uc *in1,
+                                    int w, int hs);
+
+#define stbi__div4(x) ((stbi_uc) ((x) >> 2))
+
+static stbi_uc *resample_row_1(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)
+{
+   STBI_NOTUSED(out);
+   STBI_NOTUSED(in_far);
+   STBI_NOTUSED(w);
+   STBI_NOTUSED(hs);
+   return in_near;
+}
+
+static stbi_uc* stbi__resample_row_v_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)
+{
+   // need to generate two samples vertically for every one in input
+   int i;
+   STBI_NOTUSED(hs);
+   for (i=0; i < w; ++i)
+      out[i] = stbi__div4(3*in_near[i] + in_far[i] + 2);
+   return out;
+}
+
+static stbi_uc*  stbi__resample_row_h_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)
+{
+   // need to generate two samples horizontally for every one in input
+   int i;
+   stbi_uc *input = in_near;
+
+   if (w == 1) {
+      // if only one sample, can't do any interpolation
+      out[0] = out[1] = input[0];
+      return out;
+   }
+
+   out[0] = input[0];
+   out[1] = stbi__div4(input[0]*3 + input[1] + 2);
+   for (i=1; i < w-1; ++i) {
+      int n = 3*input[i]+2;
+      out[i*2+0] = stbi__div4(n+input[i-1]);
+      out[i*2+1] = stbi__div4(n+input[i+1]);
+   }
+   out[i*2+0] = stbi__div4(input[w-2]*3 + input[w-1] + 2);
+   out[i*2+1] = input[w-1];
+
+   STBI_NOTUSED(in_far);
+   STBI_NOTUSED(hs);
+
+   return out;
+}
+
+#define stbi__div16(x) ((stbi_uc) ((x) >> 4))
+
+static stbi_uc *stbi__resample_row_hv_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)
+{
+   // need to generate 2x2 samples for every one in input
+   int i,t0,t1;
+   if (w == 1) {
+      out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2);
+      return out;
+   }
+
+   t1 = 3*in_near[0] + in_far[0];
+   out[0] = stbi__div4(t1+2);
+   for (i=1; i < w; ++i) {
+      t0 = t1;
+      t1 = 3*in_near[i]+in_far[i];
+      out[i*2-1] = stbi__div16(3*t0 + t1 + 8);
+      out[i*2  ] = stbi__div16(3*t1 + t0 + 8);
+   }
+   out[w*2-1] = stbi__div4(t1+2);
+
+   STBI_NOTUSED(hs);
+
+   return out;
+}
+
+#if defined(STBI_SSE2) || defined(STBI_NEON)
+static stbi_uc *stbi__resample_row_hv_2_simd(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)
+{
+   // need to generate 2x2 samples for every one in input
+   int i=0,t0,t1;
+
+   if (w == 1) {
+      out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2);
+      return out;
+   }
+
+   t1 = 3*in_near[0] + in_far[0];
+   // process groups of 8 pixels for as long as we can.
+   // note we can't handle the last pixel in a row in this loop
+   // because we need to handle the filter boundary conditions.
+   for (; i < ((w-1) & ~7); i += 8) {
+#if defined(STBI_SSE2)
+      // load and perform the vertical filtering pass
+      // this uses 3*x + y = 4*x + (y - x)
+      __m128i zero  = _mm_setzero_si128();
+      __m128i farb  = _mm_loadl_epi64((__m128i *) (in_far + i));
+      __m128i nearb = _mm_loadl_epi64((__m128i *) (in_near + i));
+      __m128i farw  = _mm_unpacklo_epi8(farb, zero);
+      __m128i nearw = _mm_unpacklo_epi8(nearb, zero);
+      __m128i diff  = _mm_sub_epi16(farw, nearw);
+      __m128i nears = _mm_slli_epi16(nearw, 2);
+      __m128i curr  = _mm_add_epi16(nears, diff); // current row
+
+      // horizontal filter works the same based on shifted vers of current
+      // row. "prev" is current row shifted right by 1 pixel; we need to
+      // insert the previous pixel value (from t1).
+      // "next" is current row shifted left by 1 pixel, with first pixel
+      // of next block of 8 pixels added in.
+      __m128i prv0 = _mm_slli_si128(curr, 2);
+      __m128i nxt0 = _mm_srli_si128(curr, 2);
+      __m128i prev = _mm_insert_epi16(prv0, t1, 0);
+      __m128i next = _mm_insert_epi16(nxt0, 3*in_near[i+8] + in_far[i+8], 7);
+
+      // horizontal filter, polyphase implementation since it's convenient:
+      // even pixels = 3*cur + prev = cur*4 + (prev - cur)
+      // odd  pixels = 3*cur + next = cur*4 + (next - cur)
+      // note the shared term.
+      __m128i bias  = _mm_set1_epi16(8);
+      __m128i curs = _mm_slli_epi16(curr, 2);
+      __m128i prvd = _mm_sub_epi16(prev, curr);
+      __m128i nxtd = _mm_sub_epi16(next, curr);
+      __m128i curb = _mm_add_epi16(curs, bias);
+      __m128i even = _mm_add_epi16(prvd, curb);
+      __m128i odd  = _mm_add_epi16(nxtd, curb);
+
+      // interleave even and odd pixels, then undo scaling.
+      __m128i int0 = _mm_unpacklo_epi16(even, odd);
+      __m128i int1 = _mm_unpackhi_epi16(even, odd);
+      __m128i de0  = _mm_srli_epi16(int0, 4);
+      __m128i de1  = _mm_srli_epi16(int1, 4);
+
+      // pack and write output
+      __m128i outv = _mm_packus_epi16(de0, de1);
+      _mm_storeu_si128((__m128i *) (out + i*2), outv);
+#elif defined(STBI_NEON)
+      // load and perform the vertical filtering pass
+      // this uses 3*x + y = 4*x + (y - x)
+      uint8x8_t farb  = vld1_u8(in_far + i);
+      uint8x8_t nearb = vld1_u8(in_near + i);
+      int16x8_t diff  = vreinterpretq_s16_u16(vsubl_u8(farb, nearb));
+      int16x8_t nears = vreinterpretq_s16_u16(vshll_n_u8(nearb, 2));
+      int16x8_t curr  = vaddq_s16(nears, diff); // current row
+
+      // horizontal filter works the same based on shifted vers of current
+      // row. "prev" is current row shifted right by 1 pixel; we need to
+      // insert the previous pixel value (from t1).
+      // "next" is current row shifted left by 1 pixel, with first pixel
+      // of next block of 8 pixels added in.
+      int16x8_t prv0 = vextq_s16(curr, curr, 7);
+      int16x8_t nxt0 = vextq_s16(curr, curr, 1);
+      int16x8_t prev = vsetq_lane_s16(t1, prv0, 0);
+      int16x8_t next = vsetq_lane_s16(3*in_near[i+8] + in_far[i+8], nxt0, 7);
+
+      // horizontal filter, polyphase implementation since it's convenient:
+      // even pixels = 3*cur + prev = cur*4 + (prev - cur)
+      // odd  pixels = 3*cur + next = cur*4 + (next - cur)
+      // note the shared term.
+      int16x8_t curs = vshlq_n_s16(curr, 2);
+      int16x8_t prvd = vsubq_s16(prev, curr);
+      int16x8_t nxtd = vsubq_s16(next, curr);
+      int16x8_t even = vaddq_s16(curs, prvd);
+      int16x8_t odd  = vaddq_s16(curs, nxtd);
+
+      // undo scaling and round, then store with even/odd phases interleaved
+      uint8x8x2_t o;
+      o.val[0] = vqrshrun_n_s16(even, 4);
+      o.val[1] = vqrshrun_n_s16(odd,  4);
+      vst2_u8(out + i*2, o);
+#endif
+
+      // "previous" value for next iter
+      t1 = 3*in_near[i+7] + in_far[i+7];
+   }
+
+   t0 = t1;
+   t1 = 3*in_near[i] + in_far[i];
+   out[i*2] = stbi__div16(3*t1 + t0 + 8);
+
+   for (++i; i < w; ++i) {
+      t0 = t1;
+      t1 = 3*in_near[i]+in_far[i];
+      out[i*2-1] = stbi__div16(3*t0 + t1 + 8);
+      out[i*2  ] = stbi__div16(3*t1 + t0 + 8);
+   }
+   out[w*2-1] = stbi__div4(t1+2);
+
+   STBI_NOTUSED(hs);
+
+   return out;
+}
+#endif
+
+static stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs)
+{
+   // resample with nearest-neighbor
+   int i,j;
+   STBI_NOTUSED(in_far);
+   for (i=0; i < w; ++i)
+      for (j=0; j < hs; ++j)
+         out[i*hs+j] = in_near[i];
+   return out;
+}
+
+#ifdef STBI_JPEG_OLD
+// this is the same YCbCr-to-RGB calculation that stb_image has used
+// historically before the algorithm changes in 1.49
+#define float2fixed(x)  ((int) ((x) * 65536 + 0.5))
+static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step)
+{
+   int i;
+   for (i=0; i < count; ++i) {
+      int y_fixed = (y[i] << 16) + 32768; // rounding
+      int r,g,b;
+      int cr = pcr[i] - 128;
+      int cb = pcb[i] - 128;
+      r = y_fixed + cr*float2fixed(1.40200f);
+      g = y_fixed - cr*float2fixed(0.71414f) - cb*float2fixed(0.34414f);
+      b = y_fixed                            + cb*float2fixed(1.77200f);
+      r >>= 16;
+      g >>= 16;
+      b >>= 16;
+      if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; }
+      if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; }
+      if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; }
+      out[0] = (stbi_uc)r;
+      out[1] = (stbi_uc)g;
+      out[2] = (stbi_uc)b;
+      out[3] = 255;
+      out += step;
+   }
+}
+#else
+// this is a reduced-precision calculation of YCbCr-to-RGB introduced
+// to make sure the code produces the same results in both SIMD and scalar
+#define float2fixed(x)  (((int) ((x) * 4096.0f + 0.5f)) << 8)
+static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step)
+{
+   int i;
+   for (i=0; i < count; ++i) {
+      int y_fixed = (y[i] << 20) + (1<<19); // rounding
+      int r,g,b;
+      int cr = pcr[i] - 128;
+      int cb = pcb[i] - 128;
+      r = y_fixed +  cr* float2fixed(1.40200f);
+      g = y_fixed + (cr*-float2fixed(0.71414f)) + ((cb*-float2fixed(0.34414f)) & 0xffff0000);
+      b = y_fixed                               +   cb* float2fixed(1.77200f);
+      r >>= 20;
+      g >>= 20;
+      b >>= 20;
+      if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; }
+      if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; }
+      if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; }
+      out[0] = (stbi_uc)r;
+      out[1] = (stbi_uc)g;
+      out[2] = (stbi_uc)b;
+      out[3] = 255;
+      out += step;
+   }
+}
+#endif
+
+#if defined(STBI_SSE2) || defined(STBI_NEON)
+static void stbi__YCbCr_to_RGB_simd(stbi_uc *out, stbi_uc const *y, stbi_uc const *pcb, stbi_uc const *pcr, int count, int step)
+{
+   int i = 0;
+
+#ifdef STBI_SSE2
+   // step == 3 is pretty ugly on the final interleave, and i'm not convinced
+   // it's useful in practice (you wouldn't use it for textures, for example).
+   // so just accelerate step == 4 case.
+   if (step == 4) {
+      // this is a fairly straightforward implementation and not super-optimized.
+      __m128i signflip  = _mm_set1_epi8(-0x80);
+      __m128i cr_const0 = _mm_set1_epi16(   (short) ( 1.40200f*4096.0f+0.5f));
+      __m128i cr_const1 = _mm_set1_epi16( - (short) ( 0.71414f*4096.0f+0.5f));
+      __m128i cb_const0 = _mm_set1_epi16( - (short) ( 0.34414f*4096.0f+0.5f));
+      __m128i cb_const1 = _mm_set1_epi16(   (short) ( 1.77200f*4096.0f+0.5f));
+      __m128i y_bias = _mm_set1_epi8((char) (unsigned char) 128);
+      __m128i xw = _mm_set1_epi16(255); // alpha channel
+
+      for (; i+7 < count; i += 8) {
+         // load
+         __m128i y_bytes = _mm_loadl_epi64((__m128i *) (y+i));
+         __m128i cr_bytes = _mm_loadl_epi64((__m128i *) (pcr+i));
+         __m128i cb_bytes = _mm_loadl_epi64((__m128i *) (pcb+i));
+         __m128i cr_biased = _mm_xor_si128(cr_bytes, signflip); // -128
+         __m128i cb_biased = _mm_xor_si128(cb_bytes, signflip); // -128
+
+         // unpack to short (and left-shift cr, cb by 8)
+         __m128i yw  = _mm_unpacklo_epi8(y_bias, y_bytes);
+         __m128i crw = _mm_unpacklo_epi8(_mm_setzero_si128(), cr_biased);
+         __m128i cbw = _mm_unpacklo_epi8(_mm_setzero_si128(), cb_biased);
+
+         // color transform
+         __m128i yws = _mm_srli_epi16(yw, 4);
+         __m128i cr0 = _mm_mulhi_epi16(cr_const0, crw);
+         __m128i cb0 = _mm_mulhi_epi16(cb_const0, cbw);
+         __m128i cb1 = _mm_mulhi_epi16(cbw, cb_const1);
+         __m128i cr1 = _mm_mulhi_epi16(crw, cr_const1);
+         __m128i rws = _mm_add_epi16(cr0, yws);
+         __m128i gwt = _mm_add_epi16(cb0, yws);
+         __m128i bws = _mm_add_epi16(yws, cb1);
+         __m128i gws = _mm_add_epi16(gwt, cr1);
+
+         // descale
+         __m128i rw = _mm_srai_epi16(rws, 4);
+         __m128i bw = _mm_srai_epi16(bws, 4);
+         __m128i gw = _mm_srai_epi16(gws, 4);
+
+         // back to byte, set up for transpose
+         __m128i brb = _mm_packus_epi16(rw, bw);
+         __m128i gxb = _mm_packus_epi16(gw, xw);
+
+         // transpose to interleave channels
+         __m128i t0 = _mm_unpacklo_epi8(brb, gxb);
+         __m128i t1 = _mm_unpackhi_epi8(brb, gxb);
+         __m128i o0 = _mm_unpacklo_epi16(t0, t1);
+         __m128i o1 = _mm_unpackhi_epi16(t0, t1);
+
+         // store
+         _mm_storeu_si128((__m128i *) (out + 0), o0);
+         _mm_storeu_si128((__m128i *) (out + 16), o1);
+         out += 32;
+      }
+   }
+#endif
+
+#ifdef STBI_NEON
+   // in this version, step=3 support would be easy to add. but is there demand?
+   if (step == 4) {
+      // this is a fairly straightforward implementation and not super-optimized.
+      uint8x8_t signflip = vdup_n_u8(0x80);
+      int16x8_t cr_const0 = vdupq_n_s16(   (short) ( 1.40200f*4096.0f+0.5f));
+      int16x8_t cr_const1 = vdupq_n_s16( - (short) ( 0.71414f*4096.0f+0.5f));
+      int16x8_t cb_const0 = vdupq_n_s16( - (short) ( 0.34414f*4096.0f+0.5f));
+      int16x8_t cb_const1 = vdupq_n_s16(   (short) ( 1.77200f*4096.0f+0.5f));
+
+      for (; i+7 < count; i += 8) {
+         // load
+         uint8x8_t y_bytes  = vld1_u8(y + i);
+         uint8x8_t cr_bytes = vld1_u8(pcr + i);
+         uint8x8_t cb_bytes = vld1_u8(pcb + i);
+         int8x8_t cr_biased = vreinterpret_s8_u8(vsub_u8(cr_bytes, signflip));
+         int8x8_t cb_biased = vreinterpret_s8_u8(vsub_u8(cb_bytes, signflip));
+
+         // expand to s16
+         int16x8_t yws = vreinterpretq_s16_u16(vshll_n_u8(y_bytes, 4));
+         int16x8_t crw = vshll_n_s8(cr_biased, 7);
+         int16x8_t cbw = vshll_n_s8(cb_biased, 7);
+
+         // color transform
+         int16x8_t cr0 = vqdmulhq_s16(crw, cr_const0);
+         int16x8_t cb0 = vqdmulhq_s16(cbw, cb_const0);
+         int16x8_t cr1 = vqdmulhq_s16(crw, cr_const1);
+         int16x8_t cb1 = vqdmulhq_s16(cbw, cb_const1);
+         int16x8_t rws = vaddq_s16(yws, cr0);
+         int16x8_t gws = vaddq_s16(vaddq_s16(yws, cb0), cr1);
+         int16x8_t bws = vaddq_s16(yws, cb1);
+
+         // undo scaling, round, convert to byte
+         uint8x8x4_t o;
+         o.val[0] = vqrshrun_n_s16(rws, 4);
+         o.val[1] = vqrshrun_n_s16(gws, 4);
+         o.val[2] = vqrshrun_n_s16(bws, 4);
+         o.val[3] = vdup_n_u8(255);
+
+         // store, interleaving r/g/b/a
+         vst4_u8(out, o);
+         out += 8*4;
+      }
+   }
+#endif
+
+   for (; i < count; ++i) {
+      int y_fixed = (y[i] << 20) + (1<<19); // rounding
+      int r,g,b;
+      int cr = pcr[i] - 128;
+      int cb = pcb[i] - 128;
+      r = y_fixed + cr* float2fixed(1.40200f);
+      g = y_fixed + cr*-float2fixed(0.71414f) + ((cb*-float2fixed(0.34414f)) & 0xffff0000);
+      b = y_fixed                             +   cb* float2fixed(1.77200f);
+      r >>= 20;
+      g >>= 20;
+      b >>= 20;
+      if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; }
+      if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; }
+      if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; }
+      out[0] = (stbi_uc)r;
+      out[1] = (stbi_uc)g;
+      out[2] = (stbi_uc)b;
+      out[3] = 255;
+      out += step;
+   }
+}
+#endif
+
+// set up the kernels
+static void stbi__setup_jpeg(stbi__jpeg *j)
+{
+   j->idct_block_kernel = stbi__idct_block;
+   j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_row;
+   j->resample_row_hv_2_kernel = stbi__resample_row_hv_2;
+
+#ifdef STBI_SSE2
+   if (stbi__sse2_available()) {
+      j->idct_block_kernel = stbi__idct_simd;
+      #ifndef STBI_JPEG_OLD
+      j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd;
+      #endif
+      j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd;
+   }
+#endif
+
+#ifdef STBI_NEON
+   j->idct_block_kernel = stbi__idct_simd;
+   #ifndef STBI_JPEG_OLD
+   j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd;
+   #endif
+   j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd;
+#endif
+}
+
+// clean up the temporary component buffers
+static void stbi__cleanup_jpeg(stbi__jpeg *j)
+{
+   int i;
+   for (i=0; i < j->s->img_n; ++i) {
+      if (j->img_comp[i].raw_data) {
+         STBI_FREE(j->img_comp[i].raw_data);
+         j->img_comp[i].raw_data = NULL;
+         j->img_comp[i].data = NULL;
+      }
+      if (j->img_comp[i].raw_coeff) {
+         STBI_FREE(j->img_comp[i].raw_coeff);
+         j->img_comp[i].raw_coeff = 0;
+         j->img_comp[i].coeff = 0;
+      }
+      if (j->img_comp[i].linebuf) {
+         STBI_FREE(j->img_comp[i].linebuf);
+         j->img_comp[i].linebuf = NULL;
+      }
+   }
+}
+
+typedef struct
+{
+   resample_row_func resample;
+   stbi_uc *line0,*line1;
+   int hs,vs;   // expansion factor in each axis
+   int w_lores; // horizontal pixels pre-expansion
+   int ystep;   // how far through vertical expansion we are
+   int ypos;    // which pre-expansion row we're on
+} stbi__resample;
+
+static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp, int req_comp)
+{
+   int n, decode_n;
+   z->s->img_n = 0; // make stbi__cleanup_jpeg safe
+
+   // validate req_comp
+   if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error");
+
+   // load a jpeg image from whichever source, but leave in YCbCr format
+   if (!stbi__decode_jpeg_image(z)) { stbi__cleanup_jpeg(z); return NULL; }
+
+   // determine actual number of components to generate
+   n = req_comp ? req_comp : z->s->img_n;
+
+   if (z->s->img_n == 3 && n < 3)
+      decode_n = 1;
+   else
+      decode_n = z->s->img_n;
+
+   // resample and color-convert
+   {
+      int k;
+      unsigned int i,j;
+      stbi_uc *output;
+      stbi_uc *coutput[4];
+
+      stbi__resample res_comp[4];
+
+      for (k=0; k < decode_n; ++k) {
+         stbi__resample *r = &res_comp[k];
+
+         // allocate line buffer big enough for upsampling off the edges
+         // with upsample factor of 4
+         z->img_comp[k].linebuf = (stbi_uc *) stbi__malloc(z->s->img_x + 3);
+         if (!z->img_comp[k].linebuf) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); }
+
+         r->hs      = z->img_h_max / z->img_comp[k].h;
+         r->vs      = z->img_v_max / z->img_comp[k].v;
+         r->ystep   = r->vs >> 1;
+         r->w_lores = (z->s->img_x + r->hs-1) / r->hs;
+         r->ypos    = 0;
+         r->line0   = r->line1 = z->img_comp[k].data;
+
+         if      (r->hs == 1 && r->vs == 1) r->resample = resample_row_1;
+         else if (r->hs == 1 && r->vs == 2) r->resample = stbi__resample_row_v_2;
+         else if (r->hs == 2 && r->vs == 1) r->resample = stbi__resample_row_h_2;
+         else if (r->hs == 2 && r->vs == 2) r->resample = z->resample_row_hv_2_kernel;
+         else                               r->resample = stbi__resample_row_generic;
+      }
+
+      // can't error after this so, this is safe
+      output = (stbi_uc *) stbi__malloc(n * z->s->img_x * z->s->img_y + 1);
+      if (!output) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); }
+
+      // now go ahead and resample
+      for (j=0; j < z->s->img_y; ++j) {
+         stbi_uc *out = output + n * z->s->img_x * j;
+         for (k=0; k < decode_n; ++k) {
+            stbi__resample *r = &res_comp[k];
+            int y_bot = r->ystep >= (r->vs >> 1);
+            coutput[k] = r->resample(z->img_comp[k].linebuf,
+                                     y_bot ? r->line1 : r->line0,
+                                     y_bot ? r->line0 : r->line1,
+                                     r->w_lores, r->hs);
+            if (++r->ystep >= r->vs) {
+               r->ystep = 0;
+               r->line0 = r->line1;
+               if (++r->ypos < z->img_comp[k].y)
+                  r->line1 += z->img_comp[k].w2;
+            }
+         }
+         if (n >= 3) {
+            stbi_uc *y = coutput[0];
+            if (z->s->img_n == 3) {
+               z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n);
+            } else
+               for (i=0; i < z->s->img_x; ++i) {
+                  out[0] = out[1] = out[2] = y[i];
+                  out[3] = 255; // not used if n==3
+                  out += n;
+               }
+         } else {
+            stbi_uc *y = coutput[0];
+            if (n == 1)
+               for (i=0; i < z->s->img_x; ++i) out[i] = y[i];
+            else
+               for (i=0; i < z->s->img_x; ++i) *out++ = y[i], *out++ = 255;
+         }
+      }
+      stbi__cleanup_jpeg(z);
+      *out_x = z->s->img_x;
+      *out_y = z->s->img_y;
+      if (comp) *comp  = z->s->img_n; // report original components, not output
+      return output;
+   }
+}
+
+static unsigned char *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+{
+   stbi__jpeg j;
+   j.s = s;
+   stbi__setup_jpeg(&j);
+   return load_jpeg_image(&j, x,y,comp,req_comp);
+}
+
+static int stbi__jpeg_test(stbi__context *s)
+{
+   int r;
+   stbi__jpeg j;
+   j.s = s;
+   stbi__setup_jpeg(&j);
+   r = stbi__decode_jpeg_header(&j, STBI__SCAN_type);
+   stbi__rewind(s);
+   return r;
+}
+
+static int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp)
+{
+   if (!stbi__decode_jpeg_header(j, STBI__SCAN_header)) {
+      stbi__rewind( j->s );
+      return 0;
+   }
+   if (x) *x = j->s->img_x;
+   if (y) *y = j->s->img_y;
+   if (comp) *comp = j->s->img_n;
+   return 1;
+}
+
+static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp)
+{
+   stbi__jpeg j;
+   j.s = s;
+   return stbi__jpeg_info_raw(&j, x, y, comp);
+}
+#endif
+
+// public domain zlib decode    v0.2  Sean Barrett 2006-11-18
+//    simple implementation
+//      - all input must be provided in an upfront buffer
+//      - all output is written to a single output buffer (can malloc/realloc)
+//    performance
+//      - fast huffman
+
+#ifndef STBI_NO_ZLIB
+
+// fast-way is faster to check than jpeg huffman, but slow way is slower
+#define STBI__ZFAST_BITS  9 // accelerate all cases in default tables
+#define STBI__ZFAST_MASK  ((1 << STBI__ZFAST_BITS) - 1)
+
+// zlib-style huffman encoding
+// (jpegs packs from left, zlib from right, so can't share code)
+typedef struct
+{
+   stbi__uint16 fast[1 << STBI__ZFAST_BITS];
+   stbi__uint16 firstcode[16];
+   int maxcode[17];
+   stbi__uint16 firstsymbol[16];
+   stbi_uc  size[288];
+   stbi__uint16 value[288];
+} stbi__zhuffman;
+
+stbi_inline static int stbi__bitreverse16(int n)
+{
+  n = ((n & 0xAAAA) >>  1) | ((n & 0x5555) << 1);
+  n = ((n & 0xCCCC) >>  2) | ((n & 0x3333) << 2);
+  n = ((n & 0xF0F0) >>  4) | ((n & 0x0F0F) << 4);
+  n = ((n & 0xFF00) >>  8) | ((n & 0x00FF) << 8);
+  return n;
+}
+
+stbi_inline static int stbi__bit_reverse(int v, int bits)
+{
+   STBI_ASSERT(bits <= 16);
+   // to bit reverse n bits, reverse 16 and shift
+   // e.g. 11 bits, bit reverse and shift away 5
+   return stbi__bitreverse16(v) >> (16-bits);
+}
+
+static int stbi__zbuild_huffman(stbi__zhuffman *z, stbi_uc *sizelist, int num)
+{
+   int i,k=0;
+   int code, next_code[16], sizes[17];
+
+   // DEFLATE spec for generating codes
+   memset(sizes, 0, sizeof(sizes));
+   memset(z->fast, 0, sizeof(z->fast));
+   for (i=0; i < num; ++i)
+      ++sizes[sizelist[i]];
+   sizes[0] = 0;
+   for (i=1; i < 16; ++i)
+      STBI_ASSERT(sizes[i] <= (1 << i));
+   code = 0;
+   for (i=1; i < 16; ++i) {
+      next_code[i] = code;
+      z->firstcode[i] = (stbi__uint16) code;
+      z->firstsymbol[i] = (stbi__uint16) k;
+      code = (code + sizes[i]);
+      if (sizes[i])
+         if (code-1 >= (1 << i)) return stbi__err("bad codelengths","Corrupt JPEG");
+      z->maxcode[i] = code << (16-i); // preshift for inner loop
+      code <<= 1;
+      k += sizes[i];
+   }
+   z->maxcode[16] = 0x10000; // sentinel
+   for (i=0; i < num; ++i) {
+      int s = sizelist[i];
+      if (s) {
+         int c = next_code[s] - z->firstcode[s] + z->firstsymbol[s];
+         stbi__uint16 fastv = (stbi__uint16) ((s << 9) | i);
+         z->size [c] = (stbi_uc     ) s;
+         z->value[c] = (stbi__uint16) i;
+         if (s <= STBI__ZFAST_BITS) {
+            int k = stbi__bit_reverse(next_code[s],s);
+            while (k < (1 << STBI__ZFAST_BITS)) {
+               z->fast[k] = fastv;
+               k += (1 << s);
+            }
+         }
+         ++next_code[s];
+      }
+   }
+   return 1;
+}
+
+// zlib-from-memory implementation for PNG reading
+//    because PNG allows splitting the zlib stream arbitrarily,
+//    and it's annoying structurally to have PNG call ZLIB call PNG,
+//    we require PNG read all the IDATs and combine them into a single
+//    memory buffer
+
+typedef struct
+{
+   stbi_uc *zbuffer, *zbuffer_end;
+   int num_bits;
+   stbi__uint32 code_buffer;
+
+   char *zout;
+   char *zout_start;
+   char *zout_end;
+   int   z_expandable;
+
+   stbi__zhuffman z_length, z_distance;
+} stbi__zbuf;
+
+stbi_inline static stbi_uc stbi__zget8(stbi__zbuf *z)
+{
+   if (z->zbuffer >= z->zbuffer_end) return 0;
+   return *z->zbuffer++;
+}
+
+static void stbi__fill_bits(stbi__zbuf *z)
+{
+   do {
+      STBI_ASSERT(z->code_buffer < (1U << z->num_bits));
+      z->code_buffer |= stbi__zget8(z) << z->num_bits;
+      z->num_bits += 8;
+   } while (z->num_bits <= 24);
+}
+
+stbi_inline static unsigned int stbi__zreceive(stbi__zbuf *z, int n)
+{
+   unsigned int k;
+   if (z->num_bits < n) stbi__fill_bits(z);
+   k = z->code_buffer & ((1 << n) - 1);
+   z->code_buffer >>= n;
+   z->num_bits -= n;
+   return k;
+}
+
+static int stbi__zhuffman_decode_slowpath(stbi__zbuf *a, stbi__zhuffman *z)
+{
+   int b,s,k;
+   // not resolved by fast table, so compute it the slow way
+   // use jpeg approach, which requires MSbits at top
+   k = stbi__bit_reverse(a->code_buffer, 16);
+   for (s=STBI__ZFAST_BITS+1; ; ++s)
+      if (k < z->maxcode[s])
+         break;
+   if (s == 16) return -1; // invalid code!
+   // code size is s, so:
+   b = (k >> (16-s)) - z->firstcode[s] + z->firstsymbol[s];
+   STBI_ASSERT(z->size[b] == s);
+   a->code_buffer >>= s;
+   a->num_bits -= s;
+   return z->value[b];
+}
+
+stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z)
+{
+   int b,s;
+   if (a->num_bits < 16) stbi__fill_bits(a);
+   b = z->fast[a->code_buffer & STBI__ZFAST_MASK];
+   if (b) {
+      s = b >> 9;
+      a->code_buffer >>= s;
+      a->num_bits -= s;
+      return b & 511;
+   }
+   return stbi__zhuffman_decode_slowpath(a, z);
+}
+
+static int stbi__zexpand(stbi__zbuf *z, char *zout, int n)  // need to make room for n bytes
+{
+   char *q;
+   int cur, limit;
+   z->zout = zout;
+   if (!z->z_expandable) return stbi__err("output buffer limit","Corrupt PNG");
+   cur   = (int) (z->zout     - z->zout_start);
+   limit = (int) (z->zout_end - z->zout_start);
+   while (cur + n > limit)
+      limit *= 2;
+   q = (char *) STBI_REALLOC(z->zout_start, limit);
+   if (q == NULL) return stbi__err("outofmem", "Out of memory");
+   z->zout_start = q;
+   z->zout       = q + cur;
+   z->zout_end   = q + limit;
+   return 1;
+}
+
+static int stbi__zlength_base[31] = {
+   3,4,5,6,7,8,9,10,11,13,
+   15,17,19,23,27,31,35,43,51,59,
+   67,83,99,115,131,163,195,227,258,0,0 };
+
+static int stbi__zlength_extra[31]=
+{ 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 };
+
+static int stbi__zdist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,
+257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0};
+
+static int stbi__zdist_extra[32] =
+{ 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
+
+static int stbi__parse_huffman_block(stbi__zbuf *a)
+{
+   char *zout = a->zout;
+   for(;;) {
+      int z = stbi__zhuffman_decode(a, &a->z_length);
+      if (z < 256) {
+         if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); // error in huffman codes
+         if (zout >= a->zout_end) {
+            if (!stbi__zexpand(a, zout, 1)) return 0;
+            zout = a->zout;
+         }
+         *zout++ = (char) z;
+      } else {
+         stbi_uc *p;
+         int len,dist;
+         if (z == 256) {
+            a->zout = zout;
+            return 1;
+         }
+         z -= 257;
+         len = stbi__zlength_base[z];
+         if (stbi__zlength_extra[z]) len += stbi__zreceive(a, stbi__zlength_extra[z]);
+         z = stbi__zhuffman_decode(a, &a->z_distance);
+         if (z < 0) return stbi__err("bad huffman code","Corrupt PNG");
+         dist = stbi__zdist_base[z];
+         if (stbi__zdist_extra[z]) dist += stbi__zreceive(a, stbi__zdist_extra[z]);
+         if (zout - a->zout_start < dist) return stbi__err("bad dist","Corrupt PNG");
+         if (zout + len > a->zout_end) {
+            if (!stbi__zexpand(a, zout, len)) return 0;
+            zout = a->zout;
+         }
+         p = (stbi_uc *) (zout - dist);
+         if (dist == 1) { // run of one byte; common in images.
+            stbi_uc v = *p;
+            do *zout++ = v; while (--len);
+         } else {
+            do *zout++ = *p++; while (--len);
+         }
+      }
+   }
+}
+
+static int stbi__compute_huffman_codes(stbi__zbuf *a)
+{
+   static stbi_uc length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 };
+   stbi__zhuffman z_codelength;
+   stbi_uc lencodes[286+32+137];//padding for maximum single op
+   stbi_uc codelength_sizes[19];
+   int i,n;
+
+   int hlit  = stbi__zreceive(a,5) + 257;
+   int hdist = stbi__zreceive(a,5) + 1;
+   int hclen = stbi__zreceive(a,4) + 4;
+
+   memset(codelength_sizes, 0, sizeof(codelength_sizes));
+   for (i=0; i < hclen; ++i) {
+      int s = stbi__zreceive(a,3);
+      codelength_sizes[length_dezigzag[i]] = (stbi_uc) s;
+   }
+   if (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0;
+
+   n = 0;
+   while (n < hlit + hdist) {
+      int c = stbi__zhuffman_decode(a, &z_codelength);
+      STBI_ASSERT(c >= 0 && c < 19);
+      if (c < 16)
+         lencodes[n++] = (stbi_uc) c;
+      else if (c == 16) {
+         c = stbi__zreceive(a,2)+3;
+         memset(lencodes+n, lencodes[n-1], c);
+         n += c;
+      } else if (c == 17) {
+         c = stbi__zreceive(a,3)+3;
+         memset(lencodes+n, 0, c);
+         n += c;
+      } else {
+         STBI_ASSERT(c == 18);
+         c = stbi__zreceive(a,7)+11;
+         memset(lencodes+n, 0, c);
+         n += c;
+      }
+   }
+   if (n != hlit+hdist) return stbi__err("bad codelengths","Corrupt PNG");
+   if (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) return 0;
+   if (!stbi__zbuild_huffman(&a->z_distance, lencodes+hlit, hdist)) return 0;
+   return 1;
+}
+
+static int stbi__parse_uncomperssed_block(stbi__zbuf *a)
+{
+   stbi_uc header[4];
+   int len,nlen,k;
+   if (a->num_bits & 7)
+      stbi__zreceive(a, a->num_bits & 7); // discard
+   // drain the bit-packed data into header
+   k = 0;
+   while (a->num_bits > 0) {
+      header[k++] = (stbi_uc) (a->code_buffer & 255); // suppress MSVC run-time check
+      a->code_buffer >>= 8;
+      a->num_bits -= 8;
+   }
+   STBI_ASSERT(a->num_bits == 0);
+   // now fill header the normal way
+   while (k < 4)
+      header[k++] = stbi__zget8(a);
+   len  = header[1] * 256 + header[0];
+   nlen = header[3] * 256 + header[2];
+   if (nlen != (len ^ 0xffff)) return stbi__err("zlib corrupt","Corrupt PNG");
+   if (a->zbuffer + len > a->zbuffer_end) return stbi__err("read past buffer","Corrupt PNG");
+   if (a->zout + len > a->zout_end)
+      if (!stbi__zexpand(a, a->zout, len)) return 0;
+   memcpy(a->zout, a->zbuffer, len);
+   a->zbuffer += len;
+   a->zout += len;
+   return 1;
+}
+
+static int stbi__parse_zlib_header(stbi__zbuf *a)
+{
+   int cmf   = stbi__zget8(a);
+   int cm    = cmf & 15;
+   /* int cinfo = cmf >> 4; */
+   int flg   = stbi__zget8(a);
+   if ((cmf*256+flg) % 31 != 0) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec
+   if (flg & 32) return stbi__err("no preset dict","Corrupt PNG"); // preset dictionary not allowed in png
+   if (cm != 8) return stbi__err("bad compression","Corrupt PNG"); // DEFLATE required for png
+   // window = 1 << (8 + cinfo)... but who cares, we fully buffer output
+   return 1;
+}
+
+// @TODO: should statically initialize these for optimal thread safety
+static stbi_uc stbi__zdefault_length[288], stbi__zdefault_distance[32];
+static void stbi__init_zdefaults(void)
+{
+   int i;   // use <= to match clearly with spec
+   for (i=0; i <= 143; ++i)     stbi__zdefault_length[i]   = 8;
+   for (   ; i <= 255; ++i)     stbi__zdefault_length[i]   = 9;
+   for (   ; i <= 279; ++i)     stbi__zdefault_length[i]   = 7;
+   for (   ; i <= 287; ++i)     stbi__zdefault_length[i]   = 8;
+
+   for (i=0; i <=  31; ++i)     stbi__zdefault_distance[i] = 5;
+}
+
+static int stbi__parse_zlib(stbi__zbuf *a, int parse_header)
+{
+   int final, type;
+   if (parse_header)
+      if (!stbi__parse_zlib_header(a)) return 0;
+   a->num_bits = 0;
+   a->code_buffer = 0;
+   do {
+      final = stbi__zreceive(a,1);
+      type = stbi__zreceive(a,2);
+      if (type == 0) {
+         if (!stbi__parse_uncomperssed_block(a)) return 0;
+      } else if (type == 3) {
+         return 0;
+      } else {
+         if (type == 1) {
+            // use fixed code lengths
+            if (!stbi__zdefault_distance[31]) stbi__init_zdefaults();
+            if (!stbi__zbuild_huffman(&a->z_length  , stbi__zdefault_length  , 288)) return 0;
+            if (!stbi__zbuild_huffman(&a->z_distance, stbi__zdefault_distance,  32)) return 0;
+         } else {
+            if (!stbi__compute_huffman_codes(a)) return 0;
+         }
+         if (!stbi__parse_huffman_block(a)) return 0;
+      }
+   } while (!final);
+   return 1;
+}
+
+static int stbi__do_zlib(stbi__zbuf *a, char *obuf, int olen, int exp, int parse_header)
+{
+   a->zout_start = obuf;
+   a->zout       = obuf;
+   a->zout_end   = obuf + olen;
+   a->z_expandable = exp;
+
+   return stbi__parse_zlib(a, parse_header);
+}
+
+STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen)
+{
+   stbi__zbuf a;
+   char *p = (char *) stbi__malloc(initial_size);
+   if (p == NULL) return NULL;
+   a.zbuffer = (stbi_uc *) buffer;
+   a.zbuffer_end = (stbi_uc *) buffer + len;
+   if (stbi__do_zlib(&a, p, initial_size, 1, 1)) {
+      if (outlen) *outlen = (int) (a.zout - a.zout_start);
+      return a.zout_start;
+   } else {
+      STBI_FREE(a.zout_start);
+      return NULL;
+   }
+}
+
+STBIDEF char *stbi_zlib_decode_malloc(char const *buffer, int len, int *outlen)
+{
+   return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen);
+}
+
+STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header)
+{
+   stbi__zbuf a;
+   char *p = (char *) stbi__malloc(initial_size);
+   if (p == NULL) return NULL;
+   a.zbuffer = (stbi_uc *) buffer;
+   a.zbuffer_end = (stbi_uc *) buffer + len;
+   if (stbi__do_zlib(&a, p, initial_size, 1, parse_header)) {
+      if (outlen) *outlen = (int) (a.zout - a.zout_start);
+      return a.zout_start;
+   } else {
+      STBI_FREE(a.zout_start);
+      return NULL;
+   }
+}
+
+STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, char const *ibuffer, int ilen)
+{
+   stbi__zbuf a;
+   a.zbuffer = (stbi_uc *) ibuffer;
+   a.zbuffer_end = (stbi_uc *) ibuffer + ilen;
+   if (stbi__do_zlib(&a, obuffer, olen, 0, 1))
+      return (int) (a.zout - a.zout_start);
+   else
+      return -1;
+}
+
+STBIDEF char *stbi_zlib_decode_noheader_malloc(char const *buffer, int len, int *outlen)
+{
+   stbi__zbuf a;
+   char *p = (char *) stbi__malloc(16384);
+   if (p == NULL) return NULL;
+   a.zbuffer = (stbi_uc *) buffer;
+   a.zbuffer_end = (stbi_uc *) buffer+len;
+   if (stbi__do_zlib(&a, p, 16384, 1, 0)) {
+      if (outlen) *outlen = (int) (a.zout - a.zout_start);
+      return a.zout_start;
+   } else {
+      STBI_FREE(a.zout_start);
+      return NULL;
+   }
+}
+
+STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen)
+{
+   stbi__zbuf a;
+   a.zbuffer = (stbi_uc *) ibuffer;
+   a.zbuffer_end = (stbi_uc *) ibuffer + ilen;
+   if (stbi__do_zlib(&a, obuffer, olen, 0, 0))
+      return (int) (a.zout - a.zout_start);
+   else
+      return -1;
+}
+#endif
+
+// public domain "baseline" PNG decoder   v0.10  Sean Barrett 2006-11-18
+//    simple implementation
+//      - only 8-bit samples
+//      - no CRC checking
+//      - allocates lots of intermediate memory
+//        - avoids problem of streaming data between subsystems
+//        - avoids explicit window management
+//    performance
+//      - uses stb_zlib, a PD zlib implementation with fast huffman decoding
+
+#ifndef STBI_NO_PNG
+typedef struct
+{
+   stbi__uint32 length;
+   stbi__uint32 type;
+} stbi__pngchunk;
+
+static stbi__pngchunk stbi__get_chunk_header(stbi__context *s)
+{
+   stbi__pngchunk c;
+   c.length = stbi__get32be(s);
+   c.type   = stbi__get32be(s);
+   return c;
+}
+
+static int stbi__check_png_header(stbi__context *s)
+{
+   static stbi_uc png_sig[8] = { 137,80,78,71,13,10,26,10 };
+   int i;
+   for (i=0; i < 8; ++i)
+      if (stbi__get8(s) != png_sig[i]) return stbi__err("bad png sig","Not a PNG");
+   return 1;
+}
+
+typedef struct
+{
+   stbi__context *s;
+   stbi_uc *idata, *expanded, *out;
+} stbi__png;
+
+
+enum {
+   STBI__F_none=0,
+   STBI__F_sub=1,
+   STBI__F_up=2,
+   STBI__F_avg=3,
+   STBI__F_paeth=4,
+   // synthetic filters used for first scanline to avoid needing a dummy row of 0s
+   STBI__F_avg_first,
+   STBI__F_paeth_first
+};
+
+static stbi_uc first_row_filter[5] =
+{
+   STBI__F_none,
+   STBI__F_sub,
+   STBI__F_none,
+   STBI__F_avg_first,
+   STBI__F_paeth_first
+};
+
+static int stbi__paeth(int a, int b, int c)
+{
+   int p = a + b - c;
+   int pa = abs(p-a);
+   int pb = abs(p-b);
+   int pc = abs(p-c);
+   if (pa <= pb && pa <= pc) return a;
+   if (pb <= pc) return b;
+   return c;
+}
+
+static stbi_uc stbi__depth_scale_table[9] = { 0, 0xff, 0x55, 0, 0x11, 0,0,0, 0x01 };
+
+// create the png data from post-deflated data
+static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_len, int out_n, stbi__uint32 x, stbi__uint32 y, int depth, int color)
+{
+   stbi__context *s = a->s;
+   stbi__uint32 i,j,stride = x*out_n;
+   stbi__uint32 img_len, img_width_bytes;
+   int k;
+   int img_n = s->img_n; // copy it into a local for later
+
+   STBI_ASSERT(out_n == s->img_n || out_n == s->img_n+1);
+   a->out = (stbi_uc *) stbi__malloc(x * y * out_n); // extra bytes to write off the end into
+   if (!a->out) return stbi__err("outofmem", "Out of memory");
+
+   img_width_bytes = (((img_n * x * depth) + 7) >> 3);
+   img_len = (img_width_bytes + 1) * y;
+   if (s->img_x == x && s->img_y == y) {
+      if (raw_len != img_len) return stbi__err("not enough pixels","Corrupt PNG");
+   } else { // interlaced:
+      if (raw_len < img_len) return stbi__err("not enough pixels","Corrupt PNG");
+   }
+
+   for (j=0; j < y; ++j) {
+      stbi_uc *cur = a->out + stride*j;
+      stbi_uc *prior = cur - stride;
+      int filter = *raw++;
+      int filter_bytes = img_n;
+      int width = x;
+      if (filter > 4)
+         return stbi__err("invalid filter","Corrupt PNG");
+
+      if (depth < 8) {
+         STBI_ASSERT(img_width_bytes <= x);
+         cur += x*out_n - img_width_bytes; // store output to the rightmost img_len bytes, so we can decode in place
+         filter_bytes = 1;
+         width = img_width_bytes;
+      }
+
+      // if first row, use special filter that doesn't sample previous row
+      if (j == 0) filter = first_row_filter[filter];
+
+      // handle first byte explicitly
+      for (k=0; k < filter_bytes; ++k) {
+         switch (filter) {
+            case STBI__F_none       : cur[k] = raw[k]; break;
+            case STBI__F_sub        : cur[k] = raw[k]; break;
+            case STBI__F_up         : cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break;
+            case STBI__F_avg        : cur[k] = STBI__BYTECAST(raw[k] + (prior[k]>>1)); break;
+            case STBI__F_paeth      : cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(0,prior[k],0)); break;
+            case STBI__F_avg_first  : cur[k] = raw[k]; break;
+            case STBI__F_paeth_first: cur[k] = raw[k]; break;
+         }
+      }
+
+      if (depth == 8) {
+         if (img_n != out_n)
+            cur[img_n] = 255; // first pixel
+         raw += img_n;
+         cur += out_n;
+         prior += out_n;
+      } else {
+         raw += 1;
+         cur += 1;
+         prior += 1;
+      }
+
+      // this is a little gross, so that we don't switch per-pixel or per-component
+      if (depth < 8 || img_n == out_n) {
+         int nk = (width - 1)*img_n;
+         #define CASE(f) \
+             case f:     \
+                for (k=0; k < nk; ++k)
+         switch (filter) {
+            // "none" filter turns into a memcpy here; make that explicit.
+            case STBI__F_none:         memcpy(cur, raw, nk); break;
+            CASE(STBI__F_sub)          cur[k] = STBI__BYTECAST(raw[k] + cur[k-filter_bytes]); break;
+            CASE(STBI__F_up)           cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break;
+            CASE(STBI__F_avg)          cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-filter_bytes])>>1)); break;
+            CASE(STBI__F_paeth)        cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],prior[k],prior[k-filter_bytes])); break;
+            CASE(STBI__F_avg_first)    cur[k] = STBI__BYTECAST(raw[k] + (cur[k-filter_bytes] >> 1)); break;
+            CASE(STBI__F_paeth_first)  cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],0,0)); break;
+         }
+         #undef CASE
+         raw += nk;
+      } else {
+         STBI_ASSERT(img_n+1 == out_n);
+         #define CASE(f) \
+             case f:     \
+                for (i=x-1; i >= 1; --i, cur[img_n]=255,raw+=img_n,cur+=out_n,prior+=out_n) \
+                   for (k=0; k < img_n; ++k)
+         switch (filter) {
+            CASE(STBI__F_none)         cur[k] = raw[k]; break;
+            CASE(STBI__F_sub)          cur[k] = STBI__BYTECAST(raw[k] + cur[k-out_n]); break;
+            CASE(STBI__F_up)           cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break;
+            CASE(STBI__F_avg)          cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-out_n])>>1)); break;
+            CASE(STBI__F_paeth)        cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-out_n],prior[k],prior[k-out_n])); break;
+            CASE(STBI__F_avg_first)    cur[k] = STBI__BYTECAST(raw[k] + (cur[k-out_n] >> 1)); break;
+            CASE(STBI__F_paeth_first)  cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-out_n],0,0)); break;
+         }
+         #undef CASE
+      }
+   }
+
+   // we make a separate pass to expand bits to pixels; for performance,
+   // this could run two scanlines behind the above code, so it won't
+   // intefere with filtering but will still be in the cache.
+   if (depth < 8) {
+      for (j=0; j < y; ++j) {
+         stbi_uc *cur = a->out + stride*j;
+         stbi_uc *in  = a->out + stride*j + x*out_n - img_width_bytes;
+         // unpack 1/2/4-bit into a 8-bit buffer. allows us to keep the common 8-bit path optimal at minimal cost for 1/2/4-bit
+         // png guarante byte alignment, if width is not multiple of 8/4/2 we'll decode dummy trailing data that will be skipped in the later loop
+         stbi_uc scale = (color == 0) ? stbi__depth_scale_table[depth] : 1; // scale grayscale values to 0..255 range
+
+         // note that the final byte might overshoot and write more data than desired.
+         // we can allocate enough data that this never writes out of memory, but it
+         // could also overwrite the next scanline. can it overwrite non-empty data
+         // on the next scanline? yes, consider 1-pixel-wide scanlines with 1-bit-per-pixel.
+         // so we need to explicitly clamp the final ones
+
+         if (depth == 4) {
+            for (k=x*img_n; k >= 2; k-=2, ++in) {
+               *cur++ = scale * ((*in >> 4)       );
+               *cur++ = scale * ((*in     ) & 0x0f);
+            }
+            if (k > 0) *cur++ = scale * ((*in >> 4)       );
+         } else if (depth == 2) {
+            for (k=x*img_n; k >= 4; k-=4, ++in) {
+               *cur++ = scale * ((*in >> 6)       );
+               *cur++ = scale * ((*in >> 4) & 0x03);
+               *cur++ = scale * ((*in >> 2) & 0x03);
+               *cur++ = scale * ((*in     ) & 0x03);
+            }
+            if (k > 0) *cur++ = scale * ((*in >> 6)       );
+            if (k > 1) *cur++ = scale * ((*in >> 4) & 0x03);
+            if (k > 2) *cur++ = scale * ((*in >> 2) & 0x03);
+         } else if (depth == 1) {
+            for (k=x*img_n; k >= 8; k-=8, ++in) {
+               *cur++ = scale * ((*in >> 7)       );
+               *cur++ = scale * ((*in >> 6) & 0x01);
+               *cur++ = scale * ((*in >> 5) & 0x01);
+               *cur++ = scale * ((*in >> 4) & 0x01);
+               *cur++ = scale * ((*in >> 3) & 0x01);
+               *cur++ = scale * ((*in >> 2) & 0x01);
+               *cur++ = scale * ((*in >> 1) & 0x01);
+               *cur++ = scale * ((*in     ) & 0x01);
+            }
+            if (k > 0) *cur++ = scale * ((*in >> 7)       );
+            if (k > 1) *cur++ = scale * ((*in >> 6) & 0x01);
+            if (k > 2) *cur++ = scale * ((*in >> 5) & 0x01);
+            if (k > 3) *cur++ = scale * ((*in >> 4) & 0x01);
+            if (k > 4) *cur++ = scale * ((*in >> 3) & 0x01);
+            if (k > 5) *cur++ = scale * ((*in >> 2) & 0x01);
+            if (k > 6) *cur++ = scale * ((*in >> 1) & 0x01);
+         }
+         if (img_n != out_n) {
+            // insert alpha = 255
+            stbi_uc *cur = a->out + stride*j;
+            int i;
+            if (img_n == 1) {
+               for (i=x-1; i >= 0; --i) {
+                  cur[i*2+1] = 255;
+                  cur[i*2+0] = cur[i];
+               }
+            } else {
+               STBI_ASSERT(img_n == 3);
+               for (i=x-1; i >= 0; --i) {
+                  cur[i*4+3] = 255;
+                  cur[i*4+2] = cur[i*3+2];
+                  cur[i*4+1] = cur[i*3+1];
+                  cur[i*4+0] = cur[i*3+0];
+               }
+            }
+         }
+      }
+   }
+
+   return 1;
+}
+
+static int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, stbi__uint32 image_data_len, int out_n, int depth, int color, int interlaced)
+{
+   stbi_uc *final;
+   int p;
+   if (!interlaced)
+      return stbi__create_png_image_raw(a, image_data, image_data_len, out_n, a->s->img_x, a->s->img_y, depth, color);
+
+   // de-interlacing
+   final = (stbi_uc *) stbi__malloc(a->s->img_x * a->s->img_y * out_n);
+   for (p=0; p < 7; ++p) {
+      int xorig[] = { 0,4,0,2,0,1,0 };
+      int yorig[] = { 0,0,4,0,2,0,1 };
+      int xspc[]  = { 8,8,4,4,2,2,1 };
+      int yspc[]  = { 8,8,8,4,4,2,2 };
+      int i,j,x,y;
+      // pass1_x[4] = 0, pass1_x[5] = 1, pass1_x[12] = 1
+      x = (a->s->img_x - xorig[p] + xspc[p]-1) / xspc[p];
+      y = (a->s->img_y - yorig[p] + yspc[p]-1) / yspc[p];
+      if (x && y) {
+         stbi__uint32 img_len = ((((a->s->img_n * x * depth) + 7) >> 3) + 1) * y;
+         if (!stbi__create_png_image_raw(a, image_data, image_data_len, out_n, x, y, depth, color)) {
+            STBI_FREE(final);
+            return 0;
+         }
+         for (j=0; j < y; ++j) {
+            for (i=0; i < x; ++i) {
+               int out_y = j*yspc[p]+yorig[p];
+               int out_x = i*xspc[p]+xorig[p];
+               memcpy(final + out_y*a->s->img_x*out_n + out_x*out_n,
+                      a->out + (j*x+i)*out_n, out_n);
+            }
+         }
+         STBI_FREE(a->out);
+         image_data += img_len;
+         image_data_len -= img_len;
+      }
+   }
+   a->out = final;
+
+   return 1;
+}
+
+static int stbi__compute_transparency(stbi__png *z, stbi_uc tc[3], int out_n)
+{
+   stbi__context *s = z->s;
+   stbi__uint32 i, pixel_count = s->img_x * s->img_y;
+   stbi_uc *p = z->out;
+
+   // compute color-based transparency, assuming we've
+   // already got 255 as the alpha value in the output
+   STBI_ASSERT(out_n == 2 || out_n == 4);
+
+   if (out_n == 2) {
+      for (i=0; i < pixel_count; ++i) {
+         p[1] = (p[0] == tc[0] ? 0 : 255);
+         p += 2;
+      }
+   } else {
+      for (i=0; i < pixel_count; ++i) {
+         if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2])
+            p[3] = 0;
+         p += 4;
+      }
+   }
+   return 1;
+}
+
+static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int len, int pal_img_n)
+{
+   stbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y;
+   stbi_uc *p, *temp_out, *orig = a->out;
+
+   p = (stbi_uc *) stbi__malloc(pixel_count * pal_img_n);
+   if (p == NULL) return stbi__err("outofmem", "Out of memory");
+
+   // between here and free(out) below, exitting would leak
+   temp_out = p;
+
+   if (pal_img_n == 3) {
+      for (i=0; i < pixel_count; ++i) {
+         int n = orig[i]*4;
+         p[0] = palette[n  ];
+         p[1] = palette[n+1];
+         p[2] = palette[n+2];
+         p += 3;
+      }
+   } else {
+      for (i=0; i < pixel_count; ++i) {
+         int n = orig[i]*4;
+         p[0] = palette[n  ];
+         p[1] = palette[n+1];
+         p[2] = palette[n+2];
+         p[3] = palette[n+3];
+         p += 4;
+      }
+   }
+   STBI_FREE(a->out);
+   a->out = temp_out;
+
+   STBI_NOTUSED(len);
+
+   return 1;
+}
+
+static int stbi__unpremultiply_on_load = 0;
+static int stbi__de_iphone_flag = 0;
+
+STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply)
+{
+   stbi__unpremultiply_on_load = flag_true_if_should_unpremultiply;
+}
+
+STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert)
+{
+   stbi__de_iphone_flag = flag_true_if_should_convert;
+}
+
+static void stbi__de_iphone(stbi__png *z)
+{
+   stbi__context *s = z->s;
+   stbi__uint32 i, pixel_count = s->img_x * s->img_y;
+   stbi_uc *p = z->out;
+
+   if (s->img_out_n == 3) {  // convert bgr to rgb
+      for (i=0; i < pixel_count; ++i) {
+         stbi_uc t = p[0];
+         p[0] = p[2];
+         p[2] = t;
+         p += 3;
+      }
+   } else {
+      STBI_ASSERT(s->img_out_n == 4);
+      if (stbi__unpremultiply_on_load) {
+         // convert bgr to rgb and unpremultiply
+         for (i=0; i < pixel_count; ++i) {
+            stbi_uc a = p[3];
+            stbi_uc t = p[0];
+            if (a) {
+               p[0] = p[2] * 255 / a;
+               p[1] = p[1] * 255 / a;
+               p[2] =  t   * 255 / a;
+            } else {
+               p[0] = p[2];
+               p[2] = t;
+            }
+            p += 4;
+         }
+      } else {
+         // convert bgr to rgb
+         for (i=0; i < pixel_count; ++i) {
+            stbi_uc t = p[0];
+            p[0] = p[2];
+            p[2] = t;
+            p += 4;
+         }
+      }
+   }
+}
+
+#define STBI__PNG_TYPE(a,b,c,d)  (((a) << 24) + ((b) << 16) + ((c) << 8) + (d))
+
+static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp)
+{
+   stbi_uc palette[1024], pal_img_n=0;
+   stbi_uc has_trans=0, tc[3];
+   stbi__uint32 ioff=0, idata_limit=0, i, pal_len=0;
+   int first=1,k,interlace=0, color=0, depth=0, is_iphone=0;
+   stbi__context *s = z->s;
+
+   z->expanded = NULL;
+   z->idata = NULL;
+   z->out = NULL;
+
+   if (!stbi__check_png_header(s)) return 0;
+
+   if (scan == STBI__SCAN_type) return 1;
+
+   for (;;) {
+      stbi__pngchunk c = stbi__get_chunk_header(s);
+      switch (c.type) {
+         case STBI__PNG_TYPE('C','g','B','I'):
+            is_iphone = 1;
+            stbi__skip(s, c.length);
+            break;
+         case STBI__PNG_TYPE('I','H','D','R'): {
+            int comp,filter;
+            if (!first) return stbi__err("multiple IHDR","Corrupt PNG");
+            first = 0;
+            if (c.length != 13) return stbi__err("bad IHDR len","Corrupt PNG");
+            s->img_x = stbi__get32be(s); if (s->img_x > (1 << 24)) return stbi__err("too large","Very large image (corrupt?)");
+            s->img_y = stbi__get32be(s); if (s->img_y > (1 << 24)) return stbi__err("too large","Very large image (corrupt?)");
+            depth = stbi__get8(s);  if (depth != 1 && depth != 2 && depth != 4 && depth != 8)  return stbi__err("1/2/4/8-bit only","PNG not supported: 1/2/4/8-bit only");
+            color = stbi__get8(s);  if (color > 6)         return stbi__err("bad ctype","Corrupt PNG");
+            if (color == 3) pal_img_n = 3; else if (color & 1) return stbi__err("bad ctype","Corrupt PNG");
+            comp  = stbi__get8(s);  if (comp) return stbi__err("bad comp method","Corrupt PNG");
+            filter= stbi__get8(s);  if (filter) return stbi__err("bad filter method","Corrupt PNG");
+            interlace = stbi__get8(s); if (interlace>1) return stbi__err("bad interlace method","Corrupt PNG");
+            if (!s->img_x || !s->img_y) return stbi__err("0-pixel image","Corrupt PNG");
+            if (!pal_img_n) {
+               s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0);
+               if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to decode");
+               if (scan == STBI__SCAN_header) return 1;
+            } else {
+               // if paletted, then pal_n is our final components, and
+               // img_n is # components to decompress/filter.
+               s->img_n = 1;
+               if ((1 << 30) / s->img_x / 4 < s->img_y) return stbi__err("too large","Corrupt PNG");
+               // if SCAN_header, have to scan to see if we have a tRNS
+            }
+            break;
+         }
+
+         case STBI__PNG_TYPE('P','L','T','E'):  {
+            if (first) return stbi__err("first not IHDR", "Corrupt PNG");
+            if (c.length > 256*3) return stbi__err("invalid PLTE","Corrupt PNG");
+            pal_len = c.length / 3;
+            if (pal_len * 3 != c.length) return stbi__err("invalid PLTE","Corrupt PNG");
+            for (i=0; i < pal_len; ++i) {
+               palette[i*4+0] = stbi__get8(s);
+               palette[i*4+1] = stbi__get8(s);
+               palette[i*4+2] = stbi__get8(s);
+               palette[i*4+3] = 255;
+            }
+            break;
+         }
+
+         case STBI__PNG_TYPE('t','R','N','S'): {
+            if (first) return stbi__err("first not IHDR", "Corrupt PNG");
+            if (z->idata) return stbi__err("tRNS after IDAT","Corrupt PNG");
+            if (pal_img_n) {
+               if (scan == STBI__SCAN_header) { s->img_n = 4; return 1; }
+               if (pal_len == 0) return stbi__err("tRNS before PLTE","Corrupt PNG");
+               if (c.length > pal_len) return stbi__err("bad tRNS len","Corrupt PNG");
+               pal_img_n = 4;
+               for (i=0; i < c.length; ++i)
+                  palette[i*4+3] = stbi__get8(s);
+            } else {
+               if (!(s->img_n & 1)) return stbi__err("tRNS with alpha","Corrupt PNG");
+               if (c.length != (stbi__uint32) s->img_n*2) return stbi__err("bad tRNS len","Corrupt PNG");
+               has_trans = 1;
+               for (k=0; k < s->img_n; ++k)
+                  tc[k] = (stbi_uc) (stbi__get16be(s) & 255) * stbi__depth_scale_table[depth]; // non 8-bit images will be larger
+            }
+            break;
+         }
+
+         case STBI__PNG_TYPE('I','D','A','T'): {
+            if (first) return stbi__err("first not IHDR", "Corrupt PNG");
+            if (pal_img_n && !pal_len) return stbi__err("no PLTE","Corrupt PNG");
+            if (scan == STBI__SCAN_header) { s->img_n = pal_img_n; return 1; }
+            if (ioff + c.length > idata_limit) {
+               stbi_uc *p;
+               if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096;
+               while (ioff + c.length > idata_limit)
+                  idata_limit *= 2;
+               p = (stbi_uc *) STBI_REALLOC(z->idata, idata_limit); if (p == NULL) return stbi__err("outofmem", "Out of memory");
+               z->idata = p;
+            }
+            if (!stbi__getn(s, z->idata+ioff,c.length)) return stbi__err("outofdata","Corrupt PNG");
+            ioff += c.length;
+            break;
+         }
+
+         case STBI__PNG_TYPE('I','E','N','D'): {
+            stbi__uint32 raw_len, bpl;
+            if (first) return stbi__err("first not IHDR", "Corrupt PNG");
+            if (scan != STBI__SCAN_load) return 1;
+            if (z->idata == NULL) return stbi__err("no IDAT","Corrupt PNG");
+            // initial guess for decoded data size to avoid unnecessary reallocs
+            bpl = (s->img_x * depth + 7) / 8; // bytes per line, per component
+            raw_len = bpl * s->img_y * s->img_n /* pixels */ + s->img_y /* filter mode per row */;
+            z->expanded = (stbi_uc *) stbi_zlib_decode_malloc_guesssize_headerflag((char *) z->idata, ioff, raw_len, (int *) &raw_len, !is_iphone);
+            if (z->expanded == NULL) return 0; // zlib should set error
+            STBI_FREE(z->idata); z->idata = NULL;
+            if ((req_comp == s->img_n+1 && req_comp != 3 && !pal_img_n) || has_trans)
+               s->img_out_n = s->img_n+1;
+            else
+               s->img_out_n = s->img_n;
+            if (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, depth, color, interlace)) return 0;
+            if (has_trans)
+               if (!stbi__compute_transparency(z, tc, s->img_out_n)) return 0;
+            if (is_iphone && stbi__de_iphone_flag && s->img_out_n > 2)
+               stbi__de_iphone(z);
+            if (pal_img_n) {
+               // pal_img_n == 3 or 4
+               s->img_n = pal_img_n; // record the actual colors we had
+               s->img_out_n = pal_img_n;
+               if (req_comp >= 3) s->img_out_n = req_comp;
+               if (!stbi__expand_png_palette(z, palette, pal_len, s->img_out_n))
+                  return 0;
+            }
+            STBI_FREE(z->expanded); z->expanded = NULL;
+            return 1;
+         }
+
+         default:
+            // if critical, fail
+            if (first) return stbi__err("first not IHDR", "Corrupt PNG");
+            if ((c.type & (1 << 29)) == 0) {
+               #ifndef STBI_NO_FAILURE_STRINGS
+               // not threadsafe
+               static char invalid_chunk[] = "XXXX PNG chunk not known";
+               invalid_chunk[0] = STBI__BYTECAST(c.type >> 24);
+               invalid_chunk[1] = STBI__BYTECAST(c.type >> 16);
+               invalid_chunk[2] = STBI__BYTECAST(c.type >>  8);
+               invalid_chunk[3] = STBI__BYTECAST(c.type >>  0);
+               #endif
+               return stbi__err(invalid_chunk, "PNG not supported: unknown PNG chunk type");
+            }
+            stbi__skip(s, c.length);
+            break;
+      }
+      // end of PNG chunk, read and skip CRC
+      stbi__get32be(s);
+   }
+}
+
+static unsigned char *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req_comp)
+{
+   unsigned char *result=NULL;
+   if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error");
+   if (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) {
+      result = p->out;
+      p->out = NULL;
+      if (req_comp && req_comp != p->s->img_out_n) {
+         result = stbi__convert_format(result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y);
+         p->s->img_out_n = req_comp;
+         if (result == NULL) return result;
+      }
+      *x = p->s->img_x;
+      *y = p->s->img_y;
+      if (n) *n = p->s->img_out_n;
+   }
+   STBI_FREE(p->out);      p->out      = NULL;
+   STBI_FREE(p->expanded); p->expanded = NULL;
+   STBI_FREE(p->idata);    p->idata    = NULL;
+
+   return result;
+}
+
+static unsigned char *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+{
+   stbi__png p;
+   p.s = s;
+   return stbi__do_png(&p, x,y,comp,req_comp);
+}
+
+static int stbi__png_test(stbi__context *s)
+{
+   int r;
+   r = stbi__check_png_header(s);
+   stbi__rewind(s);
+   return r;
+}
+
+static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp)
+{
+   if (!stbi__parse_png_file(p, STBI__SCAN_header, 0)) {
+      stbi__rewind( p->s );
+      return 0;
+   }
+   if (x) *x = p->s->img_x;
+   if (y) *y = p->s->img_y;
+   if (comp) *comp = p->s->img_n;
+   return 1;
+}
+
+static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp)
+{
+   stbi__png p;
+   p.s = s;
+   return stbi__png_info_raw(&p, x, y, comp);
+}
+#endif
+
+// Microsoft/Windows BMP image
+
+#ifndef STBI_NO_BMP
+static int stbi__bmp_test_raw(stbi__context *s)
+{
+   int r;
+   int sz;
+   if (stbi__get8(s) != 'B') return 0;
+   if (stbi__get8(s) != 'M') return 0;
+   stbi__get32le(s); // discard filesize
+   stbi__get16le(s); // discard reserved
+   stbi__get16le(s); // discard reserved
+   stbi__get32le(s); // discard data offset
+   sz = stbi__get32le(s);
+   r = (sz == 12 || sz == 40 || sz == 56 || sz == 108 || sz == 124);
+   return r;
+}
+
+static int stbi__bmp_test(stbi__context *s)
+{
+   int r = stbi__bmp_test_raw(s);
+   stbi__rewind(s);
+   return r;
+}
+
+
+// returns 0..31 for the highest set bit
+static int stbi__high_bit(unsigned int z)
+{
+   int n=0;
+   if (z == 0) return -1;
+   if (z >= 0x10000) n += 16, z >>= 16;
+   if (z >= 0x00100) n +=  8, z >>=  8;
+   if (z >= 0x00010) n +=  4, z >>=  4;
+   if (z >= 0x00004) n +=  2, z >>=  2;
+   if (z >= 0x00002) n +=  1, z >>=  1;
+   return n;
+}
+
+static int stbi__bitcount(unsigned int a)
+{
+   a = (a & 0x55555555) + ((a >>  1) & 0x55555555); // max 2
+   a = (a & 0x33333333) + ((a >>  2) & 0x33333333); // max 4
+   a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits
+   a = (a + (a >> 8)); // max 16 per 8 bits
+   a = (a + (a >> 16)); // max 32 per 8 bits
+   return a & 0xff;
+}
+
+static int stbi__shiftsigned(int v, int shift, int bits)
+{
+   int result;
+   int z=0;
+
+   if (shift < 0) v <<= -shift;
+   else v >>= shift;
+   result = v;
+
+   z = bits;
+   while (z < 8) {
+      result += v >> z;
+      z += bits;
+   }
+   return result;
+}
+
+static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+{
+   stbi_uc *out;
+   unsigned int mr=0,mg=0,mb=0,ma=0, fake_a=0;
+   stbi_uc pal[256][4];
+   int psize=0,i,j,compress=0,width;
+   int bpp, flip_vertically, pad, target, offset, hsz;
+   if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') return stbi__errpuc("not BMP", "Corrupt BMP");
+   stbi__get32le(s); // discard filesize
+   stbi__get16le(s); // discard reserved
+   stbi__get16le(s); // discard reserved
+   offset = stbi__get32le(s);
+   hsz = stbi__get32le(s);
+   if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) return stbi__errpuc("unknown BMP", "BMP type not supported: unknown");
+   if (hsz == 12) {
+      s->img_x = stbi__get16le(s);
+      s->img_y = stbi__get16le(s);
+   } else {
+      s->img_x = stbi__get32le(s);
+      s->img_y = stbi__get32le(s);
+   }
+   if (stbi__get16le(s) != 1) return stbi__errpuc("bad BMP", "bad BMP");
+   bpp = stbi__get16le(s);
+   if (bpp == 1) return stbi__errpuc("monochrome", "BMP type not supported: 1-bit");
+   flip_vertically = ((int) s->img_y) > 0;
+   s->img_y = abs((int) s->img_y);
+   if (hsz == 12) {
+      if (bpp < 24)
+         psize = (offset - 14 - 24) / 3;
+   } else {
+      compress = stbi__get32le(s);
+      if (compress == 1 || compress == 2) return stbi__errpuc("BMP RLE", "BMP type not supported: RLE");
+      stbi__get32le(s); // discard sizeof
+      stbi__get32le(s); // discard hres
+      stbi__get32le(s); // discard vres
+      stbi__get32le(s); // discard colorsused
+      stbi__get32le(s); // discard max important
+      if (hsz == 40 || hsz == 56) {
+         if (hsz == 56) {
+            stbi__get32le(s);
+            stbi__get32le(s);
+            stbi__get32le(s);
+            stbi__get32le(s);
+         }
+         if (bpp == 16 || bpp == 32) {
+            mr = mg = mb = 0;
+            if (compress == 0) {
+               if (bpp == 32) {
+                  mr = 0xffu << 16;
+                  mg = 0xffu <<  8;
+                  mb = 0xffu <<  0;
+                  ma = 0xffu << 24;
+                  fake_a = 1; // @TODO: check for cases like alpha value is all 0 and switch it to 255
+                  STBI_NOTUSED(fake_a);
+               } else {
+                  mr = 31u << 10;
+                  mg = 31u <<  5;
+                  mb = 31u <<  0;
+               }
+            } else if (compress == 3) {
+               mr = stbi__get32le(s);
+               mg = stbi__get32le(s);
+               mb = stbi__get32le(s);
+               // not documented, but generated by photoshop and handled by mspaint
+               if (mr == mg && mg == mb) {
+                  // ?!?!?
+                  return stbi__errpuc("bad BMP", "bad BMP");
+               }
+            } else
+               return stbi__errpuc("bad BMP", "bad BMP");
+         }
+      } else {
+         STBI_ASSERT(hsz == 108 || hsz == 124);
+         mr = stbi__get32le(s);
+         mg = stbi__get32le(s);
+         mb = stbi__get32le(s);
+         ma = stbi__get32le(s);
+         stbi__get32le(s); // discard color space
+         for (i=0; i < 12; ++i)
+            stbi__get32le(s); // discard color space parameters
+         if (hsz == 124) {
+            stbi__get32le(s); // discard rendering intent
+            stbi__get32le(s); // discard offset of profile data
+            stbi__get32le(s); // discard size of profile data
+            stbi__get32le(s); // discard reserved
+         }
+      }
+      if (bpp < 16)
+         psize = (offset - 14 - hsz) >> 2;
+   }
+   s->img_n = ma ? 4 : 3;
+   if (req_comp && req_comp >= 3) // we can directly decode 3 or 4
+      target = req_comp;
+   else
+      target = s->img_n; // if they want monochrome, we'll post-convert
+   out = (stbi_uc *) stbi__malloc(target * s->img_x * s->img_y);
+   if (!out) return stbi__errpuc("outofmem", "Out of memory");
+   if (bpp < 16) {
+      int z=0;
+      if (psize == 0 || psize > 256) { STBI_FREE(out); return stbi__errpuc("invalid", "Corrupt BMP"); }
+      for (i=0; i < psize; ++i) {
+         pal[i][2] = stbi__get8(s);
+         pal[i][1] = stbi__get8(s);
+         pal[i][0] = stbi__get8(s);
+         if (hsz != 12) stbi__get8(s);
+         pal[i][3] = 255;
+      }
+      stbi__skip(s, offset - 14 - hsz - psize * (hsz == 12 ? 3 : 4));
+      if (bpp == 4) width = (s->img_x + 1) >> 1;
+      else if (bpp == 8) width = s->img_x;
+      else { STBI_FREE(out); return stbi__errpuc("bad bpp", "Corrupt BMP"); }
+      pad = (-width)&3;
+      for (j=0; j < (int) s->img_y; ++j) {
+         for (i=0; i < (int) s->img_x; i += 2) {
+            int v=stbi__get8(s),v2=0;
+            if (bpp == 4) {
+               v2 = v & 15;
+               v >>= 4;
+            }
+            out[z++] = pal[v][0];
+            out[z++] = pal[v][1];
+            out[z++] = pal[v][2];
+            if (target == 4) out[z++] = 255;
+            if (i+1 == (int) s->img_x) break;
+            v = (bpp == 8) ? stbi__get8(s) : v2;
+            out[z++] = pal[v][0];
+            out[z++] = pal[v][1];
+            out[z++] = pal[v][2];
+            if (target == 4) out[z++] = 255;
+         }
+         stbi__skip(s, pad);
+      }
+   } else {
+      int rshift=0,gshift=0,bshift=0,ashift=0,rcount=0,gcount=0,bcount=0,acount=0;
+      int z = 0;
+      int easy=0;
+      stbi__skip(s, offset - 14 - hsz);
+      if (bpp == 24) width = 3 * s->img_x;
+      else if (bpp == 16) width = 2*s->img_x;
+      else /* bpp = 32 and pad = 0 */ width=0;
+      pad = (-width) & 3;
+      if (bpp == 24) {
+         easy = 1;
+      } else if (bpp == 32) {
+         if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && ma == 0xff000000)
+            easy = 2;
+      }
+      if (!easy) {
+         if (!mr || !mg || !mb) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); }
+         // right shift amt to put high bit in position #7
+         rshift = stbi__high_bit(mr)-7; rcount = stbi__bitcount(mr);
+         gshift = stbi__high_bit(mg)-7; gcount = stbi__bitcount(mg);
+         bshift = stbi__high_bit(mb)-7; bcount = stbi__bitcount(mb);
+         ashift = stbi__high_bit(ma)-7; acount = stbi__bitcount(ma);
+      }
+      for (j=0; j < (int) s->img_y; ++j) {
+         if (easy) {
+            for (i=0; i < (int) s->img_x; ++i) {
+               unsigned char a;
+               out[z+2] = stbi__get8(s);
+               out[z+1] = stbi__get8(s);
+               out[z+0] = stbi__get8(s);
+               z += 3;
+               a = (easy == 2 ? stbi__get8(s) : 255);
+               if (target == 4) out[z++] = a;
+            }
+         } else {
+            for (i=0; i < (int) s->img_x; ++i) {
+               stbi__uint32 v = (stbi__uint32) (bpp == 16 ? stbi__get16le(s) : stbi__get32le(s));
+               int a;
+               out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mr, rshift, rcount));
+               out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mg, gshift, gcount));
+               out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mb, bshift, bcount));
+               a = (ma ? stbi__shiftsigned(v & ma, ashift, acount) : 255);
+               if (target == 4) out[z++] = STBI__BYTECAST(a);
+            }
+         }
+         stbi__skip(s, pad);
+      }
+   }
+   if (flip_vertically) {
+      stbi_uc t;
+      for (j=0; j < (int) s->img_y>>1; ++j) {
+         stbi_uc *p1 = out +      j     *s->img_x*target;
+         stbi_uc *p2 = out + (s->img_y-1-j)*s->img_x*target;
+         for (i=0; i < (int) s->img_x*target; ++i) {
+            t = p1[i], p1[i] = p2[i], p2[i] = t;
+         }
+      }
+   }
+
+   if (req_comp && req_comp != target) {
+      out = stbi__convert_format(out, target, req_comp, s->img_x, s->img_y);
+      if (out == NULL) return out; // stbi__convert_format frees input on failure
+   }
+
+   *x = s->img_x;
+   *y = s->img_y;
+   if (comp) *comp = s->img_n;
+   return out;
+}
+#endif
+
+// Targa Truevision - TGA
+// by Jonathan Dummer
+#ifndef STBI_NO_TGA
+static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp)
+{
+    int tga_w, tga_h, tga_comp;
+    int sz;
+    stbi__get8(s);                   // discard Offset
+    sz = stbi__get8(s);              // color type
+    if( sz > 1 ) {
+        stbi__rewind(s);
+        return 0;      // only RGB or indexed allowed
+    }
+    sz = stbi__get8(s);              // image type
+    // only RGB or grey allowed, +/- RLE
+    if ((sz != 1) && (sz != 2) && (sz != 3) && (sz != 9) && (sz != 10) && (sz != 11)) return 0;
+    stbi__skip(s,9);
+    tga_w = stbi__get16le(s);
+    if( tga_w < 1 ) {
+        stbi__rewind(s);
+        return 0;   // test width
+    }
+    tga_h = stbi__get16le(s);
+    if( tga_h < 1 ) {
+        stbi__rewind(s);
+        return 0;   // test height
+    }
+    sz = stbi__get8(s);               // bits per pixel
+    // only RGB or RGBA or grey allowed
+    if ((sz != 8) && (sz != 16) && (sz != 24) && (sz != 32)) {
+        stbi__rewind(s);
+        return 0;
+    }
+    tga_comp = sz;
+    if (x) *x = tga_w;
+    if (y) *y = tga_h;
+    if (comp) *comp = tga_comp / 8;
+    return 1;                   // seems to have passed everything
+}
+
+static int stbi__tga_test(stbi__context *s)
+{
+   int res;
+   int sz;
+   stbi__get8(s);      //   discard Offset
+   sz = stbi__get8(s);   //   color type
+   if ( sz > 1 ) return 0;   //   only RGB or indexed allowed
+   sz = stbi__get8(s);   //   image type
+   if ( (sz != 1) && (sz != 2) && (sz != 3) && (sz != 9) && (sz != 10) && (sz != 11) ) return 0;   //   only RGB or grey allowed, +/- RLE
+   stbi__get16be(s);      //   discard palette start
+   stbi__get16be(s);      //   discard palette length
+   stbi__get8(s);         //   discard bits per palette color entry
+   stbi__get16be(s);      //   discard x origin
+   stbi__get16be(s);      //   discard y origin
+   if ( stbi__get16be(s) < 1 ) return 0;      //   test width
+   if ( stbi__get16be(s) < 1 ) return 0;      //   test height
+   sz = stbi__get8(s);   //   bits per pixel
+   if ( (sz != 8) && (sz != 16) && (sz != 24) && (sz != 32) )
+      res = 0;
+   else
+      res = 1;
+   stbi__rewind(s);
+   return res;
+}
+
+static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+{
+   //   read in the TGA header stuff
+   int tga_offset = stbi__get8(s);
+   int tga_indexed = stbi__get8(s);
+   int tga_image_type = stbi__get8(s);
+   int tga_is_RLE = 0;
+   int tga_palette_start = stbi__get16le(s);
+   int tga_palette_len = stbi__get16le(s);
+   int tga_palette_bits = stbi__get8(s);
+   int tga_x_origin = stbi__get16le(s);
+   int tga_y_origin = stbi__get16le(s);
+   int tga_width = stbi__get16le(s);
+   int tga_height = stbi__get16le(s);
+   int tga_bits_per_pixel = stbi__get8(s);
+   int tga_comp = tga_bits_per_pixel / 8;
+   int tga_inverted = stbi__get8(s);
+   //   image data
+   unsigned char *tga_data;
+   unsigned char *tga_palette = NULL;
+   int i, j;
+   unsigned char raw_data[4];
+   int RLE_count = 0;
+   int RLE_repeating = 0;
+   int read_next_pixel = 1;
+
+   //   do a tiny bit of precessing
+   if ( tga_image_type >= 8 )
+   {
+      tga_image_type -= 8;
+      tga_is_RLE = 1;
+   }
+   /* int tga_alpha_bits = tga_inverted & 15; */
+   tga_inverted = 1 - ((tga_inverted >> 5) & 1);
+
+   //   error check
+   if ( //(tga_indexed) ||
+      (tga_width < 1) || (tga_height < 1) ||
+      (tga_image_type < 1) || (tga_image_type > 3) ||
+      ((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16) &&
+      (tga_bits_per_pixel != 24) && (tga_bits_per_pixel != 32))
+      )
+   {
+      return NULL; // we don't report this as a bad TGA because we don't even know if it's TGA
+   }
+
+   //   If I'm paletted, then I'll use the number of bits from the palette
+   if ( tga_indexed )
+   {
+      tga_comp = tga_palette_bits / 8;
+   }
+
+   //   tga info
+   *x = tga_width;
+   *y = tga_height;
+   if (comp) *comp = tga_comp;
+
+   tga_data = (unsigned char*)stbi__malloc( tga_width * tga_height * tga_comp );
+   if (!tga_data) return stbi__errpuc("outofmem", "Out of memory");
+
+   // skip to the data's starting position (offset usually = 0)
+   stbi__skip(s, tga_offset );
+
+   if ( !tga_indexed && !tga_is_RLE) {
+      for (i=0; i < tga_height; ++i) {
+         int y = tga_inverted ? tga_height -i - 1 : i;
+         stbi_uc *tga_row = tga_data + y*tga_width*tga_comp;
+         stbi__getn(s, tga_row, tga_width * tga_comp);
+      }
+   } else  {
+      //   do I need to load a palette?
+      if ( tga_indexed)
+      {
+         //   any data to skip? (offset usually = 0)
+         stbi__skip(s, tga_palette_start );
+         //   load the palette
+         tga_palette = (unsigned char*)stbi__malloc( tga_palette_len * tga_palette_bits / 8 );
+         if (!tga_palette) {
+            STBI_FREE(tga_data);
+            return stbi__errpuc("outofmem", "Out of memory");
+         }
+         if (!stbi__getn(s, tga_palette, tga_palette_len * tga_palette_bits / 8 )) {
+            STBI_FREE(tga_data);
+            STBI_FREE(tga_palette);
+            return stbi__errpuc("bad palette", "Corrupt TGA");
+         }
+      }
+      //   load the data
+      for (i=0; i < tga_width * tga_height; ++i)
+      {
+         //   if I'm in RLE mode, do I need to get a RLE stbi__pngchunk?
+         if ( tga_is_RLE )
+         {
+            if ( RLE_count == 0 )
+            {
+               //   yep, get the next byte as a RLE command
+               int RLE_cmd = stbi__get8(s);
+               RLE_count = 1 + (RLE_cmd & 127);
+               RLE_repeating = RLE_cmd >> 7;
+               read_next_pixel = 1;
+            } else if ( !RLE_repeating )
+            {
+               read_next_pixel = 1;
+            }
+         } else
+         {
+            read_next_pixel = 1;
+         }
+         //   OK, if I need to read a pixel, do it now
+         if ( read_next_pixel )
+         {
+            //   load however much data we did have
+            if ( tga_indexed )
+            {
+               //   read in 1 byte, then perform the lookup
+               int pal_idx = stbi__get8(s);
+               if ( pal_idx >= tga_palette_len )
+               {
+                  //   invalid index
+                  pal_idx = 0;
+               }
+               pal_idx *= tga_bits_per_pixel / 8;
+               for (j = 0; j*8 < tga_bits_per_pixel; ++j)
+               {
+                  raw_data[j] = tga_palette[pal_idx+j];
+               }
+            } else
+            {
+               //   read in the data raw
+               for (j = 0; j*8 < tga_bits_per_pixel; ++j)
+               {
+                  raw_data[j] = stbi__get8(s);
+               }
+            }
+            //   clear the reading flag for the next pixel
+            read_next_pixel = 0;
+         } // end of reading a pixel
+
+         // copy data
+         for (j = 0; j < tga_comp; ++j)
+           tga_data[i*tga_comp+j] = raw_data[j];
+
+         //   in case we're in RLE mode, keep counting down
+         --RLE_count;
+      }
+      //   do I need to invert the image?
+      if ( tga_inverted )
+      {
+         for (j = 0; j*2 < tga_height; ++j)
+         {
+            int index1 = j * tga_width * tga_comp;
+            int index2 = (tga_height - 1 - j) * tga_width * tga_comp;
+            for (i = tga_width * tga_comp; i > 0; --i)
+            {
+               unsigned char temp = tga_data[index1];
+               tga_data[index1] = tga_data[index2];
+               tga_data[index2] = temp;
+               ++index1;
+               ++index2;
+            }
+         }
+      }
+      //   clear my palette, if I had one
+      if ( tga_palette != NULL )
+      {
+         STBI_FREE( tga_palette );
+      }
+   }
+
+   // swap RGB
+   if (tga_comp >= 3)
+   {
+      unsigned char* tga_pixel = tga_data;
+      for (i=0; i < tga_width * tga_height; ++i)
+      {
+         unsigned char temp = tga_pixel[0];
+         tga_pixel[0] = tga_pixel[2];
+         tga_pixel[2] = temp;
+         tga_pixel += tga_comp;
+      }
+   }
+
+   // convert to target component count
+   if (req_comp && req_comp != tga_comp)
+      tga_data = stbi__convert_format(tga_data, tga_comp, req_comp, tga_width, tga_height);
+
+   //   the things I do to get rid of an error message, and yet keep
+   //   Microsoft's C compilers happy... [8^(
+   tga_palette_start = tga_palette_len = tga_palette_bits =
+         tga_x_origin = tga_y_origin = 0;
+   //   OK, done
+   return tga_data;
+}
+#endif
+
+// *************************************************************************************************
+// Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicolas Schulz, tweaked by STB
+
+#ifndef STBI_NO_PSD
+static int stbi__psd_test(stbi__context *s)
+{
+   int r = (stbi__get32be(s) == 0x38425053);
+   stbi__rewind(s);
+   return r;
+}
+
+static stbi_uc *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+{
+   int   pixelCount;
+   int channelCount, compression;
+   int channel, i, count, len;
+   int w,h;
+   stbi_uc *out;
+
+   // Check identifier
+   if (stbi__get32be(s) != 0x38425053)   // "8BPS"
+      return stbi__errpuc("not PSD", "Corrupt PSD image");
+
+   // Check file type version.
+   if (stbi__get16be(s) != 1)
+      return stbi__errpuc("wrong version", "Unsupported version of PSD image");
+
+   // Skip 6 reserved bytes.
+   stbi__skip(s, 6 );
+
+   // Read the number of channels (R, G, B, A, etc).
+   channelCount = stbi__get16be(s);
+   if (channelCount < 0 || channelCount > 16)
+      return stbi__errpuc("wrong channel count", "Unsupported number of channels in PSD image");
+
+   // Read the rows and columns of the image.
+   h = stbi__get32be(s);
+   w = stbi__get32be(s);
+
+   // Make sure the depth is 8 bits.
+   if (stbi__get16be(s) != 8)
+      return stbi__errpuc("unsupported bit depth", "PSD bit depth is not 8 bit");
+
+   // Make sure the color mode is RGB.
+   // Valid options are:
+   //   0: Bitmap
+   //   1: Grayscale
+   //   2: Indexed color
+   //   3: RGB color
+   //   4: CMYK color
+   //   7: Multichannel
+   //   8: Duotone
+   //   9: Lab color
+   if (stbi__get16be(s) != 3)
+      return stbi__errpuc("wrong color format", "PSD is not in RGB color format");
+
+   // Skip the Mode Data.  (It's the palette for indexed color; other info for other modes.)
+   stbi__skip(s,stbi__get32be(s) );
+
+   // Skip the image resources.  (resolution, pen tool paths, etc)
+   stbi__skip(s, stbi__get32be(s) );
+
+   // Skip the reserved data.
+   stbi__skip(s, stbi__get32be(s) );
+
+   // Find out if the data is compressed.
+   // Known values:
+   //   0: no compression
+   //   1: RLE compressed
+   compression = stbi__get16be(s);
+   if (compression > 1)
+      return stbi__errpuc("bad compression", "PSD has an unknown compression format");
+
+   // Create the destination image.
+   out = (stbi_uc *) stbi__malloc(4 * w*h);
+   if (!out) return stbi__errpuc("outofmem", "Out of memory");
+   pixelCount = w*h;
+
+   // Initialize the data to zero.
+   //memset( out, 0, pixelCount * 4 );
+
+   // Finally, the image data.
+   if (compression) {
+      // RLE as used by .PSD and .TIFF
+      // Loop until you get the number of unpacked bytes you are expecting:
+      //     Read the next source byte into n.
+      //     If n is between 0 and 127 inclusive, copy the next n+1 bytes literally.
+      //     Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times.
+      //     Else if n is 128, noop.
+      // Endloop
+
+      // The RLE-compressed data is preceeded by a 2-byte data count for each row in the data,
+      // which we're going to just skip.
+      stbi__skip(s, h * channelCount * 2 );
+
+      // Read the RLE data by channel.
+      for (channel = 0; channel < 4; channel++) {
+         stbi_uc *p;
+
+         p = out+channel;
+         if (channel >= channelCount) {
+            // Fill this channel with default data.
+            for (i = 0; i < pixelCount; i++) *p = (channel == 3 ? 255 : 0), p += 4;
+         } else {
+            // Read the RLE data.
+            count = 0;
+            while (count < pixelCount) {
+               len = stbi__get8(s);
+               if (len == 128) {
+                  // No-op.
+               } else if (len < 128) {
+                  // Copy next len+1 bytes literally.
+                  len++;
+                  count += len;
+                  while (len) {
+                     *p = stbi__get8(s);
+                     p += 4;
+                     len--;
+                  }
+               } else if (len > 128) {
+                  stbi_uc   val;
+                  // Next -len+1 bytes in the dest are replicated from next source byte.
+                  // (Interpret len as a negative 8-bit int.)
+                  len ^= 0x0FF;
+                  len += 2;
+                  val = stbi__get8(s);
+                  count += len;
+                  while (len) {
+                     *p = val;
+                     p += 4;
+                     len--;
+                  }
+               }
+            }
+         }
+      }
+
+   } else {
+      // We're at the raw image data.  It's each channel in order (Red, Green, Blue, Alpha, ...)
+      // where each channel consists of an 8-bit value for each pixel in the image.
+
+      // Read the data by channel.
+      for (channel = 0; channel < 4; channel++) {
+         stbi_uc *p;
+
+         p = out + channel;
+         if (channel > channelCount) {
+            // Fill this channel with default data.
+            for (i = 0; i < pixelCount; i++) *p = channel == 3 ? 255 : 0, p += 4;
+         } else {
+            // Read the data.
+            for (i = 0; i < pixelCount; i++)
+               *p = stbi__get8(s), p += 4;
+         }
+      }
+   }
+
+   if (req_comp && req_comp != 4) {
+      out = stbi__convert_format(out, 4, req_comp, w, h);
+      if (out == NULL) return out; // stbi__convert_format frees input on failure
+   }
+
+   if (comp) *comp = channelCount;
+   *y = h;
+   *x = w;
+
+   return out;
+}
+#endif
+
+// *************************************************************************************************
+// Softimage PIC loader
+// by Tom Seddon
+//
+// See http://softimage.wiki.softimage.com/index.php/INFO:_PIC_file_format
+// See http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/softimagepic/
+
+#ifndef STBI_NO_PIC
+static int stbi__pic_is4(stbi__context *s,const char *str)
+{
+   int i;
+   for (i=0; i<4; ++i)
+      if (stbi__get8(s) != (stbi_uc)str[i])
+         return 0;
+
+   return 1;
+}
+
+static int stbi__pic_test_core(stbi__context *s)
+{
+   int i;
+
+   if (!stbi__pic_is4(s,"\x53\x80\xF6\x34"))
+      return 0;
+
+   for(i=0;i<84;++i)
+      stbi__get8(s);
+
+   if (!stbi__pic_is4(s,"PICT"))
+      return 0;
+
+   return 1;
+}
+
+typedef struct
+{
+   stbi_uc size,type,channel;
+} stbi__pic_packet;
+
+static stbi_uc *stbi__readval(stbi__context *s, int channel, stbi_uc *dest)
+{
+   int mask=0x80, i;
+
+   for (i=0; i<4; ++i, mask>>=1) {
+      if (channel & mask) {
+         if (stbi__at_eof(s)) return stbi__errpuc("bad file","PIC file too short");
+         dest[i]=stbi__get8(s);
+      }
+   }
+
+   return dest;
+}
+
+static void stbi__copyval(int channel,stbi_uc *dest,const stbi_uc *src)
+{
+   int mask=0x80,i;
+
+   for (i=0;i<4; ++i, mask>>=1)
+      if (channel&mask)
+         dest[i]=src[i];
+}
+
+static stbi_uc *stbi__pic_load_core(stbi__context *s,int width,int height,int *comp, stbi_uc *result)
+{
+   int act_comp=0,num_packets=0,y,chained;
+   stbi__pic_packet packets[10];
+
+   // this will (should...) cater for even some bizarre stuff like having data
+    // for the same channel in multiple packets.
+   do {
+      stbi__pic_packet *packet;
+
+      if (num_packets==sizeof(packets)/sizeof(packets[0]))
+         return stbi__errpuc("bad format","too many packets");
+
+      packet = &packets[num_packets++];
+
+      chained = stbi__get8(s);
+      packet->size    = stbi__get8(s);
+      packet->type    = stbi__get8(s);
+      packet->channel = stbi__get8(s);
+
+      act_comp |= packet->channel;
+
+      if (stbi__at_eof(s))          return stbi__errpuc("bad file","file too short (reading packets)");
+      if (packet->size != 8)  return stbi__errpuc("bad format","packet isn't 8bpp");
+   } while (chained);
+
+   *comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel?
+
+   for(y=0; y<height; ++y) {
+      int packet_idx;
+
+      for(packet_idx=0; packet_idx < num_packets; ++packet_idx) {
+         stbi__pic_packet *packet = &packets[packet_idx];
+         stbi_uc *dest = result+y*width*4;
+
+         switch (packet->type) {
+            default:
+               return stbi__errpuc("bad format","packet has bad compression type");
+
+            case 0: {//uncompressed
+               int x;
+
+               for(x=0;x<width;++x, dest+=4)
+                  if (!stbi__readval(s,packet->channel,dest))
+                     return 0;
+               break;
+            }
+
+            case 1://Pure RLE
+               {
+                  int left=width, i;
+
+                  while (left>0) {
+                     stbi_uc count,value[4];
+
+                     count=stbi__get8(s);
+                     if (stbi__at_eof(s))   return stbi__errpuc("bad file","file too short (pure read count)");
+
+                     if (count > left)
+                        count = (stbi_uc) left;
+
+                     if (!stbi__readval(s,packet->channel,value))  return 0;
+
+                     for(i=0; i<count; ++i,dest+=4)
+                        stbi__copyval(packet->channel,dest,value);
+                     left -= count;
+                  }
+               }
+               break;
+
+            case 2: {//Mixed RLE
+               int left=width;
+               while (left>0) {
+                  int count = stbi__get8(s), i;
+                  if (stbi__at_eof(s))  return stbi__errpuc("bad file","file too short (mixed read count)");
+
+                  if (count >= 128) { // Repeated
+                     stbi_uc value[4];
+                     int i;
+
+                     if (count==128)
+                        count = stbi__get16be(s);
+                     else
+                        count -= 127;
+                     if (count > left)
+                        return stbi__errpuc("bad file","scanline overrun");
+
+                     if (!stbi__readval(s,packet->channel,value))
+                        return 0;
+
+                     for(i=0;i<count;++i, dest += 4)
+                        stbi__copyval(packet->channel,dest,value);
+                  } else { // Raw
+                     ++count;
+                     if (count>left) return stbi__errpuc("bad file","scanline overrun");
+
+                     for(i=0;i<count;++i, dest+=4)
+                        if (!stbi__readval(s,packet->channel,dest))
+                           return 0;
+                  }
+                  left-=count;
+               }
+               break;
+            }
+         }
+      }
+   }
+
+   return result;
+}
+
+static stbi_uc *stbi__pic_load(stbi__context *s,int *px,int *py,int *comp,int req_comp)
+{
+   stbi_uc *result;
+   int i, x,y;
+
+   for (i=0; i<92; ++i)
+      stbi__get8(s);
+
+   x = stbi__get16be(s);
+   y = stbi__get16be(s);
+   if (stbi__at_eof(s))  return stbi__errpuc("bad file","file too short (pic header)");
+   if ((1 << 28) / x < y) return stbi__errpuc("too large", "Image too large to decode");
+
+   stbi__get32be(s); //skip `ratio'
+   stbi__get16be(s); //skip `fields'
+   stbi__get16be(s); //skip `pad'
+
+   // intermediate buffer is RGBA
+   result = (stbi_uc *) stbi__malloc(x*y*4);
+   memset(result, 0xff, x*y*4);
+
+   if (!stbi__pic_load_core(s,x,y,comp, result)) {
+      STBI_FREE(result);
+      result=0;
+   }
+   *px = x;
+   *py = y;
+   if (req_comp == 0) req_comp = *comp;
+   result=stbi__convert_format(result,4,req_comp,x,y);
+
+   return result;
+}
+
+static int stbi__pic_test(stbi__context *s)
+{
+   int r = stbi__pic_test_core(s);
+   stbi__rewind(s);
+   return r;
+}
+#endif
+
+// *************************************************************************************************
+// GIF loader -- public domain by Jean-Marc Lienher -- simplified/shrunk by stb
+
+#ifndef STBI_NO_GIF
+typedef struct
+{
+   stbi__int16 prefix;
+   stbi_uc first;
+   stbi_uc suffix;
+} stbi__gif_lzw;
+
+typedef struct
+{
+   int w,h;
+   stbi_uc *out;                 // output buffer (always 4 components)
+   int flags, bgindex, ratio, transparent, eflags;
+   stbi_uc  pal[256][4];
+   stbi_uc lpal[256][4];
+   stbi__gif_lzw codes[4096];
+   stbi_uc *color_table;
+   int parse, step;
+   int lflags;
+   int start_x, start_y;
+   int max_x, max_y;
+   int cur_x, cur_y;
+   int line_size;
+} stbi__gif;
+
+static int stbi__gif_test_raw(stbi__context *s)
+{
+   int sz;
+   if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') return 0;
+   sz = stbi__get8(s);
+   if (sz != '9' && sz != '7') return 0;
+   if (stbi__get8(s) != 'a') return 0;
+   return 1;
+}
+
+static int stbi__gif_test(stbi__context *s)
+{
+   int r = stbi__gif_test_raw(s);
+   stbi__rewind(s);
+   return r;
+}
+
+static void stbi__gif_parse_colortable(stbi__context *s, stbi_uc pal[256][4], int num_entries, int transp)
+{
+   int i;
+   for (i=0; i < num_entries; ++i) {
+      pal[i][2] = stbi__get8(s);
+      pal[i][1] = stbi__get8(s);
+      pal[i][0] = stbi__get8(s);
+      pal[i][3] = transp == i ? 0 : 255;
+   }
+}
+
+static int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, int is_info)
+{
+   stbi_uc version;
+   if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8')
+      return stbi__err("not GIF", "Corrupt GIF");
+
+   version = stbi__get8(s);
+   if (version != '7' && version != '9')    return stbi__err("not GIF", "Corrupt GIF");
+   if (stbi__get8(s) != 'a')                return stbi__err("not GIF", "Corrupt GIF");
+
+   stbi__g_failure_reason = "";
+   g->w = stbi__get16le(s);
+   g->h = stbi__get16le(s);
+   g->flags = stbi__get8(s);
+   g->bgindex = stbi__get8(s);
+   g->ratio = stbi__get8(s);
+   g->transparent = -1;
+
+   if (comp != 0) *comp = 4;  // can't actually tell whether it's 3 or 4 until we parse the comments
+
+   if (is_info) return 1;
+
+   if (g->flags & 0x80)
+      stbi__gif_parse_colortable(s,g->pal, 2 << (g->flags & 7), -1);
+
+   return 1;
+}
+
+static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp)
+{
+   stbi__gif g;
+   if (!stbi__gif_header(s, &g, comp, 1)) {
+      stbi__rewind( s );
+      return 0;
+   }
+   if (x) *x = g.w;
+   if (y) *y = g.h;
+   return 1;
+}
+
+static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code)
+{
+   stbi_uc *p, *c;
+
+   // recurse to decode the prefixes, since the linked-list is backwards,
+   // and working backwards through an interleaved image would be nasty
+   if (g->codes[code].prefix >= 0)
+      stbi__out_gif_code(g, g->codes[code].prefix);
+
+   if (g->cur_y >= g->max_y) return;
+
+   p = &g->out[g->cur_x + g->cur_y];
+   c = &g->color_table[g->codes[code].suffix * 4];
+
+   if (c[3] >= 128) {
+      p[0] = c[2];
+      p[1] = c[1];
+      p[2] = c[0];
+      p[3] = c[3];
+   }
+   g->cur_x += 4;
+
+   if (g->cur_x >= g->max_x) {
+      g->cur_x = g->start_x;
+      g->cur_y += g->step;
+
+      while (g->cur_y >= g->max_y && g->parse > 0) {
+         g->step = (1 << g->parse) * g->line_size;
+         g->cur_y = g->start_y + (g->step >> 1);
+         --g->parse;
+      }
+   }
+}
+
+static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g)
+{
+   stbi_uc lzw_cs;
+   stbi__int32 len, code;
+   stbi__uint32 first;
+   stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear;
+   stbi__gif_lzw *p;
+
+   lzw_cs = stbi__get8(s);
+   clear = 1 << lzw_cs;
+   first = 1;
+   codesize = lzw_cs + 1;
+   codemask = (1 << codesize) - 1;
+   bits = 0;
+   valid_bits = 0;
+   for (code = 0; code < clear; code++) {
+      g->codes[code].prefix = -1;
+      g->codes[code].first = (stbi_uc) code;
+      g->codes[code].suffix = (stbi_uc) code;
+   }
+
+   // support no starting clear code
+   avail = clear+2;
+   oldcode = -1;
+
+   len = 0;
+   for(;;) {
+      if (valid_bits < codesize) {
+         if (len == 0) {
+            len = stbi__get8(s); // start new block
+            if (len == 0)
+               return g->out;
+         }
+         --len;
+         bits |= (stbi__int32) stbi__get8(s) << valid_bits;
+         valid_bits += 8;
+      } else {
+         stbi__int32 code = bits & codemask;
+         bits >>= codesize;
+         valid_bits -= codesize;
+         // @OPTIMIZE: is there some way we can accelerate the non-clear path?
+         if (code == clear) {  // clear code
+            codesize = lzw_cs + 1;
+            codemask = (1 << codesize) - 1;
+            avail = clear + 2;
+            oldcode = -1;
+            first = 0;
+         } else if (code == clear + 1) { // end of stream code
+            stbi__skip(s, len);
+            while ((len = stbi__get8(s)) > 0)
+               stbi__skip(s,len);
+            return g->out;
+         } else if (code <= avail) {
+            if (first) return stbi__errpuc("no clear code", "Corrupt GIF");
+
+            if (oldcode >= 0) {
+               p = &g->codes[avail++];
+               if (avail > 4096)        return stbi__errpuc("too many codes", "Corrupt GIF");
+               p->prefix = (stbi__int16) oldcode;
+               p->first = g->codes[oldcode].first;
+               p->suffix = (code == avail) ? p->first : g->codes[code].first;
+            } else if (code == avail)
+               return stbi__errpuc("illegal code in raster", "Corrupt GIF");
+
+            stbi__out_gif_code(g, (stbi__uint16) code);
+
+            if ((avail & codemask) == 0 && avail <= 0x0FFF) {
+               codesize++;
+               codemask = (1 << codesize) - 1;
+            }
+
+            oldcode = code;
+         } else {
+            return stbi__errpuc("illegal code in raster", "Corrupt GIF");
+         }
+      }
+   }
+}
+
+static void stbi__fill_gif_background(stbi__gif *g)
+{
+   int i;
+   stbi_uc *c = g->pal[g->bgindex];
+   // @OPTIMIZE: write a dword at a time
+   for (i = 0; i < g->w * g->h * 4; i += 4) {
+      stbi_uc *p  = &g->out[i];
+      p[0] = c[2];
+      p[1] = c[1];
+      p[2] = c[0];
+      p[3] = c[3];
+   }
+}
+
+// this function is designed to support animated gifs, although stb_image doesn't support it
+static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, int req_comp)
+{
+   int i;
+   stbi_uc *old_out = 0;
+
+   if (g->out == 0) {
+      if (!stbi__gif_header(s, g, comp,0))     return 0; // stbi__g_failure_reason set by stbi__gif_header
+      g->out = (stbi_uc *) stbi__malloc(4 * g->w * g->h);
+      if (g->out == 0)                      return stbi__errpuc("outofmem", "Out of memory");
+      stbi__fill_gif_background(g);
+   } else {
+      // animated-gif-only path
+      if (((g->eflags & 0x1C) >> 2) == 3) {
+         old_out = g->out;
+         g->out = (stbi_uc *) stbi__malloc(4 * g->w * g->h);
+         if (g->out == 0)                   return stbi__errpuc("outofmem", "Out of memory");
+         memcpy(g->out, old_out, g->w*g->h*4);
+      }
+   }
+
+   for (;;) {
+      switch (stbi__get8(s)) {
+         case 0x2C: /* Image Descriptor */
+         {
+            stbi__int32 x, y, w, h;
+            stbi_uc *o;
+
+            x = stbi__get16le(s);
+            y = stbi__get16le(s);
+            w = stbi__get16le(s);
+            h = stbi__get16le(s);
+            if (((x + w) > (g->w)) || ((y + h) > (g->h)))
+               return stbi__errpuc("bad Image Descriptor", "Corrupt GIF");
+
+            g->line_size = g->w * 4;
+            g->start_x = x * 4;
+            g->start_y = y * g->line_size;
+            g->max_x   = g->start_x + w * 4;
+            g->max_y   = g->start_y + h * g->line_size;
+            g->cur_x   = g->start_x;
+            g->cur_y   = g->start_y;
+
+            g->lflags = stbi__get8(s);
+
+            if (g->lflags & 0x40) {
+               g->step = 8 * g->line_size; // first interlaced spacing
+               g->parse = 3;
+            } else {
+               g->step = g->line_size;
+               g->parse = 0;
+            }
+
+            if (g->lflags & 0x80) {
+               stbi__gif_parse_colortable(s,g->lpal, 2 << (g->lflags & 7), g->eflags & 0x01 ? g->transparent : -1);
+               g->color_table = (stbi_uc *) g->lpal;
+            } else if (g->flags & 0x80) {
+               for (i=0; i < 256; ++i)  // @OPTIMIZE: stbi__jpeg_reset only the previous transparent
+                  g->pal[i][3] = 255;
+               if (g->transparent >= 0 && (g->eflags & 0x01))
+                  g->pal[g->transparent][3] = 0;
+               g->color_table = (stbi_uc *) g->pal;
+            } else
+               return stbi__errpuc("missing color table", "Corrupt GIF");
+
+            o = stbi__process_gif_raster(s, g);
+            if (o == NULL) return NULL;
+
+            if (req_comp && req_comp != 4)
+               o = stbi__convert_format(o, 4, req_comp, g->w, g->h);
+            return o;
+         }
+
+         case 0x21: // Comment Extension.
+         {
+            int len;
+            if (stbi__get8(s) == 0xF9) { // Graphic Control Extension.
+               len = stbi__get8(s);
+               if (len == 4) {
+                  g->eflags = stbi__get8(s);
+                  stbi__get16le(s); // delay
+                  g->transparent = stbi__get8(s);
+               } else {
+                  stbi__skip(s, len);
+                  break;
+               }
+            }
+            while ((len = stbi__get8(s)) != 0)
+               stbi__skip(s, len);
+            break;
+         }
+
+         case 0x3B: // gif stream termination code
+            return (stbi_uc *) s; // using '1' causes warning on some compilers
+
+         default:
+            return stbi__errpuc("unknown code", "Corrupt GIF");
+      }
+   }
+}
+
+static stbi_uc *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+{
+   stbi_uc *u = 0;
+   stbi__gif g;
+   memset(&g, 0, sizeof(g));
+
+   u = stbi__gif_load_next(s, &g, comp, req_comp);
+   if (u == (stbi_uc *) s) u = 0;  // end of animated gif marker
+   if (u) {
+      *x = g.w;
+      *y = g.h;
+   }
+
+   return u;
+}
+
+static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp)
+{
+   return stbi__gif_info_raw(s,x,y,comp);
+}
+#endif
+
+// *************************************************************************************************
+// Radiance RGBE HDR loader
+// originally by Nicolas Schulz
+#ifndef STBI_NO_HDR
+static int stbi__hdr_test_core(stbi__context *s)
+{
+   const char *signature = "#?RADIANCE\n";
+   int i;
+   for (i=0; signature[i]; ++i)
+      if (stbi__get8(s) != signature[i])
+         return 0;
+   return 1;
+}
+
+static int stbi__hdr_test(stbi__context* s)
+{
+   int r = stbi__hdr_test_core(s);
+   stbi__rewind(s);
+   return r;
+}
+
+#define STBI__HDR_BUFLEN  1024
+static char *stbi__hdr_gettoken(stbi__context *z, char *buffer)
+{
+   int len=0;
+   char c = '\0';
+
+   c = (char) stbi__get8(z);
+
+   while (!stbi__at_eof(z) && c != '\n') {
+      buffer[len++] = c;
+      if (len == STBI__HDR_BUFLEN-1) {
+         // flush to end of line
+         while (!stbi__at_eof(z) && stbi__get8(z) != '\n')
+            ;
+         break;
+      }
+      c = (char) stbi__get8(z);
+   }
+
+   buffer[len] = 0;
+   return buffer;
+}
+
+static void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp)
+{
+   if ( input[3] != 0 ) {
+      float f1;
+      // Exponent
+      f1 = (float) ldexp(1.0f, input[3] - (int)(128 + 8));
+      if (req_comp <= 2)
+         output[0] = (input[0] + input[1] + input[2]) * f1 / 3;
+      else {
+         output[0] = input[0] * f1;
+         output[1] = input[1] * f1;
+         output[2] = input[2] * f1;
+      }
+      if (req_comp == 2) output[1] = 1;
+      if (req_comp == 4) output[3] = 1;
+   } else {
+      switch (req_comp) {
+         case 4: output[3] = 1; /* fallthrough */
+         case 3: output[0] = output[1] = output[2] = 0;
+                 break;
+         case 2: output[1] = 1; /* fallthrough */
+         case 1: output[0] = 0;
+                 break;
+      }
+   }
+}
+
+static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+{
+   char buffer[STBI__HDR_BUFLEN];
+   char *token;
+   int valid = 0;
+   int width, height;
+   stbi_uc *scanline;
+   float *hdr_data;
+   int len;
+   unsigned char count, value;
+   int i, j, k, c1,c2, z;
+
+
+   // Check identifier
+   if (strcmp(stbi__hdr_gettoken(s,buffer), "#?RADIANCE") != 0)
+      return stbi__errpf("not HDR", "Corrupt HDR image");
+
+   // Parse header
+   for(;;) {
+      token = stbi__hdr_gettoken(s,buffer);
+      if (token[0] == 0) break;
+      if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1;
+   }
+
+   if (!valid)    return stbi__errpf("unsupported format", "Unsupported HDR format");
+
+   // Parse width and height
+   // can't use sscanf() if we're not using stdio!
+   token = stbi__hdr_gettoken(s,buffer);
+   if (strncmp(token, "-Y ", 3))  return stbi__errpf("unsupported data layout", "Unsupported HDR format");
+   token += 3;
+   height = (int) strtol(token, &token, 10);
+   while (*token == ' ') ++token;
+   if (strncmp(token, "+X ", 3))  return stbi__errpf("unsupported data layout", "Unsupported HDR format");
+   token += 3;
+   width = (int) strtol(token, NULL, 10);
+
+   *x = width;
+   *y = height;
+
+   if (comp) *comp = 3;
+   if (req_comp == 0) req_comp = 3;
+
+   // Read data
+   hdr_data = (float *) stbi__malloc(height * width * req_comp * sizeof(float));
+
+   // Load image data
+   // image data is stored as some number of sca
+   if ( width < 8 || width >= 32768) {
+      // Read flat data
+      for (j=0; j < height; ++j) {
+         for (i=0; i < width; ++i) {
+            stbi_uc rgbe[4];
+           main_decode_loop:
+            stbi__getn(s, rgbe, 4);
+            stbi__hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, req_comp);
+         }
+      }
+   } else {
+      // Read RLE-encoded data
+      scanline = NULL;
+
+      for (j = 0; j < height; ++j) {
+         c1 = stbi__get8(s);
+         c2 = stbi__get8(s);
+         len = stbi__get8(s);
+         if (c1 != 2 || c2 != 2 || (len & 0x80)) {
+            // not run-length encoded, so we have to actually use THIS data as a decoded
+            // pixel (note this can't be a valid pixel--one of RGB must be >= 128)
+            stbi_uc rgbe[4];
+            rgbe[0] = (stbi_uc) c1;
+            rgbe[1] = (stbi_uc) c2;
+            rgbe[2] = (stbi_uc) len;
+            rgbe[3] = (stbi_uc) stbi__get8(s);
+            stbi__hdr_convert(hdr_data, rgbe, req_comp);
+            i = 1;
+            j = 0;
+            STBI_FREE(scanline);
+            goto main_decode_loop; // yes, this makes no sense
+         }
+         len <<= 8;
+         len |= stbi__get8(s);
+         if (len != width) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("invalid decoded scanline length", "corrupt HDR"); }
+         if (scanline == NULL) scanline = (stbi_uc *) stbi__malloc(width * 4);
+
+         for (k = 0; k < 4; ++k) {
+            i = 0;
+            while (i < width) {
+               count = stbi__get8(s);
+               if (count > 128) {
+                  // Run
+                  value = stbi__get8(s);
+                  count -= 128;
+                  for (z = 0; z < count; ++z)
+                     scanline[i++ * 4 + k] = value;
+               } else {
+                  // Dump
+                  for (z = 0; z < count; ++z)
+                     scanline[i++ * 4 + k] = stbi__get8(s);
+               }
+            }
+         }
+         for (i=0; i < width; ++i)
+            stbi__hdr_convert(hdr_data+(j*width + i)*req_comp, scanline + i*4, req_comp);
+      }
+      STBI_FREE(scanline);
+   }
+
+   return hdr_data;
+}
+
+static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp)
+{
+   char buffer[STBI__HDR_BUFLEN];
+   char *token;
+   int valid = 0;
+
+   if (strcmp(stbi__hdr_gettoken(s,buffer), "#?RADIANCE") != 0) {
+       stbi__rewind( s );
+       return 0;
+   }
+
+   for(;;) {
+      token = stbi__hdr_gettoken(s,buffer);
+      if (token[0] == 0) break;
+      if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1;
+   }
+
+   if (!valid) {
+       stbi__rewind( s );
+       return 0;
+   }
+   token = stbi__hdr_gettoken(s,buffer);
+   if (strncmp(token, "-Y ", 3)) {
+       stbi__rewind( s );
+       return 0;
+   }
+   token += 3;
+   *y = (int) strtol(token, &token, 10);
+   while (*token == ' ') ++token;
+   if (strncmp(token, "+X ", 3)) {
+       stbi__rewind( s );
+       return 0;
+   }
+   token += 3;
+   *x = (int) strtol(token, NULL, 10);
+   *comp = 3;
+   return 1;
+}
+#endif // STBI_NO_HDR
+
+#ifndef STBI_NO_BMP
+static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp)
+{
+   int hsz;
+   if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') {
+       stbi__rewind( s );
+       return 0;
+   }
+   stbi__skip(s,12);
+   hsz = stbi__get32le(s);
+   if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) {
+       stbi__rewind( s );
+       return 0;
+   }
+   if (hsz == 12) {
+      *x = stbi__get16le(s);
+      *y = stbi__get16le(s);
+   } else {
+      *x = stbi__get32le(s);
+      *y = stbi__get32le(s);
+   }
+   if (stbi__get16le(s) != 1) {
+       stbi__rewind( s );
+       return 0;
+   }
+   *comp = stbi__get16le(s) / 8;
+   return 1;
+}
+#endif
+
+#ifndef STBI_NO_PSD
+static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp)
+{
+   int channelCount;
+   if (stbi__get32be(s) != 0x38425053) {
+       stbi__rewind( s );
+       return 0;
+   }
+   if (stbi__get16be(s) != 1) {
+       stbi__rewind( s );
+       return 0;
+   }
+   stbi__skip(s, 6);
+   channelCount = stbi__get16be(s);
+   if (channelCount < 0 || channelCount > 16) {
+       stbi__rewind( s );
+       return 0;
+   }
+   *y = stbi__get32be(s);
+   *x = stbi__get32be(s);
+   if (stbi__get16be(s) != 8) {
+       stbi__rewind( s );
+       return 0;
+   }
+   if (stbi__get16be(s) != 3) {
+       stbi__rewind( s );
+       return 0;
+   }
+   *comp = 4;
+   return 1;
+}
+#endif
+
+#ifndef STBI_NO_PIC
+static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp)
+{
+   int act_comp=0,num_packets=0,chained;
+   stbi__pic_packet packets[10];
+
+   stbi__skip(s, 92);
+
+   *x = stbi__get16be(s);
+   *y = stbi__get16be(s);
+   if (stbi__at_eof(s))  return 0;
+   if ( (*x) != 0 && (1 << 28) / (*x) < (*y)) {
+       stbi__rewind( s );
+       return 0;
+   }
+
+   stbi__skip(s, 8);
+
+   do {
+      stbi__pic_packet *packet;
+
+      if (num_packets==sizeof(packets)/sizeof(packets[0]))
+         return 0;
+
+      packet = &packets[num_packets++];
+      chained = stbi__get8(s);
+      packet->size    = stbi__get8(s);
+      packet->type    = stbi__get8(s);
+      packet->channel = stbi__get8(s);
+      act_comp |= packet->channel;
+
+      if (stbi__at_eof(s)) {
+          stbi__rewind( s );
+          return 0;
+      }
+      if (packet->size != 8) {
+          stbi__rewind( s );
+          return 0;
+      }
+   } while (chained);
+
+   *comp = (act_comp & 0x10 ? 4 : 3);
+
+   return 1;
+}
+#endif
+
+// *************************************************************************************************
+// Portable Gray Map and Portable Pixel Map loader
+// by Ken Miller
+//
+// PGM: http://netpbm.sourceforge.net/doc/pgm.html
+// PPM: http://netpbm.sourceforge.net/doc/ppm.html
+//
+// Known limitations:
+//    Does not support comments in the header section
+//    Does not support ASCII image data (formats P2 and P3)
+//    Does not support 16-bit-per-channel
+
+#ifndef STBI_NO_PNM
+
+static int      stbi__pnm_test(stbi__context *s)
+{
+   char p, t;
+   p = (char) stbi__get8(s);
+   t = (char) stbi__get8(s);
+   if (p != 'P' || (t != '5' && t != '6')) {
+       stbi__rewind( s );
+       return 0;
+   }
+   return 1;
+}
+
+static stbi_uc *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp)
+{
+   stbi_uc *out;
+   if (!stbi__pnm_info(s, (int *)&s->img_x, (int *)&s->img_y, (int *)&s->img_n))
+      return 0;
+   *x = s->img_x;
+   *y = s->img_y;
+   *comp = s->img_n;
+
+   out = (stbi_uc *) stbi__malloc(s->img_n * s->img_x * s->img_y);
+   if (!out) return stbi__errpuc("outofmem", "Out of memory");
+   stbi__getn(s, out, s->img_n * s->img_x * s->img_y);
+
+   if (req_comp && req_comp != s->img_n) {
+      out = stbi__convert_format(out, s->img_n, req_comp, s->img_x, s->img_y);
+      if (out == NULL) return out; // stbi__convert_format frees input on failure
+   }
+   return out;
+}
+
+static int      stbi__pnm_isspace(char c)
+{
+   return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r';
+}
+
+static void     stbi__pnm_skip_whitespace(stbi__context *s, char *c)
+{
+   while (!stbi__at_eof(s) && stbi__pnm_isspace(*c))
+      *c = (char) stbi__get8(s);
+}
+
+static int      stbi__pnm_isdigit(char c)
+{
+   return c >= '0' && c <= '9';
+}
+
+static int      stbi__pnm_getinteger(stbi__context *s, char *c)
+{
+   int value = 0;
+
+   while (!stbi__at_eof(s) && stbi__pnm_isdigit(*c)) {
+      value = value*10 + (*c - '0');
+      *c = (char) stbi__get8(s);
+   }
+
+   return value;
+}
+
+static int      stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp)
+{
+   int maxv;
+   char c, p, t;
+
+   stbi__rewind( s );
+
+   // Get identifier
+   p = (char) stbi__get8(s);
+   t = (char) stbi__get8(s);
+   if (p != 'P' || (t != '5' && t != '6')) {
+       stbi__rewind( s );
+       return 0;
+   }
+
+   *comp = (t == '6') ? 3 : 1;  // '5' is 1-component .pgm; '6' is 3-component .ppm
+
+   c = (char) stbi__get8(s);
+   stbi__pnm_skip_whitespace(s, &c);
+
+   *x = stbi__pnm_getinteger(s, &c); // read width
+   stbi__pnm_skip_whitespace(s, &c);
+
+   *y = stbi__pnm_getinteger(s, &c); // read height
+   stbi__pnm_skip_whitespace(s, &c);
+
+   maxv = stbi__pnm_getinteger(s, &c);  // read max value
+
+   if (maxv > 255)
+      return stbi__err("max value > 255", "PPM image not 8-bit");
+   else
+      return 1;
+}
+#endif
+
+static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp)
+{
+   #ifndef STBI_NO_JPEG
+   if (stbi__jpeg_info(s, x, y, comp)) return 1;
+   #endif
+
+   #ifndef STBI_NO_PNG
+   if (stbi__png_info(s, x, y, comp))  return 1;
+   #endif
+
+   #ifndef STBI_NO_GIF
+   if (stbi__gif_info(s, x, y, comp))  return 1;
+   #endif
+
+   #ifndef STBI_NO_BMP
+   if (stbi__bmp_info(s, x, y, comp))  return 1;
+   #endif
+
+   #ifndef STBI_NO_PSD
+   if (stbi__psd_info(s, x, y, comp))  return 1;
+   #endif
+
+   #ifndef STBI_NO_PIC
+   if (stbi__pic_info(s, x, y, comp))  return 1;
+   #endif
+
+   #ifndef STBI_NO_PNM
+   if (stbi__pnm_info(s, x, y, comp))  return 1;
+   #endif
+
+   #ifndef STBI_NO_HDR
+   if (stbi__hdr_info(s, x, y, comp))  return 1;
+   #endif
+
+   // test tga last because it's a crappy test!
+   #ifndef STBI_NO_TGA
+   if (stbi__tga_info(s, x, y, comp))
+       return 1;
+   #endif
+   return stbi__err("unknown image type", "Image not of any known type, or corrupt");
+}
+
+#ifndef STBI_NO_STDIO
+STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp)
+{
+    FILE *f = stbi__fopen(filename, "rb");
+    int result;
+    if (!f) return stbi__err("can't fopen", "Unable to open file");
+    result = stbi_info_from_file(f, x, y, comp);
+    fclose(f);
+    return result;
+}
+
+STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp)
+{
+   int r;
+   stbi__context s;
+   long pos = ftell(f);
+   stbi__start_file(&s, f);
+   r = stbi__info_main(&s,x,y,comp);
+   fseek(f,pos,SEEK_SET);
+   return r;
+}
+#endif // !STBI_NO_STDIO
+
+STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp)
+{
+   stbi__context s;
+   stbi__start_mem(&s,buffer,len);
+   return stbi__info_main(&s,x,y,comp);
+}
+
+STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int *x, int *y, int *comp)
+{
+   stbi__context s;
+   stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user);
+   return stbi__info_main(&s,x,y,comp);
+}
+
+#endif // STB_IMAGE_IMPLEMENTATION
+
+/*
+   revision history:
+      2.02  (2015-01-19) fix incorrect assert, fix warning
+      2.01  (2015-01-17) fix various warnings; suppress SIMD on gcc 32-bit without -msse2
+      2.00b (2014-12-25) fix STBI_MALLOC in progressive JPEG
+      2.00  (2014-12-25) optimize JPG, including x86 SSE2 & NEON SIMD (ryg)
+                         progressive JPEG (stb)
+                         PGM/PPM support (Ken Miller)
+                         STBI_MALLOC,STBI_REALLOC,STBI_FREE
+                         GIF bugfix -- seemingly never worked
+                         STBI_NO_*, STBI_ONLY_*
+      1.48  (2014-12-14) fix incorrectly-named assert()
+      1.47  (2014-12-14) 1/2/4-bit PNG support, both direct and paletted (Omar Cornut & stb)
+                         optimize PNG (ryg)
+                         fix bug in interlaced PNG with user-specified channel count (stb)
+      1.46  (2014-08-26)
+              fix broken tRNS chunk (colorkey-style transparency) in non-paletted PNG
+      1.45  (2014-08-16)
+              fix MSVC-ARM internal compiler error by wrapping malloc
+      1.44  (2014-08-07)
+              various warning fixes from Ronny Chevalier
+      1.43  (2014-07-15)
+              fix MSVC-only compiler problem in code changed in 1.42
+      1.42  (2014-07-09)
+              don't define _CRT_SECURE_NO_WARNINGS (affects user code)
+              fixes to stbi__cleanup_jpeg path
+              added STBI_ASSERT to avoid requiring assert.h
+      1.41  (2014-06-25)
+              fix search&replace from 1.36 that messed up comments/error messages
+      1.40  (2014-06-22)
+              fix gcc struct-initialization warning
+      1.39  (2014-06-15)
+              fix to TGA optimization when req_comp != number of components in TGA;
+              fix to GIF loading because BMP wasn't rewinding (whoops, no GIFs in my test suite)
+              add support for BMP version 5 (more ignored fields)
+      1.38  (2014-06-06)
+              suppress MSVC warnings on integer casts truncating values
+              fix accidental rename of 'skip' field of I/O
+      1.37  (2014-06-04)
+              remove duplicate typedef
+      1.36  (2014-06-03)
+              convert to header file single-file library
+              if de-iphone isn't set, load iphone images color-swapped instead of returning NULL
+      1.35  (2014-05-27)
+              various warnings
+              fix broken STBI_SIMD path
+              fix bug where stbi_load_from_file no longer left file pointer in correct place
+              fix broken non-easy path for 32-bit BMP (possibly never used)
+              TGA optimization by Arseny Kapoulkine
+      1.34  (unknown)
+              use STBI_NOTUSED in stbi__resample_row_generic(), fix one more leak in tga failure case
+      1.33  (2011-07-14)
+              make stbi_is_hdr work in STBI_NO_HDR (as specified), minor compiler-friendly improvements
+      1.32  (2011-07-13)
+              support for "info" function for all supported filetypes (SpartanJ)
+      1.31  (2011-06-20)
+              a few more leak fixes, bug in PNG handling (SpartanJ)
+      1.30  (2011-06-11)
+              added ability to load files via callbacks to accomidate custom input streams (Ben Wenger)
+              removed deprecated format-specific test/load functions
+              removed support for installable file formats (stbi_loader) -- would have been broken for IO callbacks anyway
+              error cases in bmp and tga give messages and don't leak (Raymond Barbiero, grisha)
+              fix inefficiency in decoding 32-bit BMP (David Woo)
+      1.29  (2010-08-16)
+              various warning fixes from Aurelien Pocheville
+      1.28  (2010-08-01)
+              fix bug in GIF palette transparency (SpartanJ)
+      1.27  (2010-08-01)
+              cast-to-stbi_uc to fix warnings
+      1.26  (2010-07-24)
+              fix bug in file buffering for PNG reported by SpartanJ
+      1.25  (2010-07-17)
+              refix trans_data warning (Won Chun)
+      1.24  (2010-07-12)
+              perf improvements reading from files on platforms with lock-heavy fgetc()
+              minor perf improvements for jpeg
+              deprecated type-specific functions so we'll get feedback if they're needed
+              attempt to fix trans_data warning (Won Chun)
+      1.23    fixed bug in iPhone support
+      1.22  (2010-07-10)
+              removed image *writing* support
+              stbi_info support from Jetro Lauha
+              GIF support from Jean-Marc Lienher
+              iPhone PNG-extensions from James Brown
+              warning-fixes from Nicolas Schulz and Janez Zemva (i.stbi__err. Janez (U+017D)emva)
+      1.21    fix use of 'stbi_uc' in header (reported by jon blow)
+      1.20    added support for Softimage PIC, by Tom Seddon
+      1.19    bug in interlaced PNG corruption check (found by ryg)
+      1.18 2008-08-02
+              fix a threading bug (local mutable static)
+      1.17    support interlaced PNG
+      1.16    major bugfix - stbi__convert_format converted one too many pixels
+      1.15    initialize some fields for thread safety
+      1.14    fix threadsafe conversion bug
+              header-file-only version (#define STBI_HEADER_FILE_ONLY before including)
+      1.13    threadsafe
+      1.12    const qualifiers in the API
+      1.11    Support installable IDCT, colorspace conversion routines
+      1.10    Fixes for 64-bit (don't use "unsigned long")
+              optimized upsampling by Fabian "ryg" Giesen
+      1.09    Fix format-conversion for PSD code (bad global variables!)
+      1.08    Thatcher Ulrich's PSD code integrated by Nicolas Schulz
+      1.07    attempt to fix C++ warning/errors again
+      1.06    attempt to fix C++ warning/errors again
+      1.05    fix TGA loading to return correct *comp and use good luminance calc
+      1.04    default float alpha is 1, not 255; use 'void *' for stbi_image_free
+      1.03    bugfixes to STBI_NO_STDIO, STBI_NO_HDR
+      1.02    support for (subset of) HDR files, float interface for preferred access to them
+      1.01    fix bug: possible bug in handling right-side up bmps... not sure
+              fix bug: the stbi__bmp_load() and stbi__tga_load() functions didn't work at all
+      1.00    interface to zlib that skips zlib header
+      0.99    correct handling of alpha in palette
+      0.98    TGA loader by lonesock; dynamically add loaders (untested)
+      0.97    jpeg errors on too large a file; also catch another malloc failure
+      0.96    fix detection of invalid v value - particleman@mollyrocket forum
+      0.95    during header scan, seek to markers in case of padding
+      0.94    STBI_NO_STDIO to disable stdio usage; rename all #defines the same
+      0.93    handle jpegtran output; verbose errors
+      0.92    read 4,8,16,24,32-bit BMP files of several formats
+      0.91    output 24-bit Windows 3.0 BMP files
+      0.90    fix a few more warnings; bump version number to approach 1.0
+      0.61    bugfixes due to Marc LeBlanc, Christopher Lloyd
+      0.60    fix compiling as c++
+      0.59    fix warnings: merge Dave Moore's -Wall fixes
+      0.58    fix bug: zlib uncompressed mode len/nlen was wrong endian
+      0.57    fix bug: jpg last huffman symbol before marker was >9 bits but less than 16 available
+      0.56    fix bug: zlib uncompressed mode len vs. nlen
+      0.55    fix bug: restart_interval not initialized to 0
+      0.54    allow NULL for 'int *comp'
+      0.53    fix bug in png 3->4; speedup png decoding
+      0.52    png handles req_comp=3,4 directly; minor cleanup; jpeg comments
+      0.51    obey req_comp requests, 1-component jpegs return as 1-component,
+              on 'test' only check type, not whether we support this variant
+      0.50    first released version
+*/

+ 38 - 5
src/love.cpp

@@ -36,9 +36,13 @@ extern "C" {
 #endif // LOVE_WINDOWS
 
 #ifdef LOVE_MACOSX
-#include "OSX.h"
+#include "common/OSX.h"
 #endif // LOVE_MACOSX
 
+#ifdef LOVE_IOS
+#include "common/iOS.h"
+#endif
+
 #ifdef LOVE_WINDOWS
 extern "C"
 {
@@ -101,6 +105,7 @@ static void get_app_arguments(int argc, char **argv, int &new_argc, char **&new_
 			temp_argv.push_back(std::string(argv[i]));
 	}
 
+#ifdef LOVE_MACOSX
 	// Check for a drop file string.
 	std::string dropfilestr = love::osx::checkDropEvents();
 	if (!dropfilestr.empty())
@@ -108,15 +113,24 @@ static void get_app_arguments(int argc, char **argv, int &new_argc, char **&new_
 		temp_argv.insert(temp_argv.begin() + 1, dropfilestr);
 	}
 	else
+#endif
 	{
 		// If it exists, add the love file in love.app/Contents/Resources/ to argv.
-		std::string loveResourcesPath = love::osx::getLoveInResources();
+		std::string loveResourcesPath;
+		bool fused = true;
+#if defined(LOVE_MACOSX)
+		loveResourcesPath = love::osx::getLoveInResources();
+#elif defined(LOVE_IOS)
+		loveResourcesPath = love::ios::getLoveInResources(fused);
+#endif
 		if (!loveResourcesPath.empty())
 		{
-			// Run in pseudo-fused mode.
 			std::vector<std::string>::iterator it = temp_argv.begin();
 			it = temp_argv.insert(it + 1, loveResourcesPath);
-			temp_argv.insert(it + 1, std::string("--fused"));
+
+			// Run in pseudo-fused mode.
+			if (fused)
+				temp_argv.insert(it + 1, std::string("--fused"));
 		}
 	}
 
@@ -147,6 +161,21 @@ static int love_preload(lua_State *L, lua_CFunction f, const char *name)
 
 int main(int argc, char **argv)
 {
+	int retval = 0;
+
+#ifdef LOVE_IOS
+	int orig_argc = argc;
+	char **orig_argv = argv;
+
+	// on iOS we should never programmatically exit the app, so we'll just
+	// "restart" when that is attempted. Games which use threads might cause
+	// some issues if the threads aren't cleaned up properly...
+	while (true)
+	{
+		argc = orig_argc;
+		argv = orig_argv;
+#endif
+
 #ifdef LOVE_LEGENDARY_UTF8_ARGV_HACK
 	int hack_argc = 0;	char **hack_argv = 0;
 	get_utf8_arguments(hack_argc, hack_argv);
@@ -229,7 +258,6 @@ int main(int argc, char **argv)
 	// Call the returned boot function.
 	lua_call(L, 0, 1);
 
-	int retval = 0;
 	if (lua_isnumber(L, -1))
 		retval = (int) lua_tonumber(L, -1);
 
@@ -243,6 +271,11 @@ int main(int argc, char **argv)
 		delete [] hack_argv;
 	}
 #endif // LOVE_LEGENDARY_UTF8_ARGV_HACK || LOVE_LEGENDARY_APP_ARGV_HACK
+
+#ifdef LOVE_IOS
+	} // while (true)
+#endif
+
 	return retval;
 }
 

+ 3 - 3
src/modules/audio/Audio.cpp

@@ -29,11 +29,11 @@ StringMap<Audio::DistanceModel, Audio::DISTANCE_MAX_ENUM>::Entry Audio::distance
 {
 	{"none", Audio::DISTANCE_NONE},
 	{"inverse", Audio::DISTANCE_INVERSE},
-	{"inverse clamped", Audio::DISTANCE_INVERSE_CLAMPED},
+	{"inverseclamped", Audio::DISTANCE_INVERSE_CLAMPED},
 	{"linear", Audio::DISTANCE_LINEAR},
-	{"linear clamped", Audio::DISTANCE_LINEAR_CLAMPED},
+	{"linearclamped", Audio::DISTANCE_LINEAR_CLAMPED},
 	{"exponent", Audio::DISTANCE_EXPONENT},
-	{"exponent clamped", Audio::DISTANCE_EXPONENT_CLAMPED}
+	{"exponentclamped", Audio::DISTANCE_EXPONENT_CLAMPED}
 };
 
 StringMap<Audio::DistanceModel, Audio::DISTANCE_MAX_ENUM> Audio::distanceModels(Audio::distanceModelEntries, sizeof(Audio::distanceModelEntries));

+ 5 - 0
src/modules/audio/Source.cpp

@@ -34,6 +34,11 @@ Source::~Source()
 {
 }
 
+Source::Type Source::getType() const
+{
+	return type;
+}
+
 bool Source::getConstant(const char *in, Type &out)
 {
 	return types.find(in, out);

+ 2 - 1
src/modules/audio/Source.h

@@ -88,7 +88,6 @@ public:
 
 	virtual void setLooping(bool looping) = 0;
 	virtual bool isLooping() const = 0;
-	virtual bool isStatic() const = 0;
 
 	virtual void setMinVolume(float volume) = 0;
 	virtual float getMinVolume() const = 0;
@@ -103,6 +102,7 @@ public:
 	virtual float getMaxDistance() const = 0;
 
 	virtual int getChannels() const = 0;
+	virtual Type getType() const;
 
 	static bool getConstant(const char *in, Type &out);
 	static bool getConstant(Type in, const char  *&out);
@@ -110,6 +110,7 @@ public:
 	static bool getConstant(Unit in, const char  *&out);
 
 protected:
+
 	Type type;
 
 private:

+ 0 - 5
src/modules/audio/null/Source.cpp

@@ -170,11 +170,6 @@ bool Source::isLooping() const
 	return looping;
 }
 
-bool Source::isStatic() const
-{
-	return (type == TYPE_STATIC);
-}
-
 void Source::setMinVolume(float volume)
 {
 	this->minVolume = volume;

+ 0 - 1
src/modules/audio/null/Source.h

@@ -66,7 +66,6 @@ public:
 	virtual bool isRelative() const;
 	void setLooping(bool looping);
 	bool isLooping() const;
-	bool isStatic() const;
 	virtual void setMinVolume(float volume);
 	virtual float getMinVolume() const;
 	virtual void setMaxVolume(float volume);

+ 6 - 1
src/modules/audio/openal/Audio.h

@@ -36,9 +36,14 @@
 #include "thread/threads.h"
 
 // OpenAL
-#ifdef LOVE_MACOSX_USE_FRAMEWORKS // Frameworks have different include paths.
+#ifdef LOVE_APPLE_USE_FRAMEWORKS // Frameworks have different include paths.
+#ifdef LOVE_IOS
+#include <OpenAL/alc.h>
+#include <OpenAL/al.h>
+#else
 #include <OpenAL-Soft/alc.h>
 #include <OpenAL-Soft/al.h>
+#endif
 #else
 #include <AL/alc.h>
 #include <AL/al.h>

+ 3 - 1
src/modules/audio/openal/Pool.cpp

@@ -56,7 +56,9 @@ Pool::Pool()
 	// Create the mutex.
 	mutex = thread::newMutex();
 
+#ifdef AL_SOFT_direct_channels
 	ALboolean hasext = alIsExtensionPresent("AL_SOFT_direct_channels");
+#endif
 
 	// Make all sources available initially.
 	for (int i = 0; i < totalSources; i++)
@@ -126,7 +128,7 @@ void Pool::update()
 
 int Pool::getSourceCount() const
 {
-	return playing.size();
+	return (int) playing.size();
 }
 
 int Pool::getMaxSources() const

+ 8 - 1
src/modules/audio/openal/Pool.h

@@ -32,10 +32,17 @@
 #include "thread/threads.h"
 
 // OpenAL
-#ifdef LOVE_MACOSX_USE_FRAMEWORKS
+#ifdef LOVE_APPLE_USE_FRAMEWORKS
+#ifdef LOVE_IOS
+#include <OpenAL/alc.h>
+#include <OpenAL/al.h>
+#include <OpenAL/oalMacOSX_OALExtensions.h>
+#include <OpenAL/oalStaticBufferExtension.h>
+#else
 #include <OpenAL-Soft/alc.h>
 #include <OpenAL-Soft/al.h>
 #include <OpenAL-Soft/alext.h>
+#endif
 #else
 #include <AL/alc.h>
 #include <AL/al.h>

+ 96 - 44
src/modules/audio/openal/Source.cpp

@@ -25,6 +25,7 @@
 // STD
 #include <iostream>
 #include <float.h>
+#include <algorithm>
 
 namespace love
 {
@@ -33,6 +34,13 @@ namespace audio
 namespace openal
 {
 
+#ifdef LOVE_IOS
+// OpenAL on iOS barfs if the max distance is +inf.
+static const float MAX_ATTENUATION_DISTANCE = 1000000.0f;
+#else
+static const float MAX_ATTENUATION_DISTANCE = FLT_MAX;
+#endif
+
 class InvalidFormatException : public love::Exception
 {
 public:
@@ -44,6 +52,18 @@ public:
 
 };
 
+class SpatialSupportException : public love::Exception
+{
+public:
+
+	SpatialSupportException()
+		: Exception("This spatial audio functionality is only available for mono Sources. \
+Ensure the Source is not multi-channel before calling this function.")
+	{
+	}
+
+};
+
 StaticDataBuffer::StaticDataBuffer(ALenum format, const ALvoid *data, ALsizei size, ALsizei freq)
 {
 	alGenBuffers(1, &buffer);
@@ -69,7 +89,7 @@ Source::Source(Pool *pool, love::sound::SoundData *soundData)
 	, maxVolume(1.0f)
 	, referenceDistance(1.0f)
 	, rolloffFactor(1.0f)
-	, maxDistance(FLT_MAX)
+	, maxDistance(MAX_ATTENUATION_DISTANCE)
 	, cone()
 	, offsetSamples(0)
 	, offsetSeconds(0)
@@ -82,7 +102,7 @@ Source::Source(Pool *pool, love::sound::SoundData *soundData)
 	if (fmt == 0)
 		throw InvalidFormatException(soundData->getChannels(), soundData->getBitDepth());
 
-	staticBuffer.set(new StaticDataBuffer(fmt, soundData->getData(), soundData->getSize(), soundData->getSampleRate()));
+	staticBuffer.set(new StaticDataBuffer(fmt, soundData->getData(), (ALsizei) soundData->getSize(), soundData->getSampleRate()));
 
 	// The buffer has a +2 retain count right now, but we want it to have +1.
 	staticBuffer->release();
@@ -108,7 +128,7 @@ Source::Source(Pool *pool, love::sound::Decoder *decoder)
 	, maxVolume(1.0f)
 	, referenceDistance(1.0f)
 	, rolloffFactor(1.0f)
-	, maxDistance(FLT_MAX)
+	, maxDistance(MAX_ATTENUATION_DISTANCE)
 	, cone()
 	, offsetSamples(0)
 	, offsetSeconds(0)
@@ -245,13 +265,14 @@ bool Source::isPaused() const
 
 bool Source::isFinished() const
 {
-	return type == TYPE_STATIC ? isStopped() : isStopped() && !isLooping() && decoder->isFinished();
+	return type == TYPE_STATIC ? isStopped() : (isStopped() && !isLooping() && decoder->isFinished());
 }
 
 bool Source::update()
 {
 	if (!valid)
 		return false;
+
 	if (type == TYPE_STATIC)
 	{
 		// Looping mode could have changed.
@@ -290,8 +311,10 @@ bool Source::update()
 			streamAtomic(buffer, decoder.get());
 			alSourceQueueBuffers(source, 1, &buffer);
 		}
+
 		return true;
 	}
+
 	return false;
 }
 
@@ -319,9 +342,7 @@ float Source::getPitch() const
 void Source::setVolume(float volume)
 {
 	if (valid)
-	{
 		alSourcef(source, AL_GAIN, volume);
-	}
 
 	this->volume = volume;
 }
@@ -354,9 +375,7 @@ void Source::seekAtomic(float offset, void *unit)
 				decoder->seek(offset);
 			}
 			else
-			{
 				alSourcef(source, AL_SAMPLE_OFFSET, offset);
-			}
 			break;
 		case Source::UNIT_SECONDS:
 		default:
@@ -367,9 +386,7 @@ void Source::seekAtomic(float offset, void *unit)
 				offsetSamples = offset * decoder->getSampleRate();
 			}
 			else
-			{
 				alSourcef(source, AL_SEC_OFFSET, offset);
-			}
 			break;
 		}
 		if (type == TYPE_STREAM)
@@ -423,6 +440,9 @@ float Source::tell(Source::Unit unit)
 
 void Source::setPosition(float *v)
 {
+	if (channels > 1)
+		throw SpatialSupportException();
+
 	if (valid)
 		alSourcefv(source, AL_POSITION, v);
 
@@ -431,6 +451,9 @@ void Source::setPosition(float *v)
 
 void Source::getPosition(float *v) const
 {
+	if (channels > 1)
+		throw SpatialSupportException();
+
 	if (valid)
 		alGetSourcefv(source, AL_POSITION, v);
 	else
@@ -439,6 +462,9 @@ void Source::getPosition(float *v) const
 
 void Source::setVelocity(float *v)
 {
+	if (channels > 1)
+		throw SpatialSupportException();
+
 	if (valid)
 		alSourcefv(source, AL_VELOCITY, v);
 
@@ -447,6 +473,9 @@ void Source::setVelocity(float *v)
 
 void Source::getVelocity(float *v) const
 {
+	if (channels > 1)
+		throw SpatialSupportException();
+
 	if (valid)
 		alGetSourcefv(source, AL_VELOCITY, v);
 	else
@@ -455,6 +484,9 @@ void Source::getVelocity(float *v) const
 
 void Source::setDirection(float *v)
 {
+	if (channels > 1)
+		throw SpatialSupportException();
+
 	if (valid)
 		alSourcefv(source, AL_DIRECTION, v);
 	else
@@ -463,6 +495,9 @@ void Source::setDirection(float *v)
 
 void Source::getDirection(float *v) const
 {
+	if (channels > 1)
+		throw SpatialSupportException();
+
 	if (valid)
 		alGetSourcefv(source, AL_DIRECTION, v);
 	else
@@ -471,8 +506,11 @@ void Source::getDirection(float *v) const
 
 void Source::setCone(float innerAngle, float outerAngle, float outerVolume)
 {
-	cone.innerAngle = (int) LOVE_TODEG(innerAngle);
-	cone.outerAngle = (int) LOVE_TODEG(outerAngle);
+	if (channels > 1)
+		throw SpatialSupportException();
+
+	cone.innerAngle  = (int) LOVE_TODEG(innerAngle);
+	cone.outerAngle  = (int) LOVE_TODEG(outerAngle);
 	cone.outerVolume = outerVolume;
 
 	if (valid)
@@ -485,13 +523,19 @@ void Source::setCone(float innerAngle, float outerAngle, float outerVolume)
 
 void Source::getCone(float &innerAngle, float &outerAngle, float &outerVolume) const
 {
-	innerAngle = LOVE_TORAD(cone.innerAngle);
-	outerAngle = LOVE_TORAD(cone.outerAngle);
+	if (channels > 1)
+		throw SpatialSupportException();
+
+	innerAngle  = LOVE_TORAD(cone.innerAngle);
+	outerAngle  = LOVE_TORAD(cone.outerAngle);
 	outerVolume = cone.outerVolume;
 }
 
 void Source::setRelative(bool enable)
 {
+	if (channels > 1)
+		throw SpatialSupportException();
+
 	if (valid)
 		alSourcei(source, AL_SOURCE_RELATIVE, relative ? AL_TRUE : AL_FALSE);
 
@@ -500,15 +544,18 @@ void Source::setRelative(bool enable)
 
 bool Source::isRelative() const
 {
+	if (channels > 1)
+		throw SpatialSupportException();
+
 	return relative;
 }
 
-void Source::setLooping(bool looping)
+void Source::setLooping(bool enable)
 {
 	if (valid && type == TYPE_STATIC)
-		alSourcei(source, AL_LOOPING, looping ? AL_TRUE : AL_FALSE);
+		alSourcei(source, AL_LOOPING, enable ? AL_TRUE : AL_FALSE);
 
-	this->looping = looping;
+	looping = enable;
 }
 
 bool Source::isLooping() const
@@ -563,9 +610,7 @@ void Source::stopAtomic()
 	if (valid)
 	{
 		if (type == TYPE_STATIC)
-		{
 			alSourceStop(source);
-		}
 		else if (type == TYPE_STREAM)
 		{
 			alSourceStop(source);
@@ -578,8 +623,10 @@ void Source::stopAtomic()
 				alSourceUnqueueBuffers(source, 1, &buffer);
 			}
 		}
+
 		alSourcei(source, AL_BUFFER, AL_NONE);
 	}
+
 	toLoop = 0;
 	valid = false;
 }
@@ -644,7 +691,7 @@ void Source::reset()
 	alSourcef(source, AL_REFERENCE_DISTANCE, referenceDistance);
 	alSourcef(source, AL_ROLLOFF_FACTOR, rolloffFactor);
 	alSourcef(source, AL_MAX_DISTANCE, maxDistance);
-	alSourcei(source, AL_LOOPING, isStatic() && isLooping() ? AL_TRUE : AL_FALSE);
+	alSourcei(source, AL_LOOPING, (type == TYPE_STATIC) && isLooping() ? AL_TRUE : AL_FALSE);
 	alSourcei(source, AL_SOURCE_RELATIVE, relative ? AL_TRUE : AL_FALSE);
 	alSourcei(source, AL_CONE_INNER_ANGLE, cone.innerAngle);
 	alSourcei(source, AL_CONE_OUTER_ANGLE, cone.outerAngle);
@@ -721,19 +768,12 @@ int Source::streamAtomic(ALuint buffer, love::sound::Decoder *d)
 	return decoded;
 }
 
-bool Source::isStatic() const
-{
-	return (type == TYPE_STATIC);
-}
-
 void Source::setMinVolume(float volume)
 {
 	if (valid)
-	{
 		alSourcef(source, AL_MIN_GAIN, volume);
-	}
 
-	this->minVolume = volume;
+	minVolume = volume;
 }
 
 float Source::getMinVolume() const
@@ -752,11 +792,9 @@ float Source::getMinVolume() const
 void Source::setMaxVolume(float volume)
 {
 	if (valid)
-	{
 		alSourcef(source, AL_MAX_GAIN, volume);
-	}
 
-	this->maxVolume = volume;
+	maxVolume = volume;
 }
 
 float Source::getMaxVolume() const
@@ -769,21 +807,25 @@ float Source::getMaxVolume() const
 	}
 
 	// In case the Source isn't playing.
-	return this->maxVolume;
+	return maxVolume;
 }
 
 void Source::setReferenceDistance(float distance)
 {
+	if (channels > 1)
+		throw SpatialSupportException();
+
 	if (valid)
-	{
 		alSourcef(source, AL_REFERENCE_DISTANCE, distance);
-	}
 
-	this->referenceDistance = distance;
+	referenceDistance = distance;
 }
 
 float Source::getReferenceDistance() const
 {
+	if (channels > 1)
+		throw SpatialSupportException();
+
 	if (valid)
 	{
 		ALfloat f;
@@ -792,21 +834,25 @@ float Source::getReferenceDistance() const
 	}
 
 	// In case the Source isn't playing.
-	return this->referenceDistance;
+	return referenceDistance;
 }
 
 void Source::setRolloffFactor(float factor)
 {
+	if (channels > 1)
+		throw SpatialSupportException();
+
 	if (valid)
-	{
 		alSourcef(source, AL_ROLLOFF_FACTOR, factor);
-	}
 
-	this->rolloffFactor = factor;
+	rolloffFactor = factor;
 }
 
 float Source::getRolloffFactor() const
 {
+	if (channels > 1)
+		throw SpatialSupportException();
+
 	if (valid)
 	{
 		ALfloat f;
@@ -815,21 +861,27 @@ float Source::getRolloffFactor() const
 	}
 
 	// In case the Source isn't playing.
-	return this->rolloffFactor;
+	return rolloffFactor;
 }
 
 void Source::setMaxDistance(float distance)
 {
+	if (channels > 1)
+		throw SpatialSupportException();
+
+	distance = std::min(distance, MAX_ATTENUATION_DISTANCE);
+
 	if (valid)
-	{
 		alSourcef(source, AL_MAX_DISTANCE, distance);
-	}
 
-	this->maxDistance = distance;
+	maxDistance = distance;
 }
 
 float Source::getMaxDistance() const
 {
+	if (channels > 1)
+		throw SpatialSupportException();
+
 	if (valid)
 	{
 		ALfloat f;
@@ -838,7 +890,7 @@ float Source::getMaxDistance() const
 	}
 
 	// In case the Source isn't playing.
-	return this->maxDistance;
+	return maxDistance;
 }
 
 int Source::getChannels() const

+ 9 - 11
src/modules/audio/openal/Source.h

@@ -29,9 +29,14 @@
 #include "sound/Decoder.h"
 
 // OpenAL
-#ifdef LOVE_MACOSX_USE_FRAMEWORKS
+#ifdef LOVE_APPLE_USE_FRAMEWORKS
+#ifdef LOVE_IOS
+#include <OpenAL/alc.h>
+#include <OpenAL/al.h>
+#else
 #include <OpenAL-Soft/alc.h>
 #include <OpenAL-Soft/al.h>
+#endif
 #else
 #include <AL/alc.h>
 #include <AL/al.h>
@@ -105,7 +110,6 @@ public:
 	virtual bool isRelative() const;
 	void setLooping(bool looping);
 	bool isLooping() const;
-	bool isStatic() const;
 	virtual void setMinVolume(float volume);
 	virtual float getMinVolume() const;
 	virtual void setMaxVolume(float volume);
@@ -166,15 +170,9 @@ private:
 
 	struct Cone
 	{
-		int innerAngle; // degrees
-		int outerAngle; // degrees
-		float outerVolume;
-
-		Cone()
-			: innerAngle(360)
-			, outerAngle(360)
-			, outerVolume(0.0f)
-		{}
+		int innerAngle = 360; // degrees
+		int outerAngle = 360; // degrees
+		float outerVolume = 0.0f;
 	} cone;
 
 	float offsetSamples;

+ 10 - 10
src/modules/audio/wrap_Audio.cpp

@@ -44,7 +44,7 @@ int w_getSourceCount(lua_State *L)
 
 int w_newSource(lua_State *L)
 {
-	if (lua_isstring(L, 1) || luax_istype(L, 1, FILESYSTEM_FILE_T) || luax_istype(L, 1, FILESYSTEM_FILE_DATA_T))
+	if (lua_isstring(L, 1) || luax_istype(L, 1, FILESYSTEM_FILE_ID) || luax_istype(L, 1, FILESYSTEM_FILE_DATA_ID))
 		luax_convobj(L, 1, "sound", "newDecoder");
 
 	Source::Type stype = Source::TYPE_STREAM;
@@ -53,21 +53,21 @@ int w_newSource(lua_State *L)
 	if (stypestr && !Source::getConstant(stypestr, stype))
 		return luaL_error(L, "Invalid source type: %s", stypestr);
 
-	if (stype == Source::TYPE_STATIC && luax_istype(L, 1, SOUND_DECODER_T))
+	if (stype == Source::TYPE_STATIC && luax_istype(L, 1, SOUND_DECODER_ID))
 		luax_convobj(L, 1, "sound", "newSoundData");
 
 	Source *t = 0;
 
 	luax_catchexcept(L, [&]() {
-		if (luax_istype(L, 1, SOUND_SOUND_DATA_T))
-			t = instance()->newSource(luax_totype<love::sound::SoundData>(L, 1, "SoundData", SOUND_SOUND_DATA_T));
-		else if (luax_istype(L, 1, SOUND_DECODER_T))
-			t = instance()->newSource(luax_totype<love::sound::Decoder>(L, 1, "Decoder", SOUND_DECODER_T));
+		if (luax_istype(L, 1, SOUND_SOUND_DATA_ID))
+			t = instance()->newSource(luax_totype<love::sound::SoundData>(L, 1, SOUND_SOUND_DATA_ID));
+		else if (luax_istype(L, 1, SOUND_DECODER_ID))
+			t = instance()->newSource(luax_totype<love::sound::Decoder>(L, 1, SOUND_DECODER_ID));
 	});
 
 	if (t)
 	{
-		luax_pushtype(L, "Source", AUDIO_SOURCE_T, t);
+		luax_pushtype(L, AUDIO_SOURCE_ID, t);
 		t->release();
 		return 1;
 	}
@@ -243,7 +243,7 @@ int w_getRecordedData(lua_State *L)
 		lua_pushnil(L);
 	else
 	{
-		luax_pushtype(L, "SoundData", SOUND_SOUND_DATA_T, sd);
+		luax_pushtype(L, SOUND_SOUND_DATA_ID, sd);
 		sd->release();
 	}
 	return 1;
@@ -258,7 +258,7 @@ int w_stopRecording(lua_State *L)
 			lua_pushnil(L);
 		else
 		{
-			luax_pushtype(L, "SoundData", SOUND_SOUND_DATA_T, sd);
+			luax_pushtype(L, SOUND_SOUND_DATA_ID, sd);
 			sd->release();
 		}
 		return 1;
@@ -369,7 +369,7 @@ extern "C" int luaopen_love_audio(lua_State *L)
 	WrappedModule w;
 	w.module = instance;
 	w.name = "audio";
-	w.flags = MODULE_T;
+	w.type = MODULE_ID;
 	w.functions = functions;
 	w.types = types;
 

+ 37 - 27
src/modules/audio/wrap_Source.cpp

@@ -29,7 +29,7 @@ namespace audio
 
 Source *luax_checksource(lua_State *L, int idx)
 {
-	return luax_checktype<Source>(L, idx, "Source", AUDIO_SOURCE_T);
+	return luax_checktype<Source>(L, idx, AUDIO_SOURCE_ID);
 }
 
 int w_Source_clone(lua_State *L)
@@ -37,7 +37,7 @@ int w_Source_clone(lua_State *L)
 	Source *t = luax_checksource(L, 1);
 	Source *clone = nullptr;
 	luax_catchexcept(L, [&](){ clone = t->clone(); });
-	luax_pushtype(L, "Source", AUDIO_SOURCE_T, clone);
+	luax_pushtype(L, AUDIO_SOURCE_ID, clone);
 	clone->release();
 	return 1;
 }
@@ -147,7 +147,7 @@ int w_Source_setPosition(lua_State *L)
 	v[0] = (float)luaL_checknumber(L, 2);
 	v[1] = (float)luaL_checknumber(L, 3);
 	v[2] = (float)luaL_optnumber(L, 4, 0);
-	t->setPosition(v);
+	luax_catchexcept(L, [&](){ t->setPosition(v); });
 	return 0;
 }
 
@@ -155,7 +155,7 @@ int w_Source_getPosition(lua_State *L)
 {
 	Source *t = luax_checksource(L, 1);
 	float v[3];
-	t->getPosition(v);
+	luax_catchexcept(L, [&](){ t->getPosition(v); });
 	lua_pushnumber(L, v[0]);
 	lua_pushnumber(L, v[1]);
 	lua_pushnumber(L, v[2]);
@@ -169,7 +169,7 @@ int w_Source_setVelocity(lua_State *L)
 	v[0] = (float)luaL_checknumber(L, 2);
 	v[1] = (float)luaL_checknumber(L, 3);
 	v[2] = (float)luaL_optnumber(L, 4, 0);
-	t->setVelocity(v);
+	luax_catchexcept(L, [&](){ t->setVelocity(v); });
 	return 0;
 }
 
@@ -177,7 +177,7 @@ int w_Source_getVelocity(lua_State *L)
 {
 	Source *t = luax_checksource(L, 1);
 	float v[3];
-	t->getVelocity(v);
+	luax_catchexcept(L, [&](){ t->getVelocity(v); });
 	lua_pushnumber(L, v[0]);
 	lua_pushnumber(L, v[1]);
 	lua_pushnumber(L, v[2]);
@@ -191,7 +191,7 @@ int w_Source_setDirection(lua_State *L)
 	v[0] = (float)luaL_checknumber(L, 2);
 	v[1] = (float)luaL_checknumber(L, 3);
 	v[2] = (float)luaL_optnumber(L, 4, 0);
-	t->setDirection(v);
+	luax_catchexcept(L, [&](){ t->setDirection(v); });
 	return 0;
 }
 
@@ -199,7 +199,7 @@ int w_Source_getDirection(lua_State *L)
 {
 	Source *t = luax_checksource(L, 1);
 	float v[3];
-	t->getDirection(v);
+	luax_catchexcept(L, [&](){ t->getDirection(v); });
 	lua_pushnumber(L, v[0]);
 	lua_pushnumber(L, v[1]);
 	lua_pushnumber(L, v[2]);
@@ -212,7 +212,7 @@ int w_Source_setCone(lua_State *L)
 	float innerAngle = (float) luaL_checknumber(L, 2);
 	float outerAngle = (float) luaL_checknumber(L, 3);
 	float outerVolume = (float) luaL_optnumber(L, 4, 0.0);
-	t->setCone(innerAngle, outerAngle, outerVolume);
+	luax_catchexcept(L, [&](){ t->setCone(innerAngle, outerAngle, outerVolume); });
 	return 0;
 }
 
@@ -220,7 +220,7 @@ int w_Source_getCone(lua_State *L)
 {
 	Source *t = luax_checksource(L, 1);
 	float innerAngle, outerAngle, outerVolume;
-	t->getCone(innerAngle, outerAngle, outerVolume);
+	luax_catchexcept(L, [&](){ t->getCone(innerAngle, outerAngle, outerVolume); });
 	lua_pushnumber(L, innerAngle);
 	lua_pushnumber(L, outerAngle);
 	lua_pushnumber(L, outerVolume);
@@ -230,14 +230,14 @@ int w_Source_getCone(lua_State *L)
 int w_Source_setRelative(lua_State *L)
 {
 	Source *t = luax_checksource(L, 1);
-	t->setRelative(luax_toboolean(L, 2));
+	luax_catchexcept(L, [&](){ t->setRelative(luax_toboolean(L, 2)); });
 	return 0;
 }
 
 int w_Source_isRelative(lua_State *L)
 {
 	Source *t = luax_checksource(L, 1);
-	luax_pushboolean(L, t->isRelative());
+	luax_catchexcept(L, [&](){ luax_pushboolean(L, t->isRelative()); });
 	return 1;
 }
 
@@ -276,13 +276,6 @@ int w_Source_isPlaying(lua_State *L)
 	return 1;
 }
 
-int w_Source_isStatic(lua_State *L)
-{
-	Source *t = luax_checksource(L, 1);
-	luax_pushboolean(L, t->isStatic());
-	return 1;
-}
-
 int w_Source_setVolumeLimits(lua_State *L)
 {
 	Source *t = luax_checksource(L, 1);
@@ -310,16 +303,20 @@ int w_Source_setAttenuationDistances(lua_State *L)
 	float dmax = (float)luaL_checknumber(L, 3);
 	if (dref < .0f || dmax < .0f)
 		return luaL_error(L, "Invalid distances: %f, %f. Must be > 0", dref, dmax);
-	t->setReferenceDistance(dref);
-	t->setMaxDistance(dmax);
+	luax_catchexcept(L, [&]() {
+		t->setReferenceDistance(dref);
+		t->setMaxDistance(dmax);
+	});
 	return 0;
 }
 
 int w_Source_getAttenuationDistances(lua_State *L)
 {
 	Source *t = luax_checksource(L, 1);
-	lua_pushnumber(L, t->getReferenceDistance());
-	lua_pushnumber(L, t->getMaxDistance());
+	luax_catchexcept(L, [&]() {
+		lua_pushnumber(L, t->getReferenceDistance());
+		lua_pushnumber(L, t->getMaxDistance());
+	});
 	return 2;
 }
 
@@ -329,14 +326,14 @@ int w_Source_setRolloff(lua_State *L)
 	float rolloff = (float)luaL_checknumber(L, 2);
 	if (rolloff < .0f)
 		return luaL_error(L, "Invalid rolloff: %f. Must be > 0.", rolloff);
-	t->setRolloffFactor(rolloff);
+	luax_catchexcept(L, [&](){ t->setRolloffFactor(rolloff); });
 	return 0;
 }
 
 int w_Source_getRolloff(lua_State *L)
 {
 	Source *t = luax_checksource(L, 1);
-	lua_pushnumber(L, t->getRolloffFactor());
+	luax_catchexcept(L, [&](){ lua_pushnumber(L, t->getRolloffFactor()); });
 	return 1;
 }
 
@@ -347,6 +344,19 @@ int w_Source_getChannels(lua_State *L)
 	return 1;
 }
 
+int w_Source_getType(lua_State *L)
+{
+	Source *t = luax_checksource(L, 1);
+	Source::Type type = t->getType();
+	const char *str = nullptr;
+
+	if (!Source::getConstant(type, str))
+		return luaL_error(L, "Unknown Source type.");
+
+	lua_pushstring(L, str);
+	return 1;
+}
+
 static const luaL_Reg functions[] =
 {
 	{ "clone", w_Source_clone },
@@ -380,7 +390,6 @@ static const luaL_Reg functions[] =
 	{ "isStopped", w_Source_isStopped },
 	{ "isPaused", w_Source_isPaused },
 	{ "isPlaying", w_Source_isPlaying },
-	{ "isStatic", w_Source_isStatic },
 
 	{ "setVolumeLimits", w_Source_setVolumeLimits },
 	{ "getVolumeLimits", w_Source_getVolumeLimits },
@@ -390,13 +399,14 @@ static const luaL_Reg functions[] =
 	{ "getRolloff", w_Source_getRolloff},
 
 	{ "getChannels", w_Source_getChannels },
+	{ "getType", w_Source_getType },
 
 	{ 0, 0 }
 };
 
 extern "C" int luaopen_source(lua_State *L)
 {
-	return luax_register_type(L, "Source", functions);
+	return luax_register_type(L, AUDIO_SOURCE_ID, functions);
 }
 
 } // audio

+ 1 - 1
src/modules/audio/wrap_Source.h

@@ -57,7 +57,6 @@ int w_Source_isLooping(lua_State *L);
 int w_Source_isStopped(lua_State *L);
 int w_Source_isPaused(lua_State *L);
 int w_Source_isPlaying(lua_State *L);
-int w_Source_isStatic(lua_State *L);
 int w_Source_setVolumeLimits(lua_State *L);
 int w_Source_getVolumeLimits(lua_State *L);
 int w_Source_setAttenuationDistances(lua_State *L);
@@ -65,6 +64,7 @@ int w_Source_getAttenuationDistances(lua_State *L);
 int w_Source_setRolloff(lua_State *L);
 int w_Source_getRolloff(lua_State *L);
 int w_Source_getChannels(lua_State *L);
+int w_Source_getType(lua_State *L);
 extern "C" int luaopen_source(lua_State *L);
 
 } // audio

+ 27 - 26
src/modules/event/Event.cpp

@@ -28,56 +28,57 @@ namespace love
 namespace event
 {
 
-Message::Message(const std::string &name, Variant *a, Variant *b, Variant *c, Variant *d)
+Message::Message(const std::string &name, const std::vector<StrongRef<Variant>> &vargs)
 	: name(name)
-	, nargs(0)
+	, args(vargs)
 {
-	args[0] = a;
-	args[1] = b;
-	args[2] = c;
-	args[3] = d;
-	for (int i = 0; i < 4; i++)
-	{
-		if (!args[i])
-			break;
-		args[i]->retain();
-		nargs++;
-	}
 }
 
 Message::~Message()
 {
-	for (int i = 0; i < nargs; i++)
-		args[i]->release();
 }
 
 int Message::toLua(lua_State *L)
 {
 	luax_pushstring(L, name);
-	for (int i = 0; i < nargs; i++)
-		args[i]->toLua(L);
-	return nargs+1;
+
+	for (const StrongRef<Variant> &v : args)
+	{
+		if (v.get() != nullptr)
+			v->toLua(L);
+		else
+			lua_pushnil(L);
+	}
+
+	return (int) args.size() + 1;
 }
 
 Message *Message::fromLua(lua_State *L, int n)
 {
 	std::string name = luax_checkstring(L, n);
+	std::vector<StrongRef<Variant>> vargs;
+
+	int count = lua_gettop(L) - n;
 	n++;
-	Message *m = new Message(name);
-	for (int i = 0; i < 4; i++)
+
+	for (int i = 0; i < count; i++)
 	{
 		if (lua_isnoneornil(L, n+i))
 			break;
-		m->args[i] = Variant::fromLua(L, n+i);
-		if (!m->args[i])
+
+		vargs.push_back(Variant::fromLua(L, n+i));
+
+		if (!vargs.back().get())
 		{
-			delete m;
+			vargs.clear();
 			luaL_error(L, "Argument %d can't be stored safely\nExpected boolean, number, string or userdata.", n+i);
-			return NULL;
+			return nullptr;
 		}
-		m->nargs++;
+
+		vargs.back()->release(); // fromLua gave a +1 ref.
 	}
-	return m;
+
+	return new Message(name, vargs);
 }
 
 Event::Event()

+ 13 - 8
src/modules/event/Event.h

@@ -30,27 +30,31 @@
 #include "joystick/Joystick.h"
 #include "thread/threads.h"
 
-// STL
+// C++
 #include <queue>
+#include <vector>
 
 namespace love
 {
 namespace event
 {
+
 class Message : public Object
 {
-private:
-	std::string name;
-	Variant *args[4];
-	int nargs;
-
 public:
-	Message(const std::string &name, Variant *a = NULL, Variant *b = NULL, Variant *c = NULL, Variant *d = NULL);
+
+	Message(const std::string &name, const std::vector<StrongRef<Variant>> &vargs = {});
 	~Message();
 
 	int toLua(lua_State *L);
 	static Message *fromLua(lua_State *L, int n);
-};
+
+private:
+
+	std::string name;
+	std::vector<StrongRef<Variant>> args;
+
+}; // Message
 
 class Event : public Module
 {
@@ -66,6 +70,7 @@ public:
 	virtual void clear();
 
 	virtual void pump() = 0;
+	virtual Message *wait() = 0;
 
 protected:
 	thread::Mutex *mutex;

+ 276 - 161
src/modules/event/sdl/Event.cpp

@@ -20,10 +20,13 @@
 
 #include "Event.h"
 
-#include "keyboard/Keyboard.h"
+#include "filesystem/DroppedFile.h"
+#include "filesystem/Filesystem.h"
+#include "keyboard/sdl/Keyboard.h"
 #include "mouse/Mouse.h"
 #include "joystick/JoystickModule.h"
 #include "joystick/sdl/Joystick.h"
+#include "touch/sdl/Touch.h"
 #include "graphics/Graphics.h"
 #include "window/Window.h"
 #include "common/Exception.h"
@@ -43,13 +46,49 @@ namespace sdl
 static void windowToPixelCoords(double *x, double *y)
 {
 	window::Window *window = Module::getInstance<window::Window>(Module::M_WINDOW);
+	if (window)
+		window->windowToPixelCoords(x, y);
+}
+
+#ifndef LOVE_MACOSX
+static void normalizedToPixelCoords(double *x, double *y)
+{
+	window::Window *window = Module::getInstance<window::Window>(Module::M_WINDOW);
+	int w = 1, h = 1;
 
-	if (window && x)
-		*x = window->toPixels(*x);
-	if (window && y)
-		*y = window->toPixels(*y);
+	if (window)
+		window->getPixelDimensions(w, h);
+
+	if (x)
+		*x = ((*x) * (double) w);
+	if (y)
+		*y = ((*y) * (double) h);
 }
+#endif
+
+// SDL's event watch callbacks trigger when the event is actually posted inside
+// SDL, unlike with SDL_PollEvents. This is useful for some events which require
+// handling inside the function which triggered them on some backends.
+static int SDLCALL watchAppEvents(void * /*udata*/, SDL_Event *event)
+{
+	graphics::Graphics *gfx = Module::getInstance<graphics::Graphics>(Module::M_GRAPHICS);
 
+	switch (event->type)
+	{
+	// On iOS, calling any OpenGL ES function after the function which triggers
+	// SDL_APP_DIDENTERBACKGROUND is called will kill the app, so we handle it
+	// with an event watch callback, which will be called inside that function.
+	case SDL_APP_DIDENTERBACKGROUND:
+	case SDL_APP_WILLENTERFOREGROUND:
+		if (gfx)
+			gfx->setActive(event->type == SDL_APP_WILLENTERFOREGROUND);
+		break;
+	default:
+		break;
+	}
+
+	return 1;
+}
 
 const char *Event::getName() const
 {
@@ -60,10 +99,13 @@ Event::Event()
 {
 	if (SDL_InitSubSystem(SDL_INIT_EVENTS) < 0)
 		throw love::Exception("%s", SDL_GetError());
+
+	SDL_AddEventWatch(watchAppEvents, this);
 }
 
 Event::~Event()
 {
+	SDL_DelEventWatch(watchAppEvents, this);
 	SDL_QuitSubSystem(SDL_INIT_EVENTS);
 }
 
@@ -106,16 +148,31 @@ void Event::clear()
 
 Message *Event::convert(const SDL_Event &e) const
 {
-	Message *msg = NULL;
+	Message *msg = nullptr;
 
-	love::keyboard::Keyboard *kb = 0;
+	std::vector<StrongRef<Variant>> vargs;
+	vargs.reserve(4);
 
-	love::keyboard::Keyboard::Key key;
+	love::keyboard::Keyboard *kb = nullptr;
+	love::filesystem::Filesystem *filesystem = nullptr;
+
+	love::keyboard::Keyboard::Key key = love::keyboard::Keyboard::KEY_UNKNOWN;
+	love::keyboard::Keyboard::Scancode scancode = love::keyboard::Keyboard::SCANCODE_UNKNOWN;
 	love::mouse::Mouse::Button button;
-	Variant *arg1, *arg2, *arg3, *arg4;
+
 	const char *txt;
+	const char *txt2;
 	std::map<SDL_Keycode, love::keyboard::Keyboard::Key>::const_iterator keyit;
 
+#ifndef LOVE_MACOSX
+	love::touch::sdl::Touch *touchmodule = nullptr;
+	love::touch::Touch::TouchInfo touchinfo;
+#endif
+
+#ifdef LOVE_LINUX
+	static bool touchNormalizationBug = false;
+#endif
+
 	switch (e.type)
 	{
 	case SDL_KEYDOWN:
@@ -129,45 +186,46 @@ Message *Event::convert(const SDL_Event &e) const
 		keyit = keys.find(e.key.keysym.sym);
 		if (keyit != keys.end())
 			key = keyit->second;
-		else
-			key = love::keyboard::Keyboard::KEY_UNKNOWN;
 
 		if (!love::keyboard::Keyboard::getConstant(key, txt))
 			txt = "unknown";
-		arg1 = new Variant(txt, strlen(txt));
-		arg2 = new Variant(e.key.repeat != 0);
-		msg = new Message("keypressed", arg1, arg2);
-		arg1->release();
-		arg2->release();
+
+		love::keyboard::sdl::Keyboard::getConstant(e.key.keysym.scancode, scancode);
+		if (!love::keyboard::Keyboard::getConstant(scancode, txt2))
+			txt2 = "unknown";
+
+		vargs.push_back(new Variant(txt, strlen(txt)));
+		vargs.push_back(new Variant(txt2, strlen(txt2)));
+		vargs.push_back(new Variant(e.key.repeat != 0));
+		msg = new Message("keypressed", vargs);
 		break;
 	case SDL_KEYUP:
 		keyit = keys.find(e.key.keysym.sym);
 		if (keyit != keys.end())
 			key = keyit->second;
-		else
-			key = love::keyboard::Keyboard::KEY_UNKNOWN;
 
 		if (!love::keyboard::Keyboard::getConstant(key, txt))
 			txt = "unknown";
-		arg1 = new Variant(txt, strlen(txt));
-		msg = new Message("keyreleased", arg1);
-		arg1->release();
+
+		love::keyboard::sdl::Keyboard::getConstant(e.key.keysym.scancode, scancode);
+		if (!love::keyboard::Keyboard::getConstant(scancode, txt2))
+			txt2 = "unknown";
+
+		vargs.push_back(new Variant(txt, strlen(txt)));
+		vargs.push_back(new Variant(txt2, strlen(txt2)));
+		msg = new Message("keyreleased", vargs);
 		break;
 	case SDL_TEXTINPUT:
 		txt = e.text.text;
-		arg1 = new Variant(txt, strlen(txt));
-		msg = new Message("textinput", arg1);
-		arg1->release();
+		vargs.push_back(new Variant(txt, strlen(txt)));
+		msg = new Message("textinput", vargs);
 		break;
 	case SDL_TEXTEDITING:
 		txt = e.edit.text;
-		arg1 = new Variant(txt, strlen(txt));
-		arg2 = new Variant((double) e.edit.start);
-		arg3 = new Variant((double) e.edit.length);
-		msg = new Message("textedit", arg1, arg2, arg3);
-		arg1->release();
-		arg2->release();
-		arg3->release();
+		vargs.push_back(new Variant(txt, strlen(txt)));
+		vargs.push_back(new Variant((double) e.edit.start));
+		vargs.push_back(new Variant((double) e.edit.length));
+		msg = new Message("textedit", vargs);
 		break;
 	case SDL_MOUSEMOTION:
 		{
@@ -177,15 +235,11 @@ Message *Event::convert(const SDL_Event &e) const
 			double yrel = (double) e.motion.yrel;
 			windowToPixelCoords(&x, &y);
 			windowToPixelCoords(&xrel, &yrel);
-			arg1 = new Variant(x);
-			arg2 = new Variant(y);
-			arg3 = new Variant(xrel);
-			arg4 = new Variant(yrel);
-			msg = new Message("mousemoved", arg1, arg2, arg3, arg4);
-			arg1->release();
-			arg2->release();
-			arg3->release();
-			arg4->release();
+			vargs.push_back(new Variant(x));
+			vargs.push_back(new Variant(y));
+			vargs.push_back(new Variant(xrel));
+			vargs.push_back(new Variant(yrel));
+			msg = new Message("mousemoved", vargs);
 		}
 		break;
 	case SDL_MOUSEBUTTONDOWN:
@@ -195,39 +249,75 @@ Message *Event::convert(const SDL_Event &e) const
 			double x = (double) e.button.x;
 			double y = (double) e.button.y;
 			windowToPixelCoords(&x, &y);
-			arg1 = new Variant(x);
-			arg2 = new Variant(y);
-			arg3 = new Variant(txt, strlen(txt));
+			vargs.push_back(new Variant(x));
+			vargs.push_back(new Variant(y));
+			vargs.push_back(new Variant(txt, strlen(txt)));
+			vargs.push_back(new Variant(e.button.which == SDL_TOUCH_MOUSEID));
 			msg = new Message((e.type == SDL_MOUSEBUTTONDOWN) ?
 							  "mousepressed" : "mousereleased",
-							  arg1, arg2, arg3);
-			arg1->release();
-			arg2->release();
-			arg3->release();
+							  vargs);
 		}
 		break;
 	case SDL_MOUSEWHEEL:
-		if (e.wheel.y != 0)
+		vargs.push_back(new Variant((double) e.wheel.x));
+		vargs.push_back(new Variant((double) e.wheel.y));
+		msg = new Message("wheelmoved", vargs);
+		break;
+	case SDL_FINGERDOWN:
+	case SDL_FINGERUP:
+	case SDL_FINGERMOTION:
+		// Touch events are disabled in OS X because we only actually want touch
+		// screen events, but most touch devices in OS X aren't touch screens
+		// (and SDL doesn't differentiate.) Non-screen touch devices like Mac
+		// trackpads won't give touch coords in the window's coordinate-space.
+#ifndef LOVE_MACOSX
+		touchinfo.id = (int64) e.tfinger.fingerId;
+		touchinfo.x = e.tfinger.x;
+		touchinfo.y = e.tfinger.y;
+		touchinfo.dx = e.tfinger.dx;
+		touchinfo.dy = e.tfinger.dy;
+
+#ifdef LOVE_LINUX
+		// FIXME: hacky workaround for SDL not normalizing touch coordinates in
+		// its X11 backend: https://bugzilla.libsdl.org/show_bug.cgi?id=2307
+		if (touchNormalizationBug || fabs(touchinfo.x) >= 1.5 || fabs(touchinfo.y) >= 1.5 || fabs(touchinfo.dx) >= 1.5 || fabs(touchinfo.dy) >= 1.5)
 		{
-			button = (e.wheel.y > 0) ? mouse::Mouse::BUTTON_WHEELUP : mouse::Mouse::BUTTON_WHEELDOWN;
-			if (!love::mouse::Mouse::getConstant(button, txt))
-				break;
-
-			int mx, my;
-			double dmx, dmy;
-			SDL_GetMouseState(&mx, &my);
-			dmx = (double) mx;
-			dmy = (double) my;
-			windowToPixelCoords(&dmx, &dmy);
-
-			arg1 = new Variant(dmx);
-			arg2 = new Variant(dmy);
-			arg3 = new Variant(txt, strlen(txt));
-			msg = new Message("mousepressed", arg1, arg2, arg3);
-			arg1->release();
-			arg2->release();
-			arg3->release();
+			touchNormalizationBug = true;
+			windowToPixelCoords(&touchinfo.x, &touchinfo.y);
+			windowToPixelCoords(&touchinfo.dx, &touchinfo.dy);
 		}
+		else
+#endif
+		{
+			// SDL's coords are normalized to [0, 1], but we want them in pixels.
+			normalizedToPixelCoords(&touchinfo.x, &touchinfo.y);
+			normalizedToPixelCoords(&touchinfo.dx, &touchinfo.dy);
+		}
+
+		// We need to update the love.touch.sdl internal state from here.
+		touchmodule = (touch::sdl::Touch *) Module::getInstance("love.touch.sdl");
+		if (touchmodule)
+			touchmodule->onEvent(e.type, touchinfo);
+
+		// This is a bit hackish and we lose the higher 32 bits of the id on
+		// 32-bit systems, but SDL only ever gives id's that at most use as many
+		// bits as can fit in a pointer (for now.)
+		// We use lightuserdata instead of a lua_Number (double) because doubles
+		// can't represent all possible id values on 64-bit systems.
+		vargs.push_back(new Variant((void *) (intptr_t) touchinfo.id));
+		vargs.push_back(new Variant(touchinfo.x));
+		vargs.push_back(new Variant(touchinfo.y));
+		vargs.push_back(new Variant(touchinfo.dx));
+		vargs.push_back(new Variant(touchinfo.dy));
+
+		if (e.type == SDL_FINGERDOWN)
+			txt = "touchpressed";
+		else if (e.type == SDL_FINGERUP)
+			txt = "touchreleased";
+		else
+			txt = "touchmoved";
+		msg = new Message(txt, vargs);
+#endif
 		break;
 	case SDL_JOYBUTTONDOWN:
 	case SDL_JOYBUTTONUP:
@@ -245,15 +335,47 @@ Message *Event::convert(const SDL_Event &e) const
 		msg = convertWindowEvent(e);
 		break;
 	case SDL_DROPFILE:
+		filesystem = Module::getInstance<filesystem::Filesystem>(Module::M_FILESYSTEM);
+		if (filesystem != nullptr)
+		{
+			// Allow mounting any dropped path, so zips or dirs can be mounted.
+			filesystem->allowMountingForPath(e.drop.file);
+
+			if (filesystem->isRealDirectory(e.drop.file))
+			{
+				vargs.push_back(new Variant(e.drop.file, strlen(e.drop.file)));
+				msg = new Message("directorydropped", vargs);
+			}
+			else
+			{
+				Proxy proxy;
+				proxy.object = new love::filesystem::DroppedFile(e.drop.file);
+				proxy.type = FILESYSTEM_DROPPED_FILE_ID;
+				vargs.push_back(new Variant(FILESYSTEM_DROPPED_FILE_ID, &proxy));
+				msg = new Message("filedropped", vargs);
+				proxy.object->release();
+			}
+		}
 		SDL_free(e.drop.file);
 		break;
 	case SDL_QUIT:
+	case SDL_APP_TERMINATING:
 		msg = new Message("quit");
 		break;
+	case SDL_APP_LOWMEMORY:
+		msg = new Message("lowmemory");
+		break;
 	default:
 		break;
 	}
 
+	// We gave +1 refs to the StrongRef list, so we should release them.
+	for (const StrongRef<Variant> &v : vargs)
+	{
+		if (v.get() != nullptr)
+			v->release();
+	}
+
 	return msg;
 }
 
@@ -261,66 +383,61 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const
 {
 	joystick::JoystickModule *joymodule = Module::getInstance<joystick::JoystickModule>(Module::M_JOYSTICK);
 	if (!joymodule)
-		return 0;
+		return nullptr;
+
+	Message *msg = nullptr;
+
+	std::vector<StrongRef<Variant>> vargs;
+	vargs.reserve(4);
 
-	Message *msg = 0;
 	Proxy proxy;
 	love::joystick::Joystick::Hat hat;
 	love::joystick::Joystick::GamepadButton padbutton;
 	love::joystick::Joystick::GamepadAxis padaxis;
-	Variant *arg1, *arg2, *arg3;
 	const char *txt;
 
 	switch (e.type)
 	{
 	case SDL_JOYBUTTONDOWN:
 	case SDL_JOYBUTTONUP:
-		proxy.flags = JOYSTICK_JOYSTICK_T;
-		proxy.data = joymodule->getJoystickFromID(e.jbutton.which);
-		if (!proxy.data)
+		proxy.type = JOYSTICK_JOYSTICK_ID;
+		proxy.object = joymodule->getJoystickFromID(e.jbutton.which);
+		if (!proxy.object)
 			break;
 
-		arg1 = new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy);
-		arg2 = new Variant((double)(e.jbutton.button+1));
+		vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
+		vargs.push_back(new Variant((double)(e.jbutton.button+1)));
 		msg = new Message((e.type == SDL_JOYBUTTONDOWN) ?
 						  "joystickpressed" : "joystickreleased",
-						  arg1, arg2);
-		arg1->release();
-		arg2->release();
+						  vargs);
 		break;
 	case SDL_JOYAXISMOTION:
 		{
-			proxy.flags = JOYSTICK_JOYSTICK_T;
-			proxy.data = joymodule->getJoystickFromID(e.jaxis.which);
-			if (!proxy.data)
+			proxy.type = JOYSTICK_JOYSTICK_ID;
+			proxy.object = joymodule->getJoystickFromID(e.jaxis.which);
+			if (!proxy.object)
 				break;
 
-			arg1 = new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy);
-			arg2 = new Variant((double)(e.jaxis.axis+1));
+			vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
+			vargs.push_back(new Variant((double)(e.jaxis.axis+1)));
 			float value = joystick::Joystick::clampval(e.jaxis.value / 32768.0f);
-			arg3 = new Variant((double) value);
-			msg = new Message("joystickaxis", arg1, arg2, arg3);
-			arg1->release();
-			arg2->release();
-			arg3->release();
+			vargs.push_back(new Variant((double) value));
+			msg = new Message("joystickaxis", vargs);
 		}
 		break;
 	case SDL_JOYHATMOTION:
 		if (!joystick::sdl::Joystick::getConstant(e.jhat.value, hat) || !joystick::Joystick::getConstant(hat, txt))
 			break;
 
-		proxy.flags = JOYSTICK_JOYSTICK_T;
-		proxy.data = joymodule->getJoystickFromID(e.jhat.which);
-		if (!proxy.data)
+		proxy.type = JOYSTICK_JOYSTICK_ID;
+		proxy.object = joymodule->getJoystickFromID(e.jhat.which);
+		if (!proxy.object)
 			break;
 
-		arg1 = new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy);
-		arg2 = new Variant((double)(e.jhat.hat+1));
-		arg3 = new Variant(txt, strlen(txt));
-		msg = new Message("joystickhat", arg1, arg2, arg3);
-		arg1->release();
-		arg2->release();
-		arg3->release();
+		vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
+		vargs.push_back(new Variant((double)(e.jhat.hat+1)));
+		vargs.push_back(new Variant(txt, strlen(txt)));
+		msg = new Message("joystickhat", vargs);
 		break;
 	case SDL_CONTROLLERBUTTONDOWN:
 	case SDL_CONTROLLERBUTTONUP:
@@ -330,17 +447,15 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const
 		if (!joystick::Joystick::getConstant(padbutton, txt))
 			break;
 
-		proxy.flags = JOYSTICK_JOYSTICK_T;
-		proxy.data = joymodule->getJoystickFromID(e.cbutton.which);
-		if (!proxy.data)
+		proxy.type = JOYSTICK_JOYSTICK_ID;
+		proxy.object = joymodule->getJoystickFromID(e.cbutton.which);
+		if (!proxy.object)
 			break;
 
-		arg1 = new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy);
-		arg2 = new Variant(txt, strlen(txt));
+		vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
+		vargs.push_back(new Variant(txt, strlen(txt)));
 		msg = new Message(e.type == SDL_CONTROLLERBUTTONDOWN ?
-						  "gamepadpressed" : "gamepadreleased", arg1, arg2);
-		arg1->release();
-		arg2->release();
+						  "gamepadpressed" : "gamepadreleased", vargs);
 		break;
 	case SDL_CONTROLLERAXISMOTION:
 		if (joystick::sdl::Joystick::getConstant((SDL_GameControllerAxis) e.caxis.axis, padaxis))
@@ -348,60 +463,65 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const
 			if (!joystick::Joystick::getConstant(padaxis, txt))
 				break;
 
-			proxy.flags = JOYSTICK_JOYSTICK_T;
-			proxy.data = joymodule->getJoystickFromID(e.caxis.which);
-			if (!proxy.data)
+			proxy.type = JOYSTICK_JOYSTICK_ID;
+			proxy.object = joymodule->getJoystickFromID(e.caxis.which);
+			if (!proxy.object)
 				break;
 
-			arg1 = new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy);
+			vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
 
-			arg2 = new Variant(txt, strlen(txt));
+			vargs.push_back(new Variant(txt, strlen(txt)));
 			float value = joystick::Joystick::clampval(e.caxis.value / 32768.0f);
-			arg3 = new Variant((double) value);
-			msg = new Message("gamepadaxis", arg1, arg2, arg3);
-			arg1->release();
-			arg2->release();
-			arg3->release();
+			vargs.push_back(new Variant((double) value));
+			msg = new Message("gamepadaxis", vargs);
 		}
 		break;
 	case SDL_JOYDEVICEADDED:
 		// jdevice.which is the joystick device index.
-		proxy.data = joymodule->addJoystick(e.jdevice.which);
-		proxy.flags = JOYSTICK_JOYSTICK_T;
-		if (proxy.data)
+		proxy.object = joymodule->addJoystick(e.jdevice.which);
+		proxy.type = JOYSTICK_JOYSTICK_ID;
+		if (proxy.object)
 		{
-			arg1 = new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy);
-			msg = new Message("joystickadded", arg1);
-			arg1->release();
+			vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
+			msg = new Message("joystickadded", vargs);
 		}
 		break;
 	case SDL_JOYDEVICEREMOVED:
 		// jdevice.which is the joystick instance ID now.
-		proxy.data = joymodule->getJoystickFromID(e.jdevice.which);
-		proxy.flags = JOYSTICK_JOYSTICK_T;
-		if (proxy.data)
+		proxy.object = joymodule->getJoystickFromID(e.jdevice.which);
+		proxy.type = JOYSTICK_JOYSTICK_ID;
+		if (proxy.object)
 		{
-			joymodule->removeJoystick((joystick::Joystick *) proxy.data);
-			arg1 = new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy);
-			msg = new Message("joystickremoved", arg1);
-			arg1->release();
+			joymodule->removeJoystick((joystick::Joystick *) proxy.object);
+			vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy));
+			msg = new Message("joystickremoved", vargs);
 		}
 		break;
 	default:
 		break;
 	}
 
+	// We gave +1 refs to the StrongRef list, so we should release them.
+	for (const StrongRef<Variant> &v : vargs)
+	{
+		if (v.get() != nullptr)
+			v->release();
+	}
+
 	return msg;
 }
 
 Message *Event::convertWindowEvent(const SDL_Event &e) const
 {
-	Message *msg = 0;
-	Variant *arg1, *arg2, *arg3, *arg4;
-	window::Window *win = 0;
+	Message *msg = nullptr;
+
+	std::vector<StrongRef<Variant>> vargs;
+	vargs.reserve(4);
+
+	window::Window *win = nullptr;
 
 	if (e.type != SDL_WINDOWEVENT)
-		return 0;
+		return nullptr;
 
 	switch (e.window.event)
 	{
@@ -413,53 +533,47 @@ Message *Event::convertWindowEvent(const SDL_Event &e) const
 			SDL_DisableScreenSaver();
 		else
 			SDL_EnableScreenSaver();
-		arg1 = new Variant(e.window.event == SDL_WINDOWEVENT_FOCUS_GAINED);
-		msg = new Message("focus", arg1);
-		arg1->release();
+		vargs.push_back(new Variant(e.window.event == SDL_WINDOWEVENT_FOCUS_GAINED));
+		msg = new Message("focus", vargs);
 		break;
 	case SDL_WINDOWEVENT_ENTER:
 	case SDL_WINDOWEVENT_LEAVE:
-		arg1 = new Variant(e.window.event == SDL_WINDOWEVENT_ENTER);
-		msg = new Message("mousefocus", arg1);
-		arg1->release();
+		vargs.push_back(new Variant(e.window.event == SDL_WINDOWEVENT_ENTER));
+		msg = new Message("mousefocus", vargs);
 		break;
 	case SDL_WINDOWEVENT_SHOWN:
 	case SDL_WINDOWEVENT_HIDDEN:
-		arg1 = new Variant(e.window.event == SDL_WINDOWEVENT_SHOWN);
-		msg = new Message("visible", arg1);
-		arg1->release();
+		vargs.push_back(new Variant(e.window.event == SDL_WINDOWEVENT_SHOWN));
+		msg = new Message("visible", vargs);
 		break;
 	case SDL_WINDOWEVENT_RESIZED:
-		win = Module::getInstance<window::Window>(Module::M_WINDOW);
-		if (win)
 		{
 			int px_w = e.window.data1;
 			int px_h = e.window.data2;
 
-			// FIXME: disabled in Linux for runtime SDL 2.0.0 compatibility.
-#if SDL_VERSION_ATLEAST(2,0,1) && !defined(LOVE_LINUX)
 			SDL_Window *sdlwin = SDL_GetWindowFromID(e.window.windowID);
 			if (sdlwin)
 				SDL_GL_GetDrawableSize(sdlwin, &px_w, &px_h);
-#endif
 
-			win->onWindowResize(e.window.data1, e.window.data2);
-
-			graphics::Graphics *gfx = Module::getInstance<graphics::Graphics>(Module::M_GRAPHICS);
-			if (gfx)
-				gfx->setViewportSize(px_w, px_h);
-
-			arg1 = new Variant((double) px_w);
-			arg2 = new Variant((double) px_h);
-			arg3 = new Variant((double) e.window.data1);
-			arg4 = new Variant((double) e.window.data2);
-			msg = new Message("resize", arg1, arg2, arg3, arg4);
-			arg1->release();
-			arg2->release();
-			arg3->release();
-			arg4->release();
+			vargs.push_back(new Variant((double) px_w));
+			vargs.push_back(new Variant((double) px_h));
+			vargs.push_back(new Variant((double) e.window.data1));
+			vargs.push_back(new Variant((double) e.window.data2));
+			msg = new Message("resize", vargs);
 		}
 		break;
+	case SDL_WINDOWEVENT_SIZE_CHANGED:
+		win = Module::getInstance<window::Window>(Module::M_WINDOW);
+		if (win)
+			win->onSizeChanged(e.window.data1, e.window.data2);
+		break;
+	}
+
+	// We gave +1 refs to the StrongRef list, so we should release them.
+	for (const StrongRef<Variant> &v : vargs)
+	{
+		if (v.get() != nullptr)
+			v->release();
 	}
 
 	return msg;
@@ -481,6 +595,7 @@ std::map<SDL_Keycode, love::keyboard::Keyboard::Key> Event::createKeyMap()
 	k[SDLK_EXCLAIM] = Keyboard::KEY_EXCLAIM;
 	k[SDLK_QUOTEDBL] = Keyboard::KEY_QUOTEDBL;
 	k[SDLK_HASH] = Keyboard::KEY_HASH;
+	k[SDLK_PERCENT] = Keyboard::KEY_PERCENT;
 	k[SDLK_DOLLAR] = Keyboard::KEY_DOLLAR;
 	k[SDLK_AMPERSAND] = Keyboard::KEY_AMPERSAND;
 	k[SDLK_QUOTE] = Keyboard::KEY_QUOTE;

+ 3 - 7
src/modules/event/sdl/wrap_Event.cpp → src/modules/event/wrap_Event.cpp

@@ -23,15 +23,12 @@
 // LOVE
 #include "common/runtime.h"
 
-// sdlevent
-#include "Event.h"
+#include "sdl/Event.h"
 
 namespace love
 {
 namespace event
 {
-namespace sdl
-{
 
 #define instance() (Module::getInstance<Event>(Module::M_EVENT))
 
@@ -124,7 +121,7 @@ extern "C" int luaopen_love_event(lua_State *L)
 	Event *instance = instance();
 	if (instance == nullptr)
 	{
-		luax_catchexcept(L, [&](){ instance = new Event(); });
+		luax_catchexcept(L, [&](){ instance = new love::event::sdl::Event(); });
 	}
 	else
 		instance->retain();
@@ -132,13 +129,12 @@ extern "C" int luaopen_love_event(lua_State *L)
 	WrappedModule w;
 	w.module = instance;
 	w.name = "event";
-	w.flags = MODULE_T;
+	w.type = MODULE_ID;
 	w.functions = functions;
 	w.types = 0;
 
 	return luax_register_module(L, w);
 }
 
-} // sdl
 } // event
 } // love

+ 3 - 6
src/modules/event/sdl/wrap_Event.h → src/modules/event/wrap_Event.h

@@ -18,8 +18,8 @@
  * 3. This notice may not be removed or altered from any source distribution.
  **/
 
-#ifndef LOVE_EVENT_SDL_WRAP_EVENT_H
-#define LOVE_EVENT_SDL_WRAP_EVENT_H
+#ifndef LOVE_EVENT_WRAP_EVENT_H
+#define LOVE_EVENT_WRAP_EVENT_H
 
 // LOVE
 #include "common/config.h"
@@ -29,8 +29,6 @@ namespace love
 {
 namespace event
 {
-namespace sdl
-{
 
 int w_pump(lua_State *L);
 int w_poll(lua_State *L);
@@ -41,8 +39,7 @@ int w_quit(lua_State *L);
 
 extern "C" LOVE_EXPORT int luaopen_love_event(lua_State *L);
 
-} // sdl
 } // event
 } // love
 
-#endif // LOVE_EVENT_SDL_WRAP_EVENT_H
+#endif // LOVE_EVENT_WRAP_EVENT_H

+ 252 - 0
src/modules/filesystem/DroppedFile.cpp

@@ -0,0 +1,252 @@
+/**
+ * Copyright (c) 2006-2015 LOVE Development Team
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty.  In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ *    claim that you wrote the original software. If you use this software
+ *    in a product, an acknowledgment in the product documentation would be
+ *    appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ *    misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ **/
+
+// LOVE
+#include "DroppedFile.h"
+#include "common/utf8.h"
+
+// Assume POSIX or Visual Studio.
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifdef LOVE_WINDOWS
+#include <wchar.h>
+#else
+#include <unistd.h> // POSIX.
+#endif
+
+namespace love
+{
+namespace filesystem
+{
+
+DroppedFile::DroppedFile(const std::string &filename)
+	: filename(filename)
+	, file(nullptr)
+	, mode(MODE_CLOSED)
+	, bufferMode(BUFFER_NONE)
+	, bufferSize(0)
+{
+}
+
+DroppedFile::~DroppedFile()
+{
+	if (mode != MODE_CLOSED)
+		close();
+}
+
+bool DroppedFile::open(Mode newmode)
+{
+	if (newmode == MODE_CLOSED)
+		return true;
+
+	// File already open?
+	if (file != nullptr)
+		return false;
+
+#ifdef LOVE_WINDOWS
+	// make sure non-ASCII filenames work.
+	std::wstring modestr = to_widestr(getModeString(newmode));
+	file = _wfopen(to_widestr(filename).c_str(), modestr.c_str());
+#else
+	file = fopen(filename.c_str(), getModeString(newmode));
+#endif
+
+	if (newmode == MODE_READ && file == nullptr)
+		throw love::Exception("Could not open file %s. Does not exist.", filename.c_str());
+
+	mode = newmode;
+
+	if (file != nullptr && !setBuffer(bufferMode, bufferSize))
+	{
+		// Revert to buffer defaults if we don't successfully set the buffer.
+		bufferMode = BUFFER_NONE;
+		bufferSize = 0;
+	}
+
+	return file != nullptr;
+}
+
+bool DroppedFile::close()
+{
+	if (file == nullptr || fclose(file) != 0)
+		return false;
+
+	mode = MODE_CLOSED;
+	file = nullptr;
+
+	return true;
+}
+
+bool DroppedFile::isOpen() const
+{
+	return mode != MODE_CLOSED && file != nullptr;
+}
+
+int64 DroppedFile::getSize()
+{
+#ifdef LOVE_WINDOWS
+
+	// make sure non-ASCII filenames work.
+	struct _stat buf;
+	if (_wstat(to_widestr(filename).c_str(), &buf) != 0)
+		return -1;
+
+	return (int64) buf.st_size;
+
+#else
+
+	// Assume POSIX support...
+	struct stat buf;
+	if (stat(filename.c_str(), &buf) != 0)
+		return -1;
+
+	return (int64) buf.st_size;
+
+#endif
+}
+
+int64 DroppedFile::read(void *dst, int64 size)
+{
+	if (!file || mode != MODE_READ)
+		throw love::Exception("File is not opened for reading.");
+
+	if (size < 0)
+		throw love::Exception("Invalid read size.");
+
+	size_t read = fread(dst, 1, (size_t) size, file);
+
+	return (int64) read;
+}
+
+bool DroppedFile::write(const void *data, int64 size)
+{
+	if (!file || (mode != MODE_WRITE && mode != MODE_APPEND))
+		throw love::Exception("File is not opened for writing.");
+
+	if (size < 0)
+		throw love::Exception("Invalid write size.");
+
+	int64 written = (int64) fwrite(data, 1, (size_t) size, file);
+
+	return written == size;
+}
+
+bool DroppedFile::flush()
+{
+	if (!file || (mode != MODE_WRITE && mode != MODE_APPEND))
+		throw love::Exception("File is not opened for writing.");
+
+	return fflush(file) == 0;
+}
+
+bool DroppedFile::eof()
+{
+	return file == nullptr || feof(file) != 0;
+}
+
+int64 DroppedFile::tell()
+{
+	if (file == nullptr)
+		return -1;
+
+	return (int64) ftell(file);
+}
+
+bool DroppedFile::seek(uint64 pos)
+{
+	return file != nullptr && fseek(file, (long) pos, SEEK_SET) == 0;
+}
+
+bool DroppedFile::setBuffer(BufferMode bufmode, int64 size)
+{
+	if (size < 0)
+		return false;
+
+	if (bufmode == BUFFER_NONE)
+		size = 0;
+
+	// If the file isn't open, we'll make sure the buffer values are set in
+	// DroppedFile::open.
+	if (!isOpen())
+	{
+		bufferMode = bufmode;
+		bufferSize = size;
+		return true;
+	}
+
+	int vbufmode;
+	switch (bufmode)
+	{
+	case File::BUFFER_NONE:
+	default:
+		vbufmode = _IONBF;
+		break;
+	case File::BUFFER_LINE:
+		vbufmode = _IOLBF;
+		break;
+	case File::BUFFER_FULL:
+		vbufmode = _IOFBF;
+		break;
+	}
+
+	if (setvbuf(file, nullptr, vbufmode, (size_t) size) != 0)
+		return false;
+
+	bufferMode = bufmode;
+	bufferSize = size;
+
+	return true;
+}
+
+File::BufferMode DroppedFile::getBuffer(int64 &size) const
+{
+	size = bufferSize;
+	return bufferMode;
+}
+
+const std::string &DroppedFile::getFilename() const
+{
+	return filename;
+}
+
+File::Mode DroppedFile::getMode() const
+{
+	return mode;
+}
+
+const char *DroppedFile::getModeString(Mode mode)
+{
+	switch (mode)
+	{
+	case File::MODE_CLOSED:
+	default:
+		return "c";
+	case File::MODE_READ:
+		return "rb";
+	case File::MODE_WRITE:
+		return "wb";
+	case File::MODE_APPEND:
+		return "ab";
+	}
+}
+
+} // filesystem
+} // love

+ 83 - 0
src/modules/filesystem/DroppedFile.h

@@ -0,0 +1,83 @@
+/**
+ * Copyright (c) 2006-2015 LOVE Development Team
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty.  In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ *    claim that you wrote the original software. If you use this software
+ *    in a product, an acknowledgment in the product documentation would be
+ *    appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ *    misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ **/
+
+#ifndef LOVE_FILESYSTEM_DROPPED_FILE_H
+#define LOVE_FILESYSTEM_DROPPED_FILE_H
+
+// LOVE
+#include "common/config.h"
+#include "File.h"
+
+// C
+#include <cstdio>
+
+namespace love
+{
+namespace filesystem
+{
+
+/**
+ * File which is created when a user drags and drops an actual file onto the
+ * LOVE game. Uses C's stdio. Filenames are system-dependent full paths.
+ **/
+class DroppedFile : public File
+{
+public:
+
+	DroppedFile(const std::string &filename);
+	virtual ~DroppedFile();
+
+	// Implements File.
+	using File::read;
+	using File::write;
+	bool open(Mode mode);
+	bool close();
+	bool isOpen() const;
+	int64 getSize();
+	int64 read(void *dst, int64 size);
+	bool write(const void *data, int64 size);
+	bool flush();
+	bool eof();
+	int64 tell();
+	bool seek(uint64 pos);
+	bool setBuffer(BufferMode bufmode, int64 size);
+	BufferMode getBuffer(int64 &size) const;
+	Mode getMode() const;
+	const std::string &getFilename() const;
+
+private:
+
+	static const char *getModeString(Mode mode);
+
+	std::string filename;
+
+	FILE *file;
+
+	Mode mode;
+
+	BufferMode bufferMode;
+	int64 bufferSize;
+
+}; // DroppedFile
+
+} // filesystem
+} // love
+
+#endif // LOVE_FILESYSTEM_DROPPED_FILE_H

+ 66 - 4
src/modules/filesystem/File.cpp

@@ -29,6 +29,68 @@ File::~File()
 {
 }
 
+FileData *File::read(int64 size)
+{
+	bool isopen = isOpen();
+
+	if (!isopen && !open(MODE_READ))
+		throw love::Exception("Could not read file %s.", getFilename().c_str());
+
+	int64 max = getSize();
+	int64 cur = tell();
+	size = (size == ALL) ? max : size;
+
+	if (size < 0)
+		throw love::Exception("Invalid read size.");
+
+	// Clamping because the file offset may be in a weird position.
+	if (cur < 0)
+		cur = 0;
+	else if (cur > max)
+		cur = max;
+
+	if (cur + size > max)
+		size = max - cur;
+
+	FileData *fileData = new FileData(size, getFilename());
+	int64 bytesRead = read(fileData->getData(), size);
+
+	if (bytesRead < 0 || (bytesRead == 0 && bytesRead != size))
+	{
+		delete fileData;
+		throw love::Exception("Could not read from file.");
+	}
+
+	if (bytesRead < size)
+	{
+		FileData *tmpFileData = new FileData(bytesRead, getFilename());
+		memcpy(tmpFileData->getData(), fileData->getData(), (size_t) bytesRead);
+		fileData->release();
+		fileData = tmpFileData;
+	}
+
+	if (!isopen)
+		close();
+	
+	return fileData;
+}
+
+bool File::write(const Data *data, int64 size)
+{
+	return write(data->getData(), (size == ALL) ? data->getSize() : size);
+}
+
+std::string File::getExtension() const
+{
+	const std::string &filename = getFilename();
+	std::string::size_type idx = filename.rfind('.');
+
+	if (idx != std::string::npos)
+		return filename.substr(idx+1);
+	else
+		return std::string();
+}
+
 bool File::getConstant(const char *in, Mode &out)
 {
 	return modes.find(in, out);
@@ -51,10 +113,10 @@ bool File::getConstant(BufferMode in, const char *&out)
 
 StringMap<File::Mode, File::MODE_MAX_ENUM>::Entry File::modeEntries[] =
 {
-	{"c", File::CLOSED},
-	{"r", File::READ},
-	{"w", File::WRITE},
-	{"a", File::APPEND},
+	{"c", File::MODE_CLOSED},
+	{"r", File::MODE_READ},
+	{"w", File::MODE_WRITE},
+	{"a", File::MODE_APPEND},
 };
 
 StringMap<File::Mode, File::MODE_MAX_ENUM> File::modes(File::modeEntries, sizeof(File::modeEntries));

+ 9 - 9
src/modules/filesystem/File.h

@@ -49,10 +49,10 @@ public:
 	 **/
 	enum Mode
 	{
-		CLOSED,
-		READ,
-		WRITE,
-		APPEND,
+		MODE_CLOSED,
+		MODE_READ,
+		MODE_WRITE,
+		MODE_APPEND,
 		MODE_MAX_ENUM
 	};
 
@@ -77,7 +77,7 @@ public:
 	/**
 	 * Opens the file in a certain mode.
 	 *
-	 * @param mode READ, WRITE, APPEND.
+	 * @param mode MODE_READ, MODE_WRITE, MODE_APPEND.
 	 * @return True if successful, false otherwise.
 	 **/
 	virtual bool open(Mode mode) = 0;
@@ -107,7 +107,7 @@ public:
 	 * @param size The number of bytes to attempt reading, or -1 for EOF.
 	 * @return A newly allocated Data object.
 	 **/
-	virtual FileData *read(int64 size = ALL) = 0;
+	virtual FileData *read(int64 size = ALL);
 
 	/**
 	 * Reads data into the destination buffer.
@@ -134,7 +134,7 @@ public:
 	 * @param size The number of bytes to attempt writing, or -1 for everything.
 	 * @return True of success, false otherwise.
 	 **/
-	virtual bool write(const Data *data, int64 size = ALL) = 0;
+	virtual bool write(const Data *data, int64 size = ALL);
 
 	/**
 	 * Flushes the currently buffered file data to disk. Only applicable in
@@ -192,13 +192,13 @@ public:
 	 * Gets the filename for this File, or empty string if none.
 	 * @return The filename for this File.
 	 **/
-	virtual std::string getFilename() const = 0;
+	virtual const std::string &getFilename() const = 0;
 
 	/**
 	 * Gets the file extension for this File, or empty string if none.
 	 * @return The file extension for this File (without the dot).
 	 **/
-	virtual std::string getExtension() const = 0;
+	virtual std::string getExtension() const;
 
 	static bool getConstant(const char *in, Mode &out);
 	static bool getConstant(Mode in, const char *&out);

+ 62 - 0
src/modules/filesystem/Filesystem.cpp

@@ -0,0 +1,62 @@
+/**
+ * Copyright (c) 2006-2015 LOVE Development Team
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty.  In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ *    claim that you wrote the original software. If you use this software
+ *    in a product, an acknowledgment in the product documentation would be
+ *    appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ *    misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ **/
+
+// LOVE
+#include "Filesystem.h"
+#include "common/utf8.h"
+
+// Assume POSIX or Visual Studio.
+#include <sys/types.h>
+#include <sys/stat.h>
+
+namespace love
+{
+namespace filesystem
+{
+
+Filesystem::Filesystem()
+{
+}
+
+Filesystem::~Filesystem()
+{
+}
+
+bool Filesystem::isRealDirectory(const std::string &path) const
+{
+#ifdef LOVE_WINDOWS
+	// make sure non-ASCII paths work.
+	struct _stat buf;
+	if (_wstat(to_widestr(path).c_str(), &buf) != 0)
+		return false;
+
+	return (buf.st_mode & _S_IFDIR) == _S_IFDIR;
+#else
+	// Assume POSIX support...
+	struct stat buf;
+	if (stat(path.c_str(), &buf) != 0)
+		return false;
+
+	return S_ISDIR(buf.st_mode) != 0;
+#endif
+}
+
+} // filesystem
+} // love

+ 261 - 0
src/modules/filesystem/Filesystem.h

@@ -0,0 +1,261 @@
+/**
+ * Copyright (c) 2006-2015 LOVE Development Team
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty.  In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ *    claim that you wrote the original software. If you use this software
+ *    in a product, an acknowledgment in the product documentation would be
+ *    appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ *    misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ **/
+
+#ifndef LOVE_FILESYSTEM_FILESYSTEM_H
+#define LOVE_FILESYSTEM_FILESYSTEM_H
+
+// LOVE
+#include "common/config.h"
+#include "common/runtime.h"
+#include "common/Module.h"
+#include "common/int.h"
+#include "FileData.h"
+#include "File.h"
+
+// C++
+#include <string>
+#include <vector>
+
+// In Windows, we would like to use "LOVE" as the
+// application folder, but in Linux, we like .love.
+#define LOVE_APPDATA_PREFIX ""
+#ifdef LOVE_WINDOWS
+#	define LOVE_APPDATA_FOLDER "LOVE"
+#	define LOVE_PATH_SEPARATOR "/"
+#	define LOVE_MAX_PATH _MAX_PATH
+#else
+#	if defined(LOVE_MACOSX) || defined(LOVE_IOS)
+#		define LOVE_APPDATA_FOLDER "LOVE"
+#	elif defined(LOVE_LINUX)
+#		define LOVE_APPDATA_FOLDER "love"
+#	else
+#		define LOVE_APPDATA_PREFIX "."
+#		define LOVE_APPDATA_FOLDER "love"
+#	endif
+#	define LOVE_PATH_SEPARATOR "/"
+#	define LOVE_MAX_PATH MAXPATHLEN
+#endif
+
+namespace love
+{
+namespace filesystem
+{
+
+class Filesystem : public Module
+{
+public:
+
+	Filesystem();
+	virtual ~Filesystem();
+
+	// Implements Module.
+	virtual ModuleType getModuleType() const { return M_FILESYSTEM; }
+
+	virtual void init(const char *arg0) = 0;
+
+	virtual void setFused(bool fused) = 0;
+	virtual bool isFused() const = 0;
+
+	/**
+	 * This sets up the save directory. If the
+	 * it is already set up, nothing happens.
+	 * @return True on success, false otherwise.
+	 **/
+	virtual bool setupWriteDirectory() = 0;
+
+	/**
+	 * Sets the name of the save folder.
+	 * @param ident The name of the game. Will be used to
+	 * to create the folder in the LOVE data folder.
+	 **/
+	virtual bool setIdentity(const char *ident, bool appendToPath = false) = 0;
+	virtual const char *getIdentity() const = 0;
+
+	/**
+	 * Sets the path to the game source.
+	 * This can only be set once.
+	 * @param source Path to a directory or a .love-file.
+	 **/
+	virtual bool setSource(const char *source) = 0;
+
+	/**
+	 * Gets the path to the game source.
+	 * Returns a 0-length string if the source has not been set.
+	 **/
+	virtual const char *getSource() const = 0;
+
+	virtual bool mount(const char *archive, const char *mountpoint, bool appendToPath = false) = 0;
+	virtual bool unmount(const char *archive) = 0;
+
+	/**
+	 * Creates a new file.
+	 **/
+	virtual File *newFile(const char *filename) const = 0;
+
+	/**
+	 * Creates a new FileData object. Data will be copied.
+	 * @param data Pointer to the data.
+	 * @param size The size of the data.
+	 * @param filename The full filename used to file type identification.
+	 **/
+	virtual FileData *newFileData(void *data, unsigned int size, const char *filename) const = 0;
+
+	/**
+	 * Creates a new FileData object from base64 data.
+	 * @param b64 The base64 data.
+	 **/
+	virtual FileData *newFileData(const char *b64, const char *filename) const = 0;
+
+	/**
+	 * Gets the current working directory.
+	 **/
+	virtual const char *getWorkingDirectory() = 0;
+
+	/**
+	 * Gets the user home directory.
+	 **/
+	virtual std::string getUserDirectory() = 0;
+
+	/**
+	 * Gets the APPDATA directory. On Windows, this is the folder
+	 * in the %APPDATA% enviroment variable. On Linux, this is the
+	 * user home folder.
+	 **/
+	virtual std::string getAppdataDirectory() = 0;
+
+	/**
+	 * Gets the full path of the save folder.
+	 **/
+	virtual const char *getSaveDirectory() = 0;
+
+	/**
+	 * Gets the full path to the directory containing the game source.
+	 * For example if the game source is C:\Games\mygame.love, this will return
+	 * C:\Games.
+	 **/
+	virtual std::string getSourceBaseDirectory() const = 0;
+
+	/**
+	 * Gets the real directory path containing the file.
+	 **/
+	virtual std::string getRealDirectory(const char *filename) const = 0;
+
+	/**
+	 * Checks if a path is a directory.
+	 * @param dir The directory name to check.
+	 **/
+	virtual bool isDirectory(const char *dir) const = 0;
+
+	/**
+	 * Checks if a filename exists.
+	 * @param file The filename to check.
+	 **/
+	virtual bool isFile(const char *file) const = 0;
+
+	/**
+	 * Creates a directory. Write dir must be set.
+	 * @param dir The directory to create.
+	 **/
+	virtual bool createDirectory(const char *dir) = 0;
+
+	/**
+	 * Removes a file (or directory).
+	 * @param file The file or directory to remove.
+	 **/
+	virtual bool remove(const char *file) = 0;
+
+	/**
+	 * Reads data from a file.
+	 * @param filename The name of the file to read from.
+	 * @param size The size in bytes of the data to read.
+	 **/
+	virtual FileData *read(const char *filename, int64 size = File::ALL) const = 0;
+
+	/**
+	 * Write data to a file.
+	 * @param filename The name of the file to write to.
+	 * @param data The data to write.
+	 * @param size The size in bytes of the data to write.
+	 **/
+	virtual void write(const char *filename, const void *data, int64 size) const = 0;
+
+	/**
+	 * Append data to a file, creating it if it doesn't exist.
+	 * @param filename The name of the file to write to.
+	 * @param data The data to append.
+	 * @param size The size in bytes of the data to append.
+	 **/
+	virtual void append(const char *filename, const void *data, int64 size) const = 0;
+
+	/**
+	 * This "native" method returns a table of all
+	 * files in a given directory.
+	 **/
+	virtual int getDirectoryItems(lua_State *L) = 0;
+
+	/**
+	 * Gets the last modification time of a file, in seconds
+	 * since the Unix epoch.
+	 * @param filename The name of the file.
+	 **/
+	virtual int64 getLastModified(const char *filename) const = 0;
+
+	/**
+	 * Gets the size of a file in bytes.
+	 * @param filename The name of the file.
+	 **/
+	virtual int64 getSize(const char *filename) const = 0;
+
+	/**
+	 * Enable or disable symbolic link support in love.filesystem.
+	 **/
+	virtual void setSymlinksEnabled(bool enable) = 0;
+
+	/**
+	 * Gets whether symbolic link support is enabled.
+	 **/
+	virtual bool areSymlinksEnabled() const = 0;
+
+	/**
+	 * Gets whether a filepath is actually a symlink.
+	 * Always returns false if symlinks are not enabled.
+	 **/
+	virtual bool isSymlink(const char *filename) const = 0;
+
+	// Require path accessors
+	// Not const because it's R/W
+	virtual std::vector<std::string> &getRequirePath() = 0;
+
+	/**
+	 * Allows a full (OS-dependent) path to be used with Filesystem::mount.
+	 **/
+	virtual void allowMountingForPath(const std::string &path) = 0;
+
+	/**
+	 * Gets whether the given full (OS-dependent) path is a directory.
+	 **/
+	virtual bool isRealDirectory(const std::string &path) const;
+
+}; // Filesystem
+
+} // filesystem
+} // love
+
+#endif // LOVE_FILESYSTEM_FILESYSTEM_H

+ 31 - 98
src/modules/filesystem/physfs/File.cpp

@@ -39,8 +39,8 @@ namespace physfs
 
 File::File(const std::string &filename)
 	: filename(filename)
-	, file(0)
-	, mode(CLOSED)
+	, file(nullptr)
+	, mode(MODE_CLOSED)
 	, bufferMode(BUFFER_NONE)
 	, bufferSize(0)
 {
@@ -48,25 +48,25 @@ File::File(const std::string &filename)
 
 File::~File()
 {
-	if (mode != CLOSED)
+	if (mode != MODE_CLOSED)
 		close();
 }
 
 bool File::open(Mode mode)
 {
-	if (mode == CLOSED)
+	if (mode == MODE_CLOSED)
 		return true;
 
 	// File must exist if read mode.
-	if ((mode == READ) && !PHYSFS_exists(filename.c_str()))
+	if ((mode == MODE_READ) && !PHYSFS_exists(filename.c_str()))
 		throw love::Exception("Could not open file %s. Does not exist.", filename.c_str());
 
 	// Check whether the write directory is set.
-	if ((mode == APPEND || mode == WRITE) && (PHYSFS_getWriteDir() == 0) && !hack_setupWriteDirectory())
+	if ((mode == MODE_APPEND || mode == MODE_WRITE) && (PHYSFS_getWriteDir() == 0) && !hack_setupWriteDirectory())
 		throw love::Exception("Could not set write directory.");
 
 	// File already open?
-	if (file != 0)
+	if (file != nullptr)
 		return false;
 
 	PHYSFS_getLastError(); // Clear the error buffer.
@@ -74,13 +74,13 @@ bool File::open(Mode mode)
 
 	switch (mode)
 	{
-	case READ:
+	case MODE_READ:
 		handle = PHYSFS_openRead(filename.c_str());
 		break;
-	case APPEND:
+	case MODE_APPEND:
 		handle = PHYSFS_openAppend(filename.c_str());
 		break;
-	case WRITE:
+	case MODE_WRITE:
 		handle = PHYSFS_openWrite(filename.c_str());
 		break;
 	default:
@@ -99,94 +99,50 @@ bool File::open(Mode mode)
 
 	this->mode = mode;
 
-	if (file != 0 && !setBuffer(bufferMode, bufferSize))
+	if (file != nullptr && !setBuffer(bufferMode, bufferSize))
 	{
 		// Revert to buffer defaults if we don't successfully set the buffer.
 		bufferMode = BUFFER_NONE;
 		bufferSize = 0;
 	}
 
-	return (file != 0);
+	return (file != nullptr);
 }
 
 bool File::close()
 {
-	if (!PHYSFS_close(file))
+	if (file == nullptr || !PHYSFS_close(file))
 		return false;
-	mode = CLOSED;
-	file = 0;
+
+	mode = MODE_CLOSED;
+	file = nullptr;
+
 	return true;
 }
 
 bool File::isOpen() const
 {
-	return mode != CLOSED && file != 0;
+	return mode != MODE_CLOSED && file != nullptr;
 }
 
 int64 File::getSize()
 {
 	// If the file is closed, open it to
 	// check the size.
-	if (file == 0)
+	if (file == nullptr)
 	{
-		open(READ);
-		int64 size = (int64)PHYSFS_fileLength(file);
+		open(MODE_READ);
+		int64 size = (int64) PHYSFS_fileLength(file);
 		close();
 		return size;
 	}
 
-	return (int64)PHYSFS_fileLength(file);
-}
-
-
-FileData *File::read(int64 size)
-{
-	bool isOpen = (file != 0);
-
-	if (!isOpen && !open(READ))
-		throw love::Exception("Could not read file %s.", filename.c_str());
-
-	int64 max = getSize();
-	int64 cur = tell();
-	size = (size == ALL) ? max : size;
-
-	if (size < 0)
-		throw love::Exception("Invalid read size.");
-
-	// Clamping because the file offset may be in a weird position.
-	if (cur < 0)
-		cur = 0;
-	else if (cur > max)
-		cur = max;
-
-	if (cur + size > max)
-		size = max - cur;
-
-	FileData *fileData = new FileData(size, getFilename());
-	int64 bytesRead = read(fileData->getData(), size);
-
-	if (bytesRead < 0 || (bytesRead == 0 && bytesRead != size))
-	{
-		delete fileData;
-		throw love::Exception("Could not read from file.");
-	}
-	if (bytesRead < size)
-	{
-		FileData *tmpFileData = new FileData(bytesRead, getFilename());
-		memcpy(tmpFileData->getData(), fileData->getData(), (size_t) bytesRead);
-		delete fileData;
-		fileData = tmpFileData;
-	}
-
-	if (!isOpen)
-		close();
-
-	return fileData;
+	return (int64) PHYSFS_fileLength(file);
 }
 
 int64 File::read(void *dst, int64 size)
 {
-	if (!file || mode != READ)
+	if (!file || mode != MODE_READ)
 		throw love::Exception("File is not opened for reading.");
 
 	int64 max = (int64)PHYSFS_fileLength(file);
@@ -205,7 +161,7 @@ int64 File::read(void *dst, int64 size)
 
 bool File::write(const void *data, int64 size)
 {
-	if (!file || (mode != WRITE && mode != APPEND))
+	if (!file || (mode != MODE_WRITE && mode != MODE_APPEND))
 		throw love::Exception("File is not opened for writing.");
 
 	// Another clamp, for the time being.
@@ -215,7 +171,7 @@ bool File::write(const void *data, int64 size)
 		throw love::Exception("Invalid write size.");
 
 	// Try to write.
-	int64 written = static_cast<int64>(PHYSFS_write(file, data, 1, (PHYSFS_uint32) size));
+	int64 written = (int64) PHYSFS_write(file, data, 1, (PHYSFS_uint32) size);
 
 	// Check that correct amount of data was written.
 	if (written != size)
@@ -231,14 +187,9 @@ bool File::write(const void *data, int64 size)
 	return true;
 }
 
-bool File::write(const Data *data, int64 size)
-{
-	return write(data->getData(), (size == ALL) ? data->getSize() : size);
-}
-
 bool File::flush()
 {
-	if (!file || (mode != WRITE && mode != APPEND))
+	if (!file || (mode != MODE_WRITE && mode != MODE_APPEND))
 		throw love::Exception("File is not opened for writing.");
 
 	return PHYSFS_flush(file) != 0;
@@ -263,14 +214,12 @@ inline bool test_eof(File *, PHYSFS_File *file)
 
 bool File::eof()
 {
-	if (file == 0 || test_eof(this, file))
-		return true;
-	return false;
+	return file == nullptr || test_eof(this, file);
 }
 
 int64 File::tell()
 {
-	if (file == 0)
+	if (file == nullptr)
 		return -1;
 
 	return (int64) PHYSFS_tell(file);
@@ -278,23 +227,17 @@ int64 File::tell()
 
 bool File::seek(uint64 pos)
 {
-	if (file == 0)
-		return false;
-
-	if (!PHYSFS_seek(file, (PHYSFS_uint64) pos))
-		return false;
-	return true;
+	return file != nullptr && PHYSFS_seek(file, (PHYSFS_uint64) pos) != 0;
 }
 
 bool File::setBuffer(BufferMode bufmode, int64 size)
 {
-	// No negativity allowed!
 	if (size < 0)
 		return false;
 
 	// If the file isn't open, we'll make sure the buffer values are set in
 	// File::open.
-	if (file == 0 || mode == CLOSED)
+	if (!isOpen())
 	{
 		bufferMode = bufmode;
 		bufferSize = size;
@@ -331,21 +274,11 @@ File::BufferMode File::getBuffer(int64 &size) const
 	return bufferMode;
 }
 
-std::string File::getFilename() const
+const std::string &File::getFilename() const
 {
 	return filename;
 }
 
-std::string File::getExtension() const
-{
-	std::string::size_type idx = filename.rfind('.');
-
-	if (idx != std::string::npos)
-		return filename.substr(idx+1);
-	else
-		return std::string();
-}
-
 filesystem::File::Mode File::getMode() const
 {
 	return mode;

+ 5 - 6
src/modules/filesystem/physfs/File.h

@@ -25,7 +25,7 @@
 #include "filesystem/File.h"
 
 // PhysFS
-#ifdef LOVE_MACOSX_USE_FRAMEWORKS
+#ifdef LOVE_APPLE_USE_FRAMEWORKS
 #include <physfs/physfs.h>
 #else
 #include <physfs.h>
@@ -54,14 +54,14 @@ public:
 	virtual ~File();
 
 	// Implements love::filesystem::File.
+	using love::filesystem::File::read;
+	using love::filesystem::File::write;
 	bool open(Mode mode);
 	bool close();
 	bool isOpen() const;
 	int64 getSize();
-	FileData *read(int64 size = ALL);
-	int64 read(void *dst, int64 size);
+	virtual int64 read(void *dst, int64 size);
 	bool write(const void *data, int64 size);
-	bool write(const Data *data, int64 size = ALL);
 	bool flush();
 	bool eof();
 	int64 tell();
@@ -69,8 +69,7 @@ public:
 	bool setBuffer(BufferMode bufmode, int64 size);
 	BufferMode getBuffer(int64 &size) const;
 	Mode getMode() const;
-	std::string getFilename() const;
-	std::string getExtension() const;
+	const std::string &getFilename() const;
 
 private:
 

+ 77 - 133
src/modules/filesystem/physfs/Filesystem.cpp

@@ -18,15 +18,37 @@
  * 3. This notice may not be removed or altered from any source distribution.
  **/
 
-#include "common/config.h"
-
 #include <iostream>
 #include <sstream>
+#include <algorithm>
 
 #include "common/utf8.h"
 #include "common/b64.h"
 
 #include "Filesystem.h"
+#include "File.h"
+
+// PhysFS
+#ifdef LOVE_APPLE_USE_FRAMEWORKS
+#include <physfs/physfs.h>
+#else
+#include <physfs.h>
+#endif
+
+// For great CWD. (Current Working Directory)
+// Using this instead of boost::filesystem which totally
+// cramped our style.
+#ifdef LOVE_WINDOWS
+#	include <windows.h>
+#	include <direct.h>
+#else
+#	include <sys/param.h>
+#	include <unistd.h>
+#endif
+
+#ifdef LOVE_IOS
+#	include "common/iOS.h"
+#endif
 
 namespace
 {
@@ -73,15 +95,15 @@ namespace physfs
 {
 
 Filesystem::Filesystem()
-	: initialized(false)
-	, fused(false)
+	: fused(false)
 	, fusedSet(false)
 {
+	requirePath = {"?.lua", "?/init.lua"};
 }
 
 Filesystem::~Filesystem()
 {
-	if (initialized)
+	if (PHYSFS_isInit())
 		PHYSFS_deinit();
 }
 
@@ -93,8 +115,14 @@ const char *Filesystem::getName() const
 void Filesystem::init(const char *arg0)
 {
 	if (!PHYSFS_init(arg0))
-		throw Exception(PHYSFS_getLastError());
-	initialized = true;
+		throw love::Exception("%s", PHYSFS_getLastError());
+
+	PHYSFS_Version version = {};
+	PHYSFS_getLinkedVersion(&version);
+
+	// FIXME: This is a workaround for a bug in PHYSFS_enumerateFiles in 2.1-alpha.
+	if (version.major == 2 && version.minor == 1)
+		PHYSFS_permitSymbolicLinks(1);
 }
 
 void Filesystem::setFused(bool fused)
@@ -114,7 +142,7 @@ bool Filesystem::isFused() const
 
 bool Filesystem::setIdentity(const char *ident, bool appendToPath)
 {
-	if (!initialized)
+	if (!PHYSFS_isInit())
 		return false;
 
 	std::string old_save_path = save_path_full;
@@ -146,7 +174,7 @@ bool Filesystem::setIdentity(const char *ident, bool appendToPath)
 
 	// Try to add the save directory to the search path.
 	// (No error on fail, it means that the path doesn't exist).
-	PHYSFS_addToSearchPath(save_path_full.c_str(), appendToPath);
+	PHYSFS_mount(save_path_full.c_str(), nullptr, appendToPath);
 
 	// HACK: This forces setupWriteDirectory to be called the next time a file
 	// is opened for writing - otherwise it won't be called at all if it was
@@ -163,7 +191,7 @@ const char *Filesystem::getIdentity() const
 
 bool Filesystem::setSource(const char *source)
 {
-	if (!initialized)
+	if (!PHYSFS_isInit())
 		return false;
 
 	// Check whether directory is already set.
@@ -171,7 +199,7 @@ bool Filesystem::setSource(const char *source)
 		return false;
 
 	// Add the directory.
-	if (!PHYSFS_addToSearchPath(source, 1))
+	if (!PHYSFS_mount(source, nullptr, 1))
 		return false;
 
 	// Save the game source.
@@ -187,7 +215,7 @@ const char *Filesystem::getSource() const
 
 bool Filesystem::setupWriteDirectory()
 {
-	if (!initialized)
+	if (!PHYSFS_isInit())
 		return false;
 
 	// These must all be set.
@@ -232,7 +260,7 @@ bool Filesystem::setupWriteDirectory()
 		return false;
 
 	// Add the directory. (Will not be readded if already present).
-	if (!PHYSFS_addToSearchPath(save_path_full.c_str(), 0))
+	if (!PHYSFS_mount(save_path_full.c_str(), nullptr, 0))
 	{
 		PHYSFS_setWriteDir(nullptr); // Clear the write directory in case of error.
 		return false;
@@ -243,13 +271,18 @@ bool Filesystem::setupWriteDirectory()
 
 bool Filesystem::mount(const char *archive, const char *mountpoint, bool appendToPath)
 {
-	if (!initialized || !archive)
+	if (!PHYSFS_isInit() || !archive)
 		return false;
 
 	std::string realPath;
 	std::string sourceBase = getSourceBaseDirectory();
 
-	if (isFused() && sourceBase.compare(archive) == 0)
+	// Check whether the given archive path is in the list of allowed full paths.
+	auto it = std::find(allowedMountPaths.begin(), allowedMountPaths.end(), archive);
+
+	if (it != allowedMountPaths.end())
+		realPath = *it;
+	else if (isFused() && sourceBase.compare(archive) == 0)
 	{
 		// Special case: if the game is fused and the archive is the source's
 		// base directory, mount it even though it's outside of the save dir.
@@ -284,13 +317,18 @@ bool Filesystem::mount(const char *archive, const char *mountpoint, bool appendT
 
 bool Filesystem::unmount(const char *archive)
 {
-	if (!initialized || !archive)
+	if (!PHYSFS_isInit() || !archive)
 		return false;
 
 	std::string realPath;
 	std::string sourceBase = getSourceBaseDirectory();
 
-	if (isFused() && sourceBase.compare(archive) == 0)
+	// Check whether the given archive path is in the list of allowed full paths.
+	auto it = std::find(allowedMountPaths.begin(), allowedMountPaths.end(), archive);
+
+	if (it != allowedMountPaths.end())
+		realPath = *it;
+	else if (isFused() && sourceBase.compare(archive) == 0)
 	{
 		// Special case: if the game is fused and the archive is the source's
 		// base directory, unmount it even though it's outside of the save dir.
@@ -318,7 +356,7 @@ bool Filesystem::unmount(const char *archive)
 	return PHYSFS_removeFromSearchPath(realPath.c_str());
 }
 
-File *Filesystem::newFile(const char *filename) const
+love::filesystem::File *Filesystem::newFile(const char *filename) const
 {
 	return new File(filename);
 }
@@ -335,7 +373,7 @@ FileData *Filesystem::newFileData(void *data, unsigned int size, const char *fil
 
 FileData *Filesystem::newFileData(const char *b64, const char *filename) const
 {
-	int size = strlen(b64);
+	int size = (int) strlen(b64);
 	int outsize = 0;
 	char *dst = b64_decode(b64, size, outsize);
 	FileData *fd = new FileData(outsize, std::string(filename));
@@ -388,6 +426,8 @@ std::string Filesystem::getAppdataDirectory()
 		std::string udir = getUserDirectory();
 		udir.append("/Library/Application Support");
 		appdata = normalize(udir);
+#elif defined(LOVE_IOS)
+		appdata = normalize(love::ios::getAppdataDirectory());
 #elif defined(LOVE_LINUX)
 		char *xdgdatahome = getenv("XDG_DATA_HOME");
 		if (!xdgdatahome)
@@ -443,19 +483,14 @@ std::string Filesystem::getRealDirectory(const char *filename) const
 	return std::string(dir);
 }
 
-bool Filesystem::exists(const char *file) const
+bool Filesystem::isDirectory(const char *dir) const
 {
-	return PHYSFS_exists(file);
-}
-
-bool Filesystem::isDirectory(const char *file) const
-{
-	return PHYSFS_isDirectory(file);
+	return PHYSFS_isDirectory(dir);
 }
 
 bool Filesystem::isFile(const char *file) const
 {
-	return exists(file) && !isDirectory(file);
+	return PHYSFS_exists(file) && !PHYSFS_isDirectory(file);
 }
 
 bool Filesystem::createDirectory(const char *dir)
@@ -478,11 +513,11 @@ bool Filesystem::remove(const char *file)
 	return true;
 }
 
-Data *Filesystem::read(const char *filename, int64 size) const
+FileData *Filesystem::read(const char *filename, int64 size) const
 {
 	File file(filename);
 
-	file.open(File::READ);
+	file.open(File::MODE_READ);
 
 	// close() is called in the File destructor.
 	return file.read(size);
@@ -492,7 +527,7 @@ void Filesystem::write(const char *filename, const void *data, int64 size) const
 {
 	File file(filename);
 
-	file.open(File::WRITE);
+	file.open(File::MODE_WRITE);
 
 	// close() is called in the File destructor.
 	if (!file.write(data, size))
@@ -503,7 +538,7 @@ void Filesystem::append(const char *filename, const void *data, int64 size) cons
 {
 	File file(filename);
 
-	file.open(File::APPEND);
+	file.open(File::MODE_APPEND);
 
 	// close() is called in the File destructor.
 	if (!file.write(data, size))
@@ -542,108 +577,6 @@ int Filesystem::getDirectoryItems(lua_State *L)
 	return 1;
 }
 
-int Filesystem::lines_i(lua_State *L)
-{
-	const int bufsize = 1024;
-	char buf[bufsize];
-	int linesize = 0;
-	bool newline = false;
-
-	File *file = luax_checktype<File>(L, lua_upvalueindex(1), "File", FILESYSTEM_FILE_T);
-
-	// Only accept read mode at this point.
-	if (file->getMode() != File::READ)
-		return luaL_error(L, "File needs to stay in read mode.");
-
-	int64 pos = file->tell();
-	int64 userpos = -1;
-
-	if (lua_isnoneornil(L, lua_upvalueindex(2)) == 0)
-	{
-		// User may have changed the file position.
-		userpos = pos;
-		pos = (int64) lua_tonumber(L, lua_upvalueindex(2));
-		if (userpos != pos)
-			file->seek(pos);
-	}
-
-	while (!newline && !file->eof())
-	{
-		// This 64-bit to 32-bit integer cast should be safe as it never exceeds bufsize.
-		int read = (int) file->read(buf, bufsize);
-		if (read < 0)
-			return luaL_error(L, "Could not read from file.");
-
-		linesize += read;
-
-		for (int i = 0; i < read; i++)
-		{
-			if (buf[i] == '\n')
-			{
-				linesize -= read - i;
-				newline = true;
-				break;
-			}
-		}
-	}
-
-	if (newline || (file->eof() && linesize > 0))
-	{
-		if (linesize < bufsize)
-		{
-			// We have the line in the buffer on the stack. No 'new' and 'read' needed.
-			lua_pushlstring(L, buf, linesize > 0 && buf[linesize - 1] == '\r' ? linesize - 1 : linesize);
-			if (userpos < 0)
-				file->seek(pos + linesize + 1);
-		}
-		else
-		{
-			char *str = 0;
-			try
-			{
-				str = new char[linesize + 1];
-			}
-			catch(std::bad_alloc &)
-			{
-				// Can't lua_error (longjmp) in exception handlers.
-			}
-
-			if (!str)
-				return luaL_error(L, "Out of memory.");
-
-			file->seek(pos);
-
-			// Read the \n anyway and save us a call to seek.
-			if (file->read(str, linesize + 1) == -1)
-			{
-				delete [] str;
-				return luaL_error(L, "Could not read from file.");
-			}
-
-			lua_pushlstring(L, str, str[linesize - 1] == '\r' ? linesize - 1 : linesize);
-			delete [] str;
-		}
-
-		if (userpos >= 0)
-		{
-			// Save new position in upvalue.
-			lua_pushnumber(L, (lua_Number)(pos + linesize + 1));
-			lua_replace(L, lua_upvalueindex(2));
-			file->seek(userpos);
-		}
-
-		return 1;
-	}
-
-	// EOF reached.
-	if (userpos >= 0 && luax_toboolean(L, lua_upvalueindex(3)))
-		file->seek(userpos);
-	else
-		file->close();
-
-	return 0;
-}
-
 int64 Filesystem::getLastModified(const char *filename) const
 {
 	PHYSFS_sint64 time = PHYSFS_getLastModTime(filename);
@@ -676,6 +609,17 @@ bool Filesystem::isSymlink(const char *filename) const
 	return PHYSFS_isSymbolicLink(filename) != 0;
 }
 
+std::vector<std::string> &Filesystem::getRequirePath()
+{
+	return requirePath;
+}
+
+void Filesystem::allowMountingForPath(const std::string &path)
+{
+	if (std::find(allowedMountPaths.begin(), allowedMountPaths.end(), path) == allowedMountPaths.end())
+		allowedMountPaths.push_back(path);
+}
+
 } // physfs
 } // filesystem
 } // love

Some files were not shown because too many files changed in this diff