diff --git a/DEPS b/DEPS
index 71f547f..514f09e 100644
--- a/DEPS
+++ b/DEPS
@@ -21,15 +21,15 @@
   'chromium_git': 'https://chromium.googlesource.com',
   'dart_svn': 'https://dart.googlecode.com',
   'sfntly_revision': '1bdaae8fc788a5ac8936d68bf24f37d977a13dac',
-  'skia_revision': 'f77365f43e74dee617db669369a0eb86c6acc550',
+  'skia_revision': 'fef4c32bdf02f1bf3cde722cd48c4ac4cd137ab6',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and V8 without interference from each other.
-  'v8_revision': 'd7f03015dfa36e5054a1a3cc6f3be9bb57705b34',
+  'v8_revision': '224d14897d9b7df09e08a94e4cbc13feb339346d',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': '9e0478f62fbc2f24d4ec233ef655d50b9dc0b812',
+  'angle_revision': 'bc393df9cd8ae893da686533644da29a8c4911ae',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling build tools
   # and whatever else without interference from each other.
@@ -41,11 +41,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
-  'pdfium_revision': 'aa7b4ede03764a5701a477b601720a32c88d8e42',
+  'pdfium_revision': 'b3a788e5e37955620b26be5b6e3048d37b605e00',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling BoringSSL
   # and whatever else without interference from each other.
-  'boringssl_revision': '347f025d752980f62757f3f01321c4ec970ba94c',
+  'boringssl_revision': 'be629e0e920ae32cca691f5e45410ff00db1a849',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling lss
   # and whatever else without interference from each other.
@@ -133,7 +133,7 @@
    'https://boringssl.googlesource.com/boringssl.git' + '@' +  Var('boringssl_revision'),
 
   'src/tools/gyp':
-    Var('chromium_git') + '/external/gyp.git' + '@' + 'b28bd7ddd1438c98f93a8e5383b7daceb572a3fb', # from svn revision 2028
+    Var('chromium_git') + '/external/gyp.git' + '@' + '4d7c139b1820c5fcb993868c61f170a02cda8a40', # from svn revision 2028
 }
 
 
diff --git a/base/BUILD.gn b/base/BUILD.gn
index b31fed1..c1df2ec 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -23,6 +23,8 @@
     "allocator/type_profiler_control.h",
     "android/application_status_listener.cc",
     "android/application_status_listener.h",
+    "android/base_jni_onload.cc",
+    "android/base_jni_onload.h",
     "android/base_jni_registrar.cc",
     "android/base_jni_registrar.h",
     "android/build_info.cc",
@@ -46,6 +48,7 @@
     "android/jni_android.h",
     "android/jni_array.cc",
     "android/jni_array.h",
+    "android/jni_onload_delegate.h",
     "android/jni_registrar.cc",
     "android/jni_registrar.h",
     "android/jni_string.cc",
@@ -900,7 +903,6 @@
       "native_library_posix.cc",
       "strings/sys_string_conversions_posix.cc",
     ]
-    deps += [ "//third_party/mach_override" ]
   } else {
     # Non-Mac.
     sources -= [
diff --git a/base/PRESUBMIT.py b/base/PRESUBMIT.py
index 46ab02e..7fc8107 100644
--- a/base/PRESUBMIT.py
+++ b/base/PRESUBMIT.py
@@ -5,7 +5,7 @@
 """Chromium presubmit script for src/base.
 
 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
-for more details on the presubmit API built into gcl.
+for more details on the presubmit API built into depot_tools.
 """
 
 def _CheckNoInterfacesInBase(input_api, output_api):
diff --git a/base/android/base_jni_onload.cc b/base/android/base_jni_onload.cc
new file mode 100644
index 0000000..ae64120
--- /dev/null
+++ b/base/android/base_jni_onload.cc
@@ -0,0 +1,64 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/android/base_jni_onload.h"
+
+#include "base/android/jni_android.h"
+#include "base/android/jni_onload_delegate.h"
+#include "base/android/library_loader/library_loader_hooks.h"
+
+namespace base {
+namespace android {
+
+namespace {
+
+// The JNIOnLoadDelegate implementation in base.
+class BaseJNIOnLoadDelegate : public JNIOnLoadDelegate {
+ public:
+  bool RegisterJNI(JNIEnv* env) override;
+  bool Init() override;
+};
+
+bool BaseJNIOnLoadDelegate::RegisterJNI(JNIEnv* env) {
+  return RegisterLibraryLoaderEntryHook(env);
+}
+
+bool BaseJNIOnLoadDelegate::Init() {
+  return true;
+}
+
+}  // namespace
+
+
+bool OnJNIOnLoad(JavaVM* vm,
+                 std::vector<JNIOnLoadDelegate*>* delegates) {
+  base::android::InitVM(vm);
+  JNIEnv* env = base::android::AttachCurrentThread();
+
+  BaseJNIOnLoadDelegate delegate;
+  delegates->push_back(&delegate);
+  bool ret = true;
+  for (std::vector<JNIOnLoadDelegate*>::reverse_iterator i =
+           delegates->rbegin(); i != delegates->rend(); ++i) {
+    if (!(*i)->RegisterJNI(env)) {
+      ret = false;
+      break;
+    }
+  }
+
+  if (ret) {
+    for (std::vector<JNIOnLoadDelegate*>::reverse_iterator i =
+             delegates->rbegin(); i != delegates->rend(); ++i) {
+      if (!(*i)->Init()) {
+        ret = false;
+        break;
+      }
+    }
+  }
+  delegates->pop_back();
+  return ret;
+}
+
+}  // namespace android
+}  // namespace base
diff --git a/base/android/base_jni_onload.h b/base/android/base_jni_onload.h
new file mode 100644
index 0000000..f3f05fa
--- /dev/null
+++ b/base/android/base_jni_onload.h
@@ -0,0 +1,27 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef BASE_ANDROID_BASE_JNI_ONLOAD_H_
+#define BASE_ANDROID_BASE_JNI_ONLOAD_H_
+
+#include <jni.h>
+#include <vector>
+
+#include "base/base_export.h"
+
+namespace base {
+namespace android {
+
+class JNIOnLoadDelegate;
+
+// Returns whether JNI registration and initialization succeeded. Caller shall
+// put the JNIOnLoadDelegate into |delegates| in reverse order. Refer
+// JNIOnLoadDelegate for more information.
+BASE_EXPORT bool OnJNIOnLoad(JavaVM* vm,
+                             std::vector<JNIOnLoadDelegate*>* delegates);
+
+}  // namespace android
+}  // namespace base
+
+#endif  // BASE_ANDROID_BASE_JNI_ONLOAD_H_
diff --git a/base/android/base_jni_registrar.cc b/base/android/base_jni_registrar.cc
index 9529b71..4dda482 100644
--- a/base/android/base_jni_registrar.cc
+++ b/base/android/base_jni_registrar.cc
@@ -25,9 +25,9 @@
 #include "base/android/thread_utils.h"
 #include "base/android/trace_event_binding.h"
 #include "base/basictypes.h"
-#include "base/debug/trace_event.h"
 #include "base/message_loop/message_pump_android.h"
 #include "base/power_monitor/power_monitor_device_source_android.h"
+#include "base/trace_event/trace_event.h"
 
 namespace base {
 namespace android {
diff --git a/base/android/java/src/org/chromium/base/BaseChromiumApplication.java b/base/android/java/src/org/chromium/base/BaseChromiumApplication.java
index a9dc2f7..8f7d39d 100644
--- a/base/android/java/src/org/chromium/base/BaseChromiumApplication.java
+++ b/base/android/java/src/org/chromium/base/BaseChromiumApplication.java
@@ -6,6 +6,7 @@
 
 import android.app.Activity;
 import android.app.Application;
+import android.content.Context;
 import android.os.Bundle;
 import android.view.Window;
 
@@ -96,4 +97,16 @@
     public void unregisterWindowFocusChangedListener(WindowFocusChangedListener listener) {
         mWindowFocusListeners.removeObserver(listener);
     }
+
+    /** Initializes the {@link CommandLine}. */
+    public void initCommandLine() {}
+
+    /**
+     * This must only be called for contexts whose application is a subclass of
+     * {@link BaseChromiumApplication}.
+     */
+    @VisibleForTesting
+    public static void initCommandLine(Context context) {
+        ((BaseChromiumApplication) context.getApplicationContext()).initCommandLine();
+    };
 }
diff --git a/base/android/java/src/org/chromium/base/CommandLine.java b/base/android/java/src/org/chromium/base/CommandLine.java
index 406f36b..43e0004 100644
--- a/base/android/java/src/org/chromium/base/CommandLine.java
+++ b/base/android/java/src/org/chromium/base/CommandLine.java
@@ -31,6 +31,7 @@
      *  Returns true if this command line contains the given switch.
      *  (Switch names ARE case-sensitive).
      */
+    @VisibleForTesting
     public abstract boolean hasSwitch(String switchString);
 
     /**
@@ -57,6 +58,7 @@
      * this action happens before the switch is needed.
      * @param switchString the switch to add.  It should NOT start with '--' !
      */
+    @VisibleForTesting
     public abstract void appendSwitch(String switchString);
 
     /**
@@ -96,6 +98,7 @@
     }
 
     // Equivalent to CommandLine::ForCurrentProcess in C++.
+    @VisibleForTesting
     public static CommandLine getInstance() {
         CommandLine commandLine = sCommandLine.get();
         assert commandLine != null;
diff --git a/base/android/java/src/org/chromium/base/TraceEvent.java b/base/android/java/src/org/chromium/base/TraceEvent.java
index 4721b25..3d3b11a 100644
--- a/base/android/java/src/org/chromium/base/TraceEvent.java
+++ b/base/android/java/src/org/chromium/base/TraceEvent.java
@@ -10,9 +10,9 @@
 import android.util.Log;
 import android.util.Printer;
 /**
- * Java mirror of Chrome trace event API. See base/debug/trace_event.h.  Unlike the native version,
- * Java does not have stack objects, so a TRACE_EVENT() which does both TRACE_EVENT_BEGIN() and
- * TRACE_EVENT_END() in ctor/dtor is not possible.
+ * Java mirror of Chrome trace event API. See base/trace_event/trace_event.h. Unlike the native
+ * version, Java does not have stack objects, so a TRACE_EVENT() which does both TRACE_EVENT_BEGIN()
+ * and TRACE_EVENT_END() in ctor/dtor is not possible.
  * It is OK to use tracing before the native library has loaded, but such traces will
  * be ignored. (Perhaps we could devise to buffer them up in future?).
  */
diff --git a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
index 89cb5bb..602358b 100644
--- a/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
+++ b/base/android/java/src/org/chromium/base/library_loader/LibraryLoader.java
@@ -12,6 +12,8 @@
 import org.chromium.base.JNINamespace;
 import org.chromium.base.TraceEvent;
 
+import java.util.Locale;
+
 import javax.annotation.Nullable;
 
 /**
@@ -59,6 +61,13 @@
     // APK file with executable permissions.
     private static boolean sMapApkWithExecPermission = false;
 
+    // One-way switch to indicate whether we probe for memory mapping the APK
+    // file with executable permissions. We suppress the probe under some
+    // conditions.
+    // For more, see:
+    //   https://code.google.com/p/chromium/issues/detail?id=448084
+    private static boolean sProbeMapApkWithExecPermission = true;
+
     // One-way switch becomes true if the Chromium library was loaded from the
     // APK file directly.
     private static boolean sLibraryWasLoadedFromApk = false;
@@ -166,11 +175,30 @@
                     String apkFilePath = null;
                     boolean useMapExecSupportFallback = false;
 
+                    // If the Android build version pre-dates KitKat and the device
+                    // manufacturer is Samsung, skip the check for mmap exec support and
+                    // return false. This avoids triggering a warning on these devices.
+                    // The version check is included because these devices do not show
+                    // the warning on later OS builds.
+                    //
+                    // For more, see:
+                    //   https://code.google.com/p/chromium/issues/detail?id=448084
+                    final String manufacturer = android.os.Build.MANUFACTURER;
+                    final int version = android.os.Build.VERSION.SDK_INT;
+                    if (manufacturer != null
+                            && version < android.os.Build.VERSION_CODES.KITKAT
+                            && manufacturer.toLowerCase(Locale.ENGLISH).contains("samsung")) {
+                        Log.w(TAG, "Suppressed load from APK support check on this device");
+                        sProbeMapApkWithExecPermission = false;
+                    }
+
                     // Check if the device supports memory mapping the APK file
                     // with executable permissions.
                     if (context != null) {
                         apkFilePath = context.getApplicationInfo().sourceDir;
-                        sMapApkWithExecPermission = Linker.checkMapExecSupport(apkFilePath);
+                        if (sProbeMapApkWithExecPermission) {
+                            sMapApkWithExecPermission = Linker.checkMapExecSupport(apkFilePath);
+                        }
                         if (!sMapApkWithExecPermission && Linker.isInZipFile()) {
                             Log.w(TAG, "the no map executable support fallback will be used because"
                                     + " memory mapping the APK file with executable permissions is"
@@ -378,6 +406,10 @@
             return LibraryLoadFromApkStatusCodes.UNKNOWN;
         }
 
+        if (!sProbeMapApkWithExecPermission) {
+            return LibraryLoadFromApkStatusCodes.UNKNOWN;
+        }
+
         return sMapApkWithExecPermission
                 ? LibraryLoadFromApkStatusCodes.SUPPORTED
                 : LibraryLoadFromApkStatusCodes.NOT_SUPPORTED;
diff --git a/base/android/java/src/org/chromium/base/library_loader/Linker.java b/base/android/java/src/org/chromium/base/library_loader/Linker.java
index dfcc141..23f953c 100644
--- a/base/android/java/src/org/chromium/base/library_loader/Linker.java
+++ b/base/android/java/src/org/chromium/base/library_loader/Linker.java
@@ -846,15 +846,6 @@
     public static boolean checkMapExecSupport(String apkFile) {
         assert apkFile != null;
 
-        // https://code.google.com/p/chromium/issues/detail?id=448084
-        // Do not check if the device is Samsung Mega.
-        final String model = android.os.Build.MODEL;
-        if (model != null && model.equals("GT-I9205")) {
-            if (DEBUG) Log.i(TAG, "checkMapExecSupport: model is '" + model
-                             + "', returning false");
-            return false;
-        }
-
         synchronized (Linker.class) {
             ensureInitializedLocked();
 
diff --git a/base/android/jni_onload_delegate.h b/base/android/jni_onload_delegate.h
new file mode 100644
index 0000000..ef1b137
--- /dev/null
+++ b/base/android/jni_onload_delegate.h
@@ -0,0 +1,41 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef BASE_ANDROID_JNI_ONLOAD_DELEGATE_H_
+#define BASE_ANDROID_JNI_ONLOAD_DELEGATE_H_
+
+#include <jni.h>
+
+#include "base/base_export.h"
+
+namespace base {
+namespace android {
+
+// This delegate class is used to implement component specific JNI registration
+// and initialization. All methods are called in JNI_OnLoad().
+//
+// Both RegisterJNI() and Init() methods are called if the shared library
+// is loaded by crazy linker that can't find JNI methods without JNI
+// registration, otherwise, only Init() is invoked where dynamic lookup is
+// used to find the JNI methods.
+//
+// It is important to make sure the JNI registration code is only in
+// RegisterJNI(), so it could be stripped out when JNI registration isn't
+// needed.
+class BASE_EXPORT JNIOnLoadDelegate {
+ public:
+  virtual ~JNIOnLoadDelegate() {}
+
+  // Returns whether the JNI registration succeeded.
+  virtual bool RegisterJNI(JNIEnv* env) = 0;
+
+  // Returns whether the initialization succeeded. This method is called after
+  // RegisterJNI(), all JNI methods shall ready to be used.
+  virtual bool Init() = 0;
+};
+
+}  // namespace android
+}  // namespace base
+
+#endif  // BASE_ANDROID_JNI_ONLOAD_DELEGATE_H_
diff --git a/base/android/jni_registrar.cc b/base/android/jni_registrar.cc
index 0f32089..8e13e60 100644
--- a/base/android/jni_registrar.cc
+++ b/base/android/jni_registrar.cc
@@ -4,9 +4,9 @@
 
 #include "base/android/jni_registrar.h"
 
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "base/android/jni_android.h"
+#include "base/trace_event/trace_event.h"
 
 namespace base {
 namespace android {
diff --git a/base/android/trace_event_binding.cc b/base/android/trace_event_binding.cc
index 900ea52..94eb214 100644
--- a/base/android/trace_event_binding.cc
+++ b/base/android/trace_event_binding.cc
@@ -8,9 +8,9 @@
 
 #include <set>
 
-#include "base/debug/trace_event.h"
-#include "base/debug/trace_event_impl.h"
 #include "base/lazy_instance.h"
+#include "base/trace_event/trace_event.h"
+#include "base/trace_event/trace_event_impl.h"
 #include "jni/TraceEvent_jni.h"
 
 namespace base {
diff --git a/base/base.gyp b/base/base.gyp
index 7565646..00244aa 100644
--- a/base/base.gyp
+++ b/base/base.gyp
@@ -201,9 +201,6 @@
               '$(SDKROOT)/System/Library/Frameworks/Security.framework',
             ],
           },
-          'dependencies': [
-            '../third_party/mach_override/mach_override.gyp:mach_override',
-          ],
         }],
         ['OS == "ios" and _toolset != "host"', {
           'link_settings': {
diff --git a/base/base.gypi b/base/base.gypi
index 6cc177c..d4dd4dc 100644
--- a/base/base.gypi
+++ b/base/base.gypi
@@ -28,6 +28,8 @@
           'allocator/type_profiler_control.h',
           'android/application_status_listener.cc',
           'android/application_status_listener.h',
+          'android/base_jni_onload.cc',
+          'android/base_jni_onload.h',
           'android/base_jni_registrar.cc',
           'android/base_jni_registrar.h',
           'android/build_info.cc',
@@ -53,6 +55,7 @@
           'android/jni_android.h',
           'android/jni_array.cc',
           'android/jni_array.h',
+          'android/jni_onload_delegate.h',
           'android/jni_registrar.cc',
           'android/jni_registrar.h',
           'android/jni_string.cc',
diff --git a/base/base.isolate b/base/base.isolate
index c23fdd4..021c01c 100644
--- a/base/base.isolate
+++ b/base/base.isolate
@@ -23,7 +23,7 @@
         ],
       },
     }],
-    ['OS=="win" and asan==1', {
+    ['OS=="win" and asan==1 and component=="shared_library"', {
       'variables': {
         'files': [
           '../third_party/llvm-build/Release+Asserts/lib/clang/3.7.0/lib/windows/clang_rt.asan_dynamic-i386.dll',
@@ -53,7 +53,7 @@
         ],
       },
     }],
-    ['OS=="win" and component=="shared_library" and CONFIGURATION_NAME=="Debug"', {
+    ['OS=="win" and component=="shared_library" and (CONFIGURATION_NAME=="Debug" or CONFIGURATION_NAME=="Debug_x64")', {
       'variables': {
         'files': [
           # Copy the VS runtime DLLs into the isolate so that they
@@ -65,7 +65,7 @@
         ],
       },
     }],
-    ['OS=="win" and component=="shared_library" and CONFIGURATION_NAME=="Release"', {
+    ['OS=="win" and component=="shared_library" and (CONFIGURATION_NAME=="Release" or CONFIGURATION_NAME=="Release_x64")', {
       'variables': {
         'files': [
           # Copy the VS runtime DLLs into the isolate so that they
diff --git a/base/debug/task_annotator.cc b/base/debug/task_annotator.cc
index ae2d797..3591fd6 100644
--- a/base/debug/task_annotator.cc
+++ b/base/debug/task_annotator.cc
@@ -5,8 +5,8 @@
 #include "base/debug/task_annotator.h"
 
 #include "base/debug/alias.h"
-#include "base/debug/trace_event.h"
 #include "base/pending_task.h"
+#include "base/trace_event/trace_event.h"
 #include "base/tracked_objects.h"
 
 namespace base {
diff --git a/base/files/file_path_watcher_linux.cc b/base/files/file_path_watcher_linux.cc
index 36ee66c..60267df 100644
--- a/base/files/file_path_watcher_linux.cc
+++ b/base/files/file_path_watcher_linux.cc
@@ -19,7 +19,6 @@
 
 #include "base/bind.h"
 #include "base/containers/hash_tables.h"
-#include "base/debug/trace_event.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
@@ -32,6 +31,7 @@
 #include "base/posix/eintr_wrapper.h"
 #include "base/synchronization/lock.h"
 #include "base/threading/thread.h"
+#include "base/trace_event/trace_event.h"
 
 namespace base {
 
diff --git a/base/i18n/file_util_icu.cc b/base/i18n/file_util_icu.cc
index b5c0b9d..f57bb39 100644
--- a/base/i18n/file_util_icu.cc
+++ b/base/i18n/file_util_icu.cc
@@ -30,12 +30,19 @@
     return Singleton<IllegalCharacters>::get();
   }
 
-  bool contains(UChar32 ucs4) {
-    return !!set->contains(ucs4);
+  bool DisallowedEverywhere(UChar32 ucs4) {
+    return !!illegal_anywhere_->contains(ucs4);
   }
 
-  bool containsNone(const string16 &s) {
-    return !!set->containsNone(icu::UnicodeString(s.c_str(), s.size()));
+  bool DisallowedLeadingOrTrailing(UChar32 ucs4) {
+    return !!illegal_at_ends_->contains(ucs4);
+  }
+
+  bool IsAllowedName(const string16& s) {
+    return s.empty() || (!!illegal_anywhere_->containsNone(
+                             icu::UnicodeString(s.c_str(), s.size())) &&
+                         !illegal_at_ends_->contains(*s.begin()) &&
+                         !illegal_at_ends_->contains(*s.rbegin()));
   }
 
  private:
@@ -45,60 +52,61 @@
   IllegalCharacters();
   ~IllegalCharacters() { }
 
-  scoped_ptr<icu::UnicodeSet> set;
+  // set of characters considered invalid anywhere inside a filename.
+  scoped_ptr<icu::UnicodeSet> illegal_anywhere_;
+
+  // set of characters considered invalid at either end of a filename.
+  scoped_ptr<icu::UnicodeSet> illegal_at_ends_;
 
   DISALLOW_COPY_AND_ASSIGN(IllegalCharacters);
 };
 
 IllegalCharacters::IllegalCharacters() {
-  UErrorCode status = U_ZERO_ERROR;
-  // Control characters, formatting characters, non-characters, and
-  // some printable ASCII characters regarded as dangerous ('"*/:<>?\\').
+  UErrorCode everywhere_status = U_ZERO_ERROR;
+  UErrorCode ends_status = U_ZERO_ERROR;
+  // Control characters, formatting characters, non-characters, path separators,
+  // and some printable ASCII characters regarded as dangerous ('"*/:<>?\\').
   // See  http://blogs.msdn.com/michkap/archive/2006/11/03/941420.aspx
   // and http://msdn2.microsoft.com/en-us/library/Aa365247.aspx
-  // TODO(jungshik): Revisit the set. ZWJ and ZWNJ are excluded because they
-  // are legitimate in Arabic and some S/SE Asian scripts. However, when used
-  // elsewhere, they can be confusing/problematic.
-  // Also, consider wrapping the set with our Singleton class to create and
-  // freeze it only once. Note that there's a trade-off between memory and
-  // speed.
-#if defined(WCHAR_T_IS_UTF16)
-  set.reset(new icu::UnicodeSet(icu::UnicodeString(
-      L"[[\"*/:<>?\\\\|][:Cc:][:Cf:] - [\u200c\u200d]]"), status));
-#else
-  set.reset(new icu::UnicodeSet(UNICODE_STRING_SIMPLE(
-      "[[\"*/:<>?\\\\|][:Cc:][:Cf:] - [\\u200c\\u200d]]").unescape(),
-      status));
-#endif
-  DCHECK(U_SUCCESS(status));
+  // Note that code points in the "Other, Format" (Cf) category are ignored on
+  // HFS+ despite the ZERO_WIDTH_JOINER and ZERO_WIDTH_NON-JOINER being
+  // legitimate in Arabic and some S/SE Asian scripts. In addition tilde (~) is
+  // also excluded due to the possibility of interacting poorly with short
+  // filenames on VFAT. (Related to CVE-2014-9390)
+  illegal_anywhere_.reset(new icu::UnicodeSet(
+      UNICODE_STRING_SIMPLE("[[\"~*/:<>?\\\\|][:Cc:][:Cf:]]"),
+      everywhere_status));
+  illegal_at_ends_.reset(new icu::UnicodeSet(
+      UNICODE_STRING_SIMPLE("[[:WSpace:][.]]"), ends_status));
+  DCHECK(U_SUCCESS(everywhere_status));
+  DCHECK(U_SUCCESS(ends_status));
+
   // Add non-characters. If this becomes a performance bottleneck by
   // any chance, do not add these to |set| and change IsFilenameLegal()
   // to check |ucs4 & 0xFFFEu == 0xFFFEu|, in addiition to calling
-  // containsNone().
-  set->add(0xFDD0, 0xFDEF);
+  // IsAllowedName().
+  illegal_anywhere_->add(0xFDD0, 0xFDEF);
   for (int i = 0; i <= 0x10; ++i) {
     int plane_base = 0x10000 * i;
-    set->add(plane_base + 0xFFFE, plane_base + 0xFFFF);
+    illegal_anywhere_->add(plane_base + 0xFFFE, plane_base + 0xFFFF);
   }
-  set->freeze();
+  illegal_anywhere_->freeze();
+  illegal_at_ends_->freeze();
 }
 
 }  // namespace
 
 bool IsFilenameLegal(const string16& file_name) {
-  return IllegalCharacters::GetInstance()->containsNone(file_name);
+  return IllegalCharacters::GetInstance()->IsAllowedName(file_name);
 }
 
 void ReplaceIllegalCharactersInPath(FilePath::StringType* file_name,
                                     char replace_char) {
-  DCHECK(file_name);
-
-  DCHECK(!(IllegalCharacters::GetInstance()->contains(replace_char)));
-
-  // Remove leading and trailing whitespace.
-  TrimWhitespace(*file_name, TRIM_ALL, file_name);
-
   IllegalCharacters* illegal = IllegalCharacters::GetInstance();
+
+  DCHECK(!(illegal->DisallowedEverywhere(replace_char)));
+  DCHECK(!(illegal->DisallowedLeadingOrTrailing(replace_char)));
+
   int cursor = 0;  // The ICU macros expect an int.
   while (cursor < static_cast<int>(file_name->size())) {
     int char_begin = cursor;
@@ -122,7 +130,9 @@
     NOTREACHED();
 #endif
 
-    if (illegal->contains(code_point)) {
+    if (illegal->DisallowedEverywhere(code_point) ||
+        ((char_begin == 0 || cursor == static_cast<int>(file_name->length())) &&
+         illegal->DisallowedLeadingOrTrailing(code_point))) {
       file_name->replace(char_begin, cursor - char_begin, 1, replace_char);
       // We just made the potentially multi-byte/word char into one that only
       // takes one byte/word, so need to adjust the cursor to point to the next
diff --git a/base/i18n/file_util_icu.h b/base/i18n/file_util_icu.h
index 7dd94cd..6d7f2ec 100644
--- a/base/i18n/file_util_icu.h
+++ b/base/i18n/file_util_icu.h
@@ -18,13 +18,23 @@
 // param has the same restriction as that for ReplaceIllegalCharacters.
 BASE_I18N_EXPORT bool IsFilenameLegal(const string16& file_name);
 
-// Replaces characters in 'file_name' that are illegal for file names with
-// 'replace_char'. 'file_name' must not be a full or relative path, but just the
+// Replaces characters in |file_name| that are illegal for file names with
+// |replace_char|. |file_name| must not be a full or relative path, but just the
 // file name component (since slashes are considered illegal). Any leading or
-// trailing whitespace in 'file_name' is removed.
+// trailing whitespace or periods in |file_name| is also replaced with the
+// |replace_char|.
+//
 // Example:
-//   file_name == "bad:file*name?.txt", changed to: "bad-file-name-.txt" when
-//   'replace_char' is '-'.
+//   "bad:file*name?.txt" will be turned into "bad_file_name_.txt" when
+//   |replace_char| is '_'.
+//
+// Warning: Do not use this function as the sole means of sanitizing a filename.
+//   While the resulting filename itself would be legal, it doesn't necessarily
+//   mean that the file will behave safely. On Windows, certain reserved names
+//   refer to devices rather than files (E.g. LPT1), and some filenames could be
+//   interpreted as shell namespace extensions (E.g. Foo.{<GUID>}).
+//
+// TODO(asanka): Move full filename sanitization logic here.
 BASE_I18N_EXPORT void ReplaceIllegalCharactersInPath(
     FilePath::StringType* file_name,
     char replace_char);
diff --git a/base/i18n/file_util_icu_unittest.cc b/base/i18n/file_util_icu_unittest.cc
index 369345b..8fa7f6a 100644
--- a/base/i18n/file_util_icu_unittest.cc
+++ b/base/i18n/file_util_icu_unittest.cc
@@ -20,24 +20,28 @@
 #if defined(OS_POSIX) && !defined(OS_MACOSX)
 
 // Linux disallows some evil ASCII characters, but passes all non-ASCII.
-static const struct goodbad_pair {
+static const struct GoodBadPairLinux {
   const char* bad_name;
   const char* good_name;
-} kIllegalCharacterCases[] = {
-  {"bad*file:name?.jpg", "bad-file-name-.jpg"},
+} kLinuxIllegalCharacterCases[] = {
+  {"bad*\\/file:name?.jpg", "bad---file-name-.jpg"},
   {"**********::::.txt", "--------------.txt"},
   {"\xe9\xf0zzzz.\xff", "\xe9\xf0zzzz.\xff"},
+  {" _ ", "-_-"},
+  {".", "-"},
+  {" .( ). ", "-.( ).-"},
+  {"     ", "-   -"},
 };
 
 TEST_F(FileUtilICUTest, ReplaceIllegalCharacersInPathLinuxTest) {
-  for (size_t i = 0; i < arraysize(kIllegalCharacterCases); ++i) {
-    std::string bad_name(kIllegalCharacterCases[i].bad_name);
+  for (size_t i = 0; i < arraysize(kLinuxIllegalCharacterCases); ++i) {
+    std::string bad_name(kLinuxIllegalCharacterCases[i].bad_name);
     ReplaceIllegalCharactersInPath(&bad_name, '-');
-    EXPECT_EQ(kIllegalCharacterCases[i].good_name, bad_name);
+    EXPECT_EQ(kLinuxIllegalCharacterCases[i].good_name, bad_name);
   }
 }
 
-#else
+#endif
 
 // For Mac & Windows, which both do Unicode validation on filenames. These
 // characters are given as wide strings since its more convenient to specify
@@ -46,29 +50,36 @@
   const wchar_t* bad_name;
   const wchar_t* good_name;
 } kIllegalCharacterCases[] = {
-  {L"bad*file:name?.jpg", L"bad-file-name-.jpg"},
-  {L"**********::::.txt", L"--------------.txt"},
-  // We can't use UCNs (universal character names) for C0/C1 characters and
-  // U+007F, but \x escape is interpreted by MSVC and gcc as we intend.
-  {L"bad\x0003\x0091 file\u200E\u200Fname.png", L"bad-- file--name.png"},
-#if defined(OS_WIN)
-  {L"bad*file\\name.jpg", L"bad-file-name.jpg"},
-  {L"\t  bad*file\\name/.jpg ", L"bad-file-name-.jpg"},
-#elif defined(OS_MACOSX)
-  {L"bad*file?name.jpg", L"bad-file-name.jpg"},
-  {L"\t  bad*file?name/.jpg ", L"bad-file-name-.jpg"},
-#endif
-  {L"this_file_name is okay!.mp3", L"this_file_name is okay!.mp3"},
-  {L"\u4E00\uAC00.mp3", L"\u4E00\uAC00.mp3"},
-  {L"\u0635\u200C\u0644.mp3", L"\u0635\u200C\u0644.mp3"},
-  {L"\U00010330\U00010331.mp3", L"\U00010330\U00010331.mp3"},
-  // Unassigned codepoints are ok.
-  {L"\u0378\U00040001.mp3", L"\u0378\U00040001.mp3"},
-  // Non-characters are not allowed.
-  {L"bad\uFFFFfile\U0010FFFEname.jpg ", L"bad-file-name.jpg"},
-  {L"bad\uFDD0file\uFDEFname.jpg ", L"bad-file-name.jpg"},
+    {L"bad*file:name?.jpg", L"bad-file-name-.jpg"},
+    {L"**********::::.txt", L"--------------.txt"},
+    // We can't use UCNs (universal character names) for C0/C1 characters and
+    // U+007F, but \x escape is interpreted by MSVC and gcc as we intend.
+    {L"bad\x0003\x0091 file\u200E\u200Fname.png", L"bad-- file--name.png"},
+    {L"bad*file\\?name.jpg", L"bad-file--name.jpg"},
+    {L"\t  bad*file\\name/.jpg", L"-  bad-file-name-.jpg"},
+    {L"this_file_name is okay!.mp3", L"this_file_name is okay!.mp3"},
+    {L"\u4E00\uAC00.mp3", L"\u4E00\uAC00.mp3"},
+    {L"\u0635\u200C\u0644.mp3", L"\u0635-\u0644.mp3"},
+    {L"\U00010330\U00010331.mp3", L"\U00010330\U00010331.mp3"},
+    // Unassigned codepoints are ok.
+    {L"\u0378\U00040001.mp3", L"\u0378\U00040001.mp3"},
+    // Non-characters are not allowed.
+    {L"bad\uFFFFfile\U0010FFFEname.jpg", L"bad-file-name.jpg"},
+    {L"bad\uFDD0file\uFDEFname.jpg", L"bad-file-name.jpg"},
+    // CVE-2014-9390
+    {L"(\u200C.\u200D.\u200E.\u200F.\u202A.\u202B.\u202C.\u202D.\u202E.\u206A."
+     L"\u206B.\u206C.\u206D.\u206F.\uFEFF)",
+     L"(-.-.-.-.-.-.-.-.-.-.-.-.-.-.-)"},
+    {L"config~1", L"config-1"},
+    {L" _ ", L"-_-"},
+    {L" ", L"-"},
+    {L"\u2008.(\u2007).\u3000", L"-.(\u2007).-"},
+    {L"     ", L"-   -"},
+    {L".    ", L"-   -"}
 };
 
+#if defined(OS_WIN) || defined(OS_MACOSX)
+
 TEST_F(FileUtilICUTest, ReplaceIllegalCharactersInPathTest) {
   for (size_t i = 0; i < arraysize(kIllegalCharacterCases); ++i) {
 #if defined(OS_WIN)
@@ -85,6 +96,19 @@
 
 #endif
 
+TEST_F(FileUtilICUTest, IsFilenameLegalTest) {
+  EXPECT_TRUE(IsFilenameLegal(string16()));
+
+  for (const auto& test_case : kIllegalCharacterCases) {
+    string16 bad_name = WideToUTF16(test_case.bad_name);
+    string16 good_name = WideToUTF16(test_case.good_name);
+
+    EXPECT_TRUE(IsFilenameLegal(good_name)) << good_name;
+    if (good_name != bad_name)
+      EXPECT_FALSE(IsFilenameLegal(bad_name)) << bad_name;
+  }
+}
+
 #if defined(OS_CHROMEOS)
 static const struct normalize_name_encoding_test_cases {
   const char* original_path;
diff --git a/base/i18n/time_formatting_unittest.cc b/base/i18n/time_formatting_unittest.cc
index 03a3aa3..0c2a6e6 100644
--- a/base/i18n/time_formatting_unittest.cc
+++ b/base/i18n/time_formatting_unittest.cc
@@ -58,12 +58,7 @@
 
   Time time(Time::FromLocalExploded(kTestDateTimeExploded));
   string16 clock24h(ASCIIToUTF16("15:42"));
-#if U_ICU_VERSION_MAJOR_NUM >= 50
   string16 clock12h_pm(ASCIIToUTF16("3:42 pm"));
-#else
-  // TODO(phajdan.jr): Clean up after bundled ICU gets updated to 50.
-  string16 clock12h_pm(ASCIIToUTF16("3:42 PM"));
-#endif
   string16 clock12h(ASCIIToUTF16("3:42"));
 
   // The default is 24h clock.
@@ -132,23 +127,11 @@
   EXPECT_EQ(ASCIIToUTF16("Apr 30, 2011"), TimeFormatShortDate(time));
   EXPECT_EQ(ASCIIToUTF16("4/30/11"), TimeFormatShortDateNumeric(time));
 
-#if U_ICU_VERSION_MAJOR_NUM >= 50
   EXPECT_EQ(ASCIIToUTF16("4/30/11, 3:42:07 PM"),
             TimeFormatShortDateAndTime(time));
-#else
-  // TODO(phajdan.jr): Clean up after bundled ICU gets updated to 50.
-  EXPECT_EQ(ASCIIToUTF16("4/30/11 3:42:07 PM"),
-            TimeFormatShortDateAndTime(time));
-#endif
 
-#if U_ICU_VERSION_MAJOR_NUM >= 50
   EXPECT_EQ(ASCIIToUTF16("Saturday, April 30, 2011 at 3:42:07 PM"),
             TimeFormatFriendlyDateAndTime(time));
-#else
-  // TODO(phajdan.jr): Clean up after bundled ICU gets updated to 50.
-  EXPECT_EQ(ASCIIToUTF16("Saturday, April 30, 2011 3:42:07 PM"),
-            TimeFormatFriendlyDateAndTime(time));
-#endif
 
   EXPECT_EQ(ASCIIToUTF16("Saturday, April 30, 2011"),
             TimeFormatFriendlyDate(time));
diff --git a/base/json/json_file_value_serializer.cc b/base/json/json_file_value_serializer.cc
index d60f800..71033f6 100644
--- a/base/json/json_file_value_serializer.cc
+++ b/base/json/json_file_value_serializer.cc
@@ -15,6 +15,16 @@
 const char JSONFileValueSerializer::kFileLocked[] = "File locked.";
 const char JSONFileValueSerializer::kNoSuchFile[] = "File doesn't exist.";
 
+JSONFileValueSerializer::JSONFileValueSerializer(
+    const base::FilePath& json_file_path)
+    : json_file_path_(json_file_path),
+      allow_trailing_comma_(false),
+      last_read_size_(0U) {
+}
+
+JSONFileValueSerializer::~JSONFileValueSerializer() {
+}
+
 bool JSONFileValueSerializer::Serialize(const base::Value& root) {
   return SerializeInternal(root, false);
 }
@@ -59,6 +69,8 @@
     else
       return JSON_CANNOT_READ_FILE;
   }
+
+  last_read_size_ = json_string->size();
   return JSON_NO_ERROR;
 }
 
diff --git a/base/json/json_file_value_serializer.h b/base/json/json_file_value_serializer.h
index f0f556c..6cfcbe8 100644
--- a/base/json/json_file_value_serializer.h
+++ b/base/json/json_file_value_serializer.h
@@ -14,15 +14,13 @@
 
 class BASE_EXPORT JSONFileValueSerializer : public base::ValueSerializer {
  public:
-  // json_file_patch is the path of a file that will be source of the
+  // |json_file_path_| is the path of a file that will be source of the
   // deserialization or the destination of the serialization.
   // When deserializing, the file should exist, but when serializing, the
   // serializer will attempt to create the file at the specified location.
-  explicit JSONFileValueSerializer(const base::FilePath& json_file_path)
-    : json_file_path_(json_file_path),
-      allow_trailing_comma_(false) {}
+  explicit JSONFileValueSerializer(const base::FilePath& json_file_path);
 
-  ~JSONFileValueSerializer() override {}
+  ~JSONFileValueSerializer() override;
 
   // DO NOT USE except in unit tests to verify the file was written properly.
   // We should never serialize directly to a file since this will block the
@@ -71,11 +69,16 @@
     allow_trailing_comma_ = new_value;
   }
 
+  // Returns the syze (in bytes) of JSON string read from disk in the last
+  // successful |Deserialize()| call.
+  size_t get_last_read_size() const { return last_read_size_; }
+
  private:
   bool SerializeInternal(const base::Value& root, bool omit_binary_values);
 
-  base::FilePath json_file_path_;
+  const base::FilePath json_file_path_;
   bool allow_trailing_comma_;
+  size_t last_read_size_;
 
   // A wrapper for ReadFileToString which returns a non-zero JsonFileError if
   // there were file errors.
diff --git a/base/json/json_parser.cc b/base/json/json_parser.cc
index 6a25bc7..d42b1a3 100644
--- a/base/json/json_parser.cc
+++ b/base/json/json_parser.cc
@@ -428,7 +428,7 @@
   if (next_char == '/') {
     // Single line comment, read to newline.
     while (CanConsume(1)) {
-      char next_char = *NextChar();
+      next_char = *NextChar();
       if (next_char == '\n' || next_char == '\r')
         return true;
     }
diff --git a/base/logging.cc b/base/logging.cc
index 5d65fa5..c7a8881 100644
--- a/base/logging.cc
+++ b/base/logging.cc
@@ -164,13 +164,12 @@
   wchar_t module_name[MAX_PATH];
   GetModuleFileName(NULL, module_name, MAX_PATH);
 
-  PathString log_file = module_name;
-  PathString::size_type last_backslash =
-      log_file.rfind('\\', log_file.size());
+  PathString log_name = module_name;
+  PathString::size_type last_backslash = log_name.rfind('\\', log_name.size());
   if (last_backslash != PathString::npos)
-    log_file.erase(last_backslash + 1);
-  log_file += L"debug.log";
-  return log_file;
+    log_name.erase(last_backslash + 1);
+  log_name += L"debug.log";
+  return log_name;
 #elif defined(OS_POSIX)
   // On other platforms we just use the current directory.
   return PathString("debug.log");
diff --git a/base/memory/discardable_memory_manager.cc b/base/memory/discardable_memory_manager.cc
index faf583b..09e63e3 100644
--- a/base/memory/discardable_memory_manager.cc
+++ b/base/memory/discardable_memory_manager.cc
@@ -9,9 +9,9 @@
 #include "base/containers/hash_tables.h"
 #include "base/containers/mru_cache.h"
 #include "base/debug/crash_logging.h"
-#include "base/debug/trace_event.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/synchronization/lock.h"
+#include "base/trace_event/trace_event.h"
 
 namespace base {
 namespace internal {
diff --git a/base/memory/memory_pressure_listener.cc b/base/memory/memory_pressure_listener.cc
index d51d918..d808502 100644
--- a/base/memory/memory_pressure_listener.cc
+++ b/base/memory/memory_pressure_listener.cc
@@ -4,9 +4,9 @@
 
 #include "base/memory/memory_pressure_listener.h"
 
-#include "base/debug/trace_event.h"
 #include "base/lazy_instance.h"
 #include "base/observer_list_threadsafe.h"
+#include "base/trace_event/trace_event.h"
 
 namespace {
 
diff --git a/base/message_loop/message_pump_win.cc b/base/message_loop/message_pump_win.cc
index 75702ab..5ef3a50 100644
--- a/base/message_loop/message_pump_win.cc
+++ b/base/message_loop/message_pump_win.cc
@@ -7,12 +7,12 @@
 #include <limits>
 #include <math.h>
 
-#include "base/debug/trace_event.h"
 #include "base/message_loop/message_loop.h"
 #include "base/metrics/histogram.h"
 #include "base/process/memory.h"
 #include "base/profiler/scoped_tracker.h"
 #include "base/strings/stringprintf.h"
+#include "base/trace_event/trace_event.h"
 #include "base/win/wrapped_window_proc.h"
 
 namespace base {
@@ -165,9 +165,9 @@
 LRESULT CALLBACK MessagePumpForUI::WndProcThunk(
     HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) {
   // TODO(vadimt): Remove ScopedTracker below once crbug.com/440919 is fixed.
-  tracked_objects::ScopedTracker tracking_profile(
+  tracked_objects::ScopedTracker tracking_profile1(
       FROM_HERE_WITH_EXPLICIT_FUNCTION(
-          "440919 MessagePumpForUI::WndProcThunk"));
+          "440919 MessagePumpForUI::WndProcThunk1"));
 
   switch (message) {
     case kMsgHaveWork:
@@ -177,6 +177,12 @@
       reinterpret_cast<MessagePumpForUI*>(wparam)->HandleTimerMessage();
       break;
   }
+
+  // TODO(vadimt): Remove ScopedTracker below once crbug.com/440919 is fixed.
+  tracked_objects::ScopedTracker tracking_profile2(
+      FROM_HERE_WITH_EXPLICIT_FUNCTION(
+          "440919 MessagePumpForUI::WndProcThunk2"));
+
   return DefWindowProc(hwnd, message, wparam, lparam);
 }
 
diff --git a/base/metrics/histogram.cc b/base/metrics/histogram.cc
index fe5b6e6..42ced3d 100644
--- a/base/metrics/histogram.cc
+++ b/base/metrics/histogram.cc
@@ -369,7 +369,7 @@
 scoped_ptr<SampleVector> Histogram::SnapshotSampleVector() const {
   scoped_ptr<SampleVector> samples(new SampleVector(bucket_ranges()));
   samples->Add(*samples_);
-  return samples;
+  return samples.Pass();
 }
 
 void Histogram::WriteAsciiImpl(bool graph_it,
@@ -495,13 +495,13 @@
   *sum = snapshot->sum();
   size_t index = 0;
   for (size_t i = 0; i < bucket_count(); ++i) {
-    Sample count = snapshot->GetCountAtIndex(i);
-    if (count > 0) {
+    Sample count_at_index = snapshot->GetCountAtIndex(i);
+    if (count_at_index > 0) {
       scoped_ptr<DictionaryValue> bucket_value(new DictionaryValue());
       bucket_value->SetInteger("low", ranges(i));
       if (i != bucket_count() - 1)
         bucket_value->SetInteger("high", ranges(i + 1));
-      bucket_value->SetInteger("count", count);
+      bucket_value->SetInteger("count", count_at_index);
       buckets->Set(index, bucket_value.release());
       ++index;
     }
diff --git a/base/prefs/json_pref_store.cc b/base/prefs/json_pref_store.cc
index e35ed29..c52a95c 100644
--- a/base/prefs/json_pref_store.cc
+++ b/base/prefs/json_pref_store.cc
@@ -91,6 +91,22 @@
   return PersistentPrefStore::PREF_READ_ERROR_NONE;
 }
 
+// Records a sample for |size| in the Settings.JsonDataReadSizeKilobytes
+// histogram suffixed with the base name of the JSON file under |path|.
+void RecordJsonDataSizeHistogram(const base::FilePath& path, size_t size) {
+  std::string spaceless_basename;
+  base::ReplaceChars(path.BaseName().MaybeAsASCII(), " ", "_",
+                     &spaceless_basename);
+
+  // The histogram below is an expansion of the UMA_HISTOGRAM_CUSTOM_COUNTS
+  // macro adapted to allow for a dynamically suffixed histogram name.
+  // Note: The factory creates and owns the histogram.
+  base::HistogramBase* histogram = base::Histogram::FactoryGet(
+      "Settings.JsonDataReadSizeKilobytes." + spaceless_basename, 1, 10000, 50,
+      base::HistogramBase::kUmaTargetedHistogramFlag);
+  histogram->Add(static_cast<int>(size) / 1024);
+}
+
 scoped_ptr<JsonPrefStore::ReadResult> ReadPrefsFromDisk(
     const base::FilePath& path,
     const base::FilePath& alternate_path) {
@@ -108,6 +124,10 @@
   read_result->error =
       HandleReadErrors(read_result->value.get(), path, error_code, error_msg);
   read_result->no_dir = !base::PathExists(path.DirName());
+
+  if (read_result->error == PersistentPrefStore::PREF_READ_ERROR_NONE)
+    RecordJsonDataSizeHistogram(path, serializer.get_last_read_size());
+
   return read_result.Pass();
 }
 
@@ -379,27 +399,7 @@
 
   JSONStringValueSerializer serializer(output);
   serializer.set_pretty_print(true);
-  bool result = serializer.Serialize(*prefs_);
-
-  if (result) {
-    std::string spaceless_basename;
-    base::ReplaceChars(path_.BaseName().MaybeAsASCII(), " ", "_",
-                       &spaceless_basename);
-
-    // The histogram below is an expansion of the UMA_HISTOGRAM_COUNTS_10000
-    // macro adapted to allow for a dynamically suffixed histogram name.
-    // Note: The factory creates and owns the histogram.
-    base::HistogramBase* histogram =
-        base::LinearHistogram::FactoryGet(
-            "Settings.JsonDataSizeKilobytes." + spaceless_basename,
-            1,
-            10000,
-            50,
-            base::HistogramBase::kUmaTargetedHistogramFlag);
-    histogram->Add(static_cast<int>(output->size()) / 1024);
-  }
-
-  return result;
+  return serializer.Serialize(*prefs_);
 }
 
 void JsonPrefStore::FinalizeFileRead(bool initialization_successful,
diff --git a/base/process/launch.h b/base/process/launch.h
index de1bc0a..775e65c 100644
--- a/base/process/launch.h
+++ b/base/process/launch.h
@@ -144,6 +144,9 @@
 #endif  // defined(OS_LINUX)
 
 #if defined(OS_POSIX)
+  // If not empty, change to this directory before execing the new process.
+  base::FilePath current_directory;
+
   // If non-null, a delegate to be run immediately prior to executing the new
   // program in the child process.
   //
diff --git a/base/process/launch_posix.cc b/base/process/launch_posix.cc
index ce93d50..203b7c8 100644
--- a/base/process/launch_posix.cc
+++ b/base/process/launch_posix.cc
@@ -347,7 +347,12 @@
   fd_shuffle1.reserve(fd_shuffle_size);
   fd_shuffle2.reserve(fd_shuffle_size);
 
-  scoped_ptr<char*[]> argv_cstr(new char*[argv.size() + 1]);
+  scoped_ptr<char* []> argv_cstr(new char* [argv.size() + 1]);
+  for (size_t i = 0; i < argv.size(); i++) {
+    argv_cstr[i] = const_cast<char*>(argv[i].c_str());
+  }
+  argv_cstr[argv.size()] = NULL;
+
   scoped_ptr<char*[]> new_environ;
   char* const empty_environ = NULL;
   char* const* old_environ = GetEnvironment();
@@ -360,6 +365,11 @@
   sigfillset(&full_sigset);
   const sigset_t orig_sigmask = SetSignalMask(full_sigset);
 
+  const char* current_directory = nullptr;
+  if (!options.current_directory.empty()) {
+    current_directory = options.current_directory.value().c_str();
+  }
+
   pid_t pid;
 #if defined(OS_LINUX)
   if (options.clone_flags) {
@@ -515,15 +525,14 @@
     }
 #endif
 
-#if defined(OS_POSIX)
+    if (current_directory != nullptr) {
+      RAW_CHECK(chdir(current_directory) == 0);
+    }
+
     if (options.pre_exec_delegate != nullptr) {
       options.pre_exec_delegate->RunAsyncSafe();
     }
-#endif
 
-    for (size_t i = 0; i < argv.size(); i++)
-      argv_cstr[i] = const_cast<char*>(argv[i].c_str());
-    argv_cstr[argv.size()] = NULL;
     execvp(argv_cstr[0], argv_cstr.get());
 
     RAW_LOG(ERROR, "LaunchProcess: failed to execvp:");
diff --git a/base/process/memory_mac.mm b/base/process/memory_mac.mm
index e59e63f..0f0414b 100644
--- a/base/process/memory_mac.mm
+++ b/base/process/memory_mac.mm
@@ -4,12 +4,6 @@
 
 #include "base/process/memory.h"
 
-// AddressSanitizer handles heap corruption, and on 64 bit Macs, the malloc
-// system automatically abort()s on heap corruption.
-#if !defined(ADDRESS_SANITIZER) && ARCH_CPU_32_BITS
-#define HANDLE_MEMORY_CORRUPTION_MANUALLY
-#endif
-
 #include <CoreFoundation/CoreFoundation.h>
 #include <errno.h>
 #include <mach/mach.h>
@@ -27,170 +21,12 @@
 #include "third_party/apple_apsl/CFBase.h"
 #include "third_party/apple_apsl/malloc.h"
 
-#if defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
-#include <dlfcn.h>
-#include <mach-o/nlist.h>
-
-#include "base/threading/thread_local.h"
-#include "third_party/mach_override/mach_override.h"
-#endif  // defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
-
 namespace base {
 
-// These are helpers for EnableTerminationOnHeapCorruption, which is a no-op
-// on 64 bit Macs.
-#if defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
-namespace {
-
-// Finds the library path for malloc() and thus the libC part of libSystem,
-// which in Lion is in a separate image.
-const char* LookUpLibCPath() {
-  const void* addr = reinterpret_cast<void*>(&malloc);
-
-  Dl_info info;
-  if (dladdr(addr, &info))
-    return info.dli_fname;
-
-  DLOG(WARNING) << "Could not find image path for malloc()";
-  return NULL;
-}
-
-typedef void(*malloc_error_break_t)(void);
-malloc_error_break_t g_original_malloc_error_break = NULL;
-
-// Returns the function pointer for malloc_error_break. This symbol is declared
-// as __private_extern__ and cannot be dlsym()ed. Instead, use nlist() to
-// get it.
-malloc_error_break_t LookUpMallocErrorBreak() {
-  const char* lib_c_path = LookUpLibCPath();
-  if (!lib_c_path)
-    return NULL;
-
-  // Only need to look up two symbols, but nlist() requires a NULL-terminated
-  // array and takes no count.
-  struct nlist nl[3];
-  bzero(&nl, sizeof(nl));
-
-  // The symbol to find.
-  nl[0].n_un.n_name = const_cast<char*>("_malloc_error_break");
-
-  // A reference symbol by which the address of the desired symbol will be
-  // calculated.
-  nl[1].n_un.n_name = const_cast<char*>("_malloc");
-
-  int rv = nlist(lib_c_path, nl);
-  if (rv != 0 || nl[0].n_type == N_UNDF || nl[1].n_type == N_UNDF) {
-    return NULL;
-  }
-
-  // nlist() returns addresses as offsets in the image, not the instruction
-  // pointer in memory. Use the known in-memory address of malloc()
-  // to compute the offset for malloc_error_break().
-  uintptr_t reference_addr = reinterpret_cast<uintptr_t>(&malloc);
-  reference_addr -= nl[1].n_value;
-  reference_addr += nl[0].n_value;
-
-  return reinterpret_cast<malloc_error_break_t>(reference_addr);
-}
-
-// Combines ThreadLocalBoolean with AutoReset.  It would be convenient
-// to compose ThreadLocalPointer<bool> with base::AutoReset<bool>, but that
-// would require allocating some storage for the bool.
-class ThreadLocalBooleanAutoReset {
- public:
-  ThreadLocalBooleanAutoReset(ThreadLocalBoolean* tlb, bool new_value)
-      : scoped_tlb_(tlb),
-        original_value_(tlb->Get()) {
-    scoped_tlb_->Set(new_value);
-  }
-  ~ThreadLocalBooleanAutoReset() {
-    scoped_tlb_->Set(original_value_);
-  }
-
- private:
-  ThreadLocalBoolean* scoped_tlb_;
-  bool original_value_;
-
-  DISALLOW_COPY_AND_ASSIGN(ThreadLocalBooleanAutoReset);
-};
-
-base::LazyInstance<ThreadLocalBoolean>::Leaky
-    g_unchecked_alloc = LAZY_INSTANCE_INITIALIZER;
-
-// NOTE(shess): This is called when the malloc library noticed that the heap
-// is fubar.  Avoid calls which will re-enter the malloc library.
-void CrMallocErrorBreak() {
-  g_original_malloc_error_break();
-
-  // Out of memory is certainly not heap corruption, and not necessarily
-  // something for which the process should be terminated. Leave that decision
-  // to the OOM killer.
-  if (errno == ENOMEM)
-    return;
-
-  // The malloc library attempts to log to ASL (syslog) before calling this
-  // code, which fails accessing a Unix-domain socket when sandboxed.  The
-  // failed socket results in writing to a -1 fd, leaving EBADF in errno.  If
-  // UncheckedMalloc() is on the stack, for large allocations (15k and up) only
-  // an OOM failure leads here.  Smaller allocations could also arrive here due
-  // to freelist corruption, but there is no way to distinguish that from OOM at
-  // this point.
-  //
-  // NOTE(shess): I hypothesize that EPERM case in 10.9 is the same root cause
-  // as EBADF.  Unfortunately, 10.9's opensource releases don't include malloc
-  // source code at this time.
-  // <http://crbug.com/312234>
-  if ((errno == EBADF || errno == EPERM) && g_unchecked_alloc.Get().Get())
-    return;
-
-  // A unit test checks this error message, so it needs to be in release builds.
-  char buf[1024] =
-      "Terminating process due to a potential for future heap corruption: "
-      "errno=";
-  char errnobuf[] = {
-    '0' + ((errno / 100) % 10),
-    '0' + ((errno / 10) % 10),
-    '0' + (errno % 10),
-    '\000'
-  };
-  COMPILE_ASSERT(ELAST <= 999, errno_too_large_to_encode);
-  strlcat(buf, errnobuf, sizeof(buf));
-  RAW_LOG(ERROR, buf);
-
-  // Crash by writing to NULL+errno to allow analyzing errno from
-  // crash dump info (setting a breakpad key would re-enter the malloc
-  // library).  Max documented errno in intro(2) is actually 102, but
-  // it really just needs to be "small" to stay on the right vm page.
-  const int kMaxErrno = 256;
-  char* volatile death_ptr = NULL;
-  death_ptr += std::min(errno, kMaxErrno);
-  *death_ptr = '!';
-}
-
-}  // namespace
-#endif  // defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
-
 void EnableTerminationOnHeapCorruption() {
-#if defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
-  // Only override once, otherwise CrMallocErrorBreak() will recurse
-  // to itself.
-  if (g_original_malloc_error_break)
-    return;
-
-  malloc_error_break_t malloc_error_break = LookUpMallocErrorBreak();
-  if (!malloc_error_break) {
-    DLOG(WARNING) << "Could not find malloc_error_break";
-    return;
-  }
-
-  mach_error_t err = mach_override_ptr(
-     (void*)malloc_error_break,
-     (void*)&CrMallocErrorBreak,
-     (void**)&g_original_malloc_error_break);
-
-  if (err != err_none)
-    DLOG(WARNING) << "Could not override malloc_error_break; error = " << err;
-#endif  // defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
+#if !ARCH_CPU_64_BITS
+  DLOG(WARNING) << "EnableTerminationOnHeapCorruption only works on 64-bit";
+#endif
 }
 
 // ------------------------------------------------------------------------
@@ -293,9 +129,6 @@
 
 void* oom_killer_malloc(struct _malloc_zone_t* zone,
                         size_t size) {
-#if defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
-  ScopedClearErrno clear_errno;
-#endif  // defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
   void* result = g_old_malloc(zone, size);
   if (!result && size)
     debug::BreakDebugger();
@@ -305,9 +138,6 @@
 void* oom_killer_calloc(struct _malloc_zone_t* zone,
                         size_t num_items,
                         size_t size) {
-#if defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
-  ScopedClearErrno clear_errno;
-#endif  // defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
   void* result = g_old_calloc(zone, num_items, size);
   if (!result && num_items && size)
     debug::BreakDebugger();
@@ -316,9 +146,6 @@
 
 void* oom_killer_valloc(struct _malloc_zone_t* zone,
                         size_t size) {
-#if defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
-  ScopedClearErrno clear_errno;
-#endif  // defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
   void* result = g_old_valloc(zone, size);
   if (!result && size)
     debug::BreakDebugger();
@@ -327,18 +154,12 @@
 
 void oom_killer_free(struct _malloc_zone_t* zone,
                      void* ptr) {
-#if defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
-  ScopedClearErrno clear_errno;
-#endif  // defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
   g_old_free(zone, ptr);
 }
 
 void* oom_killer_realloc(struct _malloc_zone_t* zone,
                          void* ptr,
                          size_t size) {
-#if defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
-  ScopedClearErrno clear_errno;
-#endif  // defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
   void* result = g_old_realloc(zone, ptr, size);
   if (!result && size)
     debug::BreakDebugger();
@@ -348,15 +169,12 @@
 void* oom_killer_memalign(struct _malloc_zone_t* zone,
                           size_t alignment,
                           size_t size) {
-#if defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
-  ScopedClearErrno clear_errno;
-#endif  // defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
   void* result = g_old_memalign(zone, alignment, size);
   // Only die if posix_memalign would have returned ENOMEM, since there are
   // other reasons why NULL might be returned (see
   // http://opensource.apple.com/source/Libc/Libc-583/gen/malloc.c ).
-  if (!result && size && alignment >= sizeof(void*)
-      && (alignment & (alignment - 1)) == 0) {
+  if (!result && size && alignment >= sizeof(void*) &&
+      (alignment & (alignment - 1)) == 0) {
     debug::BreakDebugger();
   }
   return result;
@@ -364,9 +182,6 @@
 
 void* oom_killer_malloc_purgeable(struct _malloc_zone_t* zone,
                                   size_t size) {
-#if defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
-  ScopedClearErrno clear_errno;
-#endif  // defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
   void* result = g_old_malloc_purgeable(zone, size);
   if (!result && size)
     debug::BreakDebugger();
@@ -376,9 +191,6 @@
 void* oom_killer_calloc_purgeable(struct _malloc_zone_t* zone,
                                   size_t num_items,
                                   size_t size) {
-#if defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
-  ScopedClearErrno clear_errno;
-#endif  // defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
   void* result = g_old_calloc_purgeable(zone, num_items, size);
   if (!result && num_items && size)
     debug::BreakDebugger();
@@ -387,9 +199,6 @@
 
 void* oom_killer_valloc_purgeable(struct _malloc_zone_t* zone,
                                   size_t size) {
-#if defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
-  ScopedClearErrno clear_errno;
-#endif  // defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
   void* result = g_old_valloc_purgeable(zone, size);
   if (!result && size)
     debug::BreakDebugger();
@@ -398,18 +207,12 @@
 
 void oom_killer_free_purgeable(struct _malloc_zone_t* zone,
                                void* ptr) {
-#if defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
-  ScopedClearErrno clear_errno;
-#endif  // defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
   g_old_free_purgeable(zone, ptr);
 }
 
 void* oom_killer_realloc_purgeable(struct _malloc_zone_t* zone,
                                    void* ptr,
                                    size_t size) {
-#if defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
-  ScopedClearErrno clear_errno;
-#endif  // defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
   void* result = g_old_realloc_purgeable(zone, ptr, size);
   if (!result && size)
     debug::BreakDebugger();
@@ -419,9 +222,6 @@
 void* oom_killer_memalign_purgeable(struct _malloc_zone_t* zone,
                                     size_t alignment,
                                     size_t size) {
-#if defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
-  ScopedClearErrno clear_errno;
-#endif  // defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
   void* result = g_old_memalign_purgeable(zone, alignment, size);
   // Only die if posix_memalign would have returned ENOMEM, since there are
   // other reasons why NULL might be returned (see
@@ -521,10 +321,6 @@
   *result = malloc(size);
 #else
   if (g_old_malloc) {
-#if defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
-    ScopedClearErrno clear_errno;
-    ThreadLocalBooleanAutoReset flag(g_unchecked_alloc.Pointer(), true);
-#endif  // defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
     *result = g_old_malloc(malloc_default_zone(), size);
   } else {
     *result = malloc(size);
@@ -539,10 +335,6 @@
   *result = calloc(num_items, size);
 #else
   if (g_old_calloc) {
-#if defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
-    ScopedClearErrno clear_errno;
-    ThreadLocalBooleanAutoReset flag(g_unchecked_alloc.Pointer(), true);
-#endif  // defined(HANDLE_MEMORY_CORRUPTION_MANUALLY)
     *result = g_old_calloc(malloc_default_zone(), num_items, size);
   } else {
     *result = calloc(num_items, size);
diff --git a/base/process/memory_unittest.cc b/base/process/memory_unittest.cc
index 86a8091..5904de2 100644
--- a/base/process/memory_unittest.cc
+++ b/base/process/memory_unittest.cc
@@ -150,10 +150,8 @@
   ASSERT_DEATH(free(buf), "attempting free on address which "
       "was not malloc\\(\\)-ed");
 #else
-  ASSERT_DEATH(free(buf), "being freed.*\\n?\\.*"
-      "\\*\\*\\* set a breakpoint in malloc_error_break to debug.*\\n?.*"
-      "Terminating process due to a potential for future heap corruption");
-#endif  // ARCH_CPU_64_BITS || defined(ADDRESS_SANITIZER)
+  ADD_FAILURE() << "This test is not supported in this build configuration.";
+#endif
 }
 
 #endif  // defined(OS_MACOSX)
diff --git a/base/process/process_util_unittest.cc b/base/process/process_util_unittest.cc
index 33cf00f..5ed15d2 100644
--- a/base/process/process_util_unittest.cc
+++ b/base/process/process_util_unittest.cc
@@ -1023,4 +1023,42 @@
   ASSERT_TRUE(WIFEXITED(status));
   EXPECT_EQ(kSuccess, WEXITSTATUS(status));
 }
+
+MULTIPROCESS_TEST_MAIN(CheckCwdProcess) {
+  base::FilePath expected;
+  CHECK(base::GetTempDir(&expected));
+  base::FilePath actual;
+  CHECK(base::GetCurrentDirectory(&actual));
+  CHECK(actual == expected);
+  return kSuccess;
+}
+
+TEST_F(ProcessUtilTest, CurrentDirectory) {
+  // TODO(rickyz): Add support for passing arguments to multiprocess children,
+  // then create a special directory for this test.
+  base::FilePath tmp_dir;
+  ASSERT_TRUE(base::GetTempDir(&tmp_dir));
+
+  base::LaunchOptions options;
+  options.current_directory = tmp_dir;
+
+  base::Process process(SpawnChildWithOptions("CheckCwdProcess", options));
+  ASSERT_TRUE(process.IsValid());
+
+  int exit_code = 42;
+  EXPECT_TRUE(process.WaitForExit(&exit_code));
+  EXPECT_EQ(kSuccess, exit_code);
+}
+
+TEST_F(ProcessUtilTest, InvalidCurrentDirectory) {
+  base::LaunchOptions options;
+  options.current_directory = base::FilePath("/dev/null");
+
+  base::Process process(SpawnChildWithOptions("SimpleChildProcess", options));
+  ASSERT_TRUE(process.IsValid());
+
+  int exit_code = kSuccess;
+  EXPECT_TRUE(process.WaitForExit(&exit_code));
+  EXPECT_NE(kSuccess, exit_code);
+}
 #endif
diff --git a/base/strings/safe_sprintf.cc b/base/strings/safe_sprintf.cc
index 5b57563..b1fcf45 100644
--- a/base/strings/safe_sprintf.cc
+++ b/base/strings/safe_sprintf.cc
@@ -510,11 +510,11 @@
         buffer.Pad(' ', padding, 1);
 
         // Convert the argument to an ASCII character and output it.
-        char ch = static_cast<char>(arg.integer.i);
-        if (!ch) {
+        char as_char = static_cast<char>(arg.integer.i);
+        if (!as_char) {
           goto end_of_output_buffer;
         }
-        buffer.Out(ch);
+        buffer.Out(as_char);
         break; }
       case 'd':    // Output a possibly signed decimal value.
       case 'o':    // Output an unsigned octal value.
diff --git a/base/test/android/javatests/src/org/chromium/base/test/BaseActivityInstrumentationTestCase.java b/base/test/android/javatests/src/org/chromium/base/test/BaseActivityInstrumentationTestCase.java
new file mode 100644
index 0000000..53dee4a
--- /dev/null
+++ b/base/test/android/javatests/src/org/chromium/base/test/BaseActivityInstrumentationTestCase.java
@@ -0,0 +1,118 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.base.test;
+
+import android.app.Activity;
+import android.content.Context;
+import android.os.SystemClock;
+import android.test.ActivityInstrumentationTestCase2;
+import android.util.Log;
+
+import org.chromium.base.BaseChromiumApplication;
+import org.chromium.base.CommandLine;
+import org.chromium.base.test.util.CommandLineFlags;
+
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Base class for all Activity-based Instrumentation tests.
+ *
+ * @param <T> The Activity type.
+ */
+public class BaseActivityInstrumentationTestCase<T extends Activity>
+        extends ActivityInstrumentationTestCase2<T> {
+
+    private static final String TAG = "BaseActivityInstrumentationTestCase";
+
+    private static final int SLEEP_INTERVAL = 50; // milliseconds
+    private static final int WAIT_DURATION = 5000; // milliseconds
+
+    /**
+     * Creates a instance for running tests against an Activity of the given class.
+     *
+     * @param activityClass The type of activity that will be tested.
+     */
+    public BaseActivityInstrumentationTestCase(Class<T> activityClass) {
+        super(activityClass);
+    }
+
+    /**
+     * Sets up the CommandLine with the appropriate flags.
+     *
+     * This will add the difference of the sets of flags specified by {@link CommandLineFlags.Add}
+     * and {@link CommandLineFlags.Remove} to the {@link org.chromium.base.CommandLine}. Note that
+     * trying to remove a flag set externally, i.e. by the command-line flags file, will not work.
+     */
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        CommandLine.reset();
+        Context targetContext = getTargetContext();
+        assertNotNull("Unable to get a non-null target context.", targetContext);
+
+        BaseChromiumApplication.initCommandLine(targetContext);
+        Set<String> flags = getFlags(getClass().getMethod(getName()));
+        for (String flag : flags) {
+            CommandLine.getInstance().appendSwitch(flag);
+        }
+    }
+
+    /**
+     * Gets the target context.
+     *
+     * On older versions of Android, getTargetContext() may initially return null, so we have to
+     * wait for it to become available.
+     *
+     * @return The target {@link android.content.Context} if available; null otherwise.
+     */
+    private Context getTargetContext() {
+        Context targetContext = getInstrumentation().getTargetContext();
+        try {
+            long startTime = SystemClock.uptimeMillis();
+            // TODO(jbudorick): Convert this to CriteriaHelper once that moves to base/.
+            while (targetContext == null
+                    && SystemClock.uptimeMillis() - startTime < WAIT_DURATION) {
+                Thread.sleep(SLEEP_INTERVAL);
+                targetContext = getInstrumentation().getTargetContext();
+            }
+        } catch (InterruptedException e) {
+            Log.e(TAG, "Interrupted while attempting to initialize the command line.");
+        }
+        return targetContext;
+    }
+
+    private static Set<String> getFlags(AnnotatedElement element) {
+        AnnotatedElement parent = (element instanceof Method)
+                ? ((Method) element).getDeclaringClass()
+                : ((Class) element).getSuperclass();
+        Set<String> flags = (parent == null) ? new HashSet<String>() : getFlags(parent);
+
+        if (element.isAnnotationPresent(CommandLineFlags.Add.class)) {
+            flags.addAll(
+                    Arrays.asList(element.getAnnotation(CommandLineFlags.Add.class).value()));
+        }
+
+        if (element.isAnnotationPresent(CommandLineFlags.Remove.class)) {
+            List<String> flagsToRemove =
+                    Arrays.asList(element.getAnnotation(CommandLineFlags.Remove.class).value());
+            for (String flagToRemove : flagsToRemove) {
+                // If your test fails here, you have tried to remove a command-line flag via
+                // CommandLineFlags.Remove that was loaded into CommandLine via something other
+                // than CommandLineFlags.Add (probably the command-line flag file).
+                assertFalse("Unable to remove command-line flag \"" + flagToRemove + "\".",
+                        CommandLine.getInstance().hasSwitch(flagToRemove));
+            }
+            flags.removeAll(flagsToRemove);
+        }
+
+        return flags;
+    }
+}
diff --git a/base/test/android/javatests/src/org/chromium/base/test/util/CommandLineFlags.java b/base/test/android/javatests/src/org/chromium/base/test/util/CommandLineFlags.java
new file mode 100644
index 0000000..2feb83d
--- /dev/null
+++ b/base/test/android/javatests/src/org/chromium/base/test/util/CommandLineFlags.java
@@ -0,0 +1,48 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.base.test.util;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Provides annotations related to command-line flag handling.
+ *
+ * Uses of these annotations on a derived class will take precedence over uses on its base classes,
+ * so a derived class can add a command-line flag that a base class has removed (or vice versa).
+ * Similarly, uses of these annotations on a test method will take precedence over uses on the
+ * containing class.
+ *
+ * Note that this class should never be instantiated.
+ */
+public final class CommandLineFlags {
+
+    /**
+     * Adds command-line flags to the {@link org.chromium.base.CommandLine} for this test.
+     */
+    @Inherited
+    @Retention(RetentionPolicy.RUNTIME)
+    @Target({ElementType.METHOD, ElementType.TYPE})
+    public @interface Add {
+        String[] value();
+    }
+
+    /**
+     * Removes command-line flags from the {@link org.chromium.base.CommandLine} from this test.
+     *
+     * Note that this can only remove flags added via {@link Add} above.
+     */
+    @Inherited
+    @Retention(RetentionPolicy.RUNTIME)
+    @Target({ElementType.METHOD, ElementType.TYPE})
+    public @interface Remove {
+        String[] value();
+    }
+
+    private CommandLineFlags() {}
+}
diff --git a/base/test/launcher/test_launcher_ios.cc b/base/test/launcher/test_launcher_ios.cc
index 7028133..ecd31ae 100644
--- a/base/test/launcher/test_launcher_ios.cc
+++ b/base/test/launcher/test_launcher_ios.cc
@@ -129,6 +129,14 @@
     return dir_exe_.AppendASCII("iossim").value();
   }
 
+  void RelaunchTests(base::TestLauncher* test_launcher,
+                     const std::vector<std::string>& test_names,
+                     int launch_flags) override {
+    // Relaunch all tests in one big batch, since overhead of smaller batches
+    // is too big for serialized runs inside ios simulator.
+    RunUnitTestsBatch(test_launcher, this, test_names, launch_flags);
+  }
+
  private:
   // Directory containing test launcher's executable.
   base::FilePath dir_exe_;
diff --git a/base/test/launcher/unit_test_launcher.cc b/base/test/launcher/unit_test_launcher.cc
index 2a4e748..1b3a162 100644
--- a/base/test/launcher/unit_test_launcher.cc
+++ b/base/test/launcher/unit_test_launcher.cc
@@ -121,6 +121,18 @@
     return std::string();
   }
 
+  void RelaunchTests(TestLauncher* test_launcher,
+                     const std::vector<std::string>& test_names,
+                     int launch_flags) override {
+    // Relaunch requested tests in parallel, but only use single
+    // test per batch for more precise results (crashes, etc).
+    for (const std::string& test_name : test_names) {
+      std::vector<std::string> batch;
+      batch.push_back(test_name);
+      RunUnitTestsBatch(test_launcher, this, batch, launch_flags);
+    }
+  }
+
   DISALLOW_COPY_AND_ASSIGN(DefaultUnitTestPlatformDelegate);
 };
 
@@ -216,230 +228,9 @@
 }
 #endif  // defined(OS_WIN)
 
-}  // namespace
-
-int LaunchUnitTests(int argc,
-                    char** argv,
-                    const RunTestSuiteCallback& run_test_suite) {
-  CommandLine::Init(argc, argv);
-  return LaunchUnitTestsInternal(run_test_suite, SysInfo::NumberOfProcessors(),
-                                 true, Bind(&InitGoogleTestChar, &argc, argv));
-}
-
-int LaunchUnitTestsSerially(int argc,
-                            char** argv,
-                            const RunTestSuiteCallback& run_test_suite) {
-  CommandLine::Init(argc, argv);
-  return LaunchUnitTestsInternal(run_test_suite, 1, true,
-                                 Bind(&InitGoogleTestChar, &argc, argv));
-}
-
-#if defined(OS_WIN)
-int LaunchUnitTests(int argc,
-                    wchar_t** argv,
-                    bool use_job_objects,
-                    const RunTestSuiteCallback& run_test_suite) {
-  // Windows CommandLine::Init ignores argv anyway.
-  CommandLine::Init(argc, NULL);
-  return LaunchUnitTestsInternal(run_test_suite, SysInfo::NumberOfProcessors(),
-                                 use_job_objects,
-                                 Bind(&InitGoogleTestWChar, &argc, argv));
-}
-#endif  // defined(OS_WIN)
-
-UnitTestLauncherDelegate::UnitTestLauncherDelegate(
-    UnitTestPlatformDelegate* platform_delegate,
-    size_t batch_limit,
-    bool use_job_objects)
-    : platform_delegate_(platform_delegate),
-      batch_limit_(batch_limit),
-      use_job_objects_(use_job_objects) {
-}
-
-UnitTestLauncherDelegate::~UnitTestLauncherDelegate() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-}
-
-UnitTestLauncherDelegate::GTestCallbackState::GTestCallbackState() {
-}
-
-UnitTestLauncherDelegate::GTestCallbackState::~GTestCallbackState() {
-}
-
-bool UnitTestLauncherDelegate::GetTests(std::vector<SplitTestName>* output) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  return platform_delegate_->GetTests(output);
-}
-
-bool UnitTestLauncherDelegate::ShouldRunTest(const std::string& test_case_name,
-                                             const std::string& test_name) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-
-  // There is no additional logic to disable specific tests.
-  return true;
-}
-
-size_t UnitTestLauncherDelegate::RunTests(
-    TestLauncher* test_launcher,
-    const std::vector<std::string>& test_names) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-
-  std::vector<std::string> batch;
-  for (size_t i = 0; i < test_names.size(); i++) {
-    batch.push_back(test_names[i]);
-
-    // Use 0 to indicate unlimited batch size.
-    if (batch.size() >= batch_limit_ && batch_limit_ != 0) {
-      RunBatch(test_launcher, batch);
-      batch.clear();
-    }
-  }
-
-  RunBatch(test_launcher, batch);
-
-  return test_names.size();
-}
-
-size_t UnitTestLauncherDelegate::RetryTests(
-    TestLauncher* test_launcher,
-    const std::vector<std::string>& test_names) {
-  MessageLoop::current()->PostTask(
-      FROM_HERE, Bind(&UnitTestLauncherDelegate::RunSerially, Unretained(this),
-                      test_launcher, test_names));
-  return test_names.size();
-}
-
-void UnitTestLauncherDelegate::RunSerially(
-    TestLauncher* test_launcher,
-    const std::vector<std::string>& test_names) {
-  if (test_names.empty())
-    return;
-
-  std::vector<std::string> new_test_names(test_names);
-  std::string test_name(new_test_names.back());
-  new_test_names.pop_back();
-
-  // Create a dedicated temporary directory to store the xml result data
-  // per run to ensure clean state and make it possible to launch multiple
-  // processes in parallel.
-  base::FilePath output_file;
-  CHECK(platform_delegate_->CreateTemporaryFile(&output_file));
-
-  std::vector<std::string> current_test_names;
-  current_test_names.push_back(test_name);
-  CommandLine cmd_line(platform_delegate_->GetCommandLineForChildGTestProcess(
-      current_test_names, output_file));
-
-  GTestCallbackState callback_state;
-  callback_state.test_launcher = test_launcher;
-  callback_state.test_names = current_test_names;
-  callback_state.output_file = output_file;
-
-  test_launcher->LaunchChildGTestProcess(
-      cmd_line,
-      platform_delegate_->GetWrapperForChildGTestProcess(),
-      TestTimeouts::test_launcher_timeout(),
-      use_job_objects_ ? TestLauncher::USE_JOB_OBJECTS : 0,
-      Bind(&UnitTestLauncherDelegate::SerialGTestCallback, Unretained(this),
-           callback_state, new_test_names));
-}
-
-void UnitTestLauncherDelegate::RunBatch(
-    TestLauncher* test_launcher,
-    const std::vector<std::string>& test_names) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-
-  if (test_names.empty())
-    return;
-
-  // Create a dedicated temporary directory to store the xml result data
-  // per run to ensure clean state and make it possible to launch multiple
-  // processes in parallel.
-  base::FilePath output_file;
-  CHECK(platform_delegate_->CreateTemporaryFile(&output_file));
-
-  CommandLine cmd_line(platform_delegate_->GetCommandLineForChildGTestProcess(
-      test_names, output_file));
-
-  // Adjust the timeout depending on how many tests we're running
-  // (note that e.g. the last batch of tests will be smaller).
-  // TODO(phajdan.jr): Consider an adaptive timeout, which can change
-  // depending on how many tests ran and how many remain.
-  // Note: do NOT parse child's stdout to do that, it's known to be
-  // unreliable (e.g. buffering issues can mix up the output).
-  base::TimeDelta timeout =
-      test_names.size() * TestTimeouts::test_launcher_timeout();
-
-  GTestCallbackState callback_state;
-  callback_state.test_launcher = test_launcher;
-  callback_state.test_names = test_names;
-  callback_state.output_file = output_file;
-
-  test_launcher->LaunchChildGTestProcess(
-      cmd_line,
-      platform_delegate_->GetWrapperForChildGTestProcess(),
-      timeout,
-      use_job_objects_ ? TestLauncher::USE_JOB_OBJECTS : 0,
-      Bind(&UnitTestLauncherDelegate::GTestCallback, Unretained(this),
-           callback_state));
-}
-
-void UnitTestLauncherDelegate::GTestCallback(
-    const GTestCallbackState& callback_state,
-    int exit_code,
-    const TimeDelta& elapsed_time,
-    bool was_timeout,
-    const std::string& output) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  std::vector<std::string> tests_to_relaunch;
-  ProcessTestResults(callback_state.test_launcher, callback_state.test_names,
-                     callback_state.output_file, output, exit_code, was_timeout,
-                     &tests_to_relaunch);
-
-  // Relaunch requested tests in parallel, but only use single
-  // test per batch for more precise results (crashes, test passes
-  // but non-zero exit codes etc).
-  for (size_t i = 0; i < tests_to_relaunch.size(); i++) {
-    std::vector<std::string> batch;
-    batch.push_back(tests_to_relaunch[i]);
-    RunBatch(callback_state.test_launcher, batch);
-  }
-
-  // The temporary file's directory is also temporary.
-  DeleteFile(callback_state.output_file.DirName(), true);
-}
-
-void UnitTestLauncherDelegate::SerialGTestCallback(
-    const GTestCallbackState& callback_state,
-    const std::vector<std::string>& test_names,
-    int exit_code,
-    const TimeDelta& elapsed_time,
-    bool was_timeout,
-    const std::string& output) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  std::vector<std::string> tests_to_relaunch;
-  bool called_any_callbacks =
-      ProcessTestResults(callback_state.test_launcher,
-                         callback_state.test_names, callback_state.output_file,
-                         output, exit_code, was_timeout, &tests_to_relaunch);
-
-  // There is only one test, there cannot be other tests to relaunch
-  // due to a crash.
-  DCHECK(tests_to_relaunch.empty());
-
-  // There is only one test, we should have called back with its result.
-  DCHECK(called_any_callbacks);
-
-  // The temporary file's directory is also temporary.
-  DeleteFile(callback_state.output_file.DirName(), true);
-
-  MessageLoop::current()->PostTask(
-      FROM_HERE, Bind(&UnitTestLauncherDelegate::RunSerially, Unretained(this),
-                      callback_state.test_launcher, test_names));
-}
-
-// static
-bool UnitTestLauncherDelegate::ProcessTestResults(
+// Interprets test results and reports to the test launcher. Returns true
+// on success.
+bool ProcessTestResults(
     TestLauncher* test_launcher,
     const std::vector<std::string>& test_names,
     const base::FilePath& output_file,
@@ -523,24 +314,10 @@
     if (!has_non_success_test && exit_code != 0) {
       // This is a bit surprising case: all tests are marked as successful,
       // but the exit code was not zero. This can happen e.g. under memory
-      // tools that report leaks this way.
-
-      if (final_results.size() == 1) {
-        // Easy case. One test only so we know the non-zero exit code
-        // was caused by that one test.
-        final_results[0].status = TestResult::TEST_FAILURE_ON_EXIT;
-      } else {
-        // Harder case. Discard the results and request relaunching all
-        // tests without batching. This will trigger above branch on
-        // relaunch leading to more precise results.
-        LOG(WARNING) << "Not sure which test caused non-zero exit code, "
-                     << "relaunching all of them without batching.";
-
-        for (size_t i = 0; i < final_results.size(); i++)
-          tests_to_relaunch->push_back(final_results[i].full_name);
-
-        return false;
-      }
+      // tools that report leaks this way. Mark all tests as a failure on exit,
+      // and for more precise info they'd need to be retried serially.
+      for (size_t i = 0; i < final_results.size(); i++)
+        final_results[i].status = TestResult::TEST_FAILURE_ON_EXIT;
     }
 
     for (size_t i = 0; i < final_results.size(); i++) {
@@ -574,4 +351,239 @@
   return called_any_callback;
 }
 
+// TODO(phajdan.jr): Pass parameters directly with C++11 variadic templates.
+struct GTestCallbackState {
+  TestLauncher* test_launcher;
+  UnitTestPlatformDelegate* platform_delegate;
+  std::vector<std::string> test_names;
+  int launch_flags;
+  FilePath output_file;
+};
+
+void GTestCallback(
+    const GTestCallbackState& callback_state,
+    int exit_code,
+    const TimeDelta& elapsed_time,
+    bool was_timeout,
+    const std::string& output) {
+  std::vector<std::string> tests_to_relaunch;
+  ProcessTestResults(callback_state.test_launcher, callback_state.test_names,
+                     callback_state.output_file, output, exit_code, was_timeout,
+                     &tests_to_relaunch);
+
+  if (!tests_to_relaunch.empty()) {
+    callback_state.platform_delegate->RelaunchTests(
+        callback_state.test_launcher,
+        tests_to_relaunch,
+        callback_state.launch_flags);
+  }
+
+  // The temporary file's directory is also temporary.
+  DeleteFile(callback_state.output_file.DirName(), true);
+}
+
+void SerialGTestCallback(
+    const GTestCallbackState& callback_state,
+    const std::vector<std::string>& test_names,
+    int exit_code,
+    const TimeDelta& elapsed_time,
+    bool was_timeout,
+    const std::string& output) {
+  std::vector<std::string> tests_to_relaunch;
+  bool called_any_callbacks =
+      ProcessTestResults(callback_state.test_launcher,
+                         callback_state.test_names, callback_state.output_file,
+                         output, exit_code, was_timeout, &tests_to_relaunch);
+
+  // There is only one test, there cannot be other tests to relaunch
+  // due to a crash.
+  DCHECK(tests_to_relaunch.empty());
+
+  // There is only one test, we should have called back with its result.
+  DCHECK(called_any_callbacks);
+
+  // The temporary file's directory is also temporary.
+  DeleteFile(callback_state.output_file.DirName(), true);
+
+  MessageLoop::current()->PostTask(
+      FROM_HERE,
+      Bind(&RunUnitTestsSerially,
+           callback_state.test_launcher,
+           callback_state.platform_delegate,
+           test_names,
+           callback_state.launch_flags));
+}
+
+}  // namespace
+
+int LaunchUnitTests(int argc,
+                    char** argv,
+                    const RunTestSuiteCallback& run_test_suite) {
+  CommandLine::Init(argc, argv);
+  return LaunchUnitTestsInternal(run_test_suite, SysInfo::NumberOfProcessors(),
+                                 true, Bind(&InitGoogleTestChar, &argc, argv));
+}
+
+int LaunchUnitTestsSerially(int argc,
+                            char** argv,
+                            const RunTestSuiteCallback& run_test_suite) {
+  CommandLine::Init(argc, argv);
+  return LaunchUnitTestsInternal(run_test_suite, 1, true,
+                                 Bind(&InitGoogleTestChar, &argc, argv));
+}
+
+#if defined(OS_WIN)
+int LaunchUnitTests(int argc,
+                    wchar_t** argv,
+                    bool use_job_objects,
+                    const RunTestSuiteCallback& run_test_suite) {
+  // Windows CommandLine::Init ignores argv anyway.
+  CommandLine::Init(argc, NULL);
+  return LaunchUnitTestsInternal(run_test_suite, SysInfo::NumberOfProcessors(),
+                                 use_job_objects,
+                                 Bind(&InitGoogleTestWChar, &argc, argv));
+}
+#endif  // defined(OS_WIN)
+
+void RunUnitTestsSerially(
+    TestLauncher* test_launcher,
+    UnitTestPlatformDelegate* platform_delegate,
+    const std::vector<std::string>& test_names,
+    int launch_flags) {
+  if (test_names.empty())
+    return;
+
+  std::vector<std::string> new_test_names(test_names);
+  std::string test_name(new_test_names.back());
+  new_test_names.pop_back();
+
+  // Create a dedicated temporary directory to store the xml result data
+  // per run to ensure clean state and make it possible to launch multiple
+  // processes in parallel.
+  base::FilePath output_file;
+  CHECK(platform_delegate->CreateTemporaryFile(&output_file));
+
+  std::vector<std::string> current_test_names;
+  current_test_names.push_back(test_name);
+  CommandLine cmd_line(platform_delegate->GetCommandLineForChildGTestProcess(
+      current_test_names, output_file));
+
+  GTestCallbackState callback_state;
+  callback_state.test_launcher = test_launcher;
+  callback_state.platform_delegate = platform_delegate;
+  callback_state.test_names = current_test_names;
+  callback_state.launch_flags = launch_flags;
+  callback_state.output_file = output_file;
+
+  test_launcher->LaunchChildGTestProcess(
+      cmd_line,
+      platform_delegate->GetWrapperForChildGTestProcess(),
+      TestTimeouts::test_launcher_timeout(),
+      launch_flags,
+      Bind(&SerialGTestCallback, callback_state, new_test_names));
+}
+
+void RunUnitTestsBatch(
+    TestLauncher* test_launcher,
+    UnitTestPlatformDelegate* platform_delegate,
+    const std::vector<std::string>& test_names,
+    int launch_flags) {
+  if (test_names.empty())
+    return;
+
+  // Create a dedicated temporary directory to store the xml result data
+  // per run to ensure clean state and make it possible to launch multiple
+  // processes in parallel.
+  base::FilePath output_file;
+  CHECK(platform_delegate->CreateTemporaryFile(&output_file));
+
+  CommandLine cmd_line(platform_delegate->GetCommandLineForChildGTestProcess(
+      test_names, output_file));
+
+  // Adjust the timeout depending on how many tests we're running
+  // (note that e.g. the last batch of tests will be smaller).
+  // TODO(phajdan.jr): Consider an adaptive timeout, which can change
+  // depending on how many tests ran and how many remain.
+  // Note: do NOT parse child's stdout to do that, it's known to be
+  // unreliable (e.g. buffering issues can mix up the output).
+  base::TimeDelta timeout =
+      test_names.size() * TestTimeouts::test_launcher_timeout();
+
+  GTestCallbackState callback_state;
+  callback_state.test_launcher = test_launcher;
+  callback_state.platform_delegate = platform_delegate;
+  callback_state.test_names = test_names;
+  callback_state.launch_flags = launch_flags;
+  callback_state.output_file = output_file;
+
+  test_launcher->LaunchChildGTestProcess(
+      cmd_line,
+      platform_delegate->GetWrapperForChildGTestProcess(),
+      timeout,
+      launch_flags,
+      Bind(&GTestCallback, callback_state));
+}
+
+UnitTestLauncherDelegate::UnitTestLauncherDelegate(
+    UnitTestPlatformDelegate* platform_delegate,
+    size_t batch_limit,
+    bool use_job_objects)
+    : platform_delegate_(platform_delegate),
+      batch_limit_(batch_limit),
+      use_job_objects_(use_job_objects) {
+}
+
+UnitTestLauncherDelegate::~UnitTestLauncherDelegate() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+}
+
+bool UnitTestLauncherDelegate::GetTests(std::vector<SplitTestName>* output) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  return platform_delegate_->GetTests(output);
+}
+
+bool UnitTestLauncherDelegate::ShouldRunTest(const std::string& test_case_name,
+                                             const std::string& test_name) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  // There is no additional logic to disable specific tests.
+  return true;
+}
+
+size_t UnitTestLauncherDelegate::RunTests(
+    TestLauncher* test_launcher,
+    const std::vector<std::string>& test_names) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  int launch_flags = use_job_objects_ ? TestLauncher::USE_JOB_OBJECTS : 0;
+
+  std::vector<std::string> batch;
+  for (size_t i = 0; i < test_names.size(); i++) {
+    batch.push_back(test_names[i]);
+
+    // Use 0 to indicate unlimited batch size.
+    if (batch.size() >= batch_limit_ && batch_limit_ != 0) {
+      RunUnitTestsBatch(test_launcher, platform_delegate_, batch, launch_flags);
+      batch.clear();
+    }
+  }
+
+  RunUnitTestsBatch(test_launcher, platform_delegate_, batch, launch_flags);
+
+  return test_names.size();
+}
+
+size_t UnitTestLauncherDelegate::RetryTests(
+    TestLauncher* test_launcher,
+    const std::vector<std::string>& test_names) {
+  MessageLoop::current()->PostTask(
+      FROM_HERE,
+      Bind(&RunUnitTestsSerially,
+           test_launcher,
+           platform_delegate_,
+           test_names,
+           use_job_objects_ ? TestLauncher::USE_JOB_OBJECTS : 0));
+  return test_names.size();
+}
+
 }  // namespace base
diff --git a/base/test/launcher/unit_test_launcher.h b/base/test/launcher/unit_test_launcher.h
index e4997a0..ca00f10 100644
--- a/base/test/launcher/unit_test_launcher.h
+++ b/base/test/launcher/unit_test_launcher.h
@@ -55,10 +55,27 @@
   // no wrapper.
   virtual std::string GetWrapperForChildGTestProcess() = 0;
 
+  // Relaunch tests, e.g. after a crash.
+  virtual void RelaunchTests(TestLauncher* test_launcher,
+                             const std::vector<std::string>& test_names,
+                             int launch_flags) = 0;
+
  protected:
   ~UnitTestPlatformDelegate() {}
 };
 
+// Runs tests serially, each in its own process.
+void RunUnitTestsSerially(TestLauncher* test_launcher,
+                          UnitTestPlatformDelegate* platform_delegate,
+                          const std::vector<std::string>& test_names,
+                          int launch_flags);
+
+// Runs tests in batches (each batch in its own process).
+void RunUnitTestsBatch(TestLauncher* test_launcher,
+                       UnitTestPlatformDelegate* platform_delegate,
+                       const std::vector<std::string>& test_names,
+                       int launch_flags);
+
 // Test launcher delegate for unit tests (mostly to support batching).
 class UnitTestLauncherDelegate : public TestLauncherDelegate {
  public:
@@ -68,15 +85,6 @@
   ~UnitTestLauncherDelegate() override;
 
  private:
-  struct GTestCallbackState {
-    GTestCallbackState();
-    ~GTestCallbackState();
-
-    TestLauncher* test_launcher;
-    std::vector<std::string> test_names;
-    FilePath output_file;
-  };
-
   // TestLauncherDelegate:
   bool GetTests(std::vector<SplitTestName>* output) override;
   bool ShouldRunTest(const std::string& test_case_name,
@@ -86,39 +94,6 @@
   size_t RetryTests(TestLauncher* test_launcher,
                     const std::vector<std::string>& test_names) override;
 
-  // Runs tests serially, each in its own process.
-  void RunSerially(TestLauncher* test_launcher,
-                   const std::vector<std::string>& test_names);
-
-  // Runs tests in batches (each batch in its own process).
-  void RunBatch(TestLauncher* test_launcher,
-                const std::vector<std::string>& test_names);
-
-  // Callback for batched tests.
-  void GTestCallback(const GTestCallbackState& callback_state,
-                     int exit_code,
-                     const TimeDelta& elapsed_time,
-                     bool was_timeout,
-                     const std::string& output);
-
-  // Callback for serialized tests.
-  void SerialGTestCallback(const GTestCallbackState& callback_state,
-                           const std::vector<std::string>& test_names,
-                           int exit_code,
-                           const TimeDelta& elapsed_time,
-                           bool was_timeout,
-                           const std::string& output);
-
-  // Interprets test results and reports to the test launcher. Returns true
-  // on success.
-  static bool ProcessTestResults(TestLauncher* test_launcher,
-                                 const std::vector<std::string>& test_names,
-                                 const base::FilePath& output_file,
-                                 const std::string& output,
-                                 int exit_code,
-                                 bool was_timeout,
-                                 std::vector<std::string>* tests_to_relaunch);
-
   ThreadChecker thread_checker_;
 
   UnitTestPlatformDelegate* platform_delegate_;
diff --git a/base/test/multiprocess_test.cc b/base/test/multiprocess_test.cc
index b95ea98..2cd6d8c 100644
--- a/base/test/multiprocess_test.cc
+++ b/base/test/multiprocess_test.cc
@@ -6,6 +6,8 @@
 
 #include "base/base_switches.h"
 #include "base/command_line.h"
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
 
 namespace base {
 
@@ -26,7 +28,9 @@
 #endif  // !defined(OS_ANDROID)
 
 CommandLine GetMultiProcessTestChildBaseCommandLine() {
-  return *CommandLine::ForCurrentProcess();
+  CommandLine cmd_line = *CommandLine::ForCurrentProcess();
+  cmd_line.SetProgram(MakeAbsoluteFilePath(cmd_line.GetProgram()));
+  return cmd_line;
 }
 
 // MultiProcessTest ------------------------------------------------------------
diff --git a/base/test/test_mock_time_task_runner.cc b/base/test/test_mock_time_task_runner.cc
index 1698391..442d991 100644
--- a/base/test/test_mock_time_task_runner.cc
+++ b/base/test/test_mock_time_task_runner.cc
@@ -102,6 +102,11 @@
   return !tasks_.empty();
 }
 
+size_t TestMockTimeTaskRunner::GetPendingTaskCount() const {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  return tasks_.size();
+}
+
 TimeDelta TestMockTimeTaskRunner::NextPendingTaskDelay() const {
   DCHECK(thread_checker_.CalledOnValidThread());
   return tasks_.empty() ? TimeDelta::Max() : tasks_.top().GetTimeToRun() - now_;
diff --git a/base/test/test_mock_time_task_runner.h b/base/test/test_mock_time_task_runner.h
index 3a0a215..2f59892 100644
--- a/base/test/test_mock_time_task_runner.h
+++ b/base/test/test_mock_time_task_runner.h
@@ -60,6 +60,7 @@
   scoped_ptr<TickClock> GetMockTickClock() const;
 
   bool HasPendingTask() const;
+  size_t GetPendingTaskCount() const;
   TimeDelta NextPendingTaskDelay() const;
 
   // SingleThreadTaskRunner:
diff --git a/base/test/test_pending_task.h b/base/test/test_pending_task.h
index fa06800..4a2b0e7 100644
--- a/base/test/test_pending_task.h
+++ b/base/test/test_pending_task.h
@@ -8,9 +8,9 @@
 #include <string>
 
 #include "base/callback.h"
-#include "base/debug/trace_event_argument.h"
 #include "base/location.h"
 #include "base/time/time.h"
+#include "base/trace_event/trace_event_argument.h"
 
 namespace base {
 
diff --git a/base/test/test_pending_task_unittest.cc b/base/test/test_pending_task_unittest.cc
index 4a6bd24..32502f2 100644
--- a/base/test/test_pending_task_unittest.cc
+++ b/base/test/test_pending_task_unittest.cc
@@ -5,7 +5,7 @@
 #include "base/test/test_pending_task.h"
 
 #include "base/bind.h"
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest-spi.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/base/test/trace_event_analyzer.h b/base/test/trace_event_analyzer.h
index 2d3692d..a8be893 100644
--- a/base/test/trace_event_analyzer.h
+++ b/base/test/trace_event_analyzer.h
@@ -78,8 +78,8 @@
 
 #include <map>
 
-#include "base/debug/trace_event.h"
 #include "base/memory/ref_counted.h"
+#include "base/trace_event/trace_event.h"
 
 namespace base {
 class Value;
diff --git a/base/test/trace_to_file.cc b/base/test/trace_to_file.cc
index e157c85..948a6a7 100644
--- a/base/test/trace_to_file.cc
+++ b/base/test/trace_to_file.cc
@@ -7,9 +7,9 @@
 #include "base/base_switches.h"
 #include "base/bind.h"
 #include "base/command_line.h"
-#include "base/debug/trace_event_impl.h"
 #include "base/files/file_util.h"
 #include "base/run_loop.h"
+#include "base/trace_event/trace_event_impl.h"
 
 namespace base {
 namespace test {
diff --git a/base/threading/sequenced_worker_pool.cc b/base/threading/sequenced_worker_pool.cc
index 4c37320..89224f7 100644
--- a/base/threading/sequenced_worker_pool.cc
+++ b/base/threading/sequenced_worker_pool.cc
@@ -14,7 +14,6 @@
 #include "base/callback.h"
 #include "base/compiler_specific.h"
 #include "base/critical_closure.h"
-#include "base/debug/trace_event.h"
 #include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/memory/linked_ptr.h"
@@ -28,6 +27,7 @@
 #include "base/threading/thread_local.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/time/time.h"
+#include "base/trace_event/trace_event.h"
 #include "base/tracked_objects.h"
 
 #if defined(OS_MACOSX)
diff --git a/base/threading/thread_local_storage.cc b/base/threading/thread_local_storage.cc
index 4f4169f..54928ed 100644
--- a/base/threading/thread_local_storage.cc
+++ b/base/threading/thread_local_storage.cc
@@ -140,8 +140,8 @@
     base::subtle::Atomic32 last_used_tls_key =
         base::subtle::NoBarrier_Load(&g_last_used_tls_key);
     for (int slot = last_used_tls_key; slot > 0; --slot) {
-      void* value = stack_allocated_tls_data[slot];
-      if (value == NULL)
+      void* tls_value = stack_allocated_tls_data[slot];
+      if (tls_value == NULL)
         continue;
 
       base::ThreadLocalStorage::TLSDestructorFunc destructor =
@@ -149,7 +149,7 @@
       if (destructor == NULL)
         continue;
       stack_allocated_tls_data[slot] = NULL;  // pre-clear the slot.
-      destructor(value);
+      destructor(tls_value);
       // Any destructor might have called a different service, which then set
       // a different slot to a non-NULL value.  Hence we need to check
       // the whole vector again.  This is a pthread standard.
diff --git a/base/threading/worker_pool_posix.cc b/base/threading/worker_pool_posix.cc
index bc0ae24..5aa50ba 100644
--- a/base/threading/worker_pool_posix.cc
+++ b/base/threading/worker_pool_posix.cc
@@ -6,7 +6,6 @@
 
 #include "base/bind.h"
 #include "base/callback.h"
-#include "base/debug/trace_event.h"
 #include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
@@ -14,6 +13,7 @@
 #include "base/threading/platform_thread.h"
 #include "base/threading/thread_local.h"
 #include "base/threading/worker_pool.h"
+#include "base/trace_event/trace_event.h"
 #include "base/tracked_objects.h"
 
 using tracked_objects::TrackedTime;
diff --git a/base/threading/worker_pool_win.cc b/base/threading/worker_pool_win.cc
index bd976f7..5469439 100644
--- a/base/threading/worker_pool_win.cc
+++ b/base/threading/worker_pool_win.cc
@@ -6,10 +6,10 @@
 
 #include "base/bind.h"
 #include "base/callback.h"
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "base/pending_task.h"
 #include "base/threading/thread_local.h"
+#include "base/trace_event/trace_event.h"
 #include "base/tracked_objects.h"
 
 namespace base {
diff --git a/base/win/pe_image.h b/base/win/pe_image.h
index d93e99d..dde1b48 100644
--- a/base/win/pe_image.h
+++ b/base/win/pe_image.h
@@ -239,15 +239,11 @@
 };
 
 inline bool PEImage::IsOrdinal(LPCSTR name) {
-#pragma warning(push)
-#pragma warning(disable: 4311)
-  // This cast generates a warning because it is 32 bit specific.
-  return reinterpret_cast<DWORD>(name) <= 0xFFFF;
-#pragma warning(pop)
+  return reinterpret_cast<uintptr_t>(name) <= 0xFFFF;
 }
 
 inline WORD PEImage::ToOrdinal(LPCSTR name) {
-  return reinterpret_cast<WORD>(name);
+  return static_cast<WORD>(reinterpret_cast<intptr_t>(name));
 }
 
 inline HMODULE PEImage::module() const {
diff --git a/base/win/registry.cc b/base/win/registry.cc
index 23ad12c..b39b749 100644
--- a/base/win/registry.cc
+++ b/base/win/registry.cc
@@ -662,8 +662,8 @@
     key_ = NULL;
   } else {
     DWORD count = 0;
-    LONG result = ::RegQueryInfoKey(key_, NULL, 0, NULL, &count, NULL, NULL,
-                                    NULL, NULL, NULL, NULL, NULL);
+    result = ::RegQueryInfoKey(key_, NULL, 0, NULL, &count, NULL, NULL, NULL,
+                               NULL, NULL, NULL, NULL);
 
     if (result != ERROR_SUCCESS) {
       ::RegCloseKey(key_);
diff --git a/base/win/windows_version.cc b/base/win/windows_version.cc
index a99cd18..fc2def3 100644
--- a/base/win/windows_version.cc
+++ b/base/win/windows_version.cc
@@ -64,6 +64,8 @@
         version_ = VERSION_WIN8_1;
         break;
     }
+  } else if (version_number_.major == 10) {
+    version_ = VERSION_WIN10;
   } else if (version_number_.major > 6) {
     NOTREACHED();
     version_ = VERSION_WIN_LAST;
@@ -84,7 +86,7 @@
   GetProductInfoPtr get_product_info;
   DWORD os_type;
 
-  if (version_info.dwMajorVersion == 6) {
+  if (version_info.dwMajorVersion == 6 || version_info.dwMajorVersion == 10) {
     // Only present on Vista+.
     get_product_info = reinterpret_cast<GetProductInfoPtr>(
         ::GetProcAddress(::GetModuleHandle(L"kernel32.dll"), "GetProductInfo"));
diff --git a/base/win/windows_version.h b/base/win/windows_version.h
index e51840b..a52e64e 100644
--- a/base/win/windows_version.h
+++ b/base/win/windows_version.h
@@ -26,7 +26,8 @@
   VERSION_VISTA,       // Also includes Windows Server 2008.
   VERSION_WIN7,        // Also includes Windows Server 2008 R2.
   VERSION_WIN8,        // Also includes Windows Server 2012.
-  VERSION_WIN8_1,      // Code named Windows Blue
+  VERSION_WIN8_1,      // Also includes Windows Server 2012 R2.
+  VERSION_WIN10,       // Also includes Windows 10 Server.
   VERSION_WIN_LAST,    // Indicates error condition.
 };
 
diff --git a/build/all.gyp b/build/all.gyp
index 0888d8c..90c0120 100644
--- a/build/all.gyp
+++ b/build/all.gyp
@@ -5,7 +5,9 @@
 {
   'variables': {
     # A hook that can be overridden in other repositories to add additional
-    # compilation targets to 'All'. Only used on Android.
+    # compilation targets to 'All'.
+    'app_targets%': [],
+    # For Android-specific targets.
     'android_app_targets%': [],
   },
   'targets': [
@@ -14,6 +16,7 @@
       'type': 'none',
       'xcode_create_dependents_test_runner': 1,
       'dependencies': [
+        '<@(app_targets)',
         'some.gyp:*',
         '../base/base.gyp:*',
         '../components/components.gyp:*',
@@ -236,7 +239,7 @@
         }],
         ['remoting==1', {
           'dependencies': [
-            '../remoting/remoting.gyp:*',
+            '../remoting/remoting_all.gyp:remoting_all',
           ],
         }],
         ['use_openssl==0', {
diff --git a/build/android/PRESUBMIT.py b/build/android/PRESUBMIT.py
index ad09630..7f3a868 100644
--- a/build/android/PRESUBMIT.py
+++ b/build/android/PRESUBMIT.py
@@ -5,7 +5,7 @@
 """Presubmit script for android buildbot.
 
 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
-details on the presubmit API built into gcl.
+details on the presubmit API built into depot_tools.
 """
 
 _DELETIONS_ONLY_FILES = (
diff --git a/build/android/adb_gdb b/build/android/adb_gdb
index 150eb5e..97d37db 100755
--- a/build/android/adb_gdb
+++ b/build/android/adb_gdb
@@ -36,7 +36,7 @@
     fi
     if [ "$TARGET_GDBSERVER" ]; then
       log "Removing target gdbserver binary: $TARGET_GDBSERVER."
-      "$ADB" shell rm "$TARGET_GDBSERVER" >/dev/null 2>&1
+      "$ADB" shell run-as "$PACKAGE_NAME" rm "$TARGET_GDBSERVER" >/dev/null 2>&1
     fi
     log "Cleaning up: $TMPDIR"
     rm -rf "$TMPDIR"
@@ -734,7 +734,8 @@
 fi
 
 # Allow several concurrent debugging sessions
-TARGET_GDBSERVER=/data/local/tmp/gdbserver-adb-gdb-$TMP_ID
+TARGET_GDBSERVER=/data/data/$PACKAGE_NAME/gdbserver-adb-gdb-$TMP_ID
+TMP_TARGET_GDBSERVER=/data/local/tmp/gdbserver-adb-gdb-$TMP_ID
 
 # Return the build fingerprint contained in a build.prop file.
 # $1: path to build.prop file
@@ -844,22 +845,26 @@
   adb_shell $SU_PREFIX \"echo "foo"\" > $SU_PREFIX_TEST_LOG 2>&1
   if [ $? != 0 -o "$(cat $SU_PREFIX_TEST_LOG)" != "foo" ]; then
     echo "ERROR: Cannot use '$SU_PREFIX' as a valid su prefix:"
-    echo "$ adb shell $SU_PREFIX echo foo"
+    echo "$ adb shell $SU_PREFIX \"echo foo\""
     cat $SU_PREFIX_TEST_LOG
     exit 1
   fi
-  COMMAND_PREFIX="$SU_PREFIX"
+  COMMAND_PREFIX="$SU_PREFIX \""
+  COMMAND_SUFFIX="\""
 else
   SHELL_UID=$(adb shell cat /proc/self/status | \
               awk '$1 == "Uid:" { print $2; }')
   log "Shell UID: $SHELL_UID"
   if [ "$SHELL_UID" != 0 -o -n "$NO_ROOT" ]; then
     COMMAND_PREFIX="run-as $PACKAGE_NAME"
+    COMMAND_SUFFIX=
   else
     COMMAND_PREFIX=
+    COMMAND_SUFFIX=
   fi
 fi
 log "Command prefix: '$COMMAND_PREFIX'"
+log "Command suffix: '$COMMAND_SUFFIX'"
 
 # Pull device's system libraries that are mapped by our process.
 # Pulling all system libraries is too long, so determine which ones
@@ -867,7 +872,7 @@
 if [ "$PULL_LIBS" -a -z "$NO_PULL_LIBS" ]; then
   echo "Extracting system libraries into: $PULL_LIBS_DIR"
   rm -f $PULL_LIBS_DIR/build.prop
-  MAPPINGS=$(adb_shell $COMMAND_PREFIX \"cat /proc/$PID/maps\")
+  MAPPINGS=$(adb_shell $COMMAND_PREFIX cat /proc/$PID/maps $COMMAND_SUFFIX)
   if [ $? != 0 ]; then
     echo "ERROR: Could not list process's memory mappings."
     if [ "$SU_PREFIX" ]; then
@@ -902,7 +907,9 @@
 
 # Push gdbserver to the device
 log "Pushing gdbserver $GDBSERVER to $TARGET_GDBSERVER"
-adb push $GDBSERVER $TARGET_GDBSERVER &>/dev/null
+adb push $GDBSERVER $TMP_TARGET_GDBSERVER &>/dev/null
+adb shell run-as $PACKAGE_NAME cp $TMP_TARGET_GDBSERVER .
+adb shell rm $TMP_TARGET_GDBSERVER
 fail_panic "Could not copy gdbserver to the device!"
 
 PORT=5039
@@ -944,10 +951,10 @@
 #
 log "Starting gdbserver in the background:"
 GDBSERVER_LOG=$TMPDIR/gdbserver-$TMP_ID.log
-log "adb shell $COMMAND_PREFIX \"$TARGET_GDBSERVER :$TARGET_PORT \
---attach $PID"\"
-("$ADB" shell $COMMAND_PREFIX \"$TARGET_GDBSERVER :$TARGET_PORT \
- --attach $PID\" > $GDBSERVER_LOG 2>&1) &
+log "adb shell $COMMAND_PREFIX $TARGET_GDBSERVER :$TARGET_PORT \
+--attach $PID $COMMAND_SUFFIX"
+("$ADB" shell $COMMAND_PREFIX $TARGET_GDBSERVER :$TARGET_PORT \
+ --attach $PID $COMMAND_SUFFIX > $GDBSERVER_LOG 2>&1) &
 GDBSERVER_PID=$!
 echo "$GDBSERVER_PID" > $GDBSERVER_PIDFILE
 log "background job pid: $GDBSERVER_PID"
diff --git a/build/android/disable_lto.gypi b/build/android/disable_lto.gypi
index 448945c..e379cfd 100644
--- a/build/android/disable_lto.gypi
+++ b/build/android/disable_lto.gypi
@@ -8,7 +8,7 @@
   'target_conditions': [
     ['_toolset=="target"', {
       'conditions': [
-        ['use_lto==1 or use_lto_o2==1', {
+        ['OS=="android" and (use_lto==1 or use_lto_o2==1)', {
           'cflags!': [
             '-flto',
             '-ffat-lto-objects',
diff --git a/build/android/findbugs_filter/findbugs_known_bugs.txt b/build/android/findbugs_filter/findbugs_known_bugs.txt
index 26c4b1c..5ec1107 100644
--- a/build/android/findbugs_filter/findbugs_known_bugs.txt
+++ b/build/android/findbugs_filter/findbugs_known_bugs.txt
@@ -2,6 +2,7 @@
 M D UrF: Unread public/protected field: org.chromium.chrome.browser.document.PendingDocumentData.extraHeaders  At DocumentTabModelSelector.java
 M D UrF: Unread public/protected field: org.chromium.chrome.browser.document.PendingDocumentData.postData  At DocumentTabModelSelector.java
 M D UrF: Unread public/protected field: org.chromium.chrome.browser.document.PendingDocumentData.referrer  At DocumentTabModelSelector.java
-M D UuF: Unused public or protected field: org.chromium.chrome.browser.document.PendingDocumentData.nativeWebContents  In PendingDocumentData.java
+M D UuF: Unused public or protected field: org.chromium.chrome.browser.document.PendingDocumentData.webContents  In PendingDocumentData.java
 M D UuF: Unused public or protected field: org.chromium.chrome.browser.document.PendingDocumentData.originalIntent  In PendingDocumentData.java
 M D UuF: Unused public or protected field: org.chromium.chrome.browser.document.PendingDocumentData.url  In PendingDocumentData.java
+M D UuF: Unused public or protected field: org.chromium.chrome.browser.document.PendingDocumentData.userGesture  In PendingDocumentData.java
diff --git a/build/android/gyp/javac.py b/build/android/gyp/javac.py
index 6a3024b..15fe73d 100755
--- a/build/android/gyp/javac.py
+++ b/build/android/gyp/javac.py
@@ -72,6 +72,9 @@
 
   javac_args = [
       '-g',
+      # Chromium only allows UTF8 source files.  Being explicit avoids
+      # javac pulling a default encoding from the user's environment.
+      '-encoding', 'UTF-8',
       '-source', '1.7',
       '-target', '1.7',
       '-classpath', ':'.join(classpath),
diff --git a/build/android/gyp/process_resources.py b/build/android/gyp/process_resources.py
index 45b0947..52cf143 100755
--- a/build/android/gyp/process_resources.py
+++ b/build/android/gyp/process_resources.py
@@ -126,6 +126,36 @@
     # affect how the code in this .apk target could refer to the resources.
 
 
+def CrunchDirectory(aapt, input_dir, output_dir):
+  """Crunches the images in input_dir and its subdirectories into output_dir.
+
+  If an image is already optimized, crunching often increases image size. In
+  this case, the crunched image is overwritten with the original image.
+  """
+  aapt_cmd = [aapt,
+              'crunch',
+              '-C', output_dir,
+              '-S', input_dir,
+              '--ignore-assets', build_utils.AAPT_IGNORE_PATTERN]
+  build_utils.CheckOutput(aapt_cmd, stderr_filter=FilterCrunchStderr,
+                          fail_func=DidCrunchFail)
+
+  # Check for images whose size increased during crunching and replace them
+  # with their originals (except for 9-patches, which must be crunched).
+  for dir_, _, files in os.walk(output_dir):
+    for crunched in files:
+      if crunched.endswith('.9.png'):
+        continue
+      if not crunched.endswith('.png'):
+        raise Exception('Unexpected file in crunched dir: ' + crunched)
+      crunched = os.path.join(dir_, crunched)
+      original = os.path.join(input_dir, os.path.relpath(crunched, output_dir))
+      original_size = os.path.getsize(original)
+      crunched_size = os.path.getsize(crunched)
+      if original_size < crunched_size:
+        shutil.copyfile(original, crunched)
+
+
 def FilterCrunchStderr(stderr):
   """Filters out lines from aapt crunch's stderr that can safely be ignored."""
   filtered_lines = []
@@ -260,17 +290,11 @@
     # Crunch image resources. This shrinks png files and is necessary for
     # 9-patch images to display correctly. 'aapt crunch' accepts only a single
     # directory at a time and deletes everything in the output directory.
-    for idx, d in enumerate(input_resource_dirs):
+    for idx, input_dir in enumerate(input_resource_dirs):
       crunch_dir = os.path.join(base_crunch_dir, str(idx))
       build_utils.MakeDirectory(crunch_dir)
       zip_resource_dirs.append(crunch_dir)
-      aapt_cmd = [aapt,
-                  'crunch',
-                  '-C', crunch_dir,
-                  '-S', d,
-                  '--ignore-assets', build_utils.AAPT_IGNORE_PATTERN]
-      build_utils.CheckOutput(aapt_cmd, stderr_filter=FilterCrunchStderr,
-                              fail_func=DidCrunchFail)
+      CrunchDirectory(aapt, input_dir, crunch_dir)
 
     ZipResources(zip_resource_dirs, options.resource_zip_out)
 
diff --git a/build/android/increase_size_for_speed.gypi b/build/android/increase_size_for_speed.gypi
index 4081cd7..48d17f5 100644
--- a/build/android/increase_size_for_speed.gypi
+++ b/build/android/increase_size_for_speed.gypi
@@ -22,13 +22,13 @@
             # LTO merges all optimization options at link-time. -O2 takes
             # precedence over -Os. Avoid using LTO simultaneously
             # on -Os and -O2 parts for that reason.
-            ['use_lto==1', {
+            ['OS=="android" and use_lto==1', {
               'cflags!': [
                 '-flto',
                 '-ffat-lto-objects',
               ],
             }],
-            ['use_lto_o2==1', {
+            ['OS=="android" and use_lto_o2==1', {
               'cflags': [
                 '-flto',
                 '-ffat-lto-objects',
diff --git a/build/android/provision_devices.py b/build/android/provision_devices.py
index dad940d..65054fe 100755
--- a/build/android/provision_devices.py
+++ b/build/android/provision_devices.py
@@ -30,6 +30,15 @@
                              'third_party', 'android_testrunner'))
 import errors
 
+
+class _DEFAULT_TIMEOUTS(object):
+  # L can take a while to reboot after a wipe.
+  LOLLIPOP = 600
+  PRE_LOLLIPOP = 180
+
+  HELP_TEXT = '{}s on L, {}s on pre-L'.format(LOLLIPOP, PRE_LOLLIPOP)
+
+
 def KillHostHeartbeat():
   ps = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE)
   stdout, _ = ps.communicate()
@@ -141,9 +150,17 @@
 
 
 def ProvisionDevice(device, options):
+  if options.reboot_timeout:
+    reboot_timeout = options.reboot_timeout
+  elif (device.build_version_sdk >=
+        constants.ANDROID_SDK_VERSION_CODES.LOLLIPOP):
+    reboot_timeout = _DEFAULT_TIMEOUTS.LOLLIPOP
+  else:
+    reboot_timeout = _DEFAULT_TIMEOUTS.PRE_LOLLIPOP
+
   try:
     if not options.skip_wipe:
-      WipeDeviceIfPossible(device, options.reboot_timeout)
+      WipeDeviceIfPossible(device, reboot_timeout)
     try:
       device.EnableRoot()
     except device_errors.CommandFailedError as e:
@@ -181,7 +198,7 @@
         time.sleep(60)
         battery_info = device.old_interface.GetBatteryInfo()
     if not options.skip_wipe:
-      device.Reboot(True, timeout=options.reboot_timeout, retries=0)
+      device.Reboot(True, timeout=reboot_timeout, retries=0)
     device.RunShellCommand('date -s %s' % time.strftime('%Y%m%d.%H%M%S',
                                                         time.gmtime()),
                            as_root=True)
@@ -253,10 +270,10 @@
                       ' (the default is to provision all devices attached)')
   parser.add_argument('--skip-wipe', action='store_true', default=False,
                       help="don't wipe device data during provisioning")
-  parser.add_argument('--reboot-timeout', default=600, type=int,
-                      metavar='SECS',
+  parser.add_argument('--reboot-timeout', metavar='SECS', type=int,
                       help='when wiping the device, max number of seconds to'
-                      ' wait after each reboot (default: %(default)s)')
+                      ' wait after each reboot '
+                      '(default: %s)' % _DEFAULT_TIMEOUTS.HELP_TEXT)
   parser.add_argument('--wait-for-battery', action='store_true',
                       default=is_perf,
                       help='wait for the battery on the devices to charge')
diff --git a/build/android/pylib/device/OWNERS b/build/android/pylib/device/OWNERS
index 6a9eac5..65ce0dc 100644
--- a/build/android/pylib/device/OWNERS
+++ b/build/android/pylib/device/OWNERS
@@ -1,3 +1,3 @@
 set noparent
-craigdh@chromium.org
 jbudorick@chromium.org
+perezju@chromium.org
diff --git a/build/android/pylib/device/device_utils.py b/build/android/pylib/device/device_utils.py
index fab3c5d..805df65 100644
--- a/build/android/pylib/device/device_utils.py
+++ b/build/android/pylib/device/device_utils.py
@@ -100,6 +100,7 @@
 
 class DeviceUtils(object):
 
+  _MAX_ADB_COMMAND_LENGTH = 512
   _VALID_SHELL_VARIABLE = re.compile('^[a-zA-Z_][a-zA-Z0-9_]*$')
 
   def __init__(self, device, default_timeout=_DEFAULT_TIMEOUT,
@@ -461,6 +462,15 @@
       # using double quotes here to allow interpolation of shell variables
       return '%s=%s' % (key, cmd_helper.DoubleQuote(value))
 
+    def do_run(cmd):
+      try:
+        return self.adb.Shell(cmd)
+      except device_errors.AdbCommandFailedError as exc:
+        if check_return:
+          raise
+        else:
+          return exc.output
+
     if not isinstance(cmd, basestring):
       cmd = ' '.join(cmd_helper.SingleQuote(s) for s in cmd)
     if env:
@@ -474,13 +484,14 @@
     if timeout is None:
       timeout = self._default_timeout
 
-    try:
-      output = self.adb.Shell(cmd)
-    except device_errors.AdbCommandFailedError as e:
-      if check_return:
-        raise
-      else:
-        output = e.output
+    if len(cmd) < self._MAX_ADB_COMMAND_LENGTH:
+      output = do_run(cmd)
+    else:
+      with device_temp_file.DeviceTempFile(self.adb, suffix='.sh') as script:
+        self._WriteFileWithPush(script.name, cmd)
+        logging.info('Large shell command will be run from file: %s ...',
+                     cmd[:100])
+        output = do_run('sh %s' % script.name_quoted)
 
     output = output.splitlines()
     if single_line:
@@ -576,7 +587,7 @@
     if raw:
       cmd.append('-r')
     for k, v in extras.iteritems():
-      cmd.extend(['-e', k, v])
+      cmd.extend(['-e', str(k), str(v)])
     cmd.append(component)
     return self.RunShellCommand(cmd, check_return=True)
 
@@ -915,6 +926,12 @@
     return _JoinLines(self.RunShellCommand(
         ['cat', device_path], as_root=as_root, check_return=True))
 
+  def _WriteFileWithPush(self, device_path, contents):
+    with tempfile.NamedTemporaryFile() as host_temp:
+      host_temp.write(contents)
+      host_temp.flush()
+      self.adb.Push(host_temp.name, device_path)
+
   @decorators.WithTimeoutAndRetriesFromInstance()
   def WriteFile(self, device_path, contents, as_root=False, force_push=False,
                 timeout=None, retries=None):
@@ -937,24 +954,25 @@
       CommandTimeoutError on timeout.
       DeviceUnreachableError on missing device.
     """
-    if len(contents) < 512 and not force_push:
+    if not force_push and len(contents) < self._MAX_ADB_COMMAND_LENGTH:
+      # If the contents are small, for efficieny we write the contents with
+      # a shell command rather than pushing a file.
       cmd = 'echo -n %s > %s' % (cmd_helper.SingleQuote(contents),
                                  cmd_helper.SingleQuote(device_path))
       self.RunShellCommand(cmd, as_root=as_root, check_return=True)
+    elif as_root and self.NeedsSU():
+      # Adb does not allow to "push with su", so we first push to a temp file
+      # on a safe location, and then copy it to the desired location with su.
+      with device_temp_file.DeviceTempFile(self.adb) as device_temp:
+        self._WriteFileWithPush(device_temp.name, contents)
+        # Here we need 'cp' rather than 'mv' because the temp and
+        # destination files might be on different file systems (e.g.
+        # on internal storage and an external sd card).
+        self.RunShellCommand(['cp', device_temp.name, device_path],
+                             as_root=True, check_return=True)
     else:
-      with tempfile.NamedTemporaryFile() as host_temp:
-        host_temp.write(contents)
-        host_temp.flush()
-        if as_root and self.NeedsSU():
-          with device_temp_file.DeviceTempFile(self.adb) as device_temp:
-            self.adb.Push(host_temp.name, device_temp.name)
-            # Here we need 'cp' rather than 'mv' because the temp and
-            # destination files might be on different file systems (e.g.
-            # on internal storage and an external sd card)
-            self.RunShellCommand(['cp', device_temp.name, device_path],
-                                 as_root=True, check_return=True)
-        else:
-          self.adb.Push(host_temp.name, device_path)
+      # If root is not needed, we can push directly to the desired location.
+      self._WriteFileWithPush(device_path, contents)
 
   @decorators.WithTimeoutAndRetriesFromInstance()
   def Ls(self, device_path, timeout=None, retries=None):
diff --git a/build/android/pylib/device/device_utils_test.py b/build/android/pylib/device/device_utils_test.py
index e346bee..68c8b71 100755
--- a/build/android/pylib/device/device_utils_test.py
+++ b/build/android/pylib/device/device_utils_test.py
@@ -21,6 +21,7 @@
 import unittest
 
 from pylib import android_commands
+from pylib import cmd_helper
 from pylib import constants
 from pylib.device import adb_wrapper
 from pylib.device import device_errors
@@ -105,6 +106,7 @@
   def __init__(self, name='/tmp/some/file'):
     self.file = mock.MagicMock(spec=file)
     self.file.name = name
+    self.file.name_quoted = cmd_helper.SingleQuote(name)
 
   def __enter__(self):
     return self.file
@@ -557,6 +559,30 @@
         self.call.adb.Shell("cd '/some test/path with/spaces' && ls"), ''):
       self.device.RunShellCommand('ls', cwd='/some test/path with/spaces')
 
+  def testRunShellCommand_withHugeCmd(self):
+    payload = 'hi! ' * 1024
+    expected_cmd = "echo '%s'" % payload
+    with self.assertCalls(
+      (mock.call.pylib.utils.device_temp_file.DeviceTempFile(
+          self.adb, suffix='.sh'), MockTempFile('/sdcard/temp-123.sh')),
+      self.call.device._WriteFileWithPush('/sdcard/temp-123.sh', expected_cmd),
+      (self.call.adb.Shell('sh /sdcard/temp-123.sh'), payload + '\n')):
+      self.assertEquals([payload],
+                        self.device.RunShellCommand(['echo', payload]))
+
+  def testRunShellCommand_withHugeCmdAmdSU(self):
+    payload = 'hi! ' * 1024
+    expected_cmd = """su -c sh -c 'echo '"'"'%s'"'"''""" % payload
+    with self.assertCalls(
+      (self.call.device.NeedsSU(), True),
+      (mock.call.pylib.utils.device_temp_file.DeviceTempFile(
+          self.adb, suffix='.sh'), MockTempFile('/sdcard/temp-123.sh')),
+      self.call.device._WriteFileWithPush('/sdcard/temp-123.sh', expected_cmd),
+      (self.call.adb.Shell('sh /sdcard/temp-123.sh'), payload + '\n')):
+      self.assertEquals(
+          [payload],
+          self.device.RunShellCommand(['echo', payload], as_root=True))
+
   def testRunShellCommand_withSu(self):
     with self.assertCalls(
         (self.call.device.NeedsSU(), True),
@@ -1095,48 +1121,48 @@
 
 class DeviceUtilsWriteFileTest(DeviceUtilsNewImplTest):
 
-  def testWriteFile_withPush(self):
+  def testWriteFileWithPush_success(self):
     tmp_host = MockTempFile('/tmp/file/on.host')
-    contents = 'some large contents ' * 26 # 20 * 26 = 520 chars
+    contents = 'some interesting contents'
     with self.assertCalls(
         (mock.call.tempfile.NamedTemporaryFile(), tmp_host),
         self.call.adb.Push('/tmp/file/on.host', '/path/to/device/file')):
-      self.device.WriteFile('/path/to/device/file', contents)
-      tmp_host.file.write.assert_called_once_with(contents)
+      self.device._WriteFileWithPush('/path/to/device/file', contents)
+    tmp_host.file.write.assert_called_once_with(contents)
 
-  def testWriteFile_withPushForced(self):
+  def testWriteFileWithPush_rejected(self):
     tmp_host = MockTempFile('/tmp/file/on.host')
-    contents = 'tiny contents'
-    with self.assertCalls(
-        (mock.call.tempfile.NamedTemporaryFile(), tmp_host),
-        self.call.adb.Push('/tmp/file/on.host', '/path/to/device/file')):
-      self.device.WriteFile('/path/to/device/file', contents, force_push=True)
-      tmp_host.file.write.assert_called_once_with(contents)
-
-  def testWriteFile_withPushAndSU(self):
-    tmp_host = MockTempFile('/tmp/file/on.host')
-    contents = 'some large contents ' * 26 # 20 * 26 = 520 chars
-    with self.assertCalls(
-        (mock.call.tempfile.NamedTemporaryFile(), tmp_host),
-        (self.call.device.NeedsSU(), True),
-        (mock.call.pylib.utils.device_temp_file.DeviceTempFile(self.adb),
-         MockTempFile('/external/path/tmp/on.device')),
-        self.call.adb.Push('/tmp/file/on.host', '/external/path/tmp/on.device'),
-        self.call.device.RunShellCommand(
-            ['cp', '/external/path/tmp/on.device', '/path/to/device/file'],
-            as_root=True, check_return=True)):
-      self.device.WriteFile('/path/to/device/file', contents, as_root=True)
-      tmp_host.file.write.assert_called_once_with(contents)
-
-  def testWriteFile_withPush_rejected(self):
-    tmp_host = MockTempFile('/tmp/file/on.host')
-    contents = 'some large contents ' * 26 # 20 * 26 = 520 chars
+    contents = 'some interesting contents'
     with self.assertCalls(
         (mock.call.tempfile.NamedTemporaryFile(), tmp_host),
         (self.call.adb.Push('/tmp/file/on.host', '/path/to/device/file'),
          self.CommandError())):
       with self.assertRaises(device_errors.CommandFailedError):
-        self.device.WriteFile('/path/to/device/file', contents)
+        self.device._WriteFileWithPush('/path/to/device/file', contents)
+
+  def testWriteFile_withPush(self):
+    contents = 'some large contents ' * 26 # 20 * 26 = 520 chars
+    with self.assertCalls(
+        self.call.device._WriteFileWithPush('/path/to/device/file', contents)):
+      self.device.WriteFile('/path/to/device/file', contents)
+
+  def testWriteFile_withPushForced(self):
+    contents = 'tiny contents'
+    with self.assertCalls(
+        self.call.device._WriteFileWithPush('/path/to/device/file', contents)):
+      self.device.WriteFile('/path/to/device/file', contents, force_push=True)
+
+  def testWriteFile_withPushAndSU(self):
+    contents = 'some large contents ' * 26 # 20 * 26 = 520 chars
+    with self.assertCalls(
+        (self.call.device.NeedsSU(), True),
+        (mock.call.pylib.utils.device_temp_file.DeviceTempFile(self.adb),
+         MockTempFile('/sdcard/tmp/on.device')),
+        self.call.device._WriteFileWithPush('/sdcard/tmp/on.device', contents),
+        self.call.device.RunShellCommand(
+            ['cp', '/sdcard/tmp/on.device', '/path/to/device/file'],
+            as_root=True, check_return=True)):
+      self.device.WriteFile('/path/to/device/file', contents, as_root=True)
 
   def testWriteFile_withEcho(self):
     with self.assertCall(self.call.adb.Shell(
diff --git a/build/android/pylib/forwarder.py b/build/android/pylib/forwarder.py
index 5f40a94..3859669 100644
--- a/build/android/pylib/forwarder.py
+++ b/build/android/pylib/forwarder.py
@@ -90,8 +90,10 @@
 
       device_serial = str(device)
       redirection_commands = [
-          ['--serial-id=' + device_serial, '--map', str(device_port),
-           str(host_port)] for device_port, host_port in port_pairs]
+          ['--adb=' + constants.GetAdbPath(),
+           '--serial-id=' + device_serial,
+           '--map', str(device_port), str(host_port)]
+          for device_port, host_port in port_pairs]
       logging.info('Forwarding using commands: %s', redirection_commands)
 
       for redirection_command in redirection_commands:
@@ -227,7 +229,9 @@
     if not serial_with_port in instance._device_to_host_port_map:
       logging.error('Trying to unmap non-forwarded port %d' % device_port)
       return
-    redirection_command = ['--serial-id=' + serial, '--unmap', str(device_port)]
+    redirection_command = ['--adb=' + constants.GetAdbPath(),
+                           '--serial-id=' + serial,
+                           '--unmap', str(device_port)]
     (exit_code, output) = cmd_helper.GetCmdStatusAndOutput(
         [instance._host_forwarder_path] + redirection_command)
     if exit_code != 0:
diff --git a/build/android/pylib/gtest/gtest_test_instance.py b/build/android/pylib/gtest/gtest_test_instance.py
index 755573a..186b8fc 100644
--- a/build/android/pylib/gtest/gtest_test_instance.py
+++ b/build/android/pylib/gtest/gtest_test_instance.py
@@ -111,7 +111,13 @@
       error_func('Could not find apk or executable for %s' % self._suite)
 
     self._data_deps = []
-    self._gtest_filter = args.test_filter
+    if args.test_filter:
+      self._gtest_filter = args.test_filter
+    elif args.test_filter_file:
+      with open(args.test_filter_file, 'r') as f:
+        self._gtest_filter = ':'.join(l.strip() for l in f)
+    else:
+      self._gtest_filter = None
     if args.isolate_file_path:
       self._isolate_abs_path = os.path.abspath(args.isolate_file_path)
       self._isolate_delegate = isolate_delegate
@@ -165,6 +171,7 @@
 
     filtered_test_list = test_list
     for gtest_filter_string in gtest_filter_strings:
+      logging.debug('Filtering tests using: %s', gtest_filter_string)
       filtered_test_list = unittest_util.FilterTestNames(
           filtered_test_list, gtest_filter_string)
     return filtered_test_list
diff --git a/build/android/pylib/gtest/local_device_gtest_run.py b/build/android/pylib/gtest/local_device_gtest_run.py
index 3ce93d1..3ca0374 100644
--- a/build/android/pylib/gtest/local_device_gtest_run.py
+++ b/build/android/pylib/gtest/local_device_gtest_run.py
@@ -24,6 +24,9 @@
     'org.chromium.native_test.ChromeNativeTestActivity.CommandLineFile')
 _EXTRA_COMMAND_LINE_FLAGS = (
     'org.chromium.native_test.ChromeNativeTestActivity.CommandLineFlags')
+_EXTRA_ENABLE_TEST_SERVER_SPAWNER = (
+    'org.chromium.native_test.ChromeNativeTestInstrumentationTestRunner'
+        '.EnableTestServerSpawner')
 
 _MAX_SHARD_SIZE = 256
 
@@ -39,6 +42,10 @@
     self._package = apk_helper.GetPackageName(self._apk)
     self._runner = apk_helper.GetInstrumentationName(self._apk)
     self._component = '%s/%s' % (self._package, self._runner)
+    self._enable_test_server_spawner = False
+
+  def EnableTestServerSpawner(self):
+    self._enable_test_server_spawner = True
 
   def Install(self, device):
     device.Install(self._apk)
@@ -47,11 +54,14 @@
     with device_temp_file.DeviceTempFile(device.adb) as command_line_file:
       device.WriteFile(command_line_file.name, '_ %s' % flags)
 
+      extras = {
+        _EXTRA_COMMAND_LINE_FILE: command_line_file.name,
+      }
+      if self._enable_test_server_spawner:
+        extras[_EXTRA_ENABLE_TEST_SERVER_SPAWNER] = '1'
+
       return device.StartInstrumentation(
-          self._component,
-          extras={_EXTRA_COMMAND_LINE_FILE: command_line_file.name},
-          raw=False,
-          **kwargs)
+          self._component, extras=extras, raw=False, **kwargs)
 
   def Clear(self, device):
     device.ClearApplicationState(self._package)
@@ -71,6 +81,9 @@
       self._deps_host_path = None
     self._test_run = tr
 
+  def EnableTestServerSpawner(self):
+    pass
+
   def Install(self, device):
     # TODO(jbudorick): Look into merging this with normal data deps pushing if
     # executables become supported on nonlocal environments.
@@ -130,8 +143,6 @@
     elif self._test_instance.exe:
       self._delegate = _ExeDelegate(self, self._test_instance.exe)
 
-    self._servers = {}
-
   #override
   def TestPackage(self):
     return self._test_instance._suite
@@ -150,14 +161,8 @@
           for h, d in host_device_tuples]
       dev.PushChangedFiles(host_device_tuples)
 
-      self._servers[str(dev)] = []
       if self.TestPackage() in _SUITE_REQUIRES_TEST_SERVER_SPAWNER:
-        self._servers[str(dev)].append(
-            local_test_server_spawner.LocalTestServerSpawner(
-                ports.AllocateTestServerPort(), dev, self.GetTool(dev)))
-
-      for s in self._servers[str(dev)]:
-        s.SetUp()
+        self._delegate.EnableTestServerSpawner()
 
     self._env.parallel_devices.pMap(individual_device_set_up,
                                     self._test_instance.GetDataDependencies())
@@ -189,8 +194,6 @@
     # Run the test.
     output = self._delegate.RunWithFlags(device, '--gtest_filter=%s' % test,
                                          timeout=900, retries=0)
-    for s in self._servers[str(device)]:
-      s.Reset()
     self._delegate.Clear(device)
 
     # Parse the output.
@@ -200,9 +203,5 @@
 
   #override
   def TearDown(self):
-    def individual_device_tear_down(dev):
-      for s in self._servers[str(dev)]:
-        s.TearDown()
-
-    self._env.parallel_devices.pMap(individual_device_tear_down)
+    pass
 
diff --git a/build/android/pylib/instrumentation/instrumentation_test_instance.py b/build/android/pylib/instrumentation/instrumentation_test_instance.py
index 598967b..0c4f566 100644
--- a/build/android/pylib/instrumentation/instrumentation_test_instance.py
+++ b/build/android/pylib/instrumentation/instrumentation_test_instance.py
@@ -211,7 +211,7 @@
       if self._test_package == package_info.test_package:
         self._package_info = package_info
     if not self._package_info:
-      error_func('Unable to find package info for %s' % self._test_package)
+      logging.warning('Unable to find package info for %s', self._test_package)
 
   def __initializeDataDependencyAttributes(self, args, isolate_delegate):
     self._data_deps = []
diff --git a/build/android/pylib/local/device/local_device_test_run.py b/build/android/pylib/local/device/local_device_test_run.py
index 53d6f17..1f1686b 100644
--- a/build/android/pylib/local/device/local_device_test_run.py
+++ b/build/android/pylib/local/device/local_device_test_run.py
@@ -61,7 +61,7 @@
       tests = [t for t in tests if self._GetTestName(t) not in results_names]
       tries += 1
 
-    all_unknown_test_names = set(tests)
+    all_unknown_test_names = set(self._GetTestName(t) for f in tests)
     all_failed_test_names = set(all_fail_results.iterkeys())
 
     unknown_tests = all_unknown_test_names.difference(all_failed_test_names)
diff --git a/build/android/test_runner.py b/build/android/test_runner.py
index 6eb368a..bc0980e 100755
--- a/build/android/test_runner.py
+++ b/build/android/test_runner.py
@@ -184,9 +184,6 @@
                      help=('Executable name of the test suite to run. '
                            'Available suites include (but are not limited to): '
                             '%s' % ', '.join('"%s"' % s for s in gtest_suites)))
-  group.add_argument('-f', '--gtest_filter', '--gtest-filter',
-                     dest='test_filter',
-                     help='googletest-style filter string.')
   group.add_argument('--gtest_also_run_disabled_tests',
                      '--gtest-also-run-disabled-tests',
                      dest='run_disabled', action='store_true',
@@ -202,6 +199,16 @@
                      dest='isolate_file_path',
                      help='.isolate file path to override the default '
                           'path')
+
+  filter_group = group.add_mutually_exclusive_group()
+  filter_group.add_argument('-f', '--gtest_filter', '--gtest-filter',
+                            dest='test_filter',
+                            help='googletest-style filter string.')
+  filter_group.add_argument('--gtest-filter-file', dest='test_filter_file',
+                            help='Path to file that contains googletest-style '
+                                  'filter strings. (Lines will be joined with '
+                                  '":" to create a single filter string.)')
+
   AddDeviceOptions(parser)
   AddCommonOptions(parser)
   AddRemoteDeviceOptions(parser)
diff --git a/build/apk_test.gypi b/build/apk_test.gypi
index 05bafab..5ee494c 100644
--- a/build/apk_test.gypi
+++ b/build/apk_test.gypi
@@ -22,6 +22,7 @@
     '<(DEPTH)/base/base.gyp:base_java',
     '<(DEPTH)/build/android/pylib/device/commands/commands.gyp:chromium_commands',
     '<(DEPTH)/build/android/pylib/remote/device/dummy/dummy.gyp:remote_device_dummy_apk',
+    '<(DEPTH)/net/net.gyp:net_java_test_support',
     '<(DEPTH)/tools/android/android_tools.gyp:android_tools',
   ],
   'conditions': [
diff --git a/build/common.gypi b/build/common.gypi
index 644b7ad..948dcec 100644
--- a/build/common.gypi
+++ b/build/common.gypi
@@ -2143,7 +2143,7 @@
         'conditions': [
           # TODO(dcheng): https://crbug.com/417463 -- work to enable this flag
           # on all platforms is currently underway.
-          ['(OS=="linux" and (chromeos==0 or use_ozone==0)) or OS=="mac" or OS=="ios"', {
+          ['OS=="linux" or OS=="mac" or OS=="ios"', {
             'clang_chrome_plugins_flags': [
               '-Xclang',
               '-plugin-arg-find-bad-constructs',
@@ -2983,6 +2983,12 @@
       ['v8_use_external_startup_data==1', {
        'defines': ['V8_USE_EXTERNAL_STARTUP_DATA'],
       }],
+      ['use_lto==1 and (target_arch=="ia32" or target_arch=="x64")', {
+        # Required for third_party/zlib/crc_folding.c and various other code
+        # that uses SSE. TODO(pcc): Remove this once we properly support
+        # subtarget specific code generation in LLVM.
+        'ldflags': ['-Wl,-plugin-opt,mcpu=corei7-avx'],
+      }],
     ],  # conditions for 'target_defaults'
     'target_conditions': [
       ['<(use_libpci)==1', {
@@ -5591,6 +5597,7 @@
                   'VCCLCompilerTool': {
                     'AdditionalOptions': [
                       '-fsanitize=address',
+                      '-fsanitize-blacklist=<(PRODUCT_DIR)/../../tools/memory/asan/blacklist_win.txt',
                     ],
                     'AdditionalIncludeDirectories': [
                       # MSVC needs to be able to find the sanitizer headers when
@@ -5781,13 +5788,23 @@
           ['_toolset=="target"', {
             'cflags': [
               '-flto',
+            ],
+          }],
+        ],
+      },
+    }],
+    ['use_lto==1 and clang==0', {
+      'target_defaults': {
+        'target_conditions': [
+          ['_toolset=="target"', {
+            'cflags': [
               '-ffat-lto-objects',
             ],
           }],
         ],
       },
     }],
-    ['use_lto==1 or use_lto_o2==1', {
+    ['(use_lto==1 or use_lto_o2==1) and clang==0', {
       'target_defaults': {
         'target_conditions': [
           ['_toolset=="target"', {
@@ -5798,6 +5815,17 @@
         ],
       },
     }],
+    ['(use_lto==1 or use_lto_o2==1) and clang==1', {
+      'target_defaults': {
+        'target_conditions': [
+          ['_toolset=="target"', {
+            'ldflags': [
+              '-flto',
+            ],
+          }],
+        ],
+      },
+    }],
   ],
   'xcode_settings': {
     # DON'T ADD ANYTHING NEW TO THIS BLOCK UNLESS YOU REALLY REALLY NEED IT!
diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn
index 099db51..33449ef 100644
--- a/build/config/BUILDCONFIG.gn
+++ b/build/config/BUILDCONFIG.gn
@@ -76,6 +76,11 @@
   # cross-compiles (compiling the same target for multiple toolchains in the
   # same build) to work.
   target_arch = "arm"
+
+  # TODO(brettw) remove this flag (and therefore enable linking all targets) on
+  # Windows when we have sufficient bot capacity. In the meantime, you can
+  # enable linking for local compiles.
+  link_chrome_on_windows = false
 }
 
 # =============================================================================
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
index cfc6495..021a7a0 100644
--- a/build/config/android/rules.gni
+++ b/build/config/android/rules.gni
@@ -1490,6 +1490,7 @@
     deps = [
       "//base:base_java",
       "//build/android/pylib/remote/device/dummy:remote_device_dummy_apk",
+      "//net/android:net_java_test_support",
     ]
     if (defined(invoker.deps)) {
       deps += invoker.deps
diff --git a/build/config/win/BUILD.gn b/build/config/win/BUILD.gn
index 44a3d70..3f05108 100644
--- a/build/config/win/BUILD.gn
+++ b/build/config/win/BUILD.gn
@@ -63,6 +63,12 @@
     "/ignore:4199",
     "/ignore:4221",
     "/NXCOMPAT",
+
+    # Suggested by Microsoft Devrel to avoid
+    #   LINK : fatal error LNK1248: image size (80000000)
+    #   exceeds maximum allowable size (80000000)
+    # which started happening more regularly after VS2013 Update 4.
+    "/maxilksize:2147483647",
   ]
 
   # ASLR makes debugging with windbg difficult because Chrome.exe and
diff --git a/build/get_sdk_extras_packages.py b/build/get_sdk_extras_packages.py
index 32e5564..6d870cc 100755
--- a/build/get_sdk_extras_packages.py
+++ b/build/get_sdk_extras_packages.py
@@ -7,7 +7,7 @@
 import os
 import sys
 
-SDK_EXTRAS_JSON_FILE = os.path.join(os.path.dirname(sys.argv[0]),
+SDK_EXTRAS_JSON_FILE = os.path.join(os.path.dirname(__file__),
                                     'android_sdk_extras.json')
 
 def main():
diff --git a/build/install-build-deps-android.sh b/build/install-build-deps-android.sh
index 4233c7f..5d95ed5 100755
--- a/build/install-build-deps-android.sh
+++ b/build/install-build-deps-android.sh
@@ -94,10 +94,10 @@
 
 if test "$skip_inst_sdk_packages" != 1; then
   echo 'checking for sdk packages install'
-  # Get the SDK extras packages to install from the DEPS file 'sdkextras' hook.
-  packages="$(python -c 'execfile("./get_sdk_extras_packages.py")')"
   # Use absolute path to call 'android' so script can be run from any directory.
   cwd=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
+  # Get the SDK extras packages to install from the DEPS file 'sdkextras' hook.
+  packages="$(python ${cwd}/get_sdk_extras_packages.py)"
   for package in "${packages}"; do
     pkg_id=$(${cwd}/../third_party/android_tools/sdk/tools/android list sdk | \
                   grep -i "$package," | \
diff --git a/build/ios/PRESUBMIT.py b/build/ios/PRESUBMIT.py
index a0d32f8..bbd17b3 100644
--- a/build/ios/PRESUBMIT.py
+++ b/build/ios/PRESUBMIT.py
@@ -7,7 +7,7 @@
 """Chromium presubmit script for src/tools/ios.
 
 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
-for more details on the presubmit API built into gcl.
+for more details on the presubmit API built into depot_tools.
 """
 
 WHITELIST_FILE = 'build/ios/grit_whitelist.txt'
diff --git a/build/json_schema_api.gni b/build/json_schema_api.gni
index 4811968..83846a2 100644
--- a/build/json_schema_api.gni
+++ b/build/json_schema_api.gni
@@ -113,10 +113,7 @@
 
       if (defined(invoker.visibility)) {
         # If visibility is restricted, add our own target to it.
-        visibility = [
-          invoker.visibility,
-          target_visibility,
-        ]
+        visibility = invoker.visibility + target_visibility
       }
     }
   }
diff --git a/build/secondary/tools/grit/grit_rule.gni b/build/secondary/tools/grit/grit_rule.gni
index 9d8d604..cdaf0f2 100644
--- a/build/secondary/tools/grit/grit_rule.gni
+++ b/build/secondary/tools/grit/grit_rule.gni
@@ -54,7 +54,8 @@
 #       If set, output_dir is not added to include_dirs.
 #
 #   deps  (optional)
-#   data_deps  (optional)
+#   inputs  (optional)
+#       List of additional files, required for grit to process source file.
 #   visibility  (optional)
 #       Normal meaning.
 #
@@ -414,8 +415,8 @@
     if (defined(invoker.deps)) {
       deps += invoker.deps
     }
-    if (defined(invoker.data_deps)) {
-      data_deps = invoker.data_deps
+    if (defined(invoker.inputs)) {
+      inputs += invoker.inputs
     }
   }
 
diff --git a/build/toolchain/gcc_toolchain.gni b/build/toolchain/gcc_toolchain.gni
index cec9b08..5cca299 100644
--- a/build/toolchain/gcc_toolchain.gni
+++ b/build/toolchain/gcc_toolchain.gni
@@ -138,7 +138,7 @@
       temporary_tocname = sofile + ".tmp"
       link_command =
           "$ld -shared {{ldflags}} -o $sofile -Wl,-soname=$soname @$rspfile"
-      toc_command = "{ readelf -d $sofile | grep SONAME ; nm -gD -f p $soname | cut -f1-2 -d' '; } > $temporary_tocname"
+      toc_command = "{ readelf -d $sofile | grep SONAME ; nm -gD -f p $sofile | cut -f1-2 -d' '; } > $temporary_tocname"
       replace_command = "if ! cmp -s $temporary_tocname $tocfile; then mv $temporary_tocname $tocfile; fi"
 
       command = "$link_command && $toc_command && $replace_command"
diff --git a/build/whitespace_file.txt b/build/whitespace_file.txt
index ee4f527..7191150 100644
--- a/build/whitespace_file.txt
+++ b/build/whitespace_file.txt
@@ -152,4 +152,3 @@
 
 In the BUILD we trust.
 ^_^
-
diff --git a/cc/BUILD.gn b/cc/BUILD.gn
index eee115c..d6fd028 100644
--- a/cc/BUILD.gn
+++ b/cc/BUILD.gn
@@ -718,154 +718,156 @@
   }
 }
 
-test("cc_unittests") {
-  sources = [
-    "animation/animation_unittest.cc",
-    "animation/keyframed_animation_curve_unittest.cc",
-    "animation/layer_animation_controller_unittest.cc",
-    "animation/scroll_offset_animation_curve_unittest.cc",
-    "animation/scrollbar_animation_controller_linear_fade_unittest.cc",
-    "animation/scrollbar_animation_controller_thinning_unittest.cc",
-    "animation/transform_operations_unittest.cc",
-    "base/float_quad_unittest.cc",
-    "base/math_util_unittest.cc",
-    "base/region_unittest.cc",
-    "base/rolling_time_delta_history_unittest.cc",
-    "base/scoped_ptr_vector_unittest.cc",
-    "base/simple_enclosed_region_unittest.cc",
-    "base/tiling_data_unittest.cc",
-    "base/util_unittest.cc",
-    "debug/frame_timing_tracker_unittest.cc",
-    "debug/micro_benchmark_controller_unittest.cc",
-    "input/top_controls_manager_unittest.cc",
-    "layers/contents_scaling_layer_unittest.cc",
-    "layers/delegated_frame_provider_unittest.cc",
-    "layers/delegated_frame_resource_collection_unittest.cc",
-    "layers/delegated_renderer_layer_impl_unittest.cc",
-    "layers/delegated_renderer_layer_unittest.cc",
-    "layers/heads_up_display_unittest.cc",
-    "layers/heads_up_display_layer_impl_unittest.cc",
-    "layers/io_surface_layer_impl_unittest.cc",
-    "layers/layer_impl_unittest.cc",
-    "layers/layer_iterator_unittest.cc",
-    "layers/layer_position_constraint_unittest.cc",
-    "layers/layer_unittest.cc",
-    "layers/layer_utils_unittest.cc",
-    "layers/nine_patch_layer_impl_unittest.cc",
-    "layers/nine_patch_layer_unittest.cc",
-    "layers/painted_scrollbar_layer_impl_unittest.cc",
-    "layers/picture_image_layer_impl_unittest.cc",
-    "layers/picture_image_layer_unittest.cc",
-    "layers/picture_layer_impl_unittest.cc",
-    "layers/picture_layer_unittest.cc",
-    "layers/render_surface_unittest.cc",
-    "layers/render_surface_impl_unittest.cc",
-    "layers/scrollbar_layer_unittest.cc",
-    "layers/solid_color_layer_impl_unittest.cc",
-    "layers/solid_color_scrollbar_layer_impl_unittest.cc",
-    "layers/surface_layer_unittest.cc",
-    "layers/surface_layer_impl_unittest.cc",
-    "layers/texture_layer_unittest.cc",
-    "layers/texture_layer_impl_unittest.cc",
-    "layers/tiled_layer_impl_unittest.cc",
-    "layers/tiled_layer_unittest.cc",
-    "layers/ui_resource_layer_impl_unittest.cc",
-    "layers/ui_resource_layer_unittest.cc",
-    "output/begin_frame_args_unittest.cc",
-    "output/delegating_renderer_unittest.cc",
-    "output/filter_operations_unittest.cc",
-    "output/gl_renderer_unittest.cc",
-    "output/output_surface_unittest.cc",
-    "output/overlay_unittest.cc",
-    "output/renderer_pixeltest.cc",
-    "output/renderer_unittest.cc",
-    "output/shader_unittest.cc",
-    "output/software_renderer_unittest.cc",
-    "quads/draw_quad_unittest.cc",
-    "quads/list_container_unittest.cc",
-    "quads/render_pass_unittest.cc",
-    "resources/display_item_list_unittest.cc",
-    "resources/layer_quad_unittest.cc",
-    "resources/picture_layer_tiling_set_unittest.cc",
-    "resources/picture_layer_tiling_unittest.cc",
-    "resources/picture_pile_impl_unittest.cc",
-    "resources/picture_pile_unittest.cc",
-    "resources/picture_unittest.cc",
-    "resources/prioritized_resource_unittest.cc",
-    "resources/tile_task_worker_pool_unittest.cc",
-    "resources/resource_provider_unittest.cc",
-    "resources/resource_update_controller_unittest.cc",
-    "resources/scoped_gpu_raster_unittest.cc",
-    "resources/scoped_resource_unittest.cc",
-    "resources/task_graph_runner_unittest.cc",
-    "resources/texture_mailbox_deleter_unittest.cc",
-    "resources/texture_uploader_unittest.cc",
-    "resources/tile_manager_unittest.cc",
-    "resources/tile_priority_unittest.cc",
-    "scheduler/begin_frame_source_unittest.cc",
-    "scheduler/delay_based_time_source_unittest.cc",
-    "scheduler/scheduler_state_machine_unittest.cc",
-    "scheduler/scheduler_unittest.cc",
-    "test/layer_tree_json_parser_unittest.cc",
-    "test/test_web_graphics_context_3d_unittest.cc",
-    "trees/blocking_task_runner_unittest.cc",
-    "trees/damage_tracker_unittest.cc",
-    "trees/layer_sorter_unittest.cc",
-    "trees/layer_tree_host_common_unittest.cc",
-    "trees/layer_tree_host_impl_unittest.cc",
-    "trees/layer_tree_host_pixeltest_blending.cc",
-    "trees/layer_tree_host_pixeltest_filters.cc",
-    "trees/layer_tree_host_pixeltest_masks.cc",
-    "trees/layer_tree_host_pixeltest_on_demand_raster.cc",
-    "trees/layer_tree_host_pixeltest_readback.cc",
-    "trees/layer_tree_host_pixeltest_synchronous.cc",
-    "trees/layer_tree_host_unittest.cc",
-    "trees/layer_tree_host_unittest_animation.cc",
-    "trees/layer_tree_host_unittest_context.cc",
-    "trees/layer_tree_host_unittest_copyrequest.cc",
-    "trees/layer_tree_host_unittest_damage.cc",
-    "trees/layer_tree_host_unittest_delegated.cc",
-    "trees/layer_tree_host_unittest_occlusion.cc",
-    "trees/layer_tree_host_unittest_no_message_loop.cc",
-    "trees/layer_tree_host_unittest_picture.cc",
-    "trees/layer_tree_host_unittest_proxy.cc",
-    "trees/layer_tree_host_unittest_scroll.cc",
-    "trees/layer_tree_impl_unittest.cc",
-    "trees/occlusion_tracker_unittest.cc",
-    "trees/occlusion_unittest.cc",
-    "trees/property_tree_unittest.cc",
-    "trees/tree_synchronizer_unittest.cc",
+if (!is_win || link_chrome_on_windows) {
+  test("cc_unittests") {
+    sources = [
+      "animation/animation_unittest.cc",
+      "animation/keyframed_animation_curve_unittest.cc",
+      "animation/layer_animation_controller_unittest.cc",
+      "animation/scroll_offset_animation_curve_unittest.cc",
+      "animation/scrollbar_animation_controller_linear_fade_unittest.cc",
+      "animation/scrollbar_animation_controller_thinning_unittest.cc",
+      "animation/transform_operations_unittest.cc",
+      "base/float_quad_unittest.cc",
+      "base/math_util_unittest.cc",
+      "base/region_unittest.cc",
+      "base/rolling_time_delta_history_unittest.cc",
+      "base/scoped_ptr_vector_unittest.cc",
+      "base/simple_enclosed_region_unittest.cc",
+      "base/tiling_data_unittest.cc",
+      "base/util_unittest.cc",
+      "debug/frame_timing_tracker_unittest.cc",
+      "debug/micro_benchmark_controller_unittest.cc",
+      "input/top_controls_manager_unittest.cc",
+      "layers/contents_scaling_layer_unittest.cc",
+      "layers/delegated_frame_provider_unittest.cc",
+      "layers/delegated_frame_resource_collection_unittest.cc",
+      "layers/delegated_renderer_layer_impl_unittest.cc",
+      "layers/delegated_renderer_layer_unittest.cc",
+      "layers/heads_up_display_unittest.cc",
+      "layers/heads_up_display_layer_impl_unittest.cc",
+      "layers/io_surface_layer_impl_unittest.cc",
+      "layers/layer_impl_unittest.cc",
+      "layers/layer_iterator_unittest.cc",
+      "layers/layer_position_constraint_unittest.cc",
+      "layers/layer_unittest.cc",
+      "layers/layer_utils_unittest.cc",
+      "layers/nine_patch_layer_impl_unittest.cc",
+      "layers/nine_patch_layer_unittest.cc",
+      "layers/painted_scrollbar_layer_impl_unittest.cc",
+      "layers/picture_image_layer_impl_unittest.cc",
+      "layers/picture_image_layer_unittest.cc",
+      "layers/picture_layer_impl_unittest.cc",
+      "layers/picture_layer_unittest.cc",
+      "layers/render_surface_unittest.cc",
+      "layers/render_surface_impl_unittest.cc",
+      "layers/scrollbar_layer_unittest.cc",
+      "layers/solid_color_layer_impl_unittest.cc",
+      "layers/solid_color_scrollbar_layer_impl_unittest.cc",
+      "layers/surface_layer_unittest.cc",
+      "layers/surface_layer_impl_unittest.cc",
+      "layers/texture_layer_unittest.cc",
+      "layers/texture_layer_impl_unittest.cc",
+      "layers/tiled_layer_impl_unittest.cc",
+      "layers/tiled_layer_unittest.cc",
+      "layers/ui_resource_layer_impl_unittest.cc",
+      "layers/ui_resource_layer_unittest.cc",
+      "output/begin_frame_args_unittest.cc",
+      "output/delegating_renderer_unittest.cc",
+      "output/filter_operations_unittest.cc",
+      "output/gl_renderer_unittest.cc",
+      "output/output_surface_unittest.cc",
+      "output/overlay_unittest.cc",
+      "output/renderer_pixeltest.cc",
+      "output/renderer_unittest.cc",
+      "output/shader_unittest.cc",
+      "output/software_renderer_unittest.cc",
+      "quads/draw_quad_unittest.cc",
+      "quads/list_container_unittest.cc",
+      "quads/render_pass_unittest.cc",
+      "resources/display_item_list_unittest.cc",
+      "resources/layer_quad_unittest.cc",
+      "resources/picture_layer_tiling_set_unittest.cc",
+      "resources/picture_layer_tiling_unittest.cc",
+      "resources/picture_pile_impl_unittest.cc",
+      "resources/picture_pile_unittest.cc",
+      "resources/picture_unittest.cc",
+      "resources/prioritized_resource_unittest.cc",
+      "resources/tile_task_worker_pool_unittest.cc",
+      "resources/resource_provider_unittest.cc",
+      "resources/resource_update_controller_unittest.cc",
+      "resources/scoped_gpu_raster_unittest.cc",
+      "resources/scoped_resource_unittest.cc",
+      "resources/task_graph_runner_unittest.cc",
+      "resources/texture_mailbox_deleter_unittest.cc",
+      "resources/texture_uploader_unittest.cc",
+      "resources/tile_manager_unittest.cc",
+      "resources/tile_priority_unittest.cc",
+      "scheduler/begin_frame_source_unittest.cc",
+      "scheduler/delay_based_time_source_unittest.cc",
+      "scheduler/scheduler_state_machine_unittest.cc",
+      "scheduler/scheduler_unittest.cc",
+      "test/layer_tree_json_parser_unittest.cc",
+      "test/test_web_graphics_context_3d_unittest.cc",
+      "trees/blocking_task_runner_unittest.cc",
+      "trees/damage_tracker_unittest.cc",
+      "trees/layer_sorter_unittest.cc",
+      "trees/layer_tree_host_common_unittest.cc",
+      "trees/layer_tree_host_impl_unittest.cc",
+      "trees/layer_tree_host_pixeltest_blending.cc",
+      "trees/layer_tree_host_pixeltest_filters.cc",
+      "trees/layer_tree_host_pixeltest_masks.cc",
+      "trees/layer_tree_host_pixeltest_on_demand_raster.cc",
+      "trees/layer_tree_host_pixeltest_readback.cc",
+      "trees/layer_tree_host_pixeltest_synchronous.cc",
+      "trees/layer_tree_host_unittest.cc",
+      "trees/layer_tree_host_unittest_animation.cc",
+      "trees/layer_tree_host_unittest_context.cc",
+      "trees/layer_tree_host_unittest_copyrequest.cc",
+      "trees/layer_tree_host_unittest_damage.cc",
+      "trees/layer_tree_host_unittest_delegated.cc",
+      "trees/layer_tree_host_unittest_occlusion.cc",
+      "trees/layer_tree_host_unittest_no_message_loop.cc",
+      "trees/layer_tree_host_unittest_picture.cc",
+      "trees/layer_tree_host_unittest_proxy.cc",
+      "trees/layer_tree_host_unittest_scroll.cc",
+      "trees/layer_tree_impl_unittest.cc",
+      "trees/occlusion_tracker_unittest.cc",
+      "trees/occlusion_unittest.cc",
+      "trees/property_tree_unittest.cc",
+      "trees/tree_synchronizer_unittest.cc",
 
-    # Surfaces test files.
-    "surfaces/surface_aggregator_test_helpers.cc",
-    "surfaces/surface_aggregator_test_helpers.h",
-    "surfaces/surface_aggregator_unittest.cc",
-    "surfaces/surface_unittest.cc",
-    "surfaces/surfaces_pixeltest.cc",
+      # Surfaces test files.
+      "surfaces/surface_aggregator_test_helpers.cc",
+      "surfaces/surface_aggregator_test_helpers.h",
+      "surfaces/surface_aggregator_unittest.cc",
+      "surfaces/surface_unittest.cc",
+      "surfaces/surfaces_pixeltest.cc",
 
-    # Setup.
-    "test/run_all_unittests.cc",
-    "test/cc_test_suite.cc",
-  ]
+      # Setup.
+      "test/run_all_unittests.cc",
+      "test/cc_test_suite.cc",
+    ]
 
-  deps = [
-    ":cc",
-    ":test_support",
-    "//base/test:test_support",
-    "//cc/surfaces",
-    "//cc/surfaces:surface_id",
-    "//gpu",
-    "//gpu:test_support",
-    "//gpu/command_buffer/client:gles2_interface",
-    "//gpu/command_buffer/common:gles2_utils",
-    "//testing/gmock",
-    "//testing/gtest",
-    "//ui/events:events_base",
-    "//ui/gfx",
-    "//ui/gfx/geometry",
-    "//ui/gfx:test_support",
-    "//ui/gl",
-  ]
+    deps = [
+      ":cc",
+      ":test_support",
+      "//base/test:test_support",
+      "//cc/surfaces",
+      "//cc/surfaces:surface_id",
+      "//gpu",
+      "//gpu:test_support",
+      "//gpu/command_buffer/client:gles2_interface",
+      "//gpu/command_buffer/common:gles2_utils",
+      "//testing/gmock",
+      "//testing/gtest",
+      "//ui/events:events_base",
+      "//ui/gfx",
+      "//ui/gfx/geometry",
+      "//ui/gfx:test_support",
+      "//ui/gl",
+    ]
+  }
 }
 
 test("cc_perftests") {
diff --git a/cc/PRESUBMIT.py b/cc/PRESUBMIT.py
index 71c4ea1..dc826b1 100644
--- a/cc/PRESUBMIT.py
+++ b/cc/PRESUBMIT.py
@@ -11,7 +11,7 @@
 import re
 import string
 
-CC_SOURCE_FILES=(r'^cc/.*\.(cc|h)$', r'^cc\\.*\.(cc|h)$')
+CC_SOURCE_FILES=(r'^cc[\\/].*\.(cc|h)$',)
 
 def CheckChangeLintsClean(input_api, output_api):
   input_api.cpplint._cpplint_state.ResetErrorCounts()  # reset global state
diff --git a/cc/animation/animation.cc b/cc/animation/animation.cc
index da435eb..48ebc74 100644
--- a/cc/animation/animation.cc
+++ b/cc/animation/animation.cc
@@ -6,8 +6,8 @@
 
 #include <cmath>
 
-#include "base/debug/trace_event.h"
 #include "base/strings/string_util.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/animation/animation_curve.h"
 #include "cc/base/time_util.h"
 
diff --git a/cc/base/math_util.cc b/cc/base/math_util.cc
index 99c3cf3..70090d9 100644
--- a/cc/base/math_util.cc
+++ b/cc/base/math_util.cc
@@ -8,7 +8,7 @@
 #include <cmath>
 #include <limits>
 
-#include "base/debug/trace_event_argument.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "base/values.h"
 #include "ui/gfx/geometry/quad_f.h"
 #include "ui/gfx/geometry/rect.h"
diff --git a/cc/base/region.cc b/cc/base/region.cc
index d752b20..22d9585 100644
--- a/cc/base/region.cc
+++ b/cc/base/region.cc
@@ -4,7 +4,7 @@
 
 #include "cc/base/region.h"
 
-#include "base/debug/trace_event_argument.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "base/values.h"
 #include "cc/base/simple_enclosed_region.h"
 
diff --git a/cc/base/synced_property.h b/cc/base/synced_property.h
index 5c47932..8b554c6 100644
--- a/cc/base/synced_property.h
+++ b/cc/base/synced_property.h
@@ -97,12 +97,17 @@
     sent_delta_ = T::Identity();
   }
 
- private:
+  // Values as last pushed to the pending or active tree respectively, with no
+  // impl-thread delta applied.
+  typename T::ValueType PendingBase() const { return pending_base_.get(); }
+  typename T::ValueType ActiveBase() const { return active_base_.get(); }
+
   // The new delta we would use if we decide to activate now.  This delta
   // excludes the amount that we expect the main thread to reflect back at the
   // impl thread during the commit.
   T PendingDelta() const { return active_delta_.InverseCombine(sent_delta_); }
 
+ private:
   // Value last committed to the pending tree.
   T pending_base_;
   // Value last committed to the active tree (on the last activation).
diff --git a/cc/blink/BUILD.gn b/cc/blink/BUILD.gn
index e930277..efbf0f1 100644
--- a/cc/blink/BUILD.gn
+++ b/cc/blink/BUILD.gn
@@ -71,7 +71,7 @@
 
 # GYP version: //cc/blink/cc_blink_tests.gyp:cc_blink_unittests
 # TODO(GYP): make linking work on the mac.
-if (!is_mac) {
+if (!is_mac && (!is_win || link_chrome_on_windows)) {
   test("cc_blink_unittests") {
     sources = [
       "web_animation_unittest.cc",
diff --git a/cc/blink/web_layer_impl.cc b/cc/blink/web_layer_impl.cc
index f73ae10..6ce8ac5 100644
--- a/cc/blink/web_layer_impl.cc
+++ b/cc/blink/web_layer_impl.cc
@@ -5,10 +5,10 @@
 #include "cc/blink/web_layer_impl.h"
 
 #include "base/bind.h"
-#include "base/debug/trace_event_impl.h"
 #include "base/lazy_instance.h"
 #include "base/strings/string_util.h"
 #include "base/threading/thread_checker.h"
+#include "base/trace_event/trace_event_impl.h"
 #include "cc/animation/animation.h"
 #include "cc/base/region.h"
 #include "cc/base/switches.h"
@@ -273,6 +273,12 @@
   layer_->SetScrollOffset(gfx::ScrollOffset(position.x, position.y));
 }
 
+void WebLayerImpl::setScrollCompensationAdjustment(
+    blink::WebDoublePoint position) {
+  layer_->SetScrollCompensationAdjustment(
+      gfx::Vector2dF(position.x, position.y));
+}
+
 blink::WebDoublePoint WebLayerImpl::scrollPositionDouble() const {
   return blink::WebDoublePoint(layer_->scroll_offset().x(),
                                layer_->scroll_offset().y());
diff --git a/cc/blink/web_layer_impl.h b/cc/blink/web_layer_impl.h
index bced598..111c6cf 100644
--- a/cc/blink/web_layer_impl.h
+++ b/cc/blink/web_layer_impl.h
@@ -105,6 +105,7 @@
   virtual void setForceRenderSurface(bool force);
   virtual void setScrollPositionDouble(blink::WebDoublePoint position);
   virtual blink::WebDoublePoint scrollPositionDouble() const;
+  virtual void setScrollCompensationAdjustment(blink::WebDoublePoint position);
   virtual void setScrollClipLayer(blink::WebLayer* clip_layer);
   virtual bool scrollable() const;
   virtual void setUserScrollable(bool horizontal, bool vertical);
diff --git a/cc/cc.gyp b/cc/cc.gyp
index 49d2f64..d04b51c 100644
--- a/cc/cc.gyp
+++ b/cc/cc.gyp
@@ -589,6 +589,8 @@
         'surfaces/display.cc',
         'surfaces/display.h',
         'surfaces/display_client.h',
+        'surfaces/onscreen_display_client.cc',
+        'surfaces/onscreen_display_client.h',
         'surfaces/surface.cc',
         'surfaces/surface.h',
         'surfaces/surface_aggregator.cc',
@@ -599,6 +601,8 @@
         'surfaces/surface_id.h',
         'surfaces/surface_id_allocator.cc',
         'surfaces/surface_id_allocator.h',
+        'surfaces/surface_display_output_surface.cc',
+        'surfaces/surface_display_output_surface.h',
         'surfaces/surface_manager.cc',
         'surfaces/surface_manager.h',
         'surfaces/surface_resource_holder.cc',
diff --git a/cc/debug/benchmark_instrumentation.cc b/cc/debug/benchmark_instrumentation.cc
index 1cb5bc3..bf8ec00 100644
--- a/cc/debug/benchmark_instrumentation.cc
+++ b/cc/debug/benchmark_instrumentation.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/debug/benchmark_instrumentation.h"
 
 namespace cc {
diff --git a/cc/debug/devtools_instrumentation.h b/cc/debug/devtools_instrumentation.h
index 96fa3a5..cfe3e5a 100644
--- a/cc/debug/devtools_instrumentation.h
+++ b/cc/debug/devtools_instrumentation.h
@@ -5,7 +5,7 @@
 #ifndef CC_DEBUG_DEVTOOLS_INSTRUMENTATION_H_
 #define CC_DEBUG_DEVTOOLS_INSTRUMENTATION_H_
 
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 
 namespace cc {
 namespace devtools_instrumentation {
diff --git a/cc/debug/frame_timing_tracker_unittest.cc b/cc/debug/frame_timing_tracker_unittest.cc
index b27dd07..ed862c5 100644
--- a/cc/debug/frame_timing_tracker_unittest.cc
+++ b/cc/debug/frame_timing_tracker_unittest.cc
@@ -4,8 +4,8 @@
 
 #include <string>
 
-#include "base/debug/trace_event_argument.h"
 #include "base/time/time.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "base/values.h"
 #include "cc/debug/frame_timing_tracker.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/cc/debug/frame_viewer_instrumentation.h b/cc/debug/frame_viewer_instrumentation.h
index 76d1e4b..762d058 100644
--- a/cc/debug/frame_viewer_instrumentation.h
+++ b/cc/debug/frame_viewer_instrumentation.h
@@ -5,7 +5,7 @@
 #ifndef CC_DEBUG_FRAME_VIEWER_INSTRUMENTATION_H_
 #define CC_DEBUG_FRAME_VIEWER_INSTRUMENTATION_H_
 
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/resources/tile.h"
 
 namespace cc {
diff --git a/cc/debug/rasterize_and_record_benchmark.cc b/cc/debug/rasterize_and_record_benchmark.cc
index 51edc98..3a0c98b 100644
--- a/cc/debug/rasterize_and_record_benchmark.cc
+++ b/cc/debug/rasterize_and_record_benchmark.cc
@@ -13,8 +13,10 @@
 #include "base/values.h"
 #include "cc/debug/lap_timer.h"
 #include "cc/debug/rasterize_and_record_benchmark_impl.h"
+#include "cc/layers/content_layer_client.h"
 #include "cc/layers/layer.h"
 #include "cc/layers/picture_layer.h"
+#include "cc/resources/display_item_list.h"
 #include "cc/resources/picture_pile.h"
 #include "cc/trees/layer_tree_host.h"
 #include "cc/trees/layer_tree_host_common.h"
@@ -27,6 +29,11 @@
 
 const int kDefaultRecordRepeatCount = 100;
 
+// Parameters for LapTimer.
+const int kTimeLimitMillis = 1;
+const int kWarmupRuns = 0;
+const int kTimeCheckInterval = 1;
+
 const char* kModeSuffixes[Picture::RECORDING_MODE_COUNT] = {
     "",
     "_sk_null_canvas",
@@ -102,17 +109,29 @@
 }
 
 void RasterizeAndRecordBenchmark::RunOnLayer(PictureLayer* layer) {
-  ContentLayerClient* painter = layer->client();
-  gfx::Size content_bounds = layer->content_bounds();
-
   DCHECK(host_);
-  gfx::Size tile_grid_size = host_->settings().default_tile_size;
 
   gfx::Rect visible_content_rect = gfx::ScaleToEnclosingRect(
       layer->visible_content_rect(), 1.f / layer->contents_scale_x());
   if (visible_content_rect.IsEmpty())
     return;
 
+  if (host_->settings().use_display_lists) {
+    RunOnDisplayListLayer(layer, visible_content_rect);
+  } else {
+    RunOnPictureLayer(layer, visible_content_rect);
+  }
+}
+
+void RasterizeAndRecordBenchmark::RunOnPictureLayer(
+    PictureLayer* layer,
+    const gfx::Rect& visible_content_rect) {
+  ContentLayerClient* painter = layer->client();
+
+  DCHECK(host_ && !host_->settings().use_display_lists);
+
+  gfx::Size tile_grid_size = host_->settings().default_tile_size;
+
   for (int mode_index = 0; mode_index < Picture::RECORDING_MODE_COUNT;
        mode_index++) {
     Picture::RecordingMode mode =
@@ -120,11 +139,6 @@
     base::TimeDelta min_time = base::TimeDelta::Max();
     size_t memory_used = 0;
 
-    // Parameters for LapTimer.
-    const int kTimeLimitMillis = 1;
-    const int kWarmupRuns = 0;
-    const int kTimeCheckInterval = 1;
-
     for (int i = 0; i < record_repeat_count_; ++i) {
       // Run for a minimum amount of time to avoid problems with timer
       // quantization when the layer is very small.
@@ -135,13 +149,19 @@
       do {
         picture = Picture::Create(visible_content_rect, painter, tile_grid_size,
                                   false, mode);
+        if (memory_used) {
+          // Verify we are recording the same thing each time.
+          DCHECK(memory_used == picture->ApproximateMemoryUsage());
+        } else {
+          memory_used = picture->ApproximateMemoryUsage();
+        }
+
         timer.NextLap();
       } while (!timer.HasTimeLimitExpired());
       base::TimeDelta duration =
           base::TimeDelta::FromMillisecondsD(timer.MsPerLap());
       if (duration < min_time)
         min_time = duration;
-      memory_used = picture->ApproximateMemoryUsage();
     }
 
     if (mode == Picture::RECORD_NORMALLY) {
@@ -153,6 +173,58 @@
   }
 }
 
+void RasterizeAndRecordBenchmark::RunOnDisplayListLayer(
+    PictureLayer* layer,
+    const gfx::Rect& visible_content_rect) {
+  ContentLayerClient* painter = layer->client();
+
+  DCHECK(host_ && host_->settings().use_display_lists);
+
+  base::TimeDelta min_time = base::TimeDelta::Max();
+  size_t memory_used = 0;
+
+  // TODO(schenney): What are the corresponding Picture::RecordingMode modes
+  // for Slimming Paint. We could disable SkPicture creation in
+  // DrawingDisplayItems, or we could only generate the display list and not
+  // do any work on it in the compositor, or something else, or all of the
+  // above.
+  scoped_refptr<DisplayItemList> display_list;
+  for (int i = 0; i < record_repeat_count_; ++i) {
+    // Run for a minimum amount of time to avoid problems with timer
+    // quantization when the layer is very small.
+    LapTimer timer(kWarmupRuns,
+                   base::TimeDelta::FromMilliseconds(kTimeLimitMillis),
+                   kTimeCheckInterval);
+
+    do {
+      // TODO(schenney): Cached content will not be regenerated, which skews
+      // the results significantly in favor of Slimming Paint (or should).
+      // Add a flag or API call to disable caching, and maybe run the test
+      // twice, without and with caching.
+      display_list = painter->PaintContentsToDisplayList(
+          visible_content_rect, ContentLayerClient::GRAPHICS_CONTEXT_ENABLED);
+
+      if (memory_used) {
+        // Verify we are recording the same thing each time.
+        DCHECK(memory_used == display_list->PictureMemoryUsage());
+      } else {
+        memory_used = display_list->PictureMemoryUsage();
+      }
+
+      timer.NextLap();
+    } while (!timer.HasTimeLimitExpired());
+    base::TimeDelta duration =
+        base::TimeDelta::FromMillisecondsD(timer.MsPerLap());
+    if (duration < min_time)
+      min_time = duration;
+  }
+
+  record_results_.bytes_used += memory_used;
+  record_results_.pixels_recorded +=
+      visible_content_rect.width() * visible_content_rect.height();
+  record_results_.total_best_time[Picture::RECORD_NORMALLY] += min_time;
+}
+
 RasterizeAndRecordBenchmark::RecordResults::RecordResults()
     : pixels_recorded(0), bytes_used(0) {
 }
diff --git a/cc/debug/rasterize_and_record_benchmark.h b/cc/debug/rasterize_and_record_benchmark.h
index 8a23292..5ae45fa 100644
--- a/cc/debug/rasterize_and_record_benchmark.h
+++ b/cc/debug/rasterize_and_record_benchmark.h
@@ -38,6 +38,10 @@
 
  private:
   void Run(Layer* layer);
+  void RunOnDisplayListLayer(PictureLayer* layer,
+                             const gfx::Rect& visible_content_rect);
+  void RunOnPictureLayer(PictureLayer* layer,
+                         const gfx::Rect& visible_content_rect);
 
   void RecordRasterResults(scoped_ptr<base::Value> results);
 
diff --git a/cc/debug/rendering_stats.h b/cc/debug/rendering_stats.h
index 4256f3d..24acb93 100644
--- a/cc/debug/rendering_stats.h
+++ b/cc/debug/rendering_stats.h
@@ -8,8 +8,8 @@
 #include <vector>
 
 #include "base/basictypes.h"
-#include "base/debug/trace_event_argument.h"
 #include "base/time/time.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "base/values.h"
 #include "cc/base/cc_export.h"
 #include "cc/debug/traced_value.h"
diff --git a/cc/debug/traced_picture.h b/cc/debug/traced_picture.h
index b5f5e3a..7212277 100644
--- a/cc/debug/traced_picture.h
+++ b/cc/debug/traced_picture.h
@@ -7,8 +7,8 @@
 
 #include <string>
 
-#include "base/debug/trace_event.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/resources/picture.h"
 
 namespace cc {
diff --git a/cc/debug/traced_value.cc b/cc/debug/traced_value.cc
index 5828cb8..72b7ff3 100644
--- a/cc/debug/traced_value.cc
+++ b/cc/debug/traced_value.cc
@@ -4,8 +4,8 @@
 
 #include "cc/debug/traced_value.h"
 
-#include "base/debug/trace_event_argument.h"
 #include "base/strings/stringprintf.h"
+#include "base/trace_event/trace_event_argument.h"
 
 namespace cc {
 
diff --git a/cc/input/input_handler.h b/cc/input/input_handler.h
index 4912ac8..0208627 100644
--- a/cc/input/input_handler.h
+++ b/cc/input/input_handler.h
@@ -142,6 +142,7 @@
   virtual bool IsCurrentlyScrollingLayerAt(const gfx::Point& viewport_point,
                                            ScrollInputType type) = 0;
 
+  virtual bool HaveWheelEventHandlersAt(const gfx::Point& viewport_point) = 0;
   virtual bool HaveTouchEventHandlersAt(const gfx::Point& viewport_point) = 0;
 
   // Calling CreateLatencyInfoSwapPromiseMonitor() to get a scoped
diff --git a/cc/layers/append_quads_data.h b/cc/layers/append_quads_data.h
index ffe0dd9..103e1cd 100644
--- a/cc/layers/append_quads_data.h
+++ b/cc/layers/append_quads_data.h
@@ -15,15 +15,7 @@
       : num_incomplete_tiles(0),
         num_missing_tiles(0),
         visible_content_area(0),
-        approximated_visible_content_area(0),
-        render_pass_id(0, 0) {}
-
-  explicit AppendQuadsData(RenderPassId render_pass_id)
-      : num_incomplete_tiles(0),
-        num_missing_tiles(0),
-        visible_content_area(0),
-        approximated_visible_content_area(0),
-        render_pass_id(render_pass_id) {}
+        approximated_visible_content_area(0) {}
 
   // Set by the layer appending quads.
   int64 num_incomplete_tiles;
@@ -33,8 +25,6 @@
   int64 visible_content_area;
   // Set by the layer appending quads.
   int64 approximated_visible_content_area;
-  // Given to the layer appending quads.
-  const RenderPassId render_pass_id;
 };
 
 }  // namespace cc
diff --git a/cc/layers/delegated_renderer_layer_impl.cc b/cc/layers/delegated_renderer_layer_impl.cc
index 9eca7a1..8a95b9e 100644
--- a/cc/layers/delegated_renderer_layer_impl.cc
+++ b/cc/layers/delegated_renderer_layer_impl.cc
@@ -257,13 +257,13 @@
     RenderPass* render_pass,
     const Occlusion& occlusion_in_content_space,
     AppendQuadsData* append_quads_data) {
-  AppendRainbowDebugBorder(render_pass, append_quads_data);
+  AppendRainbowDebugBorder(render_pass);
 
   // This list will be empty after a lost context until a new frame arrives.
   if (render_passes_in_draw_order_.empty())
     return;
 
-  RenderPassId target_render_pass_id = append_quads_data->render_pass_id;
+  RenderPassId target_render_pass_id = render_pass->id;
 
   const RenderPass* root_delegated_render_pass =
       render_passes_in_draw_order_.back();
@@ -283,7 +283,6 @@
 
     AppendRenderPassQuads(render_pass,
                           occlusion_in_content_space,
-                          append_quads_data,
                           root_delegated_render_pass,
                           frame_size);
   } else {
@@ -295,15 +294,13 @@
         render_passes_in_draw_order_[render_pass_index];
     AppendRenderPassQuads(render_pass,
                           occlusion_in_content_space,
-                          append_quads_data,
                           delegated_render_pass,
                           frame_size);
   }
 }
 
 void DelegatedRendererLayerImpl::AppendRainbowDebugBorder(
-    RenderPass* render_pass,
-    AppendQuadsData* append_quads_data) {
+    RenderPass* render_pass) {
   if (!ShowDebugBorders())
     return;
 
@@ -385,7 +382,6 @@
 void DelegatedRendererLayerImpl::AppendRenderPassQuads(
     RenderPass* render_pass,
     const Occlusion& occlusion_in_content_space,
-    AppendQuadsData* append_quads_data,
     const RenderPass* delegated_render_pass,
     const gfx::Size& frame_size) const {
   const SharedQuadState* delegated_shared_quad_state = nullptr;
@@ -467,8 +463,7 @@
       // The frame may have a RenderPassDrawQuad that points to a RenderPass not
       // part of the frame. Just ignore these quads.
       if (present) {
-        DCHECK(output_contributing_render_pass_id !=
-               append_quads_data->render_pass_id);
+        DCHECK(output_contributing_render_pass_id != render_pass->id);
 
         RenderPassDrawQuad* output_quad =
             render_pass->CopyFromAndAppendRenderPassDrawQuad(
diff --git a/cc/layers/delegated_renderer_layer_impl.h b/cc/layers/delegated_renderer_layer_impl.h
index 1f84ffb..1ae3228 100644
--- a/cc/layers/delegated_renderer_layer_impl.h
+++ b/cc/layers/delegated_renderer_layer_impl.h
@@ -66,8 +66,7 @@
  private:
   void ClearChildId();
 
-  void AppendRainbowDebugBorder(RenderPass* render_pass,
-                                AppendQuadsData* append_quads_data);
+  void AppendRainbowDebugBorder(RenderPass* render_pass);
 
   void SetRenderPasses(RenderPassList* render_passes_in_draw_order);
   void ClearRenderPasses();
@@ -79,7 +78,6 @@
 
   void AppendRenderPassQuads(RenderPass* render_pass,
                              const Occlusion& occlusion_in_content_space,
-                             AppendQuadsData* append_quads_data,
                              const RenderPass* delegated_render_pass,
                              const gfx::Size& frame_size) const;
 
diff --git a/cc/layers/delegated_renderer_layer_impl_unittest.cc b/cc/layers/delegated_renderer_layer_impl_unittest.cc
index aaef9f2..ce6ab56 100644
--- a/cc/layers/delegated_renderer_layer_impl_unittest.cc
+++ b/cc/layers/delegated_renderer_layer_impl_unittest.cc
@@ -107,10 +107,7 @@
                                           gfx::Transform(1, 0, 0, 1, 9, 10));
     AddRenderPassQuad(pass3, pass2);
     delegated_renderer_layer->SetFrameDataForRenderPasses(
-        1.f, &delegated_render_passes);
-
-    // The RenderPasses should be taken by the layer.
-    EXPECT_EQ(0u, delegated_render_passes.size());
+        1.f, delegated_render_passes);
 
     root_layer_ = root_layer.get();
     layer_before_ = layer_before.get();
@@ -577,10 +574,7 @@
                        false);
 
     delegated_renderer_layer->SetFrameDataForRenderPasses(
-        delegated_device_scale_factor_, &delegated_render_passes);
-
-    // The RenderPasses should be taken by the layer.
-    EXPECT_EQ(0u, delegated_render_passes.size());
+        delegated_device_scale_factor_, delegated_render_passes);
 
     root_layer_ = root_layer.get();
     delegated_renderer_layer_ = delegated_renderer_layer.get();
@@ -1013,10 +1007,7 @@
                        false);
 
     delegated_renderer_layer->SetFrameDataForRenderPasses(
-        1.f, &delegated_render_passes);
-
-    // The RenderPasses should be taken by the layer.
-    EXPECT_EQ(0u, delegated_render_passes.size());
+        1.f, delegated_render_passes);
 
     root_layer_ = root_layer.get();
     delegated_renderer_layer_ = delegated_renderer_layer.get();
@@ -1317,10 +1308,7 @@
   AddRenderPassQuad(pass1, missing_pass.get());
 
   delegated_renderer_layer->SetFrameDataForRenderPasses(
-      1.f, &delegated_render_passes);
-
-  // The RenderPasses should be taken by the layer.
-  EXPECT_EQ(0u, delegated_render_passes.size());
+      1.f, delegated_render_passes);
 
   root_layer->AddChild(delegated_renderer_layer.Pass());
   host_impl_->active_tree()->SetRootLayer(root_layer.Pass());
@@ -1379,7 +1367,7 @@
                     transform,
                     SkXfermode::kSrcOver_Mode);
   delegated_renderer_layer_impl->SetFrameDataForRenderPasses(
-      1.f, &delegated_render_passes);
+      1.f, delegated_render_passes);
 
   impl.CalcDrawProps(viewport_size);
 
@@ -1389,21 +1377,21 @@
 
     {
       SCOPED_TRACE("Root render pass");
-      impl.AppendQuadsForPassWithOcclusion(
-          delegated_renderer_layer_impl, pass1_id, occluded);
-      LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(),
+      impl.AppendQuadsForPassWithOcclusion(delegated_renderer_layer_impl, pass1,
+                                           occluded);
+      LayerTestCommon::VerifyQuadsExactlyCoverRect(pass1->quad_list,
                                                    quad_screen_rect);
-      ASSERT_EQ(1u, impl.quad_list().size());
-      EXPECT_EQ(DrawQuad::RENDER_PASS, impl.quad_list().front()->material);
+      ASSERT_EQ(1u, pass1->quad_list.size());
+      EXPECT_EQ(DrawQuad::RENDER_PASS, pass1->quad_list.front()->material);
     }
     {
       SCOPED_TRACE("Contributing render pass");
-      impl.AppendQuadsForPassWithOcclusion(
-          delegated_renderer_layer_impl, pass2_id, occluded);
+      impl.AppendQuadsForPassWithOcclusion(delegated_renderer_layer_impl, pass2,
+                                           occluded);
       LayerTestCommon::VerifyQuadsExactlyCoverRect(
-          impl.quad_list(), gfx::Rect(quad_screen_rect.size()));
-      ASSERT_EQ(1u, impl.quad_list().size());
-      EXPECT_EQ(DrawQuad::SOLID_COLOR, impl.quad_list().front()->material);
+          pass2->quad_list, gfx::Rect(quad_screen_rect.size()));
+      ASSERT_EQ(1u, pass2->quad_list.size());
+      EXPECT_EQ(DrawQuad::SOLID_COLOR, pass2->quad_list.front()->material);
     }
   }
 
@@ -1413,21 +1401,21 @@
       gfx::Rect occluded(delegated_renderer_layer_impl->visible_content_rect());
 
       SCOPED_TRACE("Root render pass");
-      impl.AppendQuadsForPassWithOcclusion(
-          delegated_renderer_layer_impl, pass1_id, occluded);
-      LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(),
+      impl.AppendQuadsForPassWithOcclusion(delegated_renderer_layer_impl, pass1,
+                                           occluded);
+      LayerTestCommon::VerifyQuadsExactlyCoverRect(pass1->quad_list,
                                                    gfx::Rect());
-      EXPECT_EQ(impl.quad_list().size(), 0u);
+      EXPECT_EQ(pass1->quad_list.size(), 0u);
     }
     {
       gfx::Rect occluded(delegated_renderer_layer_impl->visible_content_rect());
 
       SCOPED_TRACE("Contributing render pass");
-      impl.AppendQuadsForPassWithOcclusion(
-          delegated_renderer_layer_impl, pass2_id, occluded);
-      LayerTestCommon::VerifyQuadsExactlyCoverRect(impl.quad_list(),
+      impl.AppendQuadsForPassWithOcclusion(delegated_renderer_layer_impl, pass2,
+                                           occluded);
+      LayerTestCommon::VerifyQuadsExactlyCoverRect(pass2->quad_list,
                                                    gfx::Rect());
-      EXPECT_EQ(impl.quad_list().size(), 0u);
+      EXPECT_EQ(pass2->quad_list.size(), 0u);
     }
   }
 
@@ -1437,14 +1425,14 @@
       gfx::Rect occlusion_in_root_target(0, 0, 500, 1000);
 
       SCOPED_TRACE("Root render pass");
-      impl.AppendQuadsForPassWithOcclusion(
-          delegated_renderer_layer_impl, pass1_id, occlusion_in_root_target);
+      impl.AppendQuadsForPassWithOcclusion(delegated_renderer_layer_impl, pass1,
+                                           occlusion_in_root_target);
       size_t partially_occluded_count = 0;
-      LayerTestCommon::VerifyQuadsAreOccluded(impl.quad_list(),
+      LayerTestCommon::VerifyQuadsAreOccluded(pass1->quad_list,
                                               occlusion_in_root_target,
                                               &partially_occluded_count);
       // The layer outputs one quad, which is partially occluded.
-      EXPECT_EQ(1u, impl.quad_list().size());
+      EXPECT_EQ(1u, pass1->quad_list.size());
       EXPECT_EQ(1u, partially_occluded_count);
     }
     {
@@ -1454,21 +1442,20 @@
           occlusion_in_root_target - quad_screen_rect.OffsetFromOrigin();
 
       SCOPED_TRACE("Contributing render pass");
-      impl.AppendQuadsForPassWithOcclusion(
-          delegated_renderer_layer_impl, pass2_id, occlusion_in_root_target);
+      impl.AppendQuadsForPassWithOcclusion(delegated_renderer_layer_impl, pass2,
+                                           occlusion_in_root_target);
       size_t partially_occluded_count = 0;
       LayerTestCommon::VerifyQuadsAreOccluded(
-          impl.quad_list(),
-          occlusion_in_target_of_delegated_quad,
+          pass2->quad_list, occlusion_in_target_of_delegated_quad,
           &partially_occluded_count);
       // The layer outputs one quad, which is partially occluded.
-      EXPECT_EQ(1u, impl.quad_list().size());
+      EXPECT_EQ(1u, pass2->quad_list.size());
       EXPECT_EQ(1u, partially_occluded_count);
       // The quad in the contributing surface is at (211,300) in the root.
       // The occlusion extends to 500 in the x-axis, pushing the left of the
       // visible part of the quad to 500 - 211 = 300 - 11 inside the quad.
       EXPECT_EQ(gfx::Rect(300 - 11, 0, 100 + 11, 500).ToString(),
-                impl.quad_list().front()->visible_rect.ToString());
+                pass2->quad_list.front()->visible_rect.ToString());
     }
     {
       gfx::Rect occlusion_in_root_target(0, 0, 500, 1000);
@@ -1486,21 +1473,20 @@
 
       impl.CalcDrawProps(viewport_size);
 
-      impl.AppendQuadsForPassWithOcclusion(
-          delegated_renderer_layer_impl, pass2_id, occlusion_in_root_target);
+      impl.AppendQuadsForPassWithOcclusion(delegated_renderer_layer_impl, pass2,
+                                           occlusion_in_root_target);
       size_t partially_occluded_count = 0;
       LayerTestCommon::VerifyQuadsAreOccluded(
-          impl.quad_list(),
-          occlusion_in_target_of_delegated_quad,
+          pass2->quad_list, occlusion_in_target_of_delegated_quad,
           &partially_occluded_count);
       // The layer outputs one quad, which is partially occluded.
-      EXPECT_EQ(1u, impl.quad_list().size());
+      EXPECT_EQ(1u, pass2->quad_list.size());
       EXPECT_EQ(1u, partially_occluded_count);
       // The quad in the contributing surface is at (222,300) in the transformed
       // root. The occlusion extends to 500 in the x-axis, pushing the left of
       // the visible part of the quad to 500 - 222 = 300 - 22 inside the quad.
       EXPECT_EQ(gfx::Rect(300 - 22, 0, 100 + 22, 500).ToString(),
-                impl.quad_list().front()->visible_rect.ToString());
+                pass2->quad_list.front()->visible_rect.ToString());
     }
   }
 }
@@ -1522,7 +1508,7 @@
                 gfx::Rect(layer_size),
                 gfx::Transform());
   delegated_renderer_layer_impl->SetFrameDataForRenderPasses(
-      2.f, &delegated_render_passes);
+      2.f, delegated_render_passes);
   EXPECT_EQ(0.5f, delegated_renderer_layer_impl->inverse_device_scale_factor());
 
   scoped_ptr<DelegatedRendererLayerImpl> other_layer =
diff --git a/cc/layers/heads_up_display_layer.cc b/cc/layers/heads_up_display_layer.cc
index 5c91249..5dd4bd2 100644
--- a/cc/layers/heads_up_display_layer.cc
+++ b/cc/layers/heads_up_display_layer.cc
@@ -6,7 +6,7 @@
 
 #include <algorithm>
 
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/layers/heads_up_display_layer_impl.h"
 #include "cc/trees/layer_tree_host.h"
 
diff --git a/cc/layers/heads_up_display_layer_impl.cc b/cc/layers/heads_up_display_layer_impl.cc
index 0ebccda..cdb000f 100644
--- a/cc/layers/heads_up_display_layer_impl.cc
+++ b/cc/layers/heads_up_display_layer_impl.cc
@@ -7,9 +7,9 @@
 #include <algorithm>
 #include <vector>
 
-#include "base/debug/trace_event.h"
-#include "base/debug/trace_event_argument.h"
 #include "base/strings/stringprintf.h"
+#include "base/trace_event/trace_event.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "cc/debug/debug_colors.h"
 #include "cc/debug/frame_rate_counter.h"
 #include "cc/debug/paint_time_counter.h"
diff --git a/cc/layers/layer.cc b/cc/layers/layer.cc
index feb23fa..face433 100644
--- a/cc/layers/layer.cc
+++ b/cc/layers/layer.cc
@@ -7,11 +7,11 @@
 #include <algorithm>
 
 #include "base/atomic_sequence_num.h"
-#include "base/debug/trace_event.h"
 #include "base/location.h"
 #include "base/metrics/histogram.h"
 #include "base/single_thread_task_runner.h"
 #include "base/time/time.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/animation/animation.h"
 #include "cc/animation/animation_events.h"
 #include "cc/animation/animation_registrar.h"
@@ -672,6 +672,18 @@
   SetNeedsCommit();
 }
 
+void Layer::SetScrollCompensationAdjustment(
+    const gfx::Vector2dF& scroll_compensation_adjustment) {
+  if (scroll_compensation_adjustment_ == scroll_compensation_adjustment)
+    return;
+  scroll_compensation_adjustment_ = scroll_compensation_adjustment;
+  SetNeedsCommit();
+}
+
+gfx::Vector2dF Layer::ScrollCompensationAdjustment() const {
+  return scroll_compensation_adjustment_;
+}
+
 void Layer::SetScrollOffsetFromImplSide(
     const gfx::ScrollOffset& scroll_offset) {
   DCHECK(IsPropertyChangeAllowed());
@@ -966,21 +978,11 @@
     layer->SetClipChildren(nullptr);
   }
 
-  // Adjust the scroll delta to be just the scrolls that have happened since
-  // the BeginMainFrame was sent.  This happens for impl-side painting
-  // in LayerImpl::ApplyScrollDeltasSinceBeginMainFrame in a separate tree walk.
-  if (layer->layer_tree_impl()->settings().impl_side_painting) {
-    layer->SetScrollOffset(scroll_offset_);
-  } else {
-    if (layer_animation_controller_
-            ->scroll_offset_animation_was_interrupted()) {
-      layer->SetScrollOffsetAndDelta(scroll_offset_, gfx::Vector2dF());
-    } else {
-      layer->SetScrollOffsetAndDelta(
-          scroll_offset_, layer->ScrollDelta() - layer->sent_scroll_delta());
-    }
-    layer->SetSentScrollDelta(gfx::Vector2dF());
-  }
+  layer->PushScrollOffsetFromMainThread(scroll_offset_);
+  if (layer_animation_controller_->scroll_offset_animation_was_interrupted() &&
+      layer->IsActive())
+    layer->SetScrollDelta(gfx::Vector2dF());
+  layer->SetScrollCompensationAdjustment(ScrollCompensationAdjustment());
 
   // Wrap the copy_requests_ in a PostTask to the main thread.
   ScopedPtrVector<CopyOutputRequest> main_thread_copy_requests;
@@ -1028,7 +1030,8 @@
 }
 
 scoped_ptr<LayerImpl> Layer::CreateLayerImpl(LayerTreeImpl* tree_impl) {
-  return LayerImpl::Create(tree_impl, layer_id_);
+  return LayerImpl::Create(tree_impl, layer_id_,
+                           new LayerImpl::SyncedScrollOffset);
 }
 
 bool Layer::DrawsContent() const {
@@ -1122,7 +1125,7 @@
 }
 
 gfx::ScrollOffset Layer::ScrollOffsetForAnimation() const {
-  return TotalScrollOffset();
+  return CurrentScrollOffset();
 }
 
 // On<Property>Animated is called due to an ongoing accelerated animation.
diff --git a/cc/layers/layer.h b/cc/layers/layer.h
index e434412..db472c6 100644
--- a/cc/layers/layer.h
+++ b/cc/layers/layer.h
@@ -266,6 +266,10 @@
 
   RenderSurface* render_surface() const { return render_surface_.get(); }
   void SetScrollOffset(const gfx::ScrollOffset& scroll_offset);
+  void SetScrollCompensationAdjustment(
+      const gfx::Vector2dF& scroll_compensation_adjustment);
+  gfx::Vector2dF ScrollCompensationAdjustment() const;
+
   gfx::ScrollOffset scroll_offset() const { return scroll_offset_; }
   void SetScrollOffsetFromImplSide(const gfx::ScrollOffset& scroll_offset);
 
@@ -314,9 +318,7 @@
   bool force_render_surface() const { return force_render_surface_; }
 
   gfx::Vector2dF ScrollDelta() const { return gfx::Vector2dF(); }
-  gfx::ScrollOffset TotalScrollOffset() const {
-    return ScrollOffsetWithDelta(scroll_offset(), ScrollDelta());
-  }
+  gfx::ScrollOffset CurrentScrollOffset() const { return scroll_offset_; }
 
   void SetDoubleSided(bool double_sided);
   bool double_sided() const { return double_sided_; }
@@ -636,6 +638,7 @@
   gfx::Size bounds_;
 
   gfx::ScrollOffset scroll_offset_;
+  gfx::Vector2dF scroll_compensation_adjustment_;
   // This variable indicates which ancestor layer (if any) whose size,
   // transformed relative to this layer, defines the maximum scroll offset for
   // this layer.
diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc
index d099a63..55ffa7f 100644
--- a/cc/layers/layer_impl.cc
+++ b/cc/layers/layer_impl.cc
@@ -4,10 +4,10 @@
 
 #include "cc/layers/layer_impl.h"
 
-#include "base/debug/trace_event.h"
-#include "base/debug/trace_event_argument.h"
 #include "base/json/json_reader.h"
 #include "base/strings/stringprintf.h"
+#include "base/trace_event/trace_event.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "cc/animation/animation_registrar.h"
 #include "cc/animation/scrollbar_animation_controller.h"
 #include "cc/base/math_util.h"
@@ -34,7 +34,13 @@
 #include "ui/gfx/geometry/vector2d_conversions.h"
 
 namespace cc {
-LayerImpl::LayerImpl(LayerTreeImpl* tree_impl, int id)
+LayerImpl::LayerImpl(LayerTreeImpl* layer_impl, int id)
+    : LayerImpl(layer_impl, id, new LayerImpl::SyncedScrollOffset) {
+}
+
+LayerImpl::LayerImpl(LayerTreeImpl* tree_impl,
+                     int id,
+                     scoped_refptr<SyncedScrollOffset> scroll_offset)
     : parent_(nullptr),
       scroll_parent_(nullptr),
       clip_parent_(nullptr),
@@ -42,6 +48,7 @@
       replica_layer_id_(-1),
       layer_id_(id),
       layer_tree_impl_(tree_impl),
+      scroll_offset_(scroll_offset),
       scroll_offset_delegate_(nullptr),
       scroll_clip_layer_(nullptr),
       should_scroll_on_main_thread_(false),
@@ -237,6 +244,7 @@
   }
 
   layer_tree_impl()->RemoveLayerWithCopyOutputRequest(this);
+  layer_tree_impl()->set_needs_update_draw_properties();
 }
 
 void LayerImpl::ClearRenderSurfaceLayerList() {
@@ -347,18 +355,10 @@
   *resource_id = 0;
 }
 
-void LayerImpl::SetSentScrollDelta(const gfx::Vector2dF& sent_scroll_delta) {
-  // Pending tree never has sent scroll deltas
-  DCHECK(layer_tree_impl()->IsActiveTree());
-
-  if (sent_scroll_delta_ == sent_scroll_delta)
-    return;
-
-  sent_scroll_delta_ = sent_scroll_delta;
-}
-
 gfx::Vector2dF LayerImpl::ScrollBy(const gfx::Vector2dF& scroll) {
-  gfx::Vector2dF adjusted_scroll = scroll;
+  RefreshFromScrollDelegate();
+
+  gfx::ScrollOffset adjusted_scroll(scroll);
   if (layer_tree_impl()->settings().use_pinch_virtual_viewport) {
     if (!user_scrollable_horizontal_)
       adjusted_scroll.set_x(0);
@@ -366,17 +366,14 @@
       adjusted_scroll.set_y(0);
   }
   DCHECK(scrollable());
-  gfx::Vector2dF min_delta = -ScrollOffsetToVector2dF(scroll_offset_);
-  gfx::Vector2dF max_delta = MaxScrollOffset().DeltaFrom(scroll_offset_);
-  // Clamp new_delta so that position + delta stays within scroll bounds.
-  gfx::Vector2dF new_delta = (ScrollDelta() + adjusted_scroll);
-  new_delta.SetToMax(min_delta);
-  new_delta.SetToMin(max_delta);
-  gfx::Vector2dF unscrolled =
-      ScrollDelta() + scroll - new_delta;
-  SetScrollDelta(new_delta);
+  gfx::ScrollOffset old_offset = CurrentScrollOffset();
+  gfx::ScrollOffset new_offset =
+      ClampScrollOffsetToLimits(old_offset + adjusted_scroll);
+  SetCurrentScrollOffset(new_offset);
 
-  return unscrolled;
+  gfx::ScrollOffset unscrolled =
+      old_offset + gfx::ScrollOffset(scroll) - new_offset;
+  return gfx::Vector2dF(unscrolled.x(), unscrolled.y());
 }
 
 void LayerImpl::SetScrollClipLayer(int scroll_clip_layer_id) {
@@ -389,41 +386,8 @@
 }
 
 void LayerImpl::ApplySentScrollDeltasFromAbortedCommit() {
-  if (sent_scroll_delta_.IsZero())
-    return;
-
-  // Pending tree never has sent scroll deltas
   DCHECK(layer_tree_impl()->IsActiveTree());
-
-  // The combination of pending tree and aborted commits with impl scrolls
-  // shouldn't happen; we don't know how to update its deltas correctly.
-  DCHECK(!layer_tree_impl()->FindPendingTreeLayerById(id()));
-
-  // Apply sent scroll deltas to scroll position / scroll delta as if the
-  // main thread had applied them and then committed those values.
-  SetScrollOffsetAndDelta(
-      scroll_offset_ + gfx::ScrollOffset(sent_scroll_delta_),
-      ScrollDelta() - sent_scroll_delta_);
-  SetSentScrollDelta(gfx::Vector2dF());
-}
-
-void LayerImpl::ApplyScrollDeltasSinceBeginMainFrame() {
-  // Only the pending tree can have missing scrolls.
-  DCHECK(layer_tree_impl()->IsPendingTree());
-  if (!scrollable())
-    return;
-
-  // Pending tree should never have sent scroll deltas.
-  DCHECK(sent_scroll_delta().IsZero());
-
-  LayerImpl* active_twin = layer_tree_impl()->FindActiveTreeLayerById(id());
-  if (active_twin) {
-    // Scrolls that happens after begin frame (where the sent scroll delta
-    // comes from) and commit need to be applied to the pending tree
-    // so that it is up to date with the total scroll.
-    SetScrollDelta(active_twin->ScrollDelta() -
-                   active_twin->sent_scroll_delta());
-  }
+  scroll_offset_->AbortCommit();
 }
 
 InputHandler::ScrollStatus LayerImpl::TryScroll(
@@ -502,7 +466,7 @@
 }
 
 scoped_ptr<LayerImpl> LayerImpl::CreateLayerImpl(LayerTreeImpl* tree_impl) {
-  return LayerImpl::Create(tree_impl, layer_id_);
+  return LayerImpl::Create(tree_impl, layer_id_, scroll_offset_);
 }
 
 void LayerImpl::PushPropertiesTo(LayerImpl* layer) {
@@ -542,15 +506,9 @@
   layer->set_user_scrollable_horizontal(user_scrollable_horizontal_);
   layer->set_user_scrollable_vertical(user_scrollable_vertical_);
 
-  // Save the difference but clear the sent delta so that we don't subtract
-  // it again in SetScrollOffsetAndDelta's pending twin mirroring logic.
-  gfx::Vector2dF remaining_delta =
-      layer_animation_controller_->scroll_offset_animation_was_interrupted()
-          ? gfx::Vector2dF()
-          : layer->ScrollDelta() - layer->sent_scroll_delta();
+  layer->SetScrollCompensationAdjustment(scroll_compensation_adjustment_);
 
-  layer->SetSentScrollDelta(gfx::Vector2dF());
-  layer->SetScrollOffsetAndDelta(scroll_offset_, remaining_delta);
+  layer->PushScrollOffset(nullptr);
 
   layer->Set3dSortingContextId(sorting_context_id_);
   layer->SetNumDescendantsThatDrawContent(num_descendants_that_draw_content_);
@@ -762,7 +720,7 @@
 }
 
 gfx::ScrollOffset LayerImpl::ScrollOffsetForAnimation() const {
-  return TotalScrollOffset();
+  return CurrentScrollOffset();
 }
 
 void LayerImpl::OnFilterAnimated(const FilterOperations& filters) {
@@ -780,11 +738,11 @@
 void LayerImpl::OnScrollOffsetAnimated(const gfx::ScrollOffset& scroll_offset) {
   // Only layers in the active tree should need to do anything here, since
   // layers in the pending tree will find out about these changes as a
-  // result of the call to SetScrollDelta.
+  // result of the shared SyncedProperty.
   if (!IsActive())
     return;
 
-  SetScrollDelta(scroll_offset.DeltaFrom(scroll_offset_));
+  SetCurrentScrollOffset(scroll_offset);
 
   layer_tree_impl_->DidAnimateScrollOffset();
 }
@@ -1100,14 +1058,10 @@
     ScrollOffsetDelegate* scroll_offset_delegate) {
   // Having both a scroll parent and a scroll offset delegate is unsupported.
   DCHECK(!scroll_parent_);
-  if (!scroll_offset_delegate && scroll_offset_delegate_) {
-    scroll_delta_ = scroll_offset_delegate_->GetTotalScrollOffset().DeltaFrom(
-        scroll_offset_);
-  }
-  gfx::ScrollOffset total_offset = TotalScrollOffset();
+  RefreshFromScrollDelegate();
   scroll_offset_delegate_ = scroll_offset_delegate;
   if (scroll_offset_delegate_)
-    scroll_offset_delegate_->SetTotalScrollOffset(total_offset);
+    scroll_offset_delegate_->SetCurrentScrollOffset(CurrentScrollOffset());
 }
 
 bool LayerImpl::IsExternalFlingActive() const {
@@ -1115,74 +1069,94 @@
          scroll_offset_delegate_->IsExternalFlingActive();
 }
 
-void LayerImpl::DidScroll() {
-  NoteLayerPropertyChangedForSubtree();
-  ScrollbarParametersDidChange(false);
+void LayerImpl::SetCurrentScrollOffset(const gfx::ScrollOffset& scroll_offset) {
+  DCHECK(IsActive());
+  if (scroll_offset_->SetCurrent(scroll_offset))
+    DidUpdateScrollOffset();
 }
 
-void LayerImpl::SetScrollOffset(const gfx::ScrollOffset& scroll_offset) {
-  SetScrollOffsetAndDelta(scroll_offset, ScrollDelta());
+void LayerImpl::PushScrollOffsetFromMainThread(
+    const gfx::ScrollOffset& scroll_offset) {
+  PushScrollOffset(&scroll_offset);
 }
 
-void LayerImpl::SetScrollOffsetAndDelta(const gfx::ScrollOffset& scroll_offset,
-                                        const gfx::Vector2dF& scroll_delta) {
-  bool changed = false;
+gfx::ScrollOffset LayerImpl::PullDeltaForMainThread() {
+  RefreshFromScrollDelegate();
 
-  last_scroll_offset_ = scroll_offset;
+  // TODO(aelias, miletus): Remove all this temporary flooring machinery when
+  // Blink fully supports fractional scrolls.
+  gfx::ScrollOffset current_offset = CurrentScrollOffset();
+  gfx::Vector2dF current_delta = ScrollDelta();
+  gfx::Vector2dF floored_delta(floor(current_delta.x()),
+                               floor(current_delta.y()));
+  gfx::Vector2dF diff_delta = floored_delta - current_delta;
+  gfx::ScrollOffset tmp_offset = ScrollOffsetWithDelta(current_offset,
+                                                       diff_delta);
+  scroll_offset_->SetCurrent(tmp_offset);
+  gfx::ScrollOffset delta = scroll_offset_->PullDeltaForMainThread();
+  scroll_offset_->SetCurrent(current_offset);
+  return delta;
+}
 
-  if (scroll_offset_ != scroll_offset) {
-    changed = true;
-    scroll_offset_ = scroll_offset;
-
-    if (scroll_offset_delegate_)
-      scroll_offset_delegate_->SetTotalScrollOffset(TotalScrollOffset());
+void LayerImpl::RefreshFromScrollDelegate() {
+  if (scroll_offset_delegate_) {
+    SetCurrentScrollOffset(
+        gfx::ScrollOffset(scroll_offset_delegate_->GetCurrentScrollOffset()));
   }
+}
 
-  if (ScrollDelta() != scroll_delta) {
-    changed = true;
-    if (layer_tree_impl()->IsActiveTree()) {
-      LayerImpl* pending_twin =
-          layer_tree_impl()->FindPendingTreeLayerById(id());
-      if (pending_twin) {
-        // The pending twin can't mirror the scroll delta of the active
-        // layer.  Although the delta - sent scroll delta difference is
-        // identical for both twins, the sent scroll delta for the pending
-        // layer is zero, as anything that has been sent has been baked
-        // into the layer's position/scroll offset as a part of commit.
-        DCHECK(pending_twin->sent_scroll_delta().IsZero());
-        pending_twin->SetScrollDelta(scroll_delta - sent_scroll_delta());
-      }
-    }
-
-    if (scroll_offset_delegate_) {
-      scroll_offset_delegate_->SetTotalScrollOffset(
-          ScrollOffsetWithDelta(scroll_offset_, scroll_delta));
-    } else {
-      scroll_delta_ = scroll_delta;
-    }
-  }
-
-  if (changed) {
-    if (scroll_offset_delegate_)
-      scroll_offset_delegate_->Update();
-    DidScroll();
-  }
+gfx::ScrollOffset LayerImpl::CurrentScrollOffset() const {
+  return scroll_offset_->Current(IsActive());
 }
 
 gfx::Vector2dF LayerImpl::ScrollDelta() const {
-  if (scroll_offset_delegate_) {
-    return scroll_offset_delegate_->GetTotalScrollOffset().DeltaFrom(
-        scroll_offset_);
+  if (IsActive())
+    return gfx::Vector2dF(scroll_offset_->Delta().x(),
+                          scroll_offset_->Delta().y());
+  else
+    return gfx::Vector2dF(scroll_offset_->PendingDelta().get().x(),
+                          scroll_offset_->PendingDelta().get().y());
+}
+
+void LayerImpl::SetScrollDelta(const gfx::Vector2dF& delta) {
+  DCHECK(IsActive());
+  SetCurrentScrollOffset(scroll_offset_->ActiveBase() +
+                         gfx::ScrollOffset(delta));
+}
+
+gfx::ScrollOffset LayerImpl::BaseScrollOffset() const {
+  if (IsActive())
+    return scroll_offset_->ActiveBase();
+  else
+    return scroll_offset_->PendingBase();
+}
+
+void LayerImpl::PushScrollOffset(const gfx::ScrollOffset* scroll_offset) {
+  DCHECK(scroll_offset || IsActive());
+  bool changed = false;
+  if (scroll_offset) {
+    DCHECK(!IsActive() || !layer_tree_impl_->FindPendingTreeLayerById(id()));
+    changed |= scroll_offset_->PushFromMainThread(*scroll_offset);
   }
-  return scroll_delta_;
+  if (IsActive()) {
+    changed |= scroll_offset_->PushPendingToActive();
+    if (layer_animation_controller_->scroll_offset_animation_was_interrupted())
+      SetScrollDelta(gfx::Vector2dF());
+  }
+
+  if (changed)
+    DidUpdateScrollOffset();
 }
 
-void LayerImpl::SetScrollDelta(const gfx::Vector2dF& scroll_delta) {
-  SetScrollOffsetAndDelta(scroll_offset_, scroll_delta);
-}
+void LayerImpl::DidUpdateScrollOffset() {
+  if (scroll_offset_delegate_) {
+    scroll_offset_delegate_->SetCurrentScrollOffset(CurrentScrollOffset());
+    scroll_offset_delegate_->Update();
+    RefreshFromScrollDelegate();
+  }
 
-gfx::ScrollOffset LayerImpl::TotalScrollOffset() const {
-  return ScrollOffsetWithDelta(scroll_offset_, ScrollDelta());
+  NoteLayerPropertyChangedForSubtree();
+  ScrollbarParametersDidChange(false);
 }
 
 void LayerImpl::SetDoubleSided(bool double_sided) {
@@ -1212,39 +1186,16 @@
   DCHECK(this != layer_tree_impl()->InnerViewportScrollLayer() ||
          IsContainerForFixedPositionLayers());
 
-  gfx::SizeF scaled_scroll_bounds(BoundsForScrolling());
-
   float scale_factor = 1.f;
   for (LayerImpl const* current_layer = this;
-       current_layer != scroll_clip_layer_;
+       current_layer != scroll_clip_layer_->parent();
        current_layer = current_layer->parent()) {
-    DCHECK(current_layer);
-    float current_layer_scale = 1.f;
-
-    const gfx::Transform& layer_transform = current_layer->transform();
-    if (current_layer == page_scale_layer) {
-      DCHECK(layer_transform.IsIdentity());
-      current_layer_scale = layer_tree_impl()->current_page_scale_factor();
-    } else {
-      // TODO(wjmaclean) Should we allow for translation too?
-      DCHECK(layer_transform.IsScale2d());
-      gfx::Vector2dF layer_scale = layer_transform.Scale2d();
-      // TODO(wjmaclean) Allow for non-isotropic scales.
-      DCHECK(layer_scale.x() == layer_scale.y());
-      current_layer_scale = layer_scale.x();
-    }
-
-    scale_factor *= current_layer_scale;
+    if (current_layer == page_scale_layer)
+      scale_factor = layer_tree_impl()->current_page_scale_factor();
   }
-  // TODO(wjmaclean) Once we move to a model where the two-viewport model is
-  // turned on in all builds, remove the next two lines. For now however, the
-  // page scale layer may coincide with the clip layer, and so this is
-  // necessary.
-  if (page_scale_layer == scroll_clip_layer_)
-    scale_factor *= layer_tree_impl()->current_page_scale_factor();
 
-  scaled_scroll_bounds.SetSize(scale_factor * scaled_scroll_bounds.width(),
-                               scale_factor * scaled_scroll_bounds.height());
+  gfx::SizeF scaled_scroll_bounds =
+      gfx::ToFlooredSize(gfx::ScaleSize(BoundsForScrolling(), scale_factor));
   scaled_scroll_bounds = gfx::ToFlooredSize(scaled_scroll_bounds);
 
   gfx::ScrollOffset max_offset(
@@ -1256,17 +1207,19 @@
   return max_offset;
 }
 
-gfx::Vector2dF LayerImpl::ClampScrollToMaxScrollOffset() {
-  gfx::ScrollOffset max_offset = MaxScrollOffset();
-  gfx::ScrollOffset old_offset = TotalScrollOffset();
-  gfx::ScrollOffset clamped_offset = old_offset;
+gfx::ScrollOffset LayerImpl::ClampScrollOffsetToLimits(
+    gfx::ScrollOffset offset) const {
+  offset.SetToMin(MaxScrollOffset());
+  offset.SetToMax(gfx::ScrollOffset());
+  return offset;
+}
 
-  clamped_offset.SetToMin(max_offset);
-  clamped_offset.SetToMax(gfx::ScrollOffset());
+gfx::Vector2dF LayerImpl::ClampScrollToMaxScrollOffset() {
+  gfx::ScrollOffset old_offset = CurrentScrollOffset();
+  gfx::ScrollOffset clamped_offset = ClampScrollOffsetToLimits(old_offset);
   gfx::Vector2dF delta = clamped_offset.DeltaFrom(old_offset);
   if (!delta.IsZero())
     ScrollBy(delta);
-
   return delta;
 }
 
@@ -1288,37 +1241,17 @@
   if (scroll_rect.size().IsEmpty())
     return;
 
-  // TODO(wjmaclean) This computation is nearly identical to the one in
-  // MaxScrollOffset. Find some way to combine these.
   gfx::ScrollOffset current_offset;
   for (LayerImpl const* current_layer = this;
-       current_layer != scrollbar_clip_layer;
+       current_layer != scrollbar_clip_layer->parent();
        current_layer = current_layer->parent()) {
-    DCHECK(current_layer);
-    const gfx::Transform& layer_transform = current_layer->transform();
+    current_offset += current_layer->CurrentScrollOffset();
     if (current_layer == page_scale_layer) {
-      DCHECK(layer_transform.IsIdentity());
       float scale_factor = layer_tree_impl()->current_page_scale_factor();
       current_offset.Scale(scale_factor);
       scroll_rect.Scale(scale_factor);
-    } else {
-      DCHECK(layer_transform.IsScale2d());
-      gfx::Vector2dF layer_scale = layer_transform.Scale2d();
-      DCHECK(layer_scale.x() == layer_scale.y());
-      gfx::ScrollOffset new_offset = ScrollOffsetWithDelta(
-          current_layer->scroll_offset(), current_layer->ScrollDelta());
-      new_offset.Scale(layer_scale.x(), layer_scale.y());
-      current_offset += new_offset;
     }
   }
-  // TODO(wjmaclean) Once we move to a model where the two-viewport model is
-  // turned on in all builds, remove the next two lines. For now however, the
-  // page scale layer may coincide with the clip layer, and so this is
-  // necessary.
-  if (page_scale_layer == scrollbar_clip_layer) {
-    scroll_rect.Scale(layer_tree_impl()->current_page_scale_factor());
-    current_offset.Scale(layer_tree_impl()->current_page_scale_factor());
-  }
 
   bool scrollbar_needs_animation = false;
   scrollbar_needs_animation |= scrollbar_layer->SetVerticalAdjust(
@@ -1347,15 +1280,8 @@
     // scrolls that move the pinch virtual viewport (i.e. trigger from
     // either inner or outer viewport).
     if (scrollbar_animation_controller_) {
-      // When both non-overlay and overlay scrollbars are both present, don't
-      // animate the overlay scrollbars when page scale factor is at the min.
-      // Non-overlay scrollbars also shouldn't trigger animations.
-      bool is_animatable_scrollbar =
-          scrollbar_layer->is_overlay_scrollbar() &&
-          ((layer_tree_impl()->current_page_scale_factor() >
-            layer_tree_impl()->min_page_scale_factor()) ||
-           !layer_tree_impl()->settings().use_pinch_zoom_scrollbars);
-      if (is_animatable_scrollbar)
+      // Non-overlay scrollbars shouldn't trigger animations.
+      if (scrollbar_layer->is_overlay_scrollbar())
         scrollbar_animation_controller_->DidScrollUpdate(on_resize);
     }
   }
@@ -1477,7 +1403,11 @@
   state->SetInteger("draws_content", DrawsContent());
   state->SetInteger("gpu_memory_usage", GPUMemoryUsageInBytes());
 
-  MathUtil::AddToTracedValue("scroll_offset", scroll_offset_, state);
+  MathUtil::AddToTracedValue(
+      "scroll_offset", scroll_offset_ ? scroll_offset_->Current(IsActive())
+                                      : gfx::ScrollOffset(),
+      state);
+
   MathUtil::AddToTracedValue("transform_origin", transform_origin_, state);
 
   bool clipped;
diff --git a/cc/layers/layer_impl.h b/cc/layers/layer_impl.h
index f52b5de..f46c16e 100644
--- a/cc/layers/layer_impl.h
+++ b/cc/layers/layer_impl.h
@@ -19,6 +19,7 @@
 #include "cc/base/cc_export.h"
 #include "cc/base/region.h"
 #include "cc/base/scoped_ptr_vector.h"
+#include "cc/base/synced_property.h"
 #include "cc/debug/frame_timing_request.h"
 #include "cc/input/input_handler.h"
 #include "cc/input/scrollbar.h"
@@ -81,18 +82,26 @@
   // of the layer.
   class ScrollOffsetDelegate {
    public:
-    virtual void SetTotalScrollOffset(const gfx::ScrollOffset& new_value) = 0;
-    virtual gfx::ScrollOffset GetTotalScrollOffset() = 0;
+    virtual void SetCurrentScrollOffset(const gfx::ScrollOffset& new_value) = 0;
+    virtual gfx::ScrollOffset GetCurrentScrollOffset() = 0;
     virtual bool IsExternalFlingActive() const = 0;
     virtual void Update() const = 0;
   };
 
+  typedef SyncedProperty<AdditionGroup<gfx::ScrollOffset>> SyncedScrollOffset;
   typedef LayerImplList RenderSurfaceListType;
   typedef LayerImplList LayerListType;
   typedef RenderSurfaceImpl RenderSurfaceType;
 
   enum RenderingContextConstants { NO_RENDERING_CONTEXT = 0 };
 
+  static scoped_ptr<LayerImpl> Create(
+      LayerTreeImpl* tree_impl,
+      int id,
+      scoped_refptr<SyncedScrollOffset> scroll_offset) {
+    return make_scoped_ptr(new LayerImpl(tree_impl, id, scroll_offset));
+  }
+
   static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) {
     return make_scoped_ptr(new LayerImpl(tree_impl, id));
   }
@@ -385,26 +394,29 @@
   void SetContentsScale(float contents_scale_x, float contents_scale_y);
 
   void SetScrollOffsetDelegate(ScrollOffsetDelegate* scroll_offset_delegate);
-  void DidScroll();
+  void RefreshFromScrollDelegate();
   bool IsExternalFlingActive() const;
 
-  void SetScrollOffset(const gfx::ScrollOffset& scroll_offset);
-  void SetScrollOffsetAndDelta(const gfx::ScrollOffset& scroll_offset,
-                               const gfx::Vector2dF& scroll_delta);
-  gfx::ScrollOffset scroll_offset() const { return scroll_offset_; }
+  void SetCurrentScrollOffset(const gfx::ScrollOffset& scroll_offset);
+  void PushScrollOffsetFromMainThread(const gfx::ScrollOffset& scroll_offset);
+  gfx::ScrollOffset PullDeltaForMainThread();
+  gfx::ScrollOffset CurrentScrollOffset() const;
+  gfx::ScrollOffset BaseScrollOffset() const;
+  gfx::Vector2dF ScrollDelta() const;
+  void SetScrollDelta(const gfx::Vector2dF& delta);
 
   gfx::ScrollOffset MaxScrollOffset() const;
+  gfx::ScrollOffset ClampScrollOffsetToLimits(gfx::ScrollOffset offset) const;
   gfx::Vector2dF ClampScrollToMaxScrollOffset();
   void SetScrollbarPosition(ScrollbarLayerImplBase* scrollbar_layer,
                             LayerImpl* scrollbar_clip_layer,
                             bool on_resize) const;
-  void SetScrollDelta(const gfx::Vector2dF& scroll_delta);
-  gfx::Vector2dF ScrollDelta() const;
-
-  gfx::ScrollOffset TotalScrollOffset() const;
-
-  void SetSentScrollDelta(const gfx::Vector2dF& sent_scroll_delta);
-  gfx::Vector2dF sent_scroll_delta() const { return sent_scroll_delta_; }
+  void SetScrollCompensationAdjustment(const gfx::Vector2dF& scroll_offset) {
+    scroll_compensation_adjustment_ = scroll_offset;
+  }
+  gfx::Vector2dF ScrollCompensationAdjustment() const {
+    return scroll_compensation_adjustment_;
+  }
 
   // Returns the delta of the scroll that was outside of the bounds of the
   // initial scroll
@@ -428,7 +440,6 @@
   bool user_scrollable(ScrollbarOrientation orientation) const;
 
   void ApplySentScrollDeltasFromAbortedCommit();
-  void ApplyScrollDeltasSinceBeginMainFrame();
 
   void SetShouldScrollOnMainThread(bool should_scroll_on_main_thread) {
     should_scroll_on_main_thread_ = should_scroll_on_main_thread;
@@ -574,7 +585,12 @@
     return frame_timing_requests_;
   }
 
+  SyncedScrollOffset* synced_scroll_offset() { return scroll_offset_.get(); }
+
  protected:
+  LayerImpl(LayerTreeImpl* layer_impl,
+            int id,
+            scoped_refptr<SyncedScrollOffset> scroll_offset);
   LayerImpl(LayerTreeImpl* layer_impl, int id);
 
   // Get the color and size of the layer's debug border.
@@ -598,6 +614,8 @@
   void NoteLayerPropertyChangedForDescendants();
 
  private:
+  void PushScrollOffset(const gfx::ScrollOffset* scroll_offset);
+  void DidUpdateScrollOffset();
   void NoteLayerPropertyChangedForDescendantsInternal();
 
   virtual const char* LayerTypeAsString() const;
@@ -626,11 +644,13 @@
   int layer_id_;
   LayerTreeImpl* layer_tree_impl_;
 
+  // Properties dynamically changeable on active tree.
+  scoped_refptr<SyncedScrollOffset> scroll_offset_;
+  gfx::Vector2dF bounds_delta_;
+
   // Properties synchronized from the associated Layer.
   gfx::Point3F transform_origin_;
   gfx::Size bounds_;
-  gfx::Vector2dF bounds_delta_;
-  gfx::ScrollOffset scroll_offset_;
   ScrollOffsetDelegate* scroll_offset_delegate_;
   LayerImpl* scroll_clip_layer_;
   bool scrollable_ : 1;
@@ -671,9 +691,7 @@
 
   LayerPositionConstraint position_constraint_;
 
-  gfx::Vector2dF scroll_delta_;
-  gfx::Vector2dF sent_scroll_delta_;
-  gfx::ScrollOffset last_scroll_offset_;
+  gfx::Vector2dF scroll_compensation_adjustment_;
 
   int num_descendants_that_draw_content_;
 
diff --git a/cc/layers/layer_impl_unittest.cc b/cc/layers/layer_impl_unittest.cc
index 7b16710..0dbf356 100644
--- a/cc/layers/layer_impl_unittest.cc
+++ b/cc/layers/layer_impl_unittest.cc
@@ -163,8 +163,8 @@
       root->SetDoubleSided(false));  // constructor initializes it to "true".
   EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->ScrollBy(arbitrary_vector2d));
   EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->SetScrollDelta(gfx::Vector2d()));
-  EXECUTE_AND_VERIFY_SUBTREE_CHANGED(
-      root->SetScrollOffset(gfx::ScrollOffset(arbitrary_vector2d)));
+  EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->PushScrollOffsetFromMainThread(
+      gfx::ScrollOffset(arbitrary_vector2d)));
   EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->SetHideLayerAndSubtree(true));
   EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->SetOpacity(arbitrary_number));
   EXECUTE_AND_VERIFY_SUBTREE_CHANGED(root->SetBlendMode(arbitrary_blend_mode));
@@ -223,7 +223,8 @@
   EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(
       root->SetScrollDelta(gfx::Vector2d()));
   EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(
-      root->SetScrollOffset(gfx::ScrollOffset(arbitrary_vector2d)));
+      root->PushScrollOffsetFromMainThread(
+          gfx::ScrollOffset(arbitrary_vector2d)));
   EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(
       root->SetContentBounds(arbitrary_size));
   EXECUTE_AND_VERIFY_SUBTREE_DID_NOT_CHANGE(
@@ -303,10 +304,10 @@
       layer->SetScrollDelta(arbitrary_vector2d));
   VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(
       layer->SetScrollDelta(arbitrary_vector2d));
-  VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(
-      layer->SetScrollOffset(gfx::ScrollOffset(arbitrary_vector2d)));
-  VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(
-      layer->SetScrollOffset(gfx::ScrollOffset(arbitrary_vector2d)));
+  VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(layer->PushScrollOffsetFromMainThread(
+      gfx::ScrollOffset(arbitrary_vector2d)));
+  VERIFY_NO_NEEDS_UPDATE_DRAW_PROPERTIES(layer->PushScrollOffsetFromMainThread(
+      gfx::ScrollOffset(arbitrary_vector2d)));
 
   // Unrelated functions, always set to new values, always set needs update.
   VERIFY_NEEDS_UPDATE_DRAW_PROPERTIES(
@@ -467,58 +468,58 @@
   // Test that LayerImpl::ScrollBy only affects ScrollDelta and total scroll
   // offset is bounded by the range [0, max scroll offset].
 
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->scroll_offset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->BaseScrollOffset());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->ScrollDelta());
 
   layer()->ScrollBy(gfx::Vector2dF(-100, 100));
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 80), layer()->TotalScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 80), layer()->CurrentScrollOffset());
 
-  EXPECT_VECTOR_EQ(layer()->ScrollDelta(), layer()->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->scroll_offset());
+  EXPECT_VECTOR_EQ(layer()->ScrollDelta(), layer()->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->BaseScrollOffset());
 
   layer()->ScrollBy(gfx::Vector2dF(100, -100));
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(50, 0), layer()->TotalScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(50, 0), layer()->CurrentScrollOffset());
 
-  EXPECT_VECTOR_EQ(layer()->ScrollDelta(), layer()->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->scroll_offset());
+  EXPECT_VECTOR_EQ(layer()->ScrollDelta(), layer()->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->BaseScrollOffset());
 }
 
 TEST_F(LayerImplScrollTest, ScrollByWithNonZeroOffset) {
   gfx::ScrollOffset scroll_offset(10, 5);
-  layer()->SetScrollOffset(scroll_offset);
+  layer()->PushScrollOffsetFromMainThread(scroll_offset);
 
-  EXPECT_VECTOR_EQ(scroll_offset, layer()->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(scroll_offset, layer()->scroll_offset());
+  EXPECT_VECTOR_EQ(scroll_offset, layer()->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->ScrollDelta());
 
   layer()->ScrollBy(gfx::Vector2dF(-100, 100));
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 80), layer()->TotalScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 80), layer()->CurrentScrollOffset());
 
-  EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset,
-                                              layer()->ScrollDelta()),
-                   layer()->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(scroll_offset, layer()->scroll_offset());
+  EXPECT_VECTOR_EQ(
+      gfx::ScrollOffsetWithDelta(scroll_offset, layer()->ScrollDelta()),
+      layer()->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset());
 
   layer()->ScrollBy(gfx::Vector2dF(100, -100));
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(50, 0), layer()->TotalScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(50, 0), layer()->CurrentScrollOffset());
 
-  EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset,
-                                              layer()->ScrollDelta()),
-                   layer()->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(scroll_offset, layer()->scroll_offset());
+  EXPECT_VECTOR_EQ(
+      gfx::ScrollOffsetWithDelta(scroll_offset, layer()->ScrollDelta()),
+      layer()->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset());
 }
 
 class ScrollDelegateIgnore : public LayerImpl::ScrollOffsetDelegate {
  public:
-  void SetTotalScrollOffset(const gfx::ScrollOffset& new_value) override {
+  void SetCurrentScrollOffset(const gfx::ScrollOffset& new_value) override {
     last_attempted_set_offset_ = new_value;
   }
   gfx::ScrollOffset last_attempted_set_offset() const {
     return last_attempted_set_offset_;
   }
 
-  gfx::ScrollOffset GetTotalScrollOffset() override {
+  gfx::ScrollOffset GetCurrentScrollOffset() override {
     return gfx::ScrollOffset(fixed_offset_);
   }
   bool IsExternalFlingActive() const override { return false; }
@@ -535,43 +536,46 @@
 
 TEST_F(LayerImplScrollTest, ScrollByWithIgnoringDelegate) {
   gfx::ScrollOffset scroll_offset(10, 5);
-  layer()->SetScrollOffset(scroll_offset);
+  layer()->PushScrollOffsetFromMainThread(scroll_offset);
 
-  EXPECT_VECTOR_EQ(scroll_offset, layer()->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(scroll_offset, layer()->scroll_offset());
+  EXPECT_VECTOR_EQ(scroll_offset, layer()->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->ScrollDelta());
 
   ScrollDelegateIgnore delegate;
   gfx::Vector2dF fixed_offset(32, 12);
   delegate.set_fixed_offset(fixed_offset);
   layer()->SetScrollOffsetDelegate(&delegate);
+  layer()->RefreshFromScrollDelegate();
 
-  EXPECT_VECTOR_EQ(fixed_offset, layer()->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(scroll_offset, layer()->scroll_offset());
+  EXPECT_VECTOR_EQ(fixed_offset, layer()->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset());
 
   layer()->ScrollBy(gfx::Vector2dF(-100, 100));
 
-  EXPECT_VECTOR_EQ(fixed_offset, layer()->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(scroll_offset, layer()->scroll_offset());
+  EXPECT_VECTOR_EQ(fixed_offset, layer()->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset());
 
   layer()->SetScrollOffsetDelegate(nullptr);
 
-  EXPECT_VECTOR_EQ(fixed_offset, layer()->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(scroll_offset, layer()->scroll_offset());
+  EXPECT_VECTOR_EQ(fixed_offset, layer()->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset());
 
   gfx::Vector2dF scroll_delta(1, 1);
   layer()->ScrollBy(scroll_delta);
 
-  EXPECT_VECTOR_EQ(fixed_offset + scroll_delta, layer()->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(scroll_offset, layer()->scroll_offset());
+  EXPECT_VECTOR_EQ(fixed_offset + scroll_delta, layer()->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset());
 }
 
 class ScrollDelegateAccept : public LayerImpl::ScrollOffsetDelegate {
  public:
-  void SetTotalScrollOffset(const gfx::ScrollOffset& new_value) override {
+  void SetCurrentScrollOffset(const gfx::ScrollOffset& new_value) override {
     current_offset_ = new_value;
   }
-  gfx::ScrollOffset GetTotalScrollOffset() override { return current_offset_; }
+  gfx::ScrollOffset GetCurrentScrollOffset() override {
+    return current_offset_;
+  }
   bool IsExternalFlingActive() const override { return false; }
   void Update() const override { }
 
@@ -581,34 +585,34 @@
 
 TEST_F(LayerImplScrollTest, ScrollByWithAcceptingDelegate) {
   gfx::ScrollOffset scroll_offset(10, 5);
-  layer()->SetScrollOffset(scroll_offset);
+  layer()->PushScrollOffsetFromMainThread(scroll_offset);
 
-  EXPECT_VECTOR_EQ(scroll_offset, layer()->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(scroll_offset, layer()->scroll_offset());
+  EXPECT_VECTOR_EQ(scroll_offset, layer()->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->ScrollDelta());
 
   ScrollDelegateAccept delegate;
   layer()->SetScrollOffsetDelegate(&delegate);
 
-  EXPECT_VECTOR_EQ(scroll_offset, layer()->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(scroll_offset, layer()->scroll_offset());
+  EXPECT_VECTOR_EQ(scroll_offset, layer()->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset());
   EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->ScrollDelta());
 
   layer()->ScrollBy(gfx::Vector2dF(-100, 100));
 
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 80), layer()->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(scroll_offset, layer()->scroll_offset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 80), layer()->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset());
 
   layer()->SetScrollOffsetDelegate(nullptr);
 
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 80), layer()->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(scroll_offset, layer()->scroll_offset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 80), layer()->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset());
 
   gfx::Vector2dF scroll_delta(1, 1);
   layer()->ScrollBy(scroll_delta);
 
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(1, 80), layer()->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(scroll_offset, layer()->scroll_offset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(1, 80), layer()->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset());
 }
 
 TEST_F(LayerImplScrollTest, ApplySentScrollsNoDelegate) {
@@ -616,24 +620,24 @@
   gfx::Vector2dF scroll_delta(20.5f, 8.5f);
   gfx::Vector2d sent_scroll_delta(12, -3);
 
-  layer()->SetScrollOffset(scroll_offset);
-  layer()->ScrollBy(scroll_delta);
-  layer()->SetSentScrollDelta(sent_scroll_delta);
+  layer()->PushScrollOffsetFromMainThread(scroll_offset);
+  layer()->ScrollBy(sent_scroll_delta);
+  layer()->PullDeltaForMainThread();
+  layer()->SetCurrentScrollOffset(scroll_offset +
+                                  gfx::ScrollOffset(scroll_delta));
 
   EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, scroll_delta),
-                   layer()->TotalScrollOffset());
+                   layer()->CurrentScrollOffset());
   EXPECT_VECTOR_EQ(scroll_delta, layer()->ScrollDelta());
-  EXPECT_VECTOR_EQ(scroll_offset, layer()->scroll_offset());
-  EXPECT_VECTOR_EQ(sent_scroll_delta, layer()->sent_scroll_delta());
+  EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset());
 
   layer()->ApplySentScrollDeltasFromAbortedCommit();
 
   EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, scroll_delta),
-                   layer()->TotalScrollOffset());
+                   layer()->CurrentScrollOffset());
   EXPECT_VECTOR_EQ(scroll_delta - sent_scroll_delta, layer()->ScrollDelta());
   EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, sent_scroll_delta),
-                   layer()->scroll_offset());
-  EXPECT_VECTOR_EQ(gfx::Vector2d(), layer()->sent_scroll_delta());
+                   layer()->BaseScrollOffset());
 }
 
 TEST_F(LayerImplScrollTest, ApplySentScrollsWithIgnoringDelegate) {
@@ -641,24 +645,25 @@
   gfx::Vector2d sent_scroll_delta(12, -3);
   gfx::Vector2dF fixed_offset(32, 12);
 
-  layer()->SetScrollOffset(scroll_offset);
+  layer()->PushScrollOffsetFromMainThread(scroll_offset);
+  layer()->ScrollBy(sent_scroll_delta);
+  layer()->PullDeltaForMainThread();
+  layer()->SetCurrentScrollOffset(scroll_offset);
   ScrollDelegateIgnore delegate;
   delegate.set_fixed_offset(fixed_offset);
   layer()->SetScrollOffsetDelegate(&delegate);
-  layer()->SetSentScrollDelta(sent_scroll_delta);
+  layer()->RefreshFromScrollDelegate();
 
-  EXPECT_VECTOR_EQ(fixed_offset, layer()->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(scroll_offset, layer()->scroll_offset());
-  EXPECT_VECTOR_EQ(sent_scroll_delta, layer()->sent_scroll_delta());
+  EXPECT_VECTOR_EQ(fixed_offset, layer()->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset());
 
   layer()->ApplySentScrollDeltasFromAbortedCommit();
 
   EXPECT_VECTOR_EQ(fixed_offset, delegate.last_attempted_set_offset());
 
-  EXPECT_VECTOR_EQ(fixed_offset, layer()->TotalScrollOffset());
+  EXPECT_VECTOR_EQ(fixed_offset, layer()->CurrentScrollOffset());
   EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, sent_scroll_delta),
-                   layer()->scroll_offset());
-  EXPECT_VECTOR_EQ(gfx::Vector2d(), layer()->sent_scroll_delta());
+                   layer()->BaseScrollOffset());
 }
 
 TEST_F(LayerImplScrollTest, ApplySentScrollsWithAcceptingDelegate) {
@@ -666,24 +671,24 @@
   gfx::Vector2d sent_scroll_delta(12, -3);
   gfx::Vector2dF scroll_delta(20.5f, 8.5f);
 
-  layer()->SetScrollOffset(scroll_offset);
+  layer()->PushScrollOffsetFromMainThread(scroll_offset);
+  layer()->ScrollBy(sent_scroll_delta);
+  layer()->PullDeltaForMainThread();
   ScrollDelegateAccept delegate;
   layer()->SetScrollOffsetDelegate(&delegate);
-  layer()->ScrollBy(scroll_delta);
-  layer()->SetSentScrollDelta(sent_scroll_delta);
+  layer()->SetCurrentScrollOffset(scroll_offset +
+                                  gfx::ScrollOffset(scroll_delta));
 
   EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, scroll_delta),
-                   layer()->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(scroll_offset, layer()->scroll_offset());
-  EXPECT_VECTOR_EQ(sent_scroll_delta, layer()->sent_scroll_delta());
+                   layer()->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset());
 
   layer()->ApplySentScrollDeltasFromAbortedCommit();
 
   EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, scroll_delta),
-                   layer()->TotalScrollOffset());
+                   layer()->CurrentScrollOffset());
   EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, sent_scroll_delta),
-                   layer()->scroll_offset());
-  EXPECT_VECTOR_EQ(gfx::Vector2d(), layer()->sent_scroll_delta());
+                   layer()->BaseScrollOffset());
 }
 
 TEST_F(LayerImplScrollTest, ScrollUserUnscrollableLayer) {
@@ -691,41 +696,41 @@
   gfx::Vector2dF scroll_delta(20.5f, 8.5f);
 
   layer()->set_user_scrollable_vertical(false);
-  layer()->SetScrollOffset(scroll_offset);
+  layer()->PushScrollOffsetFromMainThread(scroll_offset);
   gfx::Vector2dF unscrolled = layer()->ScrollBy(scroll_delta);
 
   EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 8.5f), unscrolled);
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(30.5f, 5), layer()->TotalScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(30.5f, 5), layer()->CurrentScrollOffset());
 }
 
-TEST_F(LayerImplScrollTest, PushPropertiesToMirrorsTotalScrollOffset) {
+TEST_F(LayerImplScrollTest, PushPropertiesToMirrorsCurrentScrollOffset) {
   gfx::ScrollOffset scroll_offset(10, 5);
   gfx::Vector2dF scroll_delta(12, 18);
 
   host_impl().CreatePendingTree();
 
-  layer()->SetScrollOffset(scroll_offset);
+  layer()->PushScrollOffsetFromMainThread(scroll_offset);
   gfx::Vector2dF unscrolled = layer()->ScrollBy(scroll_delta);
 
   EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 0), unscrolled);
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(22, 23), layer()->TotalScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(22, 23), layer()->CurrentScrollOffset());
 
-  layer()->SetSentScrollDelta(scroll_delta);
+  layer()->PullDeltaForMainThread();
 
-  scoped_ptr<LayerImpl> pending_layer =
-      LayerImpl::Create(host_impl().sync_tree(), layer()->id());
-  pending_layer->SetScrollOffset(layer()->TotalScrollOffset());
+  scoped_ptr<LayerImpl> pending_layer = LayerImpl::Create(
+      host_impl().sync_tree(), layer()->id(), layer()->synced_scroll_offset());
+  pending_layer->PushScrollOffsetFromMainThread(layer()->CurrentScrollOffset());
 
   pending_layer->PushPropertiesTo(layer());
 
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(22, 23), layer()->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(layer()->TotalScrollOffset(),
-                   pending_layer->TotalScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(22, 23), layer()->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(layer()->CurrentScrollOffset(),
+                   pending_layer->CurrentScrollOffset());
 }
 
 TEST_F(LayerImplScrollTest, SetNewScrollbarParameters) {
   gfx::ScrollOffset scroll_offset(10, 5);
-  layer()->SetScrollOffset(scroll_offset);
+  layer()->PushScrollOffsetFromMainThread(scroll_offset);
 
   scoped_ptr<PaintedScrollbarLayerImpl> vertical_scrollbar(
       PaintedScrollbarLayerImpl::Create(tree(), 100, VERTICAL));
diff --git a/cc/layers/painted_scrollbar_layer.cc b/cc/layers/painted_scrollbar_layer.cc
index 83c12e8..8f4d675 100644
--- a/cc/layers/painted_scrollbar_layer.cc
+++ b/cc/layers/painted_scrollbar_layer.cc
@@ -6,7 +6,7 @@
 
 #include "base/auto_reset.h"
 #include "base/basictypes.h"
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/layers/painted_scrollbar_layer_impl.h"
 #include "cc/resources/ui_resource_bitmap.h"
 #include "cc/trees/layer_tree_host.h"
diff --git a/cc/layers/picture_image_layer_impl.cc b/cc/layers/picture_image_layer_impl.cc
index cf09654..03ef5ae 100644
--- a/cc/layers/picture_image_layer_impl.cc
+++ b/cc/layers/picture_image_layer_impl.cc
@@ -14,7 +14,10 @@
 PictureImageLayerImpl::PictureImageLayerImpl(LayerTreeImpl* tree_impl,
                                              int id,
                                              bool is_mask)
-    : PictureLayerImpl(tree_impl, id, is_mask) {
+    : PictureLayerImpl(tree_impl,
+                       id,
+                       is_mask,
+                       new LayerImpl::SyncedScrollOffset) {
 }
 
 PictureImageLayerImpl::~PictureImageLayerImpl() {
diff --git a/cc/layers/picture_layer.cc b/cc/layers/picture_layer.cc
index a55318e..0b7d699 100644
--- a/cc/layers/picture_layer.cc
+++ b/cc/layers/picture_layer.cc
@@ -38,7 +38,8 @@
 }
 
 scoped_ptr<LayerImpl> PictureLayer::CreateLayerImpl(LayerTreeImpl* tree_impl) {
-  return PictureLayerImpl::Create(tree_impl, id(), is_mask_);
+  return PictureLayerImpl::Create(tree_impl, id(), is_mask_,
+                                  new LayerImpl::SyncedScrollOffset);
 }
 
 void PictureLayer::PushPropertiesTo(LayerImpl* base_layer) {
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc
index 813bc47..15059ba 100644
--- a/cc/layers/picture_layer_impl.cc
+++ b/cc/layers/picture_layer_impl.cc
@@ -9,8 +9,8 @@
 #include <limits>
 #include <set>
 
-#include "base/debug/trace_event_argument.h"
 #include "base/time/time.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "cc/base/math_util.h"
 #include "cc/base/util.h"
 #include "cc/debug/debug_colors.h"
@@ -65,10 +65,12 @@
 PictureLayerImpl::Pair::~Pair() {
 }
 
-PictureLayerImpl::PictureLayerImpl(LayerTreeImpl* tree_impl,
-                                   int id,
-                                   bool is_mask)
-    : LayerImpl(tree_impl, id),
+PictureLayerImpl::PictureLayerImpl(
+    LayerTreeImpl* tree_impl,
+    int id,
+    bool is_mask,
+    scoped_refptr<SyncedScrollOffset> scroll_offset)
+    : LayerImpl(tree_impl, id, scroll_offset),
       twin_layer_(nullptr),
       tilings_(CreatePictureLayerTilingSet()),
       ideal_page_scale_(0.f),
@@ -100,7 +102,8 @@
 
 scoped_ptr<LayerImpl> PictureLayerImpl::CreateLayerImpl(
     LayerTreeImpl* tree_impl) {
-  return PictureLayerImpl::Create(tree_impl, id(), is_mask_);
+  return PictureLayerImpl::Create(tree_impl, id(), is_mask_,
+                                  synced_scroll_offset());
 }
 
 void PictureLayerImpl::PushPropertiesTo(LayerImpl* base_layer) {
@@ -276,7 +279,7 @@
 
   // Keep track of the tilings that were used so that tilings that are
   // unused can be considered for removal.
-  std::vector<PictureLayerTiling*> seen_tilings;
+  last_append_quads_tilings_.clear();
 
   // Ignore missing tiles outside of viewport for tile priority. This is
   // normally the same as draw viewport but can be independently overridden by
@@ -403,8 +406,10 @@
     if (iter.resolution() != LOW_RESOLUTION)
       only_used_low_res_last_append_quads_ = false;
 
-    if (seen_tilings.empty() || seen_tilings.back() != iter.CurrentTiling())
-      seen_tilings.push_back(iter.CurrentTiling());
+    if (last_append_quads_tilings_.empty() ||
+        last_append_quads_tilings_.back() != iter.CurrentTiling()) {
+      last_append_quads_tilings_.push_back(iter.CurrentTiling());
+    }
   }
 
   if (missing_tile_count) {
@@ -421,7 +426,7 @@
   // that this is at the expense of doing cause more frequent re-painting. A
   // better scheme would be to maintain a tighter visible_content_rect for the
   // finer tilings.
-  CleanUpTilingsOnActiveLayer(seen_tilings);
+  CleanUpTilingsOnActiveLayer(last_append_quads_tilings_);
 }
 
 bool PictureLayerImpl::UpdateTiles(const Occlusion& occlusion_in_content_space,
@@ -442,6 +447,14 @@
     return false;
   }
 
+  // Remove any non-ideal tilings that were not used last time we generated
+  // quads to save memory and processing time. Note that pending tree should
+  // only have one or two tilings (high and low res), so only clean up the
+  // active layer. This cleans it up here in case AppendQuads didn't run.
+  // If it did run, this would not remove any additional tilings.
+  if (GetTree() == ACTIVE_TREE)
+    CleanUpTilingsOnActiveLayer(last_append_quads_tilings_);
+
   UpdateIdealScales();
 
   if (!raster_contents_scale_ || ShouldAdjustRasterScale()) {
@@ -460,7 +473,6 @@
 
   if (draw_transform_is_animating())
     raster_source_->SetShouldAttemptToUseDistanceFieldText();
-
   return UpdateTilePriorities(occlusion_in_content_space);
 }
 
@@ -992,7 +1004,7 @@
 }
 
 void PictureLayerImpl::CleanUpTilingsOnActiveLayer(
-    std::vector<PictureLayerTiling*> used_tilings) {
+    const std::vector<PictureLayerTiling*>& used_tilings) {
   DCHECK(layer_tree_impl()->IsActiveTree());
   if (tilings_->num_tilings() == 0)
     return;
@@ -1222,68 +1234,4 @@
   return IsOnActiveOrPendingTree() && IsDrawnRenderSurfaceLayerListMember();
 }
 
-bool PictureLayerImpl::AllTilesRequiredAreReadyToDraw(
-    TileRequirementCheck is_tile_required_callback) const {
-  if (!HasValidTilePriorities())
-    return true;
-
-  if (!tilings_)
-    return true;
-
-  if (visible_rect_for_tile_priority_.IsEmpty())
-    return true;
-
-  gfx::Rect rect = viewport_rect_for_tile_priority_in_content_space_;
-  rect.Intersect(visible_rect_for_tile_priority_);
-
-  // The high resolution tiling is the only tiling that can mark tiles as
-  // requiring either draw or activation. There is an explicit check in those
-  // callbacks to return false if they are not high resolution tilings. This
-  // check needs to remain since there are other callers of that function that
-  // rely on it. However, for the purposes of this function, we don't have to
-  // check other tilings.
-  PictureLayerTiling* tiling =
-      tilings_->FindTilingWithResolution(HIGH_RESOLUTION);
-  if (!tiling)
-    return true;
-
-  for (PictureLayerTiling::CoverageIterator iter(tiling, 1.f, rect); iter;
-       ++iter) {
-    const Tile* tile = *iter;
-    // A null tile (i.e. missing recording) can just be skipped.
-    // TODO(vmpstr): Verify this is true if we create tiles in raster
-    // iterators.
-    if (!tile)
-      continue;
-
-    // We can't check tile->required_for_activation, because that value might
-    // be out of date. It is updated in the raster/eviction iterators.
-    // TODO(vmpstr): Remove the comment once you can't access this information
-    // from the tile.
-    if ((tiling->*is_tile_required_callback)(tile) && !tile->IsReadyToDraw()) {
-      TRACE_EVENT_INSTANT0("cc", "Tile required, but not ready to draw.",
-                           TRACE_EVENT_SCOPE_THREAD);
-      return false;
-    }
-  }
-
-  return true;
-}
-
-bool PictureLayerImpl::AllTilesRequiredForActivationAreReadyToDraw() const {
-  if (!layer_tree_impl()->IsPendingTree())
-    return true;
-
-  return AllTilesRequiredAreReadyToDraw(
-      &PictureLayerTiling::IsTileRequiredForActivationIfVisible);
-}
-
-bool PictureLayerImpl::AllTilesRequiredForDrawAreReadyToDraw() const {
-  if (!layer_tree_impl()->IsActiveTree())
-    return true;
-
-  return AllTilesRequiredAreReadyToDraw(
-      &PictureLayerTiling::IsTileRequiredForDrawIfVisible);
-}
-
 }  // namespace cc
diff --git a/cc/layers/picture_layer_impl.h b/cc/layers/picture_layer_impl.h
index 86f1424..fa40683 100644
--- a/cc/layers/picture_layer_impl.h
+++ b/cc/layers/picture_layer_impl.h
@@ -38,10 +38,13 @@
     PictureLayerImpl* pending;
   };
 
-  static scoped_ptr<PictureLayerImpl> Create(LayerTreeImpl* tree_impl,
-                                             int id,
-                                             bool is_mask) {
-    return make_scoped_ptr(new PictureLayerImpl(tree_impl, id, is_mask));
+  static scoped_ptr<PictureLayerImpl> Create(
+      LayerTreeImpl* tree_impl,
+      int id,
+      bool is_mask,
+      scoped_refptr<SyncedScrollOffset> scroll_offset) {
+    return make_scoped_ptr(
+        new PictureLayerImpl(tree_impl, id, is_mask, scroll_offset));
   }
   ~PictureLayerImpl() override;
 
@@ -97,8 +100,6 @@
   bool IsOnActiveOrPendingTree() const;
   // Virtual for testing.
   virtual bool HasValidTilePriorities() const;
-  bool AllTilesRequiredForActivationAreReadyToDraw() const;
-  bool AllTilesRequiredForDrawAreReadyToDraw() const;
 
   // Used for benchmarking
   RasterSource* GetRasterSource() const { return raster_source_.get(); }
@@ -107,7 +108,10 @@
   friend class LayerRasterTileIterator;
   using TileRequirementCheck = bool (PictureLayerTiling::*)(const Tile*) const;
 
-  PictureLayerImpl(LayerTreeImpl* tree_impl, int id, bool is_mask);
+  PictureLayerImpl(LayerTreeImpl* tree_impl,
+                   int id,
+                   bool is_mask,
+                   scoped_refptr<SyncedScrollOffset> scroll_offset);
   PictureLayerTiling* AddTiling(float contents_scale);
   void RemoveAllTilings();
   void AddTilingsForRasterScale();
@@ -115,7 +119,7 @@
   virtual bool ShouldAdjustRasterScale() const;
   virtual void RecalculateRasterScales();
   void CleanUpTilingsOnActiveLayer(
-      std::vector<PictureLayerTiling*> used_tilings);
+      const std::vector<PictureLayerTiling*>& used_tilings);
   float MinimumContentsScale() const;
   float MaximumContentsScale() const;
   void ResetRasterScale();
@@ -123,12 +127,6 @@
   PictureLayerImpl* GetRecycledTwinLayer() const;
 
   void SanityCheckTilingState() const;
-  // Checks if all tiles required for a certain action (e.g. activation) are
-  // ready to draw.  is_tile_required_callback gets called on all candidate
-  // tiles and returns true if the tile is required for the action.
-  bool AllTilesRequiredAreReadyToDraw(
-      TileRequirementCheck is_tile_required_callback) const;
-
   bool ShouldAdjustRasterScaleDuringScaleAnimations() const;
 
   void GetDebugBorderProperties(SkColor* color, float* width) const override;
@@ -172,6 +170,13 @@
   gfx::Rect visible_rect_for_tile_priority_;
   gfx::Rect viewport_rect_for_tile_priority_in_content_space_;
 
+  // List of tilings that were used last time we appended quads. This can be
+  // used as an optimization not to remove tilings if they are still being
+  // drawn. Note that accessing this vector should only be done in the context
+  // of comparing pointers, since objects pointed to are not guaranteed to
+  // exist.
+  std::vector<PictureLayerTiling*> last_append_quads_tilings_;
+
   DISALLOW_COPY_AND_ASSIGN(PictureLayerImpl);
 };
 
diff --git a/cc/layers/picture_layer_impl_perftest.cc b/cc/layers/picture_layer_impl_perftest.cc
index c649e69..62f4129 100644
--- a/cc/layers/picture_layer_impl_perftest.cc
+++ b/cc/layers/picture_layer_impl_perftest.cc
@@ -94,7 +94,7 @@
   void RunRasterQueueConstructTest(const std::string& test_name,
                                    const gfx::Rect& viewport) {
     host_impl_.SetViewportSize(viewport.size());
-    pending_layer_->SetScrollOffset(
+    pending_layer_->PushScrollOffsetFromMainThread(
         gfx::ScrollOffset(viewport.x(), viewport.y()));
     host_impl_.pending_tree()->UpdateDrawProperties();
 
@@ -143,7 +143,7 @@
   void RunEvictionQueueConstructTest(const std::string& test_name,
                                      const gfx::Rect& viewport) {
     host_impl_.SetViewportSize(viewport.size());
-    pending_layer_->SetScrollOffset(
+    pending_layer_->PushScrollOffsetFromMainThread(
         gfx::ScrollOffset(viewport.x(), viewport.y()));
     host_impl_.pending_tree()->UpdateDrawProperties();
 
diff --git a/cc/layers/picture_layer_impl_unittest.cc b/cc/layers/picture_layer_impl_unittest.cc
index 79dfec6..0a95f31 100644
--- a/cc/layers/picture_layer_impl_unittest.cc
+++ b/cc/layers/picture_layer_impl_unittest.cc
@@ -636,6 +636,10 @@
   // Add a non-shared tiling on the active tree.
   PictureLayerTiling* tiling = active_layer_->AddTiling(3.f);
   tiling->CreateAllTilesForTesting();
+
+  // Ensure UpdateTiles won't remove any tilings.
+  active_layer_->MarkAllTilingsUsed();
+
   // Then setup a new pending tree and activate it.
   SetupTreesWithFixedTileSize(pending_pile, active_pile, gfx::Size(50, 50),
                               layer_invalidation);
@@ -919,6 +923,9 @@
   EXPECT_BOTH_EQ(tilings()->tiling_at(1)->contents_scale(),
                  2.f * low_res_factor);
 
+  // Ensure UpdateTiles won't remove any tilings.
+  active_layer_->MarkAllTilingsUsed();
+
   // Start a pinch gesture.
   host_impl_.PinchGestureBegin();
 
@@ -933,6 +940,9 @@
   EXPECT_FLOAT_EQ(2.0f * low_res_factor,
                   active_layer_->tilings()->tiling_at(2)->contents_scale());
 
+  // Ensure UpdateTiles won't remove any tilings.
+  active_layer_->MarkAllTilingsUsed();
+
   // Zoom out further, close to our low-res scale factor. We should
   // use that tiling as high-res, and not create a new tiling.
   SetContentsScaleOnBothLayers(low_res_factor * 2.1f, 1.0f,
@@ -969,6 +979,9 @@
   EXPECT_FLOAT_EQ(0.0625f,
                   active_layer_->tilings()->tiling_at(1)->contents_scale());
 
+  // Ensure UpdateTiles won't remove any tilings.
+  active_layer_->MarkAllTilingsUsed();
+
   // Start a pinch gesture.
   host_impl_.PinchGestureBegin();
 
@@ -983,6 +996,9 @@
   EXPECT_FLOAT_EQ(0.0625,
                   active_layer_->tilings()->tiling_at(2)->contents_scale());
 
+  // Ensure UpdateTiles won't remove any tilings.
+  active_layer_->MarkAllTilingsUsed();
+
   // Zoom out further, close to our low-res scale factor. We should
   // use that tiling as high-res, and not create a new tiling.
   SetContentsScaleOnBothLayers(0.1f, 1.0f, 0.1f, 1.0f, false);
@@ -1022,6 +1038,11 @@
   EXPECT_EQ(2u, active_layer_->tilings()->num_tilings());
   EXPECT_EQ(1.f, active_layer_->HighResTiling()->contents_scale());
 
+  // Ensure UpdateTiles won't remove any tilings. Note this is unrelated to
+  // |used_tilings| variable, and it's here only to ensure that active_layer_
+  // won't remove tilings before the test has a chance to verify behavior.
+  active_layer_->MarkAllTilingsUsed();
+
   // We only have ideal tilings, so they aren't removed.
   used_tilings.clear();
   active_layer_->CleanUpTilingsOnActiveLayer(used_tilings);
@@ -1054,6 +1075,9 @@
       1.f * low_res_factor,
       active_layer_->tilings()->tiling_at(3)->contents_scale());
 
+  // Ensure UpdateTiles won't remove any tilings.
+  active_layer_->MarkAllTilingsUsed();
+
   // Mark the non-ideal tilings as used. They won't be removed.
   used_tilings.clear();
   used_tilings.push_back(active_layer_->tilings()->tiling_at(1));
@@ -1146,6 +1170,9 @@
   EXPECT_BOTH_EQ(LowResTiling()->contents_scale(), low_res_factor);
   EXPECT_BOTH_EQ(num_tilings(), 2u);
 
+  // Ensure UpdateTiles won't remove any tilings.
+  active_layer_->MarkAllTilingsUsed();
+
   // Page scale animation, new high res, but no low res. We still have
   // a tiling at the previous scale, it's just not marked as low res on the
   // active layer. The pending layer drops non-ideal tilings.
@@ -3255,18 +3282,18 @@
   SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, invalidation);
 
   // All pending layer tiles required are not ready.
-  EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw());
+  EXPECT_FALSE(host_impl_.tile_manager()->IsReadyToActivate());
 
   // Initialize all low-res tiles.
   pending_layer_->SetAllTilesReadyInTiling(pending_layer_->LowResTiling());
 
   // Low-res tiles should not be enough.
-  EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw());
+  EXPECT_FALSE(host_impl_.tile_manager()->IsReadyToActivate());
 
   // Initialize remaining tiles.
   pending_layer_->SetAllTilesReady();
 
-  EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw());
+  EXPECT_TRUE(host_impl_.tile_manager()->IsReadyToActivate());
 }
 
 TEST_F(PictureLayerImplTest, HighResReadyToDrawEnoughToActivate) {
@@ -3278,13 +3305,13 @@
   SetupDefaultTreesWithFixedTileSize(layer_bounds, tile_size, invalidation);
 
   // All pending layer tiles required are not ready.
-  EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw());
+  EXPECT_FALSE(host_impl_.tile_manager()->IsReadyToActivate());
 
   // Initialize all high-res tiles.
   pending_layer_->SetAllTilesReadyInTiling(pending_layer_->HighResTiling());
 
   // High-res tiles should be enough, since they cover everything visible.
-  EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw());
+  EXPECT_TRUE(host_impl_.tile_manager()->IsReadyToActivate());
 }
 
 TEST_F(PictureLayerImplTest,
@@ -3302,11 +3329,11 @@
   pending_layer_->SetAllTilesReadyInTiling(pending_layer_->LowResTiling());
 
   // The unshared high-res tiles are not ready, so we cannot activate.
-  EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw());
+  EXPECT_FALSE(host_impl_.tile_manager()->IsReadyToActivate());
 
   // When the unshared pending high-res tiles are ready, we can activate.
   pending_layer_->SetAllTilesReadyInTiling(pending_layer_->HighResTiling());
-  EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw());
+  EXPECT_TRUE(host_impl_.tile_manager()->IsReadyToActivate());
 }
 
 TEST_F(PictureLayerImplTest, SharedActiveHighResReadyNotEnoughToActivate) {
@@ -3321,11 +3348,11 @@
   active_layer_->SetAllTilesReadyInTiling(active_layer_->HighResTiling());
 
   // The unshared high-res tiles are not ready, so we cannot activate.
-  EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw());
+  EXPECT_FALSE(host_impl_.tile_manager()->IsReadyToActivate());
 
   // When the unshared pending high-res tiles are ready, we can activate.
   pending_layer_->SetAllTilesReadyInTiling(pending_layer_->HighResTiling());
-  EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw());
+  EXPECT_TRUE(host_impl_.tile_manager()->IsReadyToActivate());
 }
 
 TEST_F(NoLowResPictureLayerImplTest, ManageTilingsCreatesTilings) {
@@ -3612,6 +3639,11 @@
   SetContentsScaleOnBothLayers(scale, device_scale, page_scale, 1.f, false);
   ASSERT_EQ(1u, active_layer_->tilings()->num_tilings());
 
+  // Ensure UpdateTiles won't remove any tilings. Note this is unrelated to
+  // |used_tilings| variable, and it's here only to ensure that active_layer_
+  // won't remove tilings before the test has a chance to verify behavior.
+  active_layer_->MarkAllTilingsUsed();
+
   // We only have ideal tilings, so they aren't removed.
   used_tilings.clear();
   active_layer_->CleanUpTilingsOnActiveLayer(used_tilings);
@@ -3640,6 +3672,9 @@
   EXPECT_FLOAT_EQ(1.f,
                   active_layer_->tilings()->tiling_at(1)->contents_scale());
 
+  // Ensure UpdateTiles won't remove any tilings.
+  active_layer_->MarkAllTilingsUsed();
+
   // Mark the non-ideal tilings as used. They won't be removed.
   used_tilings.clear();
   used_tilings.push_back(active_layer_->tilings()->tiling_at(1));
@@ -4732,7 +4767,7 @@
   pending_layer_->HighResTiling()->UpdateAllTilePrioritiesForTesting();
 
   // Ensure we can't activate.
-  EXPECT_FALSE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw());
+  EXPECT_FALSE(host_impl_.tile_manager()->IsReadyToActivate());
 
   // Now in the same frame, move the viewport (this can happen during
   // animation).
@@ -4759,7 +4794,7 @@
   host_impl_.tile_manager()->InitializeTilesWithResourcesForTesting(tiles);
 
   // Ensure we can activate.
-  EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw());
+  EXPECT_TRUE(host_impl_.tile_manager()->IsReadyToActivate());
 }
 
 TEST_F(PictureLayerImplTest, CloneMissingRecordings) {
diff --git a/cc/layers/scrollbar_layer_impl_base.cc b/cc/layers/scrollbar_layer_impl_base.cc
index beac79f..35e716b 100644
--- a/cc/layers/scrollbar_layer_impl_base.cc
+++ b/cc/layers/scrollbar_layer_impl_base.cc
@@ -33,8 +33,10 @@
 
 void ScrollbarLayerImplBase::PushPropertiesTo(LayerImpl* layer) {
   float active_opacity = layer->opacity();
+  bool active_hidden = layer->hide_layer_and_subtree();
   LayerImpl::PushPropertiesTo(layer);
   layer->SetOpacity(active_opacity);
+  layer->SetHideLayerAndSubtree(active_hidden);
   DCHECK(layer->ToScrollbarLayer());
   layer->ToScrollbarLayer()->set_is_overlay_scrollbar(is_overlay_scrollbar_);
   PushScrollClipPropertiesTo(layer);
diff --git a/cc/layers/surface_layer_impl.cc b/cc/layers/surface_layer_impl.cc
index 4fb9d95..c3df89b 100644
--- a/cc/layers/surface_layer_impl.cc
+++ b/cc/layers/surface_layer_impl.cc
@@ -4,7 +4,7 @@
 
 #include "cc/layers/surface_layer_impl.h"
 
-#include "base/debug/trace_event_argument.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "cc/debug/debug_colors.h"
 #include "cc/quads/surface_draw_quad.h"
 #include "cc/trees/occlusion.h"
diff --git a/cc/layers/tiled_layer_impl.cc b/cc/layers/tiled_layer_impl.cc
index 5816fc5..535744d 100644
--- a/cc/layers/tiled_layer_impl.cc
+++ b/cc/layers/tiled_layer_impl.cc
@@ -5,8 +5,8 @@
 #include "cc/layers/tiled_layer_impl.h"
 
 #include "base/basictypes.h"
-#include "base/debug/trace_event_argument.h"
 #include "base/strings/stringprintf.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "cc/base/math_util.h"
 #include "cc/base/simple_enclosed_region.h"
 #include "cc/debug/debug_colors.h"
@@ -48,7 +48,15 @@
 };
 
 TiledLayerImpl::TiledLayerImpl(LayerTreeImpl* tree_impl, int id)
-    : LayerImpl(tree_impl, id), skips_draw_(true) {}
+    : TiledLayerImpl(tree_impl, id, new LayerImpl::SyncedScrollOffset) {
+}
+
+TiledLayerImpl::TiledLayerImpl(
+    LayerTreeImpl* tree_impl,
+    int id,
+    scoped_refptr<LayerImpl::SyncedScrollOffset> synced_scroll_offset)
+    : LayerImpl(tree_impl, id, synced_scroll_offset), skips_draw_(true) {
+}
 
 TiledLayerImpl::~TiledLayerImpl() {
 }
@@ -102,7 +110,7 @@
 
 scoped_ptr<LayerImpl> TiledLayerImpl::CreateLayerImpl(
     LayerTreeImpl* tree_impl) {
-  return TiledLayerImpl::Create(tree_impl, id());
+  return TiledLayerImpl::Create(tree_impl, id(), synced_scroll_offset());
 }
 
 void TiledLayerImpl::AsValueInto(base::debug::TracedValue* state) const {
diff --git a/cc/layers/tiled_layer_impl.h b/cc/layers/tiled_layer_impl.h
index e3ace34..039bf19 100644
--- a/cc/layers/tiled_layer_impl.h
+++ b/cc/layers/tiled_layer_impl.h
@@ -18,7 +18,15 @@
 class CC_EXPORT TiledLayerImpl : public LayerImpl {
  public:
   static scoped_ptr<TiledLayerImpl> Create(LayerTreeImpl* tree_impl, int id) {
-    return make_scoped_ptr(new TiledLayerImpl(tree_impl, id));
+    return make_scoped_ptr(
+        new TiledLayerImpl(tree_impl, id, new LayerImpl::SyncedScrollOffset));
+  }
+  static scoped_ptr<TiledLayerImpl> Create(
+      LayerTreeImpl* tree_impl,
+      int id,
+      scoped_refptr<LayerImpl::SyncedScrollOffset> synced_scroll_offset) {
+    return make_scoped_ptr(
+        new TiledLayerImpl(tree_impl, id, synced_scroll_offset));
   }
   ~TiledLayerImpl() override;
 
@@ -51,6 +59,10 @@
 
  protected:
   TiledLayerImpl(LayerTreeImpl* tree_impl, int id);
+  TiledLayerImpl(
+      LayerTreeImpl* tree_impl,
+      int id,
+      scoped_refptr<LayerImpl::SyncedScrollOffset> synced_scroll_offset);
   // Exposed for testing.
   bool HasTileAt(int i, int j) const;
   bool HasResourceIdForTileAt(int i, int j) const;
diff --git a/cc/layers/video_frame_provider_client_impl.cc b/cc/layers/video_frame_provider_client_impl.cc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/cc/layers/video_frame_provider_client_impl.cc
diff --git a/cc/layers/video_layer_impl.cc b/cc/layers/video_layer_impl.cc
index 5f18a76..091f2a9 100644
--- a/cc/layers/video_layer_impl.cc
+++ b/cc/layers/video_layer_impl.cc
@@ -230,16 +230,10 @@
       YUVVideoDrawQuad* yuv_video_quad =
           render_pass->CreateAndAppendDrawQuad<YUVVideoDrawQuad>();
       yuv_video_quad->SetNew(
-          shared_quad_state,
-          quad_rect,
-          opaque_rect,
-          visible_quad_rect,
-          tex_coord_rect,
-          frame_resources_[0],
-          frame_resources_[1],
+          shared_quad_state, quad_rect, opaque_rect, visible_quad_rect,
+          tex_coord_rect, coded_size, frame_resources_[0], frame_resources_[1],
           frame_resources_[2],
-          frame_resources_.size() > 3 ? frame_resources_[3] : 0,
-          color_space);
+          frame_resources_.size() > 3 ? frame_resources_[3] : 0, color_space);
       break;
     }
     case VideoFrameExternalResources::RGB_RESOURCE: {
diff --git a/cc/output/begin_frame_args.cc b/cc/output/begin_frame_args.cc
index d08e60a..acf24aa 100644
--- a/cc/output/begin_frame_args.cc
+++ b/cc/output/begin_frame_args.cc
@@ -4,7 +4,7 @@
 
 #include "cc/output/begin_frame_args.h"
 
-#include "base/debug/trace_event_argument.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "ui/gfx/frame_time.h"
 
 namespace cc {
diff --git a/cc/output/copy_output_request.cc b/cc/output/copy_output_request.cc
index 97b95e1..53257bf 100644
--- a/cc/output/copy_output_request.cc
+++ b/cc/output/copy_output_request.cc
@@ -6,8 +6,8 @@
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/output/copy_output_result.h"
 #include "cc/resources/texture_mailbox.h"
 #include "third_party/skia/include/core/SkBitmap.h"
diff --git a/cc/output/delegating_renderer.cc b/cc/output/delegating_renderer.cc
index 75fc2d6c..0944ef4 100644
--- a/cc/output/delegating_renderer.cc
+++ b/cc/output/delegating_renderer.cc
@@ -8,7 +8,7 @@
 #include <string>
 #include <vector>
 
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/output/compositor_frame_ack.h"
 #include "cc/output/context_provider.h"
 #include "cc/quads/draw_quad.h"
diff --git a/cc/output/direct_renderer.cc b/cc/output/direct_renderer.cc
index 93d7fb1..65a94d8 100644
--- a/cc/output/direct_renderer.cc
+++ b/cc/output/direct_renderer.cc
@@ -9,8 +9,8 @@
 
 #include "base/containers/hash_tables.h"
 #include "base/containers/scoped_ptr_hash_map.h"
-#include "base/debug/trace_event.h"
 #include "base/metrics/histogram.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/base/math_util.h"
 #include "cc/output/copy_output_request.h"
 #include "cc/quads/draw_quad.h"
diff --git a/cc/output/filter_operation.cc b/cc/output/filter_operation.cc
index b4a84bd..e01b901 100644
--- a/cc/output/filter_operation.cc
+++ b/cc/output/filter_operation.cc
@@ -4,7 +4,7 @@
 
 #include <algorithm>
 
-#include "base/debug/trace_event_argument.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "base/values.h"
 #include "cc/base/math_util.h"
 #include "cc/output/filter_operation.h"
diff --git a/cc/output/filter_operations.cc b/cc/output/filter_operations.cc
index dcdd480..96c316c 100644
--- a/cc/output/filter_operations.cc
+++ b/cc/output/filter_operations.cc
@@ -6,7 +6,7 @@
 
 #include <cmath>
 
-#include "base/debug/trace_event_argument.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "base/values.h"
 #include "cc/output/filter_operation.h"
 
diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc
index e40a4fc..5a15efa 100644
--- a/cc/output/gl_renderer.cc
+++ b/cc/output/gl_renderer.cc
@@ -10,8 +10,8 @@
 #include <string>
 #include <vector>
 
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/base/math_util.h"
 #include "cc/output/compositor_frame.h"
 #include "cc/output/compositor_frame_metadata.h"
@@ -1831,6 +1831,7 @@
   int matrix_location = -1;
   int tex_scale_location = -1;
   int tex_offset_location = -1;
+  int clamp_rect_location = -1;
   int y_texture_location = -1;
   int u_texture_location = -1;
   int v_texture_location = -1;
@@ -1851,6 +1852,7 @@
     a_texture_location = program->fragment_shader().a_texture_location();
     yuv_matrix_location = program->fragment_shader().yuv_matrix_location();
     yuv_adj_location = program->fragment_shader().yuv_adj_location();
+    clamp_rect_location = program->fragment_shader().clamp_rect_location();
     alpha_location = program->fragment_shader().alpha_location();
   } else {
     const VideoYUVProgram* program = GetVideoYUVProgram(tex_coord_precision);
@@ -1864,6 +1866,7 @@
     v_texture_location = program->fragment_shader().v_texture_location();
     yuv_matrix_location = program->fragment_shader().yuv_matrix_location();
     yuv_adj_location = program->fragment_shader().yuv_adj_location();
+    clamp_rect_location = program->fragment_shader().clamp_rect_location();
     alpha_location = program->fragment_shader().alpha_location();
   }
 
@@ -1875,6 +1878,17 @@
       gl_->Uniform2f(tex_offset_location,
                      quad->tex_coord_rect.x(),
                      quad->tex_coord_rect.y()));
+  // Clamping to half a texel inside the tex coord rect prevents bilinear
+  // filtering from filtering outside the tex coord rect.
+  gfx::RectF clamp_rect(quad->tex_coord_rect);
+  // Special case: empty texture size implies no clamping.
+  if (!quad->tex_size.IsEmpty()) {
+    clamp_rect.Inset(0.5f / quad->tex_size.width(),
+                     0.5f / quad->tex_size.height());
+  }
+  GLC(gl_, gl_->Uniform4f(clamp_rect_location, clamp_rect.x(), clamp_rect.y(),
+                          clamp_rect.right(), clamp_rect.bottom()));
+
   GLC(gl_, gl_->Uniform1i(y_texture_location, 1));
   GLC(gl_, gl_->Uniform1i(u_texture_location, 2));
   GLC(gl_, gl_->Uniform1i(v_texture_location, 3));
diff --git a/cc/output/output_surface.cc b/cc/output/output_surface.cc
index 3502927..b65887e 100644
--- a/cc/output/output_surface.cc
+++ b/cc/output/output_surface.cc
@@ -5,8 +5,8 @@
 #include "cc/output/output_surface.h"
 
 #include "base/bind.h"
-#include "base/debug/trace_event.h"
 #include "base/message_loop/message_loop.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/output/managed_memory_policy.h"
 #include "cc/output/output_surface_client.h"
 #include "gpu/GLES2/gl2extchromium.h"
diff --git a/cc/output/program_binding.cc b/cc/output/program_binding.cc
index 9a5bc81..7809e10 100644
--- a/cc/output/program_binding.cc
+++ b/cc/output/program_binding.cc
@@ -4,7 +4,7 @@
 
 #include "cc/output/program_binding.h"
 
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/output/geometry_binding.h"
 #include "gpu/command_buffer/client/gles2_interface.h"
 
diff --git a/cc/output/shader.cc b/cc/output/shader.cc
index 5bc7044..eb0dede 100644
--- a/cc/output/shader.cc
+++ b/cc/output/shader.cc
@@ -1741,15 +1741,20 @@
       v_texture_location_(-1),
       alpha_location_(-1),
       yuv_matrix_location_(-1),
-      yuv_adj_location_(-1) {
+      yuv_adj_location_(-1),
+      clamp_rect_location_(-1) {
 }
 
 void FragmentShaderYUVVideo::Init(GLES2Interface* context,
                                   unsigned program,
                                   int* base_uniform_index) {
-  static const char* uniforms[] = {
-      "y_texture", "u_texture", "v_texture", "alpha", "yuv_matrix", "yuv_adj",
-  };
+  static const char* uniforms[] = {"y_texture",
+                                   "u_texture",
+                                   "v_texture",
+                                   "alpha",
+                                   "yuv_matrix",
+                                   "yuv_adj",
+                                   "clamp_rect"};
   int locations[arraysize(uniforms)];
 
   GetProgramUniformLocations(context,
@@ -1764,6 +1769,7 @@
   alpha_location_ = locations[3];
   yuv_matrix_location_ = locations[4];
   yuv_adj_location_ = locations[5];
+  clamp_rect_location_ = locations[6];
 }
 
 std::string FragmentShaderYUVVideo::GetShaderString(TexCoordPrecision precision,
@@ -1780,10 +1786,12 @@
       uniform float alpha;
       uniform vec3 yuv_adj;
       uniform mat3 yuv_matrix;
+      uniform vec4 clamp_rect;
       void main() {
-        float y_raw = TextureLookup(y_texture, v_texCoord).x;
-        float u_unsigned = TextureLookup(u_texture, v_texCoord).x;
-        float v_unsigned = TextureLookup(v_texture, v_texCoord).x;
+        vec2 clamped = max(clamp_rect.xy, min(clamp_rect.zw, v_texCoord));
+        float y_raw = TextureLookup(y_texture, clamped).x;
+        float u_unsigned = TextureLookup(u_texture, clamped).x;
+        float v_unsigned = TextureLookup(v_texture, clamped).x;
         vec3 yuv = vec3(y_raw, u_unsigned, v_unsigned) + yuv_adj;
         vec3 rgb = yuv_matrix * yuv;
         gl_FragColor = vec4(rgb, 1.0) * alpha;
@@ -1814,6 +1822,7 @@
       "alpha",
       "cc_matrix",
       "yuv_adj",
+      "clamp_rect",
   };
   int locations[arraysize(uniforms)];
 
@@ -1830,6 +1839,7 @@
   alpha_location_ = locations[4];
   yuv_matrix_location_ = locations[5];
   yuv_adj_location_ = locations[6];
+  clamp_rect_location_ = locations[7];
 }
 
 std::string FragmentShaderYUVAVideo::GetShaderString(
@@ -1848,11 +1858,13 @@
       uniform float alpha;
       uniform vec3 yuv_adj;
       uniform mat3 yuv_matrix;
+      uniform vec4 clamp_rect;
       void main() {
-        float y_raw = TextureLookup(y_texture, v_texCoord).x;
-        float u_unsigned = TextureLookup(u_texture, v_texCoord).x;
-        float v_unsigned = TextureLookup(v_texture, v_texCoord).x;
-        float a_raw = TextureLookup(a_texture, v_texCoord).x;
+        vec2 clamped = max(clamp_rect.xy, min(clamp_rect.zw, v_texCoord));
+        float y_raw = TextureLookup(y_texture, clamped).x;
+        float u_unsigned = TextureLookup(u_texture, clamped).x;
+        float v_unsigned = TextureLookup(v_texture, clamped).x;
+        float a_raw = TextureLookup(a_texture, clamped).x;
         vec3 yuv = vec3(y_raw, u_unsigned, v_unsigned) + yuv_adj;
         vec3 rgb = yuv_matrix * yuv;
         gl_FragColor = vec4(rgb, 1.0) * (alpha * a_raw);
diff --git a/cc/output/shader.h b/cc/output/shader.h
index 8c1f264..5adca47 100644
--- a/cc/output/shader.h
+++ b/cc/output/shader.h
@@ -676,6 +676,7 @@
   int alpha_location() const { return alpha_location_; }
   int yuv_matrix_location() const { return yuv_matrix_location_; }
   int yuv_adj_location() const { return yuv_adj_location_; }
+  int clamp_rect_location() const { return clamp_rect_location_; }
 
  private:
   int y_texture_location_;
@@ -684,6 +685,7 @@
   int alpha_location_;
   int yuv_matrix_location_;
   int yuv_adj_location_;
+  int clamp_rect_location_;
 
   DISALLOW_COPY_AND_ASSIGN(FragmentShaderYUVVideo);
 };
@@ -705,6 +707,7 @@
   int alpha_location() const { return alpha_location_; }
   int yuv_matrix_location() const { return yuv_matrix_location_; }
   int yuv_adj_location() const { return yuv_adj_location_; }
+  int clamp_rect_location() const { return clamp_rect_location_; }
 
  private:
   int y_texture_location_;
@@ -714,6 +717,7 @@
   int alpha_location_;
   int yuv_matrix_location_;
   int yuv_adj_location_;
+  int clamp_rect_location_;
 
   DISALLOW_COPY_AND_ASSIGN(FragmentShaderYUVAVideo);
 };
diff --git a/cc/output/software_renderer.cc b/cc/output/software_renderer.cc
index 1b18648..ceedac6 100644
--- a/cc/output/software_renderer.cc
+++ b/cc/output/software_renderer.cc
@@ -4,7 +4,7 @@
 
 #include "cc/output/software_renderer.h"
 
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/base/math_util.h"
 #include "cc/output/compositor_frame.h"
 #include "cc/output/compositor_frame_ack.h"
diff --git a/cc/quads/draw_quad_unittest.cc b/cc/quads/draw_quad_unittest.cc
index b9a4d1a..6b51398 100644
--- a/cc/quads/draw_quad_unittest.cc
+++ b/cc/quads/draw_quad_unittest.cc
@@ -638,6 +638,7 @@
   gfx::Rect opaque_rect(33, 47, 10, 12);
   gfx::Rect visible_rect(40, 50, 30, 20);
   gfx::RectF tex_coord_rect(0.0f, 0.0f, 0.75f, 0.5f);
+  gfx::Size tex_size(32, 68);
   ResourceProvider::ResourceId y_plane_resource_id = 45;
   ResourceProvider::ResourceId u_plane_resource_id = 532;
   ResourceProvider::ResourceId v_plane_resource_id = 4;
@@ -645,34 +646,26 @@
   YUVVideoDrawQuad::ColorSpace color_space = YUVVideoDrawQuad::REC_601_JPEG;
   CREATE_SHARED_STATE();
 
-  CREATE_QUAD_8_NEW(YUVVideoDrawQuad,
-                    opaque_rect,
-                    visible_rect,
-                    tex_coord_rect,
-                    y_plane_resource_id,
-                    u_plane_resource_id,
-                    v_plane_resource_id,
-                    a_plane_resource_id,
-                    color_space);
+  CREATE_QUAD_9_NEW(YUVVideoDrawQuad, opaque_rect, visible_rect, tex_coord_rect,
+                    tex_size, y_plane_resource_id, u_plane_resource_id,
+                    v_plane_resource_id, a_plane_resource_id, color_space);
   EXPECT_EQ(DrawQuad::YUV_VIDEO_CONTENT, copy_quad->material);
   EXPECT_EQ(opaque_rect, copy_quad->opaque_rect);
   EXPECT_EQ(visible_rect, copy_quad->visible_rect);
   EXPECT_EQ(tex_coord_rect, copy_quad->tex_coord_rect);
+  EXPECT_EQ(tex_size, copy_quad->tex_size);
   EXPECT_EQ(y_plane_resource_id, copy_quad->y_plane_resource_id);
   EXPECT_EQ(u_plane_resource_id, copy_quad->u_plane_resource_id);
   EXPECT_EQ(v_plane_resource_id, copy_quad->v_plane_resource_id);
   EXPECT_EQ(a_plane_resource_id, copy_quad->a_plane_resource_id);
   EXPECT_EQ(color_space, copy_quad->color_space);
 
-  CREATE_QUAD_6_ALL(YUVVideoDrawQuad,
-                    tex_coord_rect,
-                    y_plane_resource_id,
-                    u_plane_resource_id,
-                    v_plane_resource_id,
-                    a_plane_resource_id,
-                    color_space);
+  CREATE_QUAD_7_ALL(YUVVideoDrawQuad, tex_coord_rect, tex_size,
+                    y_plane_resource_id, u_plane_resource_id,
+                    v_plane_resource_id, a_plane_resource_id, color_space);
   EXPECT_EQ(DrawQuad::YUV_VIDEO_CONTENT, copy_quad->material);
   EXPECT_EQ(tex_coord_rect, copy_quad->tex_coord_rect);
+  EXPECT_EQ(tex_size, copy_quad->tex_size);
   EXPECT_EQ(y_plane_resource_id, copy_quad->y_plane_resource_id);
   EXPECT_EQ(u_plane_resource_id, copy_quad->u_plane_resource_id);
   EXPECT_EQ(v_plane_resource_id, copy_quad->v_plane_resource_id);
@@ -901,6 +894,7 @@
   gfx::Rect opaque_rect(33, 47, 10, 12);
   gfx::Rect visible_rect(40, 50, 30, 20);
   gfx::RectF tex_coord_rect(0.0f, 0.0f, 0.75f, 0.5f);
+  gfx::Size tex_size(32, 68);
   ResourceProvider::ResourceId y_plane_resource_id = 45;
   ResourceProvider::ResourceId u_plane_resource_id = 532;
   ResourceProvider::ResourceId v_plane_resource_id = 4;
@@ -908,15 +902,9 @@
   YUVVideoDrawQuad::ColorSpace color_space = YUVVideoDrawQuad::REC_601_JPEG;
 
   CREATE_SHARED_STATE();
-  CREATE_QUAD_8_NEW(YUVVideoDrawQuad,
-                    opaque_rect,
-                    visible_rect,
-                    tex_coord_rect,
-                    y_plane_resource_id,
-                    u_plane_resource_id,
-                    v_plane_resource_id,
-                    a_plane_resource_id,
-                    color_space);
+  CREATE_QUAD_9_NEW(YUVVideoDrawQuad, opaque_rect, visible_rect, tex_coord_rect,
+                    tex_size, y_plane_resource_id, u_plane_resource_id,
+                    v_plane_resource_id, a_plane_resource_id, color_space);
   EXPECT_EQ(DrawQuad::YUV_VIDEO_CONTENT, copy_quad->material);
   EXPECT_EQ(y_plane_resource_id, quad_new->y_plane_resource_id);
   EXPECT_EQ(u_plane_resource_id, quad_new->u_plane_resource_id);
diff --git a/cc/quads/yuv_video_draw_quad.cc b/cc/quads/yuv_video_draw_quad.cc
index 5d0fc55..38b726d 100644
--- a/cc/quads/yuv_video_draw_quad.cc
+++ b/cc/quads/yuv_video_draw_quad.cc
@@ -23,6 +23,7 @@
                               const gfx::Rect& opaque_rect,
                               const gfx::Rect& visible_rect,
                               const gfx::RectF& tex_coord_rect,
+                              const gfx::Size& tex_size,
                               unsigned y_plane_resource_id,
                               unsigned u_plane_resource_id,
                               unsigned v_plane_resource_id,
@@ -32,6 +33,7 @@
   DrawQuad::SetAll(shared_quad_state, DrawQuad::YUV_VIDEO_CONTENT, rect,
                    opaque_rect, visible_rect, needs_blending);
   this->tex_coord_rect = tex_coord_rect;
+  this->tex_size = tex_size;
   this->y_plane_resource_id = y_plane_resource_id;
   this->u_plane_resource_id = u_plane_resource_id;
   this->v_plane_resource_id = v_plane_resource_id;
@@ -45,6 +47,7 @@
                               const gfx::Rect& visible_rect,
                               bool needs_blending,
                               const gfx::RectF& tex_coord_rect,
+                              const gfx::Size& tex_size,
                               unsigned y_plane_resource_id,
                               unsigned u_plane_resource_id,
                               unsigned v_plane_resource_id,
@@ -53,6 +56,7 @@
   DrawQuad::SetAll(shared_quad_state, DrawQuad::YUV_VIDEO_CONTENT, rect,
                    opaque_rect, visible_rect, needs_blending);
   this->tex_coord_rect = tex_coord_rect;
+  this->tex_size = tex_size;
   this->y_plane_resource_id = y_plane_resource_id;
   this->u_plane_resource_id = u_plane_resource_id;
   this->v_plane_resource_id = v_plane_resource_id;
@@ -77,6 +81,7 @@
 
 void YUVVideoDrawQuad::ExtendValue(base::debug::TracedValue* value) const {
   MathUtil::AddToTracedValue("tex_coord_rect", tex_coord_rect, value);
+  MathUtil::AddToTracedValue("tex_size", tex_size, value);
   value->SetInteger("y_plane_resource_id", y_plane_resource_id);
   value->SetInteger("u_plane_resource_id", u_plane_resource_id);
   value->SetInteger("v_plane_resource_id", v_plane_resource_id);
diff --git a/cc/quads/yuv_video_draw_quad.h b/cc/quads/yuv_video_draw_quad.h
index edda34a..7ad0ba4 100644
--- a/cc/quads/yuv_video_draw_quad.h
+++ b/cc/quads/yuv_video_draw_quad.h
@@ -29,6 +29,7 @@
               const gfx::Rect& opaque_rect,
               const gfx::Rect& visible_rect,
               const gfx::RectF& tex_coord_rect,
+              const gfx::Size& tex_size,
               unsigned y_plane_resource_id,
               unsigned u_plane_resource_id,
               unsigned v_plane_resource_id,
@@ -41,6 +42,7 @@
               const gfx::Rect& visible_rect,
               bool needs_blending,
               const gfx::RectF& tex_coord_rect,
+              const gfx::Size& tex_size,
               unsigned y_plane_resource_id,
               unsigned u_plane_resource_id,
               unsigned v_plane_resource_id,
@@ -48,6 +50,8 @@
               ColorSpace color_space);
 
   gfx::RectF tex_coord_rect;
+  // Empty texture size implies no clamping of texture coordinates.
+  gfx::Size tex_size;
   unsigned y_plane_resource_id;
   unsigned u_plane_resource_id;
   unsigned v_plane_resource_id;
diff --git a/cc/resources/bitmap_tile_task_worker_pool.cc b/cc/resources/bitmap_tile_task_worker_pool.cc
index 1dc9377..77abd8d 100644
--- a/cc/resources/bitmap_tile_task_worker_pool.cc
+++ b/cc/resources/bitmap_tile_task_worker_pool.cc
@@ -128,7 +128,8 @@
 
   for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set) {
     InsertNodeForTask(&graph_, new_task_set_finished_tasks[task_set].get(),
-                      kTaskSetFinishedTaskPriority, task_count[task_set]);
+                      kTaskSetFinishedTaskPriorityBase + task_set,
+                      task_count[task_set]);
   }
 
   ScheduleTasksOnOriginThread(this, &graph_);
diff --git a/cc/resources/clip_display_item.cc b/cc/resources/clip_display_item.cc
index 731c605..5a34dac 100644
--- a/cc/resources/clip_display_item.cc
+++ b/cc/resources/clip_display_item.cc
@@ -4,7 +4,12 @@
 
 #include "cc/resources/clip_display_item.h"
 
+#include <string>
+
+#include "base/strings/stringprintf.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "third_party/skia/include/core/SkCanvas.h"
+#include "ui/gfx/skia_util.h"
 
 namespace cc {
 
@@ -48,6 +53,32 @@
   return total_size;
 }
 
+void ClipDisplayItem::AsValueInto(base::debug::TracedValue* array) const {
+  std::string value = base::StringPrintf("ClipDisplayItem rect: [%s]",
+                                         clip_rect_.ToString().c_str());
+  for (const SkRRect& rounded_rect : rounded_clip_rects_) {
+    base::StringAppendF(
+        &value, " rounded_rect: [rect: [%s]",
+        gfx::SkRectToRectF(rounded_rect.rect()).ToString().c_str());
+    base::StringAppendF(&value, " radii: [");
+    SkVector upper_left_radius = rounded_rect.radii(SkRRect::kUpperLeft_Corner);
+    base::StringAppendF(&value, "[%f,%f],", upper_left_radius.x(),
+                        upper_left_radius.y());
+    SkVector upper_right_radius =
+        rounded_rect.radii(SkRRect::kUpperRight_Corner);
+    base::StringAppendF(&value, " [%f,%f],", upper_right_radius.x(),
+                        upper_right_radius.y());
+    SkVector lower_right_radius =
+        rounded_rect.radii(SkRRect::kLowerRight_Corner);
+    base::StringAppendF(&value, " [%f,%f],", lower_right_radius.x(),
+                        lower_right_radius.y());
+    SkVector lower_left_radius = rounded_rect.radii(SkRRect::kLowerLeft_Corner);
+    base::StringAppendF(&value, " [%f,%f]]", lower_left_radius.x(),
+                        lower_left_radius.y());
+  }
+  array->AppendString(value);
+}
+
 EndClipDisplayItem::EndClipDisplayItem() {
 }
 
@@ -71,4 +102,8 @@
   return 0;
 }
 
+void EndClipDisplayItem::AsValueInto(base::debug::TracedValue* array) const {
+  array->AppendString("EndClipDisplayItem");
+}
+
 }  // namespace cc
diff --git a/cc/resources/clip_display_item.h b/cc/resources/clip_display_item.h
index 2060393..70725f3 100644
--- a/cc/resources/clip_display_item.h
+++ b/cc/resources/clip_display_item.h
@@ -33,6 +33,7 @@
   bool IsSuitableForGpuRasterization() const override;
   int ApproximateOpCount() const override;
   size_t PictureMemoryUsage() const override;
+  void AsValueInto(base::debug::TracedValue* array) const override;
 
  protected:
   ClipDisplayItem(gfx::Rect clip_rect,
@@ -56,6 +57,7 @@
   bool IsSuitableForGpuRasterization() const override;
   int ApproximateOpCount() const override;
   size_t PictureMemoryUsage() const override;
+  void AsValueInto(base::debug::TracedValue* array) const override;
 
  protected:
   EndClipDisplayItem();
diff --git a/cc/resources/clip_path_display_item.cc b/cc/resources/clip_path_display_item.cc
index 4012124..1600e55 100644
--- a/cc/resources/clip_path_display_item.cc
+++ b/cc/resources/clip_path_display_item.cc
@@ -4,6 +4,8 @@
 
 #include "cc/resources/clip_path_display_item.h"
 
+#include "base/strings/stringprintf.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 
 namespace cc {
@@ -36,6 +38,11 @@
   return total_size;
 }
 
+void ClipPathDisplayItem::AsValueInto(base::debug::TracedValue* array) const {
+  array->AppendString(base::StringPrintf("ClipPathDisplayItem length: %d",
+                                         clip_path_.countPoints()));
+}
+
 EndClipPathDisplayItem::EndClipPathDisplayItem() {
 }
 
@@ -59,4 +66,9 @@
   return 0;
 }
 
+void EndClipPathDisplayItem::AsValueInto(
+    base::debug::TracedValue* array) const {
+  array->AppendString("EndClipPathDisplayItem");
+}
+
 }  // namespace cc
diff --git a/cc/resources/clip_path_display_item.h b/cc/resources/clip_path_display_item.h
index 6144201..b9fa01b 100644
--- a/cc/resources/clip_path_display_item.h
+++ b/cc/resources/clip_path_display_item.h
@@ -31,6 +31,7 @@
   bool IsSuitableForGpuRasterization() const override;
   int ApproximateOpCount() const override;
   size_t PictureMemoryUsage() const override;
+  void AsValueInto(base::debug::TracedValue* array) const override;
 
  protected:
   ClipPathDisplayItem(const SkPath& path, SkRegion::Op clip_op, bool antialias);
@@ -54,6 +55,7 @@
   bool IsSuitableForGpuRasterization() const override;
   int ApproximateOpCount() const override;
   size_t PictureMemoryUsage() const override;
+  void AsValueInto(base::debug::TracedValue* array) const override;
 
  protected:
   EndClipPathDisplayItem();
diff --git a/cc/resources/display_item.h b/cc/resources/display_item.h
index 422bd43..b2c4054 100644
--- a/cc/resources/display_item.h
+++ b/cc/resources/display_item.h
@@ -7,6 +7,7 @@
 
 #include "base/memory/scoped_ptr.h"
 #include "cc/base/cc_export.h"
+#include "cc/debug/traced_value.h"
 #include "ui/gfx/geometry/rect.h"
 
 class SkCanvas;
@@ -25,6 +26,7 @@
   virtual bool IsSuitableForGpuRasterization() const = 0;
   virtual int ApproximateOpCount() const = 0;
   virtual size_t PictureMemoryUsage() const = 0;
+  virtual void AsValueInto(base::debug::TracedValue* array) const = 0;
 
  protected:
   DisplayItem();
diff --git a/cc/resources/display_item_list.cc b/cc/resources/display_item_list.cc
index b27dea0..7a6929a 100644
--- a/cc/resources/display_item_list.cc
+++ b/cc/resources/display_item_list.cc
@@ -71,6 +71,11 @@
       new base::debug::TracedValue();
 
   state->SetInteger("length", items_.size());
+  state->BeginArray("params.items");
+  for (const DisplayItem* item : items_) {
+    item->AsValueInto(state.get());
+  }
+  state->EndArray();
   state->SetValue("params.layer_rect",
                   MathUtil::AsValue(layer_rect_).release());
 
diff --git a/cc/resources/drawing_display_item.cc b/cc/resources/drawing_display_item.cc
index 473cb77..351fade 100644
--- a/cc/resources/drawing_display_item.cc
+++ b/cc/resources/drawing_display_item.cc
@@ -4,7 +4,12 @@
 
 #include "cc/resources/drawing_display_item.h"
 
+#include <string>
+
 #include "base/logging.h"
+#include "base/strings/stringprintf.h"
+#include "base/trace_event/trace_event_argument.h"
+#include "cc/debug/picture_debug_util.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkDrawPictureCallback.h"
 #include "third_party/skia/include/core/SkMatrix.h"
@@ -57,4 +62,16 @@
   return SkPictureUtils::ApproximateBytesUsed(picture_.get());
 }
 
+void DrawingDisplayItem::AsValueInto(base::debug::TracedValue* array) const {
+  array->BeginDictionary();
+  array->SetString("name", "DrawingDisplayItem");
+  array->SetString("location",
+                   base::StringPrintf("[%f,%f]", picture_->cullRect().x(),
+                                      picture_->cullRect().y()));
+  std::string b64_picture;
+  PictureDebugUtil::SerializeAsBase64(picture_.get(), &b64_picture);
+  array->SetString("skp64", b64_picture);
+  array->EndDictionary();
+}
+
 }  // namespace cc
diff --git a/cc/resources/drawing_display_item.h b/cc/resources/drawing_display_item.h
index b55e442..49aa762 100644
--- a/cc/resources/drawing_display_item.h
+++ b/cc/resources/drawing_display_item.h
@@ -32,6 +32,7 @@
   bool IsSuitableForGpuRasterization() const override;
   int ApproximateOpCount() const override;
   size_t PictureMemoryUsage() const override;
+  void AsValueInto(base::debug::TracedValue* array) const override;
 
  protected:
   DrawingDisplayItem(skia::RefPtr<SkPicture> picture, gfx::PointF location);
diff --git a/cc/resources/filter_display_item.cc b/cc/resources/filter_display_item.cc
index 63bfeee..bfdd425 100644
--- a/cc/resources/filter_display_item.cc
+++ b/cc/resources/filter_display_item.cc
@@ -4,6 +4,8 @@
 
 #include "cc/resources/filter_display_item.h"
 
+#include "base/strings/stringprintf.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkImageFilter.h"
 #include "third_party/skia/include/core/SkPaint.h"
@@ -48,6 +50,11 @@
   return sizeof(skia::RefPtr<SkImageFilter>) + sizeof(gfx::RectF);
 }
 
+void FilterDisplayItem::AsValueInto(base::debug::TracedValue* array) const {
+  array->AppendString(base::StringPrintf("FilterDisplayItem bounds: [%s]",
+                                         bounds_.ToString().c_str()));
+}
+
 EndFilterDisplayItem::EndFilterDisplayItem() {
 }
 
@@ -72,4 +79,8 @@
   return 0;
 }
 
+void EndFilterDisplayItem::AsValueInto(base::debug::TracedValue* array) const {
+  array->AppendString("EndFilterDisplayItem");
+}
+
 }  // namespace cc
diff --git a/cc/resources/filter_display_item.h b/cc/resources/filter_display_item.h
index a4ac8c7..958647b 100644
--- a/cc/resources/filter_display_item.h
+++ b/cc/resources/filter_display_item.h
@@ -32,6 +32,7 @@
   bool IsSuitableForGpuRasterization() const override;
   int ApproximateOpCount() const override;
   size_t PictureMemoryUsage() const override;
+  void AsValueInto(base::debug::TracedValue* array) const override;
 
  protected:
   FilterDisplayItem(skia::RefPtr<SkImageFilter> filter, gfx::RectF bounds);
@@ -54,6 +55,7 @@
   bool IsSuitableForGpuRasterization() const override;
   int ApproximateOpCount() const override;
   size_t PictureMemoryUsage() const override;
+  void AsValueInto(base::debug::TracedValue* array) const override;
 
  protected:
   EndFilterDisplayItem();
diff --git a/cc/resources/float_clip_display_item.cc b/cc/resources/float_clip_display_item.cc
index 259ccc8..0cfe463 100644
--- a/cc/resources/float_clip_display_item.cc
+++ b/cc/resources/float_clip_display_item.cc
@@ -4,6 +4,8 @@
 
 #include "cc/resources/float_clip_display_item.h"
 
+#include "base/strings/stringprintf.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "ui/gfx/skia_util.h"
 
@@ -34,6 +36,11 @@
   return sizeof(gfx::RectF);
 }
 
+void FloatClipDisplayItem::AsValueInto(base::debug::TracedValue* array) const {
+  array->AppendString(base::StringPrintf("FloatClipDisplayItem rect: [%s]",
+                                         clip_rect_.ToString().c_str()));
+}
+
 EndFloatClipDisplayItem::EndFloatClipDisplayItem() {
 }
 
@@ -57,4 +64,9 @@
   return 0;
 }
 
+void EndFloatClipDisplayItem::AsValueInto(
+    base::debug::TracedValue* array) const {
+  array->AppendString("EndFloatClipDisplayItem");
+}
+
 }  // namespace cc
diff --git a/cc/resources/float_clip_display_item.h b/cc/resources/float_clip_display_item.h
index 6d9529d..c9920f2 100644
--- a/cc/resources/float_clip_display_item.h
+++ b/cc/resources/float_clip_display_item.h
@@ -30,6 +30,7 @@
   bool IsSuitableForGpuRasterization() const override;
   int ApproximateOpCount() const override;
   size_t PictureMemoryUsage() const override;
+  void AsValueInto(base::debug::TracedValue* array) const override;
 
  protected:
   explicit FloatClipDisplayItem(gfx::RectF clip_rect);
@@ -51,6 +52,7 @@
   bool IsSuitableForGpuRasterization() const override;
   int ApproximateOpCount() const override;
   size_t PictureMemoryUsage() const override;
+  void AsValueInto(base::debug::TracedValue* array) const override;
 
  protected:
   EndFloatClipDisplayItem();
diff --git a/cc/resources/gpu_rasterizer.cc b/cc/resources/gpu_rasterizer.cc
index fe13af7..3fdc8bb 100644
--- a/cc/resources/gpu_rasterizer.cc
+++ b/cc/resources/gpu_rasterizer.cc
@@ -31,20 +31,23 @@
     ContextProvider* context_provider,
     ResourceProvider* resource_provider,
     bool use_distance_field_text,
-    bool tile_prepare_enabled) {
-  return make_scoped_ptr<GpuRasterizer>(
-      new GpuRasterizer(context_provider, resource_provider,
-                        use_distance_field_text, tile_prepare_enabled));
+    bool tile_prepare_enabled,
+    int msaa_sample_count) {
+  return make_scoped_ptr<GpuRasterizer>(new GpuRasterizer(
+      context_provider, resource_provider, use_distance_field_text,
+      tile_prepare_enabled, msaa_sample_count));
 }
 
 GpuRasterizer::GpuRasterizer(ContextProvider* context_provider,
                              ResourceProvider* resource_provider,
                              bool use_distance_field_text,
-                             bool tile_prepare_enabled)
+                             bool tile_prepare_enabled,
+                             int msaa_sample_count)
     : context_provider_(context_provider),
       resource_provider_(resource_provider),
       use_distance_field_text_(use_distance_field_text),
-      tile_prepare_enabled_(tile_prepare_enabled) {
+      tile_prepare_enabled_(tile_prepare_enabled),
+      msaa_sample_count_(msaa_sample_count) {
   DCHECK(context_provider_);
 }
 
@@ -66,25 +69,22 @@
   ScopedResourceWriteLocks locks;
 
   for (Tile* tile : tiles) {
-    // TODO(hendrikw): Don't create resources for solid color tiles.
-    // See crbug.com/445919
-    scoped_ptr<ScopedResource> resource =
-        resource_pool->AcquireResource(tile->desired_texture_size(),
-                                       resource_format);
-    const ScopedResource* const_resource = resource.get();
-
     RasterSource::SolidColorAnalysis analysis;
 
     if (tile->use_picture_analysis())
       PerformSolidColorAnalysis(tile, &analysis);
 
-    if (!analysis.is_solid_color)
-      AddToMultiPictureDraw(tile, const_resource, &locks);
-
+    scoped_ptr<ScopedResource> resource;
+    if (!analysis.is_solid_color) {
+      resource = resource_pool->AcquireResource(tile->desired_texture_size(),
+                                                resource_format);
+      AddToMultiPictureDraw(tile, resource.get(), &locks);
+    }
     update_tile_draw_info.Run(tile, resource.Pass(), analysis);
   }
 
-  multi_picture_draw_.draw();
+  // If MSAA is enabled, tell Skia to resolve each render target after draw.
+  multi_picture_draw_.draw(msaa_sample_count_ > 0);
 }
 
 void GpuRasterizer::PerformSolidColorAnalysis(
@@ -120,16 +120,16 @@
       use_distance_field_text_ ||
       tile->raster_source()->ShouldAttemptToUseDistanceFieldText();
   scoped_ptr<ResourceProvider::ScopedWriteLockGr> lock(
-      new ResourceProvider::ScopedWriteLockGr(resource_provider_,
-                                              resource->id()));
-  SkSurface* sk_surface = lock->GetSkSurface(
-      use_distance_field_text, tile->raster_source()->CanUseLCDText());
+      new ResourceProvider::ScopedWriteLockGr(
+          resource_provider_, resource->id(), use_distance_field_text,
+          tile->raster_source()->CanUseLCDText(), msaa_sample_count_));
 
-  locks->push_back(lock.Pass());
-
+  SkSurface* sk_surface = lock->get_sk_surface();
   if (!sk_surface)
     return;
 
+  locks->push_back(lock.Pass());
+
   SkRTreeFactory factory;
   SkPictureRecorder recorder;
   gfx::Size size = resource->size();
diff --git a/cc/resources/gpu_rasterizer.h b/cc/resources/gpu_rasterizer.h
index 761b3a5..206b051 100644
--- a/cc/resources/gpu_rasterizer.h
+++ b/cc/resources/gpu_rasterizer.h
@@ -25,7 +25,8 @@
   static scoped_ptr<GpuRasterizer> Create(ContextProvider* context_provider,
                                           ResourceProvider* resource_provider,
                                           bool use_distance_field_text,
-                                          bool tile_prepare_enabled);
+                                          bool tile_prepare_enabled,
+                                          int msaa_sample_count);
   PrepareTilesMode GetPrepareTilesMode() override;
   void RasterizeTiles(
       const TileVector& tiles,
@@ -37,7 +38,8 @@
   GpuRasterizer(ContextProvider* context_provider,
                 ResourceProvider* resource_provider,
                 bool use_distance_filed_text,
-                bool tile_prepare_enabled);
+                bool tile_prepare_enabled,
+                int msaa_sample_count);
 
   using ScopedResourceWriteLocks =
       ScopedPtrVector<ResourceProvider::ScopedWriteLockGr>;
@@ -54,6 +56,7 @@
 
   bool use_distance_field_text_;
   bool tile_prepare_enabled_;
+  int msaa_sample_count_;
 
   DISALLOW_COPY_AND_ASSIGN(GpuRasterizer);
 };
diff --git a/cc/resources/gpu_tile_task_worker_pool.cc b/cc/resources/gpu_tile_task_worker_pool.cc
index 02a46da..8249457 100644
--- a/cc/resources/gpu_tile_task_worker_pool.cc
+++ b/cc/resources/gpu_tile_task_worker_pool.cc
@@ -124,7 +124,8 @@
 
   for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set) {
     InsertNodeForTask(&graph_, new_task_set_finished_tasks[task_set].get(),
-                      kTaskSetFinishedTaskPriority, task_count[task_set]);
+                      kTaskSetFinishedTaskPriorityBase + task_set,
+                      task_count[task_set]);
   }
 
   ScheduleTasksOnOriginThread(this, &graph_);
diff --git a/cc/resources/one_copy_tile_task_worker_pool.cc b/cc/resources/one_copy_tile_task_worker_pool.cc
index fe5ecbf..23c9538 100644
--- a/cc/resources/one_copy_tile_task_worker_pool.cc
+++ b/cc/resources/one_copy_tile_task_worker_pool.cc
@@ -214,7 +214,8 @@
 
   for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set) {
     InsertNodeForTask(&graph_, new_task_set_finished_tasks[task_set].get(),
-                      kTaskSetFinishedTaskPriority, task_count[task_set]);
+                      kTaskSetFinishedTaskPriorityBase + task_set,
+                      task_count[task_set]);
   }
 
   ScheduleTasksOnOriginThread(this, &graph_);
diff --git a/cc/resources/pixel_buffer_tile_task_worker_pool.cc b/cc/resources/pixel_buffer_tile_task_worker_pool.cc
index d79577d..69afb83 100644
--- a/cc/resources/pixel_buffer_tile_task_worker_pool.cc
+++ b/cc/resources/pixel_buffer_tile_task_worker_pool.cc
@@ -588,7 +588,7 @@
                      task_set));
       task_set_finished_tasks_pending_[task_set] = true;
       InsertNodeForTask(&graph_, new_task_set_finished_tasks[task_set].get(),
-                        kTaskSetFinishedTaskPriority,
+                        kTaskSetFinishedTaskPriorityBase + task_set,
                         scheduled_task_counts[task_set]);
       for (RasterTaskVector::ContainerType::const_iterator it =
                tasks[task_set].container().begin();
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
index 4ba46b7..b90b594 100644
--- a/cc/resources/resource_provider.cc
+++ b/cc/resources/resource_provider.cc
@@ -1087,41 +1087,31 @@
 
 ResourceProvider::ScopedWriteLockGr::ScopedWriteLockGr(
     ResourceProvider* resource_provider,
-    ResourceProvider::ResourceId resource_id)
+    ResourceProvider::ResourceId resource_id,
+    bool use_distance_field_text,
+    bool can_use_lcd_text,
+    int msaa_sample_count)
     : resource_provider_(resource_provider),
       resource_(resource_provider->LockForWrite(resource_id)) {
-}
-
-ResourceProvider::ScopedWriteLockGr::~ScopedWriteLockGr() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  resource_provider_->UnlockForWrite(resource_);
-}
-
-SkSurface* ResourceProvider::ScopedWriteLockGr::GetSkSurface(
-    bool use_distance_field_text,
-    bool can_use_lcd_text) {
+  // Create the sk_surface.
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(resource_->locked_for_write);
 
-  bool create_surface =
-      !resource_->sk_surface.get() ||
-      !SurfaceHasMatchingProperties(use_distance_field_text, can_use_lcd_text);
-  if (create_surface) {
-    resource_provider_->LazyAllocate(resource_);
+  resource_provider_->LazyAllocate(resource_);
 
-    GrBackendTextureDesc desc;
-    desc.fFlags = kRenderTarget_GrBackendTextureFlag;
-    desc.fWidth = resource_->size.width();
-    desc.fHeight = resource_->size.height();
-    desc.fConfig = ToGrPixelConfig(resource_->format);
-    desc.fOrigin = kTopLeft_GrSurfaceOrigin;
-    desc.fTextureHandle = resource_->gl_id;
+  GrBackendTextureDesc desc;
+  desc.fFlags = kRenderTarget_GrBackendTextureFlag;
+  desc.fWidth = resource_->size.width();
+  desc.fHeight = resource_->size.height();
+  desc.fConfig = ToGrPixelConfig(resource_->format);
+  desc.fOrigin = kTopLeft_GrSurfaceOrigin;
+  desc.fTextureHandle = resource_->gl_id;
+  desc.fSampleCnt = msaa_sample_count;
 
-    class GrContext* gr_context = resource_provider_->GrContext();
-    skia::RefPtr<GrTexture> gr_texture =
-        skia::AdoptRef(gr_context->wrapBackendTexture(desc));
-    if (!gr_texture)
-      return nullptr;
+  class GrContext* gr_context = resource_provider_->GrContext();
+  skia::RefPtr<GrTexture> gr_texture =
+      skia::AdoptRef(gr_context->wrapBackendTexture(desc));
+  if (gr_texture) {
     uint32_t flags = use_distance_field_text
                          ? SkSurfaceProps::kUseDistanceFieldFonts_Flag
                          : 0;
@@ -1132,22 +1122,14 @@
       surface_props =
           SkSurfaceProps(flags, SkSurfaceProps::kLegacyFontHost_InitType);
     }
-    resource_->sk_surface = skia::AdoptRef(SkSurface::NewRenderTargetDirect(
+    sk_surface_ = skia::AdoptRef(SkSurface::NewRenderTargetDirect(
         gr_texture->asRenderTarget(), &surface_props));
   }
-  return resource_->sk_surface.get();
 }
 
-bool ResourceProvider::ScopedWriteLockGr::SurfaceHasMatchingProperties(
-    bool use_distance_field_text,
-    bool can_use_lcd_text) const {
-  const SkSurface* surface = resource_->sk_surface.get();
-  bool surface_uses_distance_field_text =
-      surface->props().isUseDistanceFieldFonts();
-  bool surface_can_use_lcd_text =
-      surface->props().pixelGeometry() != kUnknown_SkPixelGeometry;
-  return use_distance_field_text == surface_uses_distance_field_text &&
-         can_use_lcd_text == surface_can_use_lcd_text;
+ResourceProvider::ScopedWriteLockGr::~ScopedWriteLockGr() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  resource_provider_->UnlockForWrite(resource_);
 }
 
 ResourceProvider::SynchronousFence::SynchronousFence(
diff --git a/cc/resources/resource_provider.h b/cc/resources/resource_provider.h
index 3a8d2e0..1fb5b60 100644
--- a/cc/resources/resource_provider.h
+++ b/cc/resources/resource_provider.h
@@ -332,19 +332,19 @@
   class CC_EXPORT ScopedWriteLockGr {
    public:
     ScopedWriteLockGr(ResourceProvider* resource_provider,
-                      ResourceProvider::ResourceId resource_id);
+                      ResourceProvider::ResourceId resource_id,
+                      bool use_distance_field_text,
+                      bool can_use_lcd_text,
+                      int msaa_sample_count);
     ~ScopedWriteLockGr();
 
-    SkSurface* GetSkSurface(bool use_distance_field_text,
-                            bool can_use_lcd_text);
+    SkSurface* get_sk_surface() { return sk_surface_.get(); }
 
    private:
-    bool SurfaceHasMatchingProperties(bool use_distance_field_text,
-                                      bool can_use_lcd_text) const;
-
     ResourceProvider* resource_provider_;
     ResourceProvider::Resource* resource_;
     base::ThreadChecker thread_checker_;
+    skia::RefPtr<SkSurface> sk_surface_;
 
     DISALLOW_COPY_AND_ASSIGN(ScopedWriteLockGr);
   };
@@ -494,7 +494,6 @@
     SharedBitmapId shared_bitmap_id;
     SharedBitmap* shared_bitmap;
     gfx::GpuMemoryBuffer* gpu_memory_buffer;
-    skia::RefPtr<SkSurface> sk_surface;
   };
   typedef base::hash_map<ResourceId, Resource> ResourceMap;
 
diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc
index da888cd..2b247aa 100644
--- a/cc/resources/tile_manager.cc
+++ b/cc/resources/tile_manager.cc
@@ -362,6 +362,11 @@
     scoped_ptr<RasterTilePriorityQueue> raster_priority_queue(
         client_->BuildRasterQueue(global_state_.tree_priority,
                                   RasterTilePriorityQueue::Type::ALL));
+    // Inform the client that will likely require a draw if the top tile is
+    // required for draw.
+    client_->SetIsLikelyToRequireADraw(
+        !raster_priority_queue->IsEmpty() &&
+        raster_priority_queue->Top()->required_for_draw());
     AssignGpuMemoryToTiles(raster_priority_queue.get(),
                            scheduled_raster_task_limit_,
                            &tiles_that_need_to_be_rasterized);
@@ -830,8 +835,10 @@
 
   if (analysis.is_solid_color) {
     draw_info.set_solid_color(analysis.solid_color);
-    resource_pool_->ReleaseResource(resource.Pass());
+    if (resource)
+      resource_pool_->ReleaseResource(resource.Pass());
   } else {
+    DCHECK(resource);
     draw_info.set_use_resource();
     draw_info.resource_ = resource.Pass();
   }
@@ -863,31 +870,31 @@
   tile_task_runner_->SetClient(this);
 }
 
-bool TileManager::IsReadyToActivate() const {
-  TRACE_EVENT0("cc", "TileManager::IsReadyToActivate");
-  const std::vector<PictureLayerImpl*>& layers = client_->GetPictureLayers();
-
-  // TODO(vmpstr): Replace this with building a REQUIRED_TO_ACTIVATE raster
-  // queue and checking if the tiles it contains are all ready to draw.
-  for (const auto& layer : layers) {
-    if (!layer->AllTilesRequiredForActivationAreReadyToDraw())
+bool TileManager::AreRequiredTilesReadyToDraw(
+    RasterTilePriorityQueue::Type type) const {
+  scoped_ptr<RasterTilePriorityQueue> raster_priority_queue(
+      client_->BuildRasterQueue(global_state_.tree_priority, type));
+  // It is insufficient to check whether the raster queue we constructed is
+  // empty. The reason for this is that there are situations (rasterize on
+  // demand) when the tile both needs raster and it's ready to draw. Hence, we
+  // have to iterate the queue to check whether the required tiles are ready to
+  // draw.
+  for (; !raster_priority_queue->IsEmpty(); raster_priority_queue->Pop()) {
+    if (!raster_priority_queue->Top()->IsReadyToDraw())
       return false;
   }
-
   return true;
 }
+bool TileManager::IsReadyToActivate() const {
+  TRACE_EVENT0("cc", "TileManager::IsReadyToActivate");
+  return AreRequiredTilesReadyToDraw(
+      RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION);
+}
 
 bool TileManager::IsReadyToDraw() const {
-  const std::vector<PictureLayerImpl*>& layers = client_->GetPictureLayers();
-
-  // TODO(vmpstr): Replace this with building a REQUIRED_TO_DRAW raster queue
-  // and checking if the tiles it contains are all ready to draw.
-  for (const auto& layer : layers) {
-    if (!layer->AllTilesRequiredForDrawAreReadyToDraw())
-      return false;
-  }
-
-  return true;
+  TRACE_EVENT0("cc", "TileManager::IsReadyToDraw");
+  return AreRequiredTilesReadyToDraw(
+      RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
 }
 
 void TileManager::NotifyReadyToActivate() {
diff --git a/cc/resources/tile_manager.h b/cc/resources/tile_manager.h
index f945f7c..37ab765 100644
--- a/cc/resources/tile_manager.h
+++ b/cc/resources/tile_manager.h
@@ -39,11 +39,6 @@
 
 class CC_EXPORT TileManagerClient {
  public:
-  // Returns the set of layers that the tile manager should consider for raster.
-  // TODO(vmpstr): Change the way we determine if we are ready to activate, so
-  // that this can be removed.
-  virtual const std::vector<PictureLayerImpl*>& GetPictureLayers() const = 0;
-
   // Called when all tiles marked as required for activation are ready to draw.
   virtual void NotifyReadyToActivate() = 0;
 
@@ -70,6 +65,11 @@
   virtual scoped_ptr<EvictionTilePriorityQueue> BuildEvictionQueue(
       TreePriority tree_priority) = 0;
 
+  // Informs the client that due to the currently rasterizing (or scheduled to
+  // be rasterized) tiles, we will be in a position that will likely require a
+  // draw. This can be used to preemptively start a frame.
+  virtual void SetIsLikelyToRequireADraw(bool is_likely_to_require_a_draw) = 0;
+
  protected:
   virtual ~TileManagerClient() {}
 };
@@ -176,6 +176,9 @@
     scheduled_raster_task_limit_ = limit;
   }
 
+  bool IsReadyToActivate() const;
+  bool IsReadyToDraw() const;
+
  protected:
   TileManager(TileManagerClient* client,
               const scoped_refptr<base::SequencedTaskRunner>& task_runner,
@@ -259,8 +262,7 @@
       const TilePriority& oother_priority,
       MemoryUsage* usage);
   bool TilePriorityViolatesMemoryPolicy(const TilePriority& priority);
-  bool IsReadyToActivate() const;
-  bool IsReadyToDraw() const;
+  bool AreRequiredTilesReadyToDraw(RasterTilePriorityQueue::Type type) const;
   void NotifyReadyToActivate();
   void NotifyReadyToDraw();
   void CheckIfReadyToActivate();
diff --git a/cc/resources/tile_manager_unittest.cc b/cc/resources/tile_manager_unittest.cc
index 8b5ab3f..0e12af6 100644
--- a/cc/resources/tile_manager_unittest.cc
+++ b/cc/resources/tile_manager_unittest.cc
@@ -564,8 +564,7 @@
       std::vector<Tile*>(all_tiles.begin(), all_tiles.end()));
 
   // Ensure we can activate.
-  EXPECT_TRUE(pending_layer_->AllTilesRequiredForActivationAreReadyToDraw());
-  EXPECT_TRUE(pending_child_raw->AllTilesRequiredForActivationAreReadyToDraw());
+  EXPECT_TRUE(tile_manager()->IsReadyToActivate());
 }
 
 TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueue) {
diff --git a/cc/resources/tile_task_worker_pool.cc b/cc/resources/tile_task_worker_pool.cc
index aac8d02..2775386 100644
--- a/cc/resources/tile_task_worker_pool.cc
+++ b/cc/resources/tile_task_worker_pool.cc
@@ -93,9 +93,12 @@
 // since it should finish as quickly as possible.
 unsigned TileTaskWorkerPool::kBenchmarkTaskPriority = 0u;
 // Task priorities that make sure task set finished tasks run before any
-// other remaining tasks.
-unsigned TileTaskWorkerPool::kTaskSetFinishedTaskPriority = 1u;
-unsigned TileTaskWorkerPool::kTileTaskPriorityBase = 2u;
+// other remaining tasks. This is combined with the task set type to ensure
+// proper prioritization ordering between task set types.
+unsigned TileTaskWorkerPool::kTaskSetFinishedTaskPriorityBase = 1u;
+// For correctness, |kTileTaskPriorityBase| must be greater than
+// |kTaskSetFinishedTaskPriorityBase + kNumberOfTaskSets|.
+unsigned TileTaskWorkerPool::kTileTaskPriorityBase = 10u;
 
 TileTaskWorkerPool::TileTaskWorkerPool() {
 }
diff --git a/cc/resources/tile_task_worker_pool.h b/cc/resources/tile_task_worker_pool.h
index cb7d4b0..915a3fa 100644
--- a/cc/resources/tile_task_worker_pool.h
+++ b/cc/resources/tile_task_worker_pool.h
@@ -21,7 +21,7 @@
 class CC_EXPORT TileTaskWorkerPool {
  public:
   static unsigned kBenchmarkTaskPriority;
-  static unsigned kTaskSetFinishedTaskPriority;
+  static unsigned kTaskSetFinishedTaskPriorityBase;
   static unsigned kTileTaskPriorityBase;
 
   TileTaskWorkerPool();
diff --git a/cc/resources/transform_display_item.cc b/cc/resources/transform_display_item.cc
index c7f4d60..7ab2421 100644
--- a/cc/resources/transform_display_item.cc
+++ b/cc/resources/transform_display_item.cc
@@ -4,6 +4,8 @@
 
 #include "cc/resources/transform_display_item.h"
 
+#include "base/strings/stringprintf.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 
 namespace cc {
@@ -34,6 +36,11 @@
   return sizeof(gfx::Transform);
 }
 
+void TransformDisplayItem::AsValueInto(base::debug::TracedValue* array) const {
+  array->AppendString(base::StringPrintf("TransformDisplayItem transform: [%s]",
+                                         transform_.ToString().c_str()));
+}
+
 EndTransformDisplayItem::EndTransformDisplayItem() {
 }
 
@@ -57,4 +64,9 @@
   return 0;
 }
 
+void EndTransformDisplayItem::AsValueInto(
+    base::debug::TracedValue* array) const {
+  array->AppendString("EndTransformDisplayItem");
+}
+
 }  // namespace cc
diff --git a/cc/resources/transform_display_item.h b/cc/resources/transform_display_item.h
index 075c03a..0e62623 100644
--- a/cc/resources/transform_display_item.h
+++ b/cc/resources/transform_display_item.h
@@ -29,6 +29,7 @@
   bool IsSuitableForGpuRasterization() const override;
   int ApproximateOpCount() const override;
   size_t PictureMemoryUsage() const override;
+  void AsValueInto(base::debug::TracedValue* array) const override;
 
  protected:
   explicit TransformDisplayItem(const gfx::Transform& transform);
@@ -50,6 +51,7 @@
   bool IsSuitableForGpuRasterization() const override;
   int ApproximateOpCount() const override;
   size_t PictureMemoryUsage() const override;
+  void AsValueInto(base::debug::TracedValue* array) const override;
 
  protected:
   EndTransformDisplayItem();
diff --git a/cc/resources/transparency_display_item.cc b/cc/resources/transparency_display_item.cc
index 0401d90..369e51b 100644
--- a/cc/resources/transparency_display_item.cc
+++ b/cc/resources/transparency_display_item.cc
@@ -4,6 +4,8 @@
 
 #include "cc/resources/transparency_display_item.h"
 
+#include "base/strings/stringprintf.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkPaint.h"
 #include "third_party/skia/include/core/SkXfermode.h"
@@ -39,6 +41,13 @@
   return sizeof(float) + sizeof(SkXfermode::Mode);
 }
 
+void TransparencyDisplayItem::AsValueInto(
+    base::debug::TracedValue* array) const {
+  array->AppendString(
+      base::StringPrintf("TransparencyDisplayItem opacity: %f, blend_mode: %d",
+                         opacity_, blend_mode_));
+}
+
 EndTransparencyDisplayItem::EndTransparencyDisplayItem() {
 }
 
@@ -62,4 +71,9 @@
   return 0;
 }
 
+void EndTransparencyDisplayItem::AsValueInto(
+    base::debug::TracedValue* array) const {
+  array->AppendString("EndTransparencyDisplayItem");
+}
+
 }  // namespace cc
diff --git a/cc/resources/transparency_display_item.h b/cc/resources/transparency_display_item.h
index d5417bc..9697406 100644
--- a/cc/resources/transparency_display_item.h
+++ b/cc/resources/transparency_display_item.h
@@ -32,6 +32,7 @@
   bool IsSuitableForGpuRasterization() const override;
   int ApproximateOpCount() const override;
   size_t PictureMemoryUsage() const override;
+  void AsValueInto(base::debug::TracedValue* array) const override;
 
  protected:
   TransparencyDisplayItem(float opacity, SkXfermode::Mode blend_mode);
@@ -54,6 +55,7 @@
   bool IsSuitableForGpuRasterization() const override;
   int ApproximateOpCount() const override;
   size_t PictureMemoryUsage() const override;
+  void AsValueInto(base::debug::TracedValue* array) const override;
 
  protected:
   EndTransparencyDisplayItem();
diff --git a/cc/resources/zero_copy_tile_task_worker_pool.cc b/cc/resources/zero_copy_tile_task_worker_pool.cc
index 5fd082d..9432214 100644
--- a/cc/resources/zero_copy_tile_task_worker_pool.cc
+++ b/cc/resources/zero_copy_tile_task_worker_pool.cc
@@ -133,7 +133,8 @@
 
   for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set) {
     InsertNodeForTask(&graph_, new_task_set_finished_tasks[task_set].get(),
-                      kTaskSetFinishedTaskPriority, task_count[task_set]);
+                      kTaskSetFinishedTaskPriorityBase + task_set,
+                      task_count[task_set]);
   }
 
   ScheduleTasksOnOriginThread(this, &graph_);
diff --git a/cc/scheduler/begin_frame_source.cc b/cc/scheduler/begin_frame_source.cc
index 8ef3b67..c245bd6 100644
--- a/cc/scheduler/begin_frame_source.cc
+++ b/cc/scheduler/begin_frame_source.cc
@@ -5,11 +5,11 @@
 #include "cc/scheduler/begin_frame_source.h"
 
 #include "base/auto_reset.h"
-#include "base/debug/trace_event.h"
-#include "base/debug/trace_event_argument.h"
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/trace_event/trace_event.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "cc/scheduler/delay_based_time_source.h"
 #include "cc/scheduler/scheduler.h"
 #include "ui/gfx/frame_time.h"
diff --git a/cc/scheduler/begin_frame_source.h b/cc/scheduler/begin_frame_source.h
index d3dd9de..299db8e 100644
--- a/cc/scheduler/begin_frame_source.h
+++ b/cc/scheduler/begin_frame_source.h
@@ -8,8 +8,8 @@
 #include <set>
 #include <string>
 
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/output/begin_frame_args.h"
 #include "cc/output/vsync_parameter_observer.h"
 #include "cc/scheduler/delay_based_time_source.h"
diff --git a/cc/scheduler/commit_earlyout_reason.h b/cc/scheduler/commit_earlyout_reason.h
index b45e96f..14aaeb3 100644
--- a/cc/scheduler/commit_earlyout_reason.h
+++ b/cc/scheduler/commit_earlyout_reason.h
@@ -12,6 +12,7 @@
 enum class CommitEarlyOutReason {
   ABORTED_OUTPUT_SURFACE_LOST,
   ABORTED_NOT_VISIBLE,
+  ABORTED_DEFERRED_COMMIT,
   FINISHED_NO_UPDATES,
 };
 
@@ -21,6 +22,8 @@
       return "CommitEarlyOutReason::ABORTED_OUTPUT_SURFACE_LOST";
     case CommitEarlyOutReason::ABORTED_NOT_VISIBLE:
       return "CommitEarlyOutReason::ABORTED_NOT_VISIBLE";
+    case CommitEarlyOutReason::ABORTED_DEFERRED_COMMIT:
+      return "CommitEarlyOutReason::ABORTED_DEFERRED_COMMIT";
     case CommitEarlyOutReason::FINISHED_NO_UPDATES:
       return "CommitEarlyOutReason::FINISHED_NO_UPDATES";
   }
diff --git a/cc/scheduler/delay_based_time_source.cc b/cc/scheduler/delay_based_time_source.cc
index dbfdc0d..457f718 100644
--- a/cc/scheduler/delay_based_time_source.cc
+++ b/cc/scheduler/delay_based_time_source.cc
@@ -9,11 +9,11 @@
 #include <string>
 
 #include "base/bind.h"
-#include "base/debug/trace_event.h"
-#include "base/debug/trace_event_argument.h"
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/single_thread_task_runner.h"
+#include "base/trace_event/trace_event.h"
+#include "base/trace_event/trace_event_argument.h"
 
 namespace cc {
 
diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc
index 691b6dc..43812e8 100644
--- a/cc/scheduler/scheduler.cc
+++ b/cc/scheduler/scheduler.cc
@@ -7,10 +7,10 @@
 #include <algorithm>
 
 #include "base/auto_reset.h"
-#include "base/debug/trace_event.h"
-#include "base/debug/trace_event_argument.h"
 #include "base/logging.h"
 #include "base/single_thread_task_runner.h"
+#include "base/trace_event/trace_event.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "cc/debug/devtools_instrumentation.h"
 #include "cc/debug/traced_value.h"
 #include "cc/scheduler/delay_based_time_source.h"
@@ -671,6 +671,14 @@
   state_machine_.DidDrawIfPossibleCompleted(result);
 }
 
+void Scheduler::SetDeferCommits(bool defer_commits) {
+  TRACE_EVENT1("cc", "Scheduler::SetDeferCommits",
+                "defer_commits",
+                defer_commits);
+  state_machine_.SetDeferCommits(defer_commits);
+  ProcessScheduledActions();
+}
+
 void Scheduler::ProcessScheduledActions() {
   // We do not allow ProcessScheduledActions to be recursive.
   // The top-level call will iteratively execute the next action for us anyway.
diff --git a/cc/scheduler/scheduler.h b/cc/scheduler/scheduler.h
index faf4399..e06a133 100644
--- a/cc/scheduler/scheduler.h
+++ b/cc/scheduler/scheduler.h
@@ -162,6 +162,8 @@
 
   base::TimeTicks LastBeginImplFrameTime();
 
+  void SetDeferCommits(bool defer_commits);
+
   scoped_refptr<base::debug::ConvertableToTraceFormat> AsValue() const;
   void AsValueInto(base::debug::TracedValue* value) const override;
 
diff --git a/cc/scheduler/scheduler_settings.cc b/cc/scheduler/scheduler_settings.cc
index 6a5cbbc..c1db76b 100644
--- a/cc/scheduler/scheduler_settings.cc
+++ b/cc/scheduler/scheduler_settings.cc
@@ -4,7 +4,7 @@
 
 #include "cc/scheduler/scheduler_settings.h"
 
-#include "base/debug/trace_event_argument.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "cc/trees/layer_tree_settings.h"
 
 namespace cc {
diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc
index c3a4a1e..7bce7ee 100644
--- a/cc/scheduler/scheduler_state_machine.cc
+++ b/cc/scheduler/scheduler_state_machine.cc
@@ -4,11 +4,11 @@
 
 #include "cc/scheduler/scheduler_state_machine.h"
 
-#include "base/debug/trace_event.h"
-#include "base/debug/trace_event_argument.h"
 #include "base/format_macros.h"
 #include "base/logging.h"
 #include "base/strings/stringprintf.h"
+#include "base/trace_event/trace_event.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "base/values.h"
 #include "ui/gfx/frame_time.h"
 
@@ -48,7 +48,8 @@
       skip_begin_main_frame_to_reduce_latency_(false),
       continuous_painting_(false),
       impl_latency_takes_priority_on_battery_(false),
-      children_need_begin_frames_(false) {
+      children_need_begin_frames_(false),
+      defer_commits_(false) {
 }
 
 const char* SchedulerStateMachine::OutputSurfaceStateToString(
@@ -238,6 +239,7 @@
   state->SetBoolean("impl_latency_takes_priority_on_battery",
                     impl_latency_takes_priority_on_battery_);
   state->SetBoolean("children_need_begin_frames", children_need_begin_frames_);
+  state->SetBoolean("defer_commits", defer_commits_);
   state->EndDictionary();
 }
 
@@ -414,6 +416,10 @@
   if (!visible_)
     return false;
 
+  // Do not make a new commits when it is deferred.
+  if (defer_commits_)
+    return false;
+
   return true;
 }
 
@@ -769,6 +775,10 @@
   children_need_begin_frames_ = children_need_begin_frames;
 }
 
+void SchedulerStateMachine::SetDeferCommits(bool defer_commits) {
+  defer_commits_ = defer_commits;
+}
+
 // These are the cases where we definitely (or almost definitely) have a
 // new frame to animate and/or draw and can draw.
 bool SchedulerStateMachine::BeginFrameNeededToAnimateOrDraw() const {
@@ -1052,6 +1062,7 @@
   switch (reason) {
     case CommitEarlyOutReason::ABORTED_OUTPUT_SURFACE_LOST:
     case CommitEarlyOutReason::ABORTED_NOT_VISIBLE:
+    case CommitEarlyOutReason::ABORTED_DEFERRED_COMMIT:
       commit_state_ = COMMIT_STATE_IDLE;
       SetNeedsCommit();
       return;
diff --git a/cc/scheduler/scheduler_state_machine.h b/cc/scheduler/scheduler_state_machine.h
index 9dc7817..aa153c6 100644
--- a/cc/scheduler/scheduler_state_machine.h
+++ b/cc/scheduler/scheduler_state_machine.h
@@ -259,6 +259,8 @@
         impl_latency_takes_priority_on_battery;
   }
 
+  void SetDeferCommits(bool defer_commits);
+
   // TODO(zmo): This is temporary for debugging crbug.com/393331.
   // We should remove it afterwards.
   std::string GetStatesForDebugging() const;
@@ -341,6 +343,7 @@
   bool continuous_painting_;
   bool impl_latency_takes_priority_on_battery_;
   bool children_need_begin_frames_;
+  bool defer_commits_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(SchedulerStateMachine);
diff --git a/cc/scheduler/scheduler_state_machine_unittest.cc b/cc/scheduler/scheduler_state_machine_unittest.cc
index 95e3684..ca0e441 100644
--- a/cc/scheduler/scheduler_state_machine_unittest.cc
+++ b/cc/scheduler/scheduler_state_machine_unittest.cc
@@ -4,7 +4,7 @@
 
 #include "cc/scheduler/scheduler_state_machine.h"
 
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/scheduler/scheduler.h"
 #include "cc/test/begin_frame_args_test.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -1813,5 +1813,28 @@
   EXPECT_TRUE(state.BeginFrameNeeded());
 }
 
+TEST(SchedulerStateMachineTest, TestDeferCommit) {
+  SchedulerSettings settings;
+  StateMachine state(settings);
+  SET_UP_STATE(state)
+
+  state.SetDeferCommits(true);
+
+  state.SetNeedsCommit();
+  EXPECT_TRUE(state.BeginFrameNeeded());
+  EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
+
+  state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
+  EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
+
+  state.OnBeginImplFrameDeadline();
+  EXPECT_ACTION_UPDATE_STATE(SchedulerStateMachine::ACTION_NONE);
+
+  state.SetDeferCommits(false);
+  state.OnBeginImplFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
+  EXPECT_ACTION_UPDATE_STATE(
+      SchedulerStateMachine::ACTION_SEND_BEGIN_MAIN_FRAME);
+}
+
 }  // namespace
 }  // namespace cc
diff --git a/cc/scheduler/scheduler_unittest.cc b/cc/scheduler/scheduler_unittest.cc
index 29e4c49..e4ce6b3 100644
--- a/cc/scheduler/scheduler_unittest.cc
+++ b/cc/scheduler/scheduler_unittest.cc
@@ -7,7 +7,6 @@
 #include <string>
 #include <vector>
 
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "base/memory/scoped_vector.h"
 #include "base/message_loop/message_loop.h"
@@ -15,22 +14,23 @@
 #include "base/power_monitor/power_monitor_source.h"
 #include "base/run_loop.h"
 #include "base/time/time.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/test/begin_frame_args_test.h"
 #include "cc/test/ordered_simple_task_runner.h"
 #include "cc/test/scheduler_test_common.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-#define EXPECT_ACTION(action, client, action_index, expected_num_actions) \
-  do {                                                                    \
-    EXPECT_EQ(expected_num_actions, client.num_actions_());               \
-    if (action_index >= 0) {                                              \
-      ASSERT_LT(action_index, client.num_actions_()) << scheduler;        \
-      EXPECT_STREQ(action, client.Action(action_index));                  \
-    }                                                                     \
-    for (int i = expected_num_actions; i < client.num_actions_(); ++i)    \
-      ADD_FAILURE() << "Unexpected action: " << client.Action(i)          \
-                    << " with state:\n" << client.StateForAction(i);      \
+#define EXPECT_ACTION(action, client, action_index, expected_num_actions)  \
+  do {                                                                     \
+    EXPECT_EQ(expected_num_actions, client->num_actions_());               \
+    if (action_index >= 0) {                                               \
+      ASSERT_LT(action_index, client->num_actions_()) << scheduler_.get(); \
+      EXPECT_STREQ(action, client->Action(action_index));                  \
+    }                                                                      \
+    for (int i = expected_num_actions; i < client->num_actions_(); ++i)    \
+      ADD_FAILURE() << "Unexpected action: " << client->Action(i)          \
+                    << " with state:\n" << client->StateForAction(i);      \
   } while (false)
 
 #define EXPECT_NO_ACTION(client) EXPECT_ACTION("", client, -1, 0)
@@ -44,69 +44,15 @@
     statements;                   \
   }
 
-#define CREATE_SCHEDULER_AND_INIT_SURFACE(settings)            \
-  TestScheduler* scheduler = client.CreateScheduler(settings); \
-  EXPECT_SCOPED(client.InitializeOutputSurfaceAndFirstCommit(scheduler));
-
 namespace cc {
 namespace {
 
-class FakeSchedulerClient;
-
 class FakeSchedulerClient : public SchedulerClient {
  public:
-  class FakeExternalBeginFrameSource : public BeginFrameSourceMixIn {
-   public:
-    explicit FakeExternalBeginFrameSource(FakeSchedulerClient* client)
-        : client_(client) {}
-    ~FakeExternalBeginFrameSource() override {}
-
-    void OnNeedsBeginFramesChange(bool needs_begin_frames) override {
-      if (needs_begin_frames) {
-        client_->PushAction("SetNeedsBeginFrames(true)");
-      } else {
-        client_->PushAction("SetNeedsBeginFrames(false)");
-      }
-      client_->states_.push_back(client_->scheduler_->AsValue());
-    }
-
-    void TestOnBeginFrame(const BeginFrameArgs& args) {
-      return CallOnBeginFrame(args);
-    }
-
-   private:
-    FakeSchedulerClient* client_;
-  };
-
-  class FakePowerMonitorSource : public base::PowerMonitorSource {
-   public:
-    FakePowerMonitorSource() {}
-    ~FakePowerMonitorSource() override {}
-    void GeneratePowerStateEvent(bool on_battery_power) {
-      on_battery_power_impl_ = on_battery_power;
-      ProcessPowerEvent(POWER_STATE_EVENT);
-      base::MessageLoop::current()->RunUntilIdle();
-    }
-    bool IsOnBatteryPowerImpl() override { return on_battery_power_impl_; }
-
-   private:
-    bool on_battery_power_impl_;
-  };
-
   FakeSchedulerClient()
       : automatic_swap_ack_(true),
         begin_frame_is_sent_to_children_(false),
-        now_src_(TestNowSource::Create()),
-        task_runner_(new OrderedSimpleTaskRunner(now_src_, true)),
-        fake_external_begin_frame_source_(nullptr),
-        fake_power_monitor_source_(new FakePowerMonitorSource),
-        power_monitor_(make_scoped_ptr<base::PowerMonitorSource>(
-            fake_power_monitor_source_)),
         scheduler_(nullptr) {
-    // A bunch of tests require Now() to be > BeginFrameArgs::DefaultInterval()
-    now_src_->AdvanceNow(base::TimeDelta::FromMilliseconds(100));
-    // Fail if we need to run 100 tasks in a row.
-    task_runner_->SetRunTaskLimit(100);
     Reset();
   }
 
@@ -120,24 +66,7 @@
     begin_frame_is_sent_to_children_ = false;
   }
 
-  TestScheduler* CreateScheduler(const SchedulerSettings& settings) {
-    scoped_ptr<FakeExternalBeginFrameSource> fake_external_begin_frame_source;
-    if (settings.use_external_begin_frame_source) {
-      fake_external_begin_frame_source.reset(
-          new FakeExternalBeginFrameSource(this));
-      fake_external_begin_frame_source_ =
-          fake_external_begin_frame_source.get();
-    }
-    scheduler_ = TestScheduler::Create(now_src_,
-                                       this,
-                                       settings,
-                                       0,
-                                       task_runner_,
-                                       &power_monitor_,
-                                       fake_external_begin_frame_source.Pass());
-    DCHECK(scheduler_);
-    return scheduler_.get();
-  }
+  void set_scheduler(TestScheduler* scheduler) { scheduler_ = scheduler; }
 
   // Most tests don't care about DidAnticipatedDrawTimeChange, so only record it
   // for tests that do.
@@ -155,113 +84,6 @@
     return posted_begin_impl_frame_deadline_;
   }
 
-  FakeExternalBeginFrameSource* fake_external_begin_frame_source() const {
-    return fake_external_begin_frame_source_;
-  }
-
-  base::PowerMonitor* PowerMonitor() { return &power_monitor_; }
-
-  FakePowerMonitorSource* PowerMonitorSource() {
-    return fake_power_monitor_source_;
-  }
-
-  // As this function contains EXPECT macros, to allow debugging it should be
-  // called inside EXPECT_SCOPED like so;
-  //   EXPECT_SCOPED(client.InitializeOutputSurfaceAndFirstCommit(scheduler));
-  void InitializeOutputSurfaceAndFirstCommit(TestScheduler* scheduler) {
-    TRACE_EVENT0("cc",
-                 "SchedulerUnitTest::InitializeOutputSurfaceAndFirstCommit");
-    DCHECK(scheduler);
-
-    // Check the client doesn't have any actions queued when calling this
-    // function.
-    EXPECT_NO_ACTION((*this));
-    EXPECT_FALSE(needs_begin_frames());
-
-    // Start the initial output surface creation.
-    EXPECT_FALSE(scheduler->CanStart());
-    scheduler->SetCanStart();
-    scheduler->SetVisible(true);
-    scheduler->SetCanDraw(true);
-    EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", (*this));
-    Reset();
-
-    // We don't see anything happening until the first impl frame.
-    scheduler->DidCreateAndInitializeOutputSurface();
-    scheduler->SetNeedsCommit();
-    EXPECT_TRUE(needs_begin_frames());
-    EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-    Reset();
-
-    {
-      SCOPED_TRACE("Do first frame to commit after initialize.");
-      AdvanceFrame();
-
-      scheduler->NotifyBeginMainFrameStarted();
-      scheduler->NotifyReadyToCommitThenActivateIfNeeded();
-
-      // Run the posted deadline task.
-      EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-      task_runner().RunTasksWhile(ImplFrameDeadlinePending(true));
-      EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-
-      EXPECT_FALSE(scheduler->CommitPending());
-    }
-
-    Reset();
-
-    {
-      SCOPED_TRACE(
-          "Run second frame so Scheduler calls SetNeedsBeginFrame(false).");
-      AdvanceFrame();
-
-      // Run the posted deadline task.
-      EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-      task_runner().RunTasksWhile(ImplFrameDeadlinePending(true));
-      EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-    }
-
-    EXPECT_FALSE(needs_begin_frames());
-    Reset();
-  }
-
-  // As this function contains EXPECT macros, to allow debugging it should be
-  // called inside EXPECT_SCOPED like so;
-  //   EXPECT_SCOPED(client.AdvanceFrame());
-  void AdvanceFrame() {
-    TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.frames"),
-                 "FakeSchedulerClient::AdvanceFrame");
-    // Consume any previous deadline first, if no deadline is currently
-    // pending, ImplFrameDeadlinePending will return false straight away and we
-    // will run no tasks.
-    task_runner().RunTasksWhile(ImplFrameDeadlinePending(true));
-    EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
-
-    // Send the next BeginFrame message if using an external source, otherwise
-    // it will be already in the task queue.
-    if (scheduler_->settings().use_external_begin_frame_source &&
-        scheduler_->FrameProductionThrottled()) {
-      SendNextBeginFrame();
-      EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
-    }
-
-    // Then run tasks until new deadline is scheduled.
-    EXPECT_TRUE(task_runner().RunTasksWhile(ImplFrameDeadlinePending(false)));
-    EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
-  }
-
-  void SendNextBeginFrame() {
-    DCHECK(scheduler_->settings().use_external_begin_frame_source);
-    // Creep the time forward so that any BeginFrameArgs is not equal to the
-    // last one otherwise we violate the BeginFrameSource contract.
-    now_src_->AdvanceNow(BeginFrameArgs::DefaultInterval());
-    fake_external_begin_frame_source_->TestOnBeginFrame(
-        CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, now_src_));
-  }
-
-  OrderedSimpleTaskRunner& task_runner() { return *task_runner_; }
-  TestNowSource* now_src() { return now_src_.get(); }
-
   int ActionIndex(const char* action) const {
     for (size_t i = 0; i < actions_.size(); i++)
       if (!strcmp(actions_[i], action))
@@ -349,16 +171,16 @@
     return begin_frame_is_sent_to_children_;
   }
 
- protected:
-  bool ImplFrameDeadlinePendingCallback(bool state) {
-    return scheduler_->BeginImplFrameDeadlinePending() == state;
-  }
-
   void PushAction(const char* description) {
     actions_.push_back(description);
     states_.push_back(scheduler_->AsValue());
   }
 
+ protected:
+  bool ImplFrameDeadlinePendingCallback(bool state) {
+    return scheduler_->BeginImplFrameDeadlinePending() == state;
+  }
+
   bool draw_will_happen_;
   bool swap_will_happen_if_draw_happens_;
   bool automatic_swap_ack_;
@@ -368,199 +190,471 @@
   base::TimeTicks posted_begin_impl_frame_deadline_;
   std::vector<const char*> actions_;
   std::vector<scoped_refptr<base::debug::ConvertableToTraceFormat>> states_;
+  TestScheduler* scheduler_;
+};
+
+class FakePowerMonitorSource : public base::PowerMonitorSource {
+ public:
+  FakePowerMonitorSource() {}
+  ~FakePowerMonitorSource() override {}
+  void GeneratePowerStateEvent(bool on_battery_power) {
+    on_battery_power_impl_ = on_battery_power;
+    ProcessPowerEvent(POWER_STATE_EVENT);
+    base::MessageLoop::current()->RunUntilIdle();
+  }
+  bool IsOnBatteryPowerImpl() override { return on_battery_power_impl_; }
+
+ private:
+  bool on_battery_power_impl_;
+};
+
+class FakeExternalBeginFrameSource : public BeginFrameSourceMixIn {
+ public:
+  explicit FakeExternalBeginFrameSource(FakeSchedulerClient* client)
+      : client_(client) {}
+  ~FakeExternalBeginFrameSource() override {}
+
+  void OnNeedsBeginFramesChange(bool needs_begin_frames) override {
+    if (needs_begin_frames) {
+      client_->PushAction("SetNeedsBeginFrames(true)");
+    } else {
+      client_->PushAction("SetNeedsBeginFrames(false)");
+    }
+  }
+
+  void TestOnBeginFrame(const BeginFrameArgs& args) {
+    return CallOnBeginFrame(args);
+  }
+
+ private:
+  FakeSchedulerClient* client_;
+};
+
+class SchedulerTest : public testing::Test {
+ public:
+  SchedulerTest()
+      : now_src_(TestNowSource::Create()),
+        task_runner_(new OrderedSimpleTaskRunner(now_src_, true)),
+        fake_external_begin_frame_source_(nullptr),
+        fake_power_monitor_source_(new FakePowerMonitorSource),
+        power_monitor_(make_scoped_ptr<base::PowerMonitorSource>(
+            fake_power_monitor_source_)) {
+    // A bunch of tests require Now() to be > BeginFrameArgs::DefaultInterval()
+    now_src_->AdvanceNow(base::TimeDelta::FromMilliseconds(100));
+    // Fail if we need to run 100 tasks in a row.
+    task_runner_->SetRunTaskLimit(100);
+  }
+
+  ~SchedulerTest() override {}
+
+ protected:
+  TestScheduler* CreateScheduler() {
+    scoped_ptr<FakeExternalBeginFrameSource> fake_external_begin_frame_source;
+    if (scheduler_settings_.use_external_begin_frame_source) {
+      fake_external_begin_frame_source.reset(
+          new FakeExternalBeginFrameSource(client_.get()));
+      fake_external_begin_frame_source_ =
+          fake_external_begin_frame_source.get();
+    }
+    scheduler_ = TestScheduler::Create(
+        now_src_, client_.get(), scheduler_settings_, 0, task_runner_,
+        &power_monitor_, fake_external_begin_frame_source.Pass());
+    DCHECK(scheduler_);
+    client_->set_scheduler(scheduler_.get());
+    return scheduler_.get();
+  }
+
+  void CreateSchedulerAndInitSurface() {
+    CreateScheduler();
+    EXPECT_SCOPED(InitializeOutputSurfaceAndFirstCommit());
+  }
+
+  void SetUpScheduler(bool initSurface) {
+    SetUpScheduler(make_scoped_ptr(new FakeSchedulerClient), initSurface);
+  }
+
+  void SetUpScheduler(scoped_ptr<FakeSchedulerClient> client,
+                      bool initSurface) {
+    client_ = client.Pass();
+    if (initSurface)
+      CreateSchedulerAndInitSurface();
+    else
+      CreateScheduler();
+  }
+
+  OrderedSimpleTaskRunner& task_runner() { return *task_runner_; }
+  TestNowSource* now_src() { return now_src_.get(); }
+
+  // As this function contains EXPECT macros, to allow debugging it should be
+  // called inside EXPECT_SCOPED like so;
+  //   EXPECT_SCOPED(client.InitializeOutputSurfaceAndFirstCommit(scheduler));
+  void InitializeOutputSurfaceAndFirstCommit() {
+    TRACE_EVENT0("cc",
+                 "SchedulerUnitTest::InitializeOutputSurfaceAndFirstCommit");
+    DCHECK(scheduler_);
+
+    // Check the client doesn't have any actions queued when calling this
+    // function.
+    EXPECT_NO_ACTION(client_);
+    EXPECT_FALSE(client_->needs_begin_frames());
+
+    // Start the initial output surface creation.
+    EXPECT_FALSE(scheduler_->CanStart());
+    scheduler_->SetCanStart();
+    scheduler_->SetVisible(true);
+    scheduler_->SetCanDraw(true);
+    EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_);
+
+    client_->Reset();
+
+    // We don't see anything happening until the first impl frame.
+    scheduler_->DidCreateAndInitializeOutputSurface();
+    scheduler_->SetNeedsCommit();
+    EXPECT_TRUE(client_->needs_begin_frames());
+    EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+    client_->Reset();
+
+    {
+      SCOPED_TRACE("Do first frame to commit after initialize.");
+      AdvanceFrame();
+
+      scheduler_->NotifyBeginMainFrameStarted();
+      scheduler_->NotifyReadyToCommitThenActivateIfNeeded();
+
+      // Run the posted deadline task.
+      EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+      task_runner_->RunTasksWhile(client_->ImplFrameDeadlinePending(true));
+      EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+
+      EXPECT_FALSE(scheduler_->CommitPending());
+    }
+
+    client_->Reset();
+
+    {
+      SCOPED_TRACE(
+          "Run second frame so Scheduler calls SetNeedsBeginFrame(false).");
+      AdvanceFrame();
+
+      // Run the posted deadline task.
+      EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+      task_runner_->RunTasksWhile(client_->ImplFrameDeadlinePending(true));
+      EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+    }
+
+    EXPECT_FALSE(client_->needs_begin_frames());
+    client_->Reset();
+  }
+
+  // As this function contains EXPECT macros, to allow debugging it should be
+  // called inside EXPECT_SCOPED like so;
+  //   EXPECT_SCOPED(client.AdvanceFrame());
+  void AdvanceFrame() {
+    TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.frames"),
+                 "FakeSchedulerClient::AdvanceFrame");
+    // Consume any previous deadline first, if no deadline is currently
+    // pending, ImplFrameDeadlinePending will return false straight away and we
+    // will run no tasks.
+    task_runner_->RunTasksWhile(client_->ImplFrameDeadlinePending(true));
+    EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+
+    // Send the next BeginFrame message if using an external source, otherwise
+    // it will be already in the task queue.
+    if (scheduler_->settings().use_external_begin_frame_source &&
+        scheduler_->FrameProductionThrottled()) {
+      SendNextBeginFrame();
+      EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+    }
+
+    // Then run tasks until new deadline is scheduled.
+    EXPECT_TRUE(
+        task_runner_->RunTasksWhile(client_->ImplFrameDeadlinePending(false)));
+    EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  }
+
+  void SendNextBeginFrame() {
+    DCHECK(scheduler_->settings().use_external_begin_frame_source);
+    // Creep the time forward so that any BeginFrameArgs is not equal to the
+    // last one otherwise we violate the BeginFrameSource contract.
+    now_src_->AdvanceNow(BeginFrameArgs::DefaultInterval());
+    fake_external_begin_frame_source_->TestOnBeginFrame(
+        CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, now_src()));
+  }
+
+  base::PowerMonitor* PowerMonitor() { return &power_monitor_; }
+  FakePowerMonitorSource* PowerMonitorSource() {
+    return fake_power_monitor_source_;
+  }
+
+  FakeExternalBeginFrameSource* fake_external_begin_frame_source() const {
+    return fake_external_begin_frame_source_;
+  }
+
+  void MainFrameInHighLatencyMode(
+      int64 begin_main_frame_to_commit_estimate_in_ms,
+      int64 commit_to_activate_estimate_in_ms,
+      bool impl_latency_takes_priority,
+      bool should_send_begin_main_frame);
+  void BeginFramesNotFromClient(bool use_external_begin_frame_source,
+                                bool throttle_frame_production);
+  void BeginFramesNotFromClient_SwapThrottled(
+      bool use_external_begin_frame_source,
+      bool throttle_frame_production);
+  void DidLoseOutputSurfaceAfterBeginFrameStartedWithHighLatency(
+      bool impl_side_painting);
+  void DidLoseOutputSurfaceAfterReadyToCommit(bool impl_side_painting);
+
   scoped_refptr<TestNowSource> now_src_;
   scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
   FakeExternalBeginFrameSource* fake_external_begin_frame_source_;
   FakePowerMonitorSource* fake_power_monitor_source_;
   base::PowerMonitor power_monitor_;
+  SchedulerSettings scheduler_settings_;
+  scoped_ptr<FakeSchedulerClient> client_;
   scoped_ptr<TestScheduler> scheduler_;
 };
 
-TEST(SchedulerTest, InitializeOutputSurfaceDoesNotBeginImplFrame) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
-  TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
-  scheduler->SetCanStart();
-  scheduler->SetVisible(true);
-  scheduler->SetCanDraw(true);
+TEST_F(SchedulerTest, InitializeOutputSurfaceDoesNotBeginImplFrame) {
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(false);
+  scheduler_->SetCanStart();
+  scheduler_->SetVisible(true);
+  scheduler_->SetCanDraw(true);
 
-  EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
-  client.Reset();
-  scheduler->DidCreateAndInitializeOutputSurface();
-  EXPECT_NO_ACTION(client);
+  EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_);
+  client_->Reset();
+  scheduler_->DidCreateAndInitializeOutputSurface();
+  EXPECT_NO_ACTION(client_);
 }
 
-TEST(SchedulerTest, SendBeginFramesToChildren) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
-  scheduler_settings.forward_begin_frames_to_children = true;
+TEST_F(SchedulerTest, SendBeginFramesToChildren) {
+  scheduler_settings_.use_external_begin_frame_source = true;
+  scheduler_settings_.forward_begin_frames_to_children = true;
+  SetUpScheduler(true);
 
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+  EXPECT_FALSE(client_->begin_frame_is_sent_to_children());
+  scheduler_->SetNeedsCommit();
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_);
+  EXPECT_TRUE(client_->needs_begin_frames());
 
-  EXPECT_FALSE(client.begin_frame_is_sent_to_children());
-  scheduler->SetNeedsCommit();
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
-  EXPECT_TRUE(client.needs_begin_frames());
+  scheduler_->SetChildrenNeedBeginFrames(true);
 
-  scheduler->SetChildrenNeedBeginFrames(true);
-
-  client.Reset();
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_TRUE(client.begin_frame_is_sent_to_children());
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
-  EXPECT_TRUE(client.needs_begin_frames());
+  client_->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_TRUE(client_->begin_frame_is_sent_to_children());
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2);
+  EXPECT_TRUE(client_->needs_begin_frames());
 }
 
-TEST(SchedulerTest, SendBeginFramesToChildrenWithoutCommit) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
-  scheduler_settings.forward_begin_frames_to_children = true;
+TEST_F(SchedulerTest, SendBeginFramesToChildrenWithoutCommit) {
+  scheduler_settings_.use_external_begin_frame_source = true;
+  scheduler_settings_.forward_begin_frames_to_children = true;
+  SetUpScheduler(true);
 
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+  EXPECT_FALSE(client_->needs_begin_frames());
+  scheduler_->SetChildrenNeedBeginFrames(true);
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_);
+  EXPECT_TRUE(client_->needs_begin_frames());
 
-  EXPECT_FALSE(client.needs_begin_frames());
-  scheduler->SetChildrenNeedBeginFrames(true);
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
-  EXPECT_TRUE(client.needs_begin_frames());
-
-  client.Reset();
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_TRUE(client.begin_frame_is_sent_to_children());
+  client_->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_TRUE(client_->begin_frame_is_sent_to_children());
 }
 
-TEST(SchedulerTest, RequestCommit) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
-
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+TEST_F(SchedulerTest, RequestCommit) {
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(true);
 
   // SetNeedsCommit should begin the frame on the next BeginImplFrame.
-  scheduler->SetNeedsCommit();
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
-  client.Reset();
+  scheduler_->SetNeedsCommit();
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_);
+  client_->Reset();
 
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
 
   // If we don't swap on the deadline, we wait for the next BeginFrame.
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_NO_ACTION(client);
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_NO_ACTION(client_);
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
 
   // NotifyReadyToCommit should trigger the commit.
-  scheduler->NotifyBeginMainFrameStarted();
-  scheduler->NotifyReadyToCommit();
-  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
+  scheduler_->NotifyBeginMainFrameStarted();
+  scheduler_->NotifyReadyToCommit();
+  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_);
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
 
   // BeginImplFrame should prepare the draw.
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
 
   // BeginImplFrame deadline should draw.
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 1);
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 0, 1);
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
 
   // The following BeginImplFrame deadline should SetNeedsBeginFrame(false)
   // to avoid excessive toggles.
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_SINGLE_ACTION("WillBeginImplFrame", client);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_SINGLE_ACTION("WillBeginImplFrame", client_);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  client_->Reset();
 
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
-  client.Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client_);
+  client_->Reset();
 }
 
-TEST(SchedulerTest, RequestCommitAfterBeginMainFrameSent) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
+TEST_F(SchedulerTest, RequestCommitAfterSetDeferCommit) {
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(true);
 
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+  scheduler_->SetCanStart();
+  scheduler_->SetVisible(true);
+  scheduler_->SetCanDraw(true);
+
+  scheduler_->SetDeferCommits(true);
+
+  scheduler_->SetNeedsCommit();
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_);
+
+  client_->Reset();
+  AdvanceFrame();
+  // BeginMainFrame is not sent during the defer commit is on.
+  EXPECT_SINGLE_ACTION("WillBeginImplFrame", client_);
+
+  client_->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  // There is no posted deadline.
+  EXPECT_NO_ACTION(client_);
+  EXPECT_TRUE(client_->needs_begin_frames());
+
+  client_->Reset();
+  scheduler_->SetDeferCommits(false);
+  EXPECT_NO_ACTION(client_);
+
+  // Start new BeginMainFrame after defer commit is off.
+  client_->Reset();
+  AdvanceFrame();
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+}
+
+TEST_F(SchedulerTest, DeferCommitWithRedraw) {
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(true);
+
+  scheduler_->SetCanStart();
+  scheduler_->SetVisible(true);
+  scheduler_->SetCanDraw(true);
+
+  scheduler_->SetDeferCommits(true);
+
+  scheduler_->SetNeedsCommit();
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_);
+
+  client_->Reset();
+  scheduler_->SetNeedsRedraw();
+  EXPECT_NO_ACTION(client_);
+
+  client_->Reset();
+  AdvanceFrame();
+  // BeginMainFrame is not sent during the defer commit is on.
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2);
+
+  client_->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_SINGLE_ACTION("ScheduledActionDrawAndSwapIfPossible", client_);
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
+
+  client_->Reset();
+  AdvanceFrame();
+  EXPECT_SINGLE_ACTION("WillBeginImplFrame", client_);
+}
+
+TEST_F(SchedulerTest, RequestCommitAfterBeginMainFrameSent) {
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(true);
 
   // SetNeedsCommit should begin the frame.
-  scheduler->SetNeedsCommit();
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
+  scheduler_->SetNeedsCommit();
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_);
 
-  client.Reset();
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  client_->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
 
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
 
   // Now SetNeedsCommit again. Calling here means we need a second commit.
-  scheduler->SetNeedsCommit();
-  EXPECT_EQ(client.num_actions_(), 0);
-  client.Reset();
+  scheduler_->SetNeedsCommit();
+  EXPECT_EQ(client_->num_actions_(), 0);
+  client_->Reset();
 
   // Finish the first commit.
-  scheduler->NotifyBeginMainFrameStarted();
-  scheduler->NotifyReadyToCommit();
-  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_ACTION("ScheduledActionAnimate", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2);
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
+  scheduler_->NotifyBeginMainFrameStarted();
+  scheduler_->NotifyReadyToCommit();
+  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  client_->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 1, 2);
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
 
   // Because we just swapped, the Scheduler should also request the next
   // BeginImplFrame from the OutputSurface.
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
   // Since another commit is needed, the next BeginImplFrame should initiate
   // the second commit.
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  client_->Reset();
 
   // Finishing the commit before the deadline should post a new deadline task
   // to trigger the deadline early.
-  scheduler->NotifyBeginMainFrameStarted();
-  scheduler->NotifyReadyToCommit();
-  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_ACTION("ScheduledActionAnimate", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2);
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
+  scheduler_->NotifyBeginMainFrameStarted();
+  scheduler_->NotifyReadyToCommit();
+  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  client_->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 1, 2);
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
 
   // On the next BeginImplFrame, verify we go back to a quiescent state and
   // no longer request BeginImplFrames.
-  EXPECT_SCOPED(client.AdvanceFrame());
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_FALSE(client.needs_begin_frames());
-  client.Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_FALSE(client_->needs_begin_frames());
+  client_->Reset();
 }
 
 class SchedulerClientThatsetNeedsDrawInsideDraw : public FakeSchedulerClient {
@@ -596,86 +690,85 @@
 // 1. the scheduler dropping SetNeedsRedraw requests that happen inside
 //    a ScheduledActionDrawAndSwap
 // 2. the scheduler drawing twice inside a single tick
-TEST(SchedulerTest, RequestRedrawInsideDraw) {
-  SchedulerClientThatsetNeedsDrawInsideDraw client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
+TEST_F(SchedulerTest, RequestRedrawInsideDraw) {
+  SchedulerClientThatsetNeedsDrawInsideDraw* client =
+      new SchedulerClientThatsetNeedsDrawInsideDraw;
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(make_scoped_ptr(client).Pass(), true);
+  client->SetRequestRedrawsInsideDraw(true);
 
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
-  client.SetRequestRedrawsInsideDraw(true);
+  scheduler_->SetNeedsRedraw();
+  EXPECT_TRUE(scheduler_->RedrawPending());
+  EXPECT_TRUE(client->needs_begin_frames());
+  EXPECT_EQ(0, client->num_draws());
 
-  scheduler->SetNeedsRedraw();
-  EXPECT_TRUE(scheduler->RedrawPending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  EXPECT_EQ(0, client.num_draws());
+  EXPECT_SCOPED(AdvanceFrame());
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(1, client->num_draws());
+  EXPECT_TRUE(scheduler_->RedrawPending());
+  EXPECT_TRUE(client->needs_begin_frames());
 
-  EXPECT_SCOPED(client.AdvanceFrame());
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(1, client.num_draws());
-  EXPECT_TRUE(scheduler->RedrawPending());
-  EXPECT_TRUE(client.needs_begin_frames());
+  client->SetRequestRedrawsInsideDraw(false);
 
-  client.SetRequestRedrawsInsideDraw(false);
-
-  EXPECT_SCOPED(client.AdvanceFrame());
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(2, client.num_draws());
-  EXPECT_FALSE(scheduler->RedrawPending());
-  EXPECT_TRUE(client.needs_begin_frames());
+  EXPECT_SCOPED(AdvanceFrame());
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(2, client_->num_draws());
+  EXPECT_FALSE(scheduler_->RedrawPending());
+  EXPECT_TRUE(client->needs_begin_frames());
 
   // We stop requesting BeginImplFrames after a BeginImplFrame where we don't
   // swap.
-  EXPECT_SCOPED(client.AdvanceFrame());
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(2, client.num_draws());
-  EXPECT_FALSE(scheduler->RedrawPending());
-  EXPECT_FALSE(client.needs_begin_frames());
+  EXPECT_SCOPED(AdvanceFrame());
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(2, client->num_draws());
+  EXPECT_FALSE(scheduler_->RedrawPending());
+  EXPECT_FALSE(client->needs_begin_frames());
 }
 
 // Test that requesting redraw inside a failed draw doesn't lose the request.
-TEST(SchedulerTest, RequestRedrawInsideFailedDraw) {
-  SchedulerClientThatsetNeedsDrawInsideDraw client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
+TEST_F(SchedulerTest, RequestRedrawInsideFailedDraw) {
+  SchedulerClientThatsetNeedsDrawInsideDraw* client =
+      new SchedulerClientThatsetNeedsDrawInsideDraw;
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(make_scoped_ptr(client).Pass(), true);
 
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
-  client.SetRequestRedrawsInsideDraw(true);
-  client.SetDrawWillHappen(false);
+  client->SetRequestRedrawsInsideDraw(true);
+  client->SetDrawWillHappen(false);
 
-  scheduler->SetNeedsRedraw();
-  EXPECT_TRUE(scheduler->RedrawPending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  EXPECT_EQ(0, client.num_draws());
+  scheduler_->SetNeedsRedraw();
+  EXPECT_TRUE(scheduler_->RedrawPending());
+  EXPECT_TRUE(client->needs_begin_frames());
+  EXPECT_EQ(0, client->num_draws());
 
   // Fail the draw.
-  EXPECT_SCOPED(client.AdvanceFrame());
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(1, client.num_draws());
+  EXPECT_SCOPED(AdvanceFrame());
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(1, client->num_draws());
 
   // We have a commit pending and the draw failed, and we didn't lose the redraw
   // request.
-  EXPECT_TRUE(scheduler->CommitPending());
-  EXPECT_TRUE(scheduler->RedrawPending());
-  EXPECT_TRUE(client.needs_begin_frames());
+  EXPECT_TRUE(scheduler_->CommitPending());
+  EXPECT_TRUE(scheduler_->RedrawPending());
+  EXPECT_TRUE(client->needs_begin_frames());
 
-  client.SetRequestRedrawsInsideDraw(false);
+  client->SetRequestRedrawsInsideDraw(false);
 
   // Fail the draw again.
-  EXPECT_SCOPED(client.AdvanceFrame());
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(2, client.num_draws());
-  EXPECT_TRUE(scheduler->CommitPending());
-  EXPECT_TRUE(scheduler->RedrawPending());
-  EXPECT_TRUE(client.needs_begin_frames());
+  EXPECT_SCOPED(AdvanceFrame());
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(2, client->num_draws());
+  EXPECT_TRUE(scheduler_->CommitPending());
+  EXPECT_TRUE(scheduler_->RedrawPending());
+  EXPECT_TRUE(client->needs_begin_frames());
 
   // Draw successfully.
-  client.SetDrawWillHappen(true);
-  EXPECT_SCOPED(client.AdvanceFrame());
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(3, client.num_draws());
-  EXPECT_TRUE(scheduler->CommitPending());
-  EXPECT_FALSE(scheduler->RedrawPending());
-  EXPECT_TRUE(client.needs_begin_frames());
+  client->SetDrawWillHappen(true);
+  EXPECT_SCOPED(AdvanceFrame());
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(3, client->num_draws());
+  EXPECT_TRUE(scheduler_->CommitPending());
+  EXPECT_FALSE(scheduler_->RedrawPending());
+  EXPECT_TRUE(client->needs_begin_frames());
 }
 
 class SchedulerClientThatSetNeedsCommitInsideDraw : public FakeSchedulerClient {
@@ -709,120 +802,118 @@
 
 // Tests for the scheduler infinite-looping on SetNeedsCommit requests that
 // happen inside a ScheduledActionDrawAndSwap
-TEST(SchedulerTest, RequestCommitInsideDraw) {
-  SchedulerClientThatSetNeedsCommitInsideDraw client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
+TEST_F(SchedulerTest, RequestCommitInsideDraw) {
+  SchedulerClientThatSetNeedsCommitInsideDraw* client =
+      new SchedulerClientThatSetNeedsCommitInsideDraw;
 
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(make_scoped_ptr(client).Pass(), true);
 
-  EXPECT_FALSE(client.needs_begin_frames());
-  scheduler->SetNeedsRedraw();
-  EXPECT_TRUE(scheduler->RedrawPending());
-  EXPECT_EQ(0, client.num_draws());
-  EXPECT_TRUE(client.needs_begin_frames());
+  EXPECT_FALSE(client->needs_begin_frames());
+  scheduler_->SetNeedsRedraw();
+  EXPECT_TRUE(scheduler_->RedrawPending());
+  EXPECT_EQ(0, client->num_draws());
+  EXPECT_TRUE(client->needs_begin_frames());
 
-  client.SetNeedsCommitOnNextDraw();
-  EXPECT_SCOPED(client.AdvanceFrame());
-  client.SetNeedsCommitOnNextDraw();
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(1, client.num_draws());
-  EXPECT_TRUE(scheduler->CommitPending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  scheduler->NotifyBeginMainFrameStarted();
-  scheduler->NotifyReadyToCommit();
+  client->SetNeedsCommitOnNextDraw();
+  EXPECT_SCOPED(AdvanceFrame());
+  client->SetNeedsCommitOnNextDraw();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(1, client->num_draws());
+  EXPECT_TRUE(scheduler_->CommitPending());
+  EXPECT_TRUE(client->needs_begin_frames());
+  scheduler_->NotifyBeginMainFrameStarted();
+  scheduler_->NotifyReadyToCommit();
 
-  EXPECT_SCOPED(client.AdvanceFrame());
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(2, client.num_draws());
+  EXPECT_SCOPED(AdvanceFrame());
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(2, client->num_draws());
 
-  EXPECT_FALSE(scheduler->RedrawPending());
-  EXPECT_FALSE(scheduler->CommitPending());
-  EXPECT_TRUE(client.needs_begin_frames());
+  EXPECT_FALSE(scheduler_->RedrawPending());
+  EXPECT_FALSE(scheduler_->CommitPending());
+  EXPECT_TRUE(client->needs_begin_frames());
 
   // We stop requesting BeginImplFrames after a BeginImplFrame where we don't
   // swap.
-  EXPECT_SCOPED(client.AdvanceFrame());
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(2, client.num_draws());
-  EXPECT_FALSE(scheduler->RedrawPending());
-  EXPECT_FALSE(scheduler->CommitPending());
-  EXPECT_FALSE(client.needs_begin_frames());
+  EXPECT_SCOPED(AdvanceFrame());
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(2, client->num_draws());
+  EXPECT_FALSE(scheduler_->RedrawPending());
+  EXPECT_FALSE(scheduler_->CommitPending());
+  EXPECT_FALSE(client->needs_begin_frames());
 }
 
 // Tests that when a draw fails then the pending commit should not be dropped.
-TEST(SchedulerTest, RequestCommitInsideFailedDraw) {
-  SchedulerClientThatsetNeedsDrawInsideDraw client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
+TEST_F(SchedulerTest, RequestCommitInsideFailedDraw) {
+  SchedulerClientThatsetNeedsDrawInsideDraw* client =
+      new SchedulerClientThatsetNeedsDrawInsideDraw;
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(make_scoped_ptr(client).Pass(), true);
 
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+  client->SetDrawWillHappen(false);
 
-  client.SetDrawWillHappen(false);
-
-  scheduler->SetNeedsRedraw();
-  EXPECT_TRUE(scheduler->RedrawPending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  EXPECT_EQ(0, client.num_draws());
+  scheduler_->SetNeedsRedraw();
+  EXPECT_TRUE(scheduler_->RedrawPending());
+  EXPECT_TRUE(client->needs_begin_frames());
+  EXPECT_EQ(0, client->num_draws());
 
   // Fail the draw.
-  EXPECT_SCOPED(client.AdvanceFrame());
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(1, client.num_draws());
+  EXPECT_SCOPED(AdvanceFrame());
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(1, client->num_draws());
 
   // We have a commit pending and the draw failed, and we didn't lose the commit
   // request.
-  EXPECT_TRUE(scheduler->CommitPending());
-  EXPECT_TRUE(scheduler->RedrawPending());
-  EXPECT_TRUE(client.needs_begin_frames());
+  EXPECT_TRUE(scheduler_->CommitPending());
+  EXPECT_TRUE(scheduler_->RedrawPending());
+  EXPECT_TRUE(client->needs_begin_frames());
 
   // Fail the draw again.
-  EXPECT_SCOPED(client.AdvanceFrame());
+  EXPECT_SCOPED(AdvanceFrame());
 
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(2, client.num_draws());
-  EXPECT_TRUE(scheduler->CommitPending());
-  EXPECT_TRUE(scheduler->RedrawPending());
-  EXPECT_TRUE(client.needs_begin_frames());
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(2, client->num_draws());
+  EXPECT_TRUE(scheduler_->CommitPending());
+  EXPECT_TRUE(scheduler_->RedrawPending());
+  EXPECT_TRUE(client->needs_begin_frames());
 
   // Draw successfully.
-  client.SetDrawWillHappen(true);
-  EXPECT_SCOPED(client.AdvanceFrame());
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(3, client.num_draws());
-  EXPECT_TRUE(scheduler->CommitPending());
-  EXPECT_FALSE(scheduler->RedrawPending());
-  EXPECT_TRUE(client.needs_begin_frames());
+  client->SetDrawWillHappen(true);
+  EXPECT_SCOPED(AdvanceFrame());
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(3, client->num_draws());
+  EXPECT_TRUE(scheduler_->CommitPending());
+  EXPECT_FALSE(scheduler_->RedrawPending());
+  EXPECT_TRUE(client->needs_begin_frames());
 }
 
-TEST(SchedulerTest, NoSwapWhenDrawFails) {
-  SchedulerClientThatSetNeedsCommitInsideDraw client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
+TEST_F(SchedulerTest, NoSwapWhenDrawFails) {
+  SchedulerClientThatSetNeedsCommitInsideDraw* client =
+      new SchedulerClientThatSetNeedsCommitInsideDraw;
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(make_scoped_ptr(client).Pass(), true);
 
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
-
-  scheduler->SetNeedsRedraw();
-  EXPECT_TRUE(scheduler->RedrawPending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  EXPECT_EQ(0, client.num_draws());
+  scheduler_->SetNeedsRedraw();
+  EXPECT_TRUE(scheduler_->RedrawPending());
+  EXPECT_TRUE(client->needs_begin_frames());
+  EXPECT_EQ(0, client->num_draws());
 
   // Draw successfully, this starts a new frame.
-  client.SetNeedsCommitOnNextDraw();
-  EXPECT_SCOPED(client.AdvanceFrame());
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(1, client.num_draws());
+  client->SetNeedsCommitOnNextDraw();
+  EXPECT_SCOPED(AdvanceFrame());
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(1, client->num_draws());
 
-  scheduler->SetNeedsRedraw();
-  EXPECT_TRUE(scheduler->RedrawPending());
-  EXPECT_TRUE(client.needs_begin_frames());
+  scheduler_->SetNeedsRedraw();
+  EXPECT_TRUE(scheduler_->RedrawPending());
+  EXPECT_TRUE(client->needs_begin_frames());
 
   // Fail to draw, this should not start a frame.
-  client.SetDrawWillHappen(false);
-  client.SetNeedsCommitOnNextDraw();
-  EXPECT_SCOPED(client.AdvanceFrame());
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(2, client.num_draws());
+  client->SetDrawWillHappen(false);
+  client->SetNeedsCommitOnNextDraw();
+  EXPECT_SCOPED(AdvanceFrame());
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(2, client->num_draws());
 }
 
 class SchedulerClientNeedsPrepareTilesInDraw : public FakeSchedulerClient {
@@ -834,241 +925,236 @@
 };
 
 // Test prepare tiles is independant of draws.
-TEST(SchedulerTest, PrepareTiles) {
-  SchedulerClientNeedsPrepareTilesInDraw client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
-
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+TEST_F(SchedulerTest, PrepareTiles) {
+  SchedulerClientNeedsPrepareTilesInDraw* client =
+      new SchedulerClientNeedsPrepareTilesInDraw;
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(make_scoped_ptr(client).Pass(), true);
 
   // Request both draw and prepare tiles. PrepareTiles shouldn't
   // be trigged until BeginImplFrame.
-  client.Reset();
-  scheduler->SetNeedsPrepareTiles();
-  scheduler->SetNeedsRedraw();
-  EXPECT_TRUE(scheduler->RedrawPending());
-  EXPECT_TRUE(scheduler->PrepareTilesPending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  EXPECT_EQ(0, client.num_draws());
-  EXPECT_FALSE(client.HasAction("ScheduledActionPrepareTiles"));
-  EXPECT_FALSE(client.HasAction("ScheduledActionDrawAndSwapIfPossible"));
+  client->Reset();
+  scheduler_->SetNeedsPrepareTiles();
+  scheduler_->SetNeedsRedraw();
+  EXPECT_TRUE(scheduler_->RedrawPending());
+  EXPECT_TRUE(scheduler_->PrepareTilesPending());
+  EXPECT_TRUE(client->needs_begin_frames());
+  EXPECT_EQ(0, client->num_draws());
+  EXPECT_FALSE(client->HasAction("ScheduledActionPrepareTiles"));
+  EXPECT_FALSE(client->HasAction("ScheduledActionDrawAndSwapIfPossible"));
 
   // We have no immediate actions to perform, so the BeginImplFrame should post
   // the deadline task.
-  client.Reset();
-  EXPECT_SCOPED(client.AdvanceFrame());
+  client->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
   EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
   EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
 
   // On the deadline, he actions should have occured in the right order.
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(1, client.num_draws());
-  EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible"));
-  EXPECT_TRUE(client.HasAction("ScheduledActionPrepareTiles"));
-  EXPECT_LT(client.ActionIndex("ScheduledActionDrawAndSwapIfPossible"),
-            client.ActionIndex("ScheduledActionPrepareTiles"));
-  EXPECT_FALSE(scheduler->RedrawPending());
-  EXPECT_FALSE(scheduler->PrepareTilesPending());
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
+  client->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(1, client->num_draws());
+  EXPECT_TRUE(client->HasAction("ScheduledActionDrawAndSwapIfPossible"));
+  EXPECT_TRUE(client->HasAction("ScheduledActionPrepareTiles"));
+  EXPECT_LT(client->ActionIndex("ScheduledActionDrawAndSwapIfPossible"),
+            client->ActionIndex("ScheduledActionPrepareTiles"));
+  EXPECT_FALSE(scheduler_->RedrawPending());
+  EXPECT_FALSE(scheduler_->PrepareTilesPending());
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
 
   // Request a draw. We don't need a PrepareTiles yet.
-  client.Reset();
-  scheduler->SetNeedsRedraw();
-  EXPECT_TRUE(scheduler->RedrawPending());
-  EXPECT_FALSE(scheduler->PrepareTilesPending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  EXPECT_EQ(0, client.num_draws());
+  client->Reset();
+  scheduler_->SetNeedsRedraw();
+  EXPECT_TRUE(scheduler_->RedrawPending());
+  EXPECT_FALSE(scheduler_->PrepareTilesPending());
+  EXPECT_TRUE(client->needs_begin_frames());
+  EXPECT_EQ(0, client->num_draws());
 
   // We have no immediate actions to perform, so the BeginImplFrame should post
   // the deadline task.
-  client.Reset();
-  EXPECT_SCOPED(client.AdvanceFrame());
+  client->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
   EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
   EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
 
   // Draw. The draw will trigger SetNeedsPrepareTiles, and
   // then the PrepareTiles action will be triggered after the Draw.
   // Afterwards, neither a draw nor PrepareTiles are pending.
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(1, client.num_draws());
-  EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible"));
-  EXPECT_TRUE(client.HasAction("ScheduledActionPrepareTiles"));
-  EXPECT_LT(client.ActionIndex("ScheduledActionDrawAndSwapIfPossible"),
-            client.ActionIndex("ScheduledActionPrepareTiles"));
-  EXPECT_FALSE(scheduler->RedrawPending());
-  EXPECT_FALSE(scheduler->PrepareTilesPending());
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
+  client->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(1, client->num_draws());
+  EXPECT_TRUE(client->HasAction("ScheduledActionDrawAndSwapIfPossible"));
+  EXPECT_TRUE(client->HasAction("ScheduledActionPrepareTiles"));
+  EXPECT_LT(client->ActionIndex("ScheduledActionDrawAndSwapIfPossible"),
+            client->ActionIndex("ScheduledActionPrepareTiles"));
+  EXPECT_FALSE(scheduler_->RedrawPending());
+  EXPECT_FALSE(scheduler_->PrepareTilesPending());
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
 
   // We need a BeginImplFrame where we don't swap to go idle.
-  client.Reset();
-  EXPECT_SCOPED(client.AdvanceFrame());
+  client->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
   EXPECT_SINGLE_ACTION("WillBeginImplFrame", client);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  client->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
   EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_EQ(0, client.num_draws());
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_EQ(0, client->num_draws());
 
   // Now trigger a PrepareTiles outside of a draw. We will then need
   // a begin-frame for the PrepareTiles, but we don't need a draw.
-  client.Reset();
-  EXPECT_FALSE(client.needs_begin_frames());
-  scheduler->SetNeedsPrepareTiles();
-  EXPECT_TRUE(client.needs_begin_frames());
-  EXPECT_TRUE(scheduler->PrepareTilesPending());
-  EXPECT_FALSE(scheduler->RedrawPending());
+  client->Reset();
+  EXPECT_FALSE(client->needs_begin_frames());
+  scheduler_->SetNeedsPrepareTiles();
+  EXPECT_TRUE(client->needs_begin_frames());
+  EXPECT_TRUE(scheduler_->PrepareTilesPending());
+  EXPECT_FALSE(scheduler_->RedrawPending());
 
   // BeginImplFrame. There will be no draw, only PrepareTiles.
-  client.Reset();
-  EXPECT_SCOPED(client.AdvanceFrame());
+  client->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
   EXPECT_SINGLE_ACTION("WillBeginImplFrame", client);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(0, client.num_draws());
-  EXPECT_FALSE(client.HasAction("ScheduledActionDrawAndSwapIfPossible"));
-  EXPECT_TRUE(client.HasAction("ScheduledActionPrepareTiles"));
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  client->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(0, client->num_draws());
+  EXPECT_FALSE(client->HasAction("ScheduledActionDrawAndSwapIfPossible"));
+  EXPECT_TRUE(client->HasAction("ScheduledActionPrepareTiles"));
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
 }
 
 // Test that PrepareTiles only happens once per frame.  If an external caller
 // initiates it, then the state machine should not PrepareTiles on that frame.
-TEST(SchedulerTest, PrepareTilesOncePerFrame) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
-
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+TEST_F(SchedulerTest, PrepareTilesOncePerFrame) {
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(true);
 
   // If DidPrepareTiles during a frame, then PrepareTiles should not occur
   // again.
-  scheduler->SetNeedsPrepareTiles();
-  scheduler->SetNeedsRedraw();
-  client.Reset();
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  scheduler_->SetNeedsPrepareTiles();
+  scheduler_->SetNeedsRedraw();
+  client_->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
 
-  EXPECT_TRUE(scheduler->PrepareTilesPending());
-  scheduler->DidPrepareTiles();  // An explicit PrepareTiles.
-  EXPECT_FALSE(scheduler->PrepareTilesPending());
+  EXPECT_TRUE(scheduler_->PrepareTilesPending());
+  scheduler_->DidPrepareTiles();  // An explicit PrepareTiles.
+  EXPECT_FALSE(scheduler_->PrepareTilesPending());
 
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(1, client.num_draws());
-  EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible"));
-  EXPECT_FALSE(client.HasAction("ScheduledActionPrepareTiles"));
-  EXPECT_FALSE(scheduler->RedrawPending());
-  EXPECT_FALSE(scheduler->PrepareTilesPending());
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
+  client_->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(1, client_->num_draws());
+  EXPECT_TRUE(client_->HasAction("ScheduledActionDrawAndSwapIfPossible"));
+  EXPECT_FALSE(client_->HasAction("ScheduledActionPrepareTiles"));
+  EXPECT_FALSE(scheduler_->RedrawPending());
+  EXPECT_FALSE(scheduler_->PrepareTilesPending());
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
 
   // Next frame without DidPrepareTiles should PrepareTiles with draw.
-  scheduler->SetNeedsPrepareTiles();
-  scheduler->SetNeedsRedraw();
-  client.Reset();
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  scheduler_->SetNeedsPrepareTiles();
+  scheduler_->SetNeedsRedraw();
+  client_->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
 
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(1, client.num_draws());
-  EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible"));
-  EXPECT_TRUE(client.HasAction("ScheduledActionPrepareTiles"));
-  EXPECT_LT(client.ActionIndex("ScheduledActionDrawAndSwapIfPossible"),
-            client.ActionIndex("ScheduledActionPrepareTiles"));
-  EXPECT_FALSE(scheduler->RedrawPending());
-  EXPECT_FALSE(scheduler->PrepareTilesPending());
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  scheduler->DidPrepareTiles();  // Corresponds to ScheduledActionPrepareTiles
+  client_->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(1, client_->num_draws());
+  EXPECT_TRUE(client_->HasAction("ScheduledActionDrawAndSwapIfPossible"));
+  EXPECT_TRUE(client_->HasAction("ScheduledActionPrepareTiles"));
+  EXPECT_LT(client_->ActionIndex("ScheduledActionDrawAndSwapIfPossible"),
+            client_->ActionIndex("ScheduledActionPrepareTiles"));
+  EXPECT_FALSE(scheduler_->RedrawPending());
+  EXPECT_FALSE(scheduler_->PrepareTilesPending());
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  scheduler_->DidPrepareTiles();  // Corresponds to ScheduledActionPrepareTiles
 
   // If we get another DidPrepareTiles within the same frame, we should
   // not PrepareTiles on the next frame.
-  scheduler->DidPrepareTiles();  // An explicit PrepareTiles.
-  scheduler->SetNeedsPrepareTiles();
-  scheduler->SetNeedsRedraw();
-  client.Reset();
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  scheduler_->DidPrepareTiles();  // An explicit PrepareTiles.
+  scheduler_->SetNeedsPrepareTiles();
+  scheduler_->SetNeedsRedraw();
+  client_->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
 
-  EXPECT_TRUE(scheduler->PrepareTilesPending());
+  EXPECT_TRUE(scheduler_->PrepareTilesPending());
 
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(1, client.num_draws());
-  EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible"));
-  EXPECT_FALSE(client.HasAction("ScheduledActionPrepareTiles"));
-  EXPECT_FALSE(scheduler->RedrawPending());
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
+  client_->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(1, client_->num_draws());
+  EXPECT_TRUE(client_->HasAction("ScheduledActionDrawAndSwapIfPossible"));
+  EXPECT_FALSE(client_->HasAction("ScheduledActionPrepareTiles"));
+  EXPECT_FALSE(scheduler_->RedrawPending());
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
 
   // If we get another DidPrepareTiles, we should not PrepareTiles on the next
   // frame. This verifies we don't alternate calling PrepareTiles once and
   // twice.
-  EXPECT_TRUE(scheduler->PrepareTilesPending());
-  scheduler->DidPrepareTiles();  // An explicit PrepareTiles.
-  EXPECT_FALSE(scheduler->PrepareTilesPending());
-  scheduler->SetNeedsPrepareTiles();
-  scheduler->SetNeedsRedraw();
-  client.Reset();
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(scheduler_->PrepareTilesPending());
+  scheduler_->DidPrepareTiles();  // An explicit PrepareTiles.
+  EXPECT_FALSE(scheduler_->PrepareTilesPending());
+  scheduler_->SetNeedsPrepareTiles();
+  scheduler_->SetNeedsRedraw();
+  client_->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
 
-  EXPECT_TRUE(scheduler->PrepareTilesPending());
+  EXPECT_TRUE(scheduler_->PrepareTilesPending());
 
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(1, client.num_draws());
-  EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible"));
-  EXPECT_FALSE(client.HasAction("ScheduledActionPrepareTiles"));
-  EXPECT_FALSE(scheduler->RedrawPending());
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
+  client_->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(1, client_->num_draws());
+  EXPECT_TRUE(client_->HasAction("ScheduledActionDrawAndSwapIfPossible"));
+  EXPECT_FALSE(client_->HasAction("ScheduledActionPrepareTiles"));
+  EXPECT_FALSE(scheduler_->RedrawPending());
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
 
   // Next frame without DidPrepareTiles should PrepareTiles with draw.
-  scheduler->SetNeedsPrepareTiles();
-  scheduler->SetNeedsRedraw();
-  client.Reset();
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  scheduler_->SetNeedsPrepareTiles();
+  scheduler_->SetNeedsRedraw();
+  client_->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
 
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(1, client.num_draws());
-  EXPECT_TRUE(client.HasAction("ScheduledActionDrawAndSwapIfPossible"));
-  EXPECT_TRUE(client.HasAction("ScheduledActionPrepareTiles"));
-  EXPECT_LT(client.ActionIndex("ScheduledActionDrawAndSwapIfPossible"),
-            client.ActionIndex("ScheduledActionPrepareTiles"));
-  EXPECT_FALSE(scheduler->RedrawPending());
-  EXPECT_FALSE(scheduler->PrepareTilesPending());
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  scheduler->DidPrepareTiles();  // Corresponds to ScheduledActionPrepareTiles
+  client_->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(1, client_->num_draws());
+  EXPECT_TRUE(client_->HasAction("ScheduledActionDrawAndSwapIfPossible"));
+  EXPECT_TRUE(client_->HasAction("ScheduledActionPrepareTiles"));
+  EXPECT_LT(client_->ActionIndex("ScheduledActionDrawAndSwapIfPossible"),
+            client_->ActionIndex("ScheduledActionPrepareTiles"));
+  EXPECT_FALSE(scheduler_->RedrawPending());
+  EXPECT_FALSE(scheduler_->PrepareTilesPending());
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  scheduler_->DidPrepareTiles();  // Corresponds to ScheduledActionPrepareTiles
 }
 
-TEST(SchedulerTest, TriggerBeginFrameDeadlineEarly) {
-  SchedulerClientNeedsPrepareTilesInDraw client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
+TEST_F(SchedulerTest, TriggerBeginFrameDeadlineEarly) {
+  SchedulerClientNeedsPrepareTilesInDraw* client =
+      new SchedulerClientNeedsPrepareTilesInDraw;
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(make_scoped_ptr(client).Pass(), true);
 
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
-
-  scheduler->SetNeedsRedraw();
-  EXPECT_SCOPED(client.AdvanceFrame());
+  scheduler_->SetNeedsRedraw();
+  EXPECT_SCOPED(AdvanceFrame());
 
   // The deadline should be zero since there is no work other than drawing
   // pending.
-  EXPECT_EQ(base::TimeTicks(), client.posted_begin_impl_frame_deadline());
+  EXPECT_EQ(base::TimeTicks(), client->posted_begin_impl_frame_deadline());
 }
 
 class SchedulerClientWithFixedEstimates : public FakeSchedulerClient {
@@ -1096,1226 +1182,1168 @@
     base::TimeDelta commit_to_activate_duration_;
 };
 
-void MainFrameInHighLatencyMode(int64 begin_main_frame_to_commit_estimate_in_ms,
-                                int64 commit_to_activate_estimate_in_ms,
-                                bool impl_latency_takes_priority,
-                                bool should_send_begin_main_frame) {
+void SchedulerTest::MainFrameInHighLatencyMode(
+    int64 begin_main_frame_to_commit_estimate_in_ms,
+    int64 commit_to_activate_estimate_in_ms,
+    bool impl_latency_takes_priority,
+    bool should_send_begin_main_frame) {
   // Set up client with specified estimates (draw duration is set to 1).
-  SchedulerClientWithFixedEstimates client(
-      base::TimeDelta::FromMilliseconds(1),
-      base::TimeDelta::FromMilliseconds(
-          begin_main_frame_to_commit_estimate_in_ms),
-      base::TimeDelta::FromMilliseconds(commit_to_activate_estimate_in_ms));
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
+  SchedulerClientWithFixedEstimates* client =
+      new SchedulerClientWithFixedEstimates(
+          base::TimeDelta::FromMilliseconds(1),
+          base::TimeDelta::FromMilliseconds(
+              begin_main_frame_to_commit_estimate_in_ms),
+          base::TimeDelta::FromMilliseconds(commit_to_activate_estimate_in_ms));
 
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(make_scoped_ptr(client).Pass(), true);
 
-  scheduler->SetImplLatencyTakesPriority(impl_latency_takes_priority);
+  scheduler_->SetImplLatencyTakesPriority(impl_latency_takes_priority);
 
   // Impl thread hits deadline before commit finishes.
-  scheduler->SetNeedsCommit();
-  EXPECT_FALSE(scheduler->MainThreadIsInHighLatencyMode());
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_FALSE(scheduler->MainThreadIsInHighLatencyMode());
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_TRUE(scheduler->MainThreadIsInHighLatencyMode());
-  scheduler->NotifyBeginMainFrameStarted();
-  scheduler->NotifyReadyToCommit();
-  EXPECT_TRUE(scheduler->MainThreadIsInHighLatencyMode());
-  EXPECT_TRUE(client.HasAction("ScheduledActionSendBeginMainFrame"));
+  scheduler_->SetNeedsCommit();
+  EXPECT_FALSE(scheduler_->MainThreadIsInHighLatencyMode());
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_FALSE(scheduler_->MainThreadIsInHighLatencyMode());
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_TRUE(scheduler_->MainThreadIsInHighLatencyMode());
+  scheduler_->NotifyBeginMainFrameStarted();
+  scheduler_->NotifyReadyToCommit();
+  EXPECT_TRUE(scheduler_->MainThreadIsInHighLatencyMode());
+  EXPECT_TRUE(client->HasAction("ScheduledActionSendBeginMainFrame"));
 
-  client.Reset();
-  scheduler->SetNeedsCommit();
-  EXPECT_TRUE(scheduler->MainThreadIsInHighLatencyMode());
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_TRUE(scheduler->MainThreadIsInHighLatencyMode());
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_EQ(scheduler->MainThreadIsInHighLatencyMode(),
+  client->Reset();
+  scheduler_->SetNeedsCommit();
+  EXPECT_TRUE(scheduler_->MainThreadIsInHighLatencyMode());
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_TRUE(scheduler_->MainThreadIsInHighLatencyMode());
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_EQ(scheduler_->MainThreadIsInHighLatencyMode(),
             should_send_begin_main_frame);
-  EXPECT_EQ(client.HasAction("ScheduledActionSendBeginMainFrame"),
+  EXPECT_EQ(client->HasAction("ScheduledActionSendBeginMainFrame"),
             should_send_begin_main_frame);
 }
 
-TEST(SchedulerTest,
-    SkipMainFrameIfHighLatencyAndCanCommitAndActivateBeforeDeadline) {
+TEST_F(SchedulerTest,
+       SkipMainFrameIfHighLatencyAndCanCommitAndActivateBeforeDeadline) {
   // Set up client so that estimates indicate that we can commit and activate
   // before the deadline (~8ms by default).
   MainFrameInHighLatencyMode(1, 1, false, false);
 }
 
-TEST(SchedulerTest, NotSkipMainFrameIfHighLatencyAndCanCommitTooLong) {
+TEST_F(SchedulerTest, NotSkipMainFrameIfHighLatencyAndCanCommitTooLong) {
   // Set up client so that estimates indicate that the commit cannot finish
   // before the deadline (~8ms by default).
   MainFrameInHighLatencyMode(10, 1, false, true);
 }
 
-TEST(SchedulerTest, NotSkipMainFrameIfHighLatencyAndCanActivateTooLong) {
+TEST_F(SchedulerTest, NotSkipMainFrameIfHighLatencyAndCanActivateTooLong) {
   // Set up client so that estimates indicate that the activate cannot finish
   // before the deadline (~8ms by default).
   MainFrameInHighLatencyMode(1, 10, false, true);
 }
 
-TEST(SchedulerTest, NotSkipMainFrameInPreferImplLatencyMode) {
+TEST_F(SchedulerTest, NotSkipMainFrameInPreferImplLatencyMode) {
   // Set up client so that estimates indicate that we can commit and activate
   // before the deadline (~8ms by default), but also enable impl latency takes
   // priority mode.
   MainFrameInHighLatencyMode(1, 1, true, true);
 }
 
-TEST(SchedulerTest, PollForCommitCompletion) {
+TEST_F(SchedulerTest, PollForCommitCompletion) {
   // Since we are simulating a long commit, set up a client with draw duration
   // estimates that prevent skipping main frames to get to low latency mode.
-  SchedulerClientWithFixedEstimates client(
-      base::TimeDelta::FromMilliseconds(1),
-      base::TimeDelta::FromMilliseconds(32),
-      base::TimeDelta::FromMilliseconds(32));
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
+  SchedulerClientWithFixedEstimates* client =
+      new SchedulerClientWithFixedEstimates(
+          base::TimeDelta::FromMilliseconds(1),
+          base::TimeDelta::FromMilliseconds(32),
+          base::TimeDelta::FromMilliseconds(32));
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(make_scoped_ptr(client).Pass(), true);
 
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
-
-  client.set_log_anticipated_draw_time_change(true);
+  client->set_log_anticipated_draw_time_change(true);
 
   BeginFrameArgs frame_args =
-      CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, client.now_src());
+      CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, now_src());
   frame_args.interval = base::TimeDelta::FromMilliseconds(1000);
 
   // At this point, we've drawn a frame. Start another commit, but hold off on
   // the NotifyReadyToCommit for now.
-  EXPECT_FALSE(scheduler->CommitPending());
-  scheduler->SetNeedsCommit();
-  client.fake_external_begin_frame_source()->TestOnBeginFrame(frame_args);
-  EXPECT_TRUE(scheduler->CommitPending());
+  EXPECT_FALSE(scheduler_->CommitPending());
+  scheduler_->SetNeedsCommit();
+  fake_external_begin_frame_source()->TestOnBeginFrame(frame_args);
+  EXPECT_TRUE(scheduler_->CommitPending());
 
   // Draw and swap the frame, but don't ack the swap to simulate the Browser
   // blocking on the renderer.
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  scheduler->DidSwapBuffers();
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  scheduler_->DidSwapBuffers();
 
   // Spin the event loop a few times and make sure we get more
   // DidAnticipateDrawTimeChange calls every time.
-  int actions_so_far = client.num_actions_();
+  int actions_so_far = client->num_actions_();
 
   // Does three iterations to make sure that the timer is properly repeating.
   for (int i = 0; i < 3; ++i) {
     EXPECT_EQ((frame_args.interval * 2).InMicroseconds(),
-              client.task_runner().DelayToNextTaskTime().InMicroseconds())
-        << scheduler->AsValue()->ToString();
-    client.task_runner().RunPendingTasks();
-    EXPECT_GT(client.num_actions_(), actions_so_far);
-    EXPECT_STREQ(client.Action(client.num_actions_() - 1),
+              task_runner().DelayToNextTaskTime().InMicroseconds())
+        << scheduler_->AsValue()->ToString();
+    task_runner().RunPendingTasks();
+    EXPECT_GT(client->num_actions_(), actions_so_far);
+    EXPECT_STREQ(client->Action(client->num_actions_() - 1),
                  "DidAnticipatedDrawTimeChange");
-    actions_so_far = client.num_actions_();
+    actions_so_far = client->num_actions_();
   }
 
   // Do the same thing after BeginMainFrame starts but still before activation.
-  scheduler->NotifyBeginMainFrameStarted();
+  scheduler_->NotifyBeginMainFrameStarted();
   for (int i = 0; i < 3; ++i) {
     EXPECT_EQ((frame_args.interval * 2).InMicroseconds(),
-              client.task_runner().DelayToNextTaskTime().InMicroseconds())
-        << scheduler->AsValue()->ToString();
-    client.task_runner().RunPendingTasks();
-    EXPECT_GT(client.num_actions_(), actions_so_far);
-    EXPECT_STREQ(client.Action(client.num_actions_() - 1),
+              task_runner().DelayToNextTaskTime().InMicroseconds())
+        << scheduler_->AsValue()->ToString();
+    task_runner().RunPendingTasks();
+    EXPECT_GT(client->num_actions_(), actions_so_far);
+    EXPECT_STREQ(client->Action(client->num_actions_() - 1),
                  "DidAnticipatedDrawTimeChange");
-    actions_so_far = client.num_actions_();
+    actions_so_far = client->num_actions_();
   }
 }
 
-TEST(SchedulerTest, BeginRetroFrame) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
-
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+TEST_F(SchedulerTest, BeginRetroFrame) {
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(true);
 
   // SetNeedsCommit should begin the frame on the next BeginImplFrame.
-  scheduler->SetNeedsCommit();
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
-  client.Reset();
+  scheduler_->SetNeedsCommit();
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_);
+  client_->Reset();
 
   // Create a BeginFrame with a long deadline to avoid race conditions.
   // This is the first BeginFrame, which will be handled immediately.
   BeginFrameArgs args =
-      CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, client.now_src());
+      CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, now_src());
   args.deadline += base::TimeDelta::FromHours(1);
-  client.fake_external_begin_frame_source()->TestOnBeginFrame(args);
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
+  fake_external_begin_frame_source()->TestOnBeginFrame(args);
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
 
   // Queue BeginFrames while we are still handling the previous BeginFrame.
   args.frame_time += base::TimeDelta::FromSeconds(1);
-  client.fake_external_begin_frame_source()->TestOnBeginFrame(args);
+  fake_external_begin_frame_source()->TestOnBeginFrame(args);
   args.frame_time += base::TimeDelta::FromSeconds(1);
-  client.fake_external_begin_frame_source()->TestOnBeginFrame(args);
+  fake_external_begin_frame_source()->TestOnBeginFrame(args);
 
   // If we don't swap on the deadline, we wait for the next BeginImplFrame.
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_NO_ACTION(client);
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_NO_ACTION(client_);
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
 
   // NotifyReadyToCommit should trigger the commit.
-  scheduler->NotifyBeginMainFrameStarted();
-  scheduler->NotifyReadyToCommit();
-  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
+  scheduler_->NotifyBeginMainFrameStarted();
+  scheduler_->NotifyReadyToCommit();
+  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_);
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
 
   // BeginImplFrame should prepare the draw.
-  client.task_runner().RunPendingTasks();  // Run posted BeginRetroFrame.
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
+  task_runner().RunPendingTasks();  // Run posted BeginRetroFrame.
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
 
   // BeginImplFrame deadline should draw.
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 1);
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 0, 1);
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
 
   // The following BeginImplFrame deadline should SetNeedsBeginFrame(false)
   // to avoid excessive toggles.
-  client.task_runner().RunPendingTasks();  // Run posted BeginRetroFrame.
-  EXPECT_SINGLE_ACTION("WillBeginImplFrame", client);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
+  task_runner().RunPendingTasks();  // Run posted BeginRetroFrame.
+  EXPECT_SINGLE_ACTION("WillBeginImplFrame", client_);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  client_->Reset();
 
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
-  client.Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client_);
+  client_->Reset();
 }
 
-TEST(SchedulerTest, BeginRetroFrame_SwapThrottled) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
+TEST_F(SchedulerTest, BeginRetroFrame_SwapThrottled) {
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(true);
 
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
-  scheduler->SetEstimatedParentDrawTime(base::TimeDelta::FromMicroseconds(1));
+  scheduler_->SetEstimatedParentDrawTime(base::TimeDelta::FromMicroseconds(1));
 
   // To test swap ack throttling, this test disables automatic swap acks.
-  scheduler->SetMaxSwapsPending(1);
-  client.SetAutomaticSwapAck(false);
+  scheduler_->SetMaxSwapsPending(1);
+  client_->SetAutomaticSwapAck(false);
 
   // SetNeedsCommit should begin the frame on the next BeginImplFrame.
-  client.Reset();
-  scheduler->SetNeedsCommit();
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
-  client.Reset();
+  client_->Reset();
+  scheduler_->SetNeedsCommit();
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_);
+  client_->Reset();
 
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
 
   // Queue BeginFrame while we are still handling the previous BeginFrame.
-  client.SendNextBeginFrame();
-  EXPECT_NO_ACTION(client);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
+  SendNextBeginFrame();
+  EXPECT_NO_ACTION(client_);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
 
   // NotifyReadyToCommit should trigger the pending commit and draw.
-  scheduler->NotifyBeginMainFrameStarted();
-  scheduler->NotifyReadyToCommit();
-  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
+  scheduler_->NotifyBeginMainFrameStarted();
+  scheduler_->NotifyReadyToCommit();
+  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_);
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
 
   // Swapping will put us into a swap throttled state.
   // Run posted deadline.
-  client.task_runner().RunTasksWhile(client.ImplFrameDeadlinePending(true));
-  EXPECT_ACTION("ScheduledActionAnimate", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2);
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
+  task_runner().RunTasksWhile(client_->ImplFrameDeadlinePending(true));
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 1, 2);
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
 
   // While swap throttled, BeginRetroFrames should trigger BeginImplFrames
   // but not a BeginMainFrame or draw.
-  scheduler->SetNeedsCommit();
-  scheduler->SetNeedsRedraw();
+  scheduler_->SetNeedsCommit();
+  scheduler_->SetNeedsRedraw();
   // Run posted BeginRetroFrame.
-  client.task_runner().RunTasksWhile(client.ImplFrameDeadlinePending(false));
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
+  task_runner().RunTasksWhile(client_->ImplFrameDeadlinePending(false));
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
 
   // Let time pass sufficiently beyond the regular deadline but not beyond the
   // late deadline.
-  client.now_src()->AdvanceNow(BeginFrameArgs::DefaultInterval() -
-                               base::TimeDelta::FromMicroseconds(1));
-  client.task_runner().RunUntilTime(client.now_src()->Now());
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  now_src()->AdvanceNow(BeginFrameArgs::DefaultInterval() -
+                        base::TimeDelta::FromMicroseconds(1));
+  task_runner().RunUntilTime(now_src()->Now());
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
 
   // Take us out of a swap throttled state.
-  scheduler->DidSwapBuffersComplete();
-  EXPECT_SINGLE_ACTION("ScheduledActionSendBeginMainFrame", client);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
+  scheduler_->DidSwapBuffersComplete();
+  EXPECT_SINGLE_ACTION("ScheduledActionSendBeginMainFrame", client_);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
 
   // Verify that the deadline was rescheduled.
-  client.task_runner().RunUntilTime(client.now_src()->Now());
-  EXPECT_SINGLE_ACTION("ScheduledActionDrawAndSwapIfPossible", client);
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
+  task_runner().RunUntilTime(now_src()->Now());
+  EXPECT_SINGLE_ACTION("ScheduledActionDrawAndSwapIfPossible", client_);
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
 }
 
-TEST(SchedulerTest, RetroFrameDoesNotExpireTooEarly) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
+TEST_F(SchedulerTest, RetroFrameDoesNotExpireTooEarly) {
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(true);
 
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+  scheduler_->SetNeedsCommit();
+  EXPECT_TRUE(client_->needs_begin_frames());
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_);
 
-  scheduler->SetNeedsCommit();
-  EXPECT_TRUE(client.needs_begin_frames());
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
+  client_->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
 
-  client.Reset();
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  client_->Reset();
+  scheduler_->NotifyBeginMainFrameStarted();
 
-  client.Reset();
-  scheduler->NotifyBeginMainFrameStarted();
-
-  client.Reset();
-  client.SendNextBeginFrame();
+  client_->Reset();
+  SendNextBeginFrame();
   // This BeginFrame is queued up as a retro frame.
-  EXPECT_NO_ACTION(client);
+  EXPECT_NO_ACTION(client_);
   // The previous deadline is still pending.
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
 
-  client.Reset();
+  client_->Reset();
   // This commit should schedule the (previous) deadline to trigger immediately.
-  scheduler->NotifyReadyToCommit();
-  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
+  scheduler_->NotifyReadyToCommit();
+  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_);
 
-  client.Reset();
+  client_->Reset();
   // The deadline task should trigger causing a draw.
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.task_runner().RunTasksWhile(client.ImplFrameDeadlinePending(true));
-  EXPECT_ACTION("ScheduledActionAnimate", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  task_runner().RunTasksWhile(client_->ImplFrameDeadlinePending(true));
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 1, 2);
 
   // Keep animating.
-  client.Reset();
-  scheduler->SetNeedsAnimate();
-  scheduler->SetNeedsRedraw();
-  EXPECT_NO_ACTION(client);
+  client_->Reset();
+  scheduler_->SetNeedsAnimate();
+  scheduler_->SetNeedsRedraw();
+  EXPECT_NO_ACTION(client_);
 
   // Let's advance sufficiently past the next frame's deadline.
-  client.now_src()->AdvanceNow(
-      BeginFrameArgs::DefaultInterval() -
-      BeginFrameArgs::DefaultEstimatedParentDrawTime() +
-      base::TimeDelta::FromMicroseconds(1));
+  now_src()->AdvanceNow(BeginFrameArgs::DefaultInterval() -
+                        BeginFrameArgs::DefaultEstimatedParentDrawTime() +
+                        base::TimeDelta::FromMicroseconds(1));
 
   // The retro frame hasn't expired yet.
-  client.task_runner().RunTasksWhile(client.ImplFrameDeadlinePending(false));
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  task_runner().RunTasksWhile(client_->ImplFrameDeadlinePending(false));
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
 
   // This is an immediate deadline case.
-  client.Reset();
-  client.task_runner().RunPendingTasks();
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_SINGLE_ACTION("ScheduledActionDrawAndSwapIfPossible", client);
+  client_->Reset();
+  task_runner().RunPendingTasks();
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_SINGLE_ACTION("ScheduledActionDrawAndSwapIfPossible", client_);
 }
 
-TEST(SchedulerTest, RetroFrameDoesNotExpireTooLate) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
+TEST_F(SchedulerTest, RetroFrameDoesNotExpireTooLate) {
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(true);
 
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+  scheduler_->SetNeedsCommit();
+  EXPECT_TRUE(client_->needs_begin_frames());
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_);
 
-  scheduler->SetNeedsCommit();
-  EXPECT_TRUE(client.needs_begin_frames());
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
+  client_->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
 
-  client.Reset();
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  client_->Reset();
+  scheduler_->NotifyBeginMainFrameStarted();
 
-  client.Reset();
-  scheduler->NotifyBeginMainFrameStarted();
-
-  client.Reset();
-  client.SendNextBeginFrame();
+  client_->Reset();
+  SendNextBeginFrame();
   // This BeginFrame is queued up as a retro frame.
-  EXPECT_NO_ACTION(client);
+  EXPECT_NO_ACTION(client_);
   // The previous deadline is still pending.
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
 
-  client.Reset();
+  client_->Reset();
   // This commit should schedule the (previous) deadline to trigger immediately.
-  scheduler->NotifyReadyToCommit();
-  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
+  scheduler_->NotifyReadyToCommit();
+  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_);
 
-  client.Reset();
+  client_->Reset();
   // The deadline task should trigger causing a draw.
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.task_runner().RunTasksWhile(client.ImplFrameDeadlinePending(true));
-  EXPECT_ACTION("ScheduledActionAnimate", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  task_runner().RunTasksWhile(client_->ImplFrameDeadlinePending(true));
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 1, 2);
 
   // Keep animating.
-  client.Reset();
-  scheduler->SetNeedsAnimate();
-  scheduler->SetNeedsRedraw();
-  EXPECT_NO_ACTION(client);
+  client_->Reset();
+  scheduler_->SetNeedsAnimate();
+  scheduler_->SetNeedsRedraw();
+  EXPECT_NO_ACTION(client_);
 
   // Let's advance sufficiently past the next frame's deadline.
-  client.now_src()->AdvanceNow(BeginFrameArgs::DefaultInterval() +
-                               base::TimeDelta::FromMicroseconds(1));
+  now_src()->AdvanceNow(BeginFrameArgs::DefaultInterval() +
+                        base::TimeDelta::FromMicroseconds(1));
 
   // The retro frame should've expired.
-  EXPECT_NO_ACTION(client);
+  EXPECT_NO_ACTION(client_);
 }
 
-void BeginFramesNotFromClient(bool use_external_begin_frame_source,
-                              bool throttle_frame_production) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source =
+void SchedulerTest::BeginFramesNotFromClient(
+    bool use_external_begin_frame_source,
+    bool throttle_frame_production) {
+  scheduler_settings_.use_external_begin_frame_source =
       use_external_begin_frame_source;
-  scheduler_settings.throttle_frame_production = throttle_frame_production;
-
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+  scheduler_settings_.throttle_frame_production = throttle_frame_production;
+  SetUpScheduler(true);
 
   // SetNeedsCommit should begin the frame on the next BeginImplFrame
   // without calling SetNeedsBeginFrame.
-  scheduler->SetNeedsCommit();
-  EXPECT_NO_ACTION(client);
-  client.Reset();
+  scheduler_->SetNeedsCommit();
+  EXPECT_NO_ACTION(client_);
+  client_->Reset();
 
   // When the client-driven BeginFrame are disabled, the scheduler posts it's
   // own BeginFrame tasks.
-  client.task_runner().RunPendingTasks();  // Run posted BeginFrame.
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
+  task_runner().RunPendingTasks();  // Run posted BeginFrame.
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  client_->Reset();
 
   // If we don't swap on the deadline, we wait for the next BeginFrame.
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_NO_ACTION(client);
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_NO_ACTION(client_);
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  client_->Reset();
 
   // NotifyReadyToCommit should trigger the commit.
-  scheduler->NotifyBeginMainFrameStarted();
-  scheduler->NotifyReadyToCommit();
-  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
-  client.Reset();
+  scheduler_->NotifyBeginMainFrameStarted();
+  scheduler_->NotifyReadyToCommit();
+  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_);
+  client_->Reset();
 
   // BeginImplFrame should prepare the draw.
-  client.task_runner().RunPendingTasks();  // Run posted BeginFrame.
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
+  task_runner().RunPendingTasks();  // Run posted BeginFrame.
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  client_->Reset();
 
   // BeginImplFrame deadline should draw.
-  client.task_runner().RunTasksWhile(client.ImplFrameDeadlinePending(true));
-  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 1);
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
+  task_runner().RunTasksWhile(client_->ImplFrameDeadlinePending(true));
+  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 0, 1);
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  client_->Reset();
 
   // The following BeginImplFrame deadline should SetNeedsBeginFrame(false)
   // to avoid excessive toggles.
-  client.task_runner().RunPendingTasks();  // Run posted BeginFrame.
-  EXPECT_SINGLE_ACTION("WillBeginImplFrame", client);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
+  task_runner().RunPendingTasks();  // Run posted BeginFrame.
+  EXPECT_SINGLE_ACTION("WillBeginImplFrame", client_);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  client_->Reset();
 
   // Make sure SetNeedsBeginFrame isn't called on the client
   // when the BeginFrame is no longer needed.
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_NO_ACTION(client);
-  client.Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_NO_ACTION(client_);
+  client_->Reset();
 }
 
-TEST(SchedulerTest, SyntheticBeginFrames) {
+TEST_F(SchedulerTest, SyntheticBeginFrames) {
   bool use_external_begin_frame_source = false;
   bool throttle_frame_production = true;
   BeginFramesNotFromClient(use_external_begin_frame_source,
                            throttle_frame_production);
 }
 
-TEST(SchedulerTest, VSyncThrottlingDisabled) {
+TEST_F(SchedulerTest, VSyncThrottlingDisabled) {
   bool use_external_begin_frame_source = true;
   bool throttle_frame_production = false;
   BeginFramesNotFromClient(use_external_begin_frame_source,
                            throttle_frame_production);
 }
 
-TEST(SchedulerTest, SyntheticBeginFrames_And_VSyncThrottlingDisabled) {
+TEST_F(SchedulerTest, SyntheticBeginFrames_And_VSyncThrottlingDisabled) {
   bool use_external_begin_frame_source = false;
   bool throttle_frame_production = false;
   BeginFramesNotFromClient(use_external_begin_frame_source,
                            throttle_frame_production);
 }
 
-void BeginFramesNotFromClient_SwapThrottled(
+void SchedulerTest::BeginFramesNotFromClient_SwapThrottled(
     bool use_external_begin_frame_source,
     bool throttle_frame_production) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source =
+  scheduler_settings_.use_external_begin_frame_source =
       use_external_begin_frame_source;
-  scheduler_settings.throttle_frame_production = throttle_frame_production;
+  scheduler_settings_.throttle_frame_production = throttle_frame_production;
+  SetUpScheduler(true);
 
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
-  scheduler->SetEstimatedParentDrawTime(base::TimeDelta::FromMicroseconds(1));
+  scheduler_->SetEstimatedParentDrawTime(base::TimeDelta::FromMicroseconds(1));
 
   // To test swap ack throttling, this test disables automatic swap acks.
-  scheduler->SetMaxSwapsPending(1);
-  client.SetAutomaticSwapAck(false);
+  scheduler_->SetMaxSwapsPending(1);
+  client_->SetAutomaticSwapAck(false);
 
   // SetNeedsCommit should begin the frame on the next BeginImplFrame.
-  client.Reset();
-  scheduler->SetNeedsCommit();
-  EXPECT_NO_ACTION(client);
-  client.Reset();
+  client_->Reset();
+  scheduler_->SetNeedsCommit();
+  EXPECT_NO_ACTION(client_);
+  client_->Reset();
 
   // Trigger the first BeginImplFrame and BeginMainFrame
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  client_->Reset();
 
   // NotifyReadyToCommit should trigger the pending commit and draw.
-  scheduler->NotifyBeginMainFrameStarted();
-  scheduler->NotifyReadyToCommit();
-  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
-  client.Reset();
+  scheduler_->NotifyBeginMainFrameStarted();
+  scheduler_->NotifyReadyToCommit();
+  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_);
+  client_->Reset();
 
   // Swapping will put us into a swap throttled state.
   // Run posted deadline.
-  client.task_runner().RunTasksWhile(client.ImplFrameDeadlinePending(true));
-  EXPECT_ACTION("ScheduledActionAnimate", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2);
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
+  task_runner().RunTasksWhile(client_->ImplFrameDeadlinePending(true));
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 1, 2);
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  client_->Reset();
 
   // While swap throttled, BeginFrames should trigger BeginImplFrames,
   // but not a BeginMainFrame or draw.
-  scheduler->SetNeedsCommit();
-  scheduler->SetNeedsRedraw();
-  EXPECT_SCOPED(client.AdvanceFrame());  // Run posted BeginFrame.
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
+  scheduler_->SetNeedsCommit();
+  scheduler_->SetNeedsRedraw();
+  EXPECT_SCOPED(AdvanceFrame());  // Run posted BeginFrame.
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  client_->Reset();
 
   // Let time pass sufficiently beyond the regular deadline but not beyond the
   // late deadline.
-  client.now_src()->AdvanceNow(BeginFrameArgs::DefaultInterval() -
-                               base::TimeDelta::FromMicroseconds(1));
-  client.task_runner().RunUntilTime(client.now_src()->Now());
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  now_src()->AdvanceNow(BeginFrameArgs::DefaultInterval() -
+                        base::TimeDelta::FromMicroseconds(1));
+  task_runner().RunUntilTime(now_src()->Now());
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
 
   // Take us out of a swap throttled state.
-  scheduler->DidSwapBuffersComplete();
-  EXPECT_SINGLE_ACTION("ScheduledActionSendBeginMainFrame", client);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
+  scheduler_->DidSwapBuffersComplete();
+  EXPECT_SINGLE_ACTION("ScheduledActionSendBeginMainFrame", client_);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  client_->Reset();
 
   // Verify that the deadline was rescheduled.
   // We can't use RunUntilTime(now) here because the next frame is also
   // scheduled if throttle_frame_production = false.
-  base::TimeTicks before_deadline = client.now_src()->Now();
-  client.task_runner().RunTasksWhile(client.ImplFrameDeadlinePending(true));
-  base::TimeTicks after_deadline = client.now_src()->Now();
+  base::TimeTicks before_deadline = now_src()->Now();
+  task_runner().RunTasksWhile(client_->ImplFrameDeadlinePending(true));
+  base::TimeTicks after_deadline = now_src()->Now();
   EXPECT_EQ(after_deadline, before_deadline);
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  client_->Reset();
 }
 
-TEST(SchedulerTest, SyntheticBeginFrames_SwapThrottled) {
+TEST_F(SchedulerTest, SyntheticBeginFrames_SwapThrottled) {
   bool use_external_begin_frame_source = false;
   bool throttle_frame_production = true;
   BeginFramesNotFromClient_SwapThrottled(use_external_begin_frame_source,
                                          throttle_frame_production);
 }
 
-TEST(SchedulerTest, VSyncThrottlingDisabled_SwapThrottled) {
+TEST_F(SchedulerTest, VSyncThrottlingDisabled_SwapThrottled) {
   bool use_external_begin_frame_source = true;
   bool throttle_frame_production = false;
   BeginFramesNotFromClient_SwapThrottled(use_external_begin_frame_source,
                                          throttle_frame_production);
 }
 
-TEST(SchedulerTest,
-     SyntheticBeginFrames_And_VSyncThrottlingDisabled_SwapThrottled) {
+TEST_F(SchedulerTest,
+       SyntheticBeginFrames_And_VSyncThrottlingDisabled_SwapThrottled) {
   bool use_external_begin_frame_source = false;
   bool throttle_frame_production = false;
   BeginFramesNotFromClient_SwapThrottled(use_external_begin_frame_source,
                                          throttle_frame_production);
 }
 
-TEST(SchedulerTest, DidLoseOutputSurfaceAfterOutputSurfaceIsInitialized) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
-  TestScheduler* scheduler = client.CreateScheduler(scheduler_settings);
-  scheduler->SetCanStart();
-  scheduler->SetVisible(true);
-  scheduler->SetCanDraw(true);
+TEST_F(SchedulerTest, DidLoseOutputSurfaceAfterOutputSurfaceIsInitialized) {
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(false);
 
-  EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
-  client.Reset();
-  scheduler->DidCreateAndInitializeOutputSurface();
-  EXPECT_NO_ACTION(client);
+  scheduler_->SetCanStart();
+  scheduler_->SetVisible(true);
+  scheduler_->SetCanDraw(true);
 
-  scheduler->DidLoseOutputSurface();
-  EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
+  EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_);
+  client_->Reset();
+  scheduler_->DidCreateAndInitializeOutputSurface();
+  EXPECT_NO_ACTION(client_);
+
+  scheduler_->DidLoseOutputSurface();
+  EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_);
 }
 
-TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginFrameStarted) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
-
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+TEST_F(SchedulerTest, DidLoseOutputSurfaceAfterBeginFrameStarted) {
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(true);
 
   // SetNeedsCommit should begin the frame.
-  scheduler->SetNeedsCommit();
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
+  scheduler_->SetNeedsCommit();
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_);
 
-  client.Reset();
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  client_->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
 
-  client.Reset();
-  scheduler->DidLoseOutputSurface();
+  client_->Reset();
+  scheduler_->DidLoseOutputSurface();
   // Do nothing when impl frame is in deadine pending state.
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client_);
 
-  client.Reset();
-  scheduler->NotifyBeginMainFrameStarted();
-  scheduler->NotifyReadyToCommit();
-  EXPECT_ACTION("ScheduledActionCommit", client, 0, 1);
+  client_->Reset();
+  scheduler_->NotifyBeginMainFrameStarted();
+  scheduler_->NotifyReadyToCommit();
+  EXPECT_ACTION("ScheduledActionCommit", client_, 0, 1);
 
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
+  client_->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_);
 }
 
-void DidLoseOutputSurfaceAfterBeginFrameStartedWithHighLatency(
+void SchedulerTest::DidLoseOutputSurfaceAfterBeginFrameStartedWithHighLatency(
     bool impl_side_painting) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.impl_side_painting = impl_side_painting;
-  scheduler_settings.use_external_begin_frame_source = true;
-
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+  scheduler_settings_.impl_side_painting = impl_side_painting;
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(true);
 
   // SetNeedsCommit should begin the frame.
-  scheduler->SetNeedsCommit();
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
+  scheduler_->SetNeedsCommit();
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_);
 
-  client.Reset();
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  client_->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
 
-  client.Reset();
-  scheduler->DidLoseOutputSurface();
+  client_->Reset();
+  scheduler_->DidLoseOutputSurface();
   // Do nothing when impl frame is in deadine pending state.
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client_);
 
-  client.Reset();
+  client_->Reset();
   // Run posted deadline.
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.task_runner().RunTasksWhile(client.ImplFrameDeadlinePending(true));
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  task_runner().RunTasksWhile(client_->ImplFrameDeadlinePending(true));
   // OnBeginImplFrameDeadline didn't schedule any actions because main frame is
   // not yet completed.
-  EXPECT_NO_ACTION(client);
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
+  EXPECT_NO_ACTION(client_);
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
 
   // BeginImplFrame is not started.
-  client.task_runner().RunUntilTime(client.now_src()->Now() +
-                                    base::TimeDelta::FromMilliseconds(10));
-  EXPECT_NO_ACTION(client);
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
+  task_runner().RunUntilTime(now_src()->Now() +
+                             base::TimeDelta::FromMilliseconds(10));
+  EXPECT_NO_ACTION(client_);
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
 
-  client.Reset();
-  scheduler->NotifyBeginMainFrameStarted();
-  scheduler->NotifyReadyToCommit();
+  client_->Reset();
+  scheduler_->NotifyBeginMainFrameStarted();
+  scheduler_->NotifyReadyToCommit();
   if (impl_side_painting) {
-    EXPECT_ACTION("ScheduledActionCommit", client, 0, 3);
-    EXPECT_ACTION("ScheduledActionActivateSyncTree", client, 1, 3);
-    EXPECT_ACTION("ScheduledActionBeginOutputSurfaceCreation", client, 2, 3);
+    EXPECT_ACTION("ScheduledActionCommit", client_, 0, 3);
+    EXPECT_ACTION("ScheduledActionActivateSyncTree", client_, 1, 3);
+    EXPECT_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_, 2, 3);
   } else {
-    EXPECT_ACTION("ScheduledActionCommit", client, 0, 2);
-    EXPECT_ACTION("ScheduledActionBeginOutputSurfaceCreation", client, 1, 2);
+    EXPECT_ACTION("ScheduledActionCommit", client_, 0, 2);
+    EXPECT_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_, 1, 2);
   }
 }
 
-TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginFrameStartedWithHighLatency) {
+TEST_F(SchedulerTest,
+       DidLoseOutputSurfaceAfterBeginFrameStartedWithHighLatency) {
   bool impl_side_painting = false;
   DidLoseOutputSurfaceAfterBeginFrameStartedWithHighLatency(impl_side_painting);
 }
 
-TEST(SchedulerTest,
-     DidLoseOutputSurfaceAfterBeginFrameStartedWithHighLatencyWithImplPaint) {
+TEST_F(SchedulerTest,
+       DidLoseOutputSurfaceAfterBeginFrameStartedWithHighLatencyWithImplPaint) {
   bool impl_side_painting = true;
   DidLoseOutputSurfaceAfterBeginFrameStartedWithHighLatency(impl_side_painting);
 }
 
-void DidLoseOutputSurfaceAfterReadyToCommit(bool impl_side_painting) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.impl_side_painting = impl_side_painting;
-  scheduler_settings.use_external_begin_frame_source = true;
-
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+void SchedulerTest::DidLoseOutputSurfaceAfterReadyToCommit(
+    bool impl_side_painting) {
+  scheduler_settings_.impl_side_painting = impl_side_painting;
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(true);
 
   // SetNeedsCommit should begin the frame.
-  scheduler->SetNeedsCommit();
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
+  scheduler_->SetNeedsCommit();
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_);
 
-  client.Reset();
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  client_->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
 
-  client.Reset();
-  scheduler->NotifyBeginMainFrameStarted();
-  scheduler->NotifyReadyToCommit();
-  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
+  client_->Reset();
+  scheduler_->NotifyBeginMainFrameStarted();
+  scheduler_->NotifyReadyToCommit();
+  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_);
 
-  client.Reset();
-  scheduler->DidLoseOutputSurface();
+  client_->Reset();
+  scheduler_->DidLoseOutputSurface();
   if (impl_side_painting) {
     // Sync tree should be forced to activate.
-    EXPECT_ACTION("ScheduledActionActivateSyncTree", client, 0, 2);
-    EXPECT_ACTION("SetNeedsBeginFrames(false)", client, 1, 2);
+    EXPECT_ACTION("ScheduledActionActivateSyncTree", client_, 0, 2);
+    EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 1, 2);
   } else {
-    EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
+    EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client_);
   }
 
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
+  client_->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_);
 }
 
-TEST(SchedulerTest, DidLoseOutputSurfaceAfterReadyToCommit) {
+TEST_F(SchedulerTest, DidLoseOutputSurfaceAfterReadyToCommit) {
   DidLoseOutputSurfaceAfterReadyToCommit(false);
 }
 
-TEST(SchedulerTest, DidLoseOutputSurfaceAfterReadyToCommitWithImplPainting) {
+TEST_F(SchedulerTest, DidLoseOutputSurfaceAfterReadyToCommitWithImplPainting) {
   DidLoseOutputSurfaceAfterReadyToCommit(true);
 }
 
-TEST(SchedulerTest, DidLoseOutputSurfaceAfterSetNeedsPrepareTiles) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
+TEST_F(SchedulerTest, DidLoseOutputSurfaceAfterSetNeedsPrepareTiles) {
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(true);
 
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+  scheduler_->SetNeedsPrepareTiles();
+  scheduler_->SetNeedsRedraw();
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_);
 
-  scheduler->SetNeedsPrepareTiles();
-  scheduler->SetNeedsRedraw();
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
+  client_->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
 
-  client.Reset();
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  client_->Reset();
+  scheduler_->DidLoseOutputSurface();
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client_);
 
-  client.Reset();
-  scheduler->DidLoseOutputSurface();
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
-
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_ACTION("ScheduledActionPrepareTiles", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionBeginOutputSurfaceCreation", client, 1, 2);
+  client_->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_ACTION("ScheduledActionPrepareTiles", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_, 1, 2);
 }
 
-TEST(SchedulerTest, DidLoseOutputSurfaceAfterBeginRetroFramePosted) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
-
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+TEST_F(SchedulerTest, DidLoseOutputSurfaceAfterBeginRetroFramePosted) {
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(true);
 
   // SetNeedsCommit should begin the frame on the next BeginImplFrame.
-  scheduler->SetNeedsCommit();
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
+  scheduler_->SetNeedsCommit();
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_);
 
   // Create a BeginFrame with a long deadline to avoid race conditions.
   // This is the first BeginFrame, which will be handled immediately.
-  client.Reset();
+  client_->Reset();
   BeginFrameArgs args =
-      CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, client.now_src());
+      CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, now_src());
   args.deadline += base::TimeDelta::FromHours(1);
-  client.fake_external_begin_frame_source()->TestOnBeginFrame(args);
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
+  fake_external_begin_frame_source()->TestOnBeginFrame(args);
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
 
   // Queue BeginFrames while we are still handling the previous BeginFrame.
   args.frame_time += base::TimeDelta::FromSeconds(1);
-  client.fake_external_begin_frame_source()->TestOnBeginFrame(args);
+  fake_external_begin_frame_source()->TestOnBeginFrame(args);
   args.frame_time += base::TimeDelta::FromSeconds(1);
-  client.fake_external_begin_frame_source()->TestOnBeginFrame(args);
+  fake_external_begin_frame_source()->TestOnBeginFrame(args);
 
   // If we don't swap on the deadline, we wait for the next BeginImplFrame.
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_NO_ACTION(client);
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
+  client_->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_NO_ACTION(client_);
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
 
   // NotifyReadyToCommit should trigger the commit.
-  client.Reset();
-  scheduler->NotifyBeginMainFrameStarted();
-  scheduler->NotifyReadyToCommit();
-  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
-  EXPECT_TRUE(client.needs_begin_frames());
+  client_->Reset();
+  scheduler_->NotifyBeginMainFrameStarted();
+  scheduler_->NotifyReadyToCommit();
+  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_);
+  EXPECT_TRUE(client_->needs_begin_frames());
 
-  client.Reset();
-  EXPECT_FALSE(scheduler->IsBeginRetroFrameArgsEmpty());
-  scheduler->DidLoseOutputSurface();
-  EXPECT_ACTION("ScheduledActionBeginOutputSurfaceCreation", client, 0, 2);
-  EXPECT_ACTION("SetNeedsBeginFrames(false)", client, 1, 2);
-  EXPECT_TRUE(scheduler->IsBeginRetroFrameArgsEmpty());
+  client_->Reset();
+  EXPECT_FALSE(scheduler_->IsBeginRetroFrameArgsEmpty());
+  scheduler_->DidLoseOutputSurface();
+  EXPECT_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_, 0, 2);
+  EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->IsBeginRetroFrameArgsEmpty());
 
   // Posted BeginRetroFrame is aborted.
-  client.Reset();
-  client.task_runner().RunPendingTasks();
-  EXPECT_NO_ACTION(client);
+  client_->Reset();
+  task_runner().RunPendingTasks();
+  EXPECT_NO_ACTION(client_);
 }
 
-TEST(SchedulerTest, DidLoseOutputSurfaceDuringBeginRetroFrameRunning) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
-
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+TEST_F(SchedulerTest, DidLoseOutputSurfaceDuringBeginRetroFrameRunning) {
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(true);
 
   // SetNeedsCommit should begin the frame on the next BeginImplFrame.
-  scheduler->SetNeedsCommit();
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
+  scheduler_->SetNeedsCommit();
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_);
 
   // Create a BeginFrame with a long deadline to avoid race conditions.
   // This is the first BeginFrame, which will be handled immediately.
-  client.Reset();
+  client_->Reset();
   BeginFrameArgs args =
-      CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, client.now_src());
+      CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, now_src());
   args.deadline += base::TimeDelta::FromHours(1);
-  client.fake_external_begin_frame_source()->TestOnBeginFrame(args);
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
+  fake_external_begin_frame_source()->TestOnBeginFrame(args);
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
 
   // Queue BeginFrames while we are still handling the previous BeginFrame.
   args.frame_time += base::TimeDelta::FromSeconds(1);
-  client.fake_external_begin_frame_source()->TestOnBeginFrame(args);
+  fake_external_begin_frame_source()->TestOnBeginFrame(args);
   args.frame_time += base::TimeDelta::FromSeconds(1);
-  client.fake_external_begin_frame_source()->TestOnBeginFrame(args);
+  fake_external_begin_frame_source()->TestOnBeginFrame(args);
 
   // If we don't swap on the deadline, we wait for the next BeginImplFrame.
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_NO_ACTION(client);
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
+  client_->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_NO_ACTION(client_);
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
 
   // NotifyReadyToCommit should trigger the commit.
-  client.Reset();
-  scheduler->NotifyBeginMainFrameStarted();
-  scheduler->NotifyReadyToCommit();
-  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
-  EXPECT_TRUE(client.needs_begin_frames());
+  client_->Reset();
+  scheduler_->NotifyBeginMainFrameStarted();
+  scheduler_->NotifyReadyToCommit();
+  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_);
+  EXPECT_TRUE(client_->needs_begin_frames());
 
   // BeginImplFrame should prepare the draw.
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted BeginRetroFrame.
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
+  client_->Reset();
+  task_runner().RunPendingTasks();  // Run posted BeginRetroFrame.
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
 
-  client.Reset();
-  EXPECT_FALSE(scheduler->IsBeginRetroFrameArgsEmpty());
-  scheduler->DidLoseOutputSurface();
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client);
-  EXPECT_TRUE(scheduler->IsBeginRetroFrameArgsEmpty());
+  client_->Reset();
+  EXPECT_FALSE(scheduler_->IsBeginRetroFrameArgsEmpty());
+  scheduler_->DidLoseOutputSurface();
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(false)", client_);
+  EXPECT_TRUE(scheduler_->IsBeginRetroFrameArgsEmpty());
 
   // BeginImplFrame deadline should abort drawing.
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_FALSE(client.needs_begin_frames());
+  client_->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_);
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_FALSE(client_->needs_begin_frames());
 
   // No more BeginRetroFrame because BeginRetroFrame queue is cleared.
-  client.Reset();
-  client.task_runner().RunPendingTasks();
-  EXPECT_NO_ACTION(client);
+  client_->Reset();
+  task_runner().RunPendingTasks();
+  EXPECT_NO_ACTION(client_);
 }
 
-TEST(SchedulerTest,
-     StopBeginFrameAfterDidLoseOutputSurfaceWithSyntheticBeginFrameSource) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+TEST_F(SchedulerTest,
+       StopBeginFrameAfterDidLoseOutputSurfaceWithSyntheticBeginFrameSource) {
+  SetUpScheduler(true);
 
   // SetNeedsCommit should begin the frame on the next BeginImplFrame.
-  EXPECT_FALSE(scheduler->frame_source().NeedsBeginFrames());
-  scheduler->SetNeedsCommit();
-  EXPECT_TRUE(scheduler->frame_source().NeedsBeginFrames());
+  EXPECT_FALSE(scheduler_->frame_source().NeedsBeginFrames());
+  scheduler_->SetNeedsCommit();
+  EXPECT_TRUE(scheduler_->frame_source().NeedsBeginFrames());
 
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted Tick.
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(scheduler->frame_source().NeedsBeginFrames());
+  client_->Reset();
+  task_runner().RunPendingTasks();  // Run posted Tick.
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(scheduler_->frame_source().NeedsBeginFrames());
 
   // NotifyReadyToCommit should trigger the commit.
-  client.Reset();
-  scheduler->NotifyBeginMainFrameStarted();
-  scheduler->NotifyReadyToCommit();
-  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
-  EXPECT_TRUE(scheduler->frame_source().NeedsBeginFrames());
+  client_->Reset();
+  scheduler_->NotifyBeginMainFrameStarted();
+  scheduler_->NotifyReadyToCommit();
+  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_);
+  EXPECT_TRUE(scheduler_->frame_source().NeedsBeginFrames());
 
-  client.Reset();
-  scheduler->DidLoseOutputSurface();
-  EXPECT_NO_ACTION(client);
-  EXPECT_FALSE(scheduler->frame_source().NeedsBeginFrames());
+  client_->Reset();
+  scheduler_->DidLoseOutputSurface();
+  EXPECT_NO_ACTION(client_);
+  EXPECT_FALSE(scheduler_->frame_source().NeedsBeginFrames());
 
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client);
-  EXPECT_FALSE(scheduler->frame_source().NeedsBeginFrames());
+  client_->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_SINGLE_ACTION("ScheduledActionBeginOutputSurfaceCreation", client_);
+  EXPECT_FALSE(scheduler_->frame_source().NeedsBeginFrames());
 }
 
-TEST(SchedulerTest, ScheduledActionActivateAfterBecomingInvisible) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.impl_side_painting = true;
-  scheduler_settings.use_external_begin_frame_source = true;
-
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+TEST_F(SchedulerTest, ScheduledActionActivateAfterBecomingInvisible) {
+  scheduler_settings_.impl_side_painting = true;
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(true);
 
   // SetNeedsCommit should begin the frame.
-  scheduler->SetNeedsCommit();
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
+  scheduler_->SetNeedsCommit();
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_);
 
-  client.Reset();
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  client_->Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionSendBeginMainFrame", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
 
-  client.Reset();
-  scheduler->NotifyBeginMainFrameStarted();
-  scheduler->NotifyReadyToCommit();
-  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client);
+  client_->Reset();
+  scheduler_->NotifyBeginMainFrameStarted();
+  scheduler_->NotifyReadyToCommit();
+  EXPECT_SINGLE_ACTION("ScheduledActionCommit", client_);
 
-  client.Reset();
-  scheduler->SetVisible(false);
+  client_->Reset();
+  scheduler_->SetVisible(false);
   // Sync tree should be forced to activate.
-  EXPECT_ACTION("SetNeedsBeginFrames(false)", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionActivateSyncTree", client, 1, 2);
+  EXPECT_ACTION("SetNeedsBeginFrames(false)", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionActivateSyncTree", client_, 1, 2);
 }
 
-TEST(SchedulerTest, SchedulerPowerMonitoring) {
-  FakeSchedulerClient client;
-  SchedulerSettings settings;
-  settings.disable_hi_res_timer_tasks_on_battery = true;
-
-  CREATE_SCHEDULER_AND_INIT_SURFACE(settings);
+TEST_F(SchedulerTest, SchedulerPowerMonitoring) {
+  scheduler_settings_.disable_hi_res_timer_tasks_on_battery = true;
+  SetUpScheduler(true);
 
   base::TimeTicks before_deadline, after_deadline;
 
-  scheduler->SetNeedsCommit();
-  scheduler->SetNeedsRedraw();
-  client.Reset();
+  scheduler_->SetNeedsCommit();
+  scheduler_->SetNeedsRedraw();
+  client_->Reset();
 
   // On non-battery power
-  EXPECT_FALSE(client.PowerMonitor()->IsOnBatteryPower());
+  EXPECT_FALSE(PowerMonitor()->IsOnBatteryPower());
 
-  EXPECT_SCOPED(client.AdvanceFrame());
-  client.Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  client_->Reset();
 
-  before_deadline = client.now_src()->Now();
-  EXPECT_TRUE(client.task_runner().RunTasksWhile(
-      client.ImplFrameDeadlinePending(true)));
-  after_deadline = client.now_src()->Now();
+  before_deadline = now_src()->Now();
+  EXPECT_TRUE(
+      task_runner().RunTasksWhile(client_->ImplFrameDeadlinePending(true)));
+  after_deadline = now_src()->Now();
 
   // We post a non-zero deadline task when not on battery
   EXPECT_LT(before_deadline, after_deadline);
 
   // Switch to battery power
-  client.PowerMonitorSource()->GeneratePowerStateEvent(true);
-  EXPECT_TRUE(client.PowerMonitor()->IsOnBatteryPower());
+  PowerMonitorSource()->GeneratePowerStateEvent(true);
+  EXPECT_TRUE(PowerMonitor()->IsOnBatteryPower());
 
-  EXPECT_SCOPED(client.AdvanceFrame());
-  scheduler->SetNeedsCommit();
-  scheduler->SetNeedsRedraw();
-  client.Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  scheduler_->SetNeedsCommit();
+  scheduler_->SetNeedsRedraw();
+  client_->Reset();
 
-  before_deadline = client.now_src()->Now();
-  EXPECT_TRUE(client.task_runner().RunTasksWhile(
-      client.ImplFrameDeadlinePending(true)));
-  after_deadline = client.now_src()->Now();
+  before_deadline = now_src()->Now();
+  EXPECT_TRUE(
+      task_runner().RunTasksWhile(client_->ImplFrameDeadlinePending(true)));
+  after_deadline = now_src()->Now();
 
   // We post a zero deadline task when on battery
   EXPECT_EQ(before_deadline, after_deadline);
 
   // Switch to non-battery power
-  client.PowerMonitorSource()->GeneratePowerStateEvent(false);
-  EXPECT_FALSE(client.PowerMonitor()->IsOnBatteryPower());
+  PowerMonitorSource()->GeneratePowerStateEvent(false);
+  EXPECT_FALSE(PowerMonitor()->IsOnBatteryPower());
 
-  EXPECT_SCOPED(client.AdvanceFrame());
-  scheduler->SetNeedsCommit();
-  scheduler->SetNeedsRedraw();
-  client.Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  scheduler_->SetNeedsCommit();
+  scheduler_->SetNeedsRedraw();
+  client_->Reset();
 
   // Same as before
-  before_deadline = client.now_src()->Now();
-  EXPECT_TRUE(client.task_runner().RunTasksWhile(
-      client.ImplFrameDeadlinePending(true)));
-  after_deadline = client.now_src()->Now();
+  before_deadline = now_src()->Now();
+  EXPECT_TRUE(
+      task_runner().RunTasksWhile(client_->ImplFrameDeadlinePending(true)));
+  after_deadline = now_src()->Now();
 }
 
-TEST(SchedulerTest,
-     SimulateWindowsLowResolutionTimerOnBattery_PrioritizeImplLatencyOff) {
-  FakeSchedulerClient client;
-  SchedulerSettings settings;
-  settings.use_external_begin_frame_source = true;
-
-  CREATE_SCHEDULER_AND_INIT_SURFACE(settings);
+TEST_F(SchedulerTest,
+       SimulateWindowsLowResolutionTimerOnBattery_PrioritizeImplLatencyOff) {
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(true);
 
   // Set needs commit so that the scheduler tries to wait for the main thread
-  scheduler->SetNeedsCommit();
+  scheduler_->SetNeedsCommit();
   // Set needs redraw so that the scheduler doesn't wait too long
-  scheduler->SetNeedsRedraw();
-  client.Reset();
+  scheduler_->SetNeedsRedraw();
+  client_->Reset();
 
   // Switch to battery power
-  client.PowerMonitorSource()->GeneratePowerStateEvent(true);
-  EXPECT_TRUE(client.PowerMonitor()->IsOnBatteryPower());
+  PowerMonitorSource()->GeneratePowerStateEvent(true);
+  EXPECT_TRUE(PowerMonitor()->IsOnBatteryPower());
 
-  EXPECT_SCOPED(client.AdvanceFrame());
-  scheduler->SetNeedsCommit();
-  scheduler->SetNeedsRedraw();
-  client.Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  scheduler_->SetNeedsCommit();
+  scheduler_->SetNeedsRedraw();
+  client_->Reset();
 
   // Disable auto-advancing of now_src
-  client.task_runner().SetAutoAdvanceNowToPendingTasks(false);
+  task_runner().SetAutoAdvanceNowToPendingTasks(false);
 
   // Deadline task is pending
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.task_runner().RunPendingTasks();
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  task_runner().RunPendingTasks();
   // Deadline task is still pending
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
 
   // Advance now by 15 ms - same as windows low res timer
-  client.now_src()->AdvanceNowMicroseconds(15000);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.task_runner().RunPendingTasks();
+  now_src()->AdvanceNowMicroseconds(15000);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  task_runner().RunPendingTasks();
   // Deadline task finally completes
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
 }
 
-TEST(SchedulerTest,
-     SimulateWindowsLowResolutionTimerOnBattery_PrioritizeImplLatencyOn) {
-  FakeSchedulerClient client;
-  SchedulerSettings settings;
-  settings.disable_hi_res_timer_tasks_on_battery = true;
-  settings.use_external_begin_frame_source = true;
-
-  CREATE_SCHEDULER_AND_INIT_SURFACE(settings);
+TEST_F(SchedulerTest,
+       SimulateWindowsLowResolutionTimerOnBattery_PrioritizeImplLatencyOn) {
+  scheduler_settings_.disable_hi_res_timer_tasks_on_battery = true;
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(true);
 
   // Set needs commit so that the scheduler tries to wait for the main thread
-  scheduler->SetNeedsCommit();
+  scheduler_->SetNeedsCommit();
   // Set needs redraw so that the scheduler doesn't wait too long
-  scheduler->SetNeedsRedraw();
-  client.Reset();
+  scheduler_->SetNeedsRedraw();
+  client_->Reset();
 
   // Switch to battery power
-  client.PowerMonitorSource()->GeneratePowerStateEvent(true);
-  EXPECT_TRUE(client.PowerMonitor()->IsOnBatteryPower());
+  PowerMonitorSource()->GeneratePowerStateEvent(true);
+  EXPECT_TRUE(PowerMonitor()->IsOnBatteryPower());
 
-  EXPECT_SCOPED(client.AdvanceFrame());
-  scheduler->SetNeedsCommit();
-  scheduler->SetNeedsRedraw();
-  client.Reset();
+  EXPECT_SCOPED(AdvanceFrame());
+  scheduler_->SetNeedsCommit();
+  scheduler_->SetNeedsRedraw();
+  client_->Reset();
 
   // Disable auto-advancing of now_src
-  client.task_runner().SetAutoAdvanceNowToPendingTasks(false);
+  task_runner().SetAutoAdvanceNowToPendingTasks(false);
 
   // Deadline task is pending
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.task_runner().RunPendingTasks();
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  task_runner().RunPendingTasks();
   // Deadline task runs immediately
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
 }
 
 // Tests to ensure frame sources can be successfully changed while drawing.
-TEST(SchedulerTest, SwitchFrameSourceToUnthrottled) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
-
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+TEST_F(SchedulerTest, SwitchFrameSourceToUnthrottled) {
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(true);
 
   // SetNeedsRedraw should begin the frame on the next BeginImplFrame.
-  scheduler->SetNeedsRedraw();
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
-  client.Reset();
+  scheduler_->SetNeedsRedraw();
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_);
+  client_->Reset();
 
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 1);
-  scheduler->SetNeedsRedraw();
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 0, 1);
+  scheduler_->SetNeedsRedraw();
 
   // Switch to an unthrottled frame source.
-  scheduler->SetThrottleFrameProduction(false);
-  client.Reset();
+  scheduler_->SetThrottleFrameProduction(false);
+  client_->Reset();
 
   // Unthrottled frame source will immediately begin a new frame.
-  client.task_runner().RunPendingTasks();  // Run posted BeginFrame.
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
+  task_runner().RunPendingTasks();  // Run posted BeginFrame.
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  client_->Reset();
 
   // If we don't swap on the deadline, we wait for the next BeginFrame.
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 1);
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 0, 1);
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  client_->Reset();
 }
 
 // Tests to ensure frame sources can be successfully changed while a frame
 // deadline is pending.
-TEST(SchedulerTest, SwitchFrameSourceToUnthrottledBeforeDeadline) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.use_external_begin_frame_source = true;
-
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+TEST_F(SchedulerTest, SwitchFrameSourceToUnthrottledBeforeDeadline) {
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(true);
 
   // SetNeedsRedraw should begin the frame on the next BeginImplFrame.
-  scheduler->SetNeedsRedraw();
-  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client);
-  client.Reset();
+  scheduler_->SetNeedsRedraw();
+  EXPECT_SINGLE_ACTION("SetNeedsBeginFrames(true)", client_);
+  client_->Reset();
 
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2);
 
   // Switch to an unthrottled frame source before the frame deadline is hit.
-  scheduler->SetThrottleFrameProduction(false);
-  client.Reset();
+  scheduler_->SetThrottleFrameProduction(false);
+  client_->Reset();
 
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
 
-  client.task_runner()
-      .RunPendingTasks();  // Run posted deadline and BeginFrame.
-  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 2);
+  task_runner().RunPendingTasks();  // Run posted deadline and BeginFrame.
+  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 0, 2);
   // Unthrottled frame source will immediately begin a new frame.
-  EXPECT_ACTION("WillBeginImplFrame", client, 1, 2);
-  scheduler->SetNeedsRedraw();
-  client.Reset();
+  EXPECT_ACTION("WillBeginImplFrame", client_, 1, 2);
+  scheduler_->SetNeedsRedraw();
+  client_->Reset();
 
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_ACTION("ScheduledActionAnimate", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 1, 2);
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 1, 2);
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  client_->Reset();
 }
 
 // Tests to ensure that the active frame source can successfully be changed from
 // unthrottled to throttled.
-TEST(SchedulerTest, SwitchFrameSourceToThrottled) {
-  FakeSchedulerClient client;
-  SchedulerSettings scheduler_settings;
-  scheduler_settings.throttle_frame_production = false;
-  scheduler_settings.use_external_begin_frame_source = true;
+TEST_F(SchedulerTest, SwitchFrameSourceToThrottled) {
+  scheduler_settings_.throttle_frame_production = false;
+  scheduler_settings_.use_external_begin_frame_source = true;
+  SetUpScheduler(true);
 
-  CREATE_SCHEDULER_AND_INIT_SURFACE(scheduler_settings);
+  scheduler_->SetNeedsRedraw();
+  EXPECT_NO_ACTION(client_);
+  client_->Reset();
 
-  scheduler->SetNeedsRedraw();
-  EXPECT_NO_ACTION(client);
-  client.Reset();
+  task_runner().RunPendingTasks();  // Run posted BeginFrame.
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  client_->Reset();
 
-  client.task_runner().RunPendingTasks();  // Run posted BeginFrame.
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
-
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 1);
-  EXPECT_FALSE(scheduler->BeginImplFrameDeadlinePending());
-  client.Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 0, 1);
+  EXPECT_FALSE(scheduler_->BeginImplFrameDeadlinePending());
+  client_->Reset();
 
   // Switch to a throttled frame source.
-  scheduler->SetThrottleFrameProduction(true);
-  client.Reset();
+  scheduler_->SetThrottleFrameProduction(true);
+  client_->Reset();
 
   // SetNeedsRedraw should begin the frame on the next BeginImplFrame.
-  scheduler->SetNeedsRedraw();
-  client.task_runner().RunPendingTasks();
-  EXPECT_NO_ACTION(client);
-  client.Reset();
+  scheduler_->SetNeedsRedraw();
+  task_runner().RunPendingTasks();
+  EXPECT_NO_ACTION(client_);
+  client_->Reset();
 
-  EXPECT_SCOPED(client.AdvanceFrame());
-  EXPECT_ACTION("WillBeginImplFrame", client, 0, 2);
-  EXPECT_ACTION("ScheduledActionAnimate", client, 1, 2);
-  EXPECT_TRUE(scheduler->BeginImplFrameDeadlinePending());
-  EXPECT_TRUE(client.needs_begin_frames());
-  client.Reset();
-  client.task_runner().RunPendingTasks();  // Run posted deadline.
-  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client, 0, 1);
+  EXPECT_SCOPED(AdvanceFrame());
+  EXPECT_ACTION("WillBeginImplFrame", client_, 0, 2);
+  EXPECT_ACTION("ScheduledActionAnimate", client_, 1, 2);
+  EXPECT_TRUE(scheduler_->BeginImplFrameDeadlinePending());
+  EXPECT_TRUE(client_->needs_begin_frames());
+  client_->Reset();
+  task_runner().RunPendingTasks();  // Run posted deadline.
+  EXPECT_ACTION("ScheduledActionDrawAndSwapIfPossible", client_, 0, 1);
 }
 
 }  // namespace
diff --git a/cc/surfaces/BUILD.gn b/cc/surfaces/BUILD.gn
index 6c7c1cc..e43d4e5 100644
--- a/cc/surfaces/BUILD.gn
+++ b/cc/surfaces/BUILD.gn
@@ -18,10 +18,14 @@
     "display.cc",
     "display.h",
     "display_client.h",
+    "onscreen_display_client.cc",
+    "onscreen_display_client.h",
     "surface.cc",
     "surface.h",
     "surface_aggregator.cc",
     "surface_aggregator.h",
+    "surface_display_output_surface.cc",
+    "surface_display_output_surface.h",
     "surface_factory.cc",
     "surface_factory.h",
     "surface_factory_client.h",
diff --git a/cc/surfaces/display.cc b/cc/surfaces/display.cc
index 72c31b5..ab1f0af 100644
--- a/cc/surfaces/display.cc
+++ b/cc/surfaces/display.cc
@@ -4,8 +4,8 @@
 
 #include "cc/surfaces/display.h"
 
-#include "base/debug/trace_event.h"
 #include "base/message_loop/message_loop.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/debug/benchmark_instrumentation.h"
 #include "cc/output/compositor_frame.h"
 #include "cc/output/compositor_frame_ack.h"
@@ -198,9 +198,11 @@
 }
 
 int Display::GetMaxFramesPending() {
-  if (!output_surface_)
-    return OutputSurface::DEFAULT_MAX_FRAMES_PENDING;
-  return output_surface_->capabilities().max_frames_pending;
+  int max_frames_pending =
+      output_surface_ ? output_surface_->capabilities().max_frames_pending : 0;
+  if (max_frames_pending <= 0)
+    max_frames_pending = OutputSurface::DEFAULT_MAX_FRAMES_PENDING;
+  return max_frames_pending;
 }
 
 }  // namespace cc
diff --git a/cc/surfaces/onscreen_display_client.cc b/cc/surfaces/onscreen_display_client.cc
new file mode 100644
index 0000000..c9f1f7f
--- /dev/null
+++ b/cc/surfaces/onscreen_display_client.cc
@@ -0,0 +1,96 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "cc/surfaces/onscreen_display_client.h"
+
+#include "base/trace_event/trace_event.h"
+#include "cc/output/output_surface.h"
+#include "cc/surfaces/surface_display_output_surface.h"
+#include "cc/surfaces/surface_factory.h"
+#include "cc/surfaces/surface_manager.h"
+
+namespace cc {
+
+OnscreenDisplayClient::OnscreenDisplayClient(
+    scoped_ptr<OutputSurface> output_surface,
+    SurfaceManager* manager,
+    SharedBitmapManager* bitmap_manager,
+    gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
+    const RendererSettings& settings,
+    scoped_refptr<base::SingleThreadTaskRunner> task_runner)
+    : output_surface_(output_surface.Pass()),
+      display_(new Display(this,
+                           manager,
+                           bitmap_manager,
+                           gpu_memory_buffer_manager,
+                           settings)),
+      task_runner_(task_runner),
+      scheduled_draw_(false),
+      output_surface_lost_(false),
+      deferred_draw_(false),
+      pending_frames_(0),
+      weak_ptr_factory_(this) {
+}
+
+OnscreenDisplayClient::~OnscreenDisplayClient() {
+}
+
+bool OnscreenDisplayClient::Initialize() {
+  return display_->Initialize(output_surface_.Pass());
+}
+
+void OnscreenDisplayClient::CommitVSyncParameters(base::TimeTicks timebase,
+                                                  base::TimeDelta interval) {
+  surface_display_output_surface_->ReceivedVSyncParameters(timebase, interval);
+}
+
+void OnscreenDisplayClient::DisplayDamaged() {
+  if (scheduled_draw_ || deferred_draw_)
+    return;
+  TRACE_EVENT0("content", "OnscreenDisplayClient::DisplayDamaged");
+  if (pending_frames_ >= display_->GetMaxFramesPending()) {
+    deferred_draw_ = true;
+  } else {
+    ScheduleDraw();
+  }
+}
+
+void OnscreenDisplayClient::ScheduleDraw() {
+  DCHECK(!deferred_draw_);
+  DCHECK(!scheduled_draw_);
+  scheduled_draw_ = true;
+  task_runner_->PostTask(FROM_HERE, base::Bind(&OnscreenDisplayClient::Draw,
+                                               weak_ptr_factory_.GetWeakPtr()));
+}
+
+void OnscreenDisplayClient::OutputSurfaceLost() {
+  output_surface_lost_ = true;
+  surface_display_output_surface_->DidLoseOutputSurface();
+}
+
+void OnscreenDisplayClient::Draw() {
+  TRACE_EVENT0("content", "OnscreenDisplayClient::Draw");
+  if (output_surface_lost_)
+    return;
+  scheduled_draw_ = false;
+  display_->Draw();
+}
+
+void OnscreenDisplayClient::DidSwapBuffers() {
+  pending_frames_++;
+}
+
+void OnscreenDisplayClient::DidSwapBuffersComplete() {
+  pending_frames_--;
+  if ((pending_frames_ < display_->GetMaxFramesPending()) && deferred_draw_) {
+    deferred_draw_ = false;
+    ScheduleDraw();
+  }
+}
+
+void OnscreenDisplayClient::SetMemoryPolicy(const ManagedMemoryPolicy& policy) {
+  surface_display_output_surface_->SetMemoryPolicy(policy);
+}
+
+}  // namespace cc
diff --git a/cc/surfaces/onscreen_display_client.h b/cc/surfaces/onscreen_display_client.h
new file mode 100644
index 0000000..ef61e53
--- /dev/null
+++ b/cc/surfaces/onscreen_display_client.h
@@ -0,0 +1,75 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CC_SURFACES_ONSCREEN_DISPLAY_CLIENT_H_
+#define CC_SURFACES_ONSCREEN_DISPLAY_CLIENT_H_
+
+#include "cc/surfaces/display_client.h"
+
+#include "base/compiler_specific.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/single_thread_task_runner.h"
+#include "cc/surfaces/display.h"
+#include "cc/surfaces/surfaces_export.h"
+
+namespace cc {
+class ContextProvider;
+class SurfaceManager;
+class SurfaceDisplayOutputSurface;
+
+// This class provides a DisplayClient implementation for drawing directly to an
+// onscreen context.
+class CC_SURFACES_EXPORT OnscreenDisplayClient
+    : NON_EXPORTED_BASE(DisplayClient) {
+ public:
+  OnscreenDisplayClient(
+      scoped_ptr<OutputSurface> output_surface,
+      SurfaceManager* manager,
+      SharedBitmapManager* bitmap_manager,
+      gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
+      const RendererSettings& settings,
+      scoped_refptr<base::SingleThreadTaskRunner> task_runner);
+  ~OnscreenDisplayClient() override;
+
+  bool Initialize();
+  Display* display() { return display_.get(); }
+  void set_surface_output_surface(SurfaceDisplayOutputSurface* surface) {
+    surface_display_output_surface_ = surface;
+  }
+
+  // DisplayClient implementation.
+  void DisplayDamaged() override;
+  void DidSwapBuffers() override;
+  void DidSwapBuffersComplete() override;
+  void CommitVSyncParameters(base::TimeTicks timebase,
+                             base::TimeDelta interval) override;
+  void OutputSurfaceLost() override;
+  void SetMemoryPolicy(const ManagedMemoryPolicy& policy) override;
+
+  bool output_surface_lost() { return output_surface_lost_; }
+
+ private:
+  void ScheduleDraw();
+  void Draw();
+
+  scoped_ptr<OutputSurface> output_surface_;
+  scoped_ptr<Display> display_;
+  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+  SurfaceDisplayOutputSurface* surface_display_output_surface_;
+  bool scheduled_draw_;
+  bool output_surface_lost_;
+  // True if a draw should be scheduled, but it's hit the limit on max frames
+  // pending.
+  bool deferred_draw_;
+  int pending_frames_;
+
+  base::WeakPtrFactory<OnscreenDisplayClient> weak_ptr_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(OnscreenDisplayClient);
+};
+
+}  // namespace cc
+
+#endif  // CC_SURFACES_ONSCREEN_DISPLAY_CLIENT_H_
diff --git a/cc/surfaces/surface_aggregator.cc b/cc/surfaces/surface_aggregator.cc
index 15f4b53..a6f15f0 100644
--- a/cc/surfaces/surface_aggregator.cc
+++ b/cc/surfaces/surface_aggregator.cc
@@ -8,8 +8,8 @@
 
 #include "base/bind.h"
 #include "base/containers/hash_tables.h"
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/base/math_util.h"
 #include "cc/output/compositor_frame.h"
 #include "cc/output/delegated_frame_data.h"
diff --git a/cc/surfaces/surface_display_output_surface.cc b/cc/surfaces/surface_display_output_surface.cc
new file mode 100644
index 0000000..ed6763d
--- /dev/null
+++ b/cc/surfaces/surface_display_output_surface.cc
@@ -0,0 +1,98 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "cc/surfaces/surface_display_output_surface.h"
+
+#include "cc/output/compositor_frame.h"
+#include "cc/output/compositor_frame_ack.h"
+#include "cc/surfaces/display.h"
+#include "cc/surfaces/onscreen_display_client.h"
+#include "cc/surfaces/surface.h"
+#include "cc/surfaces/surface_manager.h"
+
+namespace cc {
+
+SurfaceDisplayOutputSurface::SurfaceDisplayOutputSurface(
+    SurfaceManager* surface_manager,
+    SurfaceIdAllocator* allocator,
+    const scoped_refptr<ContextProvider>& context_provider)
+    : OutputSurface(context_provider, nullptr),
+      display_client_(NULL),
+      surface_manager_(surface_manager),
+      factory_(surface_manager, this),
+      allocator_(allocator) {
+  capabilities_.delegated_rendering = true;
+  capabilities_.max_frames_pending = 1;
+  capabilities_.can_force_reclaim_resources = true;
+}
+
+SurfaceDisplayOutputSurface::~SurfaceDisplayOutputSurface() {
+  client_ = NULL;
+  if (!surface_id_.is_null()) {
+    factory_.Destroy(surface_id_);
+  }
+}
+
+void SurfaceDisplayOutputSurface::ReceivedVSyncParameters(
+    base::TimeTicks timebase,
+    base::TimeDelta interval) {
+  CommitVSyncParameters(timebase, interval);
+}
+
+void SurfaceDisplayOutputSurface::SwapBuffers(CompositorFrame* frame) {
+  gfx::Size frame_size =
+      frame->delegated_frame_data->render_pass_list.back()->output_rect.size();
+  if (frame_size != display_size_) {
+    if (!surface_id_.is_null()) {
+      factory_.Destroy(surface_id_);
+    }
+    surface_id_ = allocator_->GenerateId();
+    factory_.Create(surface_id_);
+    display_size_ = frame_size;
+  }
+  display_client_->display()->SetSurfaceId(surface_id_,
+                                           frame->metadata.device_scale_factor);
+
+  scoped_ptr<CompositorFrame> frame_copy(new CompositorFrame());
+  frame->AssignTo(frame_copy.get());
+  factory_.SubmitFrame(
+      surface_id_, frame_copy.Pass(),
+      base::Bind(&SurfaceDisplayOutputSurface::SwapBuffersComplete,
+                 base::Unretained(this)));
+
+  client_->DidSwapBuffers();
+}
+
+bool SurfaceDisplayOutputSurface::BindToClient(OutputSurfaceClient* client) {
+  DCHECK(client);
+  DCHECK(display_client_);
+  client_ = client;
+  // Avoid initializing GL context here, as this should be sharing the
+  // Display's context.
+  return display_client_->Initialize();
+}
+
+void SurfaceDisplayOutputSurface::ForceReclaimResources() {
+  if (!surface_id_.is_null()) {
+    scoped_ptr<CompositorFrame> empty_frame(new CompositorFrame());
+    empty_frame->delegated_frame_data.reset(new DelegatedFrameData);
+    factory_.SubmitFrame(surface_id_, empty_frame.Pass(),
+                         SurfaceFactory::DrawCallback());
+  }
+}
+
+void SurfaceDisplayOutputSurface::ReturnResources(
+    const ReturnedResourceArray& resources) {
+  CompositorFrameAck ack;
+  ack.resources = resources;
+  if (client_)
+    client_->ReclaimResources(&ack);
+}
+
+void SurfaceDisplayOutputSurface::SwapBuffersComplete(SurfaceDrawStatus drawn) {
+  if (client_ && !display_client_->output_surface_lost())
+    client_->DidSwapBuffersComplete();
+}
+
+}  // namespace cc
diff --git a/cc/surfaces/surface_display_output_surface.h b/cc/surfaces/surface_display_output_surface.h
new file mode 100644
index 0000000..99afda6
--- /dev/null
+++ b/cc/surfaces/surface_display_output_surface.h
@@ -0,0 +1,63 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CC_SURFACES_SURFACE_DISPLAY_OUTPUT_SURFACE_H_
+#define CC_SURFACES_SURFACE_DISPLAY_OUTPUT_SURFACE_H_
+
+#include "cc/output/output_surface.h"
+#include "cc/surfaces/surface_factory.h"
+#include "cc/surfaces/surface_factory_client.h"
+#include "cc/surfaces/surface_id_allocator.h"
+#include "cc/surfaces/surfaces_export.h"
+
+namespace cc {
+class Display;
+class OnscreenDisplayClient;
+class SurfaceManager;
+
+// This class is maps a compositor OutputSurface to the surface system's Display
+// concept, allowing a compositor client to submit frames for a native root
+// window or physical display.
+class CC_SURFACES_EXPORT SurfaceDisplayOutputSurface
+    : public OutputSurface,
+      public SurfaceFactoryClient {
+ public:
+  // The underlying Display and SurfaceManager must outlive this class.
+  SurfaceDisplayOutputSurface(
+      SurfaceManager* surface_manager,
+      SurfaceIdAllocator* allocator,
+      const scoped_refptr<ContextProvider>& context_provider);
+  ~SurfaceDisplayOutputSurface() override;
+
+  void set_display_client(OnscreenDisplayClient* display_client) {
+    display_client_ = display_client;
+  }
+  SurfaceFactory* factory() { return &factory_; }
+  void ReceivedVSyncParameters(base::TimeTicks timebase,
+                               base::TimeDelta interval);
+
+  // OutputSurface implementation.
+  void SwapBuffers(CompositorFrame* frame) override;
+  bool BindToClient(OutputSurfaceClient* client) override;
+  void ForceReclaimResources() override;
+
+  // SurfaceFactoryClient implementation.
+  void ReturnResources(const ReturnedResourceArray& resources) override;
+
+ private:
+  void SwapBuffersComplete(SurfaceDrawStatus drawn);
+
+  OnscreenDisplayClient* display_client_;
+  SurfaceManager* surface_manager_;
+  SurfaceFactory factory_;
+  gfx::Size display_size_;
+  SurfaceId surface_id_;
+  SurfaceIdAllocator* allocator_;
+
+  DISALLOW_COPY_AND_ASSIGN(SurfaceDisplayOutputSurface);
+};
+
+}  // namespace cc
+
+#endif  // CC_SURFACES_SURFACE_DISPLAY_OUTPUT_SURFACE_H_
diff --git a/cc/test/data/yuv_stripes_offset.png b/cc/test/data/yuv_stripes_offset.png
index d6b344b..ab15779 100644
--- a/cc/test/data/yuv_stripes_offset.png
+++ b/cc/test/data/yuv_stripes_offset.png
Binary files differ
diff --git a/cc/test/fake_content_layer_impl.cc b/cc/test/fake_content_layer_impl.cc
index eb35bb6..54c62d0 100644
--- a/cc/test/fake_content_layer_impl.cc
+++ b/cc/test/fake_content_layer_impl.cc
@@ -6,15 +6,19 @@
 
 namespace cc {
 
-FakeContentLayerImpl::FakeContentLayerImpl(LayerTreeImpl* tree_impl, int id)
-    : TiledLayerImpl(tree_impl, id), lost_output_surface_count_(0) {
+FakeContentLayerImpl::FakeContentLayerImpl(
+    LayerTreeImpl* tree_impl,
+    int id,
+    scoped_refptr<LayerImpl::SyncedScrollOffset> synced_scroll_offset)
+    : TiledLayerImpl(tree_impl, id, synced_scroll_offset),
+      lost_output_surface_count_(0) {
 }
 
 FakeContentLayerImpl::~FakeContentLayerImpl() {}
 
 scoped_ptr<LayerImpl> FakeContentLayerImpl::CreateLayerImpl(
     LayerTreeImpl* tree_impl) {
-  return FakeContentLayerImpl::Create(tree_impl, id());
+  return FakeContentLayerImpl::Create(tree_impl, id(), synced_scroll_offset());
 }
 
 bool FakeContentLayerImpl::HaveResourceForTileAt(int i, int j) {
diff --git a/cc/test/fake_content_layer_impl.h b/cc/test/fake_content_layer_impl.h
index 8a6c90b..d199fad 100644
--- a/cc/test/fake_content_layer_impl.h
+++ b/cc/test/fake_content_layer_impl.h
@@ -14,7 +14,15 @@
  public:
   static scoped_ptr<FakeContentLayerImpl> Create(
       LayerTreeImpl* tree_impl, int id) {
-    return make_scoped_ptr(new FakeContentLayerImpl(tree_impl, id));
+    return make_scoped_ptr(new FakeContentLayerImpl(
+        tree_impl, id, new LayerImpl::SyncedScrollOffset));
+  }
+  static scoped_ptr<FakeContentLayerImpl> Create(
+      LayerTreeImpl* tree_impl,
+      int id,
+      scoped_refptr<LayerImpl::SyncedScrollOffset> synced_scroll_offset) {
+    return make_scoped_ptr(
+        new FakeContentLayerImpl(tree_impl, id, synced_scroll_offset));
   }
   ~FakeContentLayerImpl() override;
 
@@ -30,7 +38,10 @@
   void ReleaseResources() override;
 
  private:
-  explicit FakeContentLayerImpl(LayerTreeImpl* tree_impl, int id);
+  explicit FakeContentLayerImpl(
+      LayerTreeImpl* tree_impl,
+      int id,
+      scoped_refptr<LayerImpl::SyncedScrollOffset> synced_scroll_offset);
 
   size_t lost_output_surface_count_;
 };
diff --git a/cc/test/fake_delegated_renderer_layer_impl.cc b/cc/test/fake_delegated_renderer_layer_impl.cc
index f38d5f6..28db1e4 100644
--- a/cc/test/fake_delegated_renderer_layer_impl.cc
+++ b/cc/test/fake_delegated_renderer_layer_impl.cc
@@ -53,10 +53,10 @@
 
 void FakeDelegatedRendererLayerImpl::SetFrameDataForRenderPasses(
     float device_scale_factor,
-    RenderPassList* pass_list) {
+    const RenderPassList& pass_list) {
   scoped_ptr<DelegatedFrameData> delegated_frame(new DelegatedFrameData);
   delegated_frame->device_scale_factor = device_scale_factor;
-  delegated_frame->render_pass_list.swap(*pass_list);
+  RenderPass::CopyAll(pass_list, &delegated_frame->render_pass_list);
 
   ResourceProvider* resource_provider = layer_tree_impl()->resource_provider();
 
diff --git a/cc/test/fake_delegated_renderer_layer_impl.h b/cc/test/fake_delegated_renderer_layer_impl.h
index f22370c..5a23443 100644
--- a/cc/test/fake_delegated_renderer_layer_impl.h
+++ b/cc/test/fake_delegated_renderer_layer_impl.h
@@ -26,7 +26,8 @@
   ResourceProvider::ResourceIdSet Resources() const;
 
   void SetFrameDataForRenderPasses(float device_scale_factor,
-                                   RenderPassList* pass_list);
+                                   const RenderPassList& pass_list);
+
  protected:
   FakeDelegatedRendererLayerImpl(LayerTreeImpl* tree_impl, int id);
 };
diff --git a/cc/test/fake_picture_layer_impl.cc b/cc/test/fake_picture_layer_impl.cc
index 132160f..43db7bc 100644
--- a/cc/test/fake_picture_layer_impl.cc
+++ b/cc/test/fake_picture_layer_impl.cc
@@ -15,7 +15,10 @@
     int id,
     scoped_refptr<RasterSource> raster_source,
     bool is_mask)
-    : PictureLayerImpl(tree_impl, id, is_mask),
+    : PictureLayerImpl(tree_impl,
+                       id,
+                       is_mask,
+                       new LayerImpl::SyncedScrollOffset),
       append_quads_count_(0),
       did_become_active_call_count_(0),
       has_valid_tile_priorities_(false),
@@ -32,7 +35,10 @@
     scoped_refptr<RasterSource> raster_source,
     bool is_mask,
     const gfx::Size& layer_bounds)
-    : PictureLayerImpl(tree_impl, id, is_mask),
+    : PictureLayerImpl(tree_impl,
+                       id,
+                       is_mask,
+                       new LayerImpl::SyncedScrollOffset),
       append_quads_count_(0),
       did_become_active_call_count_(0),
       has_valid_tile_priorities_(false),
@@ -46,7 +52,18 @@
 FakePictureLayerImpl::FakePictureLayerImpl(LayerTreeImpl* tree_impl,
                                            int id,
                                            bool is_mask)
-    : PictureLayerImpl(tree_impl, id, is_mask),
+    : FakePictureLayerImpl(tree_impl,
+                           id,
+                           is_mask,
+                           new LayerImpl::SyncedScrollOffset) {
+}
+
+FakePictureLayerImpl::FakePictureLayerImpl(
+    LayerTreeImpl* tree_impl,
+    int id,
+    bool is_mask,
+    scoped_refptr<LayerImpl::SyncedScrollOffset> synced_scroll_offset)
+    : PictureLayerImpl(tree_impl, id, is_mask, synced_scroll_offset),
       append_quads_count_(0),
       did_become_active_call_count_(0),
       has_valid_tile_priorities_(false),
@@ -56,7 +73,8 @@
 
 scoped_ptr<LayerImpl> FakePictureLayerImpl::CreateLayerImpl(
     LayerTreeImpl* tree_impl) {
-  return make_scoped_ptr(new FakePictureLayerImpl(tree_impl, id(), is_mask_));
+  return make_scoped_ptr(new FakePictureLayerImpl(tree_impl, id(), is_mask_,
+                                                  synced_scroll_offset()));
 }
 
 void FakePictureLayerImpl::PushPropertiesTo(LayerImpl* layer_impl) {
diff --git a/cc/test/fake_picture_layer_impl.h b/cc/test/fake_picture_layer_impl.h
index a0e16e8..caac373 100644
--- a/cc/test/fake_picture_layer_impl.h
+++ b/cc/test/fake_picture_layer_impl.h
@@ -121,6 +121,14 @@
   void ResetAllTilesPriorities();
   PictureLayerTilingSet* GetTilings() { return tilings_.get(); }
 
+  // Add the given tiling as a "used" tiling during AppendQuads. This ensures
+  // that future calls to UpdateTiles don't delete the tiling.
+  void MarkAllTilingsUsed() {
+    last_append_quads_tilings_.clear();
+    for (size_t i = 0; i < tilings_->num_tilings(); ++i)
+      last_append_quads_tilings_.push_back(tilings_->tiling_at(i));
+  }
+
   size_t release_resources_count() const { return release_resources_count_; }
   void reset_release_resources_count() { release_resources_count_ = 0; }
 
@@ -141,6 +149,11 @@
                        bool is_mask,
                        const gfx::Size& layer_bounds);
   FakePictureLayerImpl(LayerTreeImpl* tree_impl, int id, bool is_mask);
+  FakePictureLayerImpl(
+      LayerTreeImpl* tree_impl,
+      int id,
+      bool is_mask,
+      scoped_refptr<LayerImpl::SyncedScrollOffset> synced_scroll_offset);
 
  private:
   gfx::Size fixed_tile_size_;
diff --git a/cc/test/fake_tile_manager_client.cc b/cc/test/fake_tile_manager_client.cc
index e22fd1e..2c5734f 100644
--- a/cc/test/fake_tile_manager_client.cc
+++ b/cc/test/fake_tile_manager_client.cc
@@ -14,11 +14,6 @@
 FakeTileManagerClient::~FakeTileManagerClient() {
 }
 
-const std::vector<PictureLayerImpl*>& FakeTileManagerClient::GetPictureLayers()
-    const {
-  return picture_layers_;
-}
-
 scoped_ptr<RasterTilePriorityQueue> FakeTileManagerClient::BuildRasterQueue(
     TreePriority tree_priority,
     RasterTilePriorityQueue::Type type) {
diff --git a/cc/test/fake_tile_manager_client.h b/cc/test/fake_tile_manager_client.h
index ef1eaca..3afe2f5 100644
--- a/cc/test/fake_tile_manager_client.h
+++ b/cc/test/fake_tile_manager_client.h
@@ -17,7 +17,6 @@
   ~FakeTileManagerClient() override;
 
   // TileManagerClient implementation.
-  const std::vector<PictureLayerImpl*>& GetPictureLayers() const override;
   void NotifyReadyToActivate() override {}
   void NotifyReadyToDraw() override {}
   void NotifyTileStateChanged(const Tile* tile) override {}
@@ -26,9 +25,7 @@
       RasterTilePriorityQueue::Type type) override;
   scoped_ptr<EvictionTilePriorityQueue> BuildEvictionQueue(
       TreePriority tree_priority) override;
-
- private:
-  std::vector<PictureLayerImpl*> picture_layers_;
+  void SetIsLikelyToRequireADraw(bool is_likely_to_require_a_draw) override {}
 };
 
 }  // namespace cc
diff --git a/cc/test/layer_test_common.cc b/cc/test/layer_test_common.cc
index 99d3c1c..7e835b8 100644
--- a/cc/test/layer_test_common.cc
+++ b/cc/test/layer_test_common.cc
@@ -137,19 +137,19 @@
 
 void LayerTestCommon::LayerImplTest::AppendQuadsForPassWithOcclusion(
     LayerImpl* layer_impl,
-    const RenderPassId& id,
+    RenderPass* given_render_pass,
     const gfx::Rect& occluded) {
-  AppendQuadsData data(id);
+  AppendQuadsData data;
 
-  render_pass_->quad_list.clear();
-  render_pass_->shared_quad_state_list.clear();
+  given_render_pass->quad_list.clear();
+  given_render_pass->shared_quad_state_list.clear();
 
   Occlusion occlusion(layer_impl->draw_transform(),
                       SimpleEnclosedRegion(occluded),
                       SimpleEnclosedRegion());
 
   layer_impl->WillDraw(DRAW_MODE_HARDWARE, resource_provider());
-  layer_impl->AppendQuads(render_pass_.get(), occlusion, &data);
+  layer_impl->AppendQuads(given_render_pass, occlusion, &data);
   layer_impl->DidDraw(resource_provider());
 }
 
diff --git a/cc/test/layer_test_common.h b/cc/test/layer_test_common.h
index 5ff96ef..9b63f3f 100644
--- a/cc/test/layer_test_common.h
+++ b/cc/test/layer_test_common.h
@@ -107,7 +107,7 @@
     void AppendQuadsWithOcclusion(LayerImpl* layer_impl,
                                   const gfx::Rect& occluded);
     void AppendQuadsForPassWithOcclusion(LayerImpl* layer_impl,
-                                         const RenderPassId& id,
+                                         RenderPass* given_render_pass,
                                          const gfx::Rect& occluded);
     void AppendSurfaceQuadsWithOcclusion(RenderSurfaceImpl* surface_impl,
                                          const gfx::Rect& occluded);
diff --git a/cc/test/layer_tree_pixel_resource_test.cc b/cc/test/layer_tree_pixel_resource_test.cc
index f9f0ea4..cf62d53 100644
--- a/cc/test/layer_tree_pixel_resource_test.cc
+++ b/cc/test/layer_tree_pixel_resource_test.cc
@@ -140,7 +140,7 @@
     case GPU_TILE_TASK_WORKER_POOL:
       EXPECT_TRUE(context_provider);
       return GpuRasterizer::Create(context_provider, resource_provider,
-                                   use_distance_field_text, false);
+                                   use_distance_field_text, false, 0);
   }
   NOTREACHED();
   return nullptr;
diff --git a/cc/test/layer_tree_test.cc b/cc/test/layer_tree_test.cc
index a40a8c7..d02b510 100644
--- a/cc/test/layer_tree_test.cc
+++ b/cc/test/layer_tree_test.cc
@@ -79,13 +79,14 @@
 
   ~ThreadProxyForTest() override {}
 
-  void test() {
-    test_hooks_->Layout();
-  }
-
  private:
   TestHooks* test_hooks_;
 
+  void WillBeginImplFrame(const BeginFrameArgs& args) override {
+    ThreadProxy::WillBeginImplFrame(args);
+    test_hooks_->WillBeginImplFrame(args);
+  }
+
   void ScheduledActionSendBeginMainFrame() override {
     test_hooks_->ScheduledActionWillSendBeginMainFrame();
     ThreadProxy::ScheduledActionSendBeginMainFrame();
@@ -130,6 +131,74 @@
         test_hooks_(test_hooks) {}
 };
 
+// Adapts ThreadProxy for test. Injects test hooks for testing.
+class SingleThreadProxyForTest : public SingleThreadProxy {
+ public:
+  static scoped_ptr<Proxy> Create(
+      TestHooks* test_hooks,
+      LayerTreeHost* host,
+      LayerTreeHostSingleThreadClient* client,
+      scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
+      scoped_ptr<BeginFrameSource> external_begin_frame_source) {
+    return make_scoped_ptr(new SingleThreadProxyForTest(
+        test_hooks, host, client, main_task_runner,
+        external_begin_frame_source.Pass()));
+  }
+
+  ~SingleThreadProxyForTest() override {}
+
+ private:
+  TestHooks* test_hooks_;
+
+  void WillBeginImplFrame(const BeginFrameArgs& args) override {
+    SingleThreadProxy::WillBeginImplFrame(args);
+    test_hooks_->WillBeginImplFrame(args);
+  }
+
+  void ScheduledActionSendBeginMainFrame() override {
+    test_hooks_->ScheduledActionWillSendBeginMainFrame();
+    SingleThreadProxy::ScheduledActionSendBeginMainFrame();
+    test_hooks_->ScheduledActionSendBeginMainFrame();
+  }
+
+  DrawResult ScheduledActionDrawAndSwapIfPossible() override {
+    DrawResult result =
+        SingleThreadProxy::ScheduledActionDrawAndSwapIfPossible();
+    test_hooks_->ScheduledActionDrawAndSwapIfPossible();
+    return result;
+  }
+
+  void ScheduledActionAnimate() override {
+    SingleThreadProxy::ScheduledActionAnimate();
+    test_hooks_->ScheduledActionAnimate();
+  }
+
+  void ScheduledActionCommit() override {
+    SingleThreadProxy::ScheduledActionCommit();
+    test_hooks_->ScheduledActionCommit();
+  }
+
+  void ScheduledActionBeginOutputSurfaceCreation() override {
+    SingleThreadProxy::ScheduledActionBeginOutputSurfaceCreation();
+    test_hooks_->ScheduledActionBeginOutputSurfaceCreation();
+  }
+
+  void ScheduledActionPrepareTiles() override {
+    SingleThreadProxy::ScheduledActionPrepareTiles();
+    test_hooks_->ScheduledActionPrepareTiles();
+  }
+
+  SingleThreadProxyForTest(
+      TestHooks* test_hooks,
+      LayerTreeHost* host,
+      LayerTreeHostSingleThreadClient* client,
+      scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
+      scoped_ptr<BeginFrameSource> external_begin_frame_source)
+      : SingleThreadProxy(host, client, main_task_runner,
+                          external_begin_frame_source.Pass()),
+        test_hooks_(test_hooks) {}
+};
+
 // Adapts LayerTreeHostImpl for test. Runs real code, then invokes test hooks.
 class LayerTreeHostImplForTesting : public LayerTreeHostImpl {
  public:
@@ -402,11 +471,13 @@
                                      impl_task_runner,
                                      external_begin_frame_source.Pass()));
     } else {
-      layer_tree_host->InitializeForTesting(SingleThreadProxy::Create(
-          layer_tree_host.get(),
-          client,
-          main_task_runner,
-          external_begin_frame_source.Pass()));
+      layer_tree_host->InitializeForTesting(
+          SingleThreadProxyForTest::Create(
+              test_hooks,
+              layer_tree_host.get(),
+              client,
+              main_task_runner,
+              external_begin_frame_source.Pass()));
     }
     return layer_tree_host.Pass();
   }
@@ -431,8 +502,6 @@
 
   void set_test_started(bool started) { test_started_ = started; }
 
-  void DidDeferCommit() override { test_hooks_->DidDeferCommit(); }
-
  private:
   LayerTreeHostForTesting(TestHooks* test_hooks,
                           LayerTreeHostClient* client,
@@ -524,6 +593,13 @@
                  1.0));
 }
 
+void LayerTreeTest::PostSetDeferCommitsToMainThread(bool defer_commits) {
+  main_task_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&LayerTreeTest::DispatchSetDeferCommits,
+                 main_thread_weak_ptr_, defer_commits));
+}
+
 void LayerTreeTest::PostSetNeedsCommitToMainThread() {
   main_task_runner_->PostTask(FROM_HERE,
                               base::Bind(&LayerTreeTest::DispatchSetNeedsCommit,
@@ -655,6 +731,13 @@
   }
 }
 
+void LayerTreeTest::DispatchSetDeferCommits(bool defer_commits) {
+  DCHECK(!proxy() || proxy()->IsMainThread());
+
+  if (layer_tree_host_)
+    layer_tree_host_->SetDeferCommits(defer_commits);
+}
+
 void LayerTreeTest::DispatchSetNeedsCommit() {
   DCHECK(!proxy() || proxy()->IsMainThread());
 
diff --git a/cc/test/layer_tree_test.h b/cc/test/layer_tree_test.h
index ba40e35..4abedd7 100644
--- a/cc/test/layer_tree_test.h
+++ b/cc/test/layer_tree_test.h
@@ -12,10 +12,6 @@
 #include "cc/trees/layer_tree_host_impl.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-namespace Webkit {
-class WebGraphicsContext3D;
-}
-
 namespace cc {
 class FakeExternalBeginFrameSource;
 class FakeLayerTreeHostClient;
@@ -88,13 +84,13 @@
   virtual void DidCommit() {}
   virtual void DidCommitAndDrawFrame() {}
   virtual void DidCompleteSwapBuffers() {}
-  virtual void DidDeferCommit() {}
   virtual void DidSetVisibleOnImplTree(LayerTreeHostImpl* host_impl,
                                        bool visible) {}
   virtual void ScheduleComposite() {}
   virtual void SendBeginFramesToChildren(const BeginFrameArgs& args) {}
 
   // Hooks for SchedulerClient.
+  virtual void WillBeginImplFrame(const BeginFrameArgs& args) {}
   virtual void ScheduledActionWillSendBeginMainFrame() {}
   virtual void ScheduledActionSendBeginMainFrame() {}
   virtual void ScheduledActionDrawAndSwapIfPossible() {}
@@ -141,6 +137,7 @@
   void PostAddAnimationToMainThread(Layer* layer_to_receive_animation);
   void PostAddInstantAnimationToMainThread(Layer* layer_to_receive_animation);
   void PostAddLongAnimationToMainThread(Layer* layer_to_receive_animation);
+  void PostSetDeferCommitsToMainThread(bool defer_commits);
   void PostSetNeedsCommitToMainThread();
   void PostSetNeedsUpdateLayersToMainThread();
   void PostSetNeedsRedrawToMainThread();
@@ -166,6 +163,7 @@
 
   virtual void DispatchAddAnimation(Layer* layer_to_receive_animation,
                                     double animation_duration);
+  void DispatchSetDeferCommits(bool defer_commits);
   void DispatchSetNeedsCommit();
   void DispatchSetNeedsUpdateLayers();
   void DispatchSetNeedsRedraw();
diff --git a/cc/test/ordered_simple_task_runner.cc b/cc/test/ordered_simple_task_runner.cc
index 9cad797..852396e 100644
--- a/cc/test/ordered_simple_task_runner.cc
+++ b/cc/test/ordered_simple_task_runner.cc
@@ -11,9 +11,9 @@
 #include <vector>
 
 #include "base/auto_reset.h"
-#include "base/debug/trace_event.h"
-#include "base/debug/trace_event_argument.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/trace_event/trace_event.h"
+#include "base/trace_event/trace_event_argument.h"
 
 #define TRACE_TASK(function, task) \
   TRACE_EVENT_INSTANT1(            \
diff --git a/cc/test/ordered_simple_task_runner.h b/cc/test/ordered_simple_task_runner.h
index 7f63113..b6e03ba 100644
--- a/cc/test/ordered_simple_task_runner.h
+++ b/cc/test/ordered_simple_task_runner.h
@@ -11,9 +11,9 @@
 
 #include "base/basictypes.h"
 #include "base/compiler_specific.h"
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "base/test/test_simple_task_runner.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/test/test_now_source.h"
 
 namespace cc {
diff --git a/cc/test/render_pass_test_common.cc b/cc/test/render_pass_test_common.cc
index 7237ce1..7c91f0d 100644
--- a/cc/test/render_pass_test_common.cc
+++ b/cc/test/render_pass_test_common.cc
@@ -252,16 +252,10 @@
   YUVVideoDrawQuad::ColorSpace color_space = YUVVideoDrawQuad::REC_601;
   YUVVideoDrawQuad* yuv_quad =
       this->CreateAndAppendDrawQuad<YUVVideoDrawQuad>();
-  yuv_quad->SetNew(shared_state2,
-                   rect,
-                   opaque_rect,
-                   visible_rect,
-                   gfx::RectF(0, 0, 100, 100),
-                   plane_resources[0],
-                   plane_resources[1],
-                   plane_resources[2],
-                   plane_resources[3],
-                   color_space);
+  yuv_quad->SetNew(shared_state2, rect, opaque_rect, visible_rect,
+                   gfx::RectF(0, 0, 100, 100), gfx::Size(100, 100),
+                   plane_resources[0], plane_resources[1], plane_resources[2],
+                   plane_resources[3], color_space);
 }
 
 }  // namespace cc
diff --git a/cc/test/test_now_source.h b/cc/test/test_now_source.h
index 178a56b..5538e89 100644
--- a/cc/test/test_now_source.h
+++ b/cc/test/test_now_source.h
@@ -8,9 +8,9 @@
 #include <string>
 
 #include "base/basictypes.h"
-#include "base/debug/trace_event.h"
-#include "base/debug/trace_event_argument.h"
 #include "base/logging.h"
+#include "base/trace_event/trace_event.h"
+#include "base/trace_event/trace_event_argument.h"
 
 namespace cc {
 
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc
index f91cce9..0f48cb2 100644
--- a/cc/trees/layer_tree_host.cc
+++ b/cc/trees/layer_tree_host.cc
@@ -11,12 +11,12 @@
 #include "base/atomic_sequence_num.h"
 #include "base/bind.h"
 #include "base/command_line.h"
-#include "base/debug/trace_event.h"
-#include "base/debug/trace_event_argument.h"
 #include "base/message_loop/message_loop.h"
 #include "base/metrics/histogram.h"
 #include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/trace_event/trace_event.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "cc/animation/animation_registrar.h"
 #include "cc/animation/layer_animation_controller.h"
 #include "cc/base/math_util.h"
@@ -480,8 +480,6 @@
   proxy_->SetDeferCommits(defer_commits);
 }
 
-void LayerTreeHost::DidDeferCommit() {}
-
 void LayerTreeHost::SetNeedsDisplayOnAllLayers() {
   std::stack<Layer*> layer_stack;
   layer_stack.push(root_layer());
diff --git a/cc/trees/layer_tree_host.h b/cc/trees/layer_tree_host.h
index 68bc1eb..7db722f 100644
--- a/cc/trees/layer_tree_host.h
+++ b/cc/trees/layer_tree_host.h
@@ -151,9 +151,6 @@
 
   void SetDeferCommits(bool defer_commits);
 
-  // Test only hook
-  virtual void DidDeferCommit();
-
   int source_frame_number() const { return source_frame_number_; }
 
   void SetNeedsDisplayOnAllLayers();
diff --git a/cc/trees/layer_tree_host_common.cc b/cc/trees/layer_tree_host_common.cc
index e12e272..f21ed3f 100644
--- a/cc/trees/layer_tree_host_common.cc
+++ b/cc/trees/layer_tree_host_common.cc
@@ -6,7 +6,7 @@
 
 #include <algorithm>
 
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/base/math_util.h"
 #include "cc/layers/heads_up_display_layer_impl.h"
 #include "cc/layers/layer.h"
@@ -46,19 +46,28 @@
 
 template <typename LayerType>
 static gfx::Vector2dF GetEffectiveScrollDelta(LayerType* layer) {
-  gfx::Vector2dF scroll_delta = layer->ScrollDelta();
+  // Layer's scroll offset can have an integer part and fractional part.
+  // Due to Blink's limitation, it only counter-scrolls the position-fixed
+  // layer using the integer part of Layer's scroll offset.
+  // CC scrolls the layer using the full scroll offset, so we have to
+  // add the ScrollCompensationAdjustment (fractional part of the scroll
+  // offset) to the effective scroll delta which is used to counter-scroll
+  // the position-fixed layer.
+  gfx::Vector2dF scroll_delta =
+      layer->ScrollDelta() + layer->ScrollCompensationAdjustment();
   // The scroll parent's scroll delta is the amount we've scrolled on the
   // compositor thread since the commit for this layer tree's source frame.
   // we last reported to the main thread. I.e., it's the discrepancy between
   // a scroll parent's scroll delta and offset, so we must add it here.
   if (layer->scroll_parent())
-    scroll_delta += layer->scroll_parent()->ScrollDelta();
+    scroll_delta += layer->scroll_parent()->ScrollDelta() +
+        layer->ScrollCompensationAdjustment();
   return scroll_delta;
 }
 
 template <typename LayerType>
-static gfx::ScrollOffset GetEffectiveTotalScrollOffset(LayerType* layer) {
-  gfx::ScrollOffset offset = layer->TotalScrollOffset();
+static gfx::ScrollOffset GetEffectiveCurrentScrollOffset(LayerType* layer) {
+  gfx::ScrollOffset offset = layer->CurrentScrollOffset();
   // The scroll parent's total scroll offset (scroll offset + scroll delta)
   // can't be used because its scroll offset has already been applied to the
   // scroll children's positions by the main thread layer positioning code.
@@ -1666,7 +1675,7 @@
         layer->parent()->screen_space_transform_is_animating();
   }
   gfx::Point3F transform_origin = layer->transform_origin();
-  gfx::ScrollOffset scroll_offset = GetEffectiveTotalScrollOffset(layer);
+  gfx::ScrollOffset scroll_offset = GetEffectiveCurrentScrollOffset(layer);
   gfx::PointF position =
       layer->position() - ScrollOffsetToVector2dF(scroll_offset);
   gfx::Transform combined_transform = data_from_ancestor.parent_matrix;
diff --git a/cc/trees/layer_tree_host_common_unittest.cc b/cc/trees/layer_tree_host_common_unittest.cc
index 238c3cb..df2b30e 100644
--- a/cc/trees/layer_tree_host_common_unittest.cc
+++ b/cc/trees/layer_tree_host_common_unittest.cc
@@ -34,6 +34,7 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/gfx/geometry/quad_f.h"
+#include "ui/gfx/geometry/vector2d_conversions.h"
 #include "ui/gfx/transform.h"
 
 namespace cc {
@@ -347,7 +348,7 @@
   scroll_layer->AddChild(sublayer_scoped_ptr.Pass());
   LayerImpl* scroll_layer_raw_ptr = scroll_layer_scoped_ptr.get();
   clip_layer->AddChild(scroll_layer_scoped_ptr.Pass());
-  scroll_layer_raw_ptr->SetScrollOffset(kScrollOffset);
+  scroll_layer_raw_ptr->PushScrollOffsetFromMainThread(kScrollOffset);
 
   scoped_ptr<LayerImpl> root(LayerImpl::Create(host_impl.active_tree(), 3));
   SetLayerPropertiesForTesting(root.get(), identity_matrix, gfx::Point3F(),
@@ -7763,6 +7764,90 @@
   }
 }
 
+TEST_F(LayerTreeHostCommonTest,
+       ScrollCompensationMainScrollOffsetFractionalPart) {
+  // This test verifies that a scrolling layer that has fractional scroll offset
+  // from main doesn't move a fixed position child.
+  //
+  // + root
+  //   + container
+  //     + scroller
+  //       + fixed
+  //
+  FakeImplProxy proxy;
+  TestSharedBitmapManager shared_bitmap_manager;
+  FakeLayerTreeHostImpl host_impl(&proxy, &shared_bitmap_manager);
+  host_impl.CreatePendingTree();
+  scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl.active_tree(), 1);
+  scoped_ptr<LayerImpl> container =
+      LayerImpl::Create(host_impl.active_tree(), 2);
+  LayerImpl* container_layer = container.get();
+  scoped_ptr<LayerImpl> scroller =
+      LayerImpl::Create(host_impl.active_tree(), 3);
+  LayerImpl* scroll_layer = scroller.get();
+  scoped_ptr<LayerImpl> fixed = LayerImpl::Create(host_impl.active_tree(), 4);
+  LayerImpl* fixed_layer = fixed.get();
+
+  container->SetIsContainerForFixedPositionLayers(true);
+
+  LayerPositionConstraint constraint;
+  constraint.set_is_fixed_position(true);
+  fixed->SetPositionConstraint(constraint);
+
+  scroller->SetScrollClipLayer(container->id());
+
+  gfx::Transform identity_transform;
+  gfx::Transform container_transform;
+  container_transform.Translate3d(10.0, 20.0, 0.0);
+  gfx::Vector2dF container_offset = container_transform.To2dTranslation();
+
+  SetLayerPropertiesForTesting(root.get(), identity_transform, gfx::Point3F(),
+                               gfx::PointF(), gfx::Size(50, 50), true, false,
+                               true);
+  SetLayerPropertiesForTesting(container.get(), container_transform,
+                               gfx::Point3F(), gfx::PointF(), gfx::Size(40, 40),
+                               true, false, false);
+  SetLayerPropertiesForTesting(scroller.get(), identity_transform,
+                               gfx::Point3F(), gfx::PointF(0.0, 0.0),
+                               gfx::Size(30, 30), true, false, false);
+
+  gfx::ScrollOffset scroll_offset(3.3, 4.2);
+  gfx::Vector2dF main_scroll_fractional_part(0.3f, 0.2f);
+  gfx::Vector2dF scroll_delta(0.1f, 0.4f);
+  // Blink only uses the integer part of the scroll_offset for fixed
+  // position layer.
+  SetLayerPropertiesForTesting(fixed.get(), identity_transform, gfx::Point3F(),
+                               gfx::PointF(3.0f, 4.0f), gfx::Size(50, 50), true,
+                               false, false);
+  scroll_layer->PushScrollOffsetFromMainThread(scroll_offset);
+  scroll_layer->SetScrollDelta(scroll_delta);
+  scroll_layer->SetScrollCompensationAdjustment(main_scroll_fractional_part);
+
+  scroller->AddChild(fixed.Pass());
+  container->AddChild(scroller.Pass());
+  root->AddChild(container.Pass());
+
+  LayerImplList render_surface_layer_list;
+  LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs(
+      root.get(), root->bounds(), &render_surface_layer_list);
+  LayerTreeHostCommon::CalculateDrawProperties(&inputs);
+
+  EXPECT_TRANSFORMATION_MATRIX_EQ(
+      container_layer->draw_properties().screen_space_transform,
+      fixed_layer->draw_properties().screen_space_transform);
+  EXPECT_VECTOR_EQ(
+      fixed_layer->draw_properties().screen_space_transform.To2dTranslation(),
+      container_offset);
+
+  gfx::ScrollOffset effective_scroll_offset =
+      ScrollOffsetWithDelta(scroll_offset, scroll_delta);
+  gfx::Vector2d rounded_effective_scroll_offset =
+      ToRoundedVector2d(ScrollOffsetToVector2dF(effective_scroll_offset));
+  EXPECT_VECTOR_EQ(
+      scroll_layer->draw_properties().screen_space_transform.To2dTranslation(),
+      container_offset - rounded_effective_scroll_offset);
+}
+
 class AnimationScaleFactorTrackingLayerImpl : public LayerImpl {
  public:
   static scoped_ptr<AnimationScaleFactorTrackingLayerImpl> Create(
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 3d31e8e..398ef81 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -9,11 +9,11 @@
 
 #include "base/basictypes.h"
 #include "base/containers/hash_tables.h"
-#include "base/debug/trace_event_argument.h"
 #include "base/json/json_writer.h"
 #include "base/metrics/histogram.h"
 #include "base/stl_util.h"
 #include "base/strings/stringprintf.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "cc/animation/animation_id_provider.h"
 #include "cc/animation/scroll_offset_animation_curve.h"
 #include "cc/animation/scrollbar_animation_controller.h"
@@ -88,10 +88,10 @@
   ViewportAnchor(LayerImpl* inner_scroll, LayerImpl* outer_scroll)
   : inner_(inner_scroll),
     outer_(outer_scroll) {
-    viewport_in_content_coordinates_ = inner_->TotalScrollOffset();
+    viewport_in_content_coordinates_ = inner_->CurrentScrollOffset();
 
     if (outer_)
-      viewport_in_content_coordinates_ += outer_->TotalScrollOffset();
+      viewport_in_content_coordinates_ += outer_->CurrentScrollOffset();
   }
 
   void ResetViewportToAnchoredPosition() {
@@ -100,8 +100,8 @@
     inner_->ClampScrollToMaxScrollOffset();
     outer_->ClampScrollToMaxScrollOffset();
 
-    gfx::ScrollOffset viewport_location = inner_->TotalScrollOffset() +
-                                          outer_->TotalScrollOffset();
+    gfx::ScrollOffset viewport_location =
+        inner_->CurrentScrollOffset() + outer_->CurrentScrollOffset();
 
     gfx::Vector2dF delta =
         viewport_in_content_coordinates_.DeltaFrom(viewport_location);
@@ -229,7 +229,7 @@
       gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
       id_(id),
       requires_high_res_to_draw_(false),
-      required_for_draw_tile_is_top_of_raster_queue_(false) {
+      is_likely_to_require_a_draw_(false) {
   DCHECK(proxy_->IsImplThread());
   DidVisibilityChange(this, visible_);
   animation_registrar_->set_supports_scroll_animations(
@@ -305,8 +305,6 @@
 void LayerTreeHostImpl::CommitComplete() {
   TRACE_EVENT0("cc", "LayerTreeHostImpl::CommitComplete");
 
-  if (pending_tree_)
-    pending_tree_->ApplyScrollDeltasSinceBeginMainFrame();
   sync_tree()->set_needs_update_draw_properties();
 
   if (settings_.impl_side_painting) {
@@ -459,6 +457,18 @@
   return CurrentlyScrollingLayer() == scrolling_layer_impl;
 }
 
+bool LayerTreeHostImpl::HaveWheelEventHandlersAt(
+    const gfx::Point& viewport_point) {
+  gfx::PointF device_viewport_point =
+      gfx::ScalePoint(viewport_point, device_scale_factor_);
+
+  LayerImpl* layer_impl =
+      active_tree_->FindLayerWithWheelHandlerThatIsHitByPoint(
+          device_viewport_point);
+
+  return layer_impl != NULL;
+}
+
 bool LayerTreeHostImpl::HaveTouchEventHandlersAt(
     const gfx::Point& viewport_point) {
 
@@ -752,7 +762,7 @@
 
     occlusion_tracker.EnterLayer(it);
 
-    AppendQuadsData append_quads_data(target_render_pass_id);
+    AppendQuadsData append_quads_data;
 
     if (it.represents_target_render_surface()) {
       if (it->HasCopyRequest()) {
@@ -789,7 +799,6 @@
             RenderPass* render_pass =
                 frame->render_passes_by_id[contributing_render_pass_id];
 
-            AppendQuadsData append_quads_data(render_pass->id);
             AppendQuadsForLayer(render_pass,
                                 *it,
                                 occlusion_tracker,
@@ -1200,23 +1209,8 @@
   TRACE_EVENT0("cc", "LayerTreeHostImpl::BuildRasterQueue");
   picture_layer_pairs_.clear();
   GetPictureLayerImplPairs(&picture_layer_pairs_, true);
-  scoped_ptr<RasterTilePriorityQueue> queue(RasterTilePriorityQueue::Create(
-      picture_layer_pairs_, tree_priority, type));
-
-  if (!queue->IsEmpty()) {
-    // Only checking the Top() tile here isn't a definite answer that there is
-    // or isn't something required for draw in this raster queue. It's just a
-    // heuristic to let us hit the common case and proactively tell the
-    // scheduler that we expect to draw within each vsync until we get all the
-    // tiles ready to draw. If we happen to miss a required for draw tile here,
-    // then we will miss telling the scheduler each frame that we intend to draw
-    // so it may make worse scheduling decisions.
-    required_for_draw_tile_is_top_of_raster_queue_ =
-        queue->Top()->required_for_draw();
-  } else {
-    required_for_draw_tile_is_top_of_raster_queue_ = false;
-  }
-  return queue;
+  return RasterTilePriorityQueue::Create(picture_layer_pairs_, tree_priority,
+                                         type);
 }
 
 scoped_ptr<EvictionTilePriorityQueue> LayerTreeHostImpl::BuildEvictionQueue(
@@ -1229,6 +1223,15 @@
   return queue;
 }
 
+void LayerTreeHostImpl::SetIsLikelyToRequireADraw(
+    bool is_likely_to_require_a_draw) {
+  // Proactively tell the scheduler that we expect to draw within each vsync
+  // until we get all the tiles ready to draw. If we happen to miss a required
+  // for draw tile here, then we will miss telling the scheduler each frame that
+  // we intend to draw so it may make worse scheduling decisions.
+  is_likely_to_require_a_draw_ = is_likely_to_require_a_draw;
+}
+
 const std::vector<PictureLayerImpl*>& LayerTreeHostImpl::GetPictureLayers()
     const {
   return picture_layers_;
@@ -1242,7 +1245,7 @@
   // Tiles that are ready will cause NotifyTileStateChanged() to be called so we
   // don't need to schedule a draw here. Just stop WillBeginImplFrame() from
   // causing optimistic requests to draw a frame.
-  required_for_draw_tile_is_top_of_raster_queue_ = false;
+  is_likely_to_require_a_draw_ = false;
 
   client_->NotifyReadyToDraw();
 }
@@ -1612,10 +1615,10 @@
   // Cache the begin impl frame interval
   begin_impl_frame_interval_ = args.interval;
 
-  if (required_for_draw_tile_is_top_of_raster_queue_) {
-    // Optimistically schedule a draw, as a tile required for draw is at the top
-    // of the current raster queue. This will let us expect the tile to complete
-    // and draw it within the impl frame we are beginning now.
+  if (is_likely_to_require_a_draw_) {
+    // Optimistically schedule a draw. This will let us expect the tile manager
+    // to complete its work so that we can draw new tiles within the impl frame
+    // we are beginning now.
     SetNeedsRedraw();
   }
 }
@@ -1956,7 +1959,8 @@
   ContextProvider* context_provider = output_surface_->context_provider();
   if (use_gpu_rasterization_ && context_provider) {
     return GpuRasterizer::Create(context_provider, resource_provider_.get(),
-                                 settings_.use_distance_field_text, false);
+                                 settings_.use_distance_field_text, false,
+                                 settings_.gpu_rasterization_msaa_sample_count);
   }
   return SoftwareRasterizer::Create();
 }
@@ -2401,7 +2405,7 @@
       if (!layer_impl->scrollable())
         continue;
 
-      gfx::ScrollOffset current_offset = layer_impl->TotalScrollOffset();
+      gfx::ScrollOffset current_offset = layer_impl->CurrentScrollOffset();
       gfx::ScrollOffset target_offset =
           ScrollOffsetWithDelta(current_offset, pending_delta);
       target_offset.SetToMax(gfx::ScrollOffset());
@@ -2491,14 +2495,15 @@
   local_end_point.Scale(width_scale, height_scale);
 
   // Apply the scroll delta.
-  gfx::Vector2dF previous_delta = layer_impl->ScrollDelta();
+  gfx::ScrollOffset previous_offset = layer_impl->CurrentScrollOffset();
   layer_impl->ScrollBy(local_end_point - local_start_point);
+  gfx::ScrollOffset scrolled =
+      layer_impl->CurrentScrollOffset() - previous_offset;
 
   // Get the end point in the layer's content space so we can apply its
   // ScreenSpaceTransform.
-  gfx::PointF actual_local_end_point = local_start_point +
-                                       layer_impl->ScrollDelta() -
-                                       previous_delta;
+  gfx::PointF actual_local_end_point =
+      local_start_point + gfx::Vector2dF(scrolled.x(), scrolled.y());
   gfx::PointF actual_local_content_end_point =
       gfx::ScalePoint(actual_local_end_point,
                       1.f / width_scale,
@@ -2522,11 +2527,13 @@
     LayerImpl* layer_impl,
     const gfx::Vector2dF& local_delta,
     float page_scale_factor) {
-  gfx::Vector2dF previous_delta(layer_impl->ScrollDelta());
+  gfx::ScrollOffset previous_offset = layer_impl->CurrentScrollOffset();
   gfx::Vector2dF delta = local_delta;
   delta.Scale(1.f / page_scale_factor);
   layer_impl->ScrollBy(delta);
-  return layer_impl->ScrollDelta() - previous_delta;
+  gfx::ScrollOffset scrolled =
+      layer_impl->CurrentScrollOffset() - previous_offset;
+  return gfx::Vector2dF(scrolled.x(), scrolled.y());
 }
 
 bool LayerTreeHostImpl::ShouldTopControlsConsumeScroll(
@@ -2976,14 +2983,13 @@
   if (!layer_impl)
     return;
 
-  gfx::Vector2d scroll_delta =
-      gfx::ToFlooredVector2d(layer_impl->ScrollDelta());
+  gfx::ScrollOffset scroll_delta = layer_impl->PullDeltaForMainThread();
+
   if (!scroll_delta.IsZero()) {
     LayerTreeHostCommon::ScrollUpdateInfo scroll;
     scroll.layer_id = layer_impl->id();
-    scroll.scroll_delta = scroll_delta;
+    scroll.scroll_delta = gfx::Vector2d(scroll_delta.x(), scroll_delta.y());
     scroll_info->scrolls.push_back(scroll);
-    layer_impl->SetSentScrollDelta(scroll_delta);
   }
 
   for (size_t i = 0; i < layer_impl->children().size(); ++i)
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h
index 0765bb7..eb84c54 100644
--- a/cc/trees/layer_tree_host_impl.h
+++ b/cc/trees/layer_tree_host_impl.h
@@ -166,6 +166,7 @@
   void SetNeedsAnimate() override;
   bool IsCurrentlyScrollingLayerAt(const gfx::Point& viewport_point,
                                    InputHandler::ScrollInputType type) override;
+  bool HaveWheelEventHandlersAt(const gfx::Point& viewport_point) override;
   bool HaveTouchEventHandlersAt(const gfx::Point& viewport_port) override;
   scoped_ptr<SwapPromiseMonitor> CreateLatencyInfoSwapPromiseMonitor(
       ui::LatencyInfo* latency) override;
@@ -241,7 +242,6 @@
   void SetFullRootLayerDamage() override;
 
   // TileManagerClient implementation.
-  const std::vector<PictureLayerImpl*>& GetPictureLayers() const override;
   void NotifyReadyToActivate() override;
   void NotifyReadyToDraw() override;
   void NotifyTileStateChanged(const Tile* tile) override;
@@ -250,6 +250,11 @@
       RasterTilePriorityQueue::Type type) override;
   scoped_ptr<EvictionTilePriorityQueue> BuildEvictionQueue(
       TreePriority tree_priority) override;
+  void SetIsLikelyToRequireADraw(bool is_likely_to_require_a_draw) override;
+
+  // Returns existing picture layers.
+  // TODO(vmpstr): Remove this, it's only used in tests.
+  const std::vector<PictureLayerImpl*>& GetPictureLayers() const;
 
   // ScrollbarAnimationControllerClient implementation.
   void PostDelayedScrollbarFade(const base::Closure& start_fade,
@@ -725,7 +730,7 @@
   std::vector<PictureLayerImpl::Pair> picture_layer_pairs_;
 
   bool requires_high_res_to_draw_;
-  bool required_for_draw_tile_is_top_of_raster_queue_;
+  bool is_likely_to_require_a_draw_;
 
   DISALLOW_COPY_AND_ASSIGN(LayerTreeHostImpl);
 };
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
index 7804f22..b016fff 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -233,7 +233,7 @@
         LayerImpl::Create(layer_tree_impl, kInnerViewportScrollLayerId);
     LayerImpl* scroll_layer = scroll.get();
     scroll->SetIsContainerForFixedPositionLayers(true);
-    scroll->SetScrollOffset(gfx::ScrollOffset());
+    scroll->PushScrollOffsetFromMainThread(gfx::ScrollOffset());
 
     scoped_ptr<LayerImpl> clip =
         LayerImpl::Create(layer_tree_impl, kInnerViewportClipLayerId);
@@ -468,7 +468,7 @@
     root_clip->AddChild(root.Pass());
     root_layer->SetBounds(gfx::Size(110, 110));
     root_layer->SetScrollClipLayer(root_clip->id());
-    root_layer->SetScrollOffset(scroll_offset);
+    root_layer->PushScrollOffsetFromMainThread(scroll_offset);
     root_layer->ScrollBy(scroll_delta);
     host_impl_->active_tree()->SetRootLayer(root_clip.Pass());
   }
@@ -478,19 +478,17 @@
 
   scroll_info = host_impl_->ProcessScrollDeltas();
   ASSERT_EQ(scroll_info->scrolls.size(), 1u);
-  EXPECT_VECTOR_EQ(root->sent_scroll_delta(), scroll_delta);
   ExpectContains(*scroll_info, root->id(), scroll_delta);
 
   gfx::Vector2d scroll_delta2(-5, 27);
   root->ScrollBy(scroll_delta2);
   scroll_info = host_impl_->ProcessScrollDeltas();
   ASSERT_EQ(scroll_info->scrolls.size(), 1u);
-  EXPECT_VECTOR_EQ(root->sent_scroll_delta(), scroll_delta + scroll_delta2);
   ExpectContains(*scroll_info, root->id(), scroll_delta + scroll_delta2);
 
   root->ScrollBy(gfx::Vector2d());
   scroll_info = host_impl_->ProcessScrollDeltas();
-  EXPECT_EQ(root->sent_scroll_delta(), scroll_delta + scroll_delta2);
+  ExpectContains(*scroll_info, root->id(), scroll_delta + scroll_delta2);
 }
 
 TEST_F(LayerTreeHostImplTest, ScrollRootCallsCommitAndRedraw) {
@@ -843,7 +841,7 @@
   overflow->SetBounds(overflow_size);
   overflow->SetContentBounds(overflow_size);
   overflow->SetScrollClipLayer(scroll_layer->parent()->id());
-  overflow->SetScrollOffset(gfx::ScrollOffset());
+  overflow->PushScrollOffsetFromMainThread(gfx::ScrollOffset());
   overflow->SetPosition(gfx::PointF());
 
   DrawFrame();
@@ -851,38 +849,38 @@
 
   EXPECT_EQ(InputHandler::ScrollStarted,
             host_impl_->ScrollBegin(scroll_position, InputHandler::Wheel));
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(), scroll_layer->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(), overflow->TotalScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(), scroll_layer->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(), overflow->CurrentScrollOffset());
 
   gfx::Vector2dF scroll_delta(10, 10);
   host_impl_->ScrollBy(scroll_position, scroll_delta);
   host_impl_->ScrollEnd();
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(), scroll_layer->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 10), overflow->TotalScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(), scroll_layer->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 10), overflow->CurrentScrollOffset());
 
   overflow->set_user_scrollable_horizontal(false);
 
   EXPECT_EQ(InputHandler::ScrollStarted,
             host_impl_->ScrollBegin(scroll_position, InputHandler::Wheel));
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(), scroll_layer->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 10), overflow->TotalScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(), scroll_layer->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 10), overflow->CurrentScrollOffset());
 
   host_impl_->ScrollBy(scroll_position, scroll_delta);
   host_impl_->ScrollEnd();
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 0), scroll_layer->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 20), overflow->TotalScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 0), scroll_layer->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 20), overflow->CurrentScrollOffset());
 
   overflow->set_user_scrollable_vertical(false);
 
   EXPECT_EQ(InputHandler::ScrollStarted,
             host_impl_->ScrollBegin(scroll_position, InputHandler::Wheel));
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 0), scroll_layer->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 20), overflow->TotalScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 0), scroll_layer->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 20), overflow->CurrentScrollOffset());
 
   host_impl_->ScrollBy(scroll_position, scroll_delta);
   host_impl_->ScrollEnd();
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(20, 10), scroll_layer->TotalScrollOffset());
-  EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 20), overflow->TotalScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(20, 10), scroll_layer->CurrentScrollOffset());
+  EXPECT_VECTOR_EQ(gfx::Vector2dF(10, 20), overflow->CurrentScrollOffset());
 }
 
 TEST_F(LayerTreeHostImplTest, ImplPinchZoom) {
@@ -1026,7 +1024,8 @@
     host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
                                                            max_page_scale);
     scroll_layer->SetScrollDelta(gfx::Vector2d());
-    scroll_layer->SetScrollOffset(gfx::ScrollOffset(50, 50));
+    scroll_layer->PullDeltaForMainThread();
+    scroll_layer->PushScrollOffsetFromMainThread(gfx::ScrollOffset(50, 50));
 
     float page_scale_delta = 0.1f;
     host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture);
@@ -1047,7 +1046,8 @@
     host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
                                                            max_page_scale);
     scroll_layer->SetScrollDelta(gfx::Vector2d());
-    scroll_layer->SetScrollOffset(gfx::ScrollOffset(20, 20));
+    scroll_layer->PullDeltaForMainThread();
+    scroll_layer->PushScrollOffsetFromMainThread(gfx::ScrollOffset(20, 20));
 
     float page_scale_delta = 1.f;
     host_impl_->ScrollBegin(gfx::Point(10, 10), InputHandler::Gesture);
@@ -1068,7 +1068,8 @@
     host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
                                                            max_page_scale);
     scroll_layer->SetScrollDelta(gfx::Vector2d());
-    scroll_layer->SetScrollOffset(gfx::ScrollOffset(20, 20));
+    scroll_layer->PullDeltaForMainThread();
+    scroll_layer->PushScrollOffsetFromMainThread(gfx::ScrollOffset(20, 20));
 
     float page_scale_delta = 1.f;
     host_impl_->ScrollBegin(gfx::Point(10, 10), InputHandler::Gesture);
@@ -1089,7 +1090,8 @@
   {
     host_impl_->active_tree()->PushPageScaleFromMainThread(0.5f, 0.5f, 4.f);
     scroll_layer->SetScrollDelta(gfx::Vector2d());
-    scroll_layer->SetScrollOffset(gfx::ScrollOffset(0, 0));
+    scroll_layer->PullDeltaForMainThread();
+    scroll_layer->PushScrollOffsetFromMainThread(gfx::ScrollOffset(0, 0));
 
     host_impl_->ScrollBegin(gfx::Point(0, 0), InputHandler::Gesture);
     host_impl_->PinchGestureBegin();
@@ -1127,7 +1129,7 @@
   {
     host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
                                                            max_page_scale);
-    scroll_layer->SetScrollOffset(gfx::ScrollOffset(50, 50));
+    scroll_layer->PushScrollOffsetFromMainThread(gfx::ScrollOffset(50, 50));
 
     did_request_redraw_ = false;
     did_request_animate_ = false;
@@ -1170,7 +1172,7 @@
   {
     host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
                                                            max_page_scale);
-    scroll_layer->SetScrollOffset(gfx::ScrollOffset(50, 50));
+    scroll_layer->PushScrollOffsetFromMainThread(gfx::ScrollOffset(50, 50));
 
     did_request_redraw_ = false;
     did_request_animate_ = false;
@@ -1226,7 +1228,7 @@
   {
     host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
                                                            max_page_scale);
-    scroll_layer->SetScrollOffset(gfx::ScrollOffset(50, 50));
+    scroll_layer->PushScrollOffsetFromMainThread(gfx::ScrollOffset(50, 50));
 
     host_impl_->active_tree()->SetPendingPageScaleAnimation(
         scoped_ptr<PendingPageScaleAnimation>(new PendingPageScaleAnimation(
@@ -1273,7 +1275,7 @@
   base::TimeTicks end_time = start_time + duration;
   float target_scale = 2.f;
 
-  scroll_layer->SetScrollOffset(gfx::ScrollOffset(50, 50));
+  scroll_layer->PushScrollOffsetFromMainThread(gfx::ScrollOffset(50, 50));
 
   // Make sure TakePageScaleAnimation works properly.
 
@@ -1361,7 +1363,7 @@
   base::TimeTicks end_time = start_time + duration;
 
   host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 0.5f, 4.f);
-  scroll_layer->SetScrollOffset(gfx::ScrollOffset(50, 50));
+  scroll_layer->PushScrollOffsetFromMainThread(gfx::ScrollOffset(50, 50));
 
   did_complete_page_scale_animation_ = false;
   host_impl_->active_tree()->SetPendingPageScaleAnimation(
@@ -1426,7 +1428,7 @@
   scoped_ptr<LayerImpl> scroll =                                               \
       LayerImpl::Create(host_impl_->active_tree(), 2);                         \
   scroll->SetScrollClipLayer(root->id());                                      \
-  scroll->SetScrollOffset(gfx::ScrollOffset());                                \
+  scroll->PushScrollOffsetFromMainThread(gfx::ScrollOffset());                 \
   root->SetBounds(viewport_size);                                              \
   scroll->SetBounds(content_size);                                             \
   scroll->SetContentBounds(content_size);                                      \
@@ -1498,7 +1500,7 @@
 
   // Setting the scroll offset outside a scroll should also cause the scrollbar
   // to appear and to schedule a fade.
-  host_impl_->InnerViewportScrollLayer()->SetScrollOffset(
+  host_impl_->InnerViewportScrollLayer()->PushScrollOffsetFromMainThread(
       gfx::ScrollOffset(5, 5));
   EXPECT_LT(base::TimeDelta::FromMilliseconds(19),
             requested_scrollbar_animation_delay_);
@@ -1595,7 +1597,7 @@
   scoped_ptr<LayerImpl> scroll =
       LayerImpl::Create(host_impl_->active_tree(), 2);
   scroll->SetScrollClipLayer(root->id());
-  scroll->SetScrollOffset(gfx::ScrollOffset());
+  scroll->PushScrollOffsetFromMainThread(gfx::ScrollOffset());
   scroll->SetBounds(content_size);
   scroll->SetContentBounds(content_size);
   scroll->SetIsContainerForFixedPositionLayers(true);
@@ -2475,14 +2477,14 @@
   // The viewport layers should be resized back to their full sizes.
   EXPECT_EQ(0.f,
       host_impl_->active_tree()->total_top_controls_content_offset());
-  EXPECT_EQ(0.f, inner_scroll->TotalScrollOffset().y());
+  EXPECT_EQ(0.f, inner_scroll->CurrentScrollOffset().y());
   EXPECT_EQ(100.f, inner_container->BoundsForScrolling().height());
   EXPECT_EQ(100.f, outer_container->BoundsForScrolling().height());
 
   // The inner viewport should be scrollable by 50px * page_scale.
   host_impl_->ScrollBy(gfx::Point(), gfx::Vector2dF(0.f, 100.f));
-  EXPECT_EQ(50.f, inner_scroll->TotalScrollOffset().y());
-  EXPECT_EQ(0.f, outer_scroll->TotalScrollOffset().y());
+  EXPECT_EQ(50.f, inner_scroll->CurrentScrollOffset().y());
+  EXPECT_EQ(0.f, outer_scroll->CurrentScrollOffset().y());
   EXPECT_EQ(gfx::ScrollOffset(), outer_scroll->MaxScrollOffset());
 
   host_impl_->ScrollEnd();
@@ -2500,24 +2502,24 @@
       host_impl_->active_tree()->total_top_controls_content_offset());
   EXPECT_EQ(50.f, outer_container->BoundsForScrolling().height());
   EXPECT_EQ(50.f, inner_container->BoundsForScrolling().height());
-  EXPECT_EQ(25.f, outer_scroll->TotalScrollOffset().y());
-  EXPECT_EQ(25.f, inner_scroll->TotalScrollOffset().y());
+  EXPECT_EQ(25.f, outer_scroll->CurrentScrollOffset().y());
+  EXPECT_EQ(25.f, inner_scroll->CurrentScrollOffset().y());
 
   // Now when we continue scrolling, make sure the outer viewport gets scrolled
   // since it wasn't scrollable when the scroll began.
   host_impl_->ScrollBy(gfx::Point(), gfx::Vector2dF(0.f, -20.f));
-  EXPECT_EQ(15.f, outer_scroll->TotalScrollOffset().y());
-  EXPECT_EQ(25.f, inner_scroll->TotalScrollOffset().y());
+  EXPECT_EQ(15.f, outer_scroll->CurrentScrollOffset().y());
+  EXPECT_EQ(25.f, inner_scroll->CurrentScrollOffset().y());
 
   host_impl_->ScrollBy(gfx::Point(), gfx::Vector2dF(0.f, -30.f));
-  EXPECT_EQ(0.f, outer_scroll->TotalScrollOffset().y());
-  EXPECT_EQ(25.f, inner_scroll->TotalScrollOffset().y());
+  EXPECT_EQ(0.f, outer_scroll->CurrentScrollOffset().y());
+  EXPECT_EQ(25.f, inner_scroll->CurrentScrollOffset().y());
 
   host_impl_->ScrollBy(gfx::Point(), gfx::Vector2dF(0.f, -50.f));
   host_impl_->ScrollEnd();
 
-  EXPECT_EQ(0.f, outer_scroll->TotalScrollOffset().y());
-  EXPECT_EQ(0.f, inner_scroll->TotalScrollOffset().y());
+  EXPECT_EQ(0.f, outer_scroll->CurrentScrollOffset().y());
+  EXPECT_EQ(0.f, inner_scroll->CurrentScrollOffset().y());
 }
 
 // Test that the fixed position container delta is appropriately adjusted
@@ -3304,8 +3306,8 @@
   host_impl_->active_tree()->SetRootLayer(root.Pass());
   host_impl_->active_tree()->DidBecomeActive();
   host_impl_->SetViewportSize(surface_size);
-  grand_child_layer->SetScrollOffset(gfx::ScrollOffset(0, 5));
-  child_layer->SetScrollOffset(gfx::ScrollOffset(3, 0));
+  grand_child_layer->PushScrollOffsetFromMainThread(gfx::ScrollOffset(0, 5));
+  child_layer->PushScrollOffsetFromMainThread(gfx::ScrollOffset(3, 0));
 
   DrawFrame();
   {
@@ -3358,8 +3360,8 @@
   host_impl_->active_tree()->DidBecomeActive();
   host_impl_->SetViewportSize(viewport_size);
 
-  grand_child_layer->SetScrollOffset(gfx::ScrollOffset(0, 2));
-  child_layer->SetScrollOffset(gfx::ScrollOffset(0, 3));
+  grand_child_layer->PushScrollOffsetFromMainThread(gfx::ScrollOffset(0, 2));
+  child_layer->PushScrollOffsetFromMainThread(gfx::ScrollOffset(0, 3));
 
   DrawFrame();
   {
@@ -3736,6 +3738,8 @@
     page_scale_factor_ = page_scale_factor;
     min_page_scale_factor_ = min_page_scale_factor;
     max_page_scale_factor_ = max_page_scale_factor;
+
+    set_getter_return_value(last_set_scroll_offset_);
   }
 
   gfx::ScrollOffset last_set_scroll_offset() {
@@ -3785,7 +3789,7 @@
 
   // Setting the delegate results in the current scroll offset being set.
   gfx::Vector2dF initial_scroll_delta(10.f, 10.f);
-  scroll_layer->SetScrollOffset(gfx::ScrollOffset());
+  scroll_layer->PushScrollOffsetFromMainThread(gfx::ScrollOffset());
   scroll_layer->SetScrollDelta(initial_scroll_delta);
   host_impl_->SetRootLayerScrollOffsetDelegate(&scroll_delegate);
   EXPECT_EQ(initial_scroll_delta.ToString(),
@@ -3859,7 +3863,7 @@
   host_impl_->SetRootLayerScrollOffsetDelegate(NULL);
 
   EXPECT_EQ(current_offset.ToString(),
-            scroll_layer->TotalScrollOffset().ToString());
+            scroll_layer->CurrentScrollOffset().ToString());
 }
 
 void CheckLayerScrollDelta(LayerImpl* layer, gfx::Vector2dF scroll_delta) {
@@ -4038,8 +4042,8 @@
   LayerImpl* child_layer = child.get();
   root->AddChild(child.Pass());
   root_clip->AddChild(root.Pass());
-  child_layer->SetScrollOffset(gfx::ScrollOffset(0, 3));
-  grand_child_layer->SetScrollOffset(gfx::ScrollOffset(0, 2));
+  child_layer->PushScrollOffsetFromMainThread(gfx::ScrollOffset(0, 3));
+  grand_child_layer->PushScrollOffsetFromMainThread(gfx::ScrollOffset(0, 2));
   host_impl_->active_tree()->SetRootLayer(root_clip.Pass());
   host_impl_->active_tree()->DidBecomeActive();
   host_impl_->SetViewportSize(surface_size);
@@ -6251,7 +6255,7 @@
 
   gfx::ScrollOffset scroll_offset(100000, 0);
   scrolling_layer->SetScrollClipLayer(root->id());
-  scrolling_layer->SetScrollOffset(scroll_offset);
+  scrolling_layer->PushScrollOffsetFromMainThread(scroll_offset);
 
   host_impl_->ActivateSyncTree();
 
@@ -6769,11 +6773,11 @@
 
   scoped_ptr<LayerImpl> grand_child =
       CreateScrollableLayer(4, surface_size, root.get());
-  grand_child->SetScrollOffset(gfx::ScrollOffset(0, 2));
+  grand_child->PushScrollOffsetFromMainThread(gfx::ScrollOffset(0, 2));
 
   scoped_ptr<LayerImpl> child =
       CreateScrollableLayer(3, surface_size, root.get());
-  child->SetScrollOffset(gfx::ScrollOffset(0, 4));
+  child->PushScrollOffsetFromMainThread(gfx::ScrollOffset(0, 4));
   child->AddChild(grand_child.Pass());
 
   root_scrolling->AddChild(child.Pass());
@@ -7265,7 +7269,7 @@
 
 TEST_F(LayerTreeHostImplWithTopControlsTest, NoIdleAnimations) {
   SetupScrollAndContentsLayers(gfx::Size(100, 100))
-      ->SetScrollOffset(gfx::ScrollOffset(0, 10));
+      ->PushScrollOffsetFromMainThread(gfx::ScrollOffset(0, 10));
   host_impl_->Animate(base::TimeTicks());
   EXPECT_FALSE(did_request_redraw_);
 }
@@ -7297,7 +7301,7 @@
 
 TEST_F(LayerTreeHostImplWithTopControlsTest, TopControlsAnimationScheduling) {
   SetupScrollAndContentsLayers(gfx::Size(100, 100))
-      ->SetScrollOffset(gfx::ScrollOffset(0, 10));
+      ->PushScrollOffsetFromMainThread(gfx::ScrollOffset(0, 10));
   host_impl_->DidChangeTopControlsPosition();
   EXPECT_TRUE(did_request_animate_);
   EXPECT_TRUE(did_request_redraw_);
@@ -7314,7 +7318,7 @@
             host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture));
   EXPECT_EQ(0, host_impl_->top_controls_manager()->ControlsTopOffset());
   EXPECT_EQ(gfx::Vector2dF().ToString(),
-            scroll_layer->TotalScrollOffset().ToString());
+            scroll_layer->CurrentScrollOffset().ToString());
 
   // Scroll just the top controls and verify that the scroll succeeds.
   const float residue = 10;
@@ -7323,7 +7327,7 @@
       host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, offset)).did_scroll);
   EXPECT_EQ(-offset, host_impl_->top_controls_manager()->ControlsTopOffset());
   EXPECT_EQ(gfx::Vector2dF().ToString(),
-            scroll_layer->TotalScrollOffset().ToString());
+            scroll_layer->CurrentScrollOffset().ToString());
 
   // Scroll across the boundary
   const float content_scroll = 20;
@@ -7333,7 +7337,7 @@
   EXPECT_EQ(-top_controls_height_,
             host_impl_->top_controls_manager()->ControlsTopOffset());
   EXPECT_EQ(gfx::Vector2dF(0, content_scroll).ToString(),
-            scroll_layer->TotalScrollOffset().ToString());
+            scroll_layer->CurrentScrollOffset().ToString());
 
   // Now scroll back to the top of the content
   offset = -content_scroll;
@@ -7342,7 +7346,7 @@
   EXPECT_EQ(-top_controls_height_,
             host_impl_->top_controls_manager()->ControlsTopOffset());
   EXPECT_EQ(gfx::Vector2dF().ToString(),
-            scroll_layer->TotalScrollOffset().ToString());
+            scroll_layer->CurrentScrollOffset().ToString());
 
   // And scroll the top controls completely into view
   offset = -top_controls_height_;
@@ -7350,14 +7354,14 @@
       host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, offset)).did_scroll);
   EXPECT_EQ(0, host_impl_->top_controls_manager()->ControlsTopOffset());
   EXPECT_EQ(gfx::Vector2dF().ToString(),
-            scroll_layer->TotalScrollOffset().ToString());
+            scroll_layer->CurrentScrollOffset().ToString());
 
   // And attempt to scroll past the end
   EXPECT_FALSE(
       host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, offset)).did_scroll);
   EXPECT_EQ(0, host_impl_->top_controls_manager()->ControlsTopOffset());
   EXPECT_EQ(gfx::Vector2dF().ToString(),
-            scroll_layer->TotalScrollOffset().ToString());
+            scroll_layer->CurrentScrollOffset().ToString());
 
   host_impl_->ScrollEnd();
 }
@@ -7373,7 +7377,7 @@
             host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture));
   EXPECT_EQ(0, host_impl_->top_controls_manager()->ControlsTopOffset());
   EXPECT_EQ(gfx::Vector2dF().ToString(),
-            scroll_layer->TotalScrollOffset().ToString());
+            scroll_layer->CurrentScrollOffset().ToString());
 
   // Scroll the top controls partially.
   const float residue = 35;
@@ -7382,7 +7386,7 @@
       host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, offset)).did_scroll);
   EXPECT_EQ(-offset, host_impl_->top_controls_manager()->ControlsTopOffset());
   EXPECT_EQ(gfx::Vector2dF().ToString(),
-            scroll_layer->TotalScrollOffset().ToString());
+            scroll_layer->CurrentScrollOffset().ToString());
 
   did_request_redraw_ = false;
   did_request_animate_ = false;
@@ -7409,7 +7413,7 @@
     animation_time += base::TimeDelta::FromMilliseconds(5);
     host_impl_->Animate(animation_time);
     EXPECT_EQ(gfx::Vector2dF().ToString(),
-              scroll_layer->TotalScrollOffset().ToString());
+              scroll_layer->CurrentScrollOffset().ToString());
 
     float new_offset =
         host_impl_->top_controls_manager()->ControlsTopOffset();
@@ -7435,14 +7439,15 @@
   host_impl_->top_controls_manager()->UpdateTopControlsState(
       BOTH, SHOWN, false);
   float initial_scroll_offset = 50;
-  scroll_layer->SetScrollOffset(gfx::ScrollOffset(0, initial_scroll_offset));
+  scroll_layer->PushScrollOffsetFromMainThread(
+      gfx::ScrollOffset(0, initial_scroll_offset));
   DrawFrame();
 
   EXPECT_EQ(InputHandler::ScrollStarted,
             host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture));
   EXPECT_EQ(0, host_impl_->top_controls_manager()->ControlsTopOffset());
   EXPECT_EQ(gfx::Vector2dF(0, initial_scroll_offset).ToString(),
-            scroll_layer->TotalScrollOffset().ToString());
+            scroll_layer->CurrentScrollOffset().ToString());
 
   // Scroll the top controls partially.
   const float residue = 15;
@@ -7451,7 +7456,7 @@
       host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, offset)).did_scroll);
   EXPECT_EQ(-offset, host_impl_->top_controls_manager()->ControlsTopOffset());
   EXPECT_EQ(gfx::Vector2dF(0, initial_scroll_offset).ToString(),
-            scroll_layer->TotalScrollOffset().ToString());
+            scroll_layer->CurrentScrollOffset().ToString());
 
   did_request_redraw_ = false;
   did_request_animate_ = false;
@@ -7508,19 +7513,19 @@
       host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, offset)).did_scroll);
   EXPECT_EQ(-offset, host_impl_->top_controls_manager()->ControlsTopOffset());
   EXPECT_EQ(gfx::Vector2dF().ToString(),
-            scroll_layer->TotalScrollOffset().ToString());
+            scroll_layer->CurrentScrollOffset().ToString());
 
   EXPECT_TRUE(
       host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, offset)).did_scroll);
   EXPECT_EQ(gfx::Vector2dF(0, offset).ToString(),
-            scroll_layer->TotalScrollOffset().ToString());
+            scroll_layer->CurrentScrollOffset().ToString());
 
   EXPECT_TRUE(
       host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, offset)).did_scroll);
 
   // Should have fully scrolled
   EXPECT_EQ(gfx::Vector2dF(0, scroll_layer->MaxScrollOffset().y()).ToString(),
-            scroll_layer->TotalScrollOffset().ToString());
+            scroll_layer->CurrentScrollOffset().ToString());
 
   float overscrollamount = 10;
 
@@ -7529,20 +7534,20 @@
       host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, overscrollamount))
           .did_scroll);
   EXPECT_EQ(gfx::Vector2dF(0, 2 * offset).ToString(),
-            scroll_layer->TotalScrollOffset().ToString());
+            scroll_layer->CurrentScrollOffset().ToString());
   EXPECT_EQ(gfx::Vector2dF(0, overscrollamount).ToString(),
             host_impl_->accumulated_root_overscroll().ToString());
 
   EXPECT_TRUE(host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, -2 * offset))
                   .did_scroll);
   EXPECT_EQ(gfx::Vector2dF(0, 0).ToString(),
-            scroll_layer->TotalScrollOffset().ToString());
+            scroll_layer->CurrentScrollOffset().ToString());
   EXPECT_EQ(-offset, host_impl_->top_controls_manager()->ControlsTopOffset());
 
   EXPECT_TRUE(
       host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, -offset)).did_scroll);
   EXPECT_EQ(gfx::Vector2dF(0, 0).ToString(),
-            scroll_layer->TotalScrollOffset().ToString());
+            scroll_layer->CurrentScrollOffset().ToString());
 
   // Top controls should be fully visible
   EXPECT_EQ(0, host_impl_->top_controls_manager()->ControlsTopOffset());
@@ -7565,7 +7570,7 @@
     scoped_ptr<LayerImpl> inner_scroll =
         LayerImpl::Create(layer_tree_impl, kInnerViewportScrollLayerId);
     inner_scroll->SetIsContainerForFixedPositionLayers(true);
-    inner_scroll->SetScrollOffset(gfx::ScrollOffset());
+    inner_scroll->PushScrollOffsetFromMainThread(gfx::ScrollOffset());
 
     scoped_ptr<LayerImpl> inner_clip =
         LayerImpl::Create(layer_tree_impl, kInnerViewportClipLayerId);
@@ -7587,7 +7592,7 @@
     scoped_ptr<LayerImpl> outer_scroll =
         LayerImpl::Create(layer_tree_impl, kOuterViewportScrollLayerId);
     outer_scroll->SetScrollClipLayer(outer_clip->id());
-    outer_scroll->SetScrollOffset(gfx::ScrollOffset());
+    outer_scroll->PushScrollOffsetFromMainThread(gfx::ScrollOffset());
     outer_scroll->SetBounds(content_size);
     outer_scroll->SetContentBounds(content_size);
     outer_scroll->SetPosition(gfx::PointF());
@@ -7628,8 +7633,8 @@
   {
     gfx::Vector2dF inner_expected;
     gfx::Vector2dF outer_expected;
-    EXPECT_VECTOR_EQ(inner_expected, inner_scroll->TotalScrollOffset());
-    EXPECT_VECTOR_EQ(outer_expected, outer_scroll->TotalScrollOffset());
+    EXPECT_VECTOR_EQ(inner_expected, inner_scroll->CurrentScrollOffset());
+    EXPECT_VECTOR_EQ(outer_expected, outer_scroll->CurrentScrollOffset());
 
     // Make sure the fling goes to the outer viewport first
     EXPECT_EQ(InputHandler::ScrollStarted,
@@ -7642,8 +7647,8 @@
 
     host_impl_->ScrollEnd();
 
-    EXPECT_VECTOR_EQ(inner_expected, inner_scroll->TotalScrollOffset());
-    EXPECT_VECTOR_EQ(outer_expected, outer_scroll->TotalScrollOffset());
+    EXPECT_VECTOR_EQ(inner_expected, inner_scroll->CurrentScrollOffset());
+    EXPECT_VECTOR_EQ(outer_expected, outer_scroll->CurrentScrollOffset());
 
     // Fling past the outer viewport boundry, make sure inner viewport scrolls.
     EXPECT_EQ(InputHandler::ScrollStarted,
@@ -7658,8 +7663,8 @@
 
     host_impl_->ScrollEnd();
 
-    EXPECT_VECTOR_EQ(inner_expected, inner_scroll->TotalScrollOffset());
-    EXPECT_VECTOR_EQ(outer_expected, outer_scroll->TotalScrollOffset());
+    EXPECT_VECTOR_EQ(inner_expected, inner_scroll->CurrentScrollOffset());
+    EXPECT_VECTOR_EQ(outer_expected, outer_scroll->CurrentScrollOffset());
   }
 }
 
@@ -7677,8 +7682,8 @@
   {
     gfx::Vector2dF inner_expected;
     gfx::Vector2dF outer_expected;
-    EXPECT_VECTOR_EQ(inner_expected, inner_scroll->TotalScrollOffset());
-    EXPECT_VECTOR_EQ(outer_expected, outer_scroll->TotalScrollOffset());
+    EXPECT_VECTOR_EQ(inner_expected, inner_scroll->CurrentScrollOffset());
+    EXPECT_VECTOR_EQ(outer_expected, outer_scroll->CurrentScrollOffset());
 
     // Make sure the scroll goes to the outer viewport first.
     EXPECT_EQ(InputHandler::ScrollStarted,
@@ -7690,8 +7695,8 @@
     host_impl_->ScrollBy(gfx::Point(), scroll_delta);
     outer_expected += scroll_delta;
 
-    EXPECT_VECTOR_EQ(inner_expected, inner_scroll->TotalScrollOffset());
-    EXPECT_VECTOR_EQ(outer_expected, outer_scroll->TotalScrollOffset());
+    EXPECT_VECTOR_EQ(inner_expected, inner_scroll->CurrentScrollOffset());
+    EXPECT_VECTOR_EQ(outer_expected, outer_scroll->CurrentScrollOffset());
 
     // Now diagonal scroll across the outer viewport boundary in a single event.
     // The entirety of the scroll should be consumed, as bubbling between inner
@@ -7701,8 +7706,8 @@
     inner_expected += scroll_delta;
     host_impl_->ScrollEnd();
 
-    EXPECT_VECTOR_EQ(inner_expected, inner_scroll->TotalScrollOffset());
-    EXPECT_VECTOR_EQ(outer_expected, outer_scroll->TotalScrollOffset());
+    EXPECT_VECTOR_EQ(inner_expected, inner_scroll->CurrentScrollOffset());
+    EXPECT_VECTOR_EQ(outer_expected, outer_scroll->CurrentScrollOffset());
   }
 }
 
@@ -7823,12 +7828,12 @@
   host_impl_->Animate(start_time);
   host_impl_->UpdateAnimationState(true);
 
-  EXPECT_EQ(gfx::ScrollOffset(), scrolling_layer->TotalScrollOffset());
+  EXPECT_EQ(gfx::ScrollOffset(), scrolling_layer->CurrentScrollOffset());
 
   host_impl_->Animate(start_time + base::TimeDelta::FromMilliseconds(50));
   host_impl_->UpdateAnimationState(true);
 
-  float y = scrolling_layer->TotalScrollOffset().y();
+  float y = scrolling_layer->CurrentScrollOffset().y();
   EXPECT_TRUE(y > 1 && y < 49);
 
   // Update target.
@@ -7838,7 +7843,7 @@
   host_impl_->Animate(start_time + base::TimeDelta::FromMilliseconds(200));
   host_impl_->UpdateAnimationState(true);
 
-  y = scrolling_layer->TotalScrollOffset().y();
+  y = scrolling_layer->CurrentScrollOffset().y();
   EXPECT_TRUE(y > 50 && y < 100);
   EXPECT_EQ(scrolling_layer, host_impl_->CurrentlyScrollingLayer());
 
@@ -7846,7 +7851,7 @@
   host_impl_->UpdateAnimationState(true);
 
   EXPECT_VECTOR_EQ(gfx::ScrollOffset(0, 100),
-                   scrolling_layer->TotalScrollOffset());
+                   scrolling_layer->CurrentScrollOffset());
   EXPECT_EQ(NULL, host_impl_->CurrentlyScrollingLayer());
 }
 
@@ -7854,7 +7859,7 @@
   host_impl_->CreatePendingTree();
 
   scoped_ptr<PictureLayerImpl> layer =
-      PictureLayerImpl::Create(host_impl_->pending_tree(), 10, false);
+      FakePictureLayerImpl::Create(host_impl_->pending_tree(), 10);
   layer->SetBounds(gfx::Size(10, 10));
 
   scoped_refptr<RasterSource> pile(FakePicturePileImpl::CreateEmptyPile(
@@ -7904,7 +7909,7 @@
   // should get two pairs.
   host_impl_->CreatePendingTree();
   host_impl_->pending_tree()->root_layer()->AddChild(
-      PictureLayerImpl::Create(host_impl_->pending_tree(), 11, false));
+      FakePictureLayerImpl::Create(host_impl_->pending_tree(), 11));
 
   LayerImpl* new_pending_layer = pending_tree->root_layer()->children()[0];
 
@@ -7997,11 +8002,12 @@
     gfx::Vector2dF scroll_delta(0, 5);
     EXPECT_EQ(InputHandler::ScrollStarted,
               host_impl_->ScrollBegin(gfx::Point(), InputHandler::Wheel));
-    EXPECT_VECTOR_EQ(gfx::Vector2dF(), scroll_layer->TotalScrollOffset());
+    EXPECT_VECTOR_EQ(gfx::Vector2dF(), scroll_layer->CurrentScrollOffset());
 
     host_impl_->ScrollBy(gfx::Point(), scroll_delta);
     host_impl_->ScrollEnd();
-    EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 2.5), scroll_layer->TotalScrollOffset());
+    EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 2.5),
+                     scroll_layer->CurrentScrollOffset());
   }
 }
 
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
index 1e10588..d4bfb6e 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -94,12 +94,8 @@
 
   void NotifyReadyToActivateOnThread(LayerTreeHostImpl* impl) override {
     did_notify_ready_to_activate_ = true;
-    const std::vector<PictureLayerImpl*>& layers = impl->GetPictureLayers();
-    all_tiles_required_for_activation_are_ready_to_draw_ = true;
-    for (const auto& layer : layers) {
-      if (!layer->AllTilesRequiredForActivationAreReadyToDraw())
-        all_tiles_required_for_activation_are_ready_to_draw_ = false;
-    }
+    all_tiles_required_for_activation_are_ready_to_draw_ =
+        impl->tile_manager()->IsReadyToActivate();
     EndTest();
   }
 
@@ -159,10 +155,9 @@
   void NotifyReadyToDrawOnThread(LayerTreeHostImpl* impl) override {
     did_notify_ready_to_draw_ = true;
     const std::vector<PictureLayerImpl*>& layers = impl->GetPictureLayers();
-    all_tiles_required_for_draw_are_ready_to_draw_ = true;
+    all_tiles_required_for_draw_are_ready_to_draw_ =
+        impl->tile_manager()->IsReadyToDraw();
     for (const auto& layer : layers) {
-      if (!layer->AllTilesRequiredForDrawAreReadyToDraw())
-        all_tiles_required_for_draw_are_ready_to_draw_ = false;
       FakePictureLayerImpl* fake_layer =
           static_cast<FakePictureLayerImpl*>(layer);
       required_for_draw_count_ += fake_layer->CountTilesRequiredForDraw();
@@ -2032,22 +2027,34 @@
 class LayerTreeHostTestDeferCommits : public LayerTreeHostTest {
  public:
   LayerTreeHostTestDeferCommits()
-      : num_commits_deferred_(0), num_complete_commits_(0) {}
+      : num_will_begin_impl_frame_(0),
+        num_send_begin_main_frame_(0) {}
 
   void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  void DidDeferCommit() override {
-    num_commits_deferred_++;
-    layer_tree_host()->SetDeferCommits(false);
+  void WillBeginImplFrame(const BeginFrameArgs& args) override {
+    num_will_begin_impl_frame_++;
+    switch (num_will_begin_impl_frame_) {
+      case 1:
+        break;
+      case 2:
+        PostSetNeedsCommitToMainThread();
+        break;
+      case 3:
+        PostSetDeferCommitsToMainThread(false);
+        break;
+      default:
+        // Sometimes |num_will_begin_impl_frame_| will be greater than 3 if the
+        // main thread is slow to respond.
+        break;
+    }
   }
 
-  void DidCommit() override {
-    num_complete_commits_++;
-    switch (num_complete_commits_) {
+  void ScheduledActionSendBeginMainFrame() override {
+    num_send_begin_main_frame_++;
+    switch (num_send_begin_main_frame_) {
       case 1:
-        EXPECT_EQ(0, num_commits_deferred_);
-        layer_tree_host()->SetDeferCommits(true);
-        PostSetNeedsCommitToMainThread();
+        PostSetDeferCommitsToMainThread(true);
         break;
       case 2:
         EndTest();
@@ -2059,13 +2066,13 @@
   }
 
   void AfterTest() override {
-    EXPECT_EQ(1, num_commits_deferred_);
-    EXPECT_EQ(2, num_complete_commits_);
+    EXPECT_GE(3, num_will_begin_impl_frame_);
+    EXPECT_EQ(2, num_send_begin_main_frame_);
   }
 
  private:
-  int num_commits_deferred_;
-  int num_complete_commits_;
+  int num_will_begin_impl_frame_;
+  int num_send_begin_main_frame_;
 };
 
 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestDeferCommits);
@@ -4779,22 +4786,24 @@
 
 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestKeepSwapPromise);
 
-class LayerTreeHostTestBreakSwapPromiseForVisibilityAbortedCommit
+class LayerTreeHostTestBreakSwapPromiseForVisibility
     : public LayerTreeHostTest {
  protected:
   void BeginTest() override { PostSetNeedsCommitToMainThread(); }
 
-  void DidCommit() override {
-    layer_tree_host()->SetDeferCommits(true);
-    layer_tree_host()->SetNeedsCommit();
-  }
-
-  void DidDeferCommit() override {
+  void SetVisibleFalseAndQueueSwapPromise() {
     layer_tree_host()->SetVisible(false);
     scoped_ptr<SwapPromise> swap_promise(
         new TestSwapPromise(&swap_promise_result_));
     layer_tree_host()->QueueSwapPromise(swap_promise.Pass());
-    layer_tree_host()->SetDeferCommits(false);
+  }
+
+  void ScheduledActionWillSendBeginMainFrame() override {
+    MainThreadTaskRunner()->PostTask(
+        FROM_HERE,
+        base::Bind(&LayerTreeHostTestBreakSwapPromiseForVisibility
+                       ::SetVisibleFalseAndQueueSwapPromise,
+            base::Unretained(this)));
   }
 
   void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl,
@@ -4815,27 +4824,33 @@
   TestSwapPromiseResult swap_promise_result_;
 };
 
-SINGLE_AND_MULTI_THREAD_TEST_F(
-    LayerTreeHostTestBreakSwapPromiseForVisibilityAbortedCommit);
+SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestBreakSwapPromiseForVisibility);
 
-class LayerTreeHostTestBreakSwapPromiseForContextAbortedCommit
-    : public LayerTreeHostTest {
+class LayerTreeHostTestBreakSwapPromiseForContext : public LayerTreeHostTest {
  protected:
-  void BeginTest() override { PostSetNeedsCommitToMainThread(); }
-
-  void DidCommit() override {
-    if (TestEnded())
-      return;
-    layer_tree_host()->SetDeferCommits(true);
-    layer_tree_host()->SetNeedsCommit();
+  LayerTreeHostTestBreakSwapPromiseForContext()
+      : output_surface_lost_triggered_(false) {
   }
 
-  void DidDeferCommit() override {
+  void BeginTest() override { PostSetNeedsCommitToMainThread(); }
+
+  void LoseOutputSurfaceAndQueueSwapPromise() {
     layer_tree_host()->DidLoseOutputSurface();
     scoped_ptr<SwapPromise> swap_promise(
         new TestSwapPromise(&swap_promise_result_));
     layer_tree_host()->QueueSwapPromise(swap_promise.Pass());
-    layer_tree_host()->SetDeferCommits(false);
+  }
+
+  void ScheduledActionWillSendBeginMainFrame() override {
+    if (output_surface_lost_triggered_)
+      return;
+    output_surface_lost_triggered_ = true;
+
+    MainThreadTaskRunner()->PostTask(
+        FROM_HERE,
+        base::Bind(&LayerTreeHostTestBreakSwapPromiseForContext
+                       ::LoseOutputSurfaceAndQueueSwapPromise,
+                   base::Unretained(this)));
   }
 
   void BeginMainFrameAbortedOnThread(LayerTreeHostImpl* host_impl,
@@ -4855,11 +4870,12 @@
     }
   }
 
+  bool output_surface_lost_triggered_;
   TestSwapPromiseResult swap_promise_result_;
 };
 
 SINGLE_AND_MULTI_THREAD_TEST_F(
-    LayerTreeHostTestBreakSwapPromiseForContextAbortedCommit);
+    LayerTreeHostTestBreakSwapPromiseForContext);
 
 class SimpleSwapPromiseMonitor : public SwapPromiseMonitor {
  public:
diff --git a/cc/trees/layer_tree_host_unittest_animation.cc b/cc/trees/layer_tree_host_unittest_animation.cc
index 3868c87..bbdfe6b 100644
--- a/cc/trees/layer_tree_host_unittest_animation.cc
+++ b/cc/trees/layer_tree_host_unittest_animation.cc
@@ -1089,8 +1089,7 @@
 
     // Block activation until the running animation has a chance to produce a
     // scroll delta.
-    gfx::Vector2dF scroll_delta = scroll_layer_impl->ScrollDelta() -
-                                  scroll_layer_impl->sent_scroll_delta();
+    gfx::Vector2dF scroll_delta = scroll_layer_impl->ScrollDelta();
     if (scroll_delta.x() < 1.f || scroll_delta.y() < 1.f)
       return;
 
@@ -1104,7 +1103,7 @@
             Animation::ScrollOffset))
       return;
 
-    EXPECT_EQ(final_postion_, scroll_layer_impl->TotalScrollOffset());
+    EXPECT_EQ(final_postion_, scroll_layer_impl->CurrentScrollOffset());
     EndTest();
   }
 
diff --git a/cc/trees/layer_tree_host_unittest_context.cc b/cc/trees/layer_tree_host_unittest_context.cc
index cc4f28f..fb0c9c8 100644
--- a/cc/trees/layer_tree_host_unittest_context.cc
+++ b/cc/trees/layer_tree_host_unittest_context.cc
@@ -404,40 +404,56 @@
 
 SINGLE_THREAD_NOIMPL_TEST_F(MultipleCompositeDoesNotCreateOutputSurface);
 
+// This test makes sure that once a SingleThreadProxy issues a
+// DidFailToInitializeOutputSurface, that future Composite calls will not
+// trigger additional requests for output surfaces.
 class FailedCreateDoesNotCreateExtraOutputSurface
     : public LayerTreeHostContextTest {
  public:
   FailedCreateDoesNotCreateExtraOutputSurface()
-      : LayerTreeHostContextTest(), request_count_(0) {}
+      : LayerTreeHostContextTest(), num_requests_(0), has_failed_(false) {}
 
   void InitializeSettings(LayerTreeSettings* settings) override {
     settings->single_thread_proxy_scheduler = false;
   }
 
   void RequestNewOutputSurface() override {
-    if (request_count_ == 0) {
-      ExpectCreateToFail();
-      layer_tree_host()->SetOutputSurface(
-          make_scoped_ptr(new FailureOutputSurface(false)));
-    }
+    num_requests_++;
+    // There should be one initial request and then one request from
+    // the LayerTreeTest test hooks DidFailToInitializeOutputSurface (which is
+    // hard to skip).  This second request is just ignored and is test cruft.
+    EXPECT_LE(num_requests_, 2);
+    if (num_requests_ > 1)
+      return;
+    ExpectCreateToFail();
+    layer_tree_host()->SetOutputSurface(
+        make_scoped_ptr(new FailureOutputSurface(false)));
   }
 
   void BeginTest() override {
+    // First composite tries to create a surface.
     layer_tree_host()->Composite(base::TimeTicks());
+    EXPECT_EQ(num_requests_, 2);
+    EXPECT_TRUE(has_failed_);
+
+    // Second composite should not request or fail.
     layer_tree_host()->Composite(base::TimeTicks());
+    EXPECT_EQ(num_requests_, 2);
+    EndTest();
   }
 
   void DidInitializeOutputSurface() override { EXPECT_TRUE(false); }
 
   void DidFailToInitializeOutputSurface() override {
     LayerTreeHostContextTest::DidFailToInitializeOutputSurface();
-    EXPECT_GE(2, ++request_count_);
-    EndTest();
+    EXPECT_FALSE(has_failed_);
+    has_failed_ = true;
   }
 
   void AfterTest() override {}
 
-  int request_count_;
+  int num_requests_;
+  bool has_failed_;
 };
 
 SINGLE_THREAD_NOIMPL_TEST_F(FailedCreateDoesNotCreateExtraOutputSurface);
@@ -1694,12 +1710,7 @@
     deferred_ = true;
 
     // Defer commits before the BeginFrame arrives, causing it to be delayed.
-    MainThreadTaskRunner()->PostTask(
-        FROM_HERE,
-        base::Bind(&LayerTreeHostContextTestLoseAfterSendingBeginMainFrame::
-                       DeferCommitsOnMainThread,
-                   base::Unretained(this),
-                   true));
+    PostSetDeferCommitsToMainThread(true);
     // Meanwhile, lose the context while we are in defer commits.
     ImplThreadTaskRunner()->PostTask(
         FROM_HERE,
@@ -1712,16 +1723,7 @@
     LoseContext();
 
     // After losing the context, stop deferring commits.
-    MainThreadTaskRunner()->PostTask(
-        FROM_HERE,
-        base::Bind(&LayerTreeHostContextTestLoseAfterSendingBeginMainFrame::
-                       DeferCommitsOnMainThread,
-                   base::Unretained(this),
-                   false));
-  }
-
-  void DeferCommitsOnMainThread(bool defer_commits) {
-    layer_tree_host()->SetDeferCommits(defer_commits);
+    PostSetDeferCommitsToMainThread(false);
   }
 
   void WillBeginMainFrame() override {
diff --git a/cc/trees/layer_tree_host_unittest_copyrequest.cc b/cc/trees/layer_tree_host_unittest_copyrequest.cc
index e4f944d..5766a19 100644
--- a/cc/trees/layer_tree_host_unittest_copyrequest.cc
+++ b/cc/trees/layer_tree_host_unittest_copyrequest.cc
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "cc/layers/layer_iterator.h"
 #include "cc/output/copy_output_request.h"
 #include "cc/output/copy_output_result.h"
 #include "cc/test/fake_content_layer.h"
@@ -966,5 +967,121 @@
 SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F(
     LayerTreeHostCopyRequestTestShutdownBeforeCopy);
 
+class LayerTreeHostCopyRequestTestMultipleDrawsHiddenCopyRequest
+    : public LayerTreeHostCopyRequestTest {
+ protected:
+  void SetupTree() override {
+    scoped_refptr<FakeContentLayer> root = FakeContentLayer::Create(&client_);
+    root->SetBounds(gfx::Size(20, 20));
+
+    child_ = FakeContentLayer::Create(&client_);
+    child_->SetBounds(gfx::Size(10, 10));
+    root->AddChild(child_);
+    child_->SetHideLayerAndSubtree(true);
+
+    layer_tree_host()->SetRootLayer(root);
+    LayerTreeHostCopyRequestTest::SetupTree();
+  }
+
+  void BeginTest() override {
+    num_draws_ = 0;
+    copy_happened_ = false;
+    draw_happened_ = false;
+    PostSetNeedsCommitToMainThread();
+  }
+
+  void DidCommitAndDrawFrame() override {
+    // Send a copy request after the first commit.
+    if (layer_tree_host()->source_frame_number() == 1) {
+      child_->RequestCopyOfOutput(
+          CopyOutputRequest::CreateBitmapRequest(base::Bind(
+              &LayerTreeHostCopyRequestTestMultipleDrawsHiddenCopyRequest::
+                  CopyOutputCallback,
+              base::Unretained(this))));
+    }
+  }
+
+  DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
+                                   LayerTreeHostImpl::FrameData* frame_data,
+                                   DrawResult draw_result) override {
+    LayerImpl* root = host_impl->active_tree()->root_layer();
+    LayerImpl* child = root->children()[0];
+
+    bool saw_root = false;
+    bool saw_child = false;
+    for (LayerIterator<LayerImpl> it = LayerIterator<LayerImpl>::Begin(
+             frame_data->render_surface_layer_list);
+         it != LayerIterator<LayerImpl>::End(
+                   frame_data->render_surface_layer_list);
+         ++it) {
+      if (it.represents_itself()) {
+        if (*it == root)
+          saw_root = true;
+        else if (*it == child)
+          saw_child = true;
+        else
+          NOTREACHED();
+      }
+    }
+
+    ++num_draws_;
+    // The first draw has no copy request. The 2nd draw has a copy request, the
+    // 3rd should not again.
+    switch (num_draws_) {
+      case 1:
+        // Only the root layer draws, the child is hidden.
+        EXPECT_TRUE(saw_root);
+        EXPECT_FALSE(saw_child);
+        break;
+      case 2:
+        // Copy happening here, the child will draw.
+        EXPECT_TRUE(saw_root);
+        EXPECT_TRUE(saw_child);
+        // Make another draw happen after doing the copy request.
+        host_impl->SetNeedsRedrawRect(gfx::Rect(1, 1));
+        break;
+      case 3:
+        // If LayerTreeHostImpl does the wrong thing, it will try to draw the
+        // layer which had a copy request. But only the root should draw.
+        EXPECT_TRUE(saw_root);
+        EXPECT_FALSE(saw_child);
+
+        // End the test! Don't race with copy request callbacks, so post the end
+        // to the main thread.
+        draw_happened_ = true;
+        MainThreadTaskRunner()->PostTask(
+            FROM_HERE,
+            base::Bind(
+                &LayerTreeHostCopyRequestTestMultipleDrawsHiddenCopyRequest::
+                    TryEndTest,
+                base::Unretained(this)));
+        break;
+    }
+    return draw_result;
+  }
+
+  void CopyOutputCallback(scoped_ptr<CopyOutputResult> result) {
+    EXPECT_FALSE(TestEnded());
+    copy_happened_ = true;
+    TryEndTest();
+  }
+
+  void TryEndTest() {
+    if (draw_happened_ && copy_happened_)
+      EndTest();
+  }
+
+  void AfterTest() override {}
+
+  scoped_refptr<FakeContentLayer> child_;
+  FakeContentLayerClient client_;
+  int num_draws_;
+  bool copy_happened_;
+  bool draw_happened_;
+};
+
+SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F(
+    LayerTreeHostCopyRequestTestMultipleDrawsHiddenCopyRequest);
+
 }  // namespace
 }  // namespace cc
diff --git a/cc/trees/layer_tree_host_unittest_damage.cc b/cc/trees/layer_tree_host_unittest_damage.cc
index d34cd4d..daff40b 100644
--- a/cc/trees/layer_tree_host_unittest_damage.cc
+++ b/cc/trees/layer_tree_host_unittest_damage.cc
@@ -434,7 +434,8 @@
         // Test that modifying the position of the content layer (not
         // scrolling) won't damage the scrollbar.
         scroll_layer->SetPosition(gfx::Point(1, 1));
-        scroll_layer->SetScrollOffset(scroll_layer->scroll_offset());
+        scroll_layer->PushScrollOffsetFromMainThread(
+            scroll_layer->BaseScrollOffset());
         host_impl->SetNeedsRedraw();
         break;
       case 2:
diff --git a/cc/trees/layer_tree_host_unittest_picture.cc b/cc/trees/layer_tree_host_unittest_picture.cc
index 773798a..159200a 100644
--- a/cc/trees/layer_tree_host_unittest_picture.cc
+++ b/cc/trees/layer_tree_host_unittest_picture.cc
@@ -44,16 +44,30 @@
 
   void DidCommit() override {
     switch (layer_tree_host()->source_frame_number()) {
+      case 1:
+        // Activate while there are pending and active twins in place.
+        layer_tree_host()->SetNeedsCommit();
+        break;
       case 2:
-        // Drop the picture layer from the tree.
+        // Drop the picture layer from the tree so the activate will have an
+        // active layer without a pending twin.
         layer_tree_host()->root_layer()->children()[0]->RemoveFromParent();
         break;
-      case 3:
-        // Add a new picture layer.
+      case 3: {
+        // Add a new picture layer so the activate will have a pending layer
+        // without an active twin.
         scoped_refptr<FakePictureLayer> picture =
             FakePictureLayer::Create(&client_);
         layer_tree_host()->root_layer()->AddChild(picture);
         break;
+      }
+      case 4:
+        // Active while there are pending and active twins again.
+        layer_tree_host()->SetNeedsCommit();
+        break;
+      case 5:
+        EndTest();
+        break;
     }
   }
 
@@ -87,7 +101,7 @@
     // After the first activation, when we commit again, we'll have a pending
     // and active layer. Then we recreate a picture layer in the 4th activate
     // and the next commit will have a pending and active twin again.
-    EXPECT_TRUE(activates_ == 1 || activates_ == 4);
+    EXPECT_TRUE(activates_ == 1 || activates_ == 4) << activates_;
 
     EXPECT_EQ(pending_picture_impl,
               active_picture_impl->GetPendingOrActiveTwinLayer());
@@ -114,13 +128,9 @@
     }
 
     ++activates_;
-    if (activates_ <= 4)
-      PostSetNeedsCommitToMainThread();
-    else
-      EndTest();
   }
 
-  void AfterTest() override {}
+  void AfterTest() override { EXPECT_EQ(5, activates_); }
 
   int activates_;
 };
diff --git a/cc/trees/layer_tree_host_unittest_scroll.cc b/cc/trees/layer_tree_host_unittest_scroll.cc
index 4e561ed..1c20b4c 100644
--- a/cc/trees/layer_tree_host_unittest_scroll.cc
+++ b/cc/trees/layer_tree_host_unittest_scroll.cc
@@ -77,12 +77,12 @@
 
     switch (impl->active_tree()->source_frame_number()) {
       case 0:
-        EXPECT_VECTOR_EQ(initial_scroll_, scroll_layer->scroll_offset());
+        EXPECT_VECTOR_EQ(initial_scroll_, scroll_layer->BaseScrollOffset());
         EXPECT_VECTOR_EQ(scroll_amount_, scroll_layer->ScrollDelta());
         PostSetNeedsCommitToMainThread();
         break;
       case 1:
-        EXPECT_VECTOR_EQ(scroll_layer->scroll_offset(), second_scroll_);
+        EXPECT_VECTOR_EQ(scroll_layer->BaseScrollOffset(), second_scroll_);
         EXPECT_VECTOR_EQ(scroll_layer->ScrollDelta(), scroll_amount_);
         EndTest();
         break;
@@ -157,7 +157,7 @@
       scroll_layer->ScrollBy(scroll_amount_);
       EXPECT_VECTOR_EQ(scroll_layer->ScrollDelta(), scroll_amount_);
 
-      EXPECT_VECTOR_EQ(scroll_layer->scroll_offset(), initial_scroll_);
+      EXPECT_VECTOR_EQ(scroll_layer->BaseScrollOffset(), initial_scroll_);
       PostSetNeedsRedrawToMainThread();
     } else if (impl->active_tree()->source_frame_number() == 0 &&
                impl->SourceAnimationFrameNumber() == 2) {
@@ -303,7 +303,7 @@
       EXPECT_VECTOR_EQ(root_scroll_layer->ScrollDelta(), gfx::Vector2d());
       root_scroll_layer->ScrollBy(impl_scroll_);
       EXPECT_VECTOR_EQ(root_scroll_layer->ScrollDelta(), impl_scroll_);
-      EXPECT_VECTOR_EQ(root_scroll_layer->scroll_offset(), initial_scroll_);
+      EXPECT_VECTOR_EQ(root_scroll_layer->BaseScrollOffset(), initial_scroll_);
 
       EXPECT_EQ(1.f, impl->active_tree()->page_scale_delta());
       EXPECT_EQ(1.f, impl->active_tree()->current_page_scale_factor());
@@ -322,7 +322,7 @@
       root_scroll_layer->ScrollBy(impl_scroll_);
       EXPECT_VECTOR_EQ(root_scroll_layer->ScrollDelta(), impl_scroll_);
       EXPECT_VECTOR_EQ(
-          root_scroll_layer->scroll_offset(),
+          root_scroll_layer->BaseScrollOffset(),
           gfx::ScrollOffsetWithDelta(initial_scroll_, impl_scroll_));
 
       EXPECT_EQ(1.f, impl->active_tree()->page_scale_delta());
@@ -344,7 +344,7 @@
       impl->SetNeedsCommit();
       EXPECT_VECTOR_EQ(root_scroll_layer->ScrollDelta(), impl_scroll_);
       gfx::Vector2dF delta = impl_scroll_ + impl_scroll_ + second_main_scroll_;
-      EXPECT_VECTOR_EQ(root_scroll_layer->scroll_offset(),
+      EXPECT_VECTOR_EQ(root_scroll_layer->BaseScrollOffset(),
                        gfx::ScrollOffsetWithDelta(initial_scroll_, delta));
     } else if (impl->active_tree()->source_frame_number() == 2 &&
                impl->SourceAnimationFrameNumber() == 4) {
@@ -352,7 +352,7 @@
       EXPECT_VECTOR_EQ(root_scroll_layer->ScrollDelta(), gfx::Vector2d());
       gfx::Vector2dF delta =
           impl_scroll_ + impl_scroll_ + impl_scroll_ + second_main_scroll_;
-      EXPECT_VECTOR_EQ(root_scroll_layer->scroll_offset(),
+      EXPECT_VECTOR_EQ(root_scroll_layer->BaseScrollOffset(),
                        gfx::ScrollOffsetWithDelta(initial_scroll_, delta));
       EndTest();
     } else {
@@ -424,12 +424,12 @@
     // multiple commits.
     switch (impl->active_tree()->source_frame_number()) {
       case 0:
-        EXPECT_VECTOR_EQ(scroll_layer->scroll_offset(), gfx::Vector2d(0, 0));
+        EXPECT_VECTOR_EQ(scroll_layer->BaseScrollOffset(), gfx::Vector2d(0, 0));
         EXPECT_VECTOR_EQ(scroll_layer->ScrollDelta(), gfx::Vector2d(0, 0));
         PostSetNeedsCommitToMainThread();
         break;
       case 1:
-        EXPECT_VECTOR_EQ(scroll_layer->scroll_offset(),
+        EXPECT_VECTOR_EQ(scroll_layer->BaseScrollOffset(),
                          gfx::ToFlooredVector2d(scroll_amount_));
         EXPECT_VECTOR_EQ(scroll_layer->ScrollDelta(),
                          gfx::Vector2dF(fmod(scroll_amount_.x(), 1.0f), 0.0f));
@@ -437,7 +437,7 @@
         break;
       case 2:
         EXPECT_VECTOR_EQ(
-            scroll_layer->scroll_offset(),
+            scroll_layer->BaseScrollOffset(),
             gfx::ToFlooredVector2d(scroll_amount_ + scroll_amount_));
         EXPECT_VECTOR_EQ(
             scroll_layer->ScrollDelta(),
@@ -598,7 +598,7 @@
 
         // Check the scroll is applied as a delta.
         EXPECT_VECTOR_EQ(initial_offset_,
-                         expected_scroll_layer_impl->scroll_offset());
+                         expected_scroll_layer_impl->BaseScrollOffset());
         EXPECT_VECTOR_EQ(scroll_amount_,
                          expected_scroll_layer_impl->ScrollDelta());
         break;
@@ -615,16 +615,16 @@
 
         // Check the scroll is applied as a delta.
         EXPECT_VECTOR_EQ(javascript_scroll_,
-                         expected_scroll_layer_impl->scroll_offset());
+                         expected_scroll_layer_impl->BaseScrollOffset());
         EXPECT_VECTOR_EQ(scroll_amount_,
                          expected_scroll_layer_impl->ScrollDelta());
         break;
       }
       case 2:
 
-        EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(javascript_scroll_,
-                                                    scroll_amount_),
-                         expected_scroll_layer_impl->scroll_offset());
+        EXPECT_VECTOR_EQ(
+            gfx::ScrollOffsetWithDelta(javascript_scroll_, scroll_amount_),
+            expected_scroll_layer_impl->BaseScrollOffset());
         EXPECT_VECTOR_EQ(gfx::Vector2d(),
                          expected_scroll_layer_impl->ScrollDelta());
 
@@ -828,9 +828,8 @@
           EXPECT_VECTOR_EQ(scroll_layer->ScrollDelta(), gfx::Vector2d());
           scroll_layer->ScrollBy(impl_thread_scroll1_);
 
-          EXPECT_VECTOR_EQ(scroll_layer->scroll_offset(), initial_scroll_);
+          EXPECT_VECTOR_EQ(scroll_layer->BaseScrollOffset(), initial_scroll_);
           EXPECT_VECTOR_EQ(scroll_layer->ScrollDelta(), impl_thread_scroll1_);
-          EXPECT_VECTOR_EQ(scroll_layer->sent_scroll_delta(), gfx::Vector2d());
           PostSetNeedsCommitToMainThread();
 
           // CommitCompleteOnThread will trigger this function again
@@ -841,31 +840,26 @@
           EXPECT_EQ(impl->pending_tree()->source_frame_number(), 1);
 
           scroll_layer->ScrollBy(impl_thread_scroll2_);
-          EXPECT_VECTOR_EQ(scroll_layer->scroll_offset(), initial_scroll_);
+          EXPECT_VECTOR_EQ(scroll_layer->BaseScrollOffset(), initial_scroll_);
           EXPECT_VECTOR_EQ(scroll_layer->ScrollDelta(),
                            impl_thread_scroll1_ + impl_thread_scroll2_);
-          EXPECT_VECTOR_EQ(scroll_layer->sent_scroll_delta(),
-                           impl_thread_scroll1_);
 
           LayerImpl* pending_scroll_layer = pending_root->children()[0];
           EXPECT_VECTOR_EQ(
-              pending_scroll_layer->scroll_offset(),
+              pending_scroll_layer->BaseScrollOffset(),
               gfx::ScrollOffsetWithDelta(
                   initial_scroll_, main_thread_scroll_ + impl_thread_scroll1_));
           EXPECT_VECTOR_EQ(pending_scroll_layer->ScrollDelta(),
                            impl_thread_scroll2_);
-          EXPECT_VECTOR_EQ(pending_scroll_layer->sent_scroll_delta(),
-                           gfx::Vector2d());
         }
         break;
       case 1:
         EXPECT_FALSE(impl->pending_tree());
         EXPECT_VECTOR_EQ(
-            scroll_layer->scroll_offset(),
+            scroll_layer->BaseScrollOffset(),
             gfx::ScrollOffsetWithDelta(
                 initial_scroll_, main_thread_scroll_ + impl_thread_scroll1_));
         EXPECT_VECTOR_EQ(scroll_layer->ScrollDelta(), impl_thread_scroll2_);
-        EXPECT_VECTOR_EQ(scroll_layer->sent_scroll_delta(), gfx::Vector2d());
         EndTest();
         break;
     }
@@ -960,37 +954,30 @@
     ASSERT_TRUE(pending_scroll_layer);
     switch (impl->pending_tree()->source_frame_number()) {
       case 0:
-        EXPECT_VECTOR_EQ(pending_scroll_layer->scroll_offset(),
+        EXPECT_VECTOR_EQ(pending_scroll_layer->BaseScrollOffset(),
                          initial_scroll_);
         EXPECT_VECTOR_EQ(pending_scroll_layer->ScrollDelta(), gfx::Vector2d());
-        EXPECT_VECTOR_EQ(pending_scroll_layer->sent_scroll_delta(),
-                         gfx::Vector2d());
         EXPECT_FALSE(active_root);
         break;
       case 1:
         // Even though the scroll happened during the commit, both layers
         // should have the appropriate scroll delta.
-        EXPECT_VECTOR_EQ(pending_scroll_layer->scroll_offset(),
+        EXPECT_VECTOR_EQ(pending_scroll_layer->BaseScrollOffset(),
                          initial_scroll_);
         EXPECT_VECTOR_EQ(pending_scroll_layer->ScrollDelta(),
                          impl_thread_scroll_);
-        EXPECT_VECTOR_EQ(pending_scroll_layer->sent_scroll_delta(),
-                         gfx::Vector2d());
         ASSERT_TRUE(active_root);
-        EXPECT_VECTOR_EQ(active_scroll_layer->scroll_offset(), initial_scroll_);
+        EXPECT_VECTOR_EQ(active_scroll_layer->BaseScrollOffset(),
+                         initial_scroll_);
         EXPECT_VECTOR_EQ(active_scroll_layer->ScrollDelta(),
                          impl_thread_scroll_);
-        EXPECT_VECTOR_EQ(active_scroll_layer->sent_scroll_delta(),
-                         gfx::Vector2d());
         break;
       case 2:
         // On the next commit, this delta should have been sent and applied.
-        EXPECT_VECTOR_EQ(pending_scroll_layer->scroll_offset(),
-                         gfx::ScrollOffsetWithDelta(initial_scroll_,
-                                                    impl_thread_scroll_));
+        EXPECT_VECTOR_EQ(
+            pending_scroll_layer->BaseScrollOffset(),
+            gfx::ScrollOffsetWithDelta(initial_scroll_, impl_thread_scroll_));
         EXPECT_VECTOR_EQ(pending_scroll_layer->ScrollDelta(), gfx::Vector2d());
-        EXPECT_VECTOR_EQ(pending_scroll_layer->sent_scroll_delta(),
-                         gfx::Vector2d());
         break;
     }
   }
@@ -1003,17 +990,15 @@
 
     switch (impl->active_tree()->source_frame_number()) {
       case 0:
-        EXPECT_VECTOR_EQ(scroll_layer->scroll_offset(), initial_scroll_);
+        EXPECT_VECTOR_EQ(scroll_layer->BaseScrollOffset(), initial_scroll_);
         EXPECT_VECTOR_EQ(scroll_layer->ScrollDelta(), gfx::Vector2d());
-        EXPECT_VECTOR_EQ(scroll_layer->sent_scroll_delta(), gfx::Vector2d());
         EXPECT_EQ(1.f, impl->active_tree()->page_scale_delta());
         EXPECT_EQ(1.f, impl->active_tree()->current_page_scale_factor());
         PostSetNeedsCommitToMainThread();
         break;
       case 1:
-        EXPECT_VECTOR_EQ(scroll_layer->scroll_offset(), initial_scroll_);
+        EXPECT_VECTOR_EQ(scroll_layer->BaseScrollOffset(), initial_scroll_);
         EXPECT_VECTOR_EQ(scroll_layer->ScrollDelta(), impl_thread_scroll_);
-        EXPECT_VECTOR_EQ(scroll_layer->sent_scroll_delta(), gfx::Vector2d());
         EXPECT_EQ(impl_scale_, impl->active_tree()->page_scale_delta());
         EXPECT_EQ(impl_scale_,
                   impl->active_tree()->current_page_scale_factor());
diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc
index 041c5fe..97ebb00 100644
--- a/cc/trees/layer_tree_impl.cc
+++ b/cc/trees/layer_tree_impl.cc
@@ -7,8 +7,8 @@
 #include <limits>
 #include <set>
 
-#include "base/debug/trace_event.h"
-#include "base/debug/trace_event_argument.h"
+#include "base/trace_event/trace_event.h"
+#include "base/trace_event/trace_event_argument.h"
 #include "cc/animation/keyframed_animation_curve.h"
 #include "cc/animation/scrollbar_animation_controller.h"
 #include "cc/animation/scrollbar_animation_controller_linear_fade.h"
@@ -50,11 +50,11 @@
   }
 
   // LayerScrollOffsetDelegate implementation.
-  void SetTotalScrollOffset(const gfx::ScrollOffset& new_offset) override {
+  void SetCurrentScrollOffset(const gfx::ScrollOffset& new_offset) override {
     last_set_scroll_offset_ = new_offset;
   }
 
-  gfx::ScrollOffset GetTotalScrollOffset() override {
+  gfx::ScrollOffset GetCurrentScrollOffset() override {
     return layer_tree_impl_->GetDelegatedScrollOffset(layer_);
   }
 
@@ -154,10 +154,10 @@
   gfx::ScrollOffset offset;
 
   if (inner_viewport_scroll_layer_)
-    offset += inner_viewport_scroll_layer_->TotalScrollOffset();
+    offset += inner_viewport_scroll_layer_->CurrentScrollOffset();
 
   if (outer_viewport_scroll_layer_)
-    offset += outer_viewport_scroll_layer_->TotalScrollOffset();
+    offset += outer_viewport_scroll_layer_->CurrentScrollOffset();
 
   return offset;
 }
@@ -173,15 +173,6 @@
 
   return offset;
 }
-gfx::Vector2dF LayerTreeImpl::TotalScrollDelta() const {
-  DCHECK(inner_viewport_scroll_layer_);
-  gfx::Vector2dF delta = inner_viewport_scroll_layer_->ScrollDelta();
-
-  if (outer_viewport_scroll_layer_)
-    delta += outer_viewport_scroll_layer_->ScrollDelta();
-
-  return delta;
-}
 
 scoped_ptr<LayerImpl> LayerTreeImpl::DetachLayerTree() {
   // Clear all data structures that have direct references to the layer tree.
@@ -395,6 +386,29 @@
   }
 
   ForceScrollbarParameterUpdateAfterScaleChange(page_scale_layer());
+
+  HideInnerViewportScrollbarsIfNearMinimumScale();
+}
+
+void LayerTreeImpl::HideInnerViewportScrollbarsIfNearMinimumScale() {
+  if (!InnerViewportContainerLayer())
+    return;
+
+  LayerImpl::ScrollbarSet* scrollbars =
+      InnerViewportContainerLayer()->scrollbars();
+
+  if (!scrollbars)
+    return;
+
+  for (LayerImpl::ScrollbarSet::iterator it = scrollbars->begin();
+       it != scrollbars->end();
+       ++it) {
+    ScrollbarLayerImplBase* scrollbar = *it;
+    float minimum_scale_to_show_at =
+        min_page_scale_factor() * settings().scrollbar_show_scale_threshold;
+    scrollbar->SetHideLayerAndSubtree(
+        current_page_scale_factor() < minimum_scale_to_show_at);
+  }
 }
 
 SyncedProperty<ScaleGroup>* LayerTreeImpl::page_scale_factor() {
@@ -445,19 +459,6 @@
       root_layer(), base::Bind(&ApplySentScrollDeltasFromAbortedCommitTo));
 }
 
-static void ApplyScrollDeltasSinceBeginMainFrameTo(LayerImpl* layer) {
-  layer->ApplyScrollDeltasSinceBeginMainFrame();
-}
-
-void LayerTreeImpl::ApplyScrollDeltasSinceBeginMainFrame() {
-  DCHECK(IsPendingTree());
-  if (!root_layer())
-    return;
-
-  LayerTreeHostCommon::CallFunctionForSubtree(
-      root_layer(), base::Bind(&ApplyScrollDeltasSinceBeginMainFrameTo));
-}
-
 void LayerTreeImpl::SetViewportLayersFromIds(
     int overscroll_elasticity_layer_id,
     int page_scale_layer_id,
@@ -476,6 +477,8 @@
   DCHECK(outer_viewport_scroll_layer_ ||
          outer_viewport_scroll_layer_id == Layer::INVALID_ID);
 
+  HideInnerViewportScrollbarsIfNearMinimumScale();
+
   if (!root_layer_scroll_offset_delegate_)
     return;
 
@@ -972,6 +975,11 @@
     }
 
     if (inner_viewport_scroll_layer_)
+      inner_viewport_scroll_layer_->RefreshFromScrollDelegate();
+    if (outer_viewport_scroll_layer_)
+      outer_viewport_scroll_layer_->RefreshFromScrollDelegate();
+
+    if (inner_viewport_scroll_layer_)
       UpdateScrollOffsetDelegate();
   }
 }
@@ -979,10 +987,10 @@
 void LayerTreeImpl::OnRootLayerDelegatedScrollOffsetChanged() {
   DCHECK(root_layer_scroll_offset_delegate_);
   if (inner_viewport_scroll_layer_) {
-    inner_viewport_scroll_layer_->DidScroll();
+    inner_viewport_scroll_layer_->RefreshFromScrollDelegate();
   }
   if (outer_viewport_scroll_layer_) {
-    outer_viewport_scroll_layer_->DidScroll();
+    outer_viewport_scroll_layer_->RefreshFromScrollDelegate();
   }
 }
 
@@ -1406,6 +1414,25 @@
   return true;
 }
 
+struct FindWheelEventLayerFunctor {
+  bool operator()(LayerImpl* layer) const {
+    return layer->have_wheel_event_handlers();
+  }
+};
+
+LayerImpl* LayerTreeImpl::FindLayerWithWheelHandlerThatIsHitByPoint(
+    const gfx::PointF& screen_space_point) {
+  if (!root_layer())
+    return NULL;
+  if (!UpdateDrawProperties())
+    return NULL;
+  FindWheelEventLayerFunctor func;
+  FindClosestMatchingLayerDataForRecursion data_for_recursion;
+  FindClosestMatchingLayer(screen_space_point, root_layer(), func,
+                           &data_for_recursion);
+  return data_for_recursion.closest_match;
+}
+
 struct FindTouchEventLayerFunctor {
   bool operator()(LayerImpl* layer) const {
     return LayerHasTouchEventHandlersAt(screen_space_point, layer);
diff --git a/cc/trees/layer_tree_impl.h b/cc/trees/layer_tree_impl.h
index e68bbc3..a58b645 100644
--- a/cc/trees/layer_tree_impl.h
+++ b/cc/trees/layer_tree_impl.h
@@ -135,7 +135,6 @@
   LayerImpl* OuterViewportScrollLayer() const;
   gfx::ScrollOffset TotalScrollOffset() const;
   gfx::ScrollOffset TotalMaxScrollOffset() const;
-  gfx::Vector2dF TotalScrollDelta() const;
 
   LayerImpl* InnerViewportContainerLayer() const;
   LayerImpl* OuterViewportContainerLayer() const;
@@ -153,7 +152,6 @@
   }
   LayerImpl* page_scale_layer() { return page_scale_layer_; }
   void ApplySentScrollAndScaleDeltasFromAbortedCommit();
-  void ApplyScrollDeltasSinceBeginMainFrame();
 
   SkColor background_color() const { return background_color_; }
   void set_background_color(SkColor color) { background_color_ = color; }
@@ -281,6 +279,9 @@
 
   LayerImpl* FindLayerThatIsHitByPoint(const gfx::PointF& screen_space_point);
 
+  LayerImpl* FindLayerWithWheelHandlerThatIsHitByPoint(
+      const gfx::PointF& screen_space_point);
+
   LayerImpl* FindLayerThatIsHitByPointInTouchHandlerRegion(
       const gfx::PointF& screen_space_point);
 
@@ -343,6 +344,7 @@
   bool SetPageScaleFactorLimits(float min_page_scale_factor,
                                 float max_page_scale_factor);
   void DidUpdatePageScale();
+  void HideInnerViewportScrollbarsIfNearMinimumScale();
 
   LayerTreeHostImpl* layer_tree_host_impl_;
   int source_frame_number_;
diff --git a/cc/trees/layer_tree_impl_unittest.cc b/cc/trees/layer_tree_impl_unittest.cc
index 2c5dd05..67f98e6 100644
--- a/cc/trees/layer_tree_impl_unittest.cc
+++ b/cc/trees/layer_tree_impl_unittest.cc
@@ -6,6 +6,7 @@
 
 #include "cc/layers/heads_up_display_layer_impl.h"
 #include "cc/layers/layer.h"
+#include "cc/layers/solid_color_scrollbar_layer_impl.h"
 #include "cc/test/fake_impl_proxy.h"
 #include "cc/test/fake_layer_tree_host_impl.h"
 #include "cc/test/fake_output_surface.h"
@@ -23,6 +24,7 @@
   LayerTreeImplTest() {
     LayerTreeSettings settings;
     settings.layer_transforms_should_scale_layer_contents = true;
+    settings.scrollbar_show_scale_threshold = 1.1f;
     host_impl_.reset(
         new FakeLayerTreeHostImpl(settings, &proxy_, &shared_bitmap_manager_));
     EXPECT_TRUE(host_impl_->InitializeRenderer(FakeOutputSurface::Create3d()));
@@ -1371,6 +1373,73 @@
   EXPECT_FALSE(result_layer);
 }
 
+TEST_F(LayerTreeImplTest, MakeScrollbarsInvisibleNearMinPageScale) {
+  const int kThumbThickness = 10;
+  const int kTrackStart = 0;
+  const bool kIsLeftSideVerticalScrollbar = false;
+  const bool kIsOverlayScrollbar = true;
+
+  LayerTreeImpl* active_tree = host_impl().active_tree();
+
+  scoped_ptr<LayerImpl> scroll_layer = LayerImpl::Create(active_tree, 1);
+  scoped_ptr<SolidColorScrollbarLayerImpl> vertical_scrollbar_layer =
+      SolidColorScrollbarLayerImpl::Create(active_tree,
+                                           2,
+                                           VERTICAL,
+                                           kThumbThickness,
+                                           kTrackStart,
+                                           kIsLeftSideVerticalScrollbar,
+                                           kIsOverlayScrollbar);
+  scoped_ptr<SolidColorScrollbarLayerImpl> horizontal_scrollbar_layer =
+      SolidColorScrollbarLayerImpl::Create(active_tree,
+                                           3,
+                                           HORIZONTAL,
+                                           kThumbThickness,
+                                           kTrackStart,
+                                           kIsLeftSideVerticalScrollbar,
+                                           kIsOverlayScrollbar);
+
+  scoped_ptr<LayerImpl> clip_layer = LayerImpl::Create(active_tree, 4);
+  scoped_ptr<LayerImpl> page_scale_layer = LayerImpl::Create(active_tree, 5);
+
+  scroll_layer->SetScrollClipLayer(clip_layer->id());
+
+  LayerImpl* scroll_layer_ptr = scroll_layer.get();
+  LayerImpl* page_scale_layer_ptr = page_scale_layer.get();
+
+  clip_layer->AddChild(page_scale_layer.Pass());
+  page_scale_layer_ptr->AddChild(scroll_layer.Pass());
+
+  vertical_scrollbar_layer->SetScrollLayerAndClipLayerByIds(
+      scroll_layer_ptr->id(),
+      clip_layer->id());
+  horizontal_scrollbar_layer->SetScrollLayerAndClipLayerByIds(
+      scroll_layer_ptr->id(),
+      clip_layer->id());
+
+  active_tree->PushPageScaleFromMainThread(1.0f, 1.0f, 4.0f);
+  active_tree->SetViewportLayersFromIds(
+      Layer::INVALID_ID,  // Overscroll
+      page_scale_layer_ptr->id(),
+      scroll_layer_ptr->id(),
+      Layer::INVALID_ID);  // Outer Scroll
+
+  EXPECT_TRUE(vertical_scrollbar_layer->hide_layer_and_subtree());
+  EXPECT_TRUE(horizontal_scrollbar_layer->hide_layer_and_subtree());
+
+  active_tree->PushPageScaleFromMainThread(1.05f, 1.0f, 4.0f);
+  EXPECT_TRUE(vertical_scrollbar_layer->hide_layer_and_subtree());
+  EXPECT_TRUE(horizontal_scrollbar_layer->hide_layer_and_subtree());
+
+  active_tree->PushPageScaleFromMainThread(1.1f, 1.0f, 4.0f);
+  EXPECT_FALSE(vertical_scrollbar_layer->hide_layer_and_subtree());
+  EXPECT_FALSE(horizontal_scrollbar_layer->hide_layer_and_subtree());
+
+  active_tree->PushPageScaleFromMainThread(1.5f, 1.0f, 4.0f);
+  EXPECT_FALSE(vertical_scrollbar_layer->hide_layer_and_subtree());
+  EXPECT_FALSE(horizontal_scrollbar_layer->hide_layer_and_subtree());
+}
+
 TEST_F(LayerTreeImplTest,
        HitCheckingTouchHandlerRegionsForSinglePositionedLayer) {
   scoped_ptr<LayerImpl> root =
diff --git a/cc/trees/layer_tree_settings.cc b/cc/trees/layer_tree_settings.cc
index d21c992..d578daf 100644
--- a/cc/trees/layer_tree_settings.cc
+++ b/cc/trees/layer_tree_settings.cc
@@ -29,11 +29,13 @@
       use_distance_field_text(false),
       gpu_rasterization_enabled(false),
       gpu_rasterization_forced(false),
+      gpu_rasterization_msaa_sample_count(0),
       create_low_res_tiling(false),
       scrollbar_animator(NoAnimator),
       scrollbar_fade_delay_ms(0),
       scrollbar_fade_resize_delay_ms(0),
       scrollbar_fade_duration_ms(0),
+      scrollbar_show_scale_threshold(1.0f),
       solid_color_scrollbar_color(SK_ColorWHITE),
       calculate_top_controls_position(false),
       timeout_and_draw_when_animation_checkerboards(true),
diff --git a/cc/trees/layer_tree_settings.h b/cc/trees/layer_tree_settings.h
index f1bde32..597a279 100644
--- a/cc/trees/layer_tree_settings.h
+++ b/cc/trees/layer_tree_settings.h
@@ -35,6 +35,7 @@
   bool use_distance_field_text;
   bool gpu_rasterization_enabled;
   bool gpu_rasterization_forced;
+  int gpu_rasterization_msaa_sample_count;
   bool create_low_res_tiling;
 
   enum ScrollbarAnimator {
@@ -46,6 +47,7 @@
   int scrollbar_fade_delay_ms;
   int scrollbar_fade_resize_delay_ms;
   int scrollbar_fade_duration_ms;
+  float scrollbar_show_scale_threshold;
   SkColor solid_color_scrollbar_color;
   bool calculate_top_controls_position;
   bool timeout_and_draw_when_animation_checkerboards;
diff --git a/cc/trees/property_tree_builder.cc b/cc/trees/property_tree_builder.cc
index 5573c32..1afd4bd 100644
--- a/cc/trees/property_tree_builder.cc
+++ b/cc/trees/property_tree_builder.cc
@@ -194,8 +194,8 @@
   // record, the slight difference should be inconsequential).
   gfx::Vector2dF position = layer->position().OffsetFromOrigin();
   if (!layer->scroll_parent()) {
-    position -= gfx::Vector2dF(layer->TotalScrollOffset().x(),
-        layer->TotalScrollOffset().y());
+    position -= gfx::Vector2dF(layer->CurrentScrollOffset().x(),
+                               layer->CurrentScrollOffset().y());
   }
 
   position += parent_offset;
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc
index 83e6bbe..dc58d39 100644
--- a/cc/trees/single_thread_proxy.cc
+++ b/cc/trees/single_thread_proxy.cc
@@ -5,7 +5,7 @@
 #include "cc/trees/single_thread_proxy.h"
 
 #include "base/auto_reset.h"
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/debug/benchmark_instrumentation.h"
 #include "cc/output/context_provider.h"
 #include "cc/output/output_surface.h"
@@ -45,7 +45,6 @@
       next_frame_is_newly_committed_frame_(false),
       inside_draw_(false),
       defer_commits_(false),
-      commit_was_deferred_(false),
       commit_requested_(false),
       inside_synchronous_composite_(false),
       output_surface_creation_requested_(false),
@@ -91,6 +90,7 @@
   if (layer_tree_host_->settings().single_thread_proxy_scheduler &&
       !scheduler_on_impl_thread_) {
     SchedulerSettings scheduler_settings(layer_tree_host_->settings());
+    // SingleThreadProxy should run in main thread low latency mode.
     scheduler_settings.main_thread_should_always_be_low_latency = true;
     scheduler_on_impl_thread_ =
         Scheduler::Create(this,
@@ -135,7 +135,7 @@
     scoped_ptr<OutputSurface> output_surface) {
   DCHECK(Proxy::IsMainThread());
   DCHECK(layer_tree_host_->output_surface_lost());
-  output_surface_creation_requested_ = false;
+  DCHECK(output_surface_creation_requested_);
   renderer_capabilities_for_main_thread_ = RendererCapabilities();
 
   bool success;
@@ -153,7 +153,10 @@
       scheduler_on_impl_thread_->DidCreateAndInitializeOutputSurface();
     else if (!inside_synchronous_composite_)
       SetNeedsCommit();
+    output_surface_creation_requested_ = false;
   } else {
+    // DidFailToInitializeOutputSurface is treated as a RequestNewOutputSurface,
+    // and so output_surface_creation_requested remains true.
     layer_tree_host_->DidFailToInitializeOutputSurface();
   }
 }
@@ -309,10 +312,7 @@
     TRACE_EVENT_ASYNC_END0("cc", "SingleThreadProxy::SetDeferCommits", this);
 
   defer_commits_ = defer_commits;
-  if (!defer_commits_ && commit_was_deferred_) {
-    commit_was_deferred_ = false;
-    BeginMainFrame();
-  }
+  scheduler_on_impl_thread_->SetDeferCommits(defer_commits);
 }
 
 bool SingleThreadProxy::CommitRequested() const {
@@ -434,6 +434,9 @@
     // the pending tree is not actually ready in the SingleThreadProxy.
     layer_tree_host_impl_->SetRequiresHighResToDraw();
 
+    // Synchronously call to CommitComplete. Resetting
+    // |commit_blocking_task_runner| would make sure all tasks posted during
+    // commit/activation before CommitComplete.
     CommitComplete();
   }
 
@@ -673,9 +676,10 @@
 
 void SingleThreadProxy::BeginMainFrame() {
   if (defer_commits_) {
-    DCHECK(!commit_was_deferred_);
-    commit_was_deferred_ = true;
-    layer_tree_host_->DidDeferCommit();
+    TRACE_EVENT_INSTANT0("cc", "EarlyOut_DeferCommit",
+                         TRACE_EVENT_SCOPE_THREAD);
+    BeginMainFrameAbortedOnImplThread(
+        CommitEarlyOutReason::ABORTED_DEFERRED_COMMIT);
     return;
   }
 
diff --git a/cc/trees/single_thread_proxy.h b/cc/trees/single_thread_proxy.h
index a6c348a..132610a 100644
--- a/cc/trees/single_thread_proxy.h
+++ b/cc/trees/single_thread_proxy.h
@@ -114,13 +114,14 @@
   // Called by the legacy path where RenderWidget does the scheduling.
   void CompositeImmediately(base::TimeTicks frame_begin_time);
 
- private:
+ protected:
   SingleThreadProxy(
       LayerTreeHost* layer_tree_host,
       LayerTreeHostSingleThreadClient* client,
       scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
       scoped_ptr<BeginFrameSource> external_begin_frame_source);
 
+ private:
   void BeginMainFrame();
   void BeginMainFrameAbortedOnImplThread(CommitEarlyOutReason reason);
   void DoAnimate();
@@ -154,7 +155,6 @@
 
   bool inside_draw_;
   bool defer_commits_;
-  bool commit_was_deferred_;
   bool commit_requested_;
   bool inside_synchronous_composite_;
 
diff --git a/cc/trees/thread_proxy.cc b/cc/trees/thread_proxy.cc
index 329b3e8..88f1314 100644
--- a/cc/trees/thread_proxy.cc
+++ b/cc/trees/thread_proxy.cc
@@ -9,9 +9,9 @@
 
 #include "base/auto_reset.h"
 #include "base/bind.h"
-#include "base/debug/trace_event.h"
-#include "base/debug/trace_event_argument.h"
-#include "base/debug/trace_event_synthetic_delay.h"
+#include "base/trace_event/trace_event.h"
+#include "base/trace_event/trace_event_argument.h"
+#include "base/trace_event/trace_event_synthetic_delay.h"
 #include "cc/base/swap_promise.h"
 #include "cc/debug/benchmark_instrumentation.h"
 #include "cc/debug/devtools_instrumentation.h"
@@ -452,13 +452,16 @@
   else
     TRACE_EVENT_ASYNC_END0("cc", "ThreadProxy::SetDeferCommits", this);
 
-  if (!main().defer_commits && main().pending_deferred_commit) {
-    Proxy::MainThreadTaskRunner()->PostTask(
-        FROM_HERE,
-        base::Bind(&ThreadProxy::BeginMainFrame,
-                   main_thread_weak_ptr_,
-                   base::Passed(&main().pending_deferred_commit)));
-  }
+  Proxy::ImplThreadTaskRunner()->PostTask(
+      FROM_HERE,
+      base::Bind(&ThreadProxy::SetDeferCommitsOnImplThread,
+                 impl_thread_weak_ptr_,
+                 defer_commits));
+}
+
+void ThreadProxy::SetDeferCommitsOnImplThread(bool defer_commits) const {
+  DCHECK(IsImplThread());
+  impl().scheduler->SetDeferCommits(defer_commits);
 }
 
 bool ThreadProxy::CommitRequested() const {
@@ -701,10 +704,12 @@
   DCHECK(IsMainThread());
 
   if (main().defer_commits) {
-    main().pending_deferred_commit = begin_main_frame_state.Pass();
-    layer_tree_host()->DidDeferCommit();
-    TRACE_EVENT_INSTANT0(
-        "cc", "EarlyOut_DeferCommits", TRACE_EVENT_SCOPE_THREAD);
+    TRACE_EVENT_INSTANT0("cc", "EarlyOut_DeferCommit",
+                         TRACE_EVENT_SCOPE_THREAD);
+    Proxy::ImplThreadTaskRunner()->PostTask(
+        FROM_HERE, base::Bind(&ThreadProxy::BeginMainFrameAbortedOnImplThread,
+                              impl_thread_weak_ptr_,
+                              CommitEarlyOutReason::ABORTED_DEFERRED_COMMIT));
     return;
   }
 
diff --git a/cc/trees/thread_proxy.h b/cc/trees/thread_proxy.h
index 0d15b5a..b4050bd 100644
--- a/cc/trees/thread_proxy.h
+++ b/cc/trees/thread_proxy.h
@@ -79,7 +79,6 @@
 
     RendererCapabilities renderer_capabilities_main_thread_copy;
 
-    scoped_ptr<BeginMainFrameAndCommitState> pending_deferred_commit;
     base::WeakPtrFactory<ThreadProxy> weak_factory;
   };
 
@@ -283,6 +282,7 @@
   void MainThreadHasStoppedFlingingOnImplThread();
   void SetInputThrottledUntilCommitOnImplThread(bool is_throttled);
   void SetDebugStateOnImplThread(const LayerTreeDebugState& debug_state);
+  void SetDeferCommitsOnImplThread(bool defer_commits) const;
 
   LayerTreeHost* layer_tree_host();
   const LayerTreeHost* layer_tree_host() const;
diff --git a/cc/trees/tree_synchronizer.cc b/cc/trees/tree_synchronizer.cc
index 2e29529..095195f 100644
--- a/cc/trees/tree_synchronizer.cc
+++ b/cc/trees/tree_synchronizer.cc
@@ -8,8 +8,8 @@
 
 #include "base/containers/hash_tables.h"
 #include "base/containers/scoped_ptr_hash_map.h"
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
+#include "base/trace_event/trace_event.h"
 #include "cc/animation/scrollbar_animation_controller.h"
 #include "cc/input/scrollbar.h"
 #include "cc/layers/layer.h"
diff --git a/crypto/p224_spake.cc b/crypto/p224_spake.cc
index 343f3fc..a6dec40 100644
--- a/crypto/p224_spake.cc
+++ b/crypto/p224_spake.cc
@@ -131,7 +131,7 @@
   next_message_ = Xstar.ToString();
 }
 
-const std::string& P224EncryptedKeyExchange::GetMessage() {
+const std::string& P224EncryptedKeyExchange::GetNextMessage() {
   if (state_ == kStateInitial) {
     state_ = kStateRecvDH;
     return next_message_;
@@ -140,7 +140,7 @@
     return next_message_;
   }
 
-  LOG(FATAL) << "P224EncryptedKeyExchange::GetMessage called in"
+  LOG(FATAL) << "P224EncryptedKeyExchange::GetNextMessage called in"
                 " bad state " << state_;
   next_message_ = "";
   return next_message_;
diff --git a/crypto/p224_spake.h b/crypto/p224_spake.h
index 08769b7..556b15c 100644
--- a/crypto/p224_spake.h
+++ b/crypto/p224_spake.h
@@ -23,10 +23,10 @@
 // permitted authentication attempts otherwise they get many one-shot oracles.)
 //
 // The protocol requires several RTTs (actually two, but you shouldn't assume
-// that.) To use the object, call GetMessage() and pass that message to the
+// that.) To use the object, call GetNextMessage() and pass that message to the
 // peer. Get a message from the peer and feed it into ProcessMessage. Then
 // examine the return value of ProcessMessage:
-//   kResultPending: Another round is required. Call GetMessage and repeat.
+//   kResultPending: Another round is required. Call GetNextMessage and repeat.
 //   kResultFailed: The authentication has failed. You can get a human readable
 //       error message by calling error().
 //   kResultSuccess: The authentication was successful.
@@ -55,12 +55,12 @@
   P224EncryptedKeyExchange(PeerType peer_type,
                            const base::StringPiece& password);
 
-  // GetMessage returns a byte string which must be passed to the other party
-  // in the authentication.
-  const std::string& GetMessage();
+  // GetNextMessage returns a byte string which must be passed to the other
+  // party in the authentication.
+  const std::string& GetNextMessage();
 
   // ProcessMessage processes a message which must have been generated by a
-  // call to GetMessage() by the other party.
+  // call to GetNextMessage() by the other party.
   Result ProcessMessage(const base::StringPiece& message);
 
   // In the event that ProcessMessage() returns kResultFailed, error will
@@ -95,7 +95,7 @@
 
   State state_;
   const bool is_server_;
-  // next_message_ contains a value for GetMessage() to return.
+  // next_message_ contains a value for GetNextMessage() to return.
   std::string next_message_;
   std::string error_;
 
diff --git a/crypto/p224_spake_unittest.cc b/crypto/p224_spake_unittest.cc
index 6dd8e88..15b5be2 100644
--- a/crypto/p224_spake_unittest.cc
+++ b/crypto/p224_spake_unittest.cc
@@ -23,8 +23,8 @@
                  bool is_password_same) {
   for (;;) {
     std::string client_message, server_message;
-    client_message = client->GetMessage();
-    server_message = server->GetMessage();
+    client_message = client->GetNextMessage();
+    server_message = server->GetNextMessage();
 
     P224EncryptedKeyExchange::Result client_result, server_result;
     client_result = client->ProcessMessage(server_message);
@@ -85,13 +85,13 @@
                                   kPassword);
   server.SetXForTesting("Server x");
 
-  std::string client_message = client.GetMessage();
+  std::string client_message = client.GetNextMessage();
   EXPECT_EQ(
       "3508EF7DECC8AB9F9C439FBB0154288BBECC0A82E8448F4CF29554EB"
       "BE9D486686226255EAD1D077C635B1A41F46AC91D7F7F32CED9EC3E0",
       HexEncodeString(client_message));
 
-  std::string server_message = server.GetMessage();
+  std::string server_message = server.GetNextMessage();
   EXPECT_EQ(
       "A3088C18B75D2C2B107105661AEC85424777475EB29F1DDFB8C14AFB"
       "F1603D0DF38413A00F420ACF2059E7997C935F5A957A193D09A2B584",
@@ -129,8 +129,8 @@
 
     for (unsigned round = 0;; round++) {
       std::string client_message, server_message;
-      client_message = client.GetMessage();
-      server_message = server.GetMessage();
+      client_message = client.GetNextMessage();
+      server_message = server.GetNextMessage();
 
       if ((rand & 1) == round) {
         const bool server_or_client = rand & 2;
diff --git a/gpu/BUILD.gn b/gpu/BUILD.gn
index 1c1445b..448fe05 100644
--- a/gpu/BUILD.gn
+++ b/gpu/BUILD.gn
@@ -64,197 +64,214 @@
   ]
 }
 
-test("gl_tests") {
-  sources = [
-    "command_buffer/tests/compressed_texture_test.cc",
-    "command_buffer/tests/gl_bind_uniform_location_unittest.cc",
-    "command_buffer/tests/gl_chromium_framebuffer_multisample_unittest.cc",
-    "command_buffer/tests/gl_chromium_path_rendering_unittest.cc",
-    "command_buffer/tests/gl_clear_framebuffer_unittest.cc",
-    "command_buffer/tests/gl_copy_texture_CHROMIUM_unittest.cc",
-    "command_buffer/tests/gl_depth_texture_unittest.cc",
-    "command_buffer/tests/gl_gpu_memory_buffer_unittest.cc",
-    "command_buffer/tests/gl_lose_context_chromium_unittest.cc",
-    "command_buffer/tests/gl_manager.cc",
-    "command_buffer/tests/gl_manager.h",
-    "command_buffer/tests/gl_pointcoord_unittest.cc",
-    "command_buffer/tests/gl_program_unittest.cc",
-    "command_buffer/tests/gl_query_unittest.cc",
-    "command_buffer/tests/gl_readback_unittest.cc",
-    "command_buffer/tests/gl_shared_resources_unittest.cc",
-    "command_buffer/tests/gl_stream_draw_unittest.cc",
-    "command_buffer/tests/gl_test_utils.cc",
-    "command_buffer/tests/gl_test_utils.h",
-    "command_buffer/tests/gl_tests_main.cc",
-    "command_buffer/tests/gl_texture_mailbox_unittest.cc",
-    "command_buffer/tests/gl_texture_storage_unittest.cc",
-    "command_buffer/tests/gl_unittest.cc",
-    "command_buffer/tests/gl_unittests_android.cc",
-    "command_buffer/tests/gl_virtual_contexts_unittest.cc",
-    "command_buffer/tests/occlusion_query_unittest.cc",
-  ]
+if (!is_win || link_chrome_on_windows) {
+  test("gl_tests") {
+    sources = [
+      "command_buffer/tests/compressed_texture_test.cc",
+      "command_buffer/tests/gl_bind_uniform_location_unittest.cc",
+      "command_buffer/tests/gl_chromium_framebuffer_multisample_unittest.cc",
+      "command_buffer/tests/gl_chromium_path_rendering_unittest.cc",
+      "command_buffer/tests/gl_clear_framebuffer_unittest.cc",
+      "command_buffer/tests/gl_copy_texture_CHROMIUM_unittest.cc",
+      "command_buffer/tests/gl_depth_texture_unittest.cc",
+      "command_buffer/tests/gl_gpu_memory_buffer_unittest.cc",
+      "command_buffer/tests/gl_lose_context_chromium_unittest.cc",
+      "command_buffer/tests/gl_manager.cc",
+      "command_buffer/tests/gl_manager.h",
+      "command_buffer/tests/gl_pointcoord_unittest.cc",
+      "command_buffer/tests/gl_program_unittest.cc",
+      "command_buffer/tests/gl_query_unittest.cc",
+      "command_buffer/tests/gl_readback_unittest.cc",
+      "command_buffer/tests/gl_shared_resources_unittest.cc",
+      "command_buffer/tests/gl_stream_draw_unittest.cc",
+      "command_buffer/tests/gl_test_utils.cc",
+      "command_buffer/tests/gl_test_utils.h",
+      "command_buffer/tests/gl_tests_main.cc",
+      "command_buffer/tests/gl_texture_mailbox_unittest.cc",
+      "command_buffer/tests/gl_texture_storage_unittest.cc",
+      "command_buffer/tests/gl_unittest.cc",
+      "command_buffer/tests/gl_unittests_android.cc",
+      "command_buffer/tests/gl_virtual_contexts_unittest.cc",
+      "command_buffer/tests/occlusion_query_unittest.cc",
+    ]
 
-  defines = [ "GL_GLEXT_PROTOTYPES" ]
+    defines = [ "GL_GLEXT_PROTOTYPES" ]
 
-  deps = [
-    ":gpu",
-    ":test_support",
-    "//base",
-    "//base/test:test_support",
-    "//base/third_party/dynamic_annotations",
-    "//testing/gmock",
-    "//testing/gtest",
-    "//third_party/angle:translator",
-    "//ui/gfx",
-    "//ui/gfx:test_support",
-    "//ui/gfx/geometry",
-    "//ui/gl",
-    "//gpu/command_buffer/common:gles2_utils",
-    "//gpu/command_buffer/client:gles2_c_lib",
-    "//gpu/command_buffer/client:gles2_implementation",
-  ]
+    deps = [
+      ":gpu",
+      ":test_support",
+      "//base",
+      "//base/test:test_support",
+      "//base/third_party/dynamic_annotations",
+      "//testing/gmock",
+      "//testing/gtest",
+      "//third_party/angle:translator",
+      "//ui/gfx",
+      "//ui/gfx:test_support",
+      "//ui/gfx/geometry",
+      "//ui/gl",
+      "//gpu/command_buffer/common:gles2_utils",
+      "//gpu/command_buffer/client:gles2_c_lib",
+      "//gpu/command_buffer/client:gles2_implementation",
+    ]
 
-  libs = []
+    libs = []
 
-  if (is_android) {
-    deps += [ "//testing/android:native_test_native_code" ]
-    libs += [ "android" ]
+    if (is_android) {
+      deps += [ "//testing/android:native_test_native_code" ]
+      libs += [ "android" ]
+    }
+
+    # TODO(GYP)
+    #     ['OS == "win"', {
+    #       'dependencies': [
+    #         '../third_party/angle/src/build_angle.gyp:libEGL',
+    #         '../third_party/angle/src/build_angle.gyp:libGLESv2',
+    #       ],
+    #     }],
   }
 
-  # TODO(GYP)
-  #     ['OS == "win"', {
-  #       'dependencies': [
-  #         '../third_party/angle/src/build_angle.gyp:libEGL',
-  #         '../third_party/angle/src/build_angle.gyp:libGLESv2',
-  #       ],
-  #     }],
-}
+  test("gpu_unittests") {
+    sources = [
+      "command_buffer/client/buffer_tracker_unittest.cc",
+      "command_buffer/client/client_test_helper.cc",
+      "command_buffer/client/client_test_helper.h",
+      "command_buffer/client/cmd_buffer_helper_test.cc",
+      "command_buffer/client/fenced_allocator_test.cc",
+      "command_buffer/client/gles2_implementation_unittest.cc",
+      "command_buffer/client/mapped_memory_unittest.cc",
+      "command_buffer/client/query_tracker_unittest.cc",
+      "command_buffer/client/ring_buffer_test.cc",
+      "command_buffer/client/transfer_buffer_unittest.cc",
+      "command_buffer/client/vertex_array_object_manager_unittest.cc",
+      "command_buffer/common/bitfield_helpers_test.cc",
+      "command_buffer/common/command_buffer_mock.cc",
+      "command_buffer/common/command_buffer_mock.h",
+      "command_buffer/common/command_buffer_shared_test.cc",
+      "command_buffer/common/debug_marker_manager_unittest.cc",
+      "command_buffer/common/gles2_cmd_format_test.cc",
+      "command_buffer/common/gles2_cmd_format_test_autogen.h",
+      "command_buffer/common/gles2_cmd_utils_unittest.cc",
+      "command_buffer/common/id_allocator_test.cc",
+      "command_buffer/common/trace_event.h",
+      "command_buffer/common/unittest_main.cc",
+      "command_buffer/service/async_pixel_transfer_delegate_mock.h",
+      "command_buffer/service/async_pixel_transfer_delegate_mock.cc",
+      "command_buffer/service/async_pixel_transfer_manager_mock.h",
+      "command_buffer/service/async_pixel_transfer_manager_mock.cc",
+      "command_buffer/service/buffer_manager_unittest.cc",
+      "command_buffer/service/cmd_parser_test.cc",
+      "command_buffer/service/command_buffer_service_unittest.cc",
+      "command_buffer/service/common_decoder_unittest.cc",
+      "command_buffer/service/context_group_unittest.cc",
+      "command_buffer/service/feature_info_unittest.cc",
+      "command_buffer/service/framebuffer_manager_unittest.cc",
+      "command_buffer/service/gles2_cmd_decoder_unittest.cc",
+      "command_buffer/service/gles2_cmd_decoder_unittest.h",
+      "command_buffer/service/gles2_cmd_decoder_unittest_0_autogen.h",
+      "command_buffer/service/gles2_cmd_decoder_unittest_1.cc",
+      "command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h",
+      "command_buffer/service/gles2_cmd_decoder_unittest_2.cc",
+      "command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h",
+      "command_buffer/service/gles2_cmd_decoder_unittest_3.cc",
+      "command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h",
+      "command_buffer/service/gles2_cmd_decoder_unittest_async_pixel.cc",
+      "command_buffer/service/gles2_cmd_decoder_unittest_base.cc",
+      "command_buffer/service/gles2_cmd_decoder_unittest_base.h",
+      "command_buffer/service/gles2_cmd_decoder_unittest_context_state.cc",
+      "command_buffer/service/gles2_cmd_decoder_unittest_drawing.cc",
+      "command_buffer/service/gles2_cmd_decoder_unittest_extensions.cc",
+      "command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc",
+      "command_buffer/service/gles2_cmd_decoder_unittest_programs.cc",
+      "command_buffer/service/gles2_cmd_decoder_unittest_textures.cc",
+      "command_buffer/service/gles2_cmd_decoder_unittest_attribs.cc",
+      "command_buffer/service/gles2_cmd_decoder_unittest_valuebuffer.cc",
+      "command_buffer/service/gl_surface_mock.cc",
+      "command_buffer/service/gl_surface_mock.h",
+      "command_buffer/service/gpu_scheduler_unittest.cc",
+      "command_buffer/service/gpu_service_test.cc",
+      "command_buffer/service/gpu_service_test.h",
+      "command_buffer/service/id_manager_unittest.cc",
+      "command_buffer/service/mailbox_manager_unittest.cc",
+      "command_buffer/service/memory_program_cache_unittest.cc",
+      "command_buffer/service/mocks.cc",
+      "command_buffer/service/mocks.h",
+      "command_buffer/service/program_manager_unittest.cc",
+      "command_buffer/service/valuebuffer_manager_unittest.cc",
+      "command_buffer/service/query_manager_unittest.cc",
+      "command_buffer/service/renderbuffer_manager_unittest.cc",
+      "command_buffer/service/program_cache_unittest.cc",
+      "command_buffer/service/shader_manager_unittest.cc",
+      "command_buffer/service/shader_translator_unittest.cc",
+      "command_buffer/service/shader_translator_cache_unittest.cc",
+      "command_buffer/service/test_helper.cc",
+      "command_buffer/service/test_helper.h",
+      "command_buffer/service/texture_manager_unittest.cc",
+      "command_buffer/service/transfer_buffer_manager_unittest.cc",
+      "command_buffer/service/vertex_attrib_manager_unittest.cc",
+      "command_buffer/service/vertex_array_manager_unittest.cc",
+      "command_buffer/service/gpu_tracer_unittest.cc",
+      "config/gpu_blacklist_unittest.cc",
+      "config/gpu_control_list_entry_unittest.cc",
+      "config/gpu_control_list_number_info_unittest.cc",
+      "config/gpu_control_list_os_info_unittest.cc",
+      "config/gpu_control_list_unittest.cc",
+      "config/gpu_control_list_version_info_unittest.cc",
+      "config/gpu_driver_bug_list_unittest.cc",
+      "config/gpu_info_collector_unittest.cc",
+      "config/gpu_info_unittest.cc",
+      "config/gpu_test_config_unittest.cc",
+      "config/gpu_test_expectations_parser_unittest.cc",
+      "config/gpu_util_unittest.cc",
+    ]
 
-test("gpu_unittests") {
-  sources = [
-    "command_buffer/client/buffer_tracker_unittest.cc",
-    "command_buffer/client/client_test_helper.cc",
-    "command_buffer/client/client_test_helper.h",
-    "command_buffer/client/cmd_buffer_helper_test.cc",
-    "command_buffer/client/fenced_allocator_test.cc",
-    "command_buffer/client/gles2_implementation_unittest.cc",
-    "command_buffer/client/mapped_memory_unittest.cc",
-    "command_buffer/client/query_tracker_unittest.cc",
-    "command_buffer/client/program_info_manager_unittest.cc",
-    "command_buffer/client/ring_buffer_test.cc",
-    "command_buffer/client/transfer_buffer_unittest.cc",
-    "command_buffer/client/vertex_array_object_manager_unittest.cc",
-    "command_buffer/common/bitfield_helpers_test.cc",
-    "command_buffer/common/command_buffer_mock.cc",
-    "command_buffer/common/command_buffer_mock.h",
-    "command_buffer/common/command_buffer_shared_test.cc",
-    "command_buffer/common/debug_marker_manager_unittest.cc",
-    "command_buffer/common/gles2_cmd_format_test.cc",
-    "command_buffer/common/gles2_cmd_format_test_autogen.h",
-    "command_buffer/common/gles2_cmd_utils_unittest.cc",
-    "command_buffer/common/id_allocator_test.cc",
-    "command_buffer/common/trace_event.h",
-    "command_buffer/common/unittest_main.cc",
-    "command_buffer/service/async_pixel_transfer_delegate_mock.h",
-    "command_buffer/service/async_pixel_transfer_delegate_mock.cc",
-    "command_buffer/service/async_pixel_transfer_manager_mock.h",
-    "command_buffer/service/async_pixel_transfer_manager_mock.cc",
-    "command_buffer/service/buffer_manager_unittest.cc",
-    "command_buffer/service/cmd_parser_test.cc",
-    "command_buffer/service/command_buffer_service_unittest.cc",
-    "command_buffer/service/common_decoder_unittest.cc",
-    "command_buffer/service/context_group_unittest.cc",
-    "command_buffer/service/feature_info_unittest.cc",
-    "command_buffer/service/framebuffer_manager_unittest.cc",
-    "command_buffer/service/gles2_cmd_decoder_unittest.cc",
-    "command_buffer/service/gles2_cmd_decoder_unittest.h",
-    "command_buffer/service/gles2_cmd_decoder_unittest_0_autogen.h",
-    "command_buffer/service/gles2_cmd_decoder_unittest_1.cc",
-    "command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h",
-    "command_buffer/service/gles2_cmd_decoder_unittest_2.cc",
-    "command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h",
-    "command_buffer/service/gles2_cmd_decoder_unittest_3.cc",
-    "command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h",
-    "command_buffer/service/gles2_cmd_decoder_unittest_async_pixel.cc",
-    "command_buffer/service/gles2_cmd_decoder_unittest_base.cc",
-    "command_buffer/service/gles2_cmd_decoder_unittest_base.h",
-    "command_buffer/service/gles2_cmd_decoder_unittest_context_state.cc",
-    "command_buffer/service/gles2_cmd_decoder_unittest_drawing.cc",
-    "command_buffer/service/gles2_cmd_decoder_unittest_extensions.cc",
-    "command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc",
-    "command_buffer/service/gles2_cmd_decoder_unittest_programs.cc",
-    "command_buffer/service/gles2_cmd_decoder_unittest_textures.cc",
-    "command_buffer/service/gles2_cmd_decoder_unittest_attribs.cc",
-    "command_buffer/service/gles2_cmd_decoder_unittest_valuebuffer.cc",
-    "command_buffer/service/gl_surface_mock.cc",
-    "command_buffer/service/gl_surface_mock.h",
-    "command_buffer/service/gpu_scheduler_unittest.cc",
-    "command_buffer/service/gpu_service_test.cc",
-    "command_buffer/service/gpu_service_test.h",
-    "command_buffer/service/id_manager_unittest.cc",
-    "command_buffer/service/mailbox_manager_unittest.cc",
-    "command_buffer/service/memory_program_cache_unittest.cc",
-    "command_buffer/service/mocks.cc",
-    "command_buffer/service/mocks.h",
-    "command_buffer/service/program_manager_unittest.cc",
-    "command_buffer/service/valuebuffer_manager_unittest.cc",
-    "command_buffer/service/query_manager_unittest.cc",
-    "command_buffer/service/renderbuffer_manager_unittest.cc",
-    "command_buffer/service/program_cache_unittest.cc",
-    "command_buffer/service/shader_manager_unittest.cc",
-    "command_buffer/service/shader_translator_unittest.cc",
-    "command_buffer/service/shader_translator_cache_unittest.cc",
-    "command_buffer/service/test_helper.cc",
-    "command_buffer/service/test_helper.h",
-    "command_buffer/service/texture_manager_unittest.cc",
-    "command_buffer/service/transfer_buffer_manager_unittest.cc",
-    "command_buffer/service/vertex_attrib_manager_unittest.cc",
-    "command_buffer/service/vertex_array_manager_unittest.cc",
-    "command_buffer/service/gpu_tracer_unittest.cc",
-    "config/gpu_blacklist_unittest.cc",
-    "config/gpu_control_list_entry_unittest.cc",
-    "config/gpu_control_list_number_info_unittest.cc",
-    "config/gpu_control_list_os_info_unittest.cc",
-    "config/gpu_control_list_unittest.cc",
-    "config/gpu_control_list_version_info_unittest.cc",
-    "config/gpu_driver_bug_list_unittest.cc",
-    "config/gpu_info_collector_unittest.cc",
-    "config/gpu_info_unittest.cc",
-    "config/gpu_test_config_unittest.cc",
-    "config/gpu_test_expectations_parser_unittest.cc",
-    "config/gpu_util_unittest.cc",
-  ]
+    deps = [
+      ":gpu",
+      ":test_support",
+      "//base",
+      "//base/test:test_support",
+      "//base/third_party/dynamic_annotations",
+      "//testing/gmock",
+      "//testing/gtest",
+      "//third_party/angle:translator",
+      "//ui/gfx",
+      "//ui/gfx:test_support",
+      "//ui/gfx/geometry",
+      "//ui/gl",
+      "//gpu/command_buffer/common:gles2_utils",
+      "//gpu/command_buffer/client:gles2_c_lib",
+      "//gpu/command_buffer/client:gles2_implementation",
+    ]
+  }
 
-  deps = [
-    ":gpu",
-    ":test_support",
-    "//base",
-    "//base/test:test_support",
-    "//base/third_party/dynamic_annotations",
-    "//testing/gmock",
-    "//testing/gtest",
-    "//third_party/angle:translator",
-    "//ui/gfx",
-    "//ui/gfx:test_support",
-    "//ui/gfx/geometry",
-    "//ui/gl",
-    "//gpu/command_buffer/common:gles2_utils",
-    "//gpu/command_buffer/client:gles2_c_lib",
-    "//gpu/command_buffer/client:gles2_implementation",
-  ]
-}
+  test("gpu_perftests") {
+    sources = [
+      "perftests/run_all_tests.cc",
+      "perftests/texture_upload_perftest.cc",
+    ]
 
-test("angle_unittests") {
-  sources = [
-    "angle_unittest_main.cc",
-  ]
+    deps = [
+      "//base",
+      "//base/test:test_support",
+      "//testing/gtest",
+      "//testing/perf",
+      "//ui/gfx/geometry",
+      "//ui/gl",
+    ]
+  }
 
-  deps = [
-    "//base",
-    "//base/test:test_support",
-    "//base/third_party/dynamic_annotations",
-    "//testing/gmock",
-    "//testing/gtest",
-    "//third_party/angle:translator_static",
-  ]
+  test("angle_unittests") {
+    sources = [
+      "angle_unittest_main.cc",
+    ]
+
+    deps = [
+      "//base",
+      "//base/test:test_support",
+      "//base/third_party/dynamic_annotations",
+      "//testing/gmock",
+      "//testing/gtest",
+      "//third_party/angle:translator_static",
+    ]
+  }
 }
diff --git a/gpu/GLES2/gl2chromium_autogen.h b/gpu/GLES2/gl2chromium_autogen.h
index 1110c0a..88bed32 100644
--- a/gpu/GLES2/gl2chromium_autogen.h
+++ b/gpu/GLES2/gl2chromium_autogen.h
@@ -47,6 +47,7 @@
 #define glCopyBufferSubData GLES2_GET_FUN(CopyBufferSubData)
 #define glCopyTexImage2D GLES2_GET_FUN(CopyTexImage2D)
 #define glCopyTexSubImage2D GLES2_GET_FUN(CopyTexSubImage2D)
+#define glCopyTexSubImage3D GLES2_GET_FUN(CopyTexSubImage3D)
 #define glCreateProgram GLES2_GET_FUN(CreateProgram)
 #define glCreateShader GLES2_GET_FUN(CreateShader)
 #define glCullFace GLES2_GET_FUN(CullFace)
@@ -162,6 +163,7 @@
 #define glTexStorage3D GLES2_GET_FUN(TexStorage3D)
 #define glTexSubImage2D GLES2_GET_FUN(TexSubImage2D)
 #define glTexSubImage3D GLES2_GET_FUN(TexSubImage3D)
+#define glTransformFeedbackVaryings GLES2_GET_FUN(TransformFeedbackVaryings)
 #define glUniform1f GLES2_GET_FUN(Uniform1f)
 #define glUniform1fv GLES2_GET_FUN(Uniform1fv)
 #define glUniform1i GLES2_GET_FUN(Uniform1i)
diff --git a/gpu/PRESUBMIT.py b/gpu/PRESUBMIT.py
index a6f2dc3..53fc153 100644
--- a/gpu/PRESUBMIT.py
+++ b/gpu/PRESUBMIT.py
@@ -11,7 +11,6 @@
 def GetPreferredTryMasters(project, change):
   return {
     'tryserver.chromium.gpu': {
-      'linux_gpu': set(['defaulttests']),
       'win_gpu': set(['defaulttests']),
     }
   }
diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py
index 577861a..b0884b6 100755
--- a/gpu/command_buffer/build_gles2_cmd_buffer.py
+++ b/gpu/command_buffer/build_gles2_cmd_buffer.py
@@ -939,6 +939,16 @@
       'GL_PIXEL_PACK_BUFFER',
     ],
   },
+  'BufferMode': {
+    'type': 'GLenum',
+    'valid': [
+      'GL_INTERLEAVED_ATTRIBS',
+      'GL_SEPARATE_ATTRIBS',
+    ],
+    'invalid': [
+      'GL_PIXEL_PACK_BUFFER',
+    ],
+  },
   'FrameBufferParameter': {
     'type': 'GLenum',
     'valid': [
@@ -1712,6 +1722,10 @@
     'decoder_func': 'DoCopyTexSubImage2D',
     'defer_reads': True,
   },
+  'CopyTexSubImage3D': {
+    'defer_reads': True,
+    'unsafe': True,
+  },
   'CreateImageCHROMIUM': {
     'type': 'Manual',
     'cmd_args':
@@ -2448,6 +2462,7 @@
   'ShaderSource': {
     'type': 'PUTSTR',
     'decoder_func': 'DoShaderSource',
+    'expectation': False,
     'data_transfer_methods': ['bucket'],
     'cmd_args':
         'GLuint shader, const char** str',
@@ -2545,6 +2560,14 @@
                 'const void* pixels, GLboolean internal',
     'unsafe': True,
   },
+  'TransformFeedbackVaryings': {
+    'type': 'PUTSTR',
+    'data_transfer_methods': ['bucket'],
+    'decoder_func': 'DoTransformFeedbackVaryings',
+    'cmd_args':
+        'GLuint program, const char** varyings, GLenum buffermode',
+    'unsafe': True,
+  },
   'Uniform1f': {'type': 'PUTXn', 'count': 1},
   'Uniform1fv': {
     'type': 'PUTn',
@@ -6422,7 +6445,7 @@
   total_size += 1;
   total_size *= sizeof(GLint);
   if (!total_size.IsValid()) {
-    SetGLError(GL_INVALID_VALUE, "glShaderSource", "overflow");
+    SetGLError(GL_INVALID_VALUE, "gl%(func_name)s", "overflow");
     return;
   }
   size_t header_size = total_size.ValueOrDefault(0);
@@ -6433,7 +6456,7 @@
     if (%(data)s[ii]) {"""
     if length_arg == None:
       size_code_block += """
-      len = base::static_cast<GLint>(strlen(%(data)s[ii]));"""
+      len = static_cast<GLint>(strlen(%(data)s[ii]));"""
     else:
       size_code_block += """
       len = (%(length)s && %(length)s[ii] >= 0) ?
@@ -6443,15 +6466,16 @@
     total_size += len;
     total_size += 1;  // NULL at the end of each char array.
     if (!total_size.IsValid()) {
-      SetGLError(GL_INVALID_VALUE, "glShaderSource", "overflow");
+      SetGLError(GL_INVALID_VALUE, "gl%(func_name)s", "overflow");
       return;
     }
     header[ii + 1] = len;
 }
 """
     file.Write(size_code_block % {
-          'data': data_arg.name,
-          'length': length_arg.name if not length_arg == None else ''
+        'data': data_arg.name,
+        'length': length_arg.name if not length_arg == None else '',
+        'func_name': func.name,
       })
     data_code_block = """  // Pack data into a bucket on the service.
   helper_->SetBucketSize(kResultBucketId, total_size.ValueOrDefault(0));
@@ -6465,14 +6489,14 @@
       checked_size += 1;  // NULL in the end.
     }
     if (!checked_size.IsValid()) {
-      SetGLError(GL_INVALID_VALUE, "glShaderSource", "overflow");
+      SetGLError(GL_INVALID_VALUE, "gl%(func_name)s", "overflow");
       return;
     }
     size_t size = checked_size.ValueOrDefault(0);
     while (size) {
       ScopedTransferBufferPtr buffer(size, helper_, transfer_buffer_);
       if (!buffer.valid() || buffer.size() == 0) {
-        SetGLError(GL_OUT_OF_MEMORY, "glShaderSource", "too large");
+        SetGLError(GL_OUT_OF_MEMORY, "gl%(func_name)s", "too large");
         return;
       }
       size_t copy_size = buffer.size();
@@ -6496,19 +6520,20 @@
   DCHECK_EQ(total_size.ValueOrDefault(0), offset);
 """
     file.Write(data_code_block % {
-          'data': data_arg.name,
-          'length': length_arg.name if not length_arg == None else ''
+        'data': data_arg.name,
+        'length': length_arg.name if not length_arg == None else '',
+        'func_name': func.name,
       })
-    bucket_cmd_arg_string = ""
-    for arg in func.GetCmdArgs()[0:-2]:
-      if bucket_cmd_arg_string:
-        bucket_cmd_arg_string += ", "
-      bucket_cmd_arg_string += arg.name
-    if bucket_cmd_arg_string:
-      bucket_cmd_arg_string += ", "
-    bucket_cmd_arg_string += 'kResultBucketId'
+    bucket_args = []
+    for arg in func.GetOriginalArgs():
+      if arg.name == 'count' or arg == self.__GetLengthArg(func):
+        continue
+      if arg == self.__GetDataArg(func):
+        bucket_args.append('kResultBucketId')
+      else:
+        bucket_args.append(arg.name)
     file.Write("  helper_->%sBucket(%s);\n" %
-               (func.name, bucket_cmd_arg_string))
+               (func.name, ", ".join(bucket_args)))
     file.Write("  helper_->SetBucketSize(kResultBucketId, 0);");
     file.Write("  CheckGLError();\n")
     file.Write("}\n")
@@ -6539,7 +6564,7 @@
     cmd::SetToken set_token2;
     cmd::SetBucketData set_bucket_data2;
     cmd::SetToken set_token3;
-    cmds::ShaderSourceBucket shader_source_bucket;
+    cmds::%(name)sBucket cmd_bucket;
     cmd::SetBucketSize clear_bucket_size;
   };
 
@@ -6559,7 +6584,7 @@
       kBucketId, kHeaderSize + kString1Size, kString2Size, mem2.id,
       mem2.offset);
   expected.set_token3.Init(GetNextToken());
-  expected.shader_source_bucket.Init(%(cmd_args)s, kBucketId);
+  expected.cmd_bucket.Init(%(bucket_args)s);
   expected.clear_bucket_size.Init(kBucketId, 0);
   const char* kStrings[] = { kString1, kString2 };
   gl_->%(name)s(%(gl_args)s);
@@ -6567,21 +6592,22 @@
 }
 """
     gl_args = []
-    cmd_args = []
+    bucket_args = []
     for arg in func.GetOriginalArgs():
       if arg == self.__GetDataArg(func):
         gl_args.append('kStrings')
+        bucket_args.append('kBucketId')
       elif arg == self.__GetLengthArg(func):
         gl_args.append('NULL')
       elif arg.name == 'count':
         gl_args.append('2')
       else:
         gl_args.append(arg.GetValidClientSideArg(func))
-        cmd_args.append(arg.GetValidClientSideArg(func))
+        bucket_args.append(arg.GetValidClientSideArg(func))
     file.Write(code % {
         'name': func.name,
         'gl_args': ", ".join(gl_args),
-        'cmd_args': ", ".join(cmd_args),
+        'bucket_args': ", ".join(bucket_args),
       })
 
     if self.__GetLengthArg(func) == None:
@@ -6618,7 +6644,7 @@
   expected.set_bucket_data.Init(
       kBucketId, kHeaderSize, kStringSize + 1, mem1.id, mem1.offset);
   expected.set_token2.Init(GetNextToken());
-  expected.shader_source_bucket.Init(%(cmd_args)s, kBucketId);
+  expected.shader_source_bucket.Init(%(bucket_args)s);
   expected.clear_bucket_size.Init(kBucketId, 0);
   const char* kStrings[] = { kString };
   const GLint kLength[] = { kStringSize };
@@ -6639,33 +6665,42 @@
     file.Write(code % {
         'name': func.name,
         'gl_args': ", ".join(gl_args),
-        'cmd_args': ", ".join(cmd_args),
+        'bucket_args': ", ".join(bucket_args),
       })
 
   def WriteBucketServiceUnitTest(self, func, file, *extras):
     """Overrriden from TypeHandler."""
     cmd_args = []
     cmd_args_with_invalid_id = []
+    gl_args = []
     for index, arg in enumerate(func.GetOriginalArgs()):
-      if (arg == self.__GetLengthArg(func) or
-          arg == self.__GetDataArg(func) or arg.name == 'count'):
-        continue
-      if index == 0:  # Resource ID arg
+      if arg == self.__GetLengthArg(func):
+        gl_args.append('_')
+      elif arg.name == 'count':
+        gl_args.append('1')
+      elif arg == self.__GetDataArg(func):
+        cmd_args.append('kBucketId')
+        cmd_args_with_invalid_id.append('kBucketId')
+        gl_args.append('_')
+      elif index == 0:  # Resource ID arg
         cmd_args.append(arg.GetValidArg(func))
         cmd_args_with_invalid_id.append('kInvalidClientId')
+        gl_args.append(arg.GetValidGLArg(func))
       else:
         cmd_args.append(arg.GetValidArg(func))
         cmd_args_with_invalid_id.append(arg.GetValidArg(func))
+        gl_args.append(arg.GetValidGLArg(func))
 
     test = """
 TEST_P(%(test_name)s, %(name)sValidArgs) {
+  EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));
   const uint32 kBucketId = 123;
   const char kSource0[] = "hello";
   const char* kSource[] = { kSource0 };
   const char kValidStrEnd = 0;
   SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd);
   cmds::%(name)s cmd;
-  cmd.Init(%(cmd_args)s, kBucketId);
+  cmd.Init(%(cmd_args)s);
   decoder_->set_unsafe_es3_apis_enabled(true);
   EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));"""
     if func.IsUnsafe():
@@ -6678,6 +6713,7 @@
 """
     self.WriteValidUnitTest(func, file, test, {
         'cmd_args': ", ".join(cmd_args),
+        'gl_args': ", ".join(gl_args),
       }, *extras)
 
     test = """
@@ -6689,11 +6725,11 @@
   decoder_->set_unsafe_es3_apis_enabled(true);
   cmds::%(name)s cmd;
   // Test no bucket.
-  cmd.Init(%(cmd_args)s, kBucketId);
+  cmd.Init(%(cmd_args)s);
   EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
   // Test invalid client.
   SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd);
-  cmd.Init(%(cmd_args_with_invalid_id)s, kBucketId);
+  cmd.Init(%(cmd_args_with_invalid_id)s);
   EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
   EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
 }
@@ -6711,24 +6747,18 @@
   const char kValidStrEnd = 0;
   const GLsizei kCount = static_cast<GLsizei>(arraysize(kSource));
   const GLsizei kTests[] = {
-      kCount,
+      kCount + 1,
       0,
       std::numeric_limits<GLsizei>::max(),
       -1,
-      kCount,
   };
   decoder_->set_unsafe_es3_apis_enabled(true);
   for (size_t ii = 0; ii < arraysize(kTests); ++ii) {
     SetBucketAsCStrings(kBucketId, 1, kSource, kTests[ii], kValidStrEnd);
     cmds::%(name)s cmd;
-    cmd.Init(%(cmd_args)s, kBucketId);
-    if (kTests[ii] == kCount) {
-      EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-    } else {
-      EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
-    }
+    cmd.Init(%(cmd_args)s);
+    EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
   }
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
 }
 """
     self.WriteValidUnitTest(func, file, test, {
@@ -6743,10 +6773,9 @@
   const char kInvalidStrEnd = '*';
   SetBucketAsCStrings(kBucketId, 1, kSource, 1, kInvalidStrEnd);
   cmds::%(name)s cmd;
-  cmd.Init(%(cmd_args)s, kBucketId);
+  cmd.Init(%(cmd_args)s);
   decoder_->set_unsafe_es3_apis_enabled(true);
   EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
 }
 """
     self.WriteValidUnitTest(func, file, test, {
@@ -7551,21 +7580,29 @@
 
   def WriteValidationCode(self, file, func):
     """overridden from Argument."""
-    file.Write("  if (%s < 0) {\n" % self.name)
-    file.Write(
-        "    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, \"gl%s\", \"%s < 0\");\n" %
-        (func.original_name, self.name))
-    file.Write("    return error::kNoError;\n")
-    file.Write("  }\n")
+    if func.IsUnsafe():
+      return
+    code = """  if (%(var_name)s < 0) {
+    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "gl%(func_name)s", "%(var_name)s < 0");
+    return error::kNoError;
+  }
+"""
+    file.Write(code % {
+        "var_name": self.name,
+        "func_name": func.original_name,
+      })
 
   def WriteClientSideValidationCode(self, file, func):
     """overridden from Argument."""
-    file.Write("  if (%s < 0) {\n" % self.name)
-    file.Write(
-        "    SetGLError(GL_INVALID_VALUE, \"gl%s\", \"%s < 0\");\n" %
-        (func.original_name, self.name))
-    file.Write("    return;\n")
-    file.Write("  }\n")
+    code = """  if (%(var_name)s < 0) {
+    SetGLError(GL_INVALID_VALUE, "gl%(func_name)s", "%(var_name)s < 0");
+    return;
+  }
+"""
+    file.Write(code % {
+        "var_name": self.name,
+        "func_name": func.original_name,
+      })
 
 
 class SizeNotNegativeArgument(SizeArgument):
diff --git a/gpu/command_buffer/client/gles2_c_lib_autogen.h b/gpu/command_buffer/client/gles2_c_lib_autogen.h
index 0158cf6..503fff0 100644
--- a/gpu/command_buffer/client/gles2_c_lib_autogen.h
+++ b/gpu/command_buffer/client/gles2_c_lib_autogen.h
@@ -181,6 +181,18 @@
   gles2::GetGLContext()->CopyTexSubImage2D(target, level, xoffset, yoffset, x,
                                            y, width, height);
 }
+void GLES2CopyTexSubImage3D(GLenum target,
+                            GLint level,
+                            GLint xoffset,
+                            GLint yoffset,
+                            GLint zoffset,
+                            GLint x,
+                            GLint y,
+                            GLsizei width,
+                            GLsizei height) {
+  gles2::GetGLContext()->CopyTexSubImage3D(target, level, xoffset, yoffset,
+                                           zoffset, x, y, width, height);
+}
 GLuint GLES2CreateProgram() {
   return gles2::GetGLContext()->CreateProgram();
 }
@@ -664,6 +676,13 @@
                                        width, height, depth, format, type,
                                        pixels);
 }
+void GLES2TransformFeedbackVaryings(GLuint program,
+                                    GLsizei count,
+                                    const char* const* varyings,
+                                    GLenum buffermode) {
+  gles2::GetGLContext()->TransformFeedbackVaryings(program, count, varyings,
+                                                   buffermode);
+}
 void GLES2Uniform1f(GLint location, GLfloat x) {
   gles2::GetGLContext()->Uniform1f(location, x);
 }
@@ -1364,6 +1383,10 @@
      reinterpret_cast<GLES2FunctionPointer>(glCopyTexSubImage2D),
     },
     {
+     "glCopyTexSubImage3D",
+     reinterpret_cast<GLES2FunctionPointer>(glCopyTexSubImage3D),
+    },
+    {
      "glCreateProgram",
      reinterpret_cast<GLES2FunctionPointer>(glCreateProgram),
     },
@@ -1821,6 +1844,10 @@
      reinterpret_cast<GLES2FunctionPointer>(glTexSubImage3D),
     },
     {
+     "glTransformFeedbackVaryings",
+     reinterpret_cast<GLES2FunctionPointer>(glTransformFeedbackVaryings),
+    },
+    {
      "glUniform1f",
      reinterpret_cast<GLES2FunctionPointer>(glUniform1f),
     },
diff --git a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
index 2b9cd8b..2ac4d69 100644
--- a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
+++ b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
@@ -359,6 +359,22 @@
   }
 }
 
+void CopyTexSubImage3D(GLenum target,
+                       GLint level,
+                       GLint xoffset,
+                       GLint yoffset,
+                       GLint zoffset,
+                       GLint x,
+                       GLint y,
+                       GLsizei width,
+                       GLsizei height) {
+  gles2::cmds::CopyTexSubImage3D* c =
+      GetCmdSpace<gles2::cmds::CopyTexSubImage3D>();
+  if (c) {
+    c->Init(target, level, xoffset, yoffset, zoffset, x, y, width, height);
+  }
+}
+
 void CreateProgram(uint32_t client_id) {
   gles2::cmds::CreateProgram* c = GetCmdSpace<gles2::cmds::CreateProgram>();
   if (c) {
@@ -1419,6 +1435,16 @@
   }
 }
 
+void TransformFeedbackVaryingsBucket(GLuint program,
+                                     uint32_t varyings_bucket_id,
+                                     GLenum buffermode) {
+  gles2::cmds::TransformFeedbackVaryingsBucket* c =
+      GetCmdSpace<gles2::cmds::TransformFeedbackVaryingsBucket>();
+  if (c) {
+    c->Init(program, varyings_bucket_id, buffermode);
+  }
+}
+
 void Uniform1f(GLint location, GLfloat x) {
   gles2::cmds::Uniform1f* c = GetCmdSpace<gles2::cmds::Uniform1f>();
   if (c) {
diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc
index b4628a0..7ef5444 100644
--- a/gpu/command_buffer/client/gles2_implementation.cc
+++ b/gpu/command_buffer/client/gles2_implementation.cc
@@ -17,6 +17,7 @@
 #include <sstream>
 #include <string>
 #include "base/bind.h"
+#include "base/compiler_specific.h"
 #include "base/numerics/safe_math.h"
 #include "gpu/command_buffer/client/buffer_tracker.h"
 #include "gpu/command_buffer/client/gpu_control.h"
@@ -1239,6 +1240,14 @@
   if (!ValidateSize("glBufferData", size))
     return;
 
+#if defined(MEMORY_SANITIZER) && !defined(OS_NACL)
+  // Do not upload uninitialized data. Even if it's not a bug, it can cause a
+  // bogus MSan report during a readback later. This is because MSan doesn't
+  // understand shared memory and would assume we were reading back the same
+  // unintialized data.
+  if (data) __msan_check_mem_is_initialized(data, size);
+#endif
+
   GLuint buffer_id;
   if (GetBoundPixelTransferBuffer(target, "glBufferData", &buffer_id)) {
     if (!buffer_id) {
diff --git a/gpu/command_buffer/client/gles2_implementation_autogen.h b/gpu/command_buffer/client/gles2_implementation_autogen.h
index b32dd44..3a6e5f3 100644
--- a/gpu/command_buffer/client/gles2_implementation_autogen.h
+++ b/gpu/command_buffer/client/gles2_implementation_autogen.h
@@ -147,6 +147,16 @@
                        GLsizei width,
                        GLsizei height) override;
 
+void CopyTexSubImage3D(GLenum target,
+                       GLint level,
+                       GLint xoffset,
+                       GLint yoffset,
+                       GLint zoffset,
+                       GLint x,
+                       GLint y,
+                       GLsizei width,
+                       GLsizei height) override;
+
 GLuint CreateProgram() override;
 
 GLuint CreateShader(GLenum type) override;
@@ -499,6 +509,11 @@
                    GLenum type,
                    const void* pixels) override;
 
+void TransformFeedbackVaryings(GLuint program,
+                               GLsizei count,
+                               const char* const* varyings,
+                               GLenum buffermode) override;
+
 void Uniform1f(GLint location, GLfloat x) override;
 
 void Uniform1fv(GLint location, GLsizei count, const GLfloat* v) override;
diff --git a/gpu/command_buffer/client/gles2_implementation_impl_autogen.h b/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
index 90f91c5..d84c123 100644
--- a/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
+++ b/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
@@ -413,6 +413,34 @@
   CheckGLError();
 }
 
+void GLES2Implementation::CopyTexSubImage3D(GLenum target,
+                                            GLint level,
+                                            GLint xoffset,
+                                            GLint yoffset,
+                                            GLint zoffset,
+                                            GLint x,
+                                            GLint y,
+                                            GLsizei width,
+                                            GLsizei height) {
+  GPU_CLIENT_SINGLE_THREAD_CHECK();
+  GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCopyTexSubImage3D("
+                     << GLES2Util::GetStringTexture3DTarget(target) << ", "
+                     << level << ", " << xoffset << ", " << yoffset << ", "
+                     << zoffset << ", " << x << ", " << y << ", " << width
+                     << ", " << height << ")");
+  if (width < 0) {
+    SetGLError(GL_INVALID_VALUE, "glCopyTexSubImage3D", "width < 0");
+    return;
+  }
+  if (height < 0) {
+    SetGLError(GL_INVALID_VALUE, "glCopyTexSubImage3D", "height < 0");
+    return;
+  }
+  helper_->CopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y,
+                             width, height);
+  CheckGLError();
+}
+
 GLuint GLES2Implementation::CreateProgram() {
   GPU_CLIENT_SINGLE_THREAD_CHECK();
   GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCreateProgram("
@@ -1940,6 +1968,100 @@
   CheckGLError();
 }
 
+void GLES2Implementation::TransformFeedbackVaryings(GLuint program,
+                                                    GLsizei count,
+                                                    const char* const* varyings,
+                                                    GLenum buffermode) {
+  GPU_CLIENT_SINGLE_THREAD_CHECK();
+  GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTransformFeedbackVaryings("
+                     << program << ", " << count << ", "
+                     << static_cast<const void*>(varyings) << ", "
+                     << GLES2Util::GetStringBufferMode(buffermode) << ")");
+  GPU_CLIENT_LOG_CODE_BLOCK({
+    for (GLsizei ii = 0; ii < count; ++ii) {
+      if (varyings[ii]) {
+        GPU_CLIENT_LOG("  " << ii << ": ---\n" << varyings[ii] << "\n---");
+      } else {
+        GPU_CLIENT_LOG("  " << ii << ": NULL");
+      }
+    }
+  });
+  if (count < 0) {
+    SetGLError(GL_INVALID_VALUE, "glTransformFeedbackVaryings", "count < 0");
+    return;
+  }
+  // Compute the total size.
+  base::CheckedNumeric<size_t> total_size = count;
+  total_size += 1;
+  total_size *= sizeof(GLint);
+  if (!total_size.IsValid()) {
+    SetGLError(GL_INVALID_VALUE, "glTransformFeedbackVaryings", "overflow");
+    return;
+  }
+  size_t header_size = total_size.ValueOrDefault(0);
+  std::vector<GLint> header(count + 1);
+  header[0] = static_cast<GLint>(count);
+  for (GLsizei ii = 0; ii < count; ++ii) {
+    GLint len = 0;
+    if (varyings[ii]) {
+      len = static_cast<GLint>(strlen(varyings[ii]));
+    }
+    total_size += len;
+    total_size += 1;  // NULL at the end of each char array.
+    if (!total_size.IsValid()) {
+      SetGLError(GL_INVALID_VALUE, "glTransformFeedbackVaryings", "overflow");
+      return;
+    }
+    header[ii + 1] = len;
+  }
+  // Pack data into a bucket on the service.
+  helper_->SetBucketSize(kResultBucketId, total_size.ValueOrDefault(0));
+  size_t offset = 0;
+  for (GLsizei ii = 0; ii <= count; ++ii) {
+    const char* src = (ii == 0) ? reinterpret_cast<const char*>(&header[0])
+                                : varyings[ii - 1];
+    base::CheckedNumeric<size_t> checked_size =
+        (ii == 0) ? header_size : static_cast<size_t>(header[ii]);
+    if (ii > 0) {
+      checked_size += 1;  // NULL in the end.
+    }
+    if (!checked_size.IsValid()) {
+      SetGLError(GL_INVALID_VALUE, "glTransformFeedbackVaryings", "overflow");
+      return;
+    }
+    size_t size = checked_size.ValueOrDefault(0);
+    while (size) {
+      ScopedTransferBufferPtr buffer(size, helper_, transfer_buffer_);
+      if (!buffer.valid() || buffer.size() == 0) {
+        SetGLError(GL_OUT_OF_MEMORY, "glTransformFeedbackVaryings",
+                   "too large");
+        return;
+      }
+      size_t copy_size = buffer.size();
+      if (ii > 0 && buffer.size() == size)
+        --copy_size;
+      if (copy_size)
+        memcpy(buffer.address(), src, copy_size);
+      if (copy_size < buffer.size()) {
+        // Append NULL in the end.
+        DCHECK(copy_size + 1 == buffer.size());
+        char* str = reinterpret_cast<char*>(buffer.address());
+        str[copy_size] = 0;
+      }
+      helper_->SetBucketData(kResultBucketId, offset, buffer.size(),
+                             buffer.shm_id(), buffer.offset());
+      offset += buffer.size();
+      src += buffer.size();
+      size -= buffer.size();
+    }
+  }
+  DCHECK_EQ(total_size.ValueOrDefault(0), offset);
+  helper_->TransformFeedbackVaryingsBucket(program, kResultBucketId,
+                                           buffermode);
+  helper_->SetBucketSize(kResultBucketId, 0);
+  CheckGLError();
+}
+
 void GLES2Implementation::Uniform1f(GLint location, GLfloat x) {
   GPU_CLIENT_SINGLE_THREAD_CHECK();
   GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform1f(" << location << ", "
diff --git a/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h b/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
index 845ab06..743458b 100644
--- a/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
+++ b/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
@@ -351,6 +351,17 @@
   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 }
 
+TEST_F(GLES2ImplementationTest, CopyTexSubImage3D) {
+  struct Cmds {
+    cmds::CopyTexSubImage3D cmd;
+  };
+  Cmds expected;
+  expected.cmd.Init(GL_TEXTURE_3D, 2, 3, 4, 5, 6, 7, 8, 9);
+
+  gl_->CopyTexSubImage3D(GL_TEXTURE_3D, 2, 3, 4, 5, 6, 7, 8, 9);
+  EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
+}
+
 TEST_F(GLES2ImplementationTest, CullFace) {
   struct Cmds {
     cmds::CullFace cmd;
@@ -1427,7 +1438,7 @@
     cmd::SetToken set_token2;
     cmd::SetBucketData set_bucket_data2;
     cmd::SetToken set_token3;
-    cmds::ShaderSourceBucket shader_source_bucket;
+    cmds::ShaderSourceBucket cmd_bucket;
     cmd::SetBucketSize clear_bucket_size;
   };
 
@@ -1446,7 +1457,7 @@
   expected.set_bucket_data2.Init(kBucketId, kHeaderSize + kString1Size,
                                  kString2Size, mem2.id, mem2.offset);
   expected.set_token3.Init(GetNextToken());
-  expected.shader_source_bucket.Init(1, kBucketId);
+  expected.cmd_bucket.Init(1, kBucketId);
   expected.clear_bucket_size.Init(kBucketId, 0);
   const char* kStrings[] = {kString1, kString2};
   gl_->ShaderSource(1, 2, kStrings, NULL);
@@ -1623,6 +1634,54 @@
   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
 }
 
+TEST_F(GLES2ImplementationTest, TransformFeedbackVaryings) {
+  const uint32 kBucketId = GLES2Implementation::kResultBucketId;
+  const char* kString1 = "happy";
+  const char* kString2 = "ending";
+  const size_t kString1Size = ::strlen(kString1) + 1;
+  const size_t kString2Size = ::strlen(kString2) + 1;
+  const size_t kHeaderSize = sizeof(GLint) * 3;
+  const size_t kSourceSize = kHeaderSize + kString1Size + kString2Size;
+  const size_t kPaddedHeaderSize =
+      transfer_buffer_->RoundToAlignment(kHeaderSize);
+  const size_t kPaddedString1Size =
+      transfer_buffer_->RoundToAlignment(kString1Size);
+  const size_t kPaddedString2Size =
+      transfer_buffer_->RoundToAlignment(kString2Size);
+  struct Cmds {
+    cmd::SetBucketSize set_bucket_size;
+    cmd::SetBucketData set_bucket_header;
+    cmd::SetToken set_token1;
+    cmd::SetBucketData set_bucket_data1;
+    cmd::SetToken set_token2;
+    cmd::SetBucketData set_bucket_data2;
+    cmd::SetToken set_token3;
+    cmds::TransformFeedbackVaryingsBucket cmd_bucket;
+    cmd::SetBucketSize clear_bucket_size;
+  };
+
+  ExpectedMemoryInfo mem0 = GetExpectedMemory(kPaddedHeaderSize);
+  ExpectedMemoryInfo mem1 = GetExpectedMemory(kPaddedString1Size);
+  ExpectedMemoryInfo mem2 = GetExpectedMemory(kPaddedString2Size);
+
+  Cmds expected;
+  expected.set_bucket_size.Init(kBucketId, kSourceSize);
+  expected.set_bucket_header.Init(kBucketId, 0, kHeaderSize, mem0.id,
+                                  mem0.offset);
+  expected.set_token1.Init(GetNextToken());
+  expected.set_bucket_data1.Init(kBucketId, kHeaderSize, kString1Size, mem1.id,
+                                 mem1.offset);
+  expected.set_token2.Init(GetNextToken());
+  expected.set_bucket_data2.Init(kBucketId, kHeaderSize + kString1Size,
+                                 kString2Size, mem2.id, mem2.offset);
+  expected.set_token3.Init(GetNextToken());
+  expected.cmd_bucket.Init(1, kBucketId, GL_INTERLEAVED_ATTRIBS);
+  expected.clear_bucket_size.Init(kBucketId, 0);
+  const char* kStrings[] = {kString1, kString2};
+  gl_->TransformFeedbackVaryings(1, 2, kStrings, GL_INTERLEAVED_ATTRIBS);
+  EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
+}
+
 TEST_F(GLES2ImplementationTest, Uniform1f) {
   struct Cmds {
     cmds::Uniform1f cmd;
diff --git a/gpu/command_buffer/client/gles2_interface_autogen.h b/gpu/command_buffer/client/gles2_interface_autogen.h
index c15ae64..c3a2c3e 100644
--- a/gpu/command_buffer/client/gles2_interface_autogen.h
+++ b/gpu/command_buffer/client/gles2_interface_autogen.h
@@ -113,6 +113,15 @@
                                GLint y,
                                GLsizei width,
                                GLsizei height) = 0;
+virtual void CopyTexSubImage3D(GLenum target,
+                               GLint level,
+                               GLint xoffset,
+                               GLint yoffset,
+                               GLint zoffset,
+                               GLint x,
+                               GLint y,
+                               GLsizei width,
+                               GLsizei height) = 0;
 virtual GLuint CreateProgram() = 0;
 virtual GLuint CreateShader(GLenum type) = 0;
 virtual void CullFace(GLenum mode) = 0;
@@ -365,6 +374,10 @@
                            GLenum format,
                            GLenum type,
                            const void* pixels) = 0;
+virtual void TransformFeedbackVaryings(GLuint program,
+                                       GLsizei count,
+                                       const char* const* varyings,
+                                       GLenum buffermode) = 0;
 virtual void Uniform1f(GLint location, GLfloat x) = 0;
 virtual void Uniform1fv(GLint location, GLsizei count, const GLfloat* v) = 0;
 virtual void Uniform1i(GLint location, GLint x) = 0;
diff --git a/gpu/command_buffer/client/gles2_interface_stub_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_autogen.h
index 58de603..34a0c42 100644
--- a/gpu/command_buffer/client/gles2_interface_stub_autogen.h
+++ b/gpu/command_buffer/client/gles2_interface_stub_autogen.h
@@ -112,6 +112,15 @@
                        GLint y,
                        GLsizei width,
                        GLsizei height) override;
+void CopyTexSubImage3D(GLenum target,
+                       GLint level,
+                       GLint xoffset,
+                       GLint yoffset,
+                       GLint zoffset,
+                       GLint x,
+                       GLint y,
+                       GLsizei width,
+                       GLsizei height) override;
 GLuint CreateProgram() override;
 GLuint CreateShader(GLenum type) override;
 void CullFace(GLenum mode) override;
@@ -358,6 +367,10 @@
                    GLenum format,
                    GLenum type,
                    const void* pixels) override;
+void TransformFeedbackVaryings(GLuint program,
+                               GLsizei count,
+                               const char* const* varyings,
+                               GLenum buffermode) override;
 void Uniform1f(GLint location, GLfloat x) override;
 void Uniform1fv(GLint location, GLsizei count, const GLfloat* v) override;
 void Uniform1i(GLint location, GLint x) override;
diff --git a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
index 59dc75f..cf121fc 100644
--- a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
+++ b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
@@ -155,6 +155,16 @@
                                            GLsizei /* width */,
                                            GLsizei /* height */) {
 }
+void GLES2InterfaceStub::CopyTexSubImage3D(GLenum /* target */,
+                                           GLint /* level */,
+                                           GLint /* xoffset */,
+                                           GLint /* yoffset */,
+                                           GLint /* zoffset */,
+                                           GLint /* x */,
+                                           GLint /* y */,
+                                           GLsizei /* width */,
+                                           GLsizei /* height */) {
+}
 GLuint GLES2InterfaceStub::CreateProgram() {
   return 0;
 }
@@ -595,6 +605,12 @@
                                        GLenum /* type */,
                                        const void* /* pixels */) {
 }
+void GLES2InterfaceStub::TransformFeedbackVaryings(
+    GLuint /* program */,
+    GLsizei /* count */,
+    const char* const* /* varyings */,
+    GLenum /* buffermode */) {
+}
 void GLES2InterfaceStub::Uniform1f(GLint /* location */, GLfloat /* x */) {
 }
 void GLES2InterfaceStub::Uniform1fv(GLint /* location */,
diff --git a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
index e7d2979..db9b375 100644
--- a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
+++ b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
@@ -112,6 +112,15 @@
                        GLint y,
                        GLsizei width,
                        GLsizei height) override;
+void CopyTexSubImage3D(GLenum target,
+                       GLint level,
+                       GLint xoffset,
+                       GLint yoffset,
+                       GLint zoffset,
+                       GLint x,
+                       GLint y,
+                       GLsizei width,
+                       GLsizei height) override;
 GLuint CreateProgram() override;
 GLuint CreateShader(GLenum type) override;
 void CullFace(GLenum mode) override;
@@ -358,6 +367,10 @@
                    GLenum format,
                    GLenum type,
                    const void* pixels) override;
+void TransformFeedbackVaryings(GLuint program,
+                               GLsizei count,
+                               const char* const* varyings,
+                               GLenum buffermode) override;
 void Uniform1f(GLint location, GLfloat x) override;
 void Uniform1fv(GLint location, GLsizei count, const GLfloat* v) override;
 void Uniform1i(GLint location, GLint x) override;
diff --git a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
index 2623339..33bc3ae 100644
--- a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
+++ b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
@@ -258,6 +258,20 @@
   gl_->CopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
 }
 
+void GLES2TraceImplementation::CopyTexSubImage3D(GLenum target,
+                                                 GLint level,
+                                                 GLint xoffset,
+                                                 GLint yoffset,
+                                                 GLint zoffset,
+                                                 GLint x,
+                                                 GLint y,
+                                                 GLsizei width,
+                                                 GLsizei height) {
+  TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::CopyTexSubImage3D");
+  gl_->CopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width,
+                         height);
+}
+
 GLuint GLES2TraceImplementation::CreateProgram() {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::CreateProgram");
   return gl_->CreateProgram();
@@ -1022,6 +1036,15 @@
                      depth, format, type, pixels);
 }
 
+void GLES2TraceImplementation::TransformFeedbackVaryings(
+    GLuint program,
+    GLsizei count,
+    const char* const* varyings,
+    GLenum buffermode) {
+  TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::TransformFeedbackVaryings");
+  gl_->TransformFeedbackVaryings(program, count, varyings, buffermode);
+}
+
 void GLES2TraceImplementation::Uniform1f(GLint location, GLfloat x) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::Uniform1f");
   gl_->Uniform1f(location, x);
diff --git a/gpu/command_buffer/client/mapped_memory.cc b/gpu/command_buffer/client/mapped_memory.cc
index 1919879..6d57af4 100644
--- a/gpu/command_buffer/client/mapped_memory.cc
+++ b/gpu/command_buffer/client/mapped_memory.cc
@@ -7,8 +7,8 @@
 #include <algorithm>
 #include <functional>
 
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
+#include "base/trace_event/trace_event.h"
 #include "gpu/command_buffer/client/cmd_buffer_helper.h"
 
 namespace gpu {
diff --git a/gpu/command_buffer/client/program_info_manager.cc b/gpu/command_buffer/client/program_info_manager.cc
index e167e38..7196372 100644
--- a/gpu/command_buffer/client/program_info_manager.cc
+++ b/gpu/command_buffer/client/program_info_manager.cc
@@ -4,248 +4,35 @@
 
 #include "gpu/command_buffer/client/program_info_manager.h"
 
-#include <string>
+namespace {
 
-#include "base/compiler_specific.h"
-#include "base/containers/hash_tables.h"
-#include "base/synchronization/lock.h"
-#include "gpu/command_buffer/client/gles2_implementation.h"
-#include "gpu/command_buffer/common/gles2_cmd_utils.h"
+template<typename T> static T LocalGetAs(
+    const std::vector<int8>& data, uint32 offset, size_t size) {
+  const int8* p = &data[0] + offset;
+  if (offset + size > data.size()) {
+    NOTREACHED();
+    return NULL;
+  }
+  return static_cast<T>(static_cast<const void*>(p));
+}
+
+}  // namespace anonymous
 
 namespace gpu {
 namespace gles2 {
 
-class NonCachedProgramInfoManager : public ProgramInfoManager {
- public:
-  NonCachedProgramInfoManager();
-  ~NonCachedProgramInfoManager() override;
-
-  void CreateInfo(GLuint program) override;
-
-  void DeleteInfo(GLuint program) override;
-
-  bool GetProgramiv(GLES2Implementation* gl,
-                    GLuint program,
-                    GLenum pname,
-                    GLint* params) override;
-
-  GLint GetAttribLocation(GLES2Implementation* gl,
-                          GLuint program,
-                          const char* name) override;
-
-  GLint GetUniformLocation(GLES2Implementation* gl,
-                           GLuint program,
-                           const char* name) override;
-
-  GLint GetFragDataLocation(GLES2Implementation* gl,
-                            GLuint program,
-                            const char* name) override;
-
-  bool GetActiveAttrib(GLES2Implementation* gl,
-                       GLuint program,
-                       GLuint index,
-                       GLsizei bufsize,
-                       GLsizei* length,
-                       GLint* size,
-                       GLenum* type,
-                       char* name) override;
-
-  bool GetActiveUniform(GLES2Implementation* gl,
-                        GLuint program,
-                        GLuint index,
-                        GLsizei bufsize,
-                        GLsizei* length,
-                        GLint* size,
-                        GLenum* type,
-                        char* name) override;
-};
-
-NonCachedProgramInfoManager::NonCachedProgramInfoManager() {
+ProgramInfoManager::Program::VertexAttrib::VertexAttrib(
+    GLsizei _size, GLenum _type, const std::string& _name, GLint _location)
+    : size(_size),
+      type(_type),
+      location(_location),
+      name(_name) {
 }
 
-NonCachedProgramInfoManager::~NonCachedProgramInfoManager() {
+ProgramInfoManager::Program::VertexAttrib::~VertexAttrib() {
 }
 
-void NonCachedProgramInfoManager::CreateInfo(GLuint /* program */) {
-}
-
-void NonCachedProgramInfoManager::DeleteInfo(GLuint /* program */) {
-}
-
-bool NonCachedProgramInfoManager::GetProgramiv(
-    GLES2Implementation* /* gl */,
-    GLuint /* program */,
-    GLenum /* pname */,
-    GLint* /* params */) {
-  return false;
-}
-
-GLint NonCachedProgramInfoManager::GetAttribLocation(
-    GLES2Implementation* gl, GLuint program, const char* name) {
-  return gl->GetAttribLocationHelper(program, name);
-}
-
-GLint NonCachedProgramInfoManager::GetUniformLocation(
-    GLES2Implementation* gl, GLuint program, const char* name) {
-  return gl->GetUniformLocationHelper(program, name);
-}
-
-GLint NonCachedProgramInfoManager::GetFragDataLocation(
-    GLES2Implementation* gl, GLuint program, const char* name) {
-  return gl->GetFragDataLocationHelper(program, name);
-}
-
-bool NonCachedProgramInfoManager::GetActiveAttrib(
-    GLES2Implementation* gl,
-    GLuint program, GLuint index, GLsizei bufsize, GLsizei* length,
-    GLint* size, GLenum* type, char* name) {
-  return gl->GetActiveAttribHelper(
-      program, index, bufsize, length, size, type, name);
-}
-
-bool NonCachedProgramInfoManager::GetActiveUniform(
-    GLES2Implementation* gl,
-    GLuint program, GLuint index, GLsizei bufsize, GLsizei* length,
-    GLint* size, GLenum* type, char* name) {
-  return gl->GetActiveUniformHelper(
-      program, index, bufsize, length, size, type, name);
-}
-
-class CachedProgramInfoManager : public ProgramInfoManager {
- public:
-  CachedProgramInfoManager();
-  ~CachedProgramInfoManager() override;
-
-  void CreateInfo(GLuint program) override;
-
-  void DeleteInfo(GLuint program) override;
-
-  bool GetProgramiv(GLES2Implementation* gl,
-                    GLuint program,
-                    GLenum pname,
-                    GLint* params) override;
-
-  GLint GetAttribLocation(GLES2Implementation* gl,
-                          GLuint program,
-                          const char* name) override;
-
-  GLint GetUniformLocation(GLES2Implementation* gl,
-                           GLuint program,
-                           const char* name) override;
-
-  GLint GetFragDataLocation(GLES2Implementation* gl,
-                            GLuint program,
-                            const char* name) override;
-
-  bool GetActiveAttrib(GLES2Implementation* gl,
-                       GLuint program,
-                       GLuint index,
-                       GLsizei bufsize,
-                       GLsizei* length,
-                       GLint* size,
-                       GLenum* type,
-                       char* name) override;
-
-  bool GetActiveUniform(GLES2Implementation* gl,
-                        GLuint program,
-                        GLuint index,
-                        GLsizei bufsize,
-                        GLsizei* length,
-                        GLint* size,
-                        GLenum* type,
-                        char* name) override;
-
- private:
-  class Program {
-   public:
-    struct UniformInfo {
-      UniformInfo(GLsizei _size, GLenum _type, const std::string& _name);
-
-      GLsizei size;
-      GLenum type;
-      bool is_array;
-      std::string name;
-      std::vector<GLint> element_locations;
-    };
-    struct VertexAttrib {
-      VertexAttrib(GLsizei _size, GLenum _type, const std::string& _name,
-                       GLint _location)
-          : size(_size),
-            type(_type),
-            location(_location),
-            name(_name) {
-      }
-      GLsizei size;
-      GLenum type;
-      GLint location;
-      std::string name;
-    };
-
-    typedef std::vector<UniformInfo> UniformInfoVector;
-    typedef std::vector<VertexAttrib> AttribInfoVector;
-
-    Program();
-
-    const AttribInfoVector& GetAttribInfos() const {
-      return attrib_infos_;
-    }
-
-    const VertexAttrib* GetAttribInfo(GLint index) const {
-      return (static_cast<size_t>(index) < attrib_infos_.size()) ?
-         &attrib_infos_[index] : NULL;
-    }
-
-    GLint GetAttribLocation(const std::string& name) const;
-
-    const UniformInfo* GetUniformInfo(GLint index) const {
-      return (static_cast<size_t>(index) < uniform_infos_.size()) ?
-         &uniform_infos_[index] : NULL;
-    }
-
-    // Gets the location of a uniform by name.
-    GLint GetUniformLocation(const std::string& name) const;
-
-    GLint GetFragDataLocation(const std::string& name) const;
-    void CacheFragDataLocation(const std::string& name, GLint loc);
-
-    bool GetProgramiv(GLenum pname, GLint* params);
-
-    // Updates the program info after a successful link.
-    void Update(GLES2Implementation* gl,
-                GLuint program,
-                const std::vector<int8>& result);
-
-    bool cached() const { return cached_; }
-
-   private:
-    bool cached_;
-
-    GLsizei max_attrib_name_length_;
-
-    // Attrib by index.
-    AttribInfoVector attrib_infos_;
-
-    GLsizei max_uniform_name_length_;
-
-    // Uniform info by index.
-    UniformInfoVector uniform_infos_;
-
-    base::hash_map<std::string, GLint> frag_data_locations_;
-
-    // This is true if glLinkProgram was successful last time it was called.
-    bool link_status_;
-  };
-
-  Program* GetProgramInfo(GLES2Implementation* gl, GLuint program);
-
-  typedef base::hash_map<GLuint, Program> ProgramInfoMap;
-
-  ProgramInfoMap program_infos_;
-
-  mutable base::Lock lock_;
-};
-
-CachedProgramInfoManager::Program::UniformInfo::UniformInfo(
+ProgramInfoManager::Program::UniformInfo::UniformInfo(
     GLsizei _size, GLenum _type, const std::string& _name)
     : size(_size),
       type(_type),
@@ -254,15 +41,21 @@
   DCHECK(!(size > 1 && !is_array));
 }
 
-CachedProgramInfoManager::Program::Program()
+ProgramInfoManager::Program::UniformInfo::~UniformInfo() {
+}
+
+ProgramInfoManager::Program::Program()
     : cached_(false),
       max_attrib_name_length_(0),
       max_uniform_name_length_(0),
       link_status_(false) {
 }
 
+ProgramInfoManager::Program::~Program() {
+}
+
 // TODO(gman): Add a faster lookup.
-GLint CachedProgramInfoManager::Program::GetAttribLocation(
+GLint ProgramInfoManager::Program::GetAttribLocation(
     const std::string& name) const {
   for (GLuint ii = 0; ii < attrib_infos_.size(); ++ii) {
     const VertexAttrib& info = attrib_infos_[ii];
@@ -273,7 +66,19 @@
   return -1;
 }
 
-GLint CachedProgramInfoManager::Program::GetUniformLocation(
+const ProgramInfoManager::Program::VertexAttrib*
+ProgramInfoManager::Program::GetAttribInfo(GLint index) const {
+  return (static_cast<size_t>(index) < attrib_infos_.size()) ?
+      &attrib_infos_[index] : NULL;
+}
+
+const ProgramInfoManager::Program::UniformInfo*
+ProgramInfoManager::Program::GetUniformInfo(GLint index) const {
+  return (static_cast<size_t>(index) < uniform_infos_.size()) ?
+      &uniform_infos_[index] : NULL;
+}
+
+GLint ProgramInfoManager::Program::GetUniformLocation(
     const std::string& name) const {
   bool getting_array_location = false;
   size_t open_pos = std::string::npos;
@@ -302,7 +107,7 @@
   return -1;
 }
 
-GLint CachedProgramInfoManager::Program::GetFragDataLocation(
+GLint ProgramInfoManager::Program::GetFragDataLocation(
     const std::string& name) const {
   base::hash_map<std::string, GLint>::const_iterator iter =
       frag_data_locations_.find(name);
@@ -311,12 +116,12 @@
   return iter->second;
 }
 
-void CachedProgramInfoManager::Program::CacheFragDataLocation(
+void ProgramInfoManager::Program::CacheFragDataLocation(
     const std::string& name, GLint loc) {
   frag_data_locations_[name] = loc;
 }
 
-bool CachedProgramInfoManager::Program::GetProgramiv(
+bool ProgramInfoManager::Program::GetProgramiv(
     GLenum pname, GLint* params) {
   switch (pname) {
     case GL_LINK_STATUS:
@@ -340,17 +145,7 @@
   return false;
 }
 
-template<typename T> static T LocalGetAs(
-    const std::vector<int8>& data, uint32 offset, size_t size) {
-  const int8* p = &data[0] + offset;
-  if (offset + size > data.size()) {
-    NOTREACHED();
-    return NULL;
-  }
-  return static_cast<T>(static_cast<const void*>(p));
-}
-
-void CachedProgramInfoManager::Program::Update(
+void ProgramInfoManager::Program::Update(
     GLES2Implementation* gl,
     GLuint program,
     const std::vector<int8>& result) {
@@ -409,16 +204,19 @@
   cached_ = true;
 }
 
-CachedProgramInfoManager::CachedProgramInfoManager() {
+bool ProgramInfoManager::Program::cached() const {
+  return cached_;
 }
 
-CachedProgramInfoManager::~CachedProgramInfoManager() {
 
+ProgramInfoManager::ProgramInfoManager() {
 }
 
-CachedProgramInfoManager::Program*
-    CachedProgramInfoManager::GetProgramInfo(
-        GLES2Implementation* gl, GLuint program) {
+ProgramInfoManager::~ProgramInfoManager() {
+}
+
+ProgramInfoManager::Program* ProgramInfoManager::GetProgramInfo(
+    GLES2Implementation* gl, GLuint program) {
   lock_.AssertAcquired();
   ProgramInfoMap::iterator it = program_infos_.find(program);
   if (it == program_infos_.end()) {
@@ -444,7 +242,7 @@
   return info;
 }
 
-void CachedProgramInfoManager::CreateInfo(GLuint program) {
+void ProgramInfoManager::CreateInfo(GLuint program) {
   base::AutoLock auto_lock(lock_);
   program_infos_.erase(program);
   std::pair<ProgramInfoMap::iterator, bool> result =
@@ -453,12 +251,12 @@
   DCHECK(result.second);
 }
 
-void CachedProgramInfoManager::DeleteInfo(GLuint program) {
+void ProgramInfoManager::DeleteInfo(GLuint program) {
   base::AutoLock auto_lock(lock_);
   program_infos_.erase(program);
 }
 
-bool CachedProgramInfoManager::GetProgramiv(
+bool ProgramInfoManager::GetProgramiv(
     GLES2Implementation* gl, GLuint program, GLenum pname, GLint* params) {
   base::AutoLock auto_lock(lock_);
   Program* info = GetProgramInfo(gl, program);
@@ -468,7 +266,7 @@
   return info->GetProgramiv(pname, params);
 }
 
-GLint CachedProgramInfoManager::GetAttribLocation(
+GLint ProgramInfoManager::GetAttribLocation(
     GLES2Implementation* gl, GLuint program, const char* name) {
   {
     base::AutoLock auto_lock(lock_);
@@ -480,7 +278,7 @@
   return gl->GetAttribLocationHelper(program, name);
 }
 
-GLint CachedProgramInfoManager::GetUniformLocation(
+GLint ProgramInfoManager::GetUniformLocation(
     GLES2Implementation* gl, GLuint program, const char* name) {
   {
     base::AutoLock auto_lock(lock_);
@@ -492,7 +290,7 @@
   return gl->GetUniformLocationHelper(program, name);
 }
 
-GLint CachedProgramInfoManager::GetFragDataLocation(
+GLint ProgramInfoManager::GetFragDataLocation(
     GLES2Implementation* gl, GLuint program, const char* name) {
   // TODO(zmo): make FragData locations part of the ProgramInfo that are
   // fetched altogether from the service side.  See crbug.com/452104.
@@ -516,7 +314,7 @@
   return loc;
 }
 
-bool CachedProgramInfoManager::GetActiveAttrib(
+bool ProgramInfoManager::GetActiveAttrib(
     GLES2Implementation* gl,
     GLuint program, GLuint index, GLsizei bufsize, GLsizei* length,
     GLint* size, GLenum* type, char* name) {
@@ -552,7 +350,7 @@
       program, index, bufsize, length, size, type, name);
 }
 
-bool CachedProgramInfoManager::GetActiveUniform(
+bool ProgramInfoManager::GetActiveUniform(
     GLES2Implementation* gl,
     GLuint program, GLuint index, GLsizei bufsize, GLsizei* length,
     GLint* size, GLenum* type, char* name) {
@@ -588,21 +386,6 @@
       program, index, bufsize, length, size, type, name);
 }
 
-ProgramInfoManager::ProgramInfoManager() {
-}
-
-ProgramInfoManager::~ProgramInfoManager() {
-}
-
-ProgramInfoManager* ProgramInfoManager::Create(
-    bool shared_resources_across_processes) {
-  if (shared_resources_across_processes) {
-    return new NonCachedProgramInfoManager();
-  } else {
-    return new CachedProgramInfoManager();
-  }
-}
-
 }  // namespace gles2
 }  // namespace gpu
 
diff --git a/gpu/command_buffer/client/program_info_manager.h b/gpu/command_buffer/client/program_info_manager.h
index 81be345..712b8ed 100644
--- a/gpu/command_buffer/client/program_info_manager.h
+++ b/gpu/command_buffer/client/program_info_manager.h
@@ -6,48 +6,122 @@
 #define GPU_COMMAND_BUFFER_CLIENT_PROGRAM_INFO_MANAGER_H_
 
 #include <GLES2/gl2.h>
+
+#include <string>
+#include <vector>
+
+#include "base/containers/hash_tables.h"
+#include "base/synchronization/lock.h"
 #include "gles2_impl_export.h"
+#include "gpu/command_buffer/client/gles2_implementation.h"
 
 namespace gpu {
 namespace gles2 {
 
-class GLES2Implementation;
-
 // Manages info about OpenGL ES Programs.
 class GLES2_IMPL_EXPORT ProgramInfoManager {
  public:
-  virtual ~ProgramInfoManager();
-
-  static ProgramInfoManager* Create(bool shared_resources_across_processes);
-
-  virtual void CreateInfo(GLuint program) = 0;
-
-  virtual void DeleteInfo(GLuint program) = 0;
-
-  virtual bool GetProgramiv(
-      GLES2Implementation* gl, GLuint program, GLenum pname, GLint* params) = 0;
-
-  virtual GLint GetAttribLocation(
-      GLES2Implementation* gl, GLuint program, const char* name) = 0;
-
-  virtual GLint GetUniformLocation(
-      GLES2Implementation* gl, GLuint program, const char* name) = 0;
-
-  virtual GLint GetFragDataLocation(
-      GLES2Implementation* gl, GLuint program, const char* name) = 0;
-
-  virtual bool GetActiveAttrib(
-      GLES2Implementation* gl,
-      GLuint program, GLuint index, GLsizei bufsize, GLsizei* length,
-      GLint* size, GLenum* type, char* name) = 0;
-
-  virtual bool GetActiveUniform(
-      GLES2Implementation* gl,
-      GLuint program, GLuint index, GLsizei bufsize, GLsizei* length,
-      GLint* size, GLenum* type, char* name) = 0;
-
- protected:
   ProgramInfoManager();
+  ~ProgramInfoManager();
+
+  void CreateInfo(GLuint program);
+
+  void DeleteInfo(GLuint program);
+
+  bool GetProgramiv(
+      GLES2Implementation* gl, GLuint program, GLenum pname, GLint* params);
+
+  GLint GetAttribLocation(
+      GLES2Implementation* gl, GLuint program, const char* name);
+
+  GLint GetUniformLocation(
+      GLES2Implementation* gl, GLuint program, const char* name);
+
+  GLint GetFragDataLocation(
+      GLES2Implementation* gl, GLuint program, const char* name);
+
+  bool GetActiveAttrib(
+      GLES2Implementation* gl, GLuint program, GLuint index, GLsizei bufsize,
+      GLsizei* length, GLint* size, GLenum* type, char* name);
+
+  bool GetActiveUniform(
+      GLES2Implementation* gl, GLuint program, GLuint index, GLsizei bufsize,
+      GLsizei* length, GLint* size, GLenum* type, char* name);
+
+ private:
+  class Program {
+   public:
+    struct UniformInfo {
+      UniformInfo(GLsizei _size, GLenum _type, const std::string& _name);
+      ~UniformInfo();
+
+      GLsizei size;
+      GLenum type;
+      bool is_array;
+      std::string name;
+      std::vector<GLint> element_locations;
+    };
+    struct VertexAttrib {
+      VertexAttrib(GLsizei _size, GLenum _type, const std::string& _name,
+                   GLint _location);
+      ~VertexAttrib();
+
+      GLsizei size;
+      GLenum type;
+      GLint location;
+      std::string name;
+    };
+
+    Program();
+    ~Program();
+
+    const VertexAttrib* GetAttribInfo(GLint index) const;
+
+    GLint GetAttribLocation(const std::string& name) const;
+
+    const UniformInfo* GetUniformInfo(GLint index) const;
+
+    // Gets the location of a uniform by name.
+    GLint GetUniformLocation(const std::string& name) const;
+
+    GLint GetFragDataLocation(const std::string& name) const;
+    void CacheFragDataLocation(const std::string& name, GLint loc);
+
+    bool GetProgramiv(GLenum pname, GLint* params);
+
+    // Updates the program info after a successful link.
+    void Update(GLES2Implementation* gl,
+                GLuint program,
+                const std::vector<int8>& result);
+
+    bool cached() const;
+
+   private:
+    bool cached_;
+
+    GLsizei max_attrib_name_length_;
+
+    // Attrib by index.
+    std::vector<VertexAttrib> attrib_infos_;
+
+    GLsizei max_uniform_name_length_;
+
+    // Uniform info by index.
+    std::vector<UniformInfo> uniform_infos_;
+
+    base::hash_map<std::string, GLint> frag_data_locations_;
+
+    // This is true if glLinkProgram was successful last time it was called.
+    bool link_status_;
+  };
+
+  Program* GetProgramInfo(GLES2Implementation* gl, GLuint program);
+
+  typedef base::hash_map<GLuint, Program> ProgramInfoMap;
+
+  ProgramInfoMap program_infos_;
+
+  mutable base::Lock lock_;
 };
 
 }  // namespace gles2
diff --git a/gpu/command_buffer/client/program_info_manager_unittest.cc b/gpu/command_buffer/client/program_info_manager_unittest.cc
deleted file mode 100644
index ba62703..0000000
--- a/gpu/command_buffer/client/program_info_manager_unittest.cc
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Tests for the Command Buffer Helper.
-
-#include "gpu/command_buffer/client/program_info_manager.h"
-#include "base/memory/scoped_ptr.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "testing/gmock/include/gmock/gmock.h"
-
-namespace gpu {
-namespace gles2 {
-
-class ProgramInfoManagerTest : public testing::Test {
- protected:
-  void SetUp() override {}
-
-  void TearDown() override {}
-
-  scoped_ptr<ProgramInfoManager> program_info_manager_;
-};
-
-TEST_F(ProgramInfoManagerTest, Basic) {
-}
-
-}  // namespace gles2
-}  // namespace gpu
-
-
diff --git a/gpu/command_buffer/client/share_group.cc b/gpu/command_buffer/client/share_group.cc
index 755614b..6463200 100644
--- a/gpu/command_buffer/client/share_group.cc
+++ b/gpu/command_buffer/client/share_group.cc
@@ -338,7 +338,7 @@
       }
     }
   }
-  program_info_manager_.reset(ProgramInfoManager::Create(false));
+  program_info_manager_.reset(new ProgramInfoManager);
 }
 
 void ShareGroup::set_program_info_manager(ProgramInfoManager* manager) {
diff --git a/gpu/command_buffer/client/transfer_buffer.cc b/gpu/command_buffer/client/transfer_buffer.cc
index da00d87..cb02f15 100644
--- a/gpu/command_buffer/client/transfer_buffer.cc
+++ b/gpu/command_buffer/client/transfer_buffer.cc
@@ -7,8 +7,8 @@
 #include "gpu/command_buffer/client/transfer_buffer.h"
 
 #include "base/bits.h"
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
+#include "base/trace_event/trace_event.h"
 #include "gpu/command_buffer/client/cmd_buffer_helper.h"
 
 namespace gpu {
diff --git a/gpu/command_buffer/cmd_buffer_functions.txt b/gpu/command_buffer/cmd_buffer_functions.txt
index a744074..dc4ce3a 100644
--- a/gpu/command_buffer/cmd_buffer_functions.txt
+++ b/gpu/command_buffer/cmd_buffer_functions.txt
@@ -38,6 +38,7 @@
 GL_APICALL void         GL_APIENTRY glCopyBufferSubData (GLenumBufferTarget readtarget, GLenumBufferTarget writetarget, GLintptrNotNegative readoffset, GLintptrNotNegative writeoffset, GLsizeiptr size);
 GL_APICALL void         GL_APIENTRY glCopyTexImage2D (GLenumTextureTarget target, GLint level, GLenumTextureInternalFormat internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLintTextureBorder border);
 GL_APICALL void         GL_APIENTRY glCopyTexSubImage2D (GLenumTextureTarget target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GL_APICALL void         GL_APIENTRY glCopyTexSubImage3D (GLenumTexture3DTarget target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
 GL_APICALL GLuint       GL_APIENTRY glCreateProgram (void);
 GL_APICALL GLuint       GL_APIENTRY glCreateShader (GLenumShaderType type);
 GL_APICALL void         GL_APIENTRY glCullFace (GLenumFaceType mode);
@@ -85,7 +86,7 @@
 GL_APICALL GLint        GL_APIENTRY glGetFragDataLocation (GLidProgram program, const char* name);
 GL_APICALL void         GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenumFrameBufferTarget target, GLenumAttachment attachment, GLenumFrameBufferParameter pname, GLint* params);
 GL_APICALL void         GL_APIENTRY glGetIntegerv (GLenumGLState pname, GLint* params);
-GL_APICALL void         GL_APIENTRY glGetInternalformativ (GLenumRenderBufferTarget target, GLenumRenderBufferFormat format, GLenumRenderBufferParameter pname, GLsizei bufSize, GLint* params);
+GL_APICALL void         GL_APIENTRY glGetInternalformativ (GLenumRenderBufferTarget target, GLenumRenderBufferFormat format, GLenumRenderBufferParameter pname, GLsizeiNotNegative bufSize, GLint* params);
 GL_APICALL void         GL_APIENTRY glGetProgramiv (GLidProgram program, GLenumProgramParameter pname, GLint* params);
 GL_APICALL void         GL_APIENTRY glGetProgramInfoLog (GLidProgram program, GLsizeiNotNegative bufsize, GLsizeiOptional* length, char* infolog);
 GL_APICALL void         GL_APIENTRY glGetRenderbufferParameteriv (GLenumRenderBufferTarget target, GLenumRenderBufferParameter pname, GLint* params);
@@ -144,14 +145,15 @@
 GL_APICALL void         GL_APIENTRY glStencilOp (GLenumStencilOp fail, GLenumStencilOp zfail, GLenumStencilOp zpass);
 GL_APICALL void         GL_APIENTRY glStencilOpSeparate (GLenumFaceType face, GLenumStencilOp fail, GLenumStencilOp zfail, GLenumStencilOp zpass);
 GL_APICALL void         GL_APIENTRY glTexImage2D (GLenumTextureTarget target, GLint level, GLintTextureInternalFormat internalformat, GLsizei width, GLsizei height, GLintTextureBorder border, GLenumTextureFormat format, GLenumPixelType type, const void* pixels);
-GL_APICALL void         GL_APIENTRY glTexImage3D (GLenumTextureTarget target, GLint level, GLintTextureInternalFormat internalformat, GLsizei width, GLsizei height, GLsizei depth, GLintTextureBorder border, GLenumTextureFormat format, GLenumPixelType type, const void* pixels);
+GL_APICALL void         GL_APIENTRY glTexImage3D (GLenumTexture3DTarget target, GLint level, GLintTextureInternalFormat internalformat, GLsizei width, GLsizei height, GLsizei depth, GLintTextureBorder border, GLenumTextureFormat format, GLenumPixelType type, const void* pixels);
 GL_APICALL void         GL_APIENTRY glTexParameterf (GLenumTextureBindTarget target, GLenumTextureParameter pname, GLfloat param);
 GL_APICALL void         GL_APIENTRY glTexParameterfv (GLenumTextureBindTarget target, GLenumTextureParameter pname, const GLfloat* params);
 GL_APICALL void         GL_APIENTRY glTexParameteri (GLenumTextureBindTarget target, GLenumTextureParameter pname, GLint param);
 GL_APICALL void         GL_APIENTRY glTexParameteriv (GLenumTextureBindTarget target, GLenumTextureParameter pname, const GLint* params);
 GL_APICALL void         GL_APIENTRY glTexStorage3D (GLenumTexture3DTarget target, GLsizei levels, GLenumTextureInternalFormatStorage internalFormat, GLsizei width, GLsizei height, GLsizei depth);
 GL_APICALL void         GL_APIENTRY glTexSubImage2D (GLenumTextureTarget target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenumTextureFormat format, GLenumPixelType type, const void* pixels);
-GL_APICALL void         GL_APIENTRY glTexSubImage3D (GLenumTextureTarget target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenumTextureFormat format, GLenumPixelType type, const void* pixels);
+GL_APICALL void         GL_APIENTRY glTexSubImage3D (GLenumTexture3DTarget target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenumTextureFormat format, GLenumPixelType type, const void* pixels);
+GL_APICALL void         GL_APIENTRY glTransformFeedbackVaryings (GLidProgram program, GLsizeiNotNegative count, const char* const* varyings, GLenumBufferMode buffermode);
 GL_APICALL void         GL_APIENTRY glUniform1f (GLintUniformLocation location, GLfloat x);
 GL_APICALL void         GL_APIENTRY glUniform1fv (GLintUniformLocation location, GLsizeiNotNegative count, const GLfloat* v);
 GL_APICALL void         GL_APIENTRY glUniform1i (GLintUniformLocation location, GLint x);
diff --git a/gpu/command_buffer/common/gles2_cmd_format.h b/gpu/command_buffer/common/gles2_cmd_format.h
index 55fa4a1..e4d38f0 100644
--- a/gpu/command_buffer/common/gles2_cmd_format.h
+++ b/gpu/command_buffer/common/gles2_cmd_format.h
@@ -150,6 +150,27 @@
   // ProgramInput inputs[num_attribs + num_uniforms];
 };
 
+// The data for one UniformBlock from GetProgramInfoCHROMIUM
+struct UniformBlockInfo {
+  uint32_t binding;  // UNIFORM_BLOCK_BINDING
+  uint32_t data_size;  // UNIFORM_BLOCK_DATA_SIZE
+  uint32_t name_offset;  // offset from UniformBlocksHeader to start of name.
+  uint32_t name_length;  // UNIFORM_BLOCK_BLOCK_NAME_LENGTH
+  uint32_t active_uniforms;  // UNIFORM_BLOCK_ACTIVE_UNIFORMS
+  // offset from UniformBlocksHeader to |active_uniforms| indices.
+  uint32_t active_uniform_offset;
+  // UNIFORM_BLOCK_REFERENDED_BY_VERTEX_SHADER
+  uint32_t referenced_by_vertex_shader;
+  // UNIFORM_BLOCK_REFERENDED_BY_FRAGMENT_SHADER
+  uint32_t referenced_by_fragment_shader;
+};
+
+// The format of the bucket filled out by GetUniformBlocksCHROMIUM
+struct UniformBlocksHeader {
+  uint32_t num_uniform_blocks;
+  // UniformBlockInfo uniform_blocks[num_uniform_blocks];
+};
+
 // The format of QuerySync used by EXT_occlusion_query_boolean
 struct QuerySync {
   void Reset() {
@@ -201,6 +222,32 @@
 static_assert(offsetof(ProgramInfoHeader, num_uniforms) == 8,
               "offset of ProgramInfoHeader.num_uniforms should be 8");
 
+static_assert(sizeof(UniformBlockInfo) == 32,
+              "size of UniformBlockInfo should be 32");
+static_assert(offsetof(UniformBlockInfo, binding) == 0,
+              "offset of UniformBlockInfo.binding should be 0");
+static_assert(offsetof(UniformBlockInfo, data_size) == 4,
+              "offset of UniformBlockInfo.data_size should be 4");
+static_assert(offsetof(UniformBlockInfo, name_offset) == 8,
+              "offset of UniformBlockInfo.name_offset should be 8");
+static_assert(offsetof(UniformBlockInfo, name_length) == 12,
+              "offset of UniformBlockInfo.name_length should be 12");
+static_assert(offsetof(UniformBlockInfo, active_uniforms) == 16,
+              "offset of UniformBlockInfo.active_uniforms should be 16");
+static_assert(offsetof(UniformBlockInfo, active_uniform_offset) == 20,
+              "offset of UniformBlockInfo.active_uniform_offset should be 20");
+static_assert(offsetof(UniformBlockInfo, referenced_by_vertex_shader) == 24,
+              "offset of UniformBlockInfo.referenced_by_vertex_shader "
+              "should be 24");
+static_assert(offsetof(UniformBlockInfo, referenced_by_fragment_shader) == 28,
+              "offset of UniformBlockInfo.referenced_by_fragment_shader "
+              "should be 28");
+
+static_assert(sizeof(UniformBlocksHeader) == 4,
+              "size of UniformBlocksHeader should be 4");
+static_assert(offsetof(UniformBlocksHeader, num_uniform_blocks) == 0,
+              "offset of UniformBlocksHeader.num_uniform_blocks should be 0");
+
 namespace cmds {
 
 #include "../common/gles2_cmd_format_autogen.h"
diff --git a/gpu/command_buffer/common/gles2_cmd_format_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_autogen.h
index 00ee1b5..47c2b68 100644
--- a/gpu/command_buffer/common/gles2_cmd_format_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_format_autogen.h
@@ -1773,6 +1773,89 @@
 static_assert(offsetof(CopyTexSubImage2D, height) == 32,
               "offset of CopyTexSubImage2D height should be 32");
 
+struct CopyTexSubImage3D {
+  typedef CopyTexSubImage3D ValueType;
+  static const CommandId kCmdId = kCopyTexSubImage3D;
+  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+  static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
+
+  static uint32_t ComputeSize() {
+    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
+  }
+
+  void SetHeader() { header.SetCmd<ValueType>(); }
+
+  void Init(GLenum _target,
+            GLint _level,
+            GLint _xoffset,
+            GLint _yoffset,
+            GLint _zoffset,
+            GLint _x,
+            GLint _y,
+            GLsizei _width,
+            GLsizei _height) {
+    SetHeader();
+    target = _target;
+    level = _level;
+    xoffset = _xoffset;
+    yoffset = _yoffset;
+    zoffset = _zoffset;
+    x = _x;
+    y = _y;
+    width = _width;
+    height = _height;
+  }
+
+  void* Set(void* cmd,
+            GLenum _target,
+            GLint _level,
+            GLint _xoffset,
+            GLint _yoffset,
+            GLint _zoffset,
+            GLint _x,
+            GLint _y,
+            GLsizei _width,
+            GLsizei _height) {
+    static_cast<ValueType*>(cmd)->Init(_target, _level, _xoffset, _yoffset,
+                                       _zoffset, _x, _y, _width, _height);
+    return NextCmdAddress<ValueType>(cmd);
+  }
+
+  gpu::CommandHeader header;
+  uint32_t target;
+  int32_t level;
+  int32_t xoffset;
+  int32_t yoffset;
+  int32_t zoffset;
+  int32_t x;
+  int32_t y;
+  int32_t width;
+  int32_t height;
+};
+
+static_assert(sizeof(CopyTexSubImage3D) == 40,
+              "size of CopyTexSubImage3D should be 40");
+static_assert(offsetof(CopyTexSubImage3D, header) == 0,
+              "offset of CopyTexSubImage3D header should be 0");
+static_assert(offsetof(CopyTexSubImage3D, target) == 4,
+              "offset of CopyTexSubImage3D target should be 4");
+static_assert(offsetof(CopyTexSubImage3D, level) == 8,
+              "offset of CopyTexSubImage3D level should be 8");
+static_assert(offsetof(CopyTexSubImage3D, xoffset) == 12,
+              "offset of CopyTexSubImage3D xoffset should be 12");
+static_assert(offsetof(CopyTexSubImage3D, yoffset) == 16,
+              "offset of CopyTexSubImage3D yoffset should be 16");
+static_assert(offsetof(CopyTexSubImage3D, zoffset) == 20,
+              "offset of CopyTexSubImage3D zoffset should be 20");
+static_assert(offsetof(CopyTexSubImage3D, x) == 24,
+              "offset of CopyTexSubImage3D x should be 24");
+static_assert(offsetof(CopyTexSubImage3D, y) == 28,
+              "offset of CopyTexSubImage3D y should be 28");
+static_assert(offsetof(CopyTexSubImage3D, width) == 32,
+              "offset of CopyTexSubImage3D width should be 32");
+static_assert(offsetof(CopyTexSubImage3D, height) == 36,
+              "offset of CopyTexSubImage3D height should be 36");
+
 struct CreateProgram {
   typedef CreateProgram ValueType;
   static const CommandId kCmdId = kCreateProgram;
@@ -7012,6 +7095,53 @@
 static_assert(offsetof(TexSubImage3D, internal) == 52,
               "offset of TexSubImage3D internal should be 52");
 
+struct TransformFeedbackVaryingsBucket {
+  typedef TransformFeedbackVaryingsBucket ValueType;
+  static const CommandId kCmdId = kTransformFeedbackVaryingsBucket;
+  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+  static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
+
+  static uint32_t ComputeSize() {
+    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
+  }
+
+  void SetHeader() { header.SetCmd<ValueType>(); }
+
+  void Init(GLuint _program, uint32_t _varyings_bucket_id, GLenum _buffermode) {
+    SetHeader();
+    program = _program;
+    varyings_bucket_id = _varyings_bucket_id;
+    buffermode = _buffermode;
+  }
+
+  void* Set(void* cmd,
+            GLuint _program,
+            uint32_t _varyings_bucket_id,
+            GLenum _buffermode) {
+    static_cast<ValueType*>(cmd)
+        ->Init(_program, _varyings_bucket_id, _buffermode);
+    return NextCmdAddress<ValueType>(cmd);
+  }
+
+  gpu::CommandHeader header;
+  uint32_t program;
+  uint32_t varyings_bucket_id;
+  uint32_t buffermode;
+};
+
+static_assert(sizeof(TransformFeedbackVaryingsBucket) == 16,
+              "size of TransformFeedbackVaryingsBucket should be 16");
+static_assert(offsetof(TransformFeedbackVaryingsBucket, header) == 0,
+              "offset of TransformFeedbackVaryingsBucket header should be 0");
+static_assert(offsetof(TransformFeedbackVaryingsBucket, program) == 4,
+              "offset of TransformFeedbackVaryingsBucket program should be 4");
+static_assert(
+    offsetof(TransformFeedbackVaryingsBucket, varyings_bucket_id) == 8,
+    "offset of TransformFeedbackVaryingsBucket varyings_bucket_id should be 8");
+static_assert(
+    offsetof(TransformFeedbackVaryingsBucket, buffermode) == 12,
+    "offset of TransformFeedbackVaryingsBucket buffermode should be 12");
+
 struct Uniform1f {
   typedef Uniform1f ValueType;
   static const CommandId kCmdId = kUniform1f;
diff --git a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
index 5fc1672..804bebc 100644
--- a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
@@ -562,6 +562,28 @@
   CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
 }
 
+TEST_F(GLES2FormatTest, CopyTexSubImage3D) {
+  cmds::CopyTexSubImage3D& cmd = *GetBufferAs<cmds::CopyTexSubImage3D>();
+  void* next_cmd = cmd.Set(&cmd, static_cast<GLenum>(11),
+                           static_cast<GLint>(12), static_cast<GLint>(13),
+                           static_cast<GLint>(14), static_cast<GLint>(15),
+                           static_cast<GLint>(16), static_cast<GLint>(17),
+                           static_cast<GLsizei>(18), static_cast<GLsizei>(19));
+  EXPECT_EQ(static_cast<uint32_t>(cmds::CopyTexSubImage3D::kCmdId),
+            cmd.header.command);
+  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
+  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
+  EXPECT_EQ(static_cast<GLint>(12), cmd.level);
+  EXPECT_EQ(static_cast<GLint>(13), cmd.xoffset);
+  EXPECT_EQ(static_cast<GLint>(14), cmd.yoffset);
+  EXPECT_EQ(static_cast<GLint>(15), cmd.zoffset);
+  EXPECT_EQ(static_cast<GLint>(16), cmd.x);
+  EXPECT_EQ(static_cast<GLint>(17), cmd.y);
+  EXPECT_EQ(static_cast<GLsizei>(18), cmd.width);
+  EXPECT_EQ(static_cast<GLsizei>(19), cmd.height);
+  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
+}
+
 TEST_F(GLES2FormatTest, CreateProgram) {
   cmds::CreateProgram& cmd = *GetBufferAs<cmds::CreateProgram>();
   void* next_cmd = cmd.Set(&cmd, static_cast<uint32_t>(11));
@@ -2187,6 +2209,21 @@
   CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
 }
 
+TEST_F(GLES2FormatTest, TransformFeedbackVaryingsBucket) {
+  cmds::TransformFeedbackVaryingsBucket& cmd =
+      *GetBufferAs<cmds::TransformFeedbackVaryingsBucket>();
+  void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11),
+                           static_cast<uint32_t>(12), static_cast<GLenum>(13));
+  EXPECT_EQ(
+      static_cast<uint32_t>(cmds::TransformFeedbackVaryingsBucket::kCmdId),
+      cmd.header.command);
+  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
+  EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
+  EXPECT_EQ(static_cast<uint32_t>(12), cmd.varyings_bucket_id);
+  EXPECT_EQ(static_cast<GLenum>(13), cmd.buffermode);
+  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
+}
+
 TEST_F(GLES2FormatTest, Uniform1f) {
   cmds::Uniform1f& cmd = *GetBufferAs<cmds::Uniform1f>();
   void* next_cmd =
diff --git a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
index 6f90f73..df996d8 100644
--- a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
@@ -48,232 +48,234 @@
   OP(CopyBufferSubData)                        /* 289 */ \
   OP(CopyTexImage2D)                           /* 290 */ \
   OP(CopyTexSubImage2D)                        /* 291 */ \
-  OP(CreateProgram)                            /* 292 */ \
-  OP(CreateShader)                             /* 293 */ \
-  OP(CullFace)                                 /* 294 */ \
-  OP(DeleteBuffersImmediate)                   /* 295 */ \
-  OP(DeleteFramebuffersImmediate)              /* 296 */ \
-  OP(DeleteProgram)                            /* 297 */ \
-  OP(DeleteRenderbuffersImmediate)             /* 298 */ \
-  OP(DeleteSamplersImmediate)                  /* 299 */ \
-  OP(DeleteSync)                               /* 300 */ \
-  OP(DeleteShader)                             /* 301 */ \
-  OP(DeleteTexturesImmediate)                  /* 302 */ \
-  OP(DeleteTransformFeedbacksImmediate)        /* 303 */ \
-  OP(DepthFunc)                                /* 304 */ \
-  OP(DepthMask)                                /* 305 */ \
-  OP(DepthRangef)                              /* 306 */ \
-  OP(DetachShader)                             /* 307 */ \
-  OP(Disable)                                  /* 308 */ \
-  OP(DisableVertexAttribArray)                 /* 309 */ \
-  OP(DrawArrays)                               /* 310 */ \
-  OP(DrawElements)                             /* 311 */ \
-  OP(Enable)                                   /* 312 */ \
-  OP(EnableVertexAttribArray)                  /* 313 */ \
-  OP(FenceSync)                                /* 314 */ \
-  OP(Finish)                                   /* 315 */ \
-  OP(Flush)                                    /* 316 */ \
-  OP(FramebufferRenderbuffer)                  /* 317 */ \
-  OP(FramebufferTexture2D)                     /* 318 */ \
-  OP(FramebufferTextureLayer)                  /* 319 */ \
-  OP(FrontFace)                                /* 320 */ \
-  OP(GenBuffersImmediate)                      /* 321 */ \
-  OP(GenerateMipmap)                           /* 322 */ \
-  OP(GenFramebuffersImmediate)                 /* 323 */ \
-  OP(GenRenderbuffersImmediate)                /* 324 */ \
-  OP(GenSamplersImmediate)                     /* 325 */ \
-  OP(GenTexturesImmediate)                     /* 326 */ \
-  OP(GenTransformFeedbacksImmediate)           /* 327 */ \
-  OP(GetActiveAttrib)                          /* 328 */ \
-  OP(GetActiveUniform)                         /* 329 */ \
-  OP(GetAttachedShaders)                       /* 330 */ \
-  OP(GetAttribLocation)                        /* 331 */ \
-  OP(GetBooleanv)                              /* 332 */ \
-  OP(GetBufferParameteriv)                     /* 333 */ \
-  OP(GetError)                                 /* 334 */ \
-  OP(GetFloatv)                                /* 335 */ \
-  OP(GetFragDataLocation)                      /* 336 */ \
-  OP(GetFramebufferAttachmentParameteriv)      /* 337 */ \
-  OP(GetIntegerv)                              /* 338 */ \
-  OP(GetInternalformativ)                      /* 339 */ \
-  OP(GetProgramiv)                             /* 340 */ \
-  OP(GetProgramInfoLog)                        /* 341 */ \
-  OP(GetRenderbufferParameteriv)               /* 342 */ \
-  OP(GetSamplerParameterfv)                    /* 343 */ \
-  OP(GetSamplerParameteriv)                    /* 344 */ \
-  OP(GetShaderiv)                              /* 345 */ \
-  OP(GetShaderInfoLog)                         /* 346 */ \
-  OP(GetShaderPrecisionFormat)                 /* 347 */ \
-  OP(GetShaderSource)                          /* 348 */ \
-  OP(GetString)                                /* 349 */ \
-  OP(GetTexParameterfv)                        /* 350 */ \
-  OP(GetTexParameteriv)                        /* 351 */ \
-  OP(GetUniformfv)                             /* 352 */ \
-  OP(GetUniformiv)                             /* 353 */ \
-  OP(GetUniformLocation)                       /* 354 */ \
-  OP(GetVertexAttribfv)                        /* 355 */ \
-  OP(GetVertexAttribiv)                        /* 356 */ \
-  OP(GetVertexAttribPointerv)                  /* 357 */ \
-  OP(Hint)                                     /* 358 */ \
-  OP(InvalidateFramebufferImmediate)           /* 359 */ \
-  OP(InvalidateSubFramebufferImmediate)        /* 360 */ \
-  OP(IsBuffer)                                 /* 361 */ \
-  OP(IsEnabled)                                /* 362 */ \
-  OP(IsFramebuffer)                            /* 363 */ \
-  OP(IsProgram)                                /* 364 */ \
-  OP(IsRenderbuffer)                           /* 365 */ \
-  OP(IsSampler)                                /* 366 */ \
-  OP(IsShader)                                 /* 367 */ \
-  OP(IsSync)                                   /* 368 */ \
-  OP(IsTexture)                                /* 369 */ \
-  OP(IsTransformFeedback)                      /* 370 */ \
-  OP(LineWidth)                                /* 371 */ \
-  OP(LinkProgram)                              /* 372 */ \
-  OP(PauseTransformFeedback)                   /* 373 */ \
-  OP(PixelStorei)                              /* 374 */ \
-  OP(PolygonOffset)                            /* 375 */ \
-  OP(ReadBuffer)                               /* 376 */ \
-  OP(ReadPixels)                               /* 377 */ \
-  OP(ReleaseShaderCompiler)                    /* 378 */ \
-  OP(RenderbufferStorage)                      /* 379 */ \
-  OP(ResumeTransformFeedback)                  /* 380 */ \
-  OP(SampleCoverage)                           /* 381 */ \
-  OP(SamplerParameterf)                        /* 382 */ \
-  OP(SamplerParameterfvImmediate)              /* 383 */ \
-  OP(SamplerParameteri)                        /* 384 */ \
-  OP(SamplerParameterivImmediate)              /* 385 */ \
-  OP(Scissor)                                  /* 386 */ \
-  OP(ShaderBinary)                             /* 387 */ \
-  OP(ShaderSourceBucket)                       /* 388 */ \
-  OP(StencilFunc)                              /* 389 */ \
-  OP(StencilFuncSeparate)                      /* 390 */ \
-  OP(StencilMask)                              /* 391 */ \
-  OP(StencilMaskSeparate)                      /* 392 */ \
-  OP(StencilOp)                                /* 393 */ \
-  OP(StencilOpSeparate)                        /* 394 */ \
-  OP(TexImage2D)                               /* 395 */ \
-  OP(TexImage3D)                               /* 396 */ \
-  OP(TexParameterf)                            /* 397 */ \
-  OP(TexParameterfvImmediate)                  /* 398 */ \
-  OP(TexParameteri)                            /* 399 */ \
-  OP(TexParameterivImmediate)                  /* 400 */ \
-  OP(TexStorage3D)                             /* 401 */ \
-  OP(TexSubImage2D)                            /* 402 */ \
-  OP(TexSubImage3D)                            /* 403 */ \
-  OP(Uniform1f)                                /* 404 */ \
-  OP(Uniform1fvImmediate)                      /* 405 */ \
-  OP(Uniform1i)                                /* 406 */ \
-  OP(Uniform1ivImmediate)                      /* 407 */ \
-  OP(Uniform1ui)                               /* 408 */ \
-  OP(Uniform1uivImmediate)                     /* 409 */ \
-  OP(Uniform2f)                                /* 410 */ \
-  OP(Uniform2fvImmediate)                      /* 411 */ \
-  OP(Uniform2i)                                /* 412 */ \
-  OP(Uniform2ivImmediate)                      /* 413 */ \
-  OP(Uniform2ui)                               /* 414 */ \
-  OP(Uniform2uivImmediate)                     /* 415 */ \
-  OP(Uniform3f)                                /* 416 */ \
-  OP(Uniform3fvImmediate)                      /* 417 */ \
-  OP(Uniform3i)                                /* 418 */ \
-  OP(Uniform3ivImmediate)                      /* 419 */ \
-  OP(Uniform3ui)                               /* 420 */ \
-  OP(Uniform3uivImmediate)                     /* 421 */ \
-  OP(Uniform4f)                                /* 422 */ \
-  OP(Uniform4fvImmediate)                      /* 423 */ \
-  OP(Uniform4i)                                /* 424 */ \
-  OP(Uniform4ivImmediate)                      /* 425 */ \
-  OP(Uniform4ui)                               /* 426 */ \
-  OP(Uniform4uivImmediate)                     /* 427 */ \
-  OP(UniformMatrix2fvImmediate)                /* 428 */ \
-  OP(UniformMatrix2x3fvImmediate)              /* 429 */ \
-  OP(UniformMatrix2x4fvImmediate)              /* 430 */ \
-  OP(UniformMatrix3fvImmediate)                /* 431 */ \
-  OP(UniformMatrix3x2fvImmediate)              /* 432 */ \
-  OP(UniformMatrix3x4fvImmediate)              /* 433 */ \
-  OP(UniformMatrix4fvImmediate)                /* 434 */ \
-  OP(UniformMatrix4x2fvImmediate)              /* 435 */ \
-  OP(UniformMatrix4x3fvImmediate)              /* 436 */ \
-  OP(UseProgram)                               /* 437 */ \
-  OP(ValidateProgram)                          /* 438 */ \
-  OP(VertexAttrib1f)                           /* 439 */ \
-  OP(VertexAttrib1fvImmediate)                 /* 440 */ \
-  OP(VertexAttrib2f)                           /* 441 */ \
-  OP(VertexAttrib2fvImmediate)                 /* 442 */ \
-  OP(VertexAttrib3f)                           /* 443 */ \
-  OP(VertexAttrib3fvImmediate)                 /* 444 */ \
-  OP(VertexAttrib4f)                           /* 445 */ \
-  OP(VertexAttrib4fvImmediate)                 /* 446 */ \
-  OP(VertexAttribI4i)                          /* 447 */ \
-  OP(VertexAttribI4ivImmediate)                /* 448 */ \
-  OP(VertexAttribI4ui)                         /* 449 */ \
-  OP(VertexAttribI4uivImmediate)               /* 450 */ \
-  OP(VertexAttribIPointer)                     /* 451 */ \
-  OP(VertexAttribPointer)                      /* 452 */ \
-  OP(Viewport)                                 /* 453 */ \
-  OP(BlitFramebufferCHROMIUM)                  /* 454 */ \
-  OP(RenderbufferStorageMultisampleCHROMIUM)   /* 455 */ \
-  OP(RenderbufferStorageMultisampleEXT)        /* 456 */ \
-  OP(FramebufferTexture2DMultisampleEXT)       /* 457 */ \
-  OP(TexStorage2DEXT)                          /* 458 */ \
-  OP(GenQueriesEXTImmediate)                   /* 459 */ \
-  OP(DeleteQueriesEXTImmediate)                /* 460 */ \
-  OP(BeginQueryEXT)                            /* 461 */ \
-  OP(BeginTransformFeedback)                   /* 462 */ \
-  OP(EndQueryEXT)                              /* 463 */ \
-  OP(EndTransformFeedback)                     /* 464 */ \
-  OP(InsertEventMarkerEXT)                     /* 465 */ \
-  OP(PushGroupMarkerEXT)                       /* 466 */ \
-  OP(PopGroupMarkerEXT)                        /* 467 */ \
-  OP(GenVertexArraysOESImmediate)              /* 468 */ \
-  OP(DeleteVertexArraysOESImmediate)           /* 469 */ \
-  OP(IsVertexArrayOES)                         /* 470 */ \
-  OP(BindVertexArrayOES)                       /* 471 */ \
-  OP(SwapBuffers)                              /* 472 */ \
-  OP(GetMaxValueInBufferCHROMIUM)              /* 473 */ \
-  OP(EnableFeatureCHROMIUM)                    /* 474 */ \
-  OP(ResizeCHROMIUM)                           /* 475 */ \
-  OP(GetRequestableExtensionsCHROMIUM)         /* 476 */ \
-  OP(RequestExtensionCHROMIUM)                 /* 477 */ \
-  OP(GetProgramInfoCHROMIUM)                   /* 478 */ \
-  OP(GetTranslatedShaderSourceANGLE)           /* 479 */ \
-  OP(PostSubBufferCHROMIUM)                    /* 480 */ \
-  OP(TexImageIOSurface2DCHROMIUM)              /* 481 */ \
-  OP(CopyTextureCHROMIUM)                      /* 482 */ \
-  OP(DrawArraysInstancedANGLE)                 /* 483 */ \
-  OP(DrawElementsInstancedANGLE)               /* 484 */ \
-  OP(VertexAttribDivisorANGLE)                 /* 485 */ \
-  OP(GenMailboxCHROMIUM)                       /* 486 */ \
-  OP(ProduceTextureCHROMIUMImmediate)          /* 487 */ \
-  OP(ProduceTextureDirectCHROMIUMImmediate)    /* 488 */ \
-  OP(ConsumeTextureCHROMIUMImmediate)          /* 489 */ \
-  OP(CreateAndConsumeTextureCHROMIUMImmediate) /* 490 */ \
-  OP(BindUniformLocationCHROMIUMBucket)        /* 491 */ \
-  OP(GenValuebuffersCHROMIUMImmediate)         /* 492 */ \
-  OP(DeleteValuebuffersCHROMIUMImmediate)      /* 493 */ \
-  OP(IsValuebufferCHROMIUM)                    /* 494 */ \
-  OP(BindValuebufferCHROMIUM)                  /* 495 */ \
-  OP(SubscribeValueCHROMIUM)                   /* 496 */ \
-  OP(PopulateSubscribedValuesCHROMIUM)         /* 497 */ \
-  OP(UniformValuebufferCHROMIUM)               /* 498 */ \
-  OP(BindTexImage2DCHROMIUM)                   /* 499 */ \
-  OP(ReleaseTexImage2DCHROMIUM)                /* 500 */ \
-  OP(TraceBeginCHROMIUM)                       /* 501 */ \
-  OP(TraceEndCHROMIUM)                         /* 502 */ \
-  OP(AsyncTexSubImage2DCHROMIUM)               /* 503 */ \
-  OP(AsyncTexImage2DCHROMIUM)                  /* 504 */ \
-  OP(WaitAsyncTexImage2DCHROMIUM)              /* 505 */ \
-  OP(WaitAllAsyncTexImage2DCHROMIUM)           /* 506 */ \
-  OP(DiscardFramebufferEXTImmediate)           /* 507 */ \
-  OP(LoseContextCHROMIUM)                      /* 508 */ \
-  OP(InsertSyncPointCHROMIUM)                  /* 509 */ \
-  OP(WaitSyncPointCHROMIUM)                    /* 510 */ \
-  OP(DrawBuffersEXTImmediate)                  /* 511 */ \
-  OP(DiscardBackbufferCHROMIUM)                /* 512 */ \
-  OP(ScheduleOverlayPlaneCHROMIUM)             /* 513 */ \
-  OP(SwapInterval)                             /* 514 */ \
-  OP(MatrixLoadfCHROMIUMImmediate)             /* 515 */ \
-  OP(MatrixLoadIdentityCHROMIUM)               /* 516 */ \
-  OP(BlendBarrierKHR)                          /* 517 */
+  OP(CopyTexSubImage3D)                        /* 292 */ \
+  OP(CreateProgram)                            /* 293 */ \
+  OP(CreateShader)                             /* 294 */ \
+  OP(CullFace)                                 /* 295 */ \
+  OP(DeleteBuffersImmediate)                   /* 296 */ \
+  OP(DeleteFramebuffersImmediate)              /* 297 */ \
+  OP(DeleteProgram)                            /* 298 */ \
+  OP(DeleteRenderbuffersImmediate)             /* 299 */ \
+  OP(DeleteSamplersImmediate)                  /* 300 */ \
+  OP(DeleteSync)                               /* 301 */ \
+  OP(DeleteShader)                             /* 302 */ \
+  OP(DeleteTexturesImmediate)                  /* 303 */ \
+  OP(DeleteTransformFeedbacksImmediate)        /* 304 */ \
+  OP(DepthFunc)                                /* 305 */ \
+  OP(DepthMask)                                /* 306 */ \
+  OP(DepthRangef)                              /* 307 */ \
+  OP(DetachShader)                             /* 308 */ \
+  OP(Disable)                                  /* 309 */ \
+  OP(DisableVertexAttribArray)                 /* 310 */ \
+  OP(DrawArrays)                               /* 311 */ \
+  OP(DrawElements)                             /* 312 */ \
+  OP(Enable)                                   /* 313 */ \
+  OP(EnableVertexAttribArray)                  /* 314 */ \
+  OP(FenceSync)                                /* 315 */ \
+  OP(Finish)                                   /* 316 */ \
+  OP(Flush)                                    /* 317 */ \
+  OP(FramebufferRenderbuffer)                  /* 318 */ \
+  OP(FramebufferTexture2D)                     /* 319 */ \
+  OP(FramebufferTextureLayer)                  /* 320 */ \
+  OP(FrontFace)                                /* 321 */ \
+  OP(GenBuffersImmediate)                      /* 322 */ \
+  OP(GenerateMipmap)                           /* 323 */ \
+  OP(GenFramebuffersImmediate)                 /* 324 */ \
+  OP(GenRenderbuffersImmediate)                /* 325 */ \
+  OP(GenSamplersImmediate)                     /* 326 */ \
+  OP(GenTexturesImmediate)                     /* 327 */ \
+  OP(GenTransformFeedbacksImmediate)           /* 328 */ \
+  OP(GetActiveAttrib)                          /* 329 */ \
+  OP(GetActiveUniform)                         /* 330 */ \
+  OP(GetAttachedShaders)                       /* 331 */ \
+  OP(GetAttribLocation)                        /* 332 */ \
+  OP(GetBooleanv)                              /* 333 */ \
+  OP(GetBufferParameteriv)                     /* 334 */ \
+  OP(GetError)                                 /* 335 */ \
+  OP(GetFloatv)                                /* 336 */ \
+  OP(GetFragDataLocation)                      /* 337 */ \
+  OP(GetFramebufferAttachmentParameteriv)      /* 338 */ \
+  OP(GetIntegerv)                              /* 339 */ \
+  OP(GetInternalformativ)                      /* 340 */ \
+  OP(GetProgramiv)                             /* 341 */ \
+  OP(GetProgramInfoLog)                        /* 342 */ \
+  OP(GetRenderbufferParameteriv)               /* 343 */ \
+  OP(GetSamplerParameterfv)                    /* 344 */ \
+  OP(GetSamplerParameteriv)                    /* 345 */ \
+  OP(GetShaderiv)                              /* 346 */ \
+  OP(GetShaderInfoLog)                         /* 347 */ \
+  OP(GetShaderPrecisionFormat)                 /* 348 */ \
+  OP(GetShaderSource)                          /* 349 */ \
+  OP(GetString)                                /* 350 */ \
+  OP(GetTexParameterfv)                        /* 351 */ \
+  OP(GetTexParameteriv)                        /* 352 */ \
+  OP(GetUniformfv)                             /* 353 */ \
+  OP(GetUniformiv)                             /* 354 */ \
+  OP(GetUniformLocation)                       /* 355 */ \
+  OP(GetVertexAttribfv)                        /* 356 */ \
+  OP(GetVertexAttribiv)                        /* 357 */ \
+  OP(GetVertexAttribPointerv)                  /* 358 */ \
+  OP(Hint)                                     /* 359 */ \
+  OP(InvalidateFramebufferImmediate)           /* 360 */ \
+  OP(InvalidateSubFramebufferImmediate)        /* 361 */ \
+  OP(IsBuffer)                                 /* 362 */ \
+  OP(IsEnabled)                                /* 363 */ \
+  OP(IsFramebuffer)                            /* 364 */ \
+  OP(IsProgram)                                /* 365 */ \
+  OP(IsRenderbuffer)                           /* 366 */ \
+  OP(IsSampler)                                /* 367 */ \
+  OP(IsShader)                                 /* 368 */ \
+  OP(IsSync)                                   /* 369 */ \
+  OP(IsTexture)                                /* 370 */ \
+  OP(IsTransformFeedback)                      /* 371 */ \
+  OP(LineWidth)                                /* 372 */ \
+  OP(LinkProgram)                              /* 373 */ \
+  OP(PauseTransformFeedback)                   /* 374 */ \
+  OP(PixelStorei)                              /* 375 */ \
+  OP(PolygonOffset)                            /* 376 */ \
+  OP(ReadBuffer)                               /* 377 */ \
+  OP(ReadPixels)                               /* 378 */ \
+  OP(ReleaseShaderCompiler)                    /* 379 */ \
+  OP(RenderbufferStorage)                      /* 380 */ \
+  OP(ResumeTransformFeedback)                  /* 381 */ \
+  OP(SampleCoverage)                           /* 382 */ \
+  OP(SamplerParameterf)                        /* 383 */ \
+  OP(SamplerParameterfvImmediate)              /* 384 */ \
+  OP(SamplerParameteri)                        /* 385 */ \
+  OP(SamplerParameterivImmediate)              /* 386 */ \
+  OP(Scissor)                                  /* 387 */ \
+  OP(ShaderBinary)                             /* 388 */ \
+  OP(ShaderSourceBucket)                       /* 389 */ \
+  OP(StencilFunc)                              /* 390 */ \
+  OP(StencilFuncSeparate)                      /* 391 */ \
+  OP(StencilMask)                              /* 392 */ \
+  OP(StencilMaskSeparate)                      /* 393 */ \
+  OP(StencilOp)                                /* 394 */ \
+  OP(StencilOpSeparate)                        /* 395 */ \
+  OP(TexImage2D)                               /* 396 */ \
+  OP(TexImage3D)                               /* 397 */ \
+  OP(TexParameterf)                            /* 398 */ \
+  OP(TexParameterfvImmediate)                  /* 399 */ \
+  OP(TexParameteri)                            /* 400 */ \
+  OP(TexParameterivImmediate)                  /* 401 */ \
+  OP(TexStorage3D)                             /* 402 */ \
+  OP(TexSubImage2D)                            /* 403 */ \
+  OP(TexSubImage3D)                            /* 404 */ \
+  OP(TransformFeedbackVaryingsBucket)          /* 405 */ \
+  OP(Uniform1f)                                /* 406 */ \
+  OP(Uniform1fvImmediate)                      /* 407 */ \
+  OP(Uniform1i)                                /* 408 */ \
+  OP(Uniform1ivImmediate)                      /* 409 */ \
+  OP(Uniform1ui)                               /* 410 */ \
+  OP(Uniform1uivImmediate)                     /* 411 */ \
+  OP(Uniform2f)                                /* 412 */ \
+  OP(Uniform2fvImmediate)                      /* 413 */ \
+  OP(Uniform2i)                                /* 414 */ \
+  OP(Uniform2ivImmediate)                      /* 415 */ \
+  OP(Uniform2ui)                               /* 416 */ \
+  OP(Uniform2uivImmediate)                     /* 417 */ \
+  OP(Uniform3f)                                /* 418 */ \
+  OP(Uniform3fvImmediate)                      /* 419 */ \
+  OP(Uniform3i)                                /* 420 */ \
+  OP(Uniform3ivImmediate)                      /* 421 */ \
+  OP(Uniform3ui)                               /* 422 */ \
+  OP(Uniform3uivImmediate)                     /* 423 */ \
+  OP(Uniform4f)                                /* 424 */ \
+  OP(Uniform4fvImmediate)                      /* 425 */ \
+  OP(Uniform4i)                                /* 426 */ \
+  OP(Uniform4ivImmediate)                      /* 427 */ \
+  OP(Uniform4ui)                               /* 428 */ \
+  OP(Uniform4uivImmediate)                     /* 429 */ \
+  OP(UniformMatrix2fvImmediate)                /* 430 */ \
+  OP(UniformMatrix2x3fvImmediate)              /* 431 */ \
+  OP(UniformMatrix2x4fvImmediate)              /* 432 */ \
+  OP(UniformMatrix3fvImmediate)                /* 433 */ \
+  OP(UniformMatrix3x2fvImmediate)              /* 434 */ \
+  OP(UniformMatrix3x4fvImmediate)              /* 435 */ \
+  OP(UniformMatrix4fvImmediate)                /* 436 */ \
+  OP(UniformMatrix4x2fvImmediate)              /* 437 */ \
+  OP(UniformMatrix4x3fvImmediate)              /* 438 */ \
+  OP(UseProgram)                               /* 439 */ \
+  OP(ValidateProgram)                          /* 440 */ \
+  OP(VertexAttrib1f)                           /* 441 */ \
+  OP(VertexAttrib1fvImmediate)                 /* 442 */ \
+  OP(VertexAttrib2f)                           /* 443 */ \
+  OP(VertexAttrib2fvImmediate)                 /* 444 */ \
+  OP(VertexAttrib3f)                           /* 445 */ \
+  OP(VertexAttrib3fvImmediate)                 /* 446 */ \
+  OP(VertexAttrib4f)                           /* 447 */ \
+  OP(VertexAttrib4fvImmediate)                 /* 448 */ \
+  OP(VertexAttribI4i)                          /* 449 */ \
+  OP(VertexAttribI4ivImmediate)                /* 450 */ \
+  OP(VertexAttribI4ui)                         /* 451 */ \
+  OP(VertexAttribI4uivImmediate)               /* 452 */ \
+  OP(VertexAttribIPointer)                     /* 453 */ \
+  OP(VertexAttribPointer)                      /* 454 */ \
+  OP(Viewport)                                 /* 455 */ \
+  OP(BlitFramebufferCHROMIUM)                  /* 456 */ \
+  OP(RenderbufferStorageMultisampleCHROMIUM)   /* 457 */ \
+  OP(RenderbufferStorageMultisampleEXT)        /* 458 */ \
+  OP(FramebufferTexture2DMultisampleEXT)       /* 459 */ \
+  OP(TexStorage2DEXT)                          /* 460 */ \
+  OP(GenQueriesEXTImmediate)                   /* 461 */ \
+  OP(DeleteQueriesEXTImmediate)                /* 462 */ \
+  OP(BeginQueryEXT)                            /* 463 */ \
+  OP(BeginTransformFeedback)                   /* 464 */ \
+  OP(EndQueryEXT)                              /* 465 */ \
+  OP(EndTransformFeedback)                     /* 466 */ \
+  OP(InsertEventMarkerEXT)                     /* 467 */ \
+  OP(PushGroupMarkerEXT)                       /* 468 */ \
+  OP(PopGroupMarkerEXT)                        /* 469 */ \
+  OP(GenVertexArraysOESImmediate)              /* 470 */ \
+  OP(DeleteVertexArraysOESImmediate)           /* 471 */ \
+  OP(IsVertexArrayOES)                         /* 472 */ \
+  OP(BindVertexArrayOES)                       /* 473 */ \
+  OP(SwapBuffers)                              /* 474 */ \
+  OP(GetMaxValueInBufferCHROMIUM)              /* 475 */ \
+  OP(EnableFeatureCHROMIUM)                    /* 476 */ \
+  OP(ResizeCHROMIUM)                           /* 477 */ \
+  OP(GetRequestableExtensionsCHROMIUM)         /* 478 */ \
+  OP(RequestExtensionCHROMIUM)                 /* 479 */ \
+  OP(GetProgramInfoCHROMIUM)                   /* 480 */ \
+  OP(GetTranslatedShaderSourceANGLE)           /* 481 */ \
+  OP(PostSubBufferCHROMIUM)                    /* 482 */ \
+  OP(TexImageIOSurface2DCHROMIUM)              /* 483 */ \
+  OP(CopyTextureCHROMIUM)                      /* 484 */ \
+  OP(DrawArraysInstancedANGLE)                 /* 485 */ \
+  OP(DrawElementsInstancedANGLE)               /* 486 */ \
+  OP(VertexAttribDivisorANGLE)                 /* 487 */ \
+  OP(GenMailboxCHROMIUM)                       /* 488 */ \
+  OP(ProduceTextureCHROMIUMImmediate)          /* 489 */ \
+  OP(ProduceTextureDirectCHROMIUMImmediate)    /* 490 */ \
+  OP(ConsumeTextureCHROMIUMImmediate)          /* 491 */ \
+  OP(CreateAndConsumeTextureCHROMIUMImmediate) /* 492 */ \
+  OP(BindUniformLocationCHROMIUMBucket)        /* 493 */ \
+  OP(GenValuebuffersCHROMIUMImmediate)         /* 494 */ \
+  OP(DeleteValuebuffersCHROMIUMImmediate)      /* 495 */ \
+  OP(IsValuebufferCHROMIUM)                    /* 496 */ \
+  OP(BindValuebufferCHROMIUM)                  /* 497 */ \
+  OP(SubscribeValueCHROMIUM)                   /* 498 */ \
+  OP(PopulateSubscribedValuesCHROMIUM)         /* 499 */ \
+  OP(UniformValuebufferCHROMIUM)               /* 500 */ \
+  OP(BindTexImage2DCHROMIUM)                   /* 501 */ \
+  OP(ReleaseTexImage2DCHROMIUM)                /* 502 */ \
+  OP(TraceBeginCHROMIUM)                       /* 503 */ \
+  OP(TraceEndCHROMIUM)                         /* 504 */ \
+  OP(AsyncTexSubImage2DCHROMIUM)               /* 505 */ \
+  OP(AsyncTexImage2DCHROMIUM)                  /* 506 */ \
+  OP(WaitAsyncTexImage2DCHROMIUM)              /* 507 */ \
+  OP(WaitAllAsyncTexImage2DCHROMIUM)           /* 508 */ \
+  OP(DiscardFramebufferEXTImmediate)           /* 509 */ \
+  OP(LoseContextCHROMIUM)                      /* 510 */ \
+  OP(InsertSyncPointCHROMIUM)                  /* 511 */ \
+  OP(WaitSyncPointCHROMIUM)                    /* 512 */ \
+  OP(DrawBuffersEXTImmediate)                  /* 513 */ \
+  OP(DiscardBackbufferCHROMIUM)                /* 514 */ \
+  OP(ScheduleOverlayPlaneCHROMIUM)             /* 515 */ \
+  OP(SwapInterval)                             /* 516 */ \
+  OP(MatrixLoadfCHROMIUMImmediate)             /* 517 */ \
+  OP(MatrixLoadIdentityCHROMIUM)               /* 518 */ \
+  OP(BlendBarrierKHR)                          /* 519 */
 
 enum CommandId {
   kStartPoint = cmd::kLastCommonId,  // All GLES2 commands start after this.
diff --git a/gpu/command_buffer/common/gles2_cmd_utils_autogen.h b/gpu/command_buffer/common/gles2_cmd_utils_autogen.h
index 02e4440..a2f4ca7 100644
--- a/gpu/command_buffer/common/gles2_cmd_utils_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_utils_autogen.h
@@ -14,6 +14,7 @@
 static std::string GetStringAttachment(uint32_t value);
 static std::string GetStringBackbufferAttachment(uint32_t value);
 static std::string GetStringBlitFilter(uint32_t value);
+static std::string GetStringBufferMode(uint32_t value);
 static std::string GetStringBufferParameter(uint32_t value);
 static std::string GetStringBufferTarget(uint32_t value);
 static std::string GetStringBufferUsage(uint32_t value);
diff --git a/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h b/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
index 393ee43..db3a6c4 100644
--- a/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
@@ -4475,6 +4475,15 @@
                                            arraysize(string_table), value);
 }
 
+std::string GLES2Util::GetStringBufferMode(uint32_t value) {
+  static const EnumToString string_table[] = {
+      {GL_INTERLEAVED_ATTRIBS, "GL_INTERLEAVED_ATTRIBS"},
+      {GL_SEPARATE_ATTRIBS, "GL_SEPARATE_ATTRIBS"},
+  };
+  return GLES2Util::GetQualifiedEnumString(string_table,
+                                           arraysize(string_table), value);
+}
+
 std::string GLES2Util::GetStringBufferParameter(uint32_t value) {
   static const EnumToString string_table[] = {
       {GL_BUFFER_SIZE, "GL_BUFFER_SIZE"}, {GL_BUFFER_USAGE, "GL_BUFFER_USAGE"},
diff --git a/gpu/command_buffer/common/trace_event.h b/gpu/command_buffer/common/trace_event.h
index e63517e..4bc18d7 100644
--- a/gpu/command_buffer/common/trace_event.h
+++ b/gpu/command_buffer/common/trace_event.h
@@ -5,6 +5,6 @@
 #ifndef GPU_COMMAND_BUFFER_COMMON_TRACE_EVENT_H_
 #define GPU_COMMAND_BUFFER_COMMON_TRACE_EVENT_H_
 
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 
 #endif  // GPU_COMMAND_BUFFER_COMMON_TRACE_EVENT_H_
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_android.cc b/gpu/command_buffer/service/async_pixel_transfer_manager_android.cc
index 5b86b87..2389dc1 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_manager_android.cc
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_android.cc
@@ -5,8 +5,8 @@
 #include "gpu/command_buffer/service/async_pixel_transfer_manager.h"
 
 #include "base/command_line.h"
-#include "base/debug/trace_event.h"
 #include "base/sys_info.h"
+#include "base/trace_event/trace_event.h"
 #include "gpu/command_buffer/service/async_pixel_transfer_manager_egl.h"
 #include "gpu/command_buffer/service/async_pixel_transfer_manager_idle.h"
 #include "gpu/command_buffer/service/async_pixel_transfer_manager_stub.h"
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_egl.cc b/gpu/command_buffer/service/async_pixel_transfer_manager_egl.cc
index 4b87938..f0faded 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_manager_egl.cc
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_egl.cc
@@ -8,13 +8,13 @@
 #include <string>
 
 #include "base/bind.h"
-#include "base/debug/trace_event.h"
-#include "base/debug/trace_event_synthetic_delay.h"
 #include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/threading/thread.h"
+#include "base/trace_event/trace_event.h"
+#include "base/trace_event/trace_event_synthetic_delay.h"
 #include "gpu/command_buffer/service/async_pixel_transfer_delegate.h"
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_surface_egl.h"
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc b/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc
index de92c0c..2ed4f7d 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc
@@ -5,10 +5,10 @@
 #include "gpu/command_buffer/service/async_pixel_transfer_manager_idle.h"
 
 #include "base/bind.h"
-#include "base/debug/trace_event.h"
-#include "base/debug/trace_event_synthetic_delay.h"
 #include "base/lazy_instance.h"
 #include "base/memory/weak_ptr.h"
+#include "base/trace_event/trace_event.h"
+#include "base/trace_event/trace_event_synthetic_delay.h"
 #include "ui/gl/scoped_binders.h"
 
 namespace gpu {
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_linux.cc b/gpu/command_buffer/service/async_pixel_transfer_manager_linux.cc
index b2be97d..e756a46 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_manager_linux.cc
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_linux.cc
@@ -5,7 +5,7 @@
 #include "gpu/command_buffer/service/async_pixel_transfer_manager.h"
 
 #include "base/command_line.h"
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "gpu/command_buffer/service/async_pixel_transfer_manager_idle.h"
 #include "gpu/command_buffer/service/async_pixel_transfer_manager_share_group.h"
 #include "gpu/command_buffer/service/async_pixel_transfer_manager_stub.h"
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_mac.cc b/gpu/command_buffer/service/async_pixel_transfer_manager_mac.cc
index 8c19b57..6f7c5d1 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_manager_mac.cc
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_mac.cc
@@ -4,7 +4,7 @@
 
 #include "gpu/command_buffer/service/async_pixel_transfer_manager.h"
 
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "gpu/command_buffer/service/async_pixel_transfer_manager_idle.h"
 #include "gpu/command_buffer/service/async_pixel_transfer_manager_stub.h"
 #include "ui/gl/gl_implementation.h"
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.cc b/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.cc
index 4f85e33..16089f6 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.cc
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.cc
@@ -7,8 +7,6 @@
 #include <list>
 
 #include "base/bind.h"
-#include "base/debug/trace_event.h"
-#include "base/debug/trace_event_synthetic_delay.h"
 #include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
@@ -18,6 +16,8 @@
 #include "base/synchronization/waitable_event.h"
 #include "base/threading/thread.h"
 #include "base/threading/thread_checker.h"
+#include "base/trace_event/trace_event.h"
+#include "base/trace_event/trace_event_synthetic_delay.h"
 #include "gpu/command_buffer/service/async_pixel_transfer_delegate.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_win.cc b/gpu/command_buffer/service/async_pixel_transfer_manager_win.cc
index 6955885..3bf32c0 100644
--- a/gpu/command_buffer/service/async_pixel_transfer_manager_win.cc
+++ b/gpu/command_buffer/service/async_pixel_transfer_manager_win.cc
@@ -4,7 +4,7 @@
 
 #include "gpu/command_buffer/service/async_pixel_transfer_manager.h"
 
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "gpu/command_buffer/service/async_pixel_transfer_manager_idle.h"
 #include "gpu/command_buffer/service/async_pixel_transfer_manager_stub.h"
 #include "ui/gl/gl_implementation.h"
diff --git a/gpu/command_buffer/service/buffer_manager.cc b/gpu/command_buffer/service/buffer_manager.cc
index 94a252c..1f64fd5 100644
--- a/gpu/command_buffer/service/buffer_manager.cc
+++ b/gpu/command_buffer/service/buffer_manager.cc
@@ -4,8 +4,8 @@
 
 #include "gpu/command_buffer/service/buffer_manager.h"
 #include <limits>
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
+#include "base/trace_event/trace_event.h"
 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
 #include "gpu/command_buffer/service/context_state.h"
 #include "gpu/command_buffer/service/error_state.h"
diff --git a/gpu/command_buffer/service/cmd_parser.cc b/gpu/command_buffer/service/cmd_parser.cc
index ffcdfff..d7dfc59 100644
--- a/gpu/command_buffer/service/cmd_parser.cc
+++ b/gpu/command_buffer/service/cmd_parser.cc
@@ -7,7 +7,7 @@
 #include "gpu/command_buffer/service/cmd_parser.h"
 
 #include "base/logging.h"
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 
 namespace gpu {
 
diff --git a/gpu/command_buffer/service/command_buffer_service.cc b/gpu/command_buffer/service/command_buffer_service.cc
index 1453a0a..21e2ae4 100644
--- a/gpu/command_buffer/service/command_buffer_service.cc
+++ b/gpu/command_buffer/service/command_buffer_service.cc
@@ -7,7 +7,7 @@
 #include <limits>
 
 #include "base/logging.h"
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "gpu/command_buffer/common/cmd_buffer_common.h"
 #include "gpu/command_buffer/common/command_buffer_shared.h"
 #include "gpu/command_buffer/service/transfer_buffer_manager.h"
diff --git a/gpu/command_buffer/service/feature_info_unittest.cc b/gpu/command_buffer/service/feature_info_unittest.cc
index e81dad1..8455be6 100644
--- a/gpu/command_buffer/service/feature_info_unittest.cc
+++ b/gpu/command_buffer/service/feature_info_unittest.cc
@@ -42,7 +42,7 @@
   }
 
   void SetupInitExpectations(const char* extensions) {
-    SetupInitExpectationsWithGLVersion(extensions, "", "");
+    SetupInitExpectationsWithGLVersion(extensions, "", "3.0");
   }
 
   void SetupInitExpectationsWithGLVersion(
diff --git a/gpu/command_buffer/service/framebuffer_manager_unittest.cc b/gpu/command_buffer/service/framebuffer_manager_unittest.cc
index 859726d..ddd3739 100644
--- a/gpu/command_buffer/service/framebuffer_manager_unittest.cc
+++ b/gpu/command_buffer/service/framebuffer_manager_unittest.cc
@@ -126,10 +126,12 @@
   }
 
  protected:
-  void SetUp() override { InitializeContext("", ""); }
+  void SetUp() override {
+    InitializeContext("2.0", "GL_EXT_framebuffer_object");
+  }
 
   void InitializeContext(const char* gl_version, const char* extensions) {
-    GpuServiceTest::SetUp();
+    GpuServiceTest::SetUpWithGLVersion(gl_version, extensions);
     TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion(gl_.get(),
         extensions, "", gl_version);
     feature_info_->Initialize();
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 13b10c5..f37c61a 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -17,13 +17,13 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/command_line.h"
-#include "base/debug/trace_event.h"
-#include "base/debug/trace_event_synthetic_delay.h"
 #include "base/float_util.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/numerics/safe_math.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
+#include "base/trace_event/trace_event.h"
+#include "base/trace_event/trace_event_synthetic_delay.h"
 #include "build/build_config.h"
 #define GLES2_GPU_SERVICE 1
 #include "gpu/command_buffer/common/debug_marker_manager.h"
@@ -1178,6 +1178,11 @@
   void DoShaderSource(
       GLuint client_id, GLsizei count, const char** data, const GLint* length);
 
+  // Wrapper for glTransformFeedbackVaryings.
+  void DoTransformFeedbackVaryings(
+      GLuint client_program_id, GLsizei count, const char* const* varyings,
+      GLenum buffer_mode);
+
   // Clear any textures used by the current program.
   bool ClearUnclearedTextures();
 
@@ -7057,6 +7062,18 @@
   shader->set_source(str);
 }
 
+void GLES2DecoderImpl::DoTransformFeedbackVaryings(
+    GLuint client_program_id, GLsizei count, const char* const* varyings,
+    GLenum buffer_mode) {
+  Program* program = GetProgramInfoNotShader(
+      client_program_id, "glTransformFeedbackVaryings");
+  if (!program) {
+    return;
+  }
+  glTransformFeedbackVaryings(
+      program->service_id(), count, varyings, buffer_mode);
+}
+
 void GLES2DecoderImpl::DoCompileShader(GLuint client_id) {
   TRACE_EVENT0("gpu", "GLES2DecoderImpl::DoCompileShader");
   Shader* shader = GetShaderInfoNotProgram(client_id, "glCompileShader");
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
index a1947f4..720d54e 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
@@ -86,10 +86,6 @@
   GLuint buffer = c.buffer;
   GLintptr offset = static_cast<GLintptr>(c.offset);
   GLsizeiptr size = static_cast<GLsizeiptr>(c.size);
-  if (size < 0) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glBindBufferRange", "size < 0");
-    return error::kNoError;
-  }
   if (!group_->GetBufferServiceId(buffer, &buffer)) {
     if (!group_->bind_generates_resource()) {
       LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glBindBufferRange",
@@ -616,10 +612,6 @@
   GLintptr readoffset = static_cast<GLintptr>(c.readoffset);
   GLintptr writeoffset = static_cast<GLintptr>(c.writeoffset);
   GLsizeiptr size = static_cast<GLsizeiptr>(c.size);
-  if (size < 0) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyBufferSubData", "size < 0");
-    return error::kNoError;
-  }
   glCopyBufferSubData(readtarget, writetarget, readoffset, writeoffset, size);
   return error::kNoError;
 }
@@ -697,6 +689,32 @@
   return error::kNoError;
 }
 
+error::Error GLES2DecoderImpl::HandleCopyTexSubImage3D(
+    uint32_t immediate_data_size,
+    const void* cmd_data) {
+  if (!unsafe_es3_apis_enabled())
+    return error::kUnknownCommand;
+  const gles2::cmds::CopyTexSubImage3D& c =
+      *static_cast<const gles2::cmds::CopyTexSubImage3D*>(cmd_data);
+  (void)c;
+  error::Error error;
+  error = WillAccessBoundFramebufferForRead();
+  if (error != error::kNoError)
+    return error;
+  GLenum target = static_cast<GLenum>(c.target);
+  GLint level = static_cast<GLint>(c.level);
+  GLint xoffset = static_cast<GLint>(c.xoffset);
+  GLint yoffset = static_cast<GLint>(c.yoffset);
+  GLint zoffset = static_cast<GLint>(c.zoffset);
+  GLint x = static_cast<GLint>(c.x);
+  GLint y = static_cast<GLint>(c.y);
+  GLsizei width = static_cast<GLsizei>(c.width);
+  GLsizei height = static_cast<GLsizei>(c.height);
+  glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width,
+                      height);
+  return error::kNoError;
+}
+
 error::Error GLES2DecoderImpl::HandleCreateProgram(uint32_t immediate_data_size,
                                                    const void* cmd_data) {
   const gles2::cmds::CreateProgram& c =
@@ -1526,11 +1544,6 @@
   Result* result = GetSharedMemoryAs<Result*>(
       c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
   GLint* params = result ? result->GetData() : NULL;
-  if (bufSize < 0) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glGetInternalformativ",
-                       "bufSize < 0");
-    return error::kNoError;
-  }
   if (params == NULL) {
     return error::kOutOfBounds;
   }
@@ -1978,16 +1991,6 @@
   if (attachments == NULL) {
     return error::kOutOfBounds;
   }
-  if (width < 0) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glInvalidateSubFramebuffer",
-                       "width < 0");
-    return error::kNoError;
-  }
-  if (height < 0) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glInvalidateSubFramebuffer",
-                       "height < 0");
-    return error::kNoError;
-  }
   glInvalidateSubFramebuffer(target, count, attachments, x, y, width, height);
   return error::kNoError;
 }
@@ -2799,26 +2802,68 @@
   GLsizei width = static_cast<GLsizei>(c.width);
   GLsizei height = static_cast<GLsizei>(c.height);
   GLsizei depth = static_cast<GLsizei>(c.depth);
-  if (levels < 0) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glTexStorage3D", "levels < 0");
-    return error::kNoError;
-  }
-  if (width < 0) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glTexStorage3D", "width < 0");
-    return error::kNoError;
-  }
-  if (height < 0) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glTexStorage3D", "height < 0");
-    return error::kNoError;
-  }
-  if (depth < 0) {
-    LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glTexStorage3D", "depth < 0");
-    return error::kNoError;
-  }
   glTexStorage3D(target, levels, internalFormat, width, height, depth);
   return error::kNoError;
 }
 
+error::Error GLES2DecoderImpl::HandleTransformFeedbackVaryingsBucket(
+    uint32_t immediate_data_size,
+    const void* cmd_data) {
+  if (!unsafe_es3_apis_enabled())
+    return error::kUnknownCommand;
+  const gles2::cmds::TransformFeedbackVaryingsBucket& c =
+      *static_cast<const gles2::cmds::TransformFeedbackVaryingsBucket*>(
+          cmd_data);
+  (void)c;
+  GLuint program = static_cast<GLuint>(c.program);
+
+  const size_t kMinBucketSize = sizeof(GLint);
+  // Each string has at least |length| in the header and a NUL character.
+  const size_t kMinStringSize = sizeof(GLint) + 1;
+  Bucket* bucket = GetBucket(c.varyings_bucket_id);
+  if (!bucket) {
+    return error::kInvalidArguments;
+  }
+  const size_t bucket_size = bucket->size();
+  if (bucket_size < kMinBucketSize) {
+    return error::kInvalidArguments;
+  }
+  const char* bucket_data = bucket->GetDataAs<const char*>(0, bucket_size);
+  const GLint* header = reinterpret_cast<const GLint*>(bucket_data);
+  GLsizei count = static_cast<GLsizei>(header[0]);
+  if (count < 0) {
+    return error::kInvalidArguments;
+  }
+  const size_t max_count = (bucket_size - kMinBucketSize) / kMinStringSize;
+  if (max_count < static_cast<size_t>(count)) {
+    return error::kInvalidArguments;
+  }
+  const GLint* length = header + 1;
+  scoped_ptr<const char* []> strs;
+  if (count > 0)
+    strs.reset(new const char* [count]);
+  const char** varyings = strs.get();
+  base::CheckedNumeric<size_t> total_size = sizeof(GLint);
+  total_size *= count + 1;  // Header size.
+  if (!total_size.IsValid())
+    return error::kInvalidArguments;
+  for (GLsizei ii = 0; ii < count; ++ii) {
+    varyings[ii] = bucket_data + total_size.ValueOrDefault(0);
+    total_size += length[ii];
+    total_size += 1;  // NUL char at the end of each char array.
+    if (!total_size.IsValid() || total_size.ValueOrDefault(0) > bucket_size ||
+        varyings[ii][length[ii]] != 0) {
+      return error::kInvalidArguments;
+    }
+  }
+  if (total_size.ValueOrDefault(0) != bucket_size) {
+    return error::kInvalidArguments;
+  }
+  GLenum buffermode = static_cast<GLenum>(c.buffermode);
+  DoTransformFeedbackVaryings(program, count, varyings, buffermode);
+  return error::kNoError;
+}
+
 error::Error GLES2DecoderImpl::HandleUniform1f(uint32_t immediate_data_size,
                                                const void* cmd_data) {
   const gles2::cmds::Uniform1f& c =
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
index 8794e42..905a390 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
@@ -62,7 +62,6 @@
       switches::kGpuDriverBugWorkarounds,
       base::IntToString(gpu::CLEAR_ALPHA_IN_READPIXELS));
   InitState init;
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoderWithCommandLine(init, &command_line);
   SetupDefaultProgram();
@@ -268,7 +267,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, BindGeneratesResourceFalse) {
   InitState init;
-  init.gl_version = "3.0";
   InitDecoder(init);
 
   BindTexture cmd1;
@@ -704,7 +702,6 @@
 TEST_P(GLES2DecoderManualInitTest, GpuMemoryManagerCHROMIUM) {
   InitState init;
   init.extensions = "GL_ARB_texture_rectangle";
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
 
@@ -780,7 +777,6 @@
       new SizeOnlyMemoryTracker();
   set_memory_tracker(memory_tracker.get());
   InitState init;
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
   // Expect that initial size - size is 0.
@@ -793,7 +789,6 @@
       new SizeOnlyMemoryTracker();
   set_memory_tracker(memory_tracker.get());
   InitState init;
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
   DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
@@ -850,7 +845,6 @@
       new SizeOnlyMemoryTracker();
   set_memory_tracker(memory_tracker.get());
   InitState init;
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
   DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
@@ -877,7 +871,6 @@
       new SizeOnlyMemoryTracker();
   set_memory_tracker(memory_tracker.get());
   InitState init;
-  init.gl_version = "3.0";
   init.has_alpha = true;
   init.request_alpha = true;
   init.bind_generates_resource = true;
@@ -914,7 +907,6 @@
       new SizeOnlyMemoryTracker();
   set_memory_tracker(memory_tracker.get());
   InitState init;
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
   DoBindRenderbuffer(
@@ -950,7 +942,6 @@
       new SizeOnlyMemoryTracker();
   set_memory_tracker(memory_tracker.get());
   InitState init;
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
   DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, kServiceBufferId);
@@ -989,7 +980,6 @@
   const GLint kBorder = 0;
   InitState init;
   init.extensions = "GL_EXT_texture_storage";
-  init.gl_version = "3.0";
   init.has_alpha = true;
   init.request_alpha = true;
   init.bind_generates_resource = true;
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h
index 18a6105..2b6a38f 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h
@@ -551,6 +551,18 @@
   EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
 }
 
+TEST_P(GLES2DecoderTest1, CopyTexSubImage3DValidArgs) {
+  EXPECT_CALL(*gl_, CopyTexSubImage3D(GL_TEXTURE_3D, 2, 3, 4, 5, 6, 7, 8, 9));
+  SpecializedSetup<cmds::CopyTexSubImage3D, 0>(true);
+  cmds::CopyTexSubImage3D cmd;
+  cmd.Init(GL_TEXTURE_3D, 2, 3, 4, 5, 6, 7, 8, 9);
+  decoder_->set_unsafe_es3_apis_enabled(true);
+  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+  EXPECT_EQ(GL_NO_ERROR, GetGLError());
+  decoder_->set_unsafe_es3_apis_enabled(false);
+  EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
+}
+
 TEST_P(GLES2DecoderTest1, CreateProgramValidArgs) {
   EXPECT_CALL(*gl_, CreateProgram()).WillOnce(Return(kNewServiceId));
   SpecializedSetup<cmds::CreateProgram, 0>(true);
@@ -1943,6 +1955,4 @@
 }
 // TODO(gman): GetUniformfv
 
-// TODO(gman): GetUniformiv
-
 #endif  // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_1_AUTOGEN_H_
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h
index a5831d6..2947723 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h
@@ -12,6 +12,8 @@
 #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_2_AUTOGEN_H_
 #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_2_AUTOGEN_H_
 
+// TODO(gman): GetUniformiv
+
 // TODO(gman): GetUniformLocation
 
 TEST_P(GLES2DecoderTest2, GetVertexAttribfvValidArgs) {
@@ -578,20 +580,15 @@
   const char kValidStrEnd = 0;
   const GLsizei kCount = static_cast<GLsizei>(arraysize(kSource));
   const GLsizei kTests[] = {
-      kCount, 0, std::numeric_limits<GLsizei>::max(), -1, kCount,
+      kCount + 1, 0, std::numeric_limits<GLsizei>::max(), -1,
   };
   decoder_->set_unsafe_es3_apis_enabled(true);
   for (size_t ii = 0; ii < arraysize(kTests); ++ii) {
     SetBucketAsCStrings(kBucketId, 1, kSource, kTests[ii], kValidStrEnd);
     cmds::ShaderSourceBucket cmd;
     cmd.Init(client_shader_id_, kBucketId);
-    if (kTests[ii] == kCount) {
-      EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-    } else {
-      EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
-    }
+    EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
   }
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
 }
 
 TEST_P(GLES2DecoderTest2, ShaderSourceBucketInvalidStringEnding) {
@@ -604,7 +601,6 @@
   cmd.Init(client_shader_id_, kBucketId);
   decoder_->set_unsafe_es3_apis_enabled(true);
   EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
 }
 
 TEST_P(GLES2DecoderTest2, StencilFuncValidArgs) {
@@ -872,6 +868,69 @@
 
 // TODO(gman): TexSubImage3D
 
+TEST_P(GLES2DecoderTest2, TransformFeedbackVaryingsBucketValidArgs) {
+  EXPECT_CALL(*gl_, TransformFeedbackVaryings(kServiceProgramId, 1, _,
+                                              GL_INTERLEAVED_ATTRIBS));
+  const uint32 kBucketId = 123;
+  const char kSource0[] = "hello";
+  const char* kSource[] = {kSource0};
+  const char kValidStrEnd = 0;
+  SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd);
+  cmds::TransformFeedbackVaryingsBucket cmd;
+  cmd.Init(client_program_id_, kBucketId, GL_INTERLEAVED_ATTRIBS);
+  decoder_->set_unsafe_es3_apis_enabled(true);
+  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+  decoder_->set_unsafe_es3_apis_enabled(false);
+  EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderTest2, TransformFeedbackVaryingsBucketInvalidArgs) {
+  const uint32 kBucketId = 123;
+  const char kSource0[] = "hello";
+  const char* kSource[] = {kSource0};
+  const char kValidStrEnd = 0;
+  decoder_->set_unsafe_es3_apis_enabled(true);
+  cmds::TransformFeedbackVaryingsBucket cmd;
+  // Test no bucket.
+  cmd.Init(client_program_id_, kBucketId, GL_INTERLEAVED_ATTRIBS);
+  EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+  // Test invalid client.
+  SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd);
+  cmd.Init(kInvalidClientId, kBucketId, GL_INTERLEAVED_ATTRIBS);
+  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest2, TransformFeedbackVaryingsBucketInvalidHeader) {
+  const uint32 kBucketId = 123;
+  const char kSource0[] = "hello";
+  const char* kSource[] = {kSource0};
+  const char kValidStrEnd = 0;
+  const GLsizei kCount = static_cast<GLsizei>(arraysize(kSource));
+  const GLsizei kTests[] = {
+      kCount + 1, 0, std::numeric_limits<GLsizei>::max(), -1,
+  };
+  decoder_->set_unsafe_es3_apis_enabled(true);
+  for (size_t ii = 0; ii < arraysize(kTests); ++ii) {
+    SetBucketAsCStrings(kBucketId, 1, kSource, kTests[ii], kValidStrEnd);
+    cmds::TransformFeedbackVaryingsBucket cmd;
+    cmd.Init(client_program_id_, kBucketId, GL_INTERLEAVED_ATTRIBS);
+    EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
+  }
+}
+
+TEST_P(GLES2DecoderTest2, TransformFeedbackVaryingsBucketInvalidStringEnding) {
+  const uint32 kBucketId = 123;
+  const char kSource0[] = "hello";
+  const char* kSource[] = {kSource0};
+  const char kInvalidStrEnd = '*';
+  SetBucketAsCStrings(kBucketId, 1, kSource, 1, kInvalidStrEnd);
+  cmds::TransformFeedbackVaryingsBucket cmd;
+  cmd.Init(client_program_id_, kBucketId, GL_INTERLEAVED_ATTRIBS);
+  decoder_->set_unsafe_es3_apis_enabled(true);
+  EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
+}
+
 TEST_P(GLES2DecoderTest2, Uniform1fValidArgs) {
   EXPECT_CALL(*gl_, Uniform1fv(1, 1, _));
   SpecializedSetup<cmds::Uniform1f, 0>(true);
@@ -1467,23 +1526,4 @@
   decoder_->set_unsafe_es3_apis_enabled(false);
   EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
 }
-
-TEST_P(GLES2DecoderTest2, VertexAttribI4uivImmediateValidArgs) {
-  cmds::VertexAttribI4uivImmediate& cmd =
-      *GetImmediateAs<cmds::VertexAttribI4uivImmediate>();
-  SpecializedSetup<cmds::VertexAttribI4uivImmediate, 0>(true);
-  GLuint temp[4] = {
-      0,
-  };
-  cmd.Init(1, &temp[0]);
-  EXPECT_CALL(*gl_, VertexAttribI4uiv(1, reinterpret_cast<GLuint*>(
-                                             ImmediateDataAddress(&cmd))));
-  decoder_->set_unsafe_es3_apis_enabled(true);
-  EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
-  EXPECT_EQ(GL_NO_ERROR, GetGLError());
-  decoder_->set_unsafe_es3_apis_enabled(false);
-  EXPECT_EQ(error::kUnknownCommand, ExecuteImmediateCmd(cmd, sizeof(temp)));
-}
-// TODO(gman): VertexAttribIPointer
-
 #endif  // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_2_AUTOGEN_H_
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h
index 20c09f6..2eb4e58 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h
@@ -12,6 +12,24 @@
 #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_3_AUTOGEN_H_
 #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_3_AUTOGEN_H_
 
+TEST_P(GLES2DecoderTest3, VertexAttribI4uivImmediateValidArgs) {
+  cmds::VertexAttribI4uivImmediate& cmd =
+      *GetImmediateAs<cmds::VertexAttribI4uivImmediate>();
+  SpecializedSetup<cmds::VertexAttribI4uivImmediate, 0>(true);
+  GLuint temp[4] = {
+      0,
+  };
+  cmd.Init(1, &temp[0]);
+  EXPECT_CALL(*gl_, VertexAttribI4uiv(1, reinterpret_cast<GLuint*>(
+                                             ImmediateDataAddress(&cmd))));
+  decoder_->set_unsafe_es3_apis_enabled(true);
+  EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
+  EXPECT_EQ(GL_NO_ERROR, GetGLError());
+  decoder_->set_unsafe_es3_apis_enabled(false);
+  EXPECT_EQ(error::kUnknownCommand, ExecuteImmediateCmd(cmd, sizeof(temp)));
+}
+// TODO(gman): VertexAttribIPointer
+
 // TODO(gman): VertexAttribPointer
 
 TEST_P(GLES2DecoderTest3, ViewportValidArgs) {
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_async_pixel.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_async_pixel.cc
index d32870d..4e6346e 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_async_pixel.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_async_pixel.cc
@@ -57,7 +57,6 @@
 TEST_P(GLES2DecoderManualInitTest, AsyncPixelTransfers) {
   InitState init;
   init.extensions = "GL_CHROMIUM_async_pixel_transfers";
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
 
@@ -319,7 +318,6 @@
 TEST_P(GLES2DecoderManualInitTest, AsyncPixelTransferManager) {
   InitState init;
   init.extensions = "GL_CHROMIUM_async_pixel_transfers";
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
 
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_attribs.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_attribs.cc
index fd28f75..cd39253 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_attribs.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_attribs.cc
@@ -356,7 +356,6 @@
 
   void SetUp() override {
     InitState init;
-    init.gl_version = "3.0";
     init.bind_generates_resource = true;
     init.use_native_vao = false;
     InitDecoder(init);
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc
index 07d1eaf..807d488 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc
@@ -57,6 +57,7 @@
       break;
     }
   }
+
   if (init->use_native_vao) {
     if (contains_vao_extension)
       return;
@@ -75,6 +76,10 @@
     // Make sure we don't set up an invalid InitState.
     CHECK(!contains_vao_extension);
   }
+
+  if (!init->extensions.empty())
+    init->extensions += " ";
+  init->extensions += "GL_EXT_framebuffer_object ";
 }
 
 }  // namespace Anonymous
@@ -118,7 +123,9 @@
 
 void GLES2DecoderTestBase::SetUp() {
   InitState init;
-  init.gl_version = "3.0";
+  // Autogenerated tests do not overwrite version or extension string,
+  // so we have to pick something that supports everything here.
+  init.gl_version = "4.4";
   init.has_alpha = true;
   init.has_depth = true;
   init.request_alpha = true;
@@ -136,7 +143,9 @@
 }
 
 GLES2DecoderTestBase::InitState::InitState()
-    : has_alpha(false),
+    : extensions("GL_EXT_framebuffer_object"),
+      gl_version("2.1"),
+      has_alpha(false),
       has_depth(false),
       has_stencil(false),
       request_alpha(false),
@@ -156,6 +165,9 @@
     const base::CommandLine* command_line) {
   InitState normalized_init = init;
   NormalizeInitState(&normalized_init);
+  // For easier substring/extension matching
+  DCHECK(normalized_init.extensions.empty() ||
+         *normalized_init.extensions.rbegin() == ' ');
   Framebuffer::ClearFramebufferCompleteComboMap();
 
   gfx::SetGLGetProcAddressProc(gfx::MockGLInterface::GetGLProcAddress);
@@ -166,9 +178,6 @@
 
   SetupMockGLBehaviors();
 
-  // Only create stream texture manager if extension is requested.
-  std::vector<std::string> list;
-  base::SplitString(normalized_init.extensions, ' ', &list);
   scoped_refptr<FeatureInfo> feature_info;
   if (command_line)
     feature_info = new FeatureInfo(*command_line);
@@ -423,15 +432,27 @@
     decoder_->set_unsafe_es3_apis_enabled(true);
     reset_unsafe_es3_apis_enabled = true;
   }
-  EXPECT_CALL(*gl_, GenSamplers(_, _))
-      .WillOnce(SetArgumentPointee<1>(kServiceSamplerId))
-      .RetiresOnSaturation();
-  GenHelper<cmds::GenSamplersImmediate>(client_sampler_id_);
-  EXPECT_CALL(*gl_, GenTransformFeedbacks(_, _))
-      .WillOnce(SetArgumentPointee<1>(kServiceTransformFeedbackId))
-      .RetiresOnSaturation();
-  GenHelper<cmds::GenTransformFeedbacksImmediate>(client_transformfeedback_id_);
-  DoFenceSync(client_sync_id_, kServiceSyncId);
+
+  const gfx::GLVersionInfo* version = context_->GetVersionInfo();
+  if (version->IsAtLeastGL(3, 3) || version->IsAtLeastGLES(3, 0)) {
+    EXPECT_CALL(*gl_, GenSamplers(_, _))
+        .WillOnce(SetArgumentPointee<1>(kServiceSamplerId))
+        .RetiresOnSaturation();
+    GenHelper<cmds::GenSamplersImmediate>(client_sampler_id_);
+  }
+  if (version->IsAtLeastGL(4, 0) || version->IsAtLeastGLES(3, 0)) {
+    EXPECT_CALL(*gl_, GenTransformFeedbacks(_, _))
+        .WillOnce(SetArgumentPointee<1>(kServiceTransformFeedbackId))
+        .RetiresOnSaturation();
+    GenHelper<cmds::GenTransformFeedbacksImmediate>(
+        client_transformfeedback_id_);
+  }
+
+  if (init.extensions.find("GL_ARB_sync ") != std::string::npos ||
+      version->IsAtLeastGL(3, 2) || version->IsAtLeastGLES(3, 0)) {
+    DoFenceSync(client_sync_id_, kServiceSyncId);
+  }
+
   if (reset_unsafe_es3_apis_enabled) {
     decoder_->set_unsafe_es3_apis_enabled(false);
   }
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_context_state.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_context_state.cc
index 74149ef..3578b5b 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_context_state.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_context_state.cc
@@ -99,7 +99,6 @@
 
 TEST_P(GLES2DecoderRestoreStateTest, NullPreviousStateBGR) {
   InitState init;
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
   SetupTexture();
@@ -128,7 +127,6 @@
 
 TEST_P(GLES2DecoderRestoreStateTest, NullPreviousState) {
   InitState init;
-  init.gl_version = "3.0";
   InitDecoder(init);
   SetupTexture();
 
@@ -153,7 +151,6 @@
 
 TEST_P(GLES2DecoderRestoreStateTest, WithPreviousStateBGR) {
   InitState init;
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
   SetupTexture();
@@ -178,7 +175,6 @@
 
 TEST_P(GLES2DecoderRestoreStateTest, WithPreviousState) {
   InitState init;
-  init.gl_version = "3.0";
   InitDecoder(init);
   SetupTexture();
 
@@ -202,7 +198,6 @@
 
 TEST_P(GLES2DecoderRestoreStateTest, ActiveUnit1) {
   InitState init;
-  init.gl_version = "3.0";
   InitDecoder(init);
 
   // Bind a non-default texture to GL_TEXTURE1 unit.
@@ -233,7 +228,6 @@
 
 TEST_P(GLES2DecoderRestoreStateTest, NonDefaultUnit0BGR) {
   InitState init;
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
 
@@ -272,7 +266,6 @@
 
 TEST_P(GLES2DecoderRestoreStateTest, NonDefaultUnit1BGR) {
   InitState init;
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
 
@@ -305,7 +298,6 @@
 
 TEST_P(GLES2DecoderRestoreStateTest, DefaultUnit0) {
   InitState init;
-  init.gl_version = "3.0";
   InitDecoder(init);
 
   // Bind a non-default texture to GL_TEXTURE1 unit.
@@ -342,7 +334,6 @@
 
 TEST_P(GLES2DecoderRestoreStateTest, DefaultUnit1) {
   InitState init;
-  init.gl_version = "3.0";
   InitDecoder(init);
 
   // Bind a non-default texture to GL_TEXTURE0 unit.
@@ -391,7 +382,6 @@
                      {0, false, false}};
 
   InitState init;
-  init.gl_version = "2.1";
   InitDecoder(init);
 
   for (int i = 0; test[i].gl_enum; i++) {
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_drawing.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_drawing.cc
index baff353..957b53b 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_drawing.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_drawing.cc
@@ -391,7 +391,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, DepthEnableWithDepth) {
   InitState init;
-  init.gl_version = "3.0";
   init.has_depth = true;
   init.request_depth = true;
   init.bind_generates_resource = true;
@@ -444,7 +443,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, DepthEnableWithoutRequestedDepth) {
   InitState init;
-  init.gl_version = "3.0";
   init.has_depth = true;
   init.bind_generates_resource = true;
   InitDecoder(init);
@@ -496,7 +494,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, StencilEnableWithStencil) {
   InitState init;
-  init.gl_version = "3.0";
   init.has_stencil = true;
   init.request_stencil = true;
   init.bind_generates_resource = true;
@@ -550,7 +547,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, StencilEnableWithoutRequestedStencil) {
   InitState init;
-  init.gl_version = "3.0";
   init.has_stencil = true;
   init.bind_generates_resource = true;
   InitDecoder(init);
@@ -602,7 +598,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, CachedColorMask) {
   InitState init;
-  init.gl_version = "3.0";
   init.has_alpha = true;
   init.has_depth = true;
   init.has_stencil = true;
@@ -630,7 +625,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, CachedDepthMask) {
   InitState init;
-  init.gl_version = "3.0";
   init.has_alpha = true;
   init.has_depth = true;
   init.has_stencil = true;
@@ -657,7 +651,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, CachedStencilMask) {
   InitState init;
-  init.gl_version = "3.0";
   init.has_alpha = true;
   init.has_depth = true;
   init.has_stencil = true;
@@ -746,7 +739,6 @@
 // Test that we lose context.
 TEST_P(GLES2DecoderManualInitTest, LoseContextWhenOOM) {
   InitState init;
-  init.gl_version = "3.0";
   init.has_alpha = true;
   init.has_depth = true;
   init.request_alpha = true;
@@ -863,7 +855,6 @@
       switches::kGpuDriverBugWorkarounds,
       base::IntToString(gpu::INIT_VERTEX_ATTRIBUTES));
   InitState init;
-  init.gl_version = "3.0";
   init.has_alpha = true;
   init.has_depth = true;
   init.request_alpha = true;
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc
index d230be7..21526b1 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc
@@ -927,7 +927,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, ActualAlphaMatchesRequestedAlpha) {
   InitState init;
-  init.gl_version = "3.0";
   init.has_alpha = true;
   init.request_alpha = true;
   init.bind_generates_resource = true;
@@ -954,7 +953,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, ActualAlphaDoesNotMatchRequestedAlpha) {
   InitState init;
-  init.gl_version = "3.0";
   init.has_alpha = true;
   init.bind_generates_resource = true;
   InitDecoder(init);
@@ -980,7 +978,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, ActualDepthMatchesRequestedDepth) {
   InitState init;
-  init.gl_version = "3.0";
   init.has_depth = true;
   init.request_depth = true;
   init.bind_generates_resource = true;
@@ -1007,7 +1004,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, ActualDepthDoesNotMatchRequestedDepth) {
   InitState init;
-  init.gl_version = "3.0";
   init.has_depth = true;
   init.bind_generates_resource = true;
   InitDecoder(init);
@@ -1033,7 +1029,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, ActualStencilMatchesRequestedStencil) {
   InitState init;
-  init.gl_version = "3.0";
   init.has_stencil = true;
   init.request_stencil = true;
   init.bind_generates_resource = true;
@@ -1060,7 +1055,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, ActualStencilDoesNotMatchRequestedStencil) {
   InitState init;
-  init.gl_version = "3.0";
   init.has_stencil = true;
   init.bind_generates_resource = true;
   InitDecoder(init);
@@ -1404,7 +1398,6 @@
        RenderbufferStorageMultisampleCHROMIUMGLError) {
   InitState init;
   init.extensions = "GL_EXT_framebuffer_multisample";
-  init.gl_version = "2.1";
   init.bind_generates_resource = true;
   InitDecoder(init);
   DoBindRenderbuffer(
@@ -1429,7 +1422,6 @@
        RenderbufferStorageMultisampleCHROMIUMBadArgs) {
   InitState init;
   init.extensions = "GL_EXT_framebuffer_multisample";
-  init.gl_version = "2.1";
   init.bind_generates_resource = true;
   InitDecoder(init);
   DoBindRenderbuffer(
@@ -1464,7 +1456,6 @@
 TEST_P(GLES2DecoderManualInitTest, RenderbufferStorageMultisampleCHROMIUM) {
   InitState init;
   init.extensions = "GL_EXT_framebuffer_multisample";
-  init.gl_version = "2.1";
   InitDecoder(init);
   DoBindRenderbuffer(
       GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
@@ -1482,7 +1473,6 @@
        RenderbufferStorageMultisampleCHROMIUMRebindRenderbuffer) {
   InitState init;
   init.extensions = "GL_EXT_framebuffer_multisample";
-  init.gl_version = "2.1";
   InitDecoder(init);
   DoBindRenderbuffer(
       GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
@@ -1501,7 +1491,6 @@
        RenderbufferStorageMultisampleEXTNotSupported) {
   InitState init;
   init.extensions = "GL_EXT_framebuffer_multisample";
-  init.gl_version = "2.1";
   init.bind_generates_resource = true;
   InitDecoder(init);
   DoBindRenderbuffer(
@@ -1786,7 +1775,6 @@
        UnClearedAttachmentsGetClearedOnReadPixelsAndDrawBufferGetsRestored) {
   InitState init;
   init.extensions = "GL_EXT_framebuffer_multisample";
-  init.gl_version = "2.1";
   init.bind_generates_resource = true;
   InitDecoder(init);
   const GLuint kFBOClientTextureId = 4100;
@@ -2277,7 +2265,6 @@
 TEST_P(GLES2DecoderManualInitTest, ReadFormatExtension) {
   InitState init;
   init.extensions = "GL_OES_read_format";
-  init.gl_version = "2.1";
   init.bind_generates_resource = true;
   InitDecoder(init);
 
@@ -2336,7 +2323,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, NoReadFormatExtension) {
   InitState init;
-  init.gl_version = "2.1";
   init.bind_generates_resource = true;
   InitDecoder(init);
 
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc
index bcfeb1b..5eda0a9 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc
@@ -1032,7 +1032,6 @@
       switches::kGpuDriverBugWorkarounds,
       base::IntToString(gpu::CLEAR_UNIFORMS_BEFORE_FIRST_PROGRAM_USE));
   InitState init;
-  init.gl_version = "3.0";
   init.has_alpha = true;
   init.request_alpha = true;
   init.bind_generates_resource = true;
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc
index f0cadf1..05b44af 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc
@@ -131,7 +131,6 @@
       switches::kGpuDriverBugWorkarounds,
       base::IntToString(gpu::SET_TEXTURE_FILTER_BEFORE_GENERATING_MIPMAP));
   InitState init;
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoderWithCommandLine(init, &command_line);
 
@@ -641,7 +640,6 @@
 TEST_P(GLES2DecoderManualInitTest, CompressedTexImage2DBucketBadBucket) {
   InitState init;
   init.extensions = "GL_EXT_texture_compression_s3tc";
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
 
@@ -679,7 +677,6 @@
 TEST_P(GLES2DecoderManualInitTest, CompressedTexImage2DS3TC) {
   InitState init;
   init.extensions = "GL_EXT_texture_compression_s3tc";
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
   const uint32 kBucketId = 123;
@@ -1090,7 +1087,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, DefaultTextureZero) {
   InitState init;
-  init.gl_version = "3.0";
   InitDecoder(init);
 
   BindTexture cmd1;
@@ -1108,7 +1104,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, DefaultTextureBGR) {
   InitState init;
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
 
@@ -1131,7 +1126,6 @@
 // Test that default texture 0 is immutable.
 TEST_P(GLES2DecoderManualInitTest, NoDefaultTexParameterf) {
   InitState init;
-  init.gl_version = "3.0";
   InitDecoder(init);
 
   {
@@ -1163,7 +1157,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, NoDefaultTexParameteri) {
   InitState init;
-  init.gl_version = "3.0";
   InitDecoder(init);
 
   {
@@ -1195,7 +1188,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, NoDefaultTexParameterfv) {
   InitState init;
-  init.gl_version = "3.0";
   InitDecoder(init);
 
   {
@@ -1235,7 +1227,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, NoDefaultTexParameteriv) {
   InitState init;
-  init.gl_version = "3.0";
   InitDecoder(init);
 
   {
@@ -1275,7 +1266,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, NoDefaultTexImage2D) {
   InitState init;
-  init.gl_version = "3.0";
   InitDecoder(init);
 
   BindTexture cmd1;
@@ -1300,7 +1290,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, NoDefaultTexSubImage2D) {
   InitState init;
-  init.gl_version = "3.0";
   InitDecoder(init);
 
   BindTexture cmd1;
@@ -1328,7 +1317,6 @@
 TEST_P(GLES2DecoderManualInitTest, ARBTextureRectangleBindTexture) {
   InitState init;
   init.extensions = "GL_ARB_texture_rectangle";
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
   EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_RECTANGLE_ARB, kNewServiceId));
@@ -1346,7 +1334,6 @@
 TEST_P(GLES2DecoderManualInitTest, ARBTextureRectangleGetBinding) {
   InitState init;
   init.extensions = "GL_ARB_texture_rectangle";
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
   DoBindTexture(
@@ -1377,7 +1364,6 @@
 TEST_P(GLES2DecoderManualInitTest, ARBTextureRectangleTextureDefaults) {
   InitState init;
   init.extensions = "GL_ARB_texture_rectangle";
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
   DoBindTexture(
@@ -1394,7 +1380,6 @@
 TEST_P(GLES2DecoderManualInitTest, ARBTextureRectangleTextureParam) {
   InitState init;
   init.extensions = "GL_ARB_texture_rectangle";
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
 
@@ -1443,7 +1428,6 @@
 TEST_P(GLES2DecoderManualInitTest, ARBTextureRectangleTextureParamInvalid) {
   InitState init;
   init.extensions = "GL_ARB_texture_rectangle";
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
 
@@ -1476,7 +1460,6 @@
 TEST_P(GLES2DecoderManualInitTest, ARBTextureRectangleTexImage2DError) {
   InitState init;
   init.extensions = "GL_ARB_texture_rectangle";
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
 
@@ -1632,7 +1615,6 @@
       switches::kGpuDriverBugWorkarounds,
       base::IntToString(gpu::TEXSUBIMAGE2D_FASTER_THAN_TEXIMAGE2D));
   InitState init;
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoderWithCommandLine(init, &command_line);
   DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
@@ -1834,7 +1816,6 @@
 TEST_P(GLES2DecoderManualInitTest, CompressedImage2DMarksTextureAsCleared) {
   InitState init;
   init.extensions = "GL_EXT_texture_compression_s3tc";
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
 
@@ -2663,7 +2644,6 @@
 TEST_P(GLES2DecoderManualInitTest, TexImage2DFloatConvertsFormatDesktop) {
   InitState init;
   init.extensions = "GL_ARB_texture_float";
-  init.gl_version = "2.1";
   InitDecoder(init);
   DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
   DoTexImage2D(
@@ -2742,7 +2722,6 @@
   void CheckFormats(const char* extension, const GLenum* formats, int count) {
     InitState init;
     init.extensions = extension;
-    init.gl_version = "3.0";
     init.bind_generates_resource = true;
     InitDecoder(init);
 
@@ -2814,7 +2793,6 @@
 
 TEST_P(GLES2DecoderManualInitTest, GetNoCompressedTextureFormats) {
   InitState init;
-  init.gl_version = "3.0";
   init.bind_generates_resource = true;
   InitDecoder(init);
 
diff --git a/gpu/command_buffer/service/gles2_cmd_validation_autogen.h b/gpu/command_buffer/service/gles2_cmd_validation_autogen.h
index e163642..6c9d377 100644
--- a/gpu/command_buffer/service/gles2_cmd_validation_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_validation_autogen.h
@@ -14,6 +14,7 @@
 ValueValidator<GLenum> attachment;
 ValueValidator<GLenum> backbuffer_attachment;
 ValueValidator<GLenum> blit_filter;
+ValueValidator<GLenum> buffer_mode;
 ValueValidator<GLenum> buffer_parameter;
 ValueValidator<GLenum> buffer_target;
 ValueValidator<GLenum> buffer_usage;
diff --git a/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h b/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h
index febce20..1f1211b 100644
--- a/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h
@@ -28,6 +28,11 @@
     GL_LINEAR,
 };
 
+static const GLenum valid_buffer_mode_table[] = {
+    GL_INTERLEAVED_ATTRIBS,
+    GL_SEPARATE_ATTRIBS,
+};
+
 static const GLenum valid_buffer_parameter_table[] = {
     GL_BUFFER_SIZE,
     GL_BUFFER_USAGE,
@@ -585,6 +590,7 @@
       backbuffer_attachment(valid_backbuffer_attachment_table,
                             arraysize(valid_backbuffer_attachment_table)),
       blit_filter(valid_blit_filter_table, arraysize(valid_blit_filter_table)),
+      buffer_mode(valid_buffer_mode_table, arraysize(valid_buffer_mode_table)),
       buffer_parameter(valid_buffer_parameter_table,
                        arraysize(valid_buffer_parameter_table)),
       buffer_target(valid_buffer_target_table,
diff --git a/gpu/command_buffer/service/gpu_scheduler.cc b/gpu/command_buffer/service/gpu_scheduler.cc
index 93cf89f..8570fcd 100644
--- a/gpu/command_buffer/service/gpu_scheduler.cc
+++ b/gpu/command_buffer/service/gpu_scheduler.cc
@@ -7,9 +7,9 @@
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/compiler_specific.h"
-#include "base/debug/trace_event.h"
 #include "base/message_loop/message_loop.h"
 #include "base/time/time.h"
+#include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_fence.h"
 #include "ui/gl/gl_switches.h"
diff --git a/gpu/command_buffer/service/gpu_service_test.cc b/gpu/command_buffer/service/gpu_service_test.cc
index a7c9db1..89740b9 100644
--- a/gpu/command_buffer/service/gpu_service_test.cc
+++ b/gpu/command_buffer/service/gpu_service_test.cc
@@ -38,7 +38,7 @@
 }
 
 void GpuServiceTest::SetUp() {
-  SetUpWithGLVersion("2.0", NULL);
+  SetUpWithGLVersion("2.0", "GL_EXT_framebuffer_object");
 }
 
 void GpuServiceTest::TearDown() {
diff --git a/gpu/command_buffer/service/gpu_state_tracer.cc b/gpu/command_buffer/service/gpu_state_tracer.cc
index 51b0eba..47938cc 100644
--- a/gpu/command_buffer/service/gpu_state_tracer.cc
+++ b/gpu/command_buffer/service/gpu_state_tracer.cc
@@ -5,7 +5,7 @@
 #include "gpu/command_buffer/service/gpu_state_tracer.h"
 
 #include "base/base64.h"
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "context_state.h"
 #include "ui/gfx/codec/png_codec.h"
 #include "ui/gl/gl_bindings.h"
diff --git a/gpu/command_buffer/service/gpu_tracer.cc b/gpu/command_buffer/service/gpu_tracer.cc
index 84656c3..72b29dd 100644
--- a/gpu/command_buffer/service/gpu_tracer.cc
+++ b/gpu/command_buffer/service/gpu_tracer.cc
@@ -7,9 +7,9 @@
 #include <deque>
 
 #include "base/bind.h"
-#include "base/debug/trace_event.h"
 #include "base/strings/string_util.h"
 #include "base/time/time.h"
+#include "base/trace_event/trace_event.h"
 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
 #include "gpu/command_buffer/service/context_group.h"
 #include "ui/gl/gl_version_info.h"
diff --git a/gpu/command_buffer/service/gpu_tracer_unittest.cc b/gpu/command_buffer/service/gpu_tracer_unittest.cc
index 3737018..1b10fc6 100644
--- a/gpu/command_buffer/service/gpu_tracer_unittest.cc
+++ b/gpu/command_buffer/service/gpu_tracer_unittest.cc
@@ -225,7 +225,17 @@
 
  protected:
   void SetUp() override {
-    GpuServiceTest::SetUp();
+    const char* gl_version = "3.2";
+    const char* extensions = nullptr;
+    if (GetTracerType() == kTracerTypeDisjointTimer) {
+      gl_version = "opengl es 3.0";
+      extensions = "GL_EXT_disjoint_timer_query";
+    } else if (GetTracerType() == kTracerTypeARBTimer) {
+      // TODO(sievers): The tracer should not depend on ARB_occlusion_query.
+      // Try merge Query APIs (core, ARB, EXT) into a single binding each.
+      extensions = "GL_ARB_timer_query GL_ARB_occlusion_query";
+    }
+    GpuServiceTest::SetUpWithGLVersion(gl_version, extensions);
     gl_fake_queries_.Reset();
     gl_surface_ = new gfx::GLSurfaceStub();
     gl_context_ = new gfx::GLContextStub();
diff --git a/gpu/command_buffer/service/mailbox_manager_unittest.cc b/gpu/command_buffer/service/mailbox_manager_unittest.cc
index 231193f..388e1da 100644
--- a/gpu/command_buffer/service/mailbox_manager_unittest.cc
+++ b/gpu/command_buffer/service/mailbox_manager_unittest.cc
@@ -72,6 +72,13 @@
                           cleared);
   }
 
+  void SetLevelCleared(Texture* texture,
+                       GLenum target,
+                       GLint level,
+                       bool cleared) {
+    texture->SetLevelCleared(target, level, cleared);
+  }
+
   GLenum SetParameter(Texture* texture, GLenum pname, GLint param) {
     return texture->SetParameteri(feature_info_.get(), pname, param);
   }
@@ -543,6 +550,51 @@
   EXPECT_EQ(NULL, manager2_->ConsumeTexture(name));
 }
 
+TEST_F(MailboxManagerSyncTest, ClearedStateSynced) {
+  const GLuint kNewTextureId = 1234;
+
+  Texture* texture = DefineTexture();
+  EXPECT_TRUE(texture->SafeToRenderFrom());
+
+  Mailbox name = Mailbox::Generate();
+
+  manager_->ProduceTexture(name, texture);
+  EXPECT_EQ(texture, manager_->ConsumeTexture(name));
+
+  // Synchronize
+  manager_->PushTextureUpdates(0);
+  manager2_->PullTextureUpdates(0);
+
+  EXPECT_CALL(*gl_, GenTextures(1, _))
+      .WillOnce(SetArgPointee<1>(kNewTextureId));
+  SetupUpdateTexParamExpectations(
+      kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT);
+  Texture* new_texture = manager2_->ConsumeTexture(name);
+  EXPECT_FALSE(new_texture == NULL);
+  EXPECT_NE(texture, new_texture);
+  EXPECT_EQ(kNewTextureId, new_texture->service_id());
+  EXPECT_TRUE(texture->SafeToRenderFrom());
+
+  // Change cleared to false.
+  SetLevelCleared(texture, texture->target(), 0, false);
+  EXPECT_FALSE(texture->SafeToRenderFrom());
+
+  // Synchronize
+  manager_->PushTextureUpdates(0);
+  SetupUpdateTexParamExpectations(
+      kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT);
+  manager2_->PullTextureUpdates(0);
+
+  // Cleared state should be synced.
+  EXPECT_FALSE(new_texture->SafeToRenderFrom());
+
+  DestroyTexture(texture);
+  DestroyTexture(new_texture);
+
+  EXPECT_EQ(NULL, manager_->ConsumeTexture(name));
+  EXPECT_EQ(NULL, manager2_->ConsumeTexture(name));
+}
+
 // Putting the same texture into multiple mailboxes should result in sharing
 // only a single texture also within a synchronized manager instance.
 TEST_F(MailboxManagerSyncTest, SharedThroughMultipleMailboxes) {
diff --git a/gpu/command_buffer/service/memory_program_cache_unittest.cc b/gpu/command_buffer/service/memory_program_cache_unittest.cc
index 9134c78..7c39028 100644
--- a/gpu/command_buffer/service/memory_program_cache_unittest.cc
+++ b/gpu/command_buffer/service/memory_program_cache_unittest.cc
@@ -86,7 +86,7 @@
 
  protected:
   void SetUp() override {
-    GpuServiceTest::SetUp();
+    GpuServiceTest::SetUpWithGLVersion("3.0", "GL_ARB_get_program_binary");
 
     vertex_shader_ = shader_manager_.CreateShader(kVertexShaderClientId,
                                                   kVertexShaderServiceId,
diff --git a/gpu/command_buffer/service/memory_tracking.h b/gpu/command_buffer/service/memory_tracking.h
index 1514325..a7447e4 100644
--- a/gpu/command_buffer/service/memory_tracking.h
+++ b/gpu/command_buffer/service/memory_tracking.h
@@ -7,9 +7,9 @@
 
 #include <string>
 #include "base/basictypes.h"
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
+#include "base/trace_event/trace_event.h"
 
 namespace gpu {
 namespace gles2 {
diff --git a/gpu/command_buffer/service/program_manager.cc b/gpu/command_buffer/service/program_manager.cc
index d776350..d866504 100644
--- a/gpu/command_buffer/service/program_manager.cc
+++ b/gpu/command_buffer/service/program_manager.cc
@@ -107,6 +107,11 @@
   return hit->second.isInvariant;
 }
 
+uint32 ComputeOffset(const void* start, const void* position) {
+  return static_cast<const uint8*>(position) -
+         static_cast<const uint8*>(start);
+}
+
 }  // anonymous namespace.
 
 Program::UniformInfo::UniformInfo()
@@ -1201,11 +1206,6 @@
       combined_map.size());
 }
 
-static uint32 ComputeOffset(const void* start, const void* position) {
-  return static_cast<const uint8*>(position) -
-         static_cast<const uint8*>(start);
-}
-
 void Program::GetProgramInfo(
     ProgramManager* manager, CommonDecoder::Bucket* bucket) const {
   // NOTE: It seems to me the math in here does not need check for overflow
@@ -1290,6 +1290,141 @@
   DCHECK_EQ(ComputeOffset(header, strings), size);
 }
 
+bool Program::GetUniformBlocks(CommonDecoder::Bucket* bucket) const {
+  // The data is packed into the bucket in the following order
+  //   1) header
+  //   2) N entries of block data (except for name and indices)
+  //   3) name1, indices1, name2, indices2, ..., nameN, indicesN
+  //
+  // We query all the data directly through GL calls, assuming they are
+  // cheap through MANGLE.
+
+  DCHECK(bucket);
+  GLuint program = service_id();
+
+  uint32_t header_size = sizeof(UniformBlocksHeader);
+
+  uint32_t num_uniform_blocks = 0;
+  GLint param = GL_FALSE;
+  // We assume program is a valid program service id.
+  glGetProgramiv(program, GL_LINK_STATUS, &param);
+  if (param == GL_TRUE) {
+    param = 0;
+    glGetProgramiv(program, GL_ACTIVE_UNIFORM_BLOCKS, &param);
+    num_uniform_blocks = static_cast<uint32_t>(param);
+  }
+  if (num_uniform_blocks == 0) {
+    // Although spec allows an implementation to return uniform block info
+    // even if a link fails, for consistency, we disallow that.
+    bucket->SetSize(header_size);
+    UniformBlocksHeader* header =
+        bucket->GetDataAs<UniformBlocksHeader*>(0, header_size);
+    header->num_uniform_blocks = 0;
+    return true;
+  }
+
+  std::vector<UniformBlockInfo> blocks(num_uniform_blocks);
+  base::CheckedNumeric<uint32_t> size = sizeof(UniformBlockInfo);
+  size *= num_uniform_blocks;
+  uint32_t entry_size = size.ValueOrDefault(0);
+  size += header_size;
+  std::vector<std::string> names(num_uniform_blocks);
+  GLint max_name_length = 0;
+  glGetProgramiv(
+      program, GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH, &max_name_length);
+  std::vector<GLchar> buffer(max_name_length);
+  GLsizei length;
+  for (uint32_t ii = 0; ii < num_uniform_blocks; ++ii) {
+    param = 0;
+    glGetActiveUniformBlockiv(program, ii, GL_UNIFORM_BLOCK_BINDING, &param);
+    blocks[ii].binding = static_cast<uint32_t>(param);
+
+    param = 0;
+    glGetActiveUniformBlockiv(program, ii, GL_UNIFORM_BLOCK_DATA_SIZE, &param);
+    blocks[ii].data_size = static_cast<uint32_t>(param);
+
+    blocks[ii].name_offset = size.ValueOrDefault(0);
+    param = 0;
+    glGetActiveUniformBlockiv(
+        program, ii, GL_UNIFORM_BLOCK_NAME_LENGTH, &param);
+    DCHECK_GE(max_name_length, param);
+    memset(&buffer[0], 0, param);
+    length = 0;
+    glGetActiveUniformBlockName(
+        program, ii, static_cast<GLsizei>(param), &length, &buffer[0]);
+    DCHECK_EQ(param, length + 1);
+    names[ii] = std::string(&buffer[0], length);
+    // TODO(zmo): optimize the name mapping lookup.
+    const std::string* original_name = GetOriginalNameFromHashedName(names[ii]);
+    if (original_name)
+      names[ii] = *original_name;
+    blocks[ii].name_length = names[ii].size() + 1;
+    size += blocks[ii].name_length;
+
+    param = 0;
+    glGetActiveUniformBlockiv(
+        program, ii, GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS, &param);
+    blocks[ii].active_uniforms = static_cast<uint32_t>(param);
+    blocks[ii].active_uniform_offset = size.ValueOrDefault(0);
+    base::CheckedNumeric<uint32_t> indices_size = blocks[ii].active_uniforms;
+    indices_size *= sizeof(uint32_t);
+    if (!indices_size.IsValid())
+      return false;
+    size += indices_size.ValueOrDefault(0);
+
+    param = 0;
+    glGetActiveUniformBlockiv(
+        program, ii, GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER, &param);
+    blocks[ii].referenced_by_vertex_shader = static_cast<uint32_t>(param);
+
+    param = 0;
+    glGetActiveUniformBlockiv(
+        program, ii, GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER, &param);
+    blocks[ii].referenced_by_fragment_shader = static_cast<uint32_t>(param);
+  }
+  if (!size.IsValid())
+    return false;
+  uint32_t total_size = size.ValueOrDefault(0);
+  DCHECK_LE(header_size + entry_size, total_size);
+  uint32_t data_size = total_size - header_size - entry_size;
+
+  bucket->SetSize(total_size);
+  UniformBlocksHeader* header =
+      bucket->GetDataAs<UniformBlocksHeader*>(0, total_size);
+  UniformBlockInfo* entries = bucket->GetDataAs<UniformBlockInfo*>(
+      header_size, entry_size);
+  char* data = bucket->GetDataAs<char*>(header_size + entry_size, data_size);
+  DCHECK(header);
+  DCHECK(entries);
+  DCHECK(data);
+
+  // Copy over data for the header and entries.
+  header->num_uniform_blocks = num_uniform_blocks;
+  memcpy(entries, &blocks[0], entry_size);
+
+  std::vector<GLint> params;
+  for (uint32_t ii = 0; ii < num_uniform_blocks; ++ii) {
+    // Get active uniform name.
+    memcpy(data, names[ii].c_str(), blocks[ii].name_length);
+    data += blocks[ii].name_length;
+
+    // Get active uniform indices.
+    if (params.size() < blocks[ii].active_uniforms)
+      params.resize(blocks[ii].active_uniforms);
+    uint32_t num_bytes = blocks[ii].active_uniforms * sizeof(GLint);
+    memset(&params[0], 0, num_bytes);
+    glGetActiveUniformBlockiv(
+        program, ii, GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES, &params[0]);
+    uint32_t* indices = reinterpret_cast<uint32_t*>(data);
+    for (uint32_t uu = 0; uu < blocks[ii].active_uniforms; ++uu) {
+      indices[uu] = static_cast<uint32_t>(params[uu]);
+    }
+    data += num_bytes;
+  }
+  DCHECK_EQ(ComputeOffset(header, data), total_size);
+  return true;
+}
+
 Program::~Program() {
   if (manager_) {
     if (manager_->have_context_) {
diff --git a/gpu/command_buffer/service/program_manager.h b/gpu/command_buffer/service/program_manager.h
index 2f5deae..6f7e3a9 100644
--- a/gpu/command_buffer/service/program_manager.h
+++ b/gpu/command_buffer/service/program_manager.h
@@ -149,6 +149,10 @@
   void GetProgramInfo(
       ProgramManager* manager, CommonDecoder::Bucket* bucket) const;
 
+  // Gets all the UniformBlock info.
+  // Return false on overflow.
+  bool GetUniformBlocks(CommonDecoder::Bucket* bucket) const;
+
   // Sets the sampler values for a uniform.
   // This is safe to call for any location. If the location is not
   // a sampler uniform nothing will happen.
diff --git a/gpu/command_buffer/service/program_manager_unittest.cc b/gpu/command_buffer/service/program_manager_unittest.cc
index 4acd220..7d9ea9d 100644
--- a/gpu/command_buffer/service/program_manager_unittest.cc
+++ b/gpu/command_buffer/service/program_manager_unittest.cc
@@ -28,7 +28,7 @@
 using ::testing::Return;
 using ::testing::ReturnRef;
 using ::testing::SetArrayArgument;
-using ::testing::SetArgumentPointee;
+using ::testing::SetArgPointee;
 using ::testing::StrEq;
 
 namespace gpu {
@@ -38,6 +38,12 @@
 const uint32 kMaxVaryingVectors = 8;
 
 void ShaderCacheCb(const std::string& key, const std::string& shader) {}
+
+uint32 ComputeOffset(const void* start, const void* position) {
+  return static_cast<const uint8*>(position) -
+         static_cast<const uint8*>(start);
+}
+
 }  // namespace anonymous
 
 class ProgramManagerTest : public GpuServiceTest {
@@ -214,7 +220,8 @@
   } VarInfo;
 
   void SetUp() override {
-    GpuServiceTest::SetUp();
+    // Need to be at leat 3.1 for UniformBlock related GL APIs.
+    GpuServiceTest::SetUpWithGLVersion("3.1", NULL);
 
     SetupDefaultShaderExpectations();
 
@@ -1073,6 +1080,153 @@
             static_cast<uint32>(input - inputs));
 }
 
+TEST_F(ProgramManagerWithShaderTest, ProgramInfoGetUniformBlocksNone) {
+  CommonDecoder::Bucket bucket;
+  const Program* program = manager_.GetProgram(kClientProgramId);
+  ASSERT_TRUE(program != NULL);
+  // The program's previous link failed.
+  EXPECT_CALL(*(gl_.get()),
+              GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _))
+      .WillOnce(SetArgPointee<2>(GL_FALSE))
+      .RetiresOnSaturation();
+  EXPECT_TRUE(program->GetUniformBlocks(&bucket));
+  EXPECT_EQ(sizeof(UniformBlocksHeader), bucket.size());
+  UniformBlocksHeader* header =
+      bucket.GetDataAs<UniformBlocksHeader*>(0, sizeof(UniformBlocksHeader));
+  EXPECT_TRUE(header != NULL);
+  EXPECT_EQ(0u, header->num_uniform_blocks);
+  // Zero uniform blocks.
+  EXPECT_CALL(*(gl_.get()),
+              GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _))
+      .WillOnce(SetArgPointee<2>(GL_TRUE))
+      .RetiresOnSaturation();
+  EXPECT_CALL(*(gl_.get()),
+              GetProgramiv(kServiceProgramId, GL_ACTIVE_UNIFORM_BLOCKS, _))
+      .WillOnce(SetArgPointee<2>(0))
+      .RetiresOnSaturation();
+  EXPECT_TRUE(program->GetUniformBlocks(&bucket));
+  EXPECT_EQ(sizeof(UniformBlocksHeader), bucket.size());
+  header =
+      bucket.GetDataAs<UniformBlocksHeader*>(0, sizeof(UniformBlocksHeader));
+  EXPECT_TRUE(header != NULL);
+  EXPECT_EQ(0u, header->num_uniform_blocks);
+}
+
+TEST_F(ProgramManagerWithShaderTest, ProgramInfoGetUniformBlocksValid) {
+  CommonDecoder::Bucket bucket;
+  const Program* program = manager_.GetProgram(kClientProgramId);
+  ASSERT_TRUE(program != NULL);
+  struct Data {
+    UniformBlocksHeader header;
+    UniformBlockInfo entry[2];
+    char name0[4];
+    uint32_t indices0[2];
+    char name1[8];
+    uint32_t indices1[1];
+  };
+  Data data;
+  // The names needs to be of size 4*k-1 to avoid padding in the struct Data.
+  // This is a testing only problem.
+  const char* kName[] = { "cow", "chicken" };
+  const uint32_t kIndices0[] = { 1, 2 };
+  const uint32_t kIndices1[] = { 3 };
+  const uint32_t* kIndices[] = { kIndices0, kIndices1 };
+  data.header.num_uniform_blocks = 2;
+  data.entry[0].binding = 0;
+  data.entry[0].data_size = 8;
+  data.entry[0].name_offset = ComputeOffset(&data, data.name0);
+  data.entry[0].name_length = arraysize(data.name0);
+  data.entry[0].active_uniforms = arraysize(data.indices0);
+  data.entry[0].active_uniform_offset = ComputeOffset(&data, data.indices0);
+  data.entry[0].referenced_by_vertex_shader = static_cast<uint32_t>(true);
+  data.entry[0].referenced_by_fragment_shader = static_cast<uint32_t>(false);
+  data.entry[1].binding = 1;
+  data.entry[1].data_size = 4;
+  data.entry[1].name_offset = ComputeOffset(&data, data.name1);
+  data.entry[1].name_length = arraysize(data.name1);
+  data.entry[1].active_uniforms = arraysize(data.indices1);
+  data.entry[1].active_uniform_offset = ComputeOffset(&data, data.indices1);
+  data.entry[1].referenced_by_vertex_shader = static_cast<uint32_t>(false);
+  data.entry[1].referenced_by_fragment_shader = static_cast<uint32_t>(true);
+  memcpy(data.name0, kName[0], arraysize(data.name0));
+  data.indices0[0] = kIndices[0][0];
+  data.indices0[1] = kIndices[0][1];
+  memcpy(data.name1, kName[1], arraysize(data.name1));
+  data.indices1[0] = kIndices[1][0];
+
+  EXPECT_CALL(*(gl_.get()),
+              GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _))
+      .WillOnce(SetArgPointee<2>(GL_TRUE))
+      .RetiresOnSaturation();
+  EXPECT_CALL(*(gl_.get()),
+              GetProgramiv(kServiceProgramId, GL_ACTIVE_UNIFORM_BLOCKS, _))
+      .WillOnce(SetArgPointee<2>(data.header.num_uniform_blocks))
+      .RetiresOnSaturation();
+  EXPECT_CALL(*(gl_.get()),
+              GetProgramiv(kServiceProgramId,
+                           GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH, _))
+      .WillOnce(SetArgPointee<2>(
+          1 + std::max(strlen(kName[0]), strlen(kName[1]))))
+      .RetiresOnSaturation();
+  for (uint32_t ii = 0; ii < data.header.num_uniform_blocks; ++ii) {
+    EXPECT_CALL(*(gl_.get()),
+                GetActiveUniformBlockiv(
+                    kServiceProgramId, ii, GL_UNIFORM_BLOCK_BINDING, _))
+        .WillOnce(SetArgPointee<3>(data.entry[ii].binding))
+        .RetiresOnSaturation();
+    EXPECT_CALL(*(gl_.get()),
+                GetActiveUniformBlockiv(
+                    kServiceProgramId, ii, GL_UNIFORM_BLOCK_DATA_SIZE, _))
+        .WillOnce(SetArgPointee<3>(data.entry[ii].data_size))
+        .RetiresOnSaturation();
+    EXPECT_CALL(*(gl_.get()),
+                GetActiveUniformBlockiv(
+                    kServiceProgramId, ii, GL_UNIFORM_BLOCK_NAME_LENGTH, _))
+        .WillOnce(SetArgPointee<3>(data.entry[ii].name_length))
+        .RetiresOnSaturation();
+    EXPECT_CALL(*(gl_.get()),
+                GetActiveUniformBlockName(
+                    kServiceProgramId, ii, data.entry[ii].name_length, _, _))
+          .WillOnce(DoAll(
+              SetArgPointee<3>(strlen(kName[ii])),
+              SetArrayArgument<4>(
+                  kName[ii], kName[ii] + data.entry[ii].name_length)))
+          .RetiresOnSaturation();
+    EXPECT_CALL(*(gl_.get()),
+                GetActiveUniformBlockiv(
+                    kServiceProgramId, ii, GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS, _))
+        .WillOnce(SetArgPointee<3>(data.entry[ii].active_uniforms))
+        .RetiresOnSaturation();
+    EXPECT_CALL(*(gl_.get()),
+                GetActiveUniformBlockiv(
+                    kServiceProgramId, ii,
+                    GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER, _))
+        .WillOnce(SetArgPointee<3>(data.entry[ii].referenced_by_vertex_shader))
+        .RetiresOnSaturation();
+    EXPECT_CALL(*(gl_.get()),
+                GetActiveUniformBlockiv(
+                    kServiceProgramId, ii,
+                    GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER, _))
+        .WillOnce(SetArgPointee<3>(
+            data.entry[ii].referenced_by_fragment_shader))
+        .RetiresOnSaturation();
+  }
+  for (uint32_t ii = 0; ii < data.header.num_uniform_blocks; ++ii) {
+    EXPECT_CALL(*(gl_.get()),
+                GetActiveUniformBlockiv(
+                    kServiceProgramId, ii,
+                    GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES, _))
+        .WillOnce(SetArrayArgument<3>(
+            kIndices[ii], kIndices[ii] + data.entry[ii].active_uniforms))
+        .RetiresOnSaturation();
+  }
+  program->GetUniformBlocks(&bucket);
+  EXPECT_EQ(sizeof(Data), bucket.size());
+  Data* bucket_data = bucket.GetDataAs<Data*>(0, sizeof(Data));
+  EXPECT_TRUE(bucket_data != NULL);
+  EXPECT_EQ(0, memcmp(&data, bucket_data, sizeof(Data)));
+}
+
 // Some drivers optimize out unused uniform array elements, so their
 // location would be -1.
 TEST_F(ProgramManagerWithShaderTest, UnusedUniformArrayElements) {
@@ -1717,7 +1871,7 @@
                 ShaderSource(shader_id, 1, Pointee(src), NULL)).Times(1);
     EXPECT_CALL(*gl_.get(), CompileShader(shader_id)).Times(1);
     EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_COMPILE_STATUS, _))
-        .WillOnce(SetArgumentPointee<2>(GL_TRUE));
+        .WillOnce(SetArgPointee<2>(GL_TRUE));
   }
 
   void SetExpectationsForNoCompile(const Shader* shader) {
@@ -1737,9 +1891,9 @@
                 ShaderSource(shader_id, 1, Pointee(src), NULL)).Times(1);
     EXPECT_CALL(*gl_.get(), CompileShader(shader_id)).Times(1);
     EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_COMPILE_STATUS, _))
-        .WillOnce(SetArgumentPointee<2>(GL_FALSE));
+        .WillOnce(SetArgPointee<2>(GL_FALSE));
     EXPECT_CALL(*gl_.get(), GetShaderiv(shader_id, GL_INFO_LOG_LENGTH, _))
-        .WillOnce(SetArgumentPointee<2>(0));
+        .WillOnce(SetArgPointee<2>(0));
     EXPECT_CALL(*gl_.get(), GetShaderInfoLog(shader_id, 0, _, _))
         .Times(1);
   }
diff --git a/gpu/command_buffer/service/query_manager_unittest.cc b/gpu/command_buffer/service/query_manager_unittest.cc
index 7c8e93c..9c3dd10 100644
--- a/gpu/command_buffer/service/query_manager_unittest.cc
+++ b/gpu/command_buffer/service/query_manager_unittest.cc
@@ -38,7 +38,7 @@
 
  protected:
   void SetUp() override {
-    GpuServiceTest::SetUp();
+    GpuServiceTest::SetUpWithGLVersion("2.1", "GL_ARB_occlusion_query");
     engine_.reset(new MockCommandBufferEngine());
     decoder_.reset(new MockGLES2Decoder());
     decoder_->set_engine(engine_.get());
diff --git a/gpu/command_buffer/service/renderbuffer_manager.cc b/gpu/command_buffer/service/renderbuffer_manager.cc
index ff8ae7b..4b4337e 100644
--- a/gpu/command_buffer/service/renderbuffer_manager.cc
+++ b/gpu/command_buffer/service/renderbuffer_manager.cc
@@ -3,9 +3,10 @@
 // found in the LICENSE file.
 
 #include "gpu/command_buffer/service/renderbuffer_manager.h"
-#include "base/debug/trace_event.h"
+
 #include "base/logging.h"
 #include "base/strings/stringprintf.h"
+#include "base/trace_event/trace_event.h"
 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
 #include "gpu/command_buffer/service/memory_tracking.h"
diff --git a/gpu/command_buffer/service/shader_translator.cc b/gpu/command_buffer/service/shader_translator.cc
index 74b183b..878490c 100644
--- a/gpu/command_buffer/service/shader_translator.cc
+++ b/gpu/command_buffer/service/shader_translator.cc
@@ -10,10 +10,10 @@
 
 #include "base/at_exit.h"
 #include "base/command_line.h"
-#include "base/debug/trace_event.h"
 #include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/trace_event/trace_event.h"
 #include "gpu/command_buffer/service/gpu_switches.h"
 
 namespace gpu {
diff --git a/gpu/command_buffer/service/texture_definition.cc b/gpu/command_buffer/service/texture_definition.cc
index edd4271..7af662c 100644
--- a/gpu/command_buffer/service/texture_definition.cc
+++ b/gpu/command_buffer/service/texture_definition.cc
@@ -413,7 +413,8 @@
   if (texture->min_filter_ != min_filter_ ||
       texture->mag_filter_ != mag_filter_ ||
       texture->wrap_s_ != wrap_s_ ||
-      texture->wrap_t_ != wrap_t_) {
+      texture->wrap_t_ != wrap_t_ ||
+      texture->SafeToRenderFrom() != SafeToRenderFrom()) {
     return false;
   }
 
@@ -424,5 +425,16 @@
   return true;
 }
 
+bool TextureDefinition::SafeToRenderFrom() const {
+  for (const std::vector<LevelInfo>& face_info : level_infos_) {
+    for (const LevelInfo& level_info : face_info) {
+      if (!level_info.cleared) {
+        return false;
+      }
+    }
+  }
+  return true;
+}
+
 }  // namespace gles2
 }  // namespace gpu
diff --git a/gpu/command_buffer/service/texture_definition.h b/gpu/command_buffer/service/texture_definition.h
index ff891fc..95f0fa2 100644
--- a/gpu/command_buffer/service/texture_definition.h
+++ b/gpu/command_buffer/service/texture_definition.h
@@ -58,6 +58,8 @@
   scoped_refptr<NativeImageBuffer> image() const { return image_buffer_; }
 
  private:
+  bool SafeToRenderFrom() const;
+
   struct LevelInfo {
     LevelInfo(GLenum target,
               GLenum internal_format,
diff --git a/gpu/command_buffer/service/transfer_buffer_manager.cc b/gpu/command_buffer/service/transfer_buffer_manager.cc
index 4404a9e..e9c83e0 100644
--- a/gpu/command_buffer/service/transfer_buffer_manager.cc
+++ b/gpu/command_buffer/service/transfer_buffer_manager.cc
@@ -8,8 +8,8 @@
 
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
-#include "base/debug/trace_event.h"
 #include "base/process/process_handle.h"
+#include "base/trace_event/trace_event.h"
 #include "gpu/command_buffer/common/cmd_buffer_common.h"
 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
 
diff --git a/gpu/command_buffer/service/vertex_array_manager.cc b/gpu/command_buffer/service/vertex_array_manager.cc
index 1560c04..0809eda 100644
--- a/gpu/command_buffer/service/vertex_array_manager.cc
+++ b/gpu/command_buffer/service/vertex_array_manager.cc
@@ -3,8 +3,9 @@
 // found in the LICENSE file.
 
 #include "gpu/command_buffer/service/vertex_array_manager.h"
-#include "base/debug/trace_event.h"
+
 #include "base/logging.h"
+#include "base/trace_event/trace_event.h"
 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
 #include "gpu/command_buffer/service/buffer_manager.h"
 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
diff --git a/gpu/command_buffer/service/vertex_array_manager_unittest.cc b/gpu/command_buffer/service/vertex_array_manager_unittest.cc
index 24592b6..0d3d1d0 100644
--- a/gpu/command_buffer/service/vertex_array_manager_unittest.cc
+++ b/gpu/command_buffer/service/vertex_array_manager_unittest.cc
@@ -29,7 +29,7 @@
 
  protected:
   void SetUp() override {
-    GpuServiceTest::SetUp();
+    GpuServiceTest::SetUpWithGLVersion("2.1", "GL_ARB_vertex_array_object");
     manager_.reset(new VertexArrayManager());
   }
 
diff --git a/gpu/config/gpu_info_collector.cc b/gpu/config/gpu_info_collector.cc
index 5d25546..fd1ff8b 100644
--- a/gpu/config/gpu_info_collector.cc
+++ b/gpu/config/gpu_info_collector.cc
@@ -7,12 +7,12 @@
 #include <string>
 #include <vector>
 
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/string_split.h"
+#include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_implementation.h"
diff --git a/gpu/config/gpu_info_collector_linux.cc b/gpu/config/gpu_info_collector_linux.cc
index 35dd88a..023c08b 100644
--- a/gpu/config/gpu_info_collector_linux.cc
+++ b/gpu/config/gpu_info_collector_linux.cc
@@ -7,7 +7,6 @@
 #include <vector>
 
 #include "base/command_line.h"
-#include "base/debug/trace_event.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
@@ -16,6 +15,7 @@
 #include "base/strings/string_split.h"
 #include "base/strings/string_tokenizer.h"
 #include "base/strings/string_util.h"
+#include "base/trace_event/trace_event.h"
 #include "gpu/config/gpu_info_collector.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
diff --git a/gpu/config/gpu_info_collector_mac.mm b/gpu/config/gpu_info_collector_mac.mm
index f08ffbe..bbe3780 100644
--- a/gpu/config/gpu_info_collector_mac.mm
+++ b/gpu/config/gpu_info_collector_mac.mm
@@ -6,7 +6,6 @@
 
 #include <vector>
 
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "base/mac/mac_util.h"
 #include "base/mac/scoped_cftyperef.h"
@@ -15,6 +14,7 @@
 #include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/strings/sys_string_conversions.h"
+#include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_implementation.h"
diff --git a/gpu/config/gpu_info_collector_win.cc b/gpu/config/gpu_info_collector_win.cc
index d38a026..04f66fa 100644
--- a/gpu/config/gpu_info_collector_win.cc
+++ b/gpu/config/gpu_info_collector_win.cc
@@ -14,7 +14,6 @@
 #include <setupapi.h>
 
 #include "base/command_line.h"
-#include "base/debug/trace_event.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
@@ -30,6 +29,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/threading/thread.h"
 #include "base/threading/worker_pool.h"
+#include "base/trace_event/trace_event.h"
 #include "base/win/registry.h"
 #include "base/win/scoped_com_initializer.h"
 #include "base/win/scoped_comptr.h"
diff --git a/gpu/gpu.gyp b/gpu/gpu.gyp
index 752a960..138d858 100644
--- a/gpu/gpu.gyp
+++ b/gpu/gpu.gyp
@@ -179,7 +179,6 @@
         'command_buffer/client/gles2_implementation_unittest.cc',
         'command_buffer/client/mapped_memory_unittest.cc',
         'command_buffer/client/query_tracker_unittest.cc',
-        'command_buffer/client/program_info_manager_unittest.cc',
         'command_buffer/client/ring_buffer_test.cc',
         'command_buffer/client/transfer_buffer_unittest.cc',
         'command_buffer/client/vertex_array_object_manager_unittest.cc',
@@ -281,6 +280,23 @@
       'msvs_disabled_warnings': [ 4267, ],
     },
     {
+      # GN version: //gpu/gpu_perftests
+      'target_name': 'gpu_perftests',
+      'type': '<(gtest_target_type)',
+      'dependencies': [
+        '../base/base.gyp:base',
+        '../base/base.gyp:test_support_base',
+        '../testing/gtest.gyp:gtest',
+        '../testing/perf/perf_test.gyp:perf_test',
+        '../ui/gfx/gfx.gyp:gfx_geometry',
+        '../ui/gl/gl.gyp:gl',
+      ],
+      'sources': [
+        'perftests/run_all_tests.cc',
+        'perftests/texture_upload_perftest.cc',
+      ],
+    },
+    {
       # GN version: //gpu:gl_tests
       'target_name': 'gl_tests',
       'type': '<(gtest_target_type)',
diff --git a/gpu/perftests/run_all_tests.cc b/gpu/perftests/run_all_tests.cc
new file mode 100644
index 0000000..ed0df88
--- /dev/null
+++ b/gpu/perftests/run_all_tests.cc
@@ -0,0 +1,15 @@
+// Copyright (c) 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/bind.h"
+#include "base/test/launcher/unit_test_launcher.h"
+#include "base/test/test_suite.h"
+
+int main(int argc, char** argv) {
+  base::TestSuite test_suite(argc, argv);
+
+  const auto& run_test_suite =
+      base::Bind(&base::TestSuite::Run, base::Unretained(&test_suite));
+  return base::LaunchUnitTests(argc, argv, run_test_suite);
+}
diff --git a/gpu/perftests/texture_upload_perftest.cc b/gpu/perftests/texture_upload_perftest.cc
new file mode 100644
index 0000000..7166c2a
--- /dev/null
+++ b/gpu/perftests/texture_upload_perftest.cc
@@ -0,0 +1,258 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <algorithm>
+#include <vector>
+
+#include "base/containers/small_map.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/time/time.h"
+#include "base/timer/elapsed_timer.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/perf/perf_test.h"
+#include "ui/gfx/geometry/size.h"
+#include "ui/gl/gl_bindings.h"
+#include "ui/gl/gl_context.h"
+#include "ui/gl/gl_surface.h"
+#include "ui/gl/scoped_make_current.h"
+
+namespace gpu {
+namespace {
+
+const int kUploadPerfWarmupRuns = 10;
+const int kUploadPerfTestRuns = 100;
+
+#define SHADER(Src) #Src
+
+// clang-format off
+const char kVertexShader[] =
+SHADER(
+  attribute vec2 a_position;
+  varying vec2 v_texCoord;
+  void main() {
+    gl_Position = vec4(a_position.x, a_position.y, 0.0, 1.0);
+    v_texCoord = vec2((a_position.x + 1) * 0.5, (a_position.y + 1) * 0.5);
+  }
+);
+const char kFragmentShader[] =
+SHADER(
+  uniform sampler2D a_texture;
+  varying vec2 v_texCoord;
+  void main() {
+    gl_FragColor = texture2D(a_texture, v_texCoord.xy);
+  }
+);
+// clang-format on
+
+void CheckNoGlError() {
+  CHECK_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
+}
+
+// Utility function to compile a shader from a string.
+GLuint LoadShader(const GLenum type, const char* const src) {
+  GLuint shader = 0;
+  shader = glCreateShader(type);
+  CHECK_NE(0u, shader);
+  glShaderSource(shader, 1, &src, NULL);
+  glCompileShader(shader);
+
+  GLint compiled = 0;
+  glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);
+  if (compiled == 0) {
+    GLint len = 0;
+    glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &len);
+    if (len > 1) {
+      scoped_ptr<char> error_log(new char[len]);
+      glGetShaderInfoLog(shader, len, NULL, error_log.get());
+      LOG(ERROR) << "Error compiling shader: " << error_log.get();
+    }
+  }
+  CHECK_NE(0, compiled);
+  return shader;
+}
+
+void GenerateTextureData(const gfx::Size& size,
+                         const int seed,
+                         std::vector<uint8>* const pixels) {
+  pixels->resize(size.GetArea() * 4);
+  for (int y = 0; y < size.height(); ++y) {
+    for (int x = 0; x < size.width(); ++x) {
+      const size_t offset = (y * size.width() + x) * 4;
+      pixels->at(offset) = (y + seed) % 256;
+      pixels->at(offset + 1) = (x + seed) % 256;
+      pixels->at(offset + 2) = (y + x + seed) % 256;
+      pixels->at(offset + 3) = 255;
+    }
+  }
+}
+
+// PerfTest to check costs of texture upload at different stages
+// on different platforms.
+class TextureUploadPerfTest : public testing::Test {
+ public:
+  TextureUploadPerfTest() : size_(512, 512) {}
+
+  // Overridden from testing::Test
+  void SetUp() override {
+    // Initialize an offscreen surface and a gl context.
+    gfx::GLSurface::InitializeOneOff();
+    surface_ = gfx::GLSurface::CreateOffscreenGLSurface(size_);
+    gl_context_ = gfx::GLContext::CreateGLContext(NULL,  // share_group
+                                                  surface_.get(),
+                                                  gfx::PreferIntegratedGpu);
+
+    // Prepare a simple program and a vertex buffer that will be
+    // used to draw a quad on the offscreen surface.
+    ui::ScopedMakeCurrent smc(gl_context_.get(), surface_.get());
+    vertex_shader_ = LoadShader(GL_VERTEX_SHADER, kVertexShader);
+    fragment_shader_ = LoadShader(GL_FRAGMENT_SHADER, kFragmentShader);
+    program_object_ = glCreateProgram();
+    CHECK_NE(0u, program_object_);
+
+    glAttachShader(program_object_, vertex_shader_);
+    glAttachShader(program_object_, fragment_shader_);
+    glBindAttribLocation(program_object_, 0, "a_position");
+    glLinkProgram(program_object_);
+
+    GLint linked = -1;
+    glGetProgramiv(program_object_, GL_LINK_STATUS, &linked);
+    CHECK_NE(0, linked);
+
+    sampler_location_ = glGetUniformLocation(program_object_, "a_texture");
+    CHECK_NE(-1, sampler_location_);
+
+    glGenBuffersARB(1, &vertex_buffer_);
+    CHECK_NE(0u, vertex_buffer_);
+    glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_);
+    static GLfloat positions[] = {
+        -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f,
+    };
+    glBufferData(GL_ARRAY_BUFFER, sizeof(positions), positions, GL_STATIC_DRAW);
+    CheckNoGlError();
+  }
+
+  void TearDown() override {
+    ui::ScopedMakeCurrent smc(gl_context_.get(), surface_.get());
+    if (program_object_ != 0) {
+      glDeleteProgram(program_object_);
+    }
+    if (vertex_shader_ != 0) {
+      glDeleteShader(vertex_shader_);
+    }
+    if (fragment_shader_ != 0) {
+      glDeleteShader(fragment_shader_);
+    }
+    if (vertex_buffer_ != 0) {
+      glDeleteShader(vertex_buffer_);
+    }
+
+    gl_context_ = nullptr;
+    surface_ = nullptr;
+  }
+
+ protected:
+  struct Measurement {
+    Measurement() : name(), wall_time(){};
+    Measurement(const std::string& name, const base::TimeDelta wall_time)
+        : name(name), wall_time(wall_time){};
+    std::string name;
+    base::TimeDelta wall_time;
+  };
+  // Upload and draw on the offscren surface.
+  // Return a list of pair. Each pair describe a gl operation and the wall
+  // time elapsed in milliseconds.
+  std::vector<Measurement> UploadAndDraw(const std::vector<uint8>& pixels,
+                                         const GLenum format,
+                                         const GLenum type) {
+    std::vector<Measurement> measurements;
+    ui::ScopedMakeCurrent smc(gl_context_.get(), surface_.get());
+
+    base::ElapsedTimer total_timer;
+    GLuint texture_id = 0;
+
+    base::ElapsedTimer tex_timer;
+    glActiveTexture(GL_TEXTURE0);
+    glGenTextures(1, &texture_id);
+    glBindTexture(GL_TEXTURE_2D, texture_id);
+
+    glTexImage2D(GL_TEXTURE_2D, 0, format, size_.width(), size_.height(), 0,
+                 format, type, &pixels[0]);
+    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+    CheckNoGlError();
+    measurements.push_back(Measurement("teximage2d", tex_timer.Elapsed()));
+
+    base::ElapsedTimer draw_timer;
+    glUseProgram(program_object_);
+    glUniform1i(sampler_location_, 0);
+
+    glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_);
+    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
+    glEnableVertexAttribArray(0);
+
+    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+    measurements.push_back(Measurement("drawarrays", draw_timer.Elapsed()));
+
+    base::ElapsedTimer finish_timer;
+    glFinish();
+    CheckNoGlError();
+    measurements.push_back(Measurement("finish", finish_timer.Elapsed()));
+    measurements.push_back(Measurement("total", total_timer.Elapsed()));
+
+    glDeleteTextures(1, &texture_id);
+
+    std::vector<uint8> pixels_rendered(size_.GetArea() * 4);
+    glReadPixels(0, 0, size_.width(), size_.height(), GL_RGBA, type,
+                 &pixels_rendered[0]);
+    CheckNoGlError();
+
+    // TODO(dcastagna): don't assume the format of the texture and do
+    // the appropriate format conversion.
+    EXPECT_EQ(static_cast<GLenum>(GL_RGBA), format);
+    EXPECT_EQ(pixels, pixels_rendered);
+    return measurements;
+  }
+
+  const gfx::Size size_;  // for the offscreen surface and the texture
+  scoped_refptr<gfx::GLContext> gl_context_;
+  scoped_refptr<gfx::GLSurface> surface_;
+
+  GLuint vertex_shader_ = 0;
+  GLuint fragment_shader_ = 0;
+  GLuint program_object_ = 0;
+  GLint sampler_location_ = -1;
+  GLuint vertex_buffer_ = 0;
+};
+
+// Perf test that generates, uploads and draws a texture on a surface repeatedly
+// and prints out aggregated measurements for all the runs.
+TEST_F(TextureUploadPerfTest, glTexImage2d) {
+  std::vector<uint8> pixels;
+  base::SmallMap<std::map<std::string, Measurement>>
+      aggregates;  // indexed by name
+  for (int i = 0; i < kUploadPerfWarmupRuns + kUploadPerfTestRuns; ++i) {
+    GenerateTextureData(size_, i + 1, &pixels);
+    auto run = UploadAndDraw(pixels, GL_RGBA, GL_UNSIGNED_BYTE);
+    if (i >= kUploadPerfWarmupRuns) {
+      for (const Measurement& m : run) {
+        auto& agg = aggregates[m.name];
+        agg.name = m.name;
+        agg.wall_time += m.wall_time;
+      }
+    }
+  }
+
+  for (const auto& entry : aggregates) {
+    const auto& m = entry.second;
+    perf_test::PrintResult(
+        m.name, "", "", (m.wall_time / kUploadPerfTestRuns).InMillisecondsF(),
+        "ms", true);
+  }
+}
+
+}  // namespace
+}  // namespace gpu
diff --git a/mojo/converters/surfaces/surfaces_type_converters.cc b/mojo/converters/surfaces/surfaces_type_converters.cc
index 5c2f614..0803ba6 100644
--- a/mojo/converters/surfaces/surfaces_type_converters.cc
+++ b/mojo/converters/surfaces/surfaces_type_converters.cc
@@ -175,6 +175,7 @@
                        input->visible_rect.To<gfx::Rect>(),
                        input->needs_blending,
                        yuv_state->tex_coord_rect.To<gfx::RectF>(),
+                       gfx::Size(),  // TODO(jamesr): texture size
                        yuv_state->y_plane_resource_id,
                        yuv_state->u_plane_resource_id,
                        yuv_state->v_plane_resource_id,
diff --git a/mojo/tools/roll/cc_strip_video.patch b/mojo/tools/roll/cc_strip_video.patch
index 8098db6..4540a2a 100644
--- a/mojo/tools/roll/cc_strip_video.patch
+++ b/mojo/tools/roll/cc_strip_video.patch
@@ -1,5 +1,5 @@
 diff --git a/cc/BUILD.gn b/cc/BUILD.gn
-index 2ede4ac..eee115c 100644
+index 41f99e2..d6fd028 100644
 --- a/cc/BUILD.gn
 +++ b/cc/BUILD.gn
 @@ -222,13 +222,6 @@ component("cc") {
@@ -34,30 +34,30 @@
      "test/failure_output_surface.cc",
      "test/failure_output_surface.h",
      "test/geometry_test_utils.cc",
-@@ -782,7 +771,6 @@ test("cc_unittests") {
-     "layers/tiled_layer_unittest.cc",
-     "layers/ui_resource_layer_impl_unittest.cc",
-     "layers/ui_resource_layer_unittest.cc",
--    "layers/video_layer_impl_unittest.cc",
-     "output/begin_frame_args_unittest.cc",
-     "output/delegating_renderer_unittest.cc",
-     "output/filter_operations_unittest.cc",
-@@ -814,7 +802,6 @@ test("cc_unittests") {
-     "resources/texture_uploader_unittest.cc",
-     "resources/tile_manager_unittest.cc",
-     "resources/tile_priority_unittest.cc",
--    "resources/video_resource_updater_unittest.cc",
-     "scheduler/begin_frame_source_unittest.cc",
-     "scheduler/delay_based_time_source_unittest.cc",
-     "scheduler/scheduler_state_machine_unittest.cc",
-@@ -843,7 +830,6 @@ test("cc_unittests") {
-     "trees/layer_tree_host_unittest_picture.cc",
-     "trees/layer_tree_host_unittest_proxy.cc",
-     "trees/layer_tree_host_unittest_scroll.cc",
--    "trees/layer_tree_host_unittest_video.cc",
-     "trees/layer_tree_impl_unittest.cc",
-     "trees/occlusion_tracker_unittest.cc",
-     "trees/occlusion_unittest.cc",
+@@ -783,7 +772,6 @@ if (!is_win || link_chrome_on_windows) {
+       "layers/tiled_layer_unittest.cc",
+       "layers/ui_resource_layer_impl_unittest.cc",
+       "layers/ui_resource_layer_unittest.cc",
+-      "layers/video_layer_impl_unittest.cc",
+       "output/begin_frame_args_unittest.cc",
+       "output/delegating_renderer_unittest.cc",
+       "output/filter_operations_unittest.cc",
+@@ -815,7 +803,6 @@ if (!is_win || link_chrome_on_windows) {
+       "resources/texture_uploader_unittest.cc",
+       "resources/tile_manager_unittest.cc",
+       "resources/tile_priority_unittest.cc",
+-      "resources/video_resource_updater_unittest.cc",
+       "scheduler/begin_frame_source_unittest.cc",
+       "scheduler/delay_based_time_source_unittest.cc",
+       "scheduler/scheduler_state_machine_unittest.cc",
+@@ -844,7 +831,6 @@ if (!is_win || link_chrome_on_windows) {
+       "trees/layer_tree_host_unittest_picture.cc",
+       "trees/layer_tree_host_unittest_proxy.cc",
+       "trees/layer_tree_host_unittest_scroll.cc",
+-      "trees/layer_tree_host_unittest_video.cc",
+       "trees/layer_tree_impl_unittest.cc",
+       "trees/occlusion_tracker_unittest.cc",
+       "trees/occlusion_unittest.cc",
 diff --git a/cc/layers/video_frame_provider.h b/cc/layers/video_frame_provider.h
 deleted file mode 100644
 index 784d951..0000000
@@ -128,10 +128,9 @@
 -
 -#endif  // CC_LAYERS_VIDEO_FRAME_PROVIDER_H_
 diff --git a/cc/layers/video_frame_provider_client_impl.cc b/cc/layers/video_frame_provider_client_impl.cc
-deleted file mode 100644
-index 50333c1..0000000
+index 2b12567..e69de29 100644
 --- a/cc/layers/video_frame_provider_client_impl.cc
-+++ /dev/null
++++ b/cc/layers/video_frame_provider_client_impl.cc
 @@ -1,95 +0,0 @@
 -// Copyright 2013 The Chromium Authors. All rights reserved.
 -// Use of this source code is governed by a BSD-style license that can be
@@ -139,7 +138,7 @@
 -
 -#include "cc/layers/video_frame_provider_client_impl.h"
 -
--#include "base/debug/trace_event.h"
+-#include "base/trace_event/trace_event.h"
 -#include "cc/base/math_util.h"
 -#include "cc/layers/video_layer_impl.h"
 -#include "media/base/video_frame.h"
@@ -229,19 +228,19 @@
 -
 -}  // namespace cc
 diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc
-index 9c856e8..e40a4fc 100644
+index 45d98b6..5a15efa 100644
 --- a/cc/output/gl_renderer.cc
 +++ b/cc/output/gl_renderer.cc
 @@ -13,7 +13,6 @@
- #include "base/debug/trace_event.h"
  #include "base/logging.h"
+ #include "base/trace_event/trace_event.h"
  #include "cc/base/math_util.h"
 -#include "cc/layers/video_layer_impl.h"
  #include "cc/output/compositor_frame.h"
  #include "cc/output/compositor_frame_metadata.h"
  #include "cc/output/context_provider.h"
 diff --git a/cc/output/renderer_pixeltest.cc b/cc/output/renderer_pixeltest.cc
-index 08a4053..c7582fe 100644
+index d503cc4..c7582fe 100644
 --- a/cc/output/renderer_pixeltest.cc
 +++ b/cc/output/renderer_pixeltest.cc
 @@ -12,7 +12,6 @@
@@ -252,7 +251,7 @@
  #include "third_party/skia/include/core/SkColorPriv.h"
  #include "third_party/skia/include/core/SkImageFilter.h"
  #include "third_party/skia/include/core/SkMatrix.h"
-@@ -386,346 +385,6 @@ TEST_F(GLRendererPixelTest, NonPremultipliedTextureWithBackground) {
+@@ -386,453 +385,6 @@ TEST_F(GLRendererPixelTest, NonPremultipliedTextureWithBackground) {
        FuzzyPixelOffByOneComparator(true)));
  }
  
@@ -293,8 +292,9 @@
 -        v_row[j] = (v_value += 5);
 -      }
 -    }
+-    uint8 alpha_value = is_transparent ? 0 : 128;
 -    CreateTestYUVVideoDrawQuad_FromVideoFrame(
--        shared_state, video_frame, is_transparent, tex_coord_rect, render_pass);
+-        shared_state, video_frame, alpha_value, tex_coord_rect, render_pass);
 -  }
 -
 -  void CreateTestYUVVideoDrawQuad_Solid(const SharedQuadState* shared_state,
@@ -326,14 +326,110 @@
 -           video_frame->stride(media::VideoFrame::kVPlane) *
 -               video_frame->rows(media::VideoFrame::kVPlane));
 -
+-    uint8 alpha_value = is_transparent ? 0 : 128;
 -    CreateTestYUVVideoDrawQuad_FromVideoFrame(
--        shared_state, video_frame, is_transparent, tex_coord_rect, render_pass);
+-        shared_state, video_frame, alpha_value, tex_coord_rect, render_pass);
+-  }
+-
+-  void CreateEdgeBleedPass(media::VideoFrame::Format format,
+-                           RenderPassList* pass_list) {
+-    gfx::Rect rect(200, 200);
+-
+-    RenderPassId id(1, 1);
+-    scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
+-
+-    // Scale the video up so that bilinear filtering kicks in to sample more
+-    // than just nearest neighbor would.
+-    gfx::Transform scale_by_2;
+-    scale_by_2.Scale(2.f, 2.f);
+-    gfx::Rect half_rect(100, 100);
+-    SharedQuadState* shared_state =
+-        CreateTestSharedQuadState(scale_by_2, half_rect, pass.get());
+-
+-    gfx::Size background_size(200, 200);
+-    gfx::Rect green_rect(16, 20, 100, 100);
+-    gfx::RectF tex_coord_rect(
+-        static_cast<float>(green_rect.x()) / background_size.width(),
+-        static_cast<float>(green_rect.y()) / background_size.height(),
+-        static_cast<float>(green_rect.width()) / background_size.width(),
+-        static_cast<float>(green_rect.height()) / background_size.height());
+-
+-    // YUV of (149,43,21) should be green (0,255,0) in RGB.
+-    // Create a video frame that has a non-green background rect, with a
+-    // green sub-rectangle that should be the only thing displayed in
+-    // the final image.  Bleeding will appear on all four sides of the video
+-    // if the tex coords are not clamped.
+-    CreateTestYUVVideoDrawQuad_TwoColor(shared_state, format, false,
+-                                        tex_coord_rect, background_size, 0, 0,
+-                                        0, green_rect, 149, 43, 21, pass.get());
+-    pass_list->push_back(pass.Pass());
+-  }
+-
+-  // Creates a video frame of size background_size filled with yuv_background,
+-  // and then draws a foreground rectangle in a different color on top of
+-  // that. The foreground rectangle must have coordinates that are divisible
+-  // by 2 because YUV is a block format.
+-  void CreateTestYUVVideoDrawQuad_TwoColor(const SharedQuadState* shared_state,
+-                                           media::VideoFrame::Format format,
+-                                           bool is_transparent,
+-                                           const gfx::RectF& tex_coord_rect,
+-                                           const gfx::Size& background_size,
+-                                           uint8 y_background,
+-                                           uint8 u_background,
+-                                           uint8 v_background,
+-                                           const gfx::Rect& foreground_rect,
+-                                           uint8 y_foreground,
+-                                           uint8 u_foreground,
+-                                           uint8 v_foreground,
+-                                           RenderPass* render_pass) {
+-    const gfx::Rect rect(background_size);
+-
+-    scoped_refptr<media::VideoFrame> video_frame =
+-        media::VideoFrame::CreateFrame(format, background_size, foreground_rect,
+-                                       foreground_rect.size(),
+-                                       base::TimeDelta());
+-
+-    int planes[] = {media::VideoFrame::kYPlane,
+-                    media::VideoFrame::kUPlane,
+-                    media::VideoFrame::kVPlane};
+-    uint8 yuv_background[] = {y_background, u_background, v_background};
+-    uint8 yuv_foreground[] = {y_foreground, u_foreground, v_foreground};
+-    int sample_size[] = {1, 2, 2};
+-
+-    for (int i = 0; i < 3; ++i) {
+-      memset(video_frame->data(planes[i]), yuv_background[i],
+-             video_frame->stride(planes[i]) * video_frame->rows(planes[i]));
+-    }
+-
+-    for (int i = 0; i < 3; ++i) {
+-      // Since yuv encoding uses block encoding, widths have to be divisible
+-      // by the sample size in order for this function to behave properly.
+-      DCHECK_EQ(foreground_rect.x() % sample_size[i], 0);
+-      DCHECK_EQ(foreground_rect.y() % sample_size[i], 0);
+-      DCHECK_EQ(foreground_rect.width() % sample_size[i], 0);
+-      DCHECK_EQ(foreground_rect.height() % sample_size[i], 0);
+-
+-      gfx::Rect sample_rect(foreground_rect.x() / sample_size[i],
+-                            foreground_rect.y() / sample_size[i],
+-                            foreground_rect.width() / sample_size[i],
+-                            foreground_rect.height() / sample_size[i]);
+-      for (int y = sample_rect.y(); y < sample_rect.bottom(); ++y) {
+-        for (int x = sample_rect.x(); x < sample_rect.right(); ++x) {
+-          size_t offset = y * video_frame->stride(planes[i]) + x;
+-          video_frame->data(planes[i])[offset] = yuv_foreground[i];
+-        }
+-      }
+-    }
+-
+-    uint8 alpha_value = 255;
+-    CreateTestYUVVideoDrawQuad_FromVideoFrame(
+-        shared_state, video_frame, alpha_value, tex_coord_rect, render_pass);
 -  }
 -
 -  void CreateTestYUVVideoDrawQuad_FromVideoFrame(
 -      const SharedQuadState* shared_state,
 -      scoped_refptr<media::VideoFrame> video_frame,
--      bool is_transparent,
+-      uint8 alpha_value,
 -      const gfx::RectF& tex_coord_rect,
 -      RenderPass* render_pass) {
 -    const bool with_alpha = (video_frame->format() == media::VideoFrame::YV12A);
@@ -341,12 +437,11 @@
 -        (video_frame->format() == media::VideoFrame::YV12J
 -             ? YUVVideoDrawQuad::REC_601_JPEG
 -             : YUVVideoDrawQuad::REC_601);
--    const gfx::Rect rect(this->device_viewport_size_);
+-    const gfx::Rect rect(shared_state->content_bounds);
 -    const gfx::Rect opaque_rect(0, 0, 0, 0);
 -
 -    if (with_alpha)
--      memset(video_frame->data(media::VideoFrame::kAPlane),
--             is_transparent ? 0 : 128,
+-      memset(video_frame->data(media::VideoFrame::kAPlane), alpha_value,
 -             video_frame->stride(media::VideoFrame::kAPlane) *
 -                 video_frame->rows(media::VideoFrame::kAPlane));
 -
@@ -385,16 +480,9 @@
 -
 -    YUVVideoDrawQuad* yuv_quad =
 -        render_pass->CreateAndAppendDrawQuad<YUVVideoDrawQuad>();
--    yuv_quad->SetNew(shared_state,
--                     rect,
--                     opaque_rect,
--                     rect,
--                     tex_coord_rect,
--                     y_resource,
--                     u_resource,
--                     v_resource,
--                     a_resource,
--                     color_space);
+-    yuv_quad->SetNew(shared_state, rect, opaque_rect, rect, tex_coord_rect,
+-                     video_frame->coded_size(), y_resource, u_resource,
+-                     v_resource, a_resource, color_space);
 -  }
 -
 -  void SetUp() override {
@@ -512,6 +600,24 @@
 -                                 FuzzyPixelOffByOneComparator(true)));
 -}
 -
+-// Test that a YUV video doesn't bleed outside of its tex coords when the
+-// tex coord rect is only a partial subrectangle of the coded contents.
+-TEST_F(VideoGLRendererPixelTest, YUVEdgeBleed) {
+-  RenderPassList pass_list;
+-  CreateEdgeBleedPass(media::VideoFrame::YV12J, &pass_list);
+-  EXPECT_TRUE(this->RunPixelTest(&pass_list,
+-                                 base::FilePath(FILE_PATH_LITERAL("green.png")),
+-                                 FuzzyPixelOffByOneComparator(true)));
+-}
+-
+-TEST_F(VideoGLRendererPixelTest, YUVAEdgeBleed) {
+-  RenderPassList pass_list;
+-  CreateEdgeBleedPass(media::VideoFrame::YV12A, &pass_list);
+-  EXPECT_TRUE(this->RunPixelTest(&pass_list,
+-                                 base::FilePath(FILE_PATH_LITERAL("green.png")),
+-                                 FuzzyPixelOffByOneComparator(true)));
+-}
+-
 -TEST_F(VideoGLRendererPixelTest, SimpleYUVJRectGrey) {
 -  gfx::Rect rect(this->device_viewport_size_);
 -
@@ -600,7 +706,7 @@
    gfx::Rect viewport_rect(this->device_viewport_size_);
  
 diff --git a/cc/quads/yuv_video_draw_quad.h b/cc/quads/yuv_video_draw_quad.h
-index e1c5410..edda34a 100644
+index 61f11a2..7ad0ba4 100644
 --- a/cc/quads/yuv_video_draw_quad.h
 +++ b/cc/quads/yuv_video_draw_quad.h
 @@ -8,7 +8,6 @@
@@ -612,19 +718,19 @@
  
  namespace cc {
 diff --git a/cc/resources/drawing_display_item.cc b/cc/resources/drawing_display_item.cc
-index e5610ca..473cb77 100644
+index 29cc2d3..351fade 100644
 --- a/cc/resources/drawing_display_item.cc
 +++ b/cc/resources/drawing_display_item.cc
-@@ -4,6 +4,7 @@
+@@ -6,6 +6,7 @@
  
- #include "cc/resources/drawing_display_item.h"
+ #include <string>
  
 +#include "base/logging.h"
- #include "third_party/skia/include/core/SkCanvas.h"
- #include "third_party/skia/include/core/SkDrawPictureCallback.h"
- #include "third_party/skia/include/core/SkMatrix.h"
+ #include "base/strings/stringprintf.h"
+ #include "base/trace_event/trace_event_argument.h"
+ #include "cc/debug/picture_debug_util.h"
 diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
-index 6ac2f8c..7804f22 100644
+index cb33686..b016fff 100644
 --- a/cc/trees/layer_tree_host_impl_unittest.cc
 +++ b/cc/trees/layer_tree_host_impl_unittest.cc
 @@ -27,7 +27,6 @@
@@ -667,7 +773,7 @@
    }
  
    LayerTreeSettings DefaultSettings() {
-@@ -5308,18 +5303,6 @@ TEST_F(LayerTreeHostImplTest, LayersFreeTextures) {
+@@ -5312,18 +5307,6 @@ TEST_F(LayerTreeHostImplTest, LayersFreeTextures) {
    root_layer->SetBounds(gfx::Size(10, 10));
    root_layer->SetHasRenderSurface(true);
  
@@ -686,7 +792,7 @@
    scoped_ptr<IOSurfaceLayerImpl> io_surface_layer =
        IOSurfaceLayerImpl::Create(host_impl_->active_tree(), 5);
    io_surface_layer->SetBounds(gfx::Size(10, 10));
-@@ -6399,16 +6382,6 @@ TEST_F(LayerTreeHostImplTest,
+@@ -6403,16 +6386,6 @@ TEST_F(LayerTreeHostImplTest,
    scoped_ptr<SolidColorLayerImpl> root_layer =
        SolidColorLayerImpl::Create(host_impl_->active_tree(), 1);
  
@@ -704,7 +810,7 @@
    EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
    host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
 diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
-index 5299d70..1e10588 100644
+index a3c37ed..d4bfb6e 100644
 --- a/cc/trees/layer_tree_host_unittest.cc
 +++ b/cc/trees/layer_tree_host_unittest.cc
 @@ -18,7 +18,6 @@
@@ -723,7 +829,7 @@
  #include "cc/test/geometry_test_utils.h"
  #include "cc/test/impl_side_painting_settings.h"
  #include "cc/test/layer_tree_test.h"
-@@ -4193,28 +4191,6 @@ class LayerInvalidateCausesDraw : public LayerTreeHostTest {
+@@ -4200,28 +4198,6 @@ class LayerInvalidateCausesDraw : public LayerTreeHostTest {
    int num_draws_;
  };
  
@@ -753,7 +859,7 @@
  // to the compositor thread, even though no resources are updated in
  // response to that invalidation.
 diff --git a/cc/trees/layer_tree_host_unittest_context.cc b/cc/trees/layer_tree_host_unittest_context.cc
-index 681ae4e..cc4f28f 100644
+index 56e52ad..fb0c9c8 100644
 --- a/cc/trees/layer_tree_host_unittest_context.cc
 +++ b/cc/trees/layer_tree_host_unittest_context.cc
 @@ -15,8 +15,6 @@
@@ -791,7 +897,7 @@
    }
  
    void LoseContext() {
-@@ -1041,43 +1034,6 @@ class LayerTreeHostContextTestDontUseLostResources
+@@ -1057,43 +1050,6 @@ class LayerTreeHostContextTestDontUseLostResources
      layer_with_mask->SetMaskLayer(mask.get());
      root->AddChild(layer_with_mask);
  
@@ -835,7 +941,7 @@
      if (!delegating_renderer()) {
        // TODO(danakj): IOSurface layer can not be transported. crbug.com/239335
        scoped_refptr<IOSurfaceLayer> io_surface = IOSurfaceLayer::Create();
-@@ -1107,14 +1063,6 @@ class LayerTreeHostContextTestDontUseLostResources
+@@ -1123,14 +1079,6 @@ class LayerTreeHostContextTestDontUseLostResources
  
    void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
      LayerTreeHostContextTest::CommitCompleteOnThread(host_impl);
@@ -850,7 +956,7 @@
    }
  
    DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
-@@ -1163,14 +1111,6 @@ class LayerTreeHostContextTestDontUseLostResources
+@@ -1179,14 +1127,6 @@ class LayerTreeHostContextTestDontUseLostResources
    scoped_refptr<DelegatedFrameResourceCollection>
        delegated_resource_collection_;
    scoped_refptr<DelegatedFrameProvider> delegated_frame_provider_;
diff --git a/net/base/address_tracker_linux.cc b/net/base/address_tracker_linux.cc
index 27dd201..731bf4f 100644
--- a/net/base/address_tracker_linux.cc
+++ b/net/base/address_tracker_linux.cc
@@ -8,9 +8,11 @@
 #include <linux/if.h>
 #include <sys/ioctl.h>
 
+#include "base/files/scoped_file.h"
 #include "base/logging.h"
 #include "base/posix/eintr_wrapper.h"
 #include "base/threading/thread_restrictions.h"
+#include "net/base/net_util_linux.h"
 
 namespace net {
 namespace internal {
@@ -76,36 +78,32 @@
   return true;
 }
 
-// Returns the name for the interface with interface index |interface_index|.
-// The return value points to a function-scoped static so it may be changed by
-// subsequent calls. This function could be replaced with if_indextoname() but
-// net/if.h cannot be mixed with linux/if.h so we'll stick with exclusively
-// talking to the kernel and not the C library.
-const char* GetInterfaceName(int interface_index) {
-  int ioctl_socket = socket(AF_INET, SOCK_DGRAM, 0);
-  if (ioctl_socket < 0)
-    return "";
-  static struct ifreq ifr;
-  memset(&ifr, 0, sizeof(ifr));
-  ifr.ifr_ifindex = interface_index;
-  int rv = ioctl(ioctl_socket, SIOCGIFNAME, &ifr);
-  close(ioctl_socket);
-  if (rv != 0)
-    return "";
-  return ifr.ifr_name;
-}
-
 }  // namespace
 
+// static
+char* AddressTrackerLinux::GetInterfaceName(int interface_index, char* buf) {
+  memset(buf, 0, IFNAMSIZ);
+  base::ScopedFD ioctl_socket(socket(AF_INET, SOCK_DGRAM, 0));
+  if (!ioctl_socket.is_valid())
+    return buf;
+
+  struct ifreq ifr = {};
+  ifr.ifr_ifindex = interface_index;
+
+  if (ioctl(ioctl_socket.get(), SIOCGIFNAME, &ifr) == 0)
+    strncpy(buf, ifr.ifr_name, IFNAMSIZ - 1);
+  return buf;
+}
+
 AddressTrackerLinux::AddressTrackerLinux()
     : get_interface_name_(GetInterfaceName),
       address_callback_(base::Bind(&base::DoNothing)),
       link_callback_(base::Bind(&base::DoNothing)),
       tunnel_callback_(base::Bind(&base::DoNothing)),
       netlink_fd_(-1),
-      is_offline_(true),
-      is_offline_initialized_(false),
-      is_offline_initialized_cv_(&is_offline_lock_),
+      connection_type_initialized_(false),
+      connection_type_initialized_cv_(&connection_type_lock_),
+      current_connection_type_(NetworkChangeNotifier::CONNECTION_NONE),
       tracking_(false) {
 }
 
@@ -117,9 +115,9 @@
       link_callback_(link_callback),
       tunnel_callback_(tunnel_callback),
       netlink_fd_(-1),
-      is_offline_(true),
-      is_offline_initialized_(false),
-      is_offline_initialized_cv_(&is_offline_lock_),
+      connection_type_initialized_(false),
+      connection_type_initialized_cv_(&connection_type_lock_),
+      current_connection_type_(NetworkChangeNotifier::CONNECTION_NONE),
       tracking_(true) {
   DCHECK(!address_callback.is_null());
   DCHECK(!link_callback.is_null());
@@ -203,9 +201,9 @@
   // Consume pending message to populate links_online_, but don't notify.
   ReadMessages(&address_changed, &link_changed, &tunnel_changed);
   {
-    AddressTrackerAutoLock lock(*this, is_offline_lock_);
-    is_offline_initialized_ = true;
-    is_offline_initialized_cv_.Signal();
+    AddressTrackerAutoLock lock(*this, connection_type_lock_);
+    connection_type_initialized_ = true;
+    connection_type_initialized_cv_.Signal();
   }
 
   if (tracking_) {
@@ -221,10 +219,10 @@
 
 void AddressTrackerLinux::AbortAndForceOnline() {
   CloseSocket();
-  AddressTrackerAutoLock lock(*this, is_offline_lock_);
-  is_offline_ = false;
-  is_offline_initialized_ = true;
-  is_offline_initialized_cv_.Signal();
+  AddressTrackerAutoLock lock(*this, connection_type_lock_);
+  current_connection_type_ = NetworkChangeNotifier::CONNECTION_UNKNOWN;
+  connection_type_initialized_ = true;
+  connection_type_initialized_cv_.Signal();
 }
 
 AddressTrackerLinux::AddressMap AddressTrackerLinux::GetAddressMap() const {
@@ -241,15 +239,12 @@
 AddressTrackerLinux::GetCurrentConnectionType() {
   // http://crbug.com/125097
   base::ThreadRestrictions::ScopedAllowWait allow_wait;
-  AddressTrackerAutoLock lock(*this, is_offline_lock_);
-  // Make sure the initial offline state is set before returning.
-  while (!is_offline_initialized_) {
-    is_offline_initialized_cv_.Wait();
+  AddressTrackerAutoLock lock(*this, connection_type_lock_);
+  // Make sure the initial connection type is set before returning.
+  while (!connection_type_initialized_) {
+    connection_type_initialized_cv_.Wait();
   }
-  // TODO(droger): Return something more detailed than CONNECTION_UNKNOWN.
-  // http://crbug.com/160537
-  return is_offline_ ? NetworkChangeNotifier::CONNECTION_NONE :
-                       NetworkChangeNotifier::CONNECTION_UNKNOWN;
+  return current_connection_type_;
 }
 
 void AddressTrackerLinux::ReadMessages(bool* address_changed,
@@ -279,15 +274,8 @@
     }
     HandleMessage(buffer, rv, address_changed, link_changed, tunnel_changed);
   }
-  if (*link_changed) {
-    bool is_offline;
-    {
-      AddressTrackerAutoLock lock(*this, online_links_lock_);
-      is_offline = online_links_.empty();
-    }
-    AddressTrackerAutoLock lock(*this, is_offline_lock_);
-    is_offline_ = is_offline;
-  }
+  if (*link_changed || *address_changed)
+    UpdateCurrentConnectionType();
 }
 
 void AddressTrackerLinux::HandleMessage(char* buffer,
@@ -351,14 +339,14 @@
           AddressTrackerAutoLock lock(*this, online_links_lock_);
           if (online_links_.insert(msg->ifi_index).second) {
             *link_changed = true;
-            if (IsTunnelInterface(msg))
+            if (IsTunnelInterface(msg->ifi_index))
               *tunnel_changed = true;
           }
         } else {
           AddressTrackerAutoLock lock(*this, online_links_lock_);
           if (online_links_.erase(msg->ifi_index)) {
             *link_changed = true;
-            if (IsTunnelInterface(msg))
+            if (IsTunnelInterface(msg->ifi_index))
               *tunnel_changed = true;
           }
         }
@@ -369,7 +357,7 @@
         AddressTrackerAutoLock lock(*this, online_links_lock_);
         if (online_links_.erase(msg->ifi_index)) {
           *link_changed = true;
-          if (IsTunnelInterface(msg))
+          if (IsTunnelInterface(msg->ifi_index))
             *tunnel_changed = true;
         }
       } break;
@@ -401,9 +389,41 @@
   netlink_fd_ = -1;
 }
 
-bool AddressTrackerLinux::IsTunnelInterface(const struct ifinfomsg* msg) const {
+bool AddressTrackerLinux::IsTunnelInterface(int interface_index) const {
   // Linux kernel drivers/net/tun.c uses "tun" name prefix.
-  return strncmp(get_interface_name_(msg->ifi_index), "tun", 3) == 0;
+  char buf[IFNAMSIZ] = {0};
+  return strncmp(get_interface_name_(interface_index, buf), "tun", 3) == 0;
+}
+
+void AddressTrackerLinux::UpdateCurrentConnectionType() {
+  AddressTrackerLinux::AddressMap address_map = GetAddressMap();
+  base::hash_set<int> online_links = GetOnlineLinks();
+
+  // Strip out tunnel interfaces from online_links
+  for (base::hash_set<int>::const_iterator it = online_links.begin();
+       it != online_links.end();) {
+    if (IsTunnelInterface(*it)) {
+      base::hash_set<int>::const_iterator tunnel_it = it;
+      ++it;
+      online_links.erase(*tunnel_it);
+    } else {
+      ++it;
+    }
+  }
+
+  NetworkInterfaceList networks;
+  NetworkChangeNotifier::ConnectionType type =
+      NetworkChangeNotifier::CONNECTION_NONE;
+  if (GetNetworkListImpl(&networks, 0, online_links, address_map,
+                         get_interface_name_)) {
+    type = NetworkChangeNotifier::ConnectionTypeFromInterfaceList(networks);
+  } else {
+    type = online_links.empty() ? NetworkChangeNotifier::CONNECTION_NONE
+                                : NetworkChangeNotifier::CONNECTION_UNKNOWN;
+  }
+
+  AddressTrackerAutoLock lock(*this, connection_type_lock_);
+  current_connection_type_ = type;
 }
 
 AddressTrackerLinux::AddressTrackerAutoLock::AddressTrackerAutoLock(
diff --git a/net/base/address_tracker_linux.h b/net/base/address_tracker_linux.h
index a960287..29cb8c0 100644
--- a/net/base/address_tracker_linux.h
+++ b/net/base/address_tracker_linux.h
@@ -65,6 +65,13 @@
   // Safe to call from any thread, but will block until Init() has completed.
   NetworkChangeNotifier::ConnectionType GetCurrentConnectionType();
 
+  // Returns the name for the interface with interface index |interface_index|.
+  // |buf| should be a pointer to an array of size IFNAMSIZ. The returned
+  // pointer will point to |buf|. This function acts like if_indextoname which
+  // cannot be used as net/if.h cannot be mixed with linux/if.h. We'll stick
+  // with exclusively talking to the kernel and not the C library.
+  static char* GetInterfaceName(int interface_index, char* buf);
+
  private:
   friend class AddressTrackerLinuxTest;
 
@@ -83,8 +90,9 @@
   };
 
   // A function that returns the name of an interface given the interface index
-  // in |interface_index|.
-  typedef const char* (*GetInterfaceNameFunction)(int interface_index);
+  // in |interface_index|. |ifname| should be a buffer of size IFNAMSIZ. The
+  // function should return a pointer to |ifname|.
+  typedef char* (*GetInterfaceNameFunction)(int interface_index, char* ifname);
 
   // Sets |*address_changed| to indicate whether |address_map_| changed and
   // sets |*link_changed| to indicate if |online_links_| changed and sets
@@ -114,8 +122,11 @@
   // Close |netlink_fd_|
   void CloseSocket();
 
-  // Does |msg| refer to a tunnel interface?
-  bool IsTunnelInterface(const struct ifinfomsg* msg) const;
+  // Does |interface_index| refer to a tunnel interface?
+  bool IsTunnelInterface(int interface_index) const;
+
+  // Updates current_connection_type_ based on the network list.
+  void UpdateCurrentConnectionType();
 
   // Gets the name of an interface given the interface index |interface_index|.
   // May return empty string if it fails but should not return NULL. This is
@@ -136,10 +147,10 @@
   mutable base::Lock online_links_lock_;
   base::hash_set<int> online_links_;
 
-  base::Lock is_offline_lock_;
-  bool is_offline_;
-  bool is_offline_initialized_;
-  base::ConditionVariable is_offline_initialized_cv_;
+  base::Lock connection_type_lock_;
+  bool connection_type_initialized_;
+  base::ConditionVariable connection_type_initialized_cv_;
+  NetworkChangeNotifier::ConnectionType current_connection_type_;
   bool tracking_;
 
   // Used to verify single-threaded access in non-tracking mode.
diff --git a/net/base/address_tracker_linux_unittest.cc b/net/base/address_tracker_linux_unittest.cc
index 6412207..1eba58f 100644
--- a/net/base/address_tracker_linux_unittest.cc
+++ b/net/base/address_tracker_linux_unittest.cc
@@ -22,10 +22,10 @@
 
 const int kTestInterfaceTun = 123;
 
-const char* TestGetInterfaceName(int interface_index) {
+char* TestGetInterfaceName(int interface_index, char* buf) {
   if (interface_index == kTestInterfaceTun)
-    return "tun0";
-  return "eth0";
+    return strncpy(buf, "tun0", IFNAMSIZ);
+  return strncpy(buf, "eth0", IFNAMSIZ);
 }
 
 }  // namespace
@@ -520,8 +520,10 @@
 TEST_F(AddressTrackerLinuxTest, GetInterfaceName) {
   InitializeAddressTracker(true);
 
-  for (int i = 0; i < 10; i++)
-    EXPECT_NE((const char*)NULL, original_get_interface_name_(i));
+  for (int i = 0; i < 10; i++) {
+    char buf[IFNAMSIZ] = {0};
+    EXPECT_NE((const char*)NULL, original_get_interface_name_(i, buf));
+  }
 }
 
 TEST_F(AddressTrackerLinuxTest, NonTrackingMode) {
diff --git a/net/base/dir_header.html b/net/base/dir_header.html
index 77b48b1..7cf9c80 100644
--- a/net/base/dir_header.html
+++ b/net/base/dir_header.html
@@ -1,6 +1,6 @@
 <!DOCTYPE html>
 
-<html i18n-values="dir:textdirection">
+<html i18n-values="dir:textdirection;lang:language">
 
 <head>
 <meta charset="utf-8">
diff --git a/net/base/filename_util_internal.cc b/net/base/filename_util_internal.cc
index be9139d..c77375b 100644
--- a/net/base/filename_util_internal.cc
+++ b/net/base/filename_util_internal.cc
@@ -202,8 +202,8 @@
 
 bool FilePathToString16(const base::FilePath& path, base::string16* converted) {
 #if defined(OS_WIN)
-  return base::WideToUTF16(
-      path.value().c_str(), path.value().size(), converted);
+  *converted = path.value();
+  return true;
 #elif defined(OS_POSIX)
   std::string component8 = path.AsUTF8Unsafe();
   return !component8.empty() &&
diff --git a/net/base/filename_util_unittest.cc b/net/base/filename_util_unittest.cc
index 0e7d504..9d91fb7 100644
--- a/net/base/filename_util_unittest.cc
+++ b/net/base/filename_util_unittest.cc
@@ -81,37 +81,37 @@
 }  // namespace
 
 static const base::FilePath::CharType* kSafePortableBasenames[] = {
-  FILE_PATH_LITERAL("a"),
-  FILE_PATH_LITERAL("a.txt"),
-  FILE_PATH_LITERAL("a b.txt"),
-  FILE_PATH_LITERAL("a-b.txt"),
-  FILE_PATH_LITERAL("My Computer"),
-  FILE_PATH_LITERAL(" Computer"),
+    FILE_PATH_LITERAL("a"),
+    FILE_PATH_LITERAL("a.txt"),
+    FILE_PATH_LITERAL("a b.txt"),
+    FILE_PATH_LITERAL("a-b.txt"),
+    FILE_PATH_LITERAL("My Computer"),
 };
 
 static const base::FilePath::CharType* kUnsafePortableBasenames[] = {
-  FILE_PATH_LITERAL(""),
-  FILE_PATH_LITERAL("."),
-  FILE_PATH_LITERAL(".."),
-  FILE_PATH_LITERAL("..."),
-  FILE_PATH_LITERAL("con"),
-  FILE_PATH_LITERAL("con.zip"),
-  FILE_PATH_LITERAL("NUL"),
-  FILE_PATH_LITERAL("NUL.zip"),
-  FILE_PATH_LITERAL(".a"),
-  FILE_PATH_LITERAL("a."),
-  FILE_PATH_LITERAL("a\"a"),
-  FILE_PATH_LITERAL("a<a"),
-  FILE_PATH_LITERAL("a>a"),
-  FILE_PATH_LITERAL("a?a"),
-  FILE_PATH_LITERAL("a/"),
-  FILE_PATH_LITERAL("a\\"),
-  FILE_PATH_LITERAL("a "),
-  FILE_PATH_LITERAL("a . ."),
-  FILE_PATH_LITERAL("My Computer.{a}"),
-  FILE_PATH_LITERAL("My Computer.{20D04FE0-3AEA-1069-A2D8-08002B30309D}"),
+    FILE_PATH_LITERAL(""),
+    FILE_PATH_LITERAL("."),
+    FILE_PATH_LITERAL(".."),
+    FILE_PATH_LITERAL("..."),
+    FILE_PATH_LITERAL("con"),
+    FILE_PATH_LITERAL("con.zip"),
+    FILE_PATH_LITERAL("NUL"),
+    FILE_PATH_LITERAL("NUL.zip"),
+    FILE_PATH_LITERAL(".a"),
+    FILE_PATH_LITERAL("a."),
+    FILE_PATH_LITERAL("a\"a"),
+    FILE_PATH_LITERAL("a<a"),
+    FILE_PATH_LITERAL("a>a"),
+    FILE_PATH_LITERAL("a?a"),
+    FILE_PATH_LITERAL("a/"),
+    FILE_PATH_LITERAL("a\\"),
+    FILE_PATH_LITERAL("a "),
+    FILE_PATH_LITERAL("a . ."),
+    FILE_PATH_LITERAL(" Computer"),
+    FILE_PATH_LITERAL("My Computer.{a}"),
+    FILE_PATH_LITERAL("My Computer.{20D04FE0-3AEA-1069-A2D8-08002B30309D}"),
 #if !defined(OS_WIN)
-  FILE_PATH_LITERAL("a\\a"),
+    FILE_PATH_LITERAL("a\\a"),
 #endif
 };
 
@@ -952,720 +952,614 @@
   // a correct extension should be added if necessary.
   const GenerateFilenameCase generation_tests[] = {
     // Dotfiles. Ensures preceeding period(s) stripped.
-    {
-      __LINE__,
-      "http://www.google.com/.test.html",
-      "",
-      "",
-      "",
-      "",
-      L"",
-      L"test.html"
-    },
-    {
-      __LINE__,
-      "http://www.google.com/.test",
-      "",
-      "",
-      "",
-      "",
-      L"",
-      L"test"
-    },
-    {
-      __LINE__,
-      "http://www.google.com/..test",
-      "",
-      "",
-      "",
-      "",
-      L"",
-      L"test"
-    },
-    { // Disposition has relative paths, remove directory separators
-      __LINE__,
-      "http://www.evil.com/my_download.txt",
-      "filename=../../../../././../a_file_name.txt",
-      "",
-      "",
-      "text/plain",
-      L"download",
-      L"-..-..-..-.-.-..-a_file_name.txt"
-    },
-    { // Disposition has parent directories, remove directory separators
-      __LINE__,
-      "http://www.evil.com/my_download.txt",
-      "filename=dir1/dir2/a_file_name.txt",
-      "",
-      "",
-      "text/plain",
-      L"download",
-      L"dir1-dir2-a_file_name.txt"
-    },
-    { // Disposition has relative paths, remove directory separators
-      __LINE__,
-      "http://www.evil.com/my_download.txt",
-      "filename=..\\..\\..\\..\\.\\.\\..\\a_file_name.txt",
-      "",
-      "",
-      "text/plain",
-      L"download",
-      L"-..-..-..-.-.-..-a_file_name.txt"
-    },
-    { // Disposition has parent directories, remove directory separators
-      __LINE__,
-      "http://www.evil.com/my_download.txt",
-      "filename=dir1\\dir2\\a_file_name.txt",
-      "",
-      "",
-      "text/plain",
-      L"download",
-      L"dir1-dir2-a_file_name.txt"
-    },
-    { // No useful information in disposition or URL, use default
-      __LINE__,
-      "http://www.truncated.com/path/",
-      "",
-      "",
-      "",
-      "text/plain",
-      L"download",
-      L"download" TXT_EXT
-    },
-    { // Filename looks like HTML?
-      __LINE__,
-      "http://www.evil.com/get/malware/here",
-      "filename=\"<blink>Hello kitty</blink>\"",
-      "",
-      "",
-      "text/plain",
-      L"default",
-      L"-blink-Hello kitty--blink-"
-    },
-    { // A normal avi should get .avi and not .avi.avi
-      __LINE__,
-      "https://blah.google.com/misc/2.avi",
-      "",
-      "",
-      "",
-      "video/x-msvideo",
-      L"download",
-      L"2.avi"
-    },
-    { // Extension generation
-      __LINE__,
-      "http://www.example.com/my-cat",
-      "filename=my-cat",
-      "",
-      "",
-      "image/jpeg",
-      L"download",
-      L"my-cat"
-    },
-    {
-      __LINE__,
-      "http://www.example.com/my-cat",
-      "filename=my-cat",
-      "",
-      "",
-      "text/plain",
-      L"download",
-      L"my-cat"
-    },
-    {
-      __LINE__,
-      "http://www.example.com/my-cat",
-      "filename=my-cat",
-      "",
-      "",
-      "text/html",
-      L"download",
-      L"my-cat"
-    },
-    { // Unknown MIME type
-      __LINE__,
-      "http://www.example.com/my-cat",
-      "filename=my-cat",
-      "",
-      "",
-      "dance/party",
-      L"download",
-      L"my-cat"
-    },
-    {
-      __LINE__,
-      "http://www.example.com/my-cat.jpg",
-      "filename=my-cat.jpg",
-      "",
-      "",
-      "text/plain",
-      L"download",
-      L"my-cat.jpg"
-    },
+    {__LINE__,
+     "http://www.google.com/.test.html",
+     "",
+     "",
+     "",
+     "",
+     L"",
+     L"test.html"},
+    {__LINE__, "http://www.google.com/.test", "", "", "", "", L"", L"test"},
+    {__LINE__, "http://www.google.com/..test", "", "", "", "", L"", L"test"},
+    {// Disposition has relative paths, remove directory separators
+     __LINE__,
+     "http://www.evil.com/my_download.txt",
+     "filename=../../../../././../a_file_name.txt",
+     "",
+     "",
+     "text/plain",
+     L"download",
+     L"-..-..-..-.-.-..-a_file_name.txt"},
+    {// Disposition has parent directories, remove directory separators
+     __LINE__,
+     "http://www.evil.com/my_download.txt",
+     "filename=dir1/dir2/a_file_name.txt",
+     "",
+     "",
+     "text/plain",
+     L"download",
+     L"dir1-dir2-a_file_name.txt"},
+    {// Disposition has relative paths, remove directory separators
+     __LINE__,
+     "http://www.evil.com/my_download.txt",
+     "filename=..\\..\\..\\..\\.\\.\\..\\a_file_name.txt",
+     "",
+     "",
+     "text/plain",
+     L"download",
+     L"-..-..-..-.-.-..-a_file_name.txt"},
+    {// Disposition has parent directories, remove directory separators
+     __LINE__,
+     "http://www.evil.com/my_download.txt",
+     "filename=dir1\\dir2\\a_file_name.txt",
+     "",
+     "",
+     "text/plain",
+     L"download",
+     L"dir1-dir2-a_file_name.txt"},
+    {// No useful information in disposition or URL, use default
+     __LINE__,
+     "http://www.truncated.com/path/",
+     "",
+     "",
+     "",
+     "text/plain",
+     L"download",
+     L"download" TXT_EXT},
+    {// Filename looks like HTML?
+     __LINE__,
+     "http://www.evil.com/get/malware/here",
+     "filename=\"<blink>Hello kitty</blink>\"",
+     "",
+     "",
+     "text/plain",
+     L"default",
+     L"-blink-Hello kitty--blink-"},
+    {// A normal avi should get .avi and not .avi.avi
+     __LINE__,
+     "https://blah.google.com/misc/2.avi",
+     "",
+     "",
+     "",
+     "video/x-msvideo",
+     L"download",
+     L"2.avi"},
+    {// Extension generation
+     __LINE__,
+     "http://www.example.com/my-cat",
+     "filename=my-cat",
+     "",
+     "",
+     "image/jpeg",
+     L"download",
+     L"my-cat"},
+    {__LINE__,
+     "http://www.example.com/my-cat",
+     "filename=my-cat",
+     "",
+     "",
+     "text/plain",
+     L"download",
+     L"my-cat"},
+    {__LINE__,
+     "http://www.example.com/my-cat",
+     "filename=my-cat",
+     "",
+     "",
+     "text/html",
+     L"download",
+     L"my-cat"},
+    {// Unknown MIME type
+     __LINE__,
+     "http://www.example.com/my-cat",
+     "filename=my-cat",
+     "",
+     "",
+     "dance/party",
+     L"download",
+     L"my-cat"},
+    {__LINE__,
+     "http://www.example.com/my-cat.jpg",
+     "filename=my-cat.jpg",
+     "",
+     "",
+     "text/plain",
+     L"download",
+     L"my-cat.jpg"},
     // Windows specific tests
 #if defined(OS_WIN)
-    {
-      __LINE__,
-      "http://www.goodguy.com/evil.exe",
-      "filename=evil.exe",
-      "",
-      "",
-      "image/jpeg",
-      L"download",
-      L"evil.exe"
-    },
-    {
-      __LINE__,
-      "http://www.goodguy.com/ok.exe",
-      "filename=ok.exe",
-      "",
-      "",
-      "binary/octet-stream",
-      L"download",
-      L"ok.exe"
-    },
-    {
-      __LINE__,
-      "http://www.goodguy.com/evil.dll",
-      "filename=evil.dll",
-      "",
-      "",
-      "dance/party",
-      L"download",
-      L"evil.dll"
-    },
-    {
-      __LINE__,
-      "http://www.goodguy.com/evil.exe",
-      "filename=evil",
-      "",
-      "",
-      "application/rss+xml",
-      L"download",
-      L"evil"
-    },
+    {__LINE__,
+     "http://www.goodguy.com/evil.exe",
+     "filename=evil.exe",
+     "",
+     "",
+     "image/jpeg",
+     L"download",
+     L"evil.exe"},
+    {__LINE__,
+     "http://www.goodguy.com/ok.exe",
+     "filename=ok.exe",
+     "",
+     "",
+     "binary/octet-stream",
+     L"download",
+     L"ok.exe"},
+    {__LINE__,
+     "http://www.goodguy.com/evil.dll",
+     "filename=evil.dll",
+     "",
+     "",
+     "dance/party",
+     L"download",
+     L"evil.dll"},
+    {__LINE__,
+     "http://www.goodguy.com/evil.exe",
+     "filename=evil",
+     "",
+     "",
+     "application/rss+xml",
+     L"download",
+     L"evil"},
     // Test truncation of trailing dots and spaces
-    {
-      __LINE__,
-      "http://www.goodguy.com/evil.exe ",
-      "filename=evil.exe ",
-      "",
-      "",
-      "binary/octet-stream",
-      L"download",
-      L"evil.exe"
-    },
-    {
-      __LINE__,
-      "http://www.goodguy.com/evil.exe.",
-      "filename=evil.exe.",
-      "",
-      "",
-      "binary/octet-stream",
-      L"download",
-      L"evil.exe-"
-    },
-    {
-      __LINE__,
-      "http://www.goodguy.com/evil.exe.  .  .",
-      "filename=evil.exe.  .  .",
-      "",
-      "",
-      "binary/octet-stream",
-      L"download",
-      L"evil.exe-------"
-    },
-    {
-      __LINE__,
-      "http://www.goodguy.com/evil.",
-      "filename=evil.",
-      "",
-      "",
-      "binary/octet-stream",
-      L"download",
-      L"evil-"
-    },
-    {
-      __LINE__,
-      "http://www.goodguy.com/. . . . .",
-      "filename=. . . . .",
-      "",
-      "",
-      "binary/octet-stream",
-      L"download",
-      L"download"
-    },
-    {
-      __LINE__,
-      "http://www.badguy.com/attachment?name=meh.exe%C2%A0",
-      "attachment; filename=\"meh.exe\xC2\xA0\"",
-      "",
-      "",
-      "binary/octet-stream",
-      L"",
-      L"meh.exe-"
-    },
+    {__LINE__,
+     "http://www.goodguy.com/evil.exe ",
+     "filename=evil.exe ",
+     "",
+     "",
+     "binary/octet-stream",
+     L"download",
+     L"evil.exe"},
+    {__LINE__,
+     "http://www.goodguy.com/evil.exe.",
+     "filename=evil.exe.",
+     "",
+     "",
+     "binary/octet-stream",
+     L"download",
+     L"evil.exe-"},
+    {__LINE__,
+     "http://www.goodguy.com/evil.exe.  .  .",
+     "filename=evil.exe.  .  .",
+     "",
+     "",
+     "binary/octet-stream",
+     L"download",
+     L"evil.exe-------"},
+    {__LINE__,
+     "http://www.goodguy.com/evil.",
+     "filename=evil.",
+     "",
+     "",
+     "binary/octet-stream",
+     L"download",
+     L"evil-"},
+    {__LINE__,
+     "http://www.goodguy.com/. . . . .",
+     "filename=. . . . .",
+     "",
+     "",
+     "binary/octet-stream",
+     L"download",
+     L"download"},
+    {__LINE__,
+     "http://www.badguy.com/attachment?name=meh.exe%C2%A0",
+     "attachment; filename=\"meh.exe\xC2\xA0\"",
+     "",
+     "",
+     "binary/octet-stream",
+     L"",
+     L"meh.exe-"},
 #endif  // OS_WIN
-    {
-      __LINE__,
-      "http://www.goodguy.com/utils.js",
-      "filename=utils.js",
-      "",
-      "",
-      "application/x-javascript",
-      L"download",
-      L"utils.js"
-    },
-    {
-      __LINE__,
-      "http://www.goodguy.com/contacts.js",
-      "filename=contacts.js",
-      "",
-      "",
-      "application/json",
-      L"download",
-      L"contacts.js"
-    },
-    {
-      __LINE__,
-      "http://www.goodguy.com/utils.js",
-      "filename=utils.js",
-      "",
-      "",
-      "text/javascript",
-      L"download",
-      L"utils.js"
-    },
-    {
-      __LINE__,
-      "http://www.goodguy.com/utils.js",
-      "filename=utils.js",
-      "",
-      "",
-      "text/javascript;version=2",
-      L"download",
-      L"utils.js"
-    },
-    {
-      __LINE__,
-      "http://www.goodguy.com/utils.js",
-      "filename=utils.js",
-      "",
-      "",
-      "application/ecmascript",
-      L"download",
-      L"utils.js"
-    },
-    {
-      __LINE__,
-      "http://www.goodguy.com/utils.js",
-      "filename=utils.js",
-      "",
-      "",
-      "application/ecmascript;version=4",
-      L"download",
-      L"utils.js"
-    },
-    {
-      __LINE__,
-      "http://www.goodguy.com/program.exe",
-      "filename=program.exe",
-      "",
-      "",
-      "application/foo-bar",
-      L"download",
-      L"program.exe"
-    },
-    {
-      __LINE__,
-      "http://www.evil.com/../foo.txt",
-      "filename=../foo.txt",
-      "",
-      "",
-      "text/plain",
-      L"download",
-      L"-foo.txt"
-    },
-    {
-      __LINE__,
-      "http://www.evil.com/..\\foo.txt",
-      "filename=..\\foo.txt",
-      "",
-      "",
-      "text/plain",
-      L"download",
-      L"-foo.txt"
-    },
-    {
-      __LINE__,
-      "http://www.evil.com/.hidden",
-      "filename=.hidden",
-      "",
-      "",
-      "text/plain",
-      L"download",
-      L"hidden"
-    },
-    {
-      __LINE__,
-      "http://www.evil.com/trailing.",
-      "filename=trailing.",
-      "",
-      "",
-      "dance/party",
-      L"download",
+    {__LINE__,
+     "http://www.goodguy.com/utils.js",
+     "filename=utils.js",
+     "",
+     "",
+     "application/x-javascript",
+     L"download",
+     L"utils.js"},
+    {__LINE__,
+     "http://www.goodguy.com/contacts.js",
+     "filename=contacts.js",
+     "",
+     "",
+     "application/json",
+     L"download",
+     L"contacts.js"},
+    {__LINE__,
+     "http://www.goodguy.com/utils.js",
+     "filename=utils.js",
+     "",
+     "",
+     "text/javascript",
+     L"download",
+     L"utils.js"},
+    {__LINE__,
+     "http://www.goodguy.com/utils.js",
+     "filename=utils.js",
+     "",
+     "",
+     "text/javascript;version=2",
+     L"download",
+     L"utils.js"},
+    {__LINE__,
+     "http://www.goodguy.com/utils.js",
+     "filename=utils.js",
+     "",
+     "",
+     "application/ecmascript",
+     L"download",
+     L"utils.js"},
+    {__LINE__,
+     "http://www.goodguy.com/utils.js",
+     "filename=utils.js",
+     "",
+     "",
+     "application/ecmascript;version=4",
+     L"download",
+     L"utils.js"},
+    {__LINE__,
+     "http://www.goodguy.com/program.exe",
+     "filename=program.exe",
+     "",
+     "",
+     "application/foo-bar",
+     L"download",
+     L"program.exe"},
+    {__LINE__,
+     "http://www.evil.com/../foo.txt",
+     "filename=../foo.txt",
+     "",
+     "",
+     "text/plain",
+     L"download",
+     L"-foo.txt"},
+    {__LINE__,
+     "http://www.evil.com/..\\foo.txt",
+     "filename=..\\foo.txt",
+     "",
+     "",
+     "text/plain",
+     L"download",
+     L"-foo.txt"},
+    {__LINE__,
+     "http://www.evil.com/.hidden",
+     "filename=.hidden",
+     "",
+     "",
+     "text/plain",
+     L"download",
+     L"hidden"},
+    {__LINE__,
+     "http://www.evil.com/trailing.",
+     "filename=trailing.",
+     "",
+     "",
+     "dance/party",
+     L"download",
 #if defined(OS_WIN)
-      L"trailing-"
+     L"trailing-"
 #else
-      L"trailing"
+     L"trailing"
 #endif
     },
-    {
-      __LINE__,
-      "http://www.evil.com/trailing.",
-      "filename=trailing.",
-      "",
-      "",
-      "text/plain",
-      L"download",
+    {__LINE__,
+     "http://www.evil.com/trailing.",
+     "filename=trailing.",
+     "",
+     "",
+     "text/plain",
+     L"download",
 #if defined(OS_WIN)
-      L"trailing-"
+     L"trailing-"
 #else
-      L"trailing"
+     L"trailing"
 #endif
     },
-    {
-      __LINE__,
-      "http://www.evil.com/.",
-      "filename=.",
-      "",
-      "",
-      "dance/party",
-      L"download",
-      L"download"
-    },
-    {
-      __LINE__,
-      "http://www.evil.com/..",
-      "filename=..",
-      "",
-      "",
-      "dance/party",
-      L"download",
-      L"download"
-    },
-    {
-      __LINE__,
-      "http://www.evil.com/...",
-      "filename=...",
-      "",
-      "",
-      "dance/party",
-      L"download",
-      L"download"
-    },
-    { // Note that this one doesn't have "filename=" on it.
-      __LINE__,
-      "http://www.evil.com/",
-      "a_file_name.txt",
-      "",
-      "",
-      "image/jpeg",
-      L"download",
-      L"download" JPEG_EXT
-    },
-    {
-      __LINE__,
-      "http://www.evil.com/",
-      "filename=",
-      "",
-      "",
-      "image/jpeg",
-      L"download",
-      L"download" JPEG_EXT
-    },
-    {
-      __LINE__,
-      "http://www.example.com/simple",
-      "filename=simple",
-      "",
-      "",
-      "application/octet-stream",
-      L"download",
-      L"simple"
-    },
+    {__LINE__,
+     "http://www.evil.com/.",
+     "filename=.",
+     "",
+     "",
+     "dance/party",
+     L"download",
+     L"download"},
+    {__LINE__,
+     "http://www.evil.com/..",
+     "filename=..",
+     "",
+     "",
+     "dance/party",
+     L"download",
+     L"download"},
+    {__LINE__,
+     "http://www.evil.com/...",
+     "filename=...",
+     "",
+     "",
+     "dance/party",
+     L"download",
+     L"download"},
+    {// Note that this one doesn't have "filename=" on it.
+     __LINE__,
+     "http://www.evil.com/",
+     "a_file_name.txt",
+     "",
+     "",
+     "image/jpeg",
+     L"download",
+     L"download" JPEG_EXT},
+    {__LINE__,
+     "http://www.evil.com/",
+     "filename=",
+     "",
+     "",
+     "image/jpeg",
+     L"download",
+     L"download" JPEG_EXT},
+    {__LINE__,
+     "http://www.example.com/simple",
+     "filename=simple",
+     "",
+     "",
+     "application/octet-stream",
+     L"download",
+     L"simple"},
     // Reserved words on Windows
-    {
-      __LINE__,
-      "http://www.goodguy.com/COM1",
-      "filename=COM1",
-      "",
-      "",
-      "application/foo-bar",
-      L"download",
+    {__LINE__,
+     "http://www.goodguy.com/COM1",
+     "filename=COM1",
+     "",
+     "",
+     "application/foo-bar",
+     L"download",
 #if defined(OS_WIN)
-      L"_COM1"
+     L"_COM1"
 #else
-      L"COM1"
+     L"COM1"
 #endif
     },
-    {
-      __LINE__,
-      "http://www.goodguy.com/COM4.txt",
-      "filename=COM4.txt",
-      "",
-      "",
-      "text/plain",
-      L"download",
+    {__LINE__,
+     "http://www.goodguy.com/COM4.txt",
+     "filename=COM4.txt",
+     "",
+     "",
+     "text/plain",
+     L"download",
 #if defined(OS_WIN)
-      L"_COM4.txt"
+     L"_COM4.txt"
 #else
-      L"COM4.txt"
+     L"COM4.txt"
 #endif
     },
-    {
-      __LINE__,
-      "http://www.goodguy.com/lpt1.TXT",
-      "filename=lpt1.TXT",
-      "",
-      "",
-      "text/plain",
-      L"download",
+    {__LINE__,
+     "http://www.goodguy.com/lpt1.TXT",
+     "filename=lpt1.TXT",
+     "",
+     "",
+     "text/plain",
+     L"download",
 #if defined(OS_WIN)
-      L"_lpt1.TXT"
+     L"_lpt1.TXT"
 #else
-      L"lpt1.TXT"
+     L"lpt1.TXT"
 #endif
     },
-    {
-      __LINE__,
-      "http://www.goodguy.com/clock$.txt",
-      "filename=clock$.txt",
-      "",
-      "",
-      "text/plain",
-      L"download",
+    {__LINE__,
+     "http://www.goodguy.com/clock$.txt",
+     "filename=clock$.txt",
+     "",
+     "",
+     "text/plain",
+     L"download",
 #if defined(OS_WIN)
-      L"_clock$.txt"
+     L"_clock$.txt"
 #else
-      L"clock$.txt"
+     L"clock$.txt"
 #endif
     },
-    { // Validation should also apply to sugested name
-      __LINE__,
-      "http://www.goodguy.com/blah$.txt",
-      "filename=clock$.txt",
-      "",
-      "clock$.txt",
-      "text/plain",
-      L"download",
+    {// Validation should also apply to sugested name
+     __LINE__,
+     "http://www.goodguy.com/blah$.txt",
+     "filename=clock$.txt",
+     "",
+     "clock$.txt",
+     "text/plain",
+     L"download",
 #if defined(OS_WIN)
-      L"_clock$.txt"
+     L"_clock$.txt"
 #else
-      L"clock$.txt"
+     L"clock$.txt"
 #endif
     },
-    {
-      __LINE__,
-      "http://www.goodguy.com/mycom1.foo",
-      "filename=mycom1.foo",
-      "",
-      "",
-      "text/plain",
-      L"download",
-      L"mycom1.foo"
-    },
-    {
-      __LINE__,
-      "http://www.badguy.com/Setup.exe.local",
-      "filename=Setup.exe.local",
-      "",
-      "",
-      "application/foo-bar",
-      L"download",
+    {__LINE__,
+     "http://www.goodguy.com/mycom1.foo",
+     "filename=mycom1.foo",
+     "",
+     "",
+     "text/plain",
+     L"download",
+     L"mycom1.foo"},
+    {__LINE__,
+     "http://www.badguy.com/Setup.exe.local",
+     "filename=Setup.exe.local",
+     "",
+     "",
+     "application/foo-bar",
+     L"download",
 #if defined(OS_WIN)
-      L"Setup.exe.download"
+     L"Setup.exe.download"
 #else
-      L"Setup.exe.local"
+     L"Setup.exe.local"
 #endif
     },
-    {
-      __LINE__,
-      "http://www.badguy.com/Setup.exe.local",
-      "filename=Setup.exe.local.local",
-      "",
-      "",
-      "application/foo-bar",
-      L"download",
+    {__LINE__,
+     "http://www.badguy.com/Setup.exe.local",
+     "filename=Setup.exe.local.local",
+     "",
+     "",
+     "application/foo-bar",
+     L"download",
 #if defined(OS_WIN)
-      L"Setup.exe.local.download"
+     L"Setup.exe.local.download"
 #else
-      L"Setup.exe.local.local"
+     L"Setup.exe.local.local"
 #endif
     },
-    {
-      __LINE__,
-      "http://www.badguy.com/Setup.exe.lnk",
-      "filename=Setup.exe.lnk",
-      "",
-      "",
-      "application/foo-bar",
-      L"download",
+    {__LINE__,
+     "http://www.badguy.com/Setup.exe.lnk",
+     "filename=Setup.exe.lnk",
+     "",
+     "",
+     "application/foo-bar",
+     L"download",
 #if defined(OS_WIN)
-      L"Setup.exe.download"
+     L"Setup.exe.download"
 #else
-      L"Setup.exe.lnk"
+     L"Setup.exe.lnk"
 #endif
     },
-    {
-      __LINE__,
-      "http://www.badguy.com/Desktop.ini",
-      "filename=Desktop.ini",
-      "",
-      "",
-      "application/foo-bar",
-      L"download",
+    {__LINE__,
+     "http://www.badguy.com/Desktop.ini",
+     "filename=Desktop.ini",
+     "",
+     "",
+     "application/foo-bar",
+     L"download",
 #if defined(OS_WIN)
-      L"_Desktop.ini"
+     L"_Desktop.ini"
 #else
-      L"Desktop.ini"
+     L"Desktop.ini"
 #endif
     },
-    {
-      __LINE__,
-      "http://www.badguy.com/Thumbs.db",
-      "filename=Thumbs.db",
-      "",
-      "",
-      "application/foo-bar",
-      L"download",
+    {__LINE__,
+     "http://www.badguy.com/Thumbs.db",
+     "filename=Thumbs.db",
+     "",
+     "",
+     "application/foo-bar",
+     L"download",
 #if defined(OS_WIN)
-      L"_Thumbs.db"
+     L"_Thumbs.db"
 #else
-      L"Thumbs.db"
+     L"Thumbs.db"
 #endif
     },
-    {
-      __LINE__,
-      "http://www.hotmail.com",
-      "filename=source.jpg",
-      "",
-      "",
-      "application/x-javascript",
-      L"download",
-      L"source.jpg"
-    },
-    { // http://crbug.com/5772.
-      __LINE__,
-      "http://www.example.com/foo.tar.gz",
-      "",
-      "",
-      "",
-      "application/x-tar",
-      L"download",
-      L"foo.tar.gz"
-    },
-    { // http://crbug.com/52250.
-      __LINE__,
-      "http://www.example.com/foo.tgz",
-      "",
-      "",
-      "",
-      "application/x-tar",
-      L"download",
-      L"foo.tgz"
-    },
-    { // http://crbug.com/7337.
-      __LINE__,
-      "http://maged.lordaeron.org/blank.reg",
-      "",
-      "",
-      "",
-      "text/x-registry",
-      L"download",
-      L"blank.reg"
-    },
-    {
-      __LINE__,
-      "http://www.example.com/bar.tar",
-      "",
-      "",
-      "",
-      "application/x-tar",
-      L"download",
-      L"bar.tar"
-    },
-    {
-      __LINE__,
-      "http://www.example.com/bar.bogus",
-      "",
-      "",
-      "",
-      "application/x-tar",
-      L"download",
-      L"bar.bogus"
-    },
-    { // http://crbug.com/20337
-      __LINE__,
-      "http://www.example.com/.download.txt",
-      "filename=.download.txt",
-      "",
-      "",
-      "text/plain",
-      L"-download",
-      L"download.txt"
-    },
-    { // http://crbug.com/56855.
-      __LINE__,
-      "http://www.example.com/bar.sh",
-      "",
-      "",
-      "",
-      "application/x-sh",
-      L"download",
-      L"bar.sh"
-    },
-    { // http://crbug.com/61571
-      __LINE__,
-      "http://www.example.com/npdf.php?fn=foobar.pdf",
-      "",
-      "",
-      "",
-      "text/plain",
-      L"download",
-      L"npdf" TXT_EXT
-    },
-    { // Shouldn't overwrite C-D specified extension.
-      __LINE__,
-      "http://www.example.com/npdf.php?fn=foobar.pdf",
-      "filename=foobar.jpg",
-      "",
-      "",
-      "text/plain",
-      L"download",
-      L"foobar.jpg"
-    },
-    { // http://crbug.com/87719
-      __LINE__,
-      "http://www.example.com/image.aspx?id=blargh",
-      "",
-      "",
-      "",
-      "image/jpeg",
-      L"download",
-      L"image" JPEG_EXT
-    },
+    {__LINE__,
+     "http://www.hotmail.com",
+     "filename=source.jpg",
+     "",
+     "",
+     "application/x-javascript",
+     L"download",
+     L"source.jpg"},
+    {// http://crbug.com/5772.
+     __LINE__,
+     "http://www.example.com/foo.tar.gz",
+     "",
+     "",
+     "",
+     "application/x-tar",
+     L"download",
+     L"foo.tar.gz"},
+    {// http://crbug.com/52250.
+     __LINE__,
+     "http://www.example.com/foo.tgz",
+     "",
+     "",
+     "",
+     "application/x-tar",
+     L"download",
+     L"foo.tgz"},
+    {// http://crbug.com/7337.
+     __LINE__,
+     "http://maged.lordaeron.org/blank.reg",
+     "",
+     "",
+     "",
+     "text/x-registry",
+     L"download",
+     L"blank.reg"},
+    {__LINE__,
+     "http://www.example.com/bar.tar",
+     "",
+     "",
+     "",
+     "application/x-tar",
+     L"download",
+     L"bar.tar"},
+    {__LINE__,
+     "http://www.example.com/bar.bogus",
+     "",
+     "",
+     "",
+     "application/x-tar",
+     L"download",
+     L"bar.bogus"},
+    {// http://crbug.com/20337
+     __LINE__,
+     "http://www.example.com/.download.txt",
+     "filename=.download.txt",
+     "",
+     "",
+     "text/plain",
+     L"-download",
+     L"download.txt"},
+    {// http://crbug.com/56855.
+     __LINE__,
+     "http://www.example.com/bar.sh",
+     "",
+     "",
+     "",
+     "application/x-sh",
+     L"download",
+     L"bar.sh"},
+    {// http://crbug.com/61571
+     __LINE__,
+     "http://www.example.com/npdf.php?fn=foobar.pdf",
+     "",
+     "",
+     "",
+     "text/plain",
+     L"download",
+     L"npdf" TXT_EXT},
+    {// Shouldn't overwrite C-D specified extension.
+     __LINE__,
+     "http://www.example.com/npdf.php?fn=foobar.pdf",
+     "filename=foobar.jpg",
+     "",
+     "",
+     "text/plain",
+     L"download",
+     L"foobar.jpg"},
+    {// http://crbug.com/87719
+     __LINE__,
+     "http://www.example.com/image.aspx?id=blargh",
+     "",
+     "",
+     "",
+     "image/jpeg",
+     L"download",
+     L"image" JPEG_EXT},
+    {__LINE__,
+     "http://www.example.com/image.aspx?id=blargh",
+     "",
+     "",
+     " .foo",
+     "",
+     L"download",
+     L"-.foo"},
 #if defined(OS_CHROMEOS)
-    { // http://crosbug.com/26028
-      __LINE__,
-      "http://www.example.com/fooa%cc%88.txt",
-      "",
-      "",
-      "",
-      "image/jpeg",
-      L"foo\xe4",
-      L"foo\xe4.txt"
-    },
+    {// http://crosbug.com/26028
+     __LINE__,
+     "http://www.example.com/fooa%cc%88.txt",
+     "",
+     "",
+     "",
+     "image/jpeg",
+     L"foo\xe4",
+     L"foo\xe4.txt"},
 #endif
   };
 
diff --git a/net/base/load_flags_list.h b/net/base/load_flags_list.h
index 7508287..c090406 100644
--- a/net/base/load_flags_list.h
+++ b/net/base/load_flags_list.h
@@ -34,86 +34,70 @@
 // impact the HTTP request headers.
 LOAD_FLAG(DISABLE_CACHE, 1 << 5)
 
-// If present, ignores certificate mismatches with the domain name.
-// (The default behavior is to trigger an OnSSLCertificateError callback.)
-LOAD_FLAG(IGNORE_CERT_COMMON_NAME_INVALID, 1 << 6)
-
-// If present, ignores certificate expiration dates
-// (The default behavior is to trigger an OnSSLCertificateError callback).
-LOAD_FLAG(IGNORE_CERT_DATE_INVALID, 1 << 7)
-
-// If present, trusts all certificate authorities
-// (The default behavior is to trigger an OnSSLCertificateError callback).
-LOAD_FLAG(IGNORE_CERT_AUTHORITY_INVALID, 1 << 8)
-
 // If present, causes certificate revocation checks to be skipped on secure
 // connections.
-LOAD_FLAG(DISABLE_CERT_REVOCATION_CHECKING, 1 << 9)
-
-// If present, ignores wrong key usage of the certificate
-// (The default behavior is to trigger an OnSSLCertificateError callback).
-LOAD_FLAG(IGNORE_CERT_WRONG_USAGE, 1 << 10)
+LOAD_FLAG(DISABLE_CERT_REVOCATION_CHECKING, 1 << 6)
 
 // This load will not make any changes to cookies, including storing new
 // cookies or updating existing ones.
-LOAD_FLAG(DO_NOT_SAVE_COOKIES, 1 << 11)
+LOAD_FLAG(DO_NOT_SAVE_COOKIES, 1 << 7)
 
 // Do not resolve proxies. This override is used when downloading PAC files
 // to avoid having a circular dependency.
-LOAD_FLAG(BYPASS_PROXY, 1 << 12)
+LOAD_FLAG(BYPASS_PROXY, 1 << 8)
 
 // Indicate this request is for a download, as opposed to viewing.
-LOAD_FLAG(IS_DOWNLOAD, 1 << 13)
+LOAD_FLAG(IS_DOWNLOAD, 1 << 9)
 
 // Requires EV certificate verification.
-LOAD_FLAG(VERIFY_EV_CERT, 1 << 14)
+LOAD_FLAG(VERIFY_EV_CERT, 1 << 10)
 
 // This load will not send any cookies.
-LOAD_FLAG(DO_NOT_SEND_COOKIES, 1 << 15)
+LOAD_FLAG(DO_NOT_SEND_COOKIES, 1 << 11)
 
 // This load will not send authentication data (user name/password)
 // to the server (as opposed to the proxy).
-LOAD_FLAG(DO_NOT_SEND_AUTH_DATA, 1 << 16)
+LOAD_FLAG(DO_NOT_SEND_AUTH_DATA, 1 << 12)
 
 // This should only be used for testing (set by HttpNetworkTransaction).
-LOAD_FLAG(IGNORE_ALL_CERT_ERRORS, 1 << 17)
+LOAD_FLAG(IGNORE_ALL_CERT_ERRORS, 1 << 13)
 
 // Indicate that this is a top level frame, so that we don't assume it is a
 // subresource and speculatively pre-connect or pre-resolve when a referring
 // page is loaded.
-LOAD_FLAG(MAIN_FRAME, 1 << 18)
+LOAD_FLAG(MAIN_FRAME, 1 << 14)
 
 // Indicate that this is a sub frame, and hence it might have subresources that
 // should be speculatively resolved, or even speculatively preconnected.
-LOAD_FLAG(SUB_FRAME, 1 << 19)
+LOAD_FLAG(SUB_FRAME, 1 << 15)
 
 // If present, intercept actual request/response headers from network stack
 // and report them to renderer. This includes cookies, so the flag is only
 // respected if renderer has CanReadRawCookies capability in the security
 // policy.
-LOAD_FLAG(REPORT_RAW_HEADERS, 1 << 20)
+LOAD_FLAG(REPORT_RAW_HEADERS, 1 << 16)
 
 // Indicates that this load was motivated by the rel=prefetch feature,
 // and is (in theory) not intended for the current frame.
-LOAD_FLAG(PREFETCH, 1 << 21)
+LOAD_FLAG(PREFETCH, 1 << 17)
 
 // Indicates that this is a load that ignores limits and should complete
 // immediately.
-LOAD_FLAG(IGNORE_LIMITS, 1 << 22)
+LOAD_FLAG(IGNORE_LIMITS, 1 << 18)
 
 // Indicates that the operation is somewhat likely to be due to an
 // explicit user action. This can be used as a hint to treat the
 // request with higher priority.
-LOAD_FLAG(MAYBE_USER_GESTURE, 1 << 23)
+LOAD_FLAG(MAYBE_USER_GESTURE, 1 << 19)
 
 // Indicates that the username:password portion of the URL should not
 // be honored, but that other forms of authority may be used.
-LOAD_FLAG(DO_NOT_USE_EMBEDDED_IDENTITY, 1 << 24)
+LOAD_FLAG(DO_NOT_USE_EMBEDDED_IDENTITY, 1 << 20)
 
 // Send request directly to the origin if the effective proxy is the data
 // reduction proxy.
 // TODO(rcs): Remove this flag as soon as http://crbug.com/339237 is resolved.
-LOAD_FLAG(BYPASS_DATA_REDUCTION_PROXY, 1 << 25)
+LOAD_FLAG(BYPASS_DATA_REDUCTION_PROXY, 1 << 21)
 
 // Indicates the the request is an asynchronous revalidation.
-LOAD_FLAG(ASYNC_REVALIDATION, 1 << 26)
+LOAD_FLAG(ASYNC_REVALIDATION, 1 << 22)
diff --git a/net/base/net_error_list.h b/net/base/net_error_list.h
index f151b3c..e1d65e1 100644
--- a/net/base/net_error_list.h
+++ b/net/base/net_error_list.h
@@ -440,13 +440,16 @@
 // The certificate claimed DNS names that are in violation of name constraints.
 NET_ERROR(CERT_NAME_CONSTRAINT_VIOLATION, -212)
 
+// The certificate's validity period is too long.
+NET_ERROR(CERT_VALIDITY_TOO_LONG, -213)
+
 // Add new certificate error codes here.
 //
 // Update the value of CERT_END whenever you add a new certificate error
 // code.
 
 // The value immediately past the last certificate error code.
-NET_ERROR(CERT_END, -213)
+NET_ERROR(CERT_END, -214)
 
 // The URL is invalid.
 NET_ERROR(INVALID_URL, -300)
diff --git a/net/base/net_string_util_icu_alternatives_android.cc b/net/base/net_string_util_icu_alternatives_android.cc
index f4ef1ef..0551a03 100644
--- a/net/base/net_string_util_icu_alternatives_android.cc
+++ b/net/base/net_string_util_icu_alternatives_android.cc
@@ -66,7 +66,9 @@
 
 }  // namespace
 
-const char kCharsetLatin1[] = "ISO-8859-1";
+// This constant cannot be defined as const char[] because it is initialized
+// by base::kCodepageLatin1 (which is const char[]) in net_string_util_icu.cc.
+const char* const kCharsetLatin1 = "ISO-8859-1";
 
 bool ConvertToUtf8(const std::string& text, const char* charset,
                    std::string* output) {
diff --git a/net/base/net_util_linux.cc b/net/base/net_util_linux.cc
index e4e0f7f..36c9eb7 100644
--- a/net/base/net_util_linux.cc
+++ b/net/base/net_util_linux.cc
@@ -4,12 +4,18 @@
 
 #include "net/base/net_util_linux.h"
 
-#include <net/if.h>
-#include <netinet/in.h>
+#if !defined(OS_ANDROID)
+#include <linux/ethtool.h>
+#endif  // !defined(OS_ANDROID)
+#include <linux/if.h>
+#include <linux/sockios.h>
+#include <linux/wireless.h>
 #include <set>
+#include <sys/ioctl.h>
 #include <sys/types.h>
 
 #include "base/files/file_path.h"
+#include "base/files/scoped_file.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/strings/string_number_conversions.h"
@@ -69,6 +75,34 @@
 #endif
 }
 
+// Gets the connection type for interface |ifname| by checking for wireless
+// or ethtool extensions.
+NetworkChangeNotifier::ConnectionType GetInterfaceConnectionType(
+    const std::string& ifname) {
+  base::ScopedFD s(socket(AF_INET, SOCK_STREAM, 0));
+  if (!s.is_valid())
+    return NetworkChangeNotifier::CONNECTION_UNKNOWN;
+
+  // Test wireless extensions for CONNECTION_WIFI
+  struct iwreq pwrq = {};
+  strncpy(pwrq.ifr_name, ifname.c_str(), IFNAMSIZ - 1);
+  if (ioctl(s.get(), SIOCGIWNAME, &pwrq) != -1)
+    return NetworkChangeNotifier::CONNECTION_WIFI;
+
+#if !defined(OS_ANDROID)
+  // Test ethtool for CONNECTION_ETHERNET
+  struct ethtool_cmd ecmd = {};
+  ecmd.cmd = ETHTOOL_GSET;
+  struct ifreq ifr = {};
+  ifr.ifr_data = &ecmd;
+  strncpy(ifr.ifr_name, ifname.c_str(), IFNAMSIZ - 1);
+  if (ioctl(s.get(), SIOCETHTOOL, &ifr) != -1)
+    return NetworkChangeNotifier::CONNECTION_ETHERNET;
+#endif  // !defined(OS_ANDROID)
+
+  return NetworkChangeNotifier::CONNECTION_UNKNOWN;
+}
+
 bool GetNetworkListImpl(
     NetworkInterfaceList* networks,
     int policy,
@@ -112,13 +146,12 @@
         ifnames.find(it->second.ifa_index);
     std::string ifname;
     if (itname == ifnames.end()) {
-      char buffer[IF_NAMESIZE] = {0};
-      if (get_interface_name(it->second.ifa_index, buffer)) {
-        ifname = ifnames[it->second.ifa_index] = buffer;
-      } else {
-        // Ignore addresses whose interface name can't be retrieved.
+      char buffer[IFNAMSIZ] = {0};
+      ifname.assign(get_interface_name(it->second.ifa_index, buffer));
+      // Ignore addresses whose interface name can't be retrieved.
+      if (ifname.empty())
         continue;
-      }
+      ifnames[it->second.ifa_index] = ifname;
     } else {
       ifname = itname->second;
     }
@@ -128,9 +161,11 @@
     if (ShouldIgnoreInterface(ifname, policy))
       continue;
 
+    NetworkChangeNotifier::ConnectionType type =
+        GetInterfaceConnectionType(ifname);
+
     networks->push_back(
-        NetworkInterface(ifname, ifname, it->second.ifa_index,
-                         NetworkChangeNotifier::CONNECTION_UNKNOWN, it->first,
+        NetworkInterface(ifname, ifname, it->second.ifa_index, type, it->first,
                          it->second.ifa_prefixlen, ip_attributes));
   }
 
@@ -146,9 +181,9 @@
   internal::AddressTrackerLinux tracker;
   tracker.Init();
 
-  return internal::GetNetworkListImpl(networks, policy,
-                                      tracker.GetOnlineLinks(),
-                                      tracker.GetAddressMap(), &if_indextoname);
+  return internal::GetNetworkListImpl(
+      networks, policy, tracker.GetOnlineLinks(), tracker.GetAddressMap(),
+      &internal::AddressTrackerLinux::GetInterfaceName);
 }
 
 }  // namespace net
diff --git a/net/base/net_util_linux.h b/net/base/net_util_linux.h
index 340c380..fb5b6f4 100644
--- a/net/base/net_util_linux.h
+++ b/net/base/net_util_linux.h
@@ -6,7 +6,7 @@
 #define NET_BASE_NET_UTIL_LINUX_H_
 
 // This file is only used to expose some of the internals
-// of net_util_linux.cc to tests.
+// of net_util_linux.cc to address_tracker_linux and tests.
 
 #include "base/containers/hash_tables.h"
 #include "net/base/address_tracker_linux.h"
@@ -15,8 +15,7 @@
 namespace net {
 namespace internal {
 
-typedef char* (*GetInterfaceNameFunction)(unsigned int interface_index,
-                                          char* ifname);
+typedef char* (*GetInterfaceNameFunction)(int interface_index, char* ifname);
 
 NET_EXPORT bool GetNetworkListImpl(
     NetworkInterfaceList* networks,
diff --git a/net/base/net_util_unittest.cc b/net/base/net_util_unittest.cc
index 60fae68..e9cd79b 100644
--- a/net/base/net_util_unittest.cc
+++ b/net/base/net_util_unittest.cc
@@ -913,11 +913,11 @@
   return output;
 }
 
-char* GetInterfaceName(unsigned int interface_index, char* ifname) {
+char* GetInterfaceName(int interface_index, char* ifname) {
   return CopyInterfaceName(ifname_em1, arraysize(ifname_em1), ifname);
 }
 
-char* GetInterfaceNameVM(unsigned int interface_index, char* ifname) {
+char* GetInterfaceNameVM(int interface_index, char* ifname) {
   return CopyInterfaceName(ifname_vm, arraysize(ifname_vm), ifname);
 }
 
diff --git a/net/base/network_change_notifier.cc b/net/base/network_change_notifier.cc
index 2e573dc..ec45a4e 100644
--- a/net/base/network_change_notifier.cc
+++ b/net/base/network_change_notifier.cc
@@ -655,6 +655,27 @@
 }
 
 // static
+NetworkChangeNotifier::ConnectionType
+NetworkChangeNotifier::ConnectionTypeFromInterfaceList(
+    const NetworkInterfaceList& interfaces) {
+  bool first = true;
+  ConnectionType result = CONNECTION_NONE;
+  for (size_t i = 0; i < interfaces.size(); ++i) {
+#if defined(OS_WIN)
+    if (interfaces[i].friendly_name == "Teredo Tunneling Pseudo-Interface")
+      continue;
+#endif
+    if (first) {
+      first = false;
+      result = interfaces[i].type;
+    } else if (result != interfaces[i].type) {
+      return CONNECTION_UNKNOWN;
+    }
+  }
+  return result;
+}
+
+// static
 NetworkChangeNotifier* NetworkChangeNotifier::CreateMock() {
   return new MockNetworkChangeNotifier();
 }
diff --git a/net/base/network_change_notifier.h b/net/base/network_change_notifier.h
index 73842d4..964fcf3 100644
--- a/net/base/network_change_notifier.h
+++ b/net/base/network_change_notifier.h
@@ -5,6 +5,8 @@
 #ifndef NET_BASE_NETWORK_CHANGE_NOTIFIER_H_
 #define NET_BASE_NETWORK_CHANGE_NOTIFIER_H_
 
+#include <vector>
+
 #include "base/basictypes.h"
 #include "base/observer_list_threadsafe.h"
 #include "base/time/time.h"
@@ -17,6 +19,8 @@
 struct DnsConfig;
 class HistogramWatcher;
 class NetworkChangeNotifierFactory;
+struct NetworkInterface;
+typedef std::vector<NetworkInterface> NetworkInterfaceList;
 class URLRequest;
 
 #if defined(OS_LINUX)
@@ -258,6 +262,13 @@
   // current connection is cellular.
   static bool IsConnectionCellular(ConnectionType type);
 
+  // Gets the current connection type based on |interfaces|. Returns
+  // CONNECTION_NONE if there are no interfaces, CONNECTION_UNKNOWN if two
+  // interfaces have different connection types or the connection type of all
+  // interfaces if they have the same interface type.
+  static ConnectionType ConnectionTypeFromInterfaceList(
+      const NetworkInterfaceList& interfaces);
+
   // Like Create(), but for use in tests.  The mock object doesn't monitor any
   // events, it merely rebroadcasts notifications when requested.
   static NetworkChangeNotifier* CreateMock();
diff --git a/net/base/network_change_notifier_linux.cc b/net/base/network_change_notifier_linux.cc
index f77025a..82daf7f 100644
--- a/net/base/network_change_notifier_linux.cc
+++ b/net/base/network_change_notifier_linux.cc
@@ -33,9 +33,12 @@
   void CleanUp() override;
 
  private:
+  void OnIPAddressChanged();
+  void OnLinkChanged();
   scoped_ptr<DnsConfigService> dns_config_service_;
   // Used to detect online/offline state and IP address changes.
   internal::AddressTrackerLinux address_tracker_;
+  NetworkChangeNotifier::ConnectionType last_type_;
 
   DISALLOW_COPY_AND_ASSIGN(Thread);
 };
@@ -43,11 +46,12 @@
 NetworkChangeNotifierLinux::Thread::Thread()
     : base::Thread("NetworkChangeNotifier"),
       address_tracker_(
-          base::Bind(&NetworkChangeNotifier::
-                     NotifyObserversOfIPAddressChange),
-          base::Bind(&NetworkChangeNotifier::
-                     NotifyObserversOfConnectionTypeChange),
-          base::Bind(base::DoNothing)) {
+          base::Bind(&NetworkChangeNotifierLinux::Thread::OnIPAddressChanged,
+                     base::Unretained(this)),
+          base::Bind(&NetworkChangeNotifierLinux::Thread::OnLinkChanged,
+                     base::Unretained(this)),
+          base::Bind(base::DoNothing)),
+      last_type_(NetworkChangeNotifier::CONNECTION_NONE) {
 }
 
 NetworkChangeNotifierLinux::Thread::~Thread() {
@@ -65,6 +69,20 @@
   dns_config_service_.reset();
 }
 
+void NetworkChangeNotifierLinux::Thread::OnIPAddressChanged() {
+  NetworkChangeNotifier::NotifyObserversOfIPAddressChange();
+  // When the IP address of a network interface is added/deleted, the
+  // connection type may have changed.
+  OnLinkChanged();
+}
+
+void NetworkChangeNotifierLinux::Thread::OnLinkChanged() {
+  if (last_type_ != GetCurrentConnectionType()) {
+    NetworkChangeNotifier::NotifyObserversOfConnectionTypeChange();
+    last_type_ = GetCurrentConnectionType();
+  }
+}
+
 NetworkChangeNotifierLinux* NetworkChangeNotifierLinux::Create() {
   return new NetworkChangeNotifierLinux();
 }
diff --git a/net/base/network_change_notifier_unittest.cc b/net/base/network_change_notifier_unittest.cc
index b8310fa..cb4e774 100644
--- a/net/base/network_change_notifier_unittest.cc
+++ b/net/base/network_change_notifier_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "net/base/network_change_notifier.h"
 
+#include "net/base/net_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
@@ -57,4 +58,33 @@
   }
 }
 
+TEST(NetworkChangeNotifierTest, ConnectionTypeFromInterfaceList) {
+  NetworkInterfaceList list;
+
+  // Test empty list.
+  EXPECT_EQ(NetworkChangeNotifier::ConnectionTypeFromInterfaceList(list),
+            NetworkChangeNotifier::CONNECTION_NONE);
+
+  for (int i = NetworkChangeNotifier::CONNECTION_UNKNOWN;
+       i <= NetworkChangeNotifier::CONNECTION_LAST; i++) {
+    // Check individual types.
+    NetworkInterface interface;
+    interface.type = static_cast<NetworkChangeNotifier::ConnectionType>(i);
+    list.clear();
+    list.push_back(interface);
+    EXPECT_EQ(NetworkChangeNotifier::ConnectionTypeFromInterfaceList(list), i);
+    // Check two types.
+    for (int j = NetworkChangeNotifier::CONNECTION_UNKNOWN;
+         j <= NetworkChangeNotifier::CONNECTION_LAST; j++) {
+      list.clear();
+      interface.type = static_cast<NetworkChangeNotifier::ConnectionType>(i);
+      list.push_back(interface);
+      interface.type = static_cast<NetworkChangeNotifier::ConnectionType>(j);
+      list.push_back(interface);
+      EXPECT_EQ(NetworkChangeNotifier::ConnectionTypeFromInterfaceList(list),
+                i == j ? i : NetworkChangeNotifier::CONNECTION_UNKNOWN);
+    }
+  }
+}
+
 }  // namespace net
diff --git a/net/base/network_change_notifier_win.cc b/net/base/network_change_notifier_win.cc
index 1e6c51c..0512594 100644
--- a/net/base/network_change_notifier_win.cc
+++ b/net/base/network_change_notifier_win.cc
@@ -208,6 +208,11 @@
 
 NetworkChangeNotifier::ConnectionType
 NetworkChangeNotifierWin::GetCurrentConnectionType() const {
+  // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed.
+  tracked_objects::ScopedTracker tracking_profile(
+      FROM_HERE_WITH_EXPLICIT_FUNCTION(
+          "422516 NetworkChangeNotifierWin::GetCurrentConnectionType"));
+
   base::AutoLock auto_lock(last_computed_connection_type_lock_);
   return last_computed_connection_type_;
 }
diff --git a/net/base/sdch_manager.cc b/net/base/sdch_manager.cc
index 05787f3..27d86ee 100644
--- a/net/base/sdch_manager.cc
+++ b/net/base/sdch_manager.cc
@@ -456,15 +456,15 @@
   *problem_code = SDCH_DICTIONARY_HASH_NOT_FOUND;
   const auto& it = dictionaries_.find(server_hash);
   if (it == dictionaries_.end())
-    return result;
+    return result.Pass();
 
   *problem_code = it->second->data.CanUse(target_url);
   if (*problem_code != SDCH_OK)
-    return result;
+    return result.Pass();
 
   result.reset(new DictionarySet);
   result->AddDictionary(it->first, it->second);
-  return result;
+  return result.Pass();
 }
 
 // static
diff --git a/net/base/trace_net_log_observer.cc b/net/base/trace_net_log_observer.cc
index 5d98c41..905ec66 100644
--- a/net/base/trace_net_log_observer.cc
+++ b/net/base/trace_net_log_observer.cc
@@ -8,10 +8,10 @@
 
 #include <string>
 
-#include "base/debug/trace_event.h"
 #include "base/json/json_writer.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/trace_event/trace_event.h"
 #include "base/values.h"
 #include "net/base/net_log.h"
 
diff --git a/net/base/trace_net_log_observer.h b/net/base/trace_net_log_observer.h
index 9fc062b..9977331 100644
--- a/net/base/trace_net_log_observer.h
+++ b/net/base/trace_net_log_observer.h
@@ -5,8 +5,8 @@
 #ifndef NET_BASE_TRACE_NET_LOG_OBSERVER_H_
 #define NET_BASE_TRACE_NET_LOG_OBSERVER_H_
 
-#include "base/debug/trace_event_impl.h"
 #include "base/macros.h"
+#include "base/trace_event/trace_event_impl.h"
 #include "net/base/net_export.h"
 #include "net/base/net_log.h"
 
diff --git a/net/base/trace_net_log_observer_unittest.cc b/net/base/trace_net_log_observer_unittest.cc
index 5256bac..802722d 100644
--- a/net/base/trace_net_log_observer_unittest.cc
+++ b/net/base/trace_net_log_observer_unittest.cc
@@ -7,8 +7,6 @@
 #include <string>
 #include <vector>
 
-#include "base/debug/trace_event.h"
-#include "base/debug/trace_event_impl.h"
 #include "base/json/json_reader.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
@@ -16,6 +14,8 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
+#include "base/trace_event/trace_event.h"
+#include "base/trace_event/trace_event_impl.h"
 #include "base/values.h"
 #include "net/base/capturing_net_log.h"
 #include "net/base/net_log.h"
diff --git a/net/cert/cert_status_flags.cc b/net/cert/cert_status_flags.cc
index d278ea4..e8d9aab 100644
--- a/net/cert/cert_status_flags.cc
+++ b/net/cert/cert_status_flags.cc
@@ -49,6 +49,8 @@
       return CERT_STATUS_PINNED_KEY_MISSING;
     case ERR_CERT_NAME_CONSTRAINT_VIOLATION:
       return CERT_STATUS_NAME_CONSTRAINT_VIOLATION;
+    case ERR_CERT_VALIDITY_TOO_LONG:
+      return CERT_STATUS_VALIDITY_TOO_LONG;
     default:
       return 0;
   }
@@ -81,6 +83,8 @@
     return ERR_CERT_WEAK_KEY;
   if (cert_status & CERT_STATUS_DATE_INVALID)
     return ERR_CERT_DATE_INVALID;
+  if (cert_status & CERT_STATUS_VALIDITY_TOO_LONG)
+    return ERR_CERT_VALIDITY_TOO_LONG;
 
   // Unknown status.  Give it the benefit of the doubt.
   if (cert_status & CERT_STATUS_UNABLE_TO_CHECK_REVOCATION)
diff --git a/net/cert/cert_status_flags_list.h b/net/cert/cert_status_flags_list.h
index c660a7b..932e938 100644
--- a/net/cert/cert_status_flags_list.h
+++ b/net/cert/cert_status_flags_list.h
@@ -24,6 +24,7 @@
 // 1 << 12 was used for CERT_STATUS_WEAK_DH_KEY
 CERT_STATUS_FLAG(PINNED_KEY_MISSING, 1 << 13)
 CERT_STATUS_FLAG(NAME_CONSTRAINT_VIOLATION, 1 << 14)
+CERT_STATUS_FLAG(VALIDITY_TOO_LONG, 1 << 15)
 
 // Bits 16 to 31 are for non-error statuses.
 CERT_STATUS_FLAG(IS_EV, 1 << 16)
diff --git a/net/cert/cert_verify_proc.cc b/net/cert/cert_verify_proc.cc
index 222ba47..d987e3d 100644
--- a/net/cert/cert_verify_proc.cc
+++ b/net/cert/cert_verify_proc.cc
@@ -4,10 +4,13 @@
 
 #include "net/cert/cert_verify_proc.h"
 
+#include <stdint.h>
+
 #include "base/basictypes.h"
 #include "base/metrics/histogram.h"
 #include "base/sha1.h"
 #include "base/strings/stringprintf.h"
+#include "base/time/time.h"
 #include "build/build_config.h"
 #include "net/base/net_errors.h"
 #include "net/base/net_util.h"
@@ -33,7 +36,6 @@
 #error Implement certificate verification.
 #endif
 
-
 namespace net {
 
 namespace {
@@ -276,6 +278,13 @@
     // now treat it as a warning and do not map it to an error return value.
   }
 
+  // Flag certificates using too long validity periods.
+  if (verify_result->is_issued_by_known_root && HasTooLongValidity(*cert)) {
+    verify_result->cert_status |= CERT_STATUS_VALIDITY_TOO_LONG;
+    if (rv == OK)
+      rv = MapCertStatusToNetError(verify_result->cert_status);
+  }
+
   return rv;
 }
 
@@ -614,4 +623,50 @@
   return false;
 }
 
+// static
+bool CertVerifyProc::HasTooLongValidity(const X509Certificate& cert) {
+  const base::Time& start = cert.valid_start();
+  const base::Time& expiry = cert.valid_expiry();
+  if (start.is_max() || start.is_null() || expiry.is_max() ||
+      expiry.is_null() || start > expiry) {
+    return true;
+  }
+
+  base::Time::Exploded exploded_start;
+  base::Time::Exploded exploded_expiry;
+  cert.valid_start().UTCExplode(&exploded_start);
+  cert.valid_expiry().UTCExplode(&exploded_expiry);
+
+  if (exploded_expiry.year - exploded_start.year > 10)
+    return true;
+
+  int month_diff = (exploded_expiry.year - exploded_start.year) * 12 +
+                   (exploded_expiry.month - exploded_start.month);
+
+  // Add any remainder as a full month.
+  if (exploded_expiry.day_of_month > exploded_start.day_of_month)
+    ++month_diff;
+
+  static const base::Time time_2012_07_01 =
+      base::Time::FromUTCExploded({2012, 7, 0, 1, 0, 0, 0, 0});
+  static const base::Time time_2015_04_01 =
+      base::Time::FromUTCExploded({2015, 4, 0, 1, 0, 0, 0, 0});
+  static const base::Time time_2019_07_01 =
+      base::Time::FromUTCExploded({2019, 7, 0, 1, 0, 0, 0, 0});
+
+  // For certificates issued before the BRs took effect.
+  if (start < time_2012_07_01 && (month_diff > 120 || expiry > time_2019_07_01))
+    return true;
+
+  // For certificates issued after 1 July 2012: 60 months.
+  if (start >= time_2012_07_01 && month_diff > 60)
+    return true;
+
+  // For certificates issued after 1 April 2015: 39 months.
+  if (start >= time_2015_04_01 && month_diff > 39)
+    return true;
+
+  return false;
+}
+
 }  // namespace net
diff --git a/net/cert/cert_verify_proc.h b/net/cert/cert_verify_proc.h
index 95e464e..f60ed6d 100644
--- a/net/cert/cert_verify_proc.h
+++ b/net/cert/cert_verify_proc.h
@@ -73,6 +73,7 @@
  private:
   friend class base::RefCountedThreadSafe<CertVerifyProc>;
   FRIEND_TEST_ALL_PREFIXES(CertVerifyProcTest, DigiNotarCerts);
+  FRIEND_TEST_ALL_PREFIXES(CertVerifyProcTest, TestHasTooLongValidity);
 
   // Performs the actual verification using the desired underlying
   // cryptographic library.
@@ -99,6 +100,18 @@
       const std::vector<std::string>& dns_names,
       const std::vector<std::string>& ip_addrs);
 
+  // The CA/Browser Forum's Baseline Requirements specify maximum validity
+  // periods (https://cabforum.org/Baseline_Requirements_V1.pdf):
+  //
+  // For certificates issued after 1 July 2012: 60 months.
+  // For certificates issued after 1 April 2015: 39 months.
+  //
+  // For certificates issued before the BRs took effect, there were no
+  // guidelines, but clamp them at a maximum of 10 year validity, with the
+  // requirement they expire within 7 years after the effective date of the BRs
+  // (i.e. by 1 July 2019).
+  static bool HasTooLongValidity(const X509Certificate& cert);
+
   DISALLOW_COPY_AND_ASSIGN(CertVerifyProc);
 };
 
diff --git a/net/cert/cert_verify_proc_unittest.cc b/net/cert/cert_verify_proc_unittest.cc
index b68b464..bb90923 100644
--- a/net/cert/cert_verify_proc_unittest.cc
+++ b/net/cert/cert_verify_proc_unittest.cc
@@ -613,16 +613,46 @@
             verify_result.cert_status & CERT_STATUS_NAME_CONSTRAINT_VIOLATION);
 }
 
+TEST_F(CertVerifyProcTest, TestHasTooLongValidity) {
+  struct {
+    const char* const file;
+    bool is_valid_too_long;
+  } tests[] = {
+      {"twitter-chain.pem", false},
+      {"start_after_expiry.pem", true},
+      {"pre_br_validity_ok.pem", false},
+      {"pre_br_validity_bad_121.pem", true},
+      {"pre_br_validity_bad_2020.pem", true},
+      {"10_year_validity.pem", false},
+      {"11_year_validity.pem", true},
+      {"39_months_after_2015_04.pem", false},
+      {"40_months_after_2015_04.pem", true},
+      {"60_months_after_2012_07.pem", false},
+      {"61_months_after_2012_07.pem", true},
+  };
+
+  base::FilePath certs_dir = GetTestCertsDirectory();
+
+  for (size_t i = 0; i < arraysize(tests); ++i) {
+    scoped_refptr<X509Certificate> certificate =
+        ImportCertFromFile(certs_dir, tests[i].file);
+    SCOPED_TRACE(tests[i].file);
+    ASSERT_TRUE(certificate);
+    EXPECT_EQ(tests[i].is_valid_too_long,
+              CertVerifyProc::HasTooLongValidity(*certificate));
+  }
+}
+
 TEST_F(CertVerifyProcTest, TestKnownRoot) {
   if (!SupportsDetectingKnownRoots()) {
-    LOG(INFO) << "Skipping this test in this platform.";
+    LOG(INFO) << "Skipping this test on this platform.";
     return;
   }
 
   base::FilePath certs_dir = GetTestCertsDirectory();
   CertificateList certs = CreateCertificateListFromFile(
-      certs_dir, "satveda.pem", X509Certificate::FORMAT_AUTO);
-  ASSERT_EQ(2U, certs.size());
+      certs_dir, "twitter-chain.pem", X509Certificate::FORMAT_AUTO);
+  ASSERT_EQ(3U, certs.size());
 
   X509Certificate::OSCertHandles intermediates;
   intermediates.push_back(certs[1]->os_cert_handle());
@@ -633,20 +663,14 @@
 
   int flags = 0;
   CertVerifyResult verify_result;
-  // This will blow up, May 24th, 2019. Sorry! Please disable and file a bug
+  // This will blow up, May 9th, 2016. Sorry! Please disable and file a bug
   // against agl. See also PublicKeyHashes.
-  int error = Verify(cert_chain.get(),
-                     "satveda.com",
-                     flags,
-                     NULL,
-                     empty_cert_list_,
-                     &verify_result);
+  int error = Verify(cert_chain.get(), "twitter.com", flags, NULL,
+                     empty_cert_list_, &verify_result);
   EXPECT_EQ(OK, error);
-  EXPECT_EQ(CERT_STATUS_SHA1_SIGNATURE_PRESENT, verify_result.cert_status);
   EXPECT_TRUE(verify_result.is_issued_by_known_root);
 }
 
-// The certse.pem certificate has been revoked. crbug.com/259723.
 TEST_F(CertVerifyProcTest, PublicKeyHashes) {
   if (!SupportsReturningVerifiedChain()) {
     LOG(INFO) << "Skipping this test in this platform.";
@@ -655,8 +679,8 @@
 
   base::FilePath certs_dir = GetTestCertsDirectory();
   CertificateList certs = CreateCertificateListFromFile(
-      certs_dir, "satveda.pem", X509Certificate::FORMAT_AUTO);
-  ASSERT_EQ(2U, certs.size());
+      certs_dir, "twitter-chain.pem", X509Certificate::FORMAT_AUTO);
+  ASSERT_EQ(3U, certs.size());
 
   X509Certificate::OSCertHandles intermediates;
   intermediates.push_back(certs[1]->os_cert_handle());
@@ -667,17 +691,12 @@
   int flags = 0;
   CertVerifyResult verify_result;
 
-  // This will blow up, May 24th, 2019. Sorry! Please disable and file a bug
+  // This will blow up, May 9th, 2016. Sorry! Please disable and file a bug
   // against agl. See also TestKnownRoot.
-  int error = Verify(cert_chain.get(),
-                     "satveda.com",
-                     flags,
-                     NULL,
-                     empty_cert_list_,
-                     &verify_result);
+  int error = Verify(cert_chain.get(), "twitter.com", flags, NULL,
+                     empty_cert_list_, &verify_result);
   EXPECT_EQ(OK, error);
-  EXPECT_EQ(CERT_STATUS_SHA1_SIGNATURE_PRESENT, verify_result.cert_status);
-  ASSERT_LE(2U, verify_result.public_key_hashes.size());
+  ASSERT_LE(3U, verify_result.public_key_hashes.size());
 
   HashValueVector sha1_hashes;
   for (size_t i = 0; i < verify_result.public_key_hashes.size(); ++i) {
@@ -685,10 +704,10 @@
       continue;
     sha1_hashes.push_back(verify_result.public_key_hashes[i]);
   }
-  ASSERT_LE(2u, sha1_hashes.size());
+  ASSERT_LE(3u, sha1_hashes.size());
 
-  for (size_t i = 0; i < 2; ++i) {
-    EXPECT_EQ(HexEncode(kSatvedaSPKIs[i], base::kSHA1Length),
+  for (size_t i = 0; i < 3; ++i) {
+    EXPECT_EQ(HexEncode(kTwitterSPKIs[i], base::kSHA1Length),
               HexEncode(sha1_hashes[i].data(), base::kSHA1Length));
   }
 
@@ -698,10 +717,10 @@
       continue;
     sha256_hashes.push_back(verify_result.public_key_hashes[i]);
   }
-  ASSERT_LE(2u, sha256_hashes.size());
+  ASSERT_LE(3u, sha256_hashes.size());
 
-  for (size_t i = 0; i < 2; ++i) {
-    EXPECT_EQ(HexEncode(kSatvedaSPKIsSHA256[i], crypto::kSHA256Length),
+  for (size_t i = 0; i < 3; ++i) {
+    EXPECT_EQ(HexEncode(kTwitterSPKIsSHA256[i], crypto::kSHA256Length),
               HexEncode(sha256_hashes[i].data(), crypto::kSHA256Length));
   }
 }
@@ -808,7 +827,7 @@
   }
 
   CertificateList cert_list = CreateCertificateListFromFile(
-      GetTestCertsDirectory(), "ok_cert.pem",
+      GetTestCertsDirectory(), "reject_intranet_hosts.pem",
       X509Certificate::FORMAT_AUTO);
   ASSERT_EQ(1U, cert_list.size());
   scoped_refptr<X509Certificate> cert(cert_list[0]);
diff --git a/net/cert/crl_set.cc b/net/cert/crl_set.cc
index 0898557..2d4f5c3 100644
--- a/net/cert/crl_set.cc
+++ b/net/cert/crl_set.cc
@@ -44,11 +44,11 @@
   while (serial.size() > 1 && serial[0] == 0x00)
     serial.remove_prefix(1);
 
-  base::hash_map<std::string, size_t>::const_iterator i =
+  base::hash_map<std::string, size_t>::const_iterator crl_index =
       crls_index_by_issuer_.find(issuer_spki_hash.as_string());
-  if (i == crls_index_by_issuer_.end())
+  if (crl_index == crls_index_by_issuer_.end())
     return UNKNOWN;
-  const std::vector<std::string>& serials = crls_[i->second].second;
+  const std::vector<std::string>& serials = crls_[crl_index->second].second;
 
   for (std::vector<std::string>::const_iterator i = serials.begin();
        i != serials.end(); ++i) {
diff --git a/net/cert/crl_set_storage.cc b/net/cert/crl_set_storage.cc
index f2332ab..84c7aa4 100644
--- a/net/cert/crl_set_storage.cc
+++ b/net/cert/crl_set_storage.cc
@@ -5,11 +5,11 @@
 #include "net/cert/crl_set_storage.h"
 
 #include "base/base64.h"
-#include "base/debug/trace_event.h"
 #include "base/format_macros.h"
 #include "base/json/json_reader.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/strings/stringprintf.h"
+#include "base/trace_event/trace_event.h"
 #include "base/values.h"
 #include "crypto/sha2.h"
 #include "third_party/zlib/zlib.h"
diff --git a/net/cert/ev_root_ca_metadata.cc b/net/cert/ev_root_ca_metadata.cc
index 74d88a8..b0c8320 100644
--- a/net/cert/ev_root_ca_metadata.cc
+++ b/net/cert/ev_root_ca_metadata.cc
@@ -70,6 +70,12 @@
       "1.3.6.1.4.1.782.1.2.1.8.1",
     },
   },
+  // Actalis Authentication Root CA
+  // https://ssltest-a.actalis.it:8443
+  { { { 0xf3, 0x73, 0xb3, 0x87, 0x06, 0x5a, 0x28, 0x84, 0x8a, 0xf2,
+        0xf3, 0x4a, 0xce, 0x19, 0x2b, 0xdd, 0xc7, 0x8e, 0x9c, 0xac } },
+    {"1.3.159.1.17.1", ""},
+  },
   // AffirmTrust Commercial
   // https://commercial.affirmtrust.com/
   { { { 0xf9, 0xb5, 0xb6, 0x32, 0x45, 0x5f, 0x9c, 0xbe, 0xec, 0x57,
@@ -94,6 +100,18 @@
         0x55, 0x6c, 0x11, 0xa4, 0x37, 0xca, 0xeb, 0xff, 0xc3, 0xbb } },
     {"1.3.6.1.4.1.34697.2.4", ""},
   },
+  // Autoridad de Certificacion Firmaprofesional CIF A62634068
+  // https://publifirma.firmaprofesional.com/
+  { { { 0xae, 0xc5, 0xfb, 0x3f, 0xc8, 0xe1, 0xbf, 0xc4, 0xe5, 0x4f,
+        0x03, 0x07, 0x5a, 0x9a, 0xe8, 0x00, 0xb7, 0xf7, 0xb6, 0xfa } },
+    {"1.3.6.1.4.1.13177.10.1.3.10", "" }
+  },
+  // Baltimore CyberTrust Root
+  // https://secure.omniroot.com/repository/
+  { { { 0xd4, 0xde, 0x20, 0xd0, 0x5e, 0x66, 0xfc, 0x53, 0xfe, 0x1a,
+        0x50, 0x88, 0x2c, 0x78, 0xdb, 0x28, 0x52, 0xca, 0xe4, 0x74 } },
+    {"1.3.6.1.4.1.6334.1.100.1", ""},
+  },
   // Buypass Class 3 CA 1
   // https://valid.evident.ca13.ssl.buypass.no/
   { { { 0x61, 0x57, 0x3A, 0x11, 0xDF, 0x0E, 0xD8, 0x7E, 0xD5, 0x92,
@@ -106,6 +124,18 @@
         0x50, 0xBD, 0xC7, 0xC2, 0x81, 0xA5, 0xBC, 0xA9, 0x64, 0x57 } },
     {"2.16.578.1.26.1.3.3", ""},
   },
+  // CA 沃通根证书
+  // https://root2evtest.wosign.com/
+  { { { 0x16, 0x32, 0x47, 0x8d, 0x89, 0xf9, 0x21, 0x3a, 0x92, 0x00,
+        0x85, 0x63, 0xf5, 0xa4, 0xa7, 0xd3, 0x12, 0x40, 0x8a, 0xd6 } },
+    {"1.3.6.1.4.1.36305.2", ""},
+  },
+  // Certification Authority of WoSign
+  // https://root1evtest.wosign.com/
+  { { { 0xb9, 0x42, 0x94, 0xbf, 0x91, 0xea, 0x8f, 0xb6, 0x4b, 0xe6,
+        0x10, 0x97, 0xc7, 0xfb, 0x00, 0x13, 0x59, 0xb6, 0x76, 0xcb } },
+    {"1.3.6.1.4.1.36305.2", ""},
+  },
   // CertPlus Class 2 Primary CA (KEYNECTIS)
   // https://www.keynectis.com/
   { { { 0x74, 0x20, 0x74, 0x41, 0x72, 0x9c, 0xdd, 0x92, 0xec, 0x79,
@@ -224,6 +254,18 @@
         0x78, 0xc1, 0x09, 0x26, 0xdf, 0x5b, 0x85, 0x69, 0x76, 0xad } },
     {"1.3.6.1.4.1.4146.1.1", ""},
   },
+  // GlobalSign ECC Root CA - R4
+  // https://2038r4.globalsign.com
+  { { { 0x69, 0x69, 0x56, 0x2e, 0x40, 0x80, 0xf4, 0x24, 0xa1, 0xe7,
+        0x19, 0x9f, 0x14, 0xba, 0xf3, 0xee, 0x58, 0xab, 0x6a, 0xbb } },
+    {"1.3.6.1.4.1.4146.1.1", ""},
+  },
+  // GlobalSign ECC Root CA - R5
+  // https://2038r5.globalsign.com/
+  { { { 0x1f, 0x24, 0xc6, 0x30, 0xcd, 0xa4, 0x18, 0xef, 0x20, 0x69,
+        0xff, 0xad, 0x4f, 0xdd, 0x5f, 0x46, 0x3a, 0x1b, 0x69, 0xaa } },
+    {"1.3.6.1.4.1.4146.1.1", ""}
+  },
   // Go Daddy Class 2 Certification Authority
   // https://www.godaddy.com/
   { { { 0x27, 0x96, 0xba, 0xe6, 0x3f, 0x18, 0x01, 0xe2, 0x77, 0x26,
@@ -277,6 +319,12 @@
         0x16, 0x20, 0x88, 0x80, 0x48, 0x39, 0x19, 0x93, 0x7c, 0xf7 } },
     {"1.3.6.1.4.1.8024.0.2.100.1.2", ""},
   },
+  // QuoVadis Root CA 2 G3
+  // https://evsslicag3-v.quovadisglobal.com/
+  { { { 0x09, 0x3c, 0x61, 0xf3, 0x8b, 0x8b, 0xdc, 0x7d, 0x55, 0xdf,
+        0x75, 0x38, 0x02, 0x05, 0x00, 0xe1, 0x25, 0xf5, 0xc8, 0x36 } },
+    {"1.3.6.1.4.1.8024.0.2.100.1.2", ""},
+  },
   // SecureTrust CA, SecureTrust Corporation
   // https://www.securetrust.com
   // https://www.trustwave.com/
@@ -301,6 +349,12 @@
         0x3d, 0xd8, 0x90, 0x8f, 0xfd, 0x28, 0x86, 0x65, 0x64, 0x7d } },
     {"1.2.392.200091.100.721.1", ""},
   },
+  // Staat der Nederlanden EV Root CA
+  // https://pkioevssl-v.quovadisglobal.com/
+  { { { 0x76, 0xe2, 0x7e, 0xc1, 0x4f, 0xdb, 0x82, 0xc1, 0xc0, 0xa6,
+        0x75, 0xb5, 0x05, 0xbe, 0x3d, 0x29, 0xb4, 0xed, 0xdb, 0xbb } },
+    {"2.16.528.1.1003.1.2.7", ""},
+  },
   // StartCom Certification Authority
   // https://www.startssl.com/
   { { { 0x3e, 0x2b, 0xf7, 0xf2, 0x03, 0x1b, 0x96, 0xf3, 0x8c, 0xe6,
@@ -331,6 +385,12 @@
         0x7a, 0xe6, 0x45, 0x25, 0x3a, 0x6f, 0x9f, 0x1a, 0x27, 0x61 } },
     {"2.16.756.1.89.1.2.1.1", ""},
   },
+  // Swisscom Root EV CA 2
+  // https://test-quarz-ev-ca-2.pre.swissdigicert.ch
+  { { { 0xe7, 0xa1, 0x90, 0x29, 0xd3, 0xd5, 0x52, 0xdc, 0x0d, 0x0f,
+        0xc6, 0x92, 0xd3, 0xea, 0x88, 0x0d, 0x15, 0x2e, 0x1a, 0x6b } },
+    {"2.16.756.1.83.21.0", ""},
+  },
   // Thawte Premium Server CA
   // https://www.thawte.com/
   { { { 0x62, 0x7f, 0x8d, 0x78, 0x27, 0x65, 0x63, 0x99, 0xd2, 0x7d,
diff --git a/net/cookies/cookie_monster_unittest.cc b/net/cookies/cookie_monster_unittest.cc
index d5067ae..224efec 100644
--- a/net/cookies/cookie_monster_unittest.cc
+++ b/net/cookies/cookie_monster_unittest.cc
@@ -2611,6 +2611,67 @@
   EXPECT_TRUE(callback.result());
 }
 
+// Ensure that cookies for http, https, ws, and wss all share the same storage
+// and policies when GetAllCookiesForURLAsync is used. This test is part of
+// MultiThreadedCookieMonsterTest in order to test and use
+// GetAllCookiesForURLAsync, but it does not use any additional threads.
+TEST_F(MultiThreadedCookieMonsterTest, GetAllCookiesForURLEffectiveDomain) {
+  std::vector<CanonicalCookie*> cookies;
+  // This cookie will be freed by the CookieMonster.
+  cookies.push_back(CanonicalCookie::Create(url_google_, kValidCookieLine,
+                                            Time::Now(), CookieOptions()));
+  CanonicalCookie cookie = *cookies[0];
+  scoped_refptr<NewMockPersistentCookieStore> store(
+      new NewMockPersistentCookieStore);
+  scoped_refptr<CookieMonster> cm(new CookieMonster(store.get(), NULL));
+
+  CookieMonster::PersistentCookieStore::LoadedCallback loaded_callback;
+  ::testing::StrictMock<::testing::MockFunction<void(int)>> checkpoint;
+  const std::string key =
+      cookie_util::GetEffectiveDomain(url_google_.scheme(), url_google_.host());
+
+  ::testing::InSequence s;
+  EXPECT_CALL(checkpoint, Call(0));
+  EXPECT_CALL(*store, Load(::testing::_));
+  EXPECT_CALL(*store, LoadCookiesForKey(key, ::testing::_))
+      .WillOnce(::testing::SaveArg<1>(&loaded_callback));
+  EXPECT_CALL(checkpoint, Call(1));
+  // LoadCookiesForKey will never be called after checkpoint.Call(1) although
+  // we will call GetAllCookiesForURLAsync again, because all URLs below share
+  // the same key.
+  EXPECT_CALL(*store, LoadCookiesForKey(::testing::_, ::testing::_)).Times(0);
+
+  GetCookieListCallback callback;
+  checkpoint.Call(0);
+  GetAllCookiesForURLTask(cm.get(), url_google_, &callback);
+  checkpoint.Call(1);
+  ASSERT_FALSE(callback.did_run());
+  // Pass the cookies to the CookieMonster.
+  loaded_callback.Run(cookies);
+  // Now GetAllCookiesForURLTask is done.
+  ASSERT_TRUE(callback.did_run());
+  // See that the callback was called with the cookies.
+  ASSERT_EQ(1u, callback.cookies().size());
+  EXPECT_TRUE(cookie.IsEquivalent(callback.cookies()[0]));
+
+  // All urls in |urls| should share the same cookie domain.
+  const GURL kUrls[] = {
+      url_google_,
+      url_google_secure_,
+      GURL(kUrlGoogleWebSocket),
+      GURL(kUrlGoogleWebSocketSecure),
+  };
+  for (const GURL& url : kUrls) {
+    // Call the function with |url| and verify it is done synchronously without
+    // calling LoadCookiesForKey.
+    GetCookieListCallback callback;
+    GetAllCookiesForURLTask(cm.get(), url, &callback);
+    ASSERT_TRUE(callback.did_run());
+    ASSERT_EQ(1u, callback.cookies().size());
+    EXPECT_TRUE(cookie.IsEquivalent(callback.cookies()[0]));
+  }
+}
+
 TEST_F(CookieMonsterTest, InvalidExpiryTime) {
   std::string cookie_line =
       std::string(kValidCookieLine) + "; expires=Blarg arg arg";
diff --git a/net/cookies/cookie_store_unittest.h b/net/cookies/cookie_store_unittest.h
index f0fcd71..8a666c9 100644
--- a/net/cookies/cookie_store_unittest.h
+++ b/net/cookies/cookie_store_unittest.h
@@ -30,6 +30,8 @@
 const char kUrlGoogleFoo[] = "http://www.google.izzle/foo";
 const char kUrlGoogleBar[] = "http://www.google.izzle/bar";
 const char kUrlGoogleSecure[] = "https://www.google.izzle";
+const char kUrlGoogleWebSocket[] = "ws://www.google.izzle";
+const char kUrlGoogleWebSocketSecure[] = "wss://www.google.izzle";
 const char kValidCookieLine[] = "A=B; path=/";
 const char kValidDomainCookieLine[] = "A=B; path=/; domain=google.izzle";
 
diff --git a/net/cookies/cookie_util.cc b/net/cookies/cookie_util.cc
index 075ad73..9ad6eaa 100644
--- a/net/cookies/cookie_util.cc
+++ b/net/cookies/cookie_util.cc
@@ -24,7 +24,8 @@
 
 std::string GetEffectiveDomain(const std::string& scheme,
                                const std::string& host) {
-  if (scheme == "http" || scheme == "https") {
+  if (scheme == "http" || scheme == "https" || scheme == "ws" ||
+      scheme == "wss") {
     return registry_controlled_domains::GetDomainAndRegistry(
         host,
         registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES);
@@ -265,6 +266,5 @@
   return buffer;
 }
 
-}  // namespace cookie_utils
+}  // namespace cookie_util
 }  // namespace net
-
diff --git a/net/cookies/cookie_util_unittest.cc b/net/cookies/cookie_util_unittest.cc
index fc27631..392faf1 100644
--- a/net/cookies/cookie_util_unittest.cc
+++ b/net/cookies/cookie_util_unittest.cc
@@ -43,8 +43,6 @@
   EXPECT_EQ(str_expected, net::cookie_util::SerializeRequestCookieLine(prc));
 }
 
-} // namespace
-
 TEST(CookieUtilTest, TestDomainIsHostOnly) {
   const struct {
     const char* str;
@@ -194,3 +192,20 @@
     CheckSerialize(tests[i].parsed, tests[i].str);
   }
 }
+
+TEST(CookieUtilTest, TestGetEffectiveDomain) {
+  // Note: registry_controlled_domains::GetDomainAndRegistry is tested in its
+  // own unittests.
+  EXPECT_EQ("example.com",
+            net::cookie_util::GetEffectiveDomain("http", "www.example.com"));
+  EXPECT_EQ("example.com",
+            net::cookie_util::GetEffectiveDomain("https", "www.example.com"));
+  EXPECT_EQ("example.com",
+            net::cookie_util::GetEffectiveDomain("ws", "www.example.com"));
+  EXPECT_EQ("example.com",
+            net::cookie_util::GetEffectiveDomain("wss", "www.example.com"));
+  EXPECT_EQ("www.example.com",
+            net::cookie_util::GetEffectiveDomain("ftp", "www.example.com"));
+}
+
+}  // namespace
diff --git a/net/data/ssl/certificates/10_year_validity.pem b/net/data/ssl/certificates/10_year_validity.pem
new file mode 100644
index 0000000..007bda4
--- /dev/null
+++ b/net/data/ssl/certificates/10_year_validity.pem
@@ -0,0 +1,82 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 5 (0x5)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=Test Root CA
+        Validity
+            Not Before: Oct 30 00:00:00 2008 GMT
+            Not After : Oct 29 00:00:00 2018 GMT
+        Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:d7:0b:1b:f7:ce:03:86:eb:bd:cb:41:5b:31:e2:
+                    a7:fe:b8:2e:a6:3d:e9:ed:c5:21:ca:e7:aa:1e:8f:
+                    fb:e8:46:05:1f:64:af:7c:72:33:6b:80:41:a9:0b:
+                    79:ad:da:b2:4c:bd:28:76:0b:87:92:2a:fc:10:36:
+                    19:90:ec:97:e6:00:d3:a7:f6:7c:7c:41:a7:26:5d:
+                    e7:f9:64:49:1f:1e:89:09:a3:08:e6:14:f8:da:52:
+                    be:d8:f1:b2:8b:2a:ad:a8:15:02:df:de:89:86:d2:
+                    88:3d:b5:2a:72:c4:77:18:f2:8e:48:2c:5f:9d:85:
+                    77:2a:9d:36:3d:62:ea:04:1b:ad:3f:7e:53:3d:c9:
+                    3f:5e:de:02:0c:2f:1e:a5:b2:9c:d1:03:ce:5d:a6:
+                    88:28:29:bc:40:96:6d:e8:fd:99:1f:31:73:ab:a6:
+                    2b:de:51:28:e4:0f:24:12:29:6d:69:11:63:10:06:
+                    c0:ab:b6:d1:7a:2c:9e:85:ee:93:4c:5e:2a:3d:82:
+                    36:60:5f:ae:cd:d4:e3:3c:c9:33:5b:5e:fe:f8:8f:
+                    7d:6b:09:01:99:dd:51:cf:c3:2c:69:ca:28:fc:0b:
+                    4f:95:89:52:b1:f7:6b:0f:c9:46:31:b0:61:88:ac:
+                    0e:c5:2e:45:9a:f3:64:33:01:7c:d4:52:b9:f3:69:
+                    af:91
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: critical
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                F4:E5:35:90:3B:34:F5:54:E9:40:D2:16:33:BE:45:0C:1C:AE:05:7B
+            X509v3 Authority Key Identifier: 
+                keyid:68:27:28:DC:F4:82:CD:72:02:F3:82:88:1E:BC:30:00:E6:7E:79:23
+
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, TLS Web Client Authentication
+            X509v3 Subject Alternative Name: 
+                IP Address:127.0.0.1
+    Signature Algorithm: sha256WithRSAEncryption
+         08:2e:a1:67:a4:4b:5c:4e:5c:63:a8:c5:21:93:6e:ef:37:97:
+         5a:96:89:01:65:4d:2e:b8:78:58:28:ce:33:a7:6b:7f:85:c1:
+         d2:0c:5a:bd:ff:f8:96:4b:13:99:6a:9b:f8:ff:32:93:75:99:
+         6f:44:7b:13:0b:df:cd:d0:2e:2f:5d:2b:41:8e:aa:05:f0:1c:
+         60:27:e7:76:b5:8f:20:45:f8:6c:22:f9:34:f1:c7:70:41:1c:
+         9f:6c:d4:08:7f:fb:aa:8f:4e:3b:69:b5:61:e5:e0:b0:bd:0e:
+         c8:d4:6c:45:8a:f4:2c:3d:3a:16:3b:b4:59:4d:6c:1e:a6:fb:
+         00:ab:d2:9e:0b:00:02:ae:47:c7:06:14:c0:69:0d:21:96:f8:
+         86:d6:f2:ad:34:dd:69:66:63:ed:b3:65:50:89:ef:83:c0:d0:
+         d6:63:a3:5f:e8:64:2b:25:22:92:78:c2:29:e4:84:8b:8e:69:
+         2b:9e:0f:59:e7:b1:06:4c:e8:67:9c:95:8a:b8:4f:26:ed:09:
+         2b:37:69:12:68:9d:6d:03:70:06:bf:45:79:d7:0d:78:d8:9b:
+         df:68:54:2e:56:b4:e5:82:22:50:4d:09:98:fc:ae:0c:28:cc:
+         d6:a6:ce:04:7b:ea:10:d4:03:97:a8:76:3c:d6:4c:ac:0b:20:
+         2e:4c:22:89
+-----BEGIN CERTIFICATE-----
+MIIDczCCAlugAwIBAgIBBTANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IFJvb3QgQ0EwHhcNMDgxMDMwMDAwMDAwWhcNMTgxMDI5MDAwMDAwWjBgMQswCQYD
+VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4g
+VmlldzEQMA4GA1UECgwHVGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1wsb984Dhuu9y0FbMeKn/rgupj3p
+7cUhyueqHo/76EYFH2SvfHIza4BBqQt5rdqyTL0odguHkir8EDYZkOyX5gDTp/Z8
+fEGnJl3n+WRJHx6JCaMI5hT42lK+2PGyiyqtqBUC396JhtKIPbUqcsR3GPKOSCxf
+nYV3Kp02PWLqBButP35TPck/Xt4CDC8epbKc0QPOXaaIKCm8QJZt6P2ZHzFzq6Yr
+3lEo5A8kEiltaRFjEAbAq7bReiyehe6TTF4qPYI2YF+uzdTjPMkzW17++I99awkB
+md1Rz8Msacoo/AtPlYlSsfdrD8lGMbBhiKwOxS5FmvNkMwF81FK582mvkQIDAQAB
+o4GAMH4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU9OU1kDs09VTpQNIWM75FDByu
+BXswHwYDVR0jBBgwFoAUaCco3PSCzXIC84KIHrwwAOZ+eSMwHQYDVR0lBBYwFAYI
+KwYBBQUHAwEGCCsGAQUFBwMCMA8GA1UdEQQIMAaHBH8AAAEwDQYJKoZIhvcNAQEL
+BQADggEBAAguoWekS1xOXGOoxSGTbu83l1qWiQFlTS64eFgozjOna3+FwdIMWr3/
++JZLE5lqm/j/MpN1mW9EexML383QLi9dK0GOqgXwHGAn53a1jyBF+Gwi+TTxx3BB
+HJ9s1Ah/+6qPTjtptWHl4LC9DsjUbEWK9Cw9OhY7tFlNbB6m+wCr0p4LAAKuR8cG
+FMBpDSGW+IbW8q003WlmY+2zZVCJ74PA0NZjo1/oZCslIpJ4winkhIuOaSueD1nn
+sQZM6GeclYq4TybtCSs3aRJonW0DcAa/RXnXDXjYm99oVC5WtOWCIlBNCZj8rgwo
+zNamzgR76hDUA5eodjzWTKwLIC5MIok=
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/11_year_validity.pem b/net/data/ssl/certificates/11_year_validity.pem
new file mode 100644
index 0000000..3e69b63
--- /dev/null
+++ b/net/data/ssl/certificates/11_year_validity.pem
@@ -0,0 +1,82 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 6 (0x6)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=Test Root CA
+        Validity
+            Not Before: Oct 30 00:00:00 2014 GMT
+            Not After : Oct 30 00:00:00 2025 GMT
+        Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:d7:f7:09:26:5f:1c:c4:93:f4:16:d5:84:61:f5:
+                    d9:93:eb:f2:c6:38:96:7f:a7:fe:ea:6b:88:68:bd:
+                    8a:81:5a:47:16:eb:54:5f:db:3c:98:21:b7:89:49:
+                    cf:3c:c3:4d:ad:7f:54:d0:16:34:16:cb:66:4b:c9:
+                    86:c6:42:72:62:68:85:5d:ee:2c:18:9e:2f:99:06:
+                    89:f4:a6:8f:cd:65:48:d0:0f:98:08:46:ad:3c:30:
+                    0c:0c:85:50:66:66:2e:39:2a:d1:4c:6b:be:46:ce:
+                    33:be:d1:ec:2a:66:a7:a0:39:4a:c2:74:2a:1a:08:
+                    d1:06:4d:ec:9d:42:69:61:8f:7c:e3:89:9f:a3:e4:
+                    fe:65:bd:12:1d:1e:e8:81:9d:f4:89:93:9c:80:7c:
+                    14:aa:00:da:ed:f9:49:1a:f6:b0:c9:80:c7:fb:79:
+                    b6:b5:26:88:74:52:fd:38:3a:cc:49:81:43:2a:d7:
+                    73:7f:a5:9e:78:a4:ca:55:2d:65:ee:1b:42:73:c4:
+                    07:3a:18:1e:45:9b:d5:26:be:d2:34:9d:ad:58:98:
+                    a7:27:70:c4:aa:61:36:51:59:4a:4c:49:b4:4e:7f:
+                    59:63:3a:9f:fb:4d:5b:fd:b6:79:35:eb:06:9e:9b:
+                    fb:90:40:99:4c:ec:07:fd:c4:2e:1a:fa:66:f5:ad:
+                    b8:bd
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: critical
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                97:61:9A:BC:B0:3B:CC:C3:44:D4:34:31:0A:3F:58:9E:4B:EB:33:95
+            X509v3 Authority Key Identifier: 
+                keyid:CA:0B:EE:C3:20:AD:63:FC:89:FA:71:69:49:E6:38:78:EC:F9:C6:55
+
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, TLS Web Client Authentication
+            X509v3 Subject Alternative Name: 
+                IP Address:127.0.0.1
+    Signature Algorithm: sha256WithRSAEncryption
+         30:97:5c:3b:08:b5:5c:f4:13:ad:16:4a:b4:2f:a9:10:f5:9c:
+         5b:58:11:d8:87:53:3c:41:fb:ba:0e:98:7a:5a:aa:9c:b4:1e:
+         f6:ee:da:56:52:6a:ac:74:2f:6b:d8:c3:4e:b2:c5:ef:6b:55:
+         2d:6e:1a:83:2c:63:ac:69:a0:1a:2b:18:a2:18:e7:30:9a:5a:
+         35:c2:8e:1d:5f:4e:68:e3:40:97:78:e6:f1:37:5b:d9:ea:06:
+         84:b3:65:4a:12:0c:7d:66:c4:97:f9:d1:6d:66:21:8e:52:fc:
+         61:6b:0a:78:c7:0d:75:2d:8b:c6:1b:80:5a:f1:e7:ad:7f:a5:
+         84:e6:16:b9:f7:89:84:84:0b:44:f7:a6:38:d6:3f:34:87:4e:
+         17:08:2b:18:00:d7:c5:25:4c:35:40:95:78:a2:26:ef:96:5e:
+         d1:9f:a3:0f:62:ca:5a:2e:13:4e:cd:43:3e:31:dd:3d:b1:77:
+         c2:23:b7:79:f4:1a:fa:81:07:ae:9d:c5:8a:4c:15:24:43:97:
+         d7:b4:d8:c1:11:ba:08:66:76:5d:05:be:13:00:63:2c:77:21:
+         25:fc:38:95:8d:e6:f0:10:90:22:38:57:9a:62:7e:5a:1f:71:
+         3a:bf:3b:b0:d7:29:0d:8a:df:e5:0d:00:72:74:92:0e:9b:4a:
+         7e:97:98:b4
+-----BEGIN CERTIFICATE-----
+MIIDczCCAlugAwIBAgIBBjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IFJvb3QgQ0EwHhcNMTQxMDMwMDAwMDAwWhcNMjUxMDMwMDAwMDAwWjBgMQswCQYD
+VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4g
+VmlldzEQMA4GA1UECgwHVGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1/cJJl8cxJP0FtWEYfXZk+vyxjiW
+f6f+6muIaL2KgVpHFutUX9s8mCG3iUnPPMNNrX9U0BY0FstmS8mGxkJyYmiFXe4s
+GJ4vmQaJ9KaPzWVI0A+YCEatPDAMDIVQZmYuOSrRTGu+Rs4zvtHsKmanoDlKwnQq
+GgjRBk3snUJpYY9844mfo+T+Zb0SHR7ogZ30iZOcgHwUqgDa7flJGvawyYDH+3m2
+tSaIdFL9ODrMSYFDKtdzf6WeeKTKVS1l7htCc8QHOhgeRZvVJr7SNJ2tWJinJ3DE
+qmE2UVlKTEm0Tn9ZYzqf+01b/bZ5NesGnpv7kECZTOwH/cQuGvpm9a24vQIDAQAB
+o4GAMH4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUl2GavLA7zMNE1DQxCj9Ynkvr
+M5UwHwYDVR0jBBgwFoAUygvuwyCtY/yJ+nFpSeY4eOz5xlUwHQYDVR0lBBYwFAYI
+KwYBBQUHAwEGCCsGAQUFBwMCMA8GA1UdEQQIMAaHBH8AAAEwDQYJKoZIhvcNAQEL
+BQADggEBADCXXDsItVz0E60WSrQvqRD1nFtYEdiHUzxB+7oOmHpaqpy0Hvbu2lZS
+aqx0L2vYw06yxe9rVS1uGoMsY6xpoBorGKIY5zCaWjXCjh1fTmjjQJd45vE3W9nq
+BoSzZUoSDH1mxJf50W1mIY5S/GFrCnjHDXUti8YbgFrx561/pYTmFrn3iYSEC0T3
+pjjWPzSHThcIKxgA18UlTDVAlXiiJu+WXtGfow9iylouE07NQz4x3T2xd8Ijt3n0
+GvqBB66dxYpMFSRDl9e02MERughmdl0FvhMAYyx3ISX8OJWN5vAQkCI4V5piflof
+cTq/O7DXKQ2K3+UNAHJ0kg6bSn6XmLQ=
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/39_months_after_2015_04.pem b/net/data/ssl/certificates/39_months_after_2015_04.pem
new file mode 100644
index 0000000..5027de8
--- /dev/null
+++ b/net/data/ssl/certificates/39_months_after_2015_04.pem
@@ -0,0 +1,82 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 7 (0x7)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=Test Root CA
+        Validity
+            Not Before: Apr  2 00:00:00 2015 GMT
+            Not After : Jul  2 00:00:00 2018 GMT
+        Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:eb:c3:3b:8e:08:b4:9d:a5:ab:35:d2:ab:9e:bb:
+                    3f:e6:fc:c0:5f:59:f0:40:f9:1d:d3:90:09:78:27:
+                    1d:78:71:9f:40:6b:71:f4:3b:1c:63:f4:44:1e:fc:
+                    09:66:5b:6d:20:d3:dd:42:f5:12:d0:ce:65:8b:28:
+                    5e:99:14:86:38:ca:e0:f6:2b:df:d8:99:e8:c6:4c:
+                    b6:7e:3a:dd:45:89:4b:a5:98:81:26:14:4b:97:39:
+                    be:ad:2d:53:64:fb:3d:2e:e8:e2:e7:92:3b:ed:81:
+                    29:67:96:0c:0d:67:ed:6c:52:27:c7:fb:61:43:57:
+                    bc:5f:c5:08:2d:3f:97:92:33:f1:a4:a6:ea:02:c8:
+                    cd:bd:01:62:d3:63:2b:91:c4:b6:5d:03:13:11:bc:
+                    b2:72:13:90:2f:db:0d:34:79:e8:01:a0:fd:23:ed:
+                    22:10:c9:d8:ad:60:e1:79:a5:75:24:aa:13:7c:4d:
+                    71:c5:1d:94:92:ad:25:66:fa:b8:91:12:42:cd:8c:
+                    2e:e9:2e:5f:3f:b5:1f:ae:7e:09:7b:88:b8:93:c2:
+                    58:65:33:7b:2f:a2:71:45:e0:d4:79:1c:d4:8c:e7:
+                    6d:ff:bf:b3:59:b9:b0:a0:f2:fc:e6:8a:7d:31:1a:
+                    bc:2e:38:3a:ce:16:85:47:a3:87:c5:f6:43:21:cb:
+                    56:eb
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: critical
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                A9:39:E6:EB:3E:23:03:3A:4E:81:DC:F7:6D:77:83:46:8B:F0:8C:0E
+            X509v3 Authority Key Identifier: 
+                keyid:CA:0B:EE:C3:20:AD:63:FC:89:FA:71:69:49:E6:38:78:EC:F9:C6:55
+
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, TLS Web Client Authentication
+            X509v3 Subject Alternative Name: 
+                IP Address:127.0.0.1
+    Signature Algorithm: sha256WithRSAEncryption
+         ad:bd:f3:9d:e7:c9:0c:41:fa:c2:1c:a4:59:03:e3:ab:64:b0:
+         c9:3a:f6:9a:d8:fb:05:52:95:0d:d9:d0:fa:10:d4:2e:66:81:
+         b5:3b:11:01:f6:93:8d:2b:2f:f4:97:50:3c:36:3a:de:5d:eb:
+         3e:93:d8:84:86:a2:dd:08:a7:b7:50:0b:df:18:a7:b7:5a:4b:
+         d3:99:69:ae:04:70:60:6f:76:1e:6f:69:15:fe:98:6e:a7:aa:
+         d8:7f:05:2e:da:16:fc:ff:fd:15:19:e2:3c:9e:82:70:29:0e:
+         79:fb:2c:41:59:86:3d:aa:53:ee:b3:10:79:3e:d6:d6:5d:b1:
+         b9:bf:5a:83:3a:d4:3b:1e:98:97:bb:cf:79:ee:83:d1:4d:31:
+         42:5e:7f:44:19:15:1f:65:bd:6c:ad:c1:b8:dc:2b:bb:64:d3:
+         76:eb:8c:d6:79:7a:ab:55:20:9b:02:79:c5:f8:80:01:45:c8:
+         0d:ce:54:be:5d:24:44:ea:52:54:f3:e2:9b:cd:20:7d:70:e6:
+         d2:ed:d6:51:d0:0c:fa:5d:73:93:40:39:37:bf:f6:4a:98:46:
+         e9:41:d7:21:3a:a9:3f:06:c8:b1:12:c9:3e:a6:69:cb:fd:e0:
+         05:5f:03:e6:e4:8d:20:25:b6:18:2f:74:a4:50:a0:cb:1b:6e:
+         46:d1:ad:a2
+-----BEGIN CERTIFICATE-----
+MIIDczCCAlugAwIBAgIBBzANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IFJvb3QgQ0EwHhcNMTUwNDAyMDAwMDAwWhcNMTgwNzAyMDAwMDAwWjBgMQswCQYD
+VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4g
+VmlldzEQMA4GA1UECgwHVGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA68M7jgi0naWrNdKrnrs/5vzAX1nw
+QPkd05AJeCcdeHGfQGtx9DscY/REHvwJZlttINPdQvUS0M5liyhemRSGOMrg9ivf
+2Jnoxky2fjrdRYlLpZiBJhRLlzm+rS1TZPs9Luji55I77YEpZ5YMDWftbFInx/th
+Q1e8X8UILT+XkjPxpKbqAsjNvQFi02MrkcS2XQMTEbyychOQL9sNNHnoAaD9I+0i
+EMnYrWDheaV1JKoTfE1xxR2Ukq0lZvq4kRJCzYwu6S5fP7Ufrn4Je4i4k8JYZTN7
+L6JxReDUeRzUjOdt/7+zWbmwoPL85op9MRq8Ljg6zhaFR6OHxfZDIctW6wIDAQAB
+o4GAMH4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUqTnm6z4jAzpOgdz3bXeDRovw
+jA4wHwYDVR0jBBgwFoAUygvuwyCtY/yJ+nFpSeY4eOz5xlUwHQYDVR0lBBYwFAYI
+KwYBBQUHAwEGCCsGAQUFBwMCMA8GA1UdEQQIMAaHBH8AAAEwDQYJKoZIhvcNAQEL
+BQADggEBAK29853nyQxB+sIcpFkD46tksMk69prY+wVSlQ3Z0PoQ1C5mgbU7EQH2
+k40rL/SXUDw2Ot5d6z6T2ISGot0Ip7dQC98Yp7daS9OZaa4EcGBvdh5vaRX+mG6n
+qth/BS7aFvz//RUZ4jyegnApDnn7LEFZhj2qU+6zEHk+1tZdsbm/WoM61DsemJe7
+z3nug9FNMUJef0QZFR9lvWytwbjcK7tk03brjNZ5eqtVIJsCecX4gAFFyA3OVL5d
+JETqUlTz4pvNIH1w5tLt1lHQDPpdc5NAOTe/9kqYRulB1yE6qT8GyLESyT6macv9
+4AVfA+bkjSAlthgvdKRQoMsbbkbRraI=
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/40_months_after_2015_04.pem b/net/data/ssl/certificates/40_months_after_2015_04.pem
new file mode 100644
index 0000000..870fefa
--- /dev/null
+++ b/net/data/ssl/certificates/40_months_after_2015_04.pem
@@ -0,0 +1,82 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 8 (0x8)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=Test Root CA
+        Validity
+            Not Before: Apr  2 00:00:00 2015 GMT
+            Not After : Aug  1 00:00:00 2018 GMT
+        Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:ca:f6:72:04:1c:c2:c0:19:16:2a:2c:f4:c2:6d:
+                    39:46:7e:c5:df:2f:5e:47:1c:9f:38:56:fd:22:69:
+                    fc:ba:f1:50:fb:93:33:13:8e:f7:c0:c7:3f:54:68:
+                    89:f7:d0:1a:59:98:f2:57:a3:4b:01:c5:0a:85:a9:
+                    44:85:4e:60:8b:87:60:c3:a7:90:d1:4b:92:a1:22:
+                    26:ac:87:bb:30:f9:55:78:57:d3:38:14:3d:d9:6a:
+                    6e:90:76:75:54:2e:9c:ba:95:d2:65:37:54:de:07:
+                    e5:b0:a1:91:c1:d6:f1:e2:2e:93:49:9e:4e:c3:66:
+                    92:19:77:b4:ee:7d:18:99:37:27:2e:04:59:a0:ea:
+                    c7:d4:6c:56:c6:72:6f:0f:b3:5e:3b:c0:1a:26:4d:
+                    6b:4d:c4:7f:66:1f:e3:72:83:0a:39:b5:08:4d:c2:
+                    c0:49:b9:32:33:e3:7a:ba:00:36:b2:c3:0b:bd:d0:
+                    4a:d2:88:e7:bd:f9:6a:32:99:8a:c3:aa:9e:7a:1d:
+                    ae:71:35:d6:3a:a9:c1:ea:a6:2f:18:e1:15:a2:b7:
+                    db:8e:02:3b:ab:aa:a4:2c:d6:4f:60:d2:8d:bc:4a:
+                    0d:7c:d8:5e:0a:fb:fe:83:96:10:1f:d5:14:ab:0e:
+                    74:da:b8:b4:51:25:ec:ad:76:13:dd:1a:c7:55:e4:
+                    26:c7
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: critical
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                29:36:90:2F:BA:C1:EA:FD:D8:E1:4F:5E:D7:C2:9A:15:EA:1A:35:3C
+            X509v3 Authority Key Identifier: 
+                keyid:CA:0B:EE:C3:20:AD:63:FC:89:FA:71:69:49:E6:38:78:EC:F9:C6:55
+
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, TLS Web Client Authentication
+            X509v3 Subject Alternative Name: 
+                IP Address:127.0.0.1
+    Signature Algorithm: sha256WithRSAEncryption
+         a5:a6:54:39:60:ca:39:94:e0:da:01:a1:3a:7b:1f:c1:33:61:
+         4f:8d:57:2e:20:31:4f:11:29:bd:c3:8c:db:90:48:b3:3d:d6:
+         c9:ad:0b:5e:45:d3:fa:ee:1e:b4:ed:44:bf:21:d1:6a:b7:87:
+         bc:38:97:95:e1:d1:02:26:58:ac:b6:fc:01:8a:f1:cf:b6:a2:
+         1a:b5:01:6c:fb:ce:33:61:be:d6:88:63:a7:94:76:2f:62:c2:
+         2b:53:fb:d5:f8:12:0d:bd:d1:31:73:2c:65:87:a7:09:e2:49:
+         9f:7a:38:c5:91:65:d8:69:10:93:ec:99:eb:17:c9:af:b3:1b:
+         5e:34:2a:94:31:e8:8e:d2:19:86:46:c8:9b:0f:10:1f:ed:d3:
+         c8:d6:98:11:93:86:5d:49:01:19:db:01:c4:73:82:b2:41:6d:
+         be:0d:45:b0:4c:ad:e9:77:25:0f:a8:ff:a6:8e:60:8f:ca:58:
+         19:b2:cb:9b:88:a2:44:2b:a2:2f:58:aa:09:6a:2a:55:51:e3:
+         7c:68:35:8a:83:09:c9:c7:44:ae:ea:9c:58:b5:4f:33:0f:24:
+         f9:ee:9f:11:a0:28:04:98:7d:f8:e9:9c:48:d3:7c:8e:08:18:
+         b9:92:21:40:75:0f:36:96:ff:0f:ff:30:23:5c:0b:9d:e5:9a:
+         5e:24:50:e3
+-----BEGIN CERTIFICATE-----
+MIIDczCCAlugAwIBAgIBCDANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IFJvb3QgQ0EwHhcNMTUwNDAyMDAwMDAwWhcNMTgwODAxMDAwMDAwWjBgMQswCQYD
+VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4g
+VmlldzEQMA4GA1UECgwHVGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyvZyBBzCwBkWKiz0wm05Rn7F3y9e
+RxyfOFb9Imn8uvFQ+5MzE473wMc/VGiJ99AaWZjyV6NLAcUKhalEhU5gi4dgw6eQ
+0UuSoSImrIe7MPlVeFfTOBQ92WpukHZ1VC6cupXSZTdU3gflsKGRwdbx4i6TSZ5O
+w2aSGXe07n0YmTcnLgRZoOrH1GxWxnJvD7NeO8AaJk1rTcR/Zh/jcoMKObUITcLA
+SbkyM+N6ugA2ssMLvdBK0ojnvflqMpmKw6qeeh2ucTXWOqnB6qYvGOEVorfbjgI7
+q6qkLNZPYNKNvEoNfNheCvv+g5YQH9UUqw502ri0USXsrXYT3RrHVeQmxwIDAQAB
+o4GAMH4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUKTaQL7rB6v3Y4U9e18KaFeoa
+NTwwHwYDVR0jBBgwFoAUygvuwyCtY/yJ+nFpSeY4eOz5xlUwHQYDVR0lBBYwFAYI
+KwYBBQUHAwEGCCsGAQUFBwMCMA8GA1UdEQQIMAaHBH8AAAEwDQYJKoZIhvcNAQEL
+BQADggEBAKWmVDlgyjmU4NoBoTp7H8EzYU+NVy4gMU8RKb3DjNuQSLM91smtC15F
+0/ruHrTtRL8h0Wq3h7w4l5Xh0QImWKy2/AGK8c+2ohq1AWz7zjNhvtaIY6eUdi9i
+witT+9X4Eg290TFzLGWHpwniSZ96OMWRZdhpEJPsmesXya+zG140KpQx6I7SGYZG
+yJsPEB/t08jWmBGThl1JARnbAcRzgrJBbb4NRbBMrel3JQ+o/6aOYI/KWBmyy5uI
+okQroi9YqglqKlVR43xoNYqDCcnHRK7qnFi1TzMPJPnunxGgKASYffjpnEjTfI4I
+GLmSIUB1DzaW/w//MCNcC53lml4kUOM=
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/60_months_after_2012_07.pem b/net/data/ssl/certificates/60_months_after_2012_07.pem
new file mode 100644
index 0000000..38b5824
--- /dev/null
+++ b/net/data/ssl/certificates/60_months_after_2012_07.pem
@@ -0,0 +1,82 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 9 (0x9)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=Test Root CA
+        Validity
+            Not Before: Oct 30 00:00:00 2014 GMT
+            Not After : Sep 30 00:00:00 2019 GMT
+        Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:d0:ce:ff:98:a7:74:c4:bd:de:de:d3:b3:5a:fe:
+                    14:0f:ee:44:f8:08:cc:5e:bf:79:c9:be:0a:dc:ce:
+                    b9:73:c4:af:c2:3d:35:6a:6f:a3:ed:5e:21:63:a2:
+                    e1:39:c5:c3:0c:82:dd:da:e7:5f:c1:21:5d:34:0d:
+                    e9:e3:2a:bf:6f:a8:9e:5a:74:a9:6c:57:83:c1:35:
+                    f6:ce:58:78:0d:56:5a:f1:72:b9:62:12:76:50:fe:
+                    71:ef:e7:44:bb:47:e1:a4:fa:d6:03:5e:8f:a9:24:
+                    50:8f:e2:c2:8a:65:b6:57:8f:ee:0c:c9:2c:b9:9c:
+                    05:cf:38:36:c0:72:d6:fe:d6:da:2b:95:24:a4:93:
+                    d2:62:6d:a4:b0:03:d1:36:1e:75:16:91:3e:f6:0f:
+                    a0:b5:8f:77:75:af:b2:10:bc:78:9f:9c:73:31:ac:
+                    06:11:d9:32:29:9c:da:66:ff:fc:d8:b3:70:8f:f8:
+                    df:67:06:e1:9c:a1:ea:ec:f1:e8:92:52:aa:9e:35:
+                    c6:0c:d2:62:24:b0:ef:3e:9c:49:a7:b6:ee:de:2e:
+                    9c:56:6d:f5:0d:bb:e3:84:2b:b0:e2:7f:be:35:5a:
+                    02:50:d2:70:c4:a0:ed:a1:ab:28:99:d0:62:80:ef:
+                    c1:26:6a:39:ab:28:e0:73:86:f4:da:50:91:ac:b4:
+                    e3:21
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: critical
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                F3:14:F0:CF:F0:35:C1:32:21:09:26:7C:D4:17:38:F6:09:58:FB:F4
+            X509v3 Authority Key Identifier: 
+                keyid:85:AE:CA:C3:6C:F0:FC:C1:65:AF:18:CA:AB:FF:25:3F:54:9A:BF:EC
+
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, TLS Web Client Authentication
+            X509v3 Subject Alternative Name: 
+                IP Address:127.0.0.1
+    Signature Algorithm: sha256WithRSAEncryption
+         a0:ae:29:07:a4:72:63:78:32:8c:41:e1:e0:43:9f:e7:a3:88:
+         c7:75:25:55:e7:22:eb:18:8a:d3:af:11:e4:08:bd:70:4a:dc:
+         90:3f:14:64:3b:ad:22:57:09:68:cf:94:1e:b9:93:2d:41:c2:
+         f9:04:7e:a1:51:48:ab:34:29:e4:34:c2:2c:7d:0f:34:fe:ae:
+         e9:c1:18:28:07:9f:96:71:76:76:2f:e7:7f:bd:9d:84:97:4a:
+         0c:b1:b3:2a:a9:c6:7e:78:9e:cb:f7:29:8a:82:74:15:8e:91:
+         bc:36:26:38:f4:c8:94:e0:02:ff:47:fb:1e:ca:fd:f9:fb:fe:
+         7d:15:cd:6f:36:7b:08:54:38:fd:ca:d0:c7:22:84:7e:58:5b:
+         f3:a4:7b:49:cb:9b:e0:23:36:2c:eb:b1:6d:34:12:7a:f1:12:
+         67:59:02:d9:9f:4d:3a:01:3e:06:aa:00:37:c0:be:fe:de:6c:
+         c6:b4:33:17:df:d2:b3:95:4c:ef:4a:8e:39:03:2c:2e:56:5c:
+         82:2e:c7:0b:be:51:52:05:8f:74:5d:5c:24:2d:15:4e:c4:41:
+         86:26:e6:96:28:91:a7:06:94:ab:14:7a:1f:0c:0b:aa:b5:97:
+         f0:25:b6:4a:15:8a:d8:b8:09:01:22:fc:4c:43:cf:de:45:dc:
+         0a:95:77:f6
+-----BEGIN CERTIFICATE-----
+MIIDczCCAlugAwIBAgIBCTANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IFJvb3QgQ0EwHhcNMTQxMDMwMDAwMDAwWhcNMTkwOTMwMDAwMDAwWjBgMQswCQYD
+VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4g
+VmlldzEQMA4GA1UECgwHVGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0M7/mKd0xL3e3tOzWv4UD+5E+AjM
+Xr95yb4K3M65c8Svwj01am+j7V4hY6LhOcXDDILd2udfwSFdNA3p4yq/b6ieWnSp
+bFeDwTX2zlh4DVZa8XK5YhJ2UP5x7+dEu0fhpPrWA16PqSRQj+LCimW2V4/uDMks
+uZwFzzg2wHLW/tbaK5UkpJPSYm2ksAPRNh51FpE+9g+gtY93da+yELx4n5xzMawG
+EdkyKZzaZv/82LNwj/jfZwbhnKHq7PHoklKqnjXGDNJiJLDvPpxJp7bu3i6cVm31
+DbvjhCuw4n++NVoCUNJwxKDtoasomdBigO/BJmo5qyjgc4b02lCRrLTjIQIDAQAB
+o4GAMH4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU8xTwz/A1wTIhCSZ81Bc49glY
++/QwHwYDVR0jBBgwFoAUha7Kw2zw/MFlrxjKq/8lP1Sav+wwHQYDVR0lBBYwFAYI
+KwYBBQUHAwEGCCsGAQUFBwMCMA8GA1UdEQQIMAaHBH8AAAEwDQYJKoZIhvcNAQEL
+BQADggEBAKCuKQekcmN4MoxB4eBDn+ejiMd1JVXnIusYitOvEeQIvXBK3JA/FGQ7
+rSJXCWjPlB65ky1BwvkEfqFRSKs0KeQ0wix9DzT+runBGCgHn5ZxdnYv53+9nYSX
+Sgyxsyqpxn54nsv3KYqCdBWOkbw2Jjj0yJTgAv9H+x7K/fn7/n0VzW82ewhUOP3K
+0McihH5YW/Oke0nLm+AjNizrsW00EnrxEmdZAtmfTToBPgaqADfAvv7ebMa0Mxff
+0rOVTO9KjjkDLC5WXIIuxwu+UVIFj3RdXCQtFU7EQYYm5pYokacGlKsUeh8MC6q1
+l/AltkoViti4CQEi/ExDz95F3AqVd/Y=
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/61_months_after_2012_07.pem b/net/data/ssl/certificates/61_months_after_2012_07.pem
new file mode 100644
index 0000000..eebdbc3
--- /dev/null
+++ b/net/data/ssl/certificates/61_months_after_2012_07.pem
@@ -0,0 +1,82 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 10 (0xa)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=Test Root CA
+        Validity
+            Not Before: Oct 30 00:00:00 2014 GMT
+            Not After : Dec 19 23:35:24 2019 GMT
+        Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:ce:0e:90:96:f2:40:37:c6:86:dd:af:b7:23:d5:
+                    01:87:bc:1e:9f:0d:f1:4b:eb:6f:85:14:64:fe:e4:
+                    47:f7:52:a8:52:22:9c:2e:6f:b5:f6:36:c0:70:27:
+                    e5:a9:8a:da:bd:04:06:1e:97:a4:48:06:56:2d:2a:
+                    d1:81:2f:be:4e:22:68:34:54:de:38:df:1e:84:b7:
+                    5f:17:89:a7:98:62:db:94:9e:ac:df:91:a6:d5:91:
+                    b5:c7:ae:89:6e:30:c1:5a:37:23:b8:d9:f8:b4:53:
+                    1b:f7:63:4f:2b:f9:c3:c7:37:1f:66:c7:e1:1c:d9:
+                    2b:68:b9:e5:58:65:68:e9:01:0b:fb:24:01:57:bc:
+                    c5:94:b8:c8:27:dd:c9:b4:44:16:30:2b:cd:11:62:
+                    68:48:07:22:4b:b7:e5:e9:42:34:17:4e:f3:c9:d1:
+                    77:7d:97:9a:ec:ec:58:35:5b:3e:2c:21:31:fe:57:
+                    98:16:3f:fc:cb:00:7b:4d:6b:d9:99:3e:29:69:ae:
+                    ef:01:64:4c:f7:cd:18:15:bd:48:19:e3:db:c1:a2:
+                    d2:40:c2:69:53:43:39:cd:a6:c2:3a:57:23:39:27:
+                    7c:9f:1f:21:3f:bc:e1:f9:0b:37:59:f0:fc:c1:6f:
+                    cf:2e:a9:59:d2:0d:32:dd:70:64:9a:e7:e8:eb:e4:
+                    69:53
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: critical
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                37:7B:6E:B4:DC:15:72:1F:4E:DB:39:37:A4:B1:F2:B7:7C:F8:C3:D5
+            X509v3 Authority Key Identifier: 
+                keyid:CA:0B:EE:C3:20:AD:63:FC:89:FA:71:69:49:E6:38:78:EC:F9:C6:55
+
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, TLS Web Client Authentication
+            X509v3 Subject Alternative Name: 
+                IP Address:127.0.0.1
+    Signature Algorithm: sha256WithRSAEncryption
+         90:d9:88:2f:6e:fe:22:5c:be:f3:97:f7:50:4e:a2:de:cc:7b:
+         33:c3:27:f3:38:15:46:f7:02:44:d4:87:84:23:15:44:8c:17:
+         6f:10:bc:15:1a:83:bd:6d:94:dd:f4:9f:aa:91:01:85:80:27:
+         88:af:e1:7a:54:9f:04:97:10:8b:05:b1:a2:4f:04:ff:36:a9:
+         c6:79:7d:2f:a1:49:f5:9a:ff:bb:5c:d8:f6:3f:54:d0:27:13:
+         fc:90:4b:e1:3f:ea:c8:98:65:3b:28:44:26:cb:45:14:62:f4:
+         b4:71:3a:d8:68:a2:ec:51:64:a3:d8:3b:80:a4:17:36:89:d3:
+         8b:de:2a:1b:dc:2d:3f:4b:9e:ab:34:09:8c:44:30:da:1a:09:
+         2f:61:cf:4b:7d:2f:14:7e:10:a3:a9:df:c6:db:68:77:43:92:
+         d1:df:93:ee:a6:54:f4:4d:cc:ea:a8:7a:b5:75:fc:25:1f:8e:
+         6b:8e:50:ee:13:aa:7b:19:bc:63:0c:3f:b3:af:ee:2d:f3:42:
+         40:dd:de:26:18:44:e0:06:a7:4d:17:93:a3:9d:81:da:1f:7f:
+         81:55:46:5e:8f:44:5a:06:4a:fb:7c:43:95:20:97:d8:5b:d8:
+         c0:8c:31:03:21:ce:16:4a:f0:8f:41:69:6d:25:71:c9:79:3b:
+         82:d2:2c:22
+-----BEGIN CERTIFICATE-----
+MIIDczCCAlugAwIBAgIBCjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IFJvb3QgQ0EwHhcNMTQxMDMwMDAwMDAwWhcNMTkxMjE5MjMzNTI0WjBgMQswCQYD
+VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4g
+VmlldzEQMA4GA1UECgwHVGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzg6QlvJAN8aG3a+3I9UBh7wenw3x
+S+tvhRRk/uRH91KoUiKcLm+19jbAcCflqYravQQGHpekSAZWLSrRgS++TiJoNFTe
+ON8ehLdfF4mnmGLblJ6s35Gm1ZG1x66JbjDBWjcjuNn4tFMb92NPK/nDxzcfZsfh
+HNkraLnlWGVo6QEL+yQBV7zFlLjIJ93JtEQWMCvNEWJoSAciS7fl6UI0F07zydF3
+fZea7OxYNVs+LCEx/leYFj/8ywB7TWvZmT4paa7vAWRM980YFb1IGePbwaLSQMJp
+U0M5zabCOlcjOSd8nx8hP7zh+Qs3WfD8wW/PLqlZ0g0y3XBkmufo6+RpUwIDAQAB
+o4GAMH4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUN3tutNwVch9O2zk3pLHyt3z4
+w9UwHwYDVR0jBBgwFoAUygvuwyCtY/yJ+nFpSeY4eOz5xlUwHQYDVR0lBBYwFAYI
+KwYBBQUHAwEGCCsGAQUFBwMCMA8GA1UdEQQIMAaHBH8AAAEwDQYJKoZIhvcNAQEL
+BQADggEBAJDZiC9u/iJcvvOX91BOot7MezPDJ/M4FUb3AkTUh4QjFUSMF28QvBUa
+g71tlN30n6qRAYWAJ4iv4XpUnwSXEIsFsaJPBP82qcZ5fS+hSfWa/7tc2PY/VNAn
+E/yQS+E/6siYZTsoRCbLRRRi9LRxOthoouxRZKPYO4CkFzaJ04veKhvcLT9Lnqs0
+CYxEMNoaCS9hz0t9LxR+EKOp38bbaHdDktHfk+6mVPRNzOqoerV1/CUfjmuOUO4T
+qnsZvGMMP7Ov7i3zQkDd3iYYROAGp00Xk6Odgdoff4FVRl6PRFoGSvt8Q5Ugl9hb
+2MCMMQMhzhZK8I9BaW0lccl5O4LSLCI=
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/README b/net/data/ssl/certificates/README
index 5d1faf2..61d9785 100644
--- a/net/data/ssl/certificates/README
+++ b/net/data/ssl/certificates/README
@@ -70,6 +70,9 @@
 - comodo.chain.pem : A certificate chain for www.comodo.com which should be
      recognised as EV. Expires Jun 20 2015.
 
+- twitter-chain.pem : A certificate chain for twitter.com which should be
+     valid. Expires May 9 2016.
+
 ===== Manually generated certificates
 - client.p12 : A PKCS #12 file containing a client certificate and a private
      key created for testing.  The password is "12345".
@@ -129,8 +132,8 @@
 - expired_cert.pem
 - ok_cert.pem
 - root_ca_cert.pem
-     These certificates are the common certificates used by the Python test
-     server for simulating HTTPS connections.
+    These certificates are the common certificates used by the Python test
+    server for simulating HTTPS connections.
 
 - name_constraint_bad.pem
 - name_constraint_good.pem
@@ -147,6 +150,23 @@
 - punycodetest.pem : A test self-signed server certificate with punycode name.
      The common name is "xn--wgv71a119e.com" (日本語.com)
 
+- 10_year_validity.pem
+- 11_year_validity.pem
+- 39_months_after_2015_04.pem
+- 40_months_after_2015_04.pem
+- 60_months_after_2012_07.pem
+- 61_months_after_2012_07.pem
+- pre_br_validity_bad_121.pem
+- pre_br_validity_bad_2020.pem
+- pre_br_validity_ok.pem
+- start_after_expiry.pem
+    Certs to test that the maximum validity durations set by the CA/Browser
+    Forum Baseline Requirements are enforced.
+
+- reject_intranet_hosts.pem
+   A certificate with a non-IANA delegated domain, which is rejected since a CA
+   cannot validate the applicant controls that domain.
+
 ===== From net/data/ssl/scripts/generate-weak-test-chains.sh
 - 2048-rsa-root.pem
 - {768-rsa,1024-rsa,2048-rsa,prime256v1-ecdsa}-intermediate.pem
@@ -252,5 +272,3 @@
      containing the intermediate, which can be served via a URLRequestFilter.
      aia-intermediate.der is stored in DER form for convenience, since that is
      the form expected of certificates discovered via AIA.
-
-
diff --git a/net/data/ssl/certificates/pre_br_validity_bad_121.pem b/net/data/ssl/certificates/pre_br_validity_bad_121.pem
new file mode 100644
index 0000000..2c84c2b
--- /dev/null
+++ b/net/data/ssl/certificates/pre_br_validity_bad_121.pem
@@ -0,0 +1,82 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 10 (0xa)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=Test Root CA
+        Validity
+            Not Before: Jan  1 00:00:00 2008 GMT
+            Not After : May  1 00:00:00 2018 GMT
+        Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:e0:4b:de:53:9a:c3:32:75:8a:df:91:7b:fa:47:
+                    88:9c:d5:ac:88:6e:84:21:65:07:96:c6:0b:09:f9:
+                    16:b6:3b:1b:ae:9f:3e:48:8b:ac:ef:2e:71:38:3a:
+                    f9:21:b0:71:61:cd:1f:0f:fa:cc:48:d0:f4:2a:0f:
+                    82:90:3a:e5:f4:c5:12:d7:8e:d5:fb:9c:28:82:8e:
+                    49:2a:1f:38:81:21:ca:df:79:30:5d:33:ce:d4:20:
+                    1a:22:65:25:72:fe:72:9b:a2:56:50:c9:4f:cb:ed:
+                    75:18:be:1e:7d:c6:62:26:a8:9d:2d:1a:a4:ab:02:
+                    c2:1d:da:a7:dd:06:6a:0b:f2:97:91:27:dc:f0:c5:
+                    a0:5c:17:fd:18:71:a6:c4:1f:71:27:01:9f:4d:ee:
+                    77:64:51:4d:28:fc:f8:bb:8a:ab:ca:97:f4:ae:58:
+                    89:c0:3a:20:0c:d6:6b:56:c2:ff:d7:b1:6b:78:c8:
+                    2f:4f:46:67:a3:37:7f:66:8b:6b:4d:8d:35:c2:d0:
+                    f1:7b:d7:b8:f2:b0:75:e6:b8:77:bc:16:38:4d:83:
+                    ab:36:3d:48:e2:28:02:a3:35:88:53:aa:e8:01:a0:
+                    a1:2c:99:b1:9d:92:fe:9e:eb:a1:84:90:f5:32:0e:
+                    ff:a2:64:c5:12:7c:8b:57:40:75:bd:e7:81:c0:83:
+                    e2:35
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: critical
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                0F:E1:A5:2E:CA:40:B3:BF:40:51:3A:6B:85:09:E2:D1:00:8F:7D:25
+            X509v3 Authority Key Identifier: 
+                keyid:EE:54:52:3A:28:73:20:9D:56:2D:2A:98:F4:9C:B1:7D:FB:C5:22:47
+
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, TLS Web Client Authentication
+            X509v3 Subject Alternative Name: 
+                IP Address:127.0.0.1
+    Signature Algorithm: sha256WithRSAEncryption
+         35:f9:a3:c9:fb:f1:1d:52:2e:ce:a4:a6:f3:2a:eb:ec:19:39:
+         fd:4a:c6:ca:f4:2a:b1:cc:c5:62:8e:51:89:ec:8b:2c:11:87:
+         a6:df:7b:ad:5d:91:e0:ed:86:71:4c:89:1f:fa:cd:0d:08:02:
+         cb:c1:74:e4:80:c5:80:48:fb:63:63:c1:f7:c4:71:9b:ea:b6:
+         0e:6b:4f:e3:89:f5:fd:77:a3:fb:50:d1:bc:ec:64:a1:04:f7:
+         e8:e9:5d:57:fd:14:67:1c:19:25:a4:3e:90:31:0a:32:09:46:
+         c7:de:ca:f3:b7:47:d8:bd:5f:e3:45:4f:a9:37:8f:76:d1:bb:
+         0c:a0:3a:70:49:32:a6:ba:35:49:70:2a:cb:c3:b4:02:25:6d:
+         99:f9:4e:ff:49:d9:a0:b4:f5:fb:a5:bf:36:a5:c9:44:29:9a:
+         f8:82:3d:9e:bb:92:33:84:e7:77:7c:26:de:8d:00:78:a8:1b:
+         bd:e8:61:1b:ff:c2:b6:63:97:73:8a:ae:fe:23:07:58:fe:1c:
+         28:70:83:0c:c3:dc:e2:15:4e:2a:a8:9c:79:ba:5b:a1:66:cb:
+         7e:52:61:3a:a7:57:3b:70:1f:6a:e5:b2:57:61:00:be:d0:04:
+         c3:61:aa:50:40:52:a5:c8:8d:b9:3a:a6:48:72:70:21:af:ba:
+         fd:86:8d:57
+-----BEGIN CERTIFICATE-----
+MIIDczCCAlugAwIBAgIBCjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IFJvb3QgQ0EwHhcNMDgwMTAxMDAwMDAwWhcNMTgwNTAxMDAwMDAwWjBgMQswCQYD
+VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4g
+VmlldzEQMA4GA1UECgwHVGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4EveU5rDMnWK35F7+keInNWsiG6E
+IWUHlsYLCfkWtjsbrp8+SIus7y5xODr5IbBxYc0fD/rMSND0Kg+CkDrl9MUS147V
++5wogo5JKh84gSHK33kwXTPO1CAaImUlcv5ym6JWUMlPy+11GL4efcZiJqidLRqk
+qwLCHdqn3QZqC/KXkSfc8MWgXBf9GHGmxB9xJwGfTe53ZFFNKPz4u4qrypf0rliJ
+wDogDNZrVsL/17FreMgvT0Znozd/ZotrTY01wtDxe9e48rB15rh3vBY4TYOrNj1I
+4igCozWIU6roAaChLJmxnZL+nuuhhJD1Mg7/omTFEnyLV0B1veeBwIPiNQIDAQAB
+o4GAMH4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUD+GlLspAs79AUTprhQni0QCP
+fSUwHwYDVR0jBBgwFoAU7lRSOihzIJ1WLSqY9JyxffvFIkcwHQYDVR0lBBYwFAYI
+KwYBBQUHAwEGCCsGAQUFBwMCMA8GA1UdEQQIMAaHBH8AAAEwDQYJKoZIhvcNAQEL
+BQADggEBADX5o8n78R1SLs6kpvMq6+wZOf1Kxsr0KrHMxWKOUYnsiywRh6bfe61d
+keDthnFMiR/6zQ0IAsvBdOSAxYBI+2NjwffEcZvqtg5rT+OJ9f13o/tQ0bzsZKEE
+9+jpXVf9FGccGSWkPpAxCjIJRsfeyvO3R9i9X+NFT6k3j3bRuwygOnBJMqa6NUlw
+KsvDtAIlbZn5Tv9J2aC09fulvzalyUQpmviCPZ67kjOE53d8Jt6NAHioG73oYRv/
+wrZjl3OKrv4jB1j+HChwgwzD3OIVTiqonHm6W6Fmy35SYTqnVztwH2rlsldhAL7Q
+BMNhqlBAUqXIjbk6pkhycCGvuv2GjVc=
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/pre_br_validity_bad_2020.pem b/net/data/ssl/certificates/pre_br_validity_bad_2020.pem
new file mode 100644
index 0000000..2a4de2d
--- /dev/null
+++ b/net/data/ssl/certificates/pre_br_validity_bad_2020.pem
@@ -0,0 +1,82 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 11 (0xb)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=Test Root CA
+        Validity
+            Not Before: May  1 00:00:00 2012 GMT
+            Not After : Jul  3 00:00:00 2019 GMT
+        Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:ac:f5:76:f7:0e:a7:1b:fd:50:52:81:ae:bb:59:
+                    c5:21:00:6f:a4:ef:ca:e0:12:78:4a:f6:78:fc:8a:
+                    c8:d4:76:37:15:9e:7f:46:83:f3:c7:57:fa:ec:79:
+                    c4:51:4e:b5:76:09:07:2d:91:5d:7f:25:95:fa:98:
+                    59:66:84:b4:a3:01:be:3c:cd:2a:71:9e:83:82:94:
+                    4b:28:33:af:0a:57:a0:16:28:8f:9a:2b:7b:50:0c:
+                    e0:0e:3f:58:49:09:70:c5:99:17:ae:df:e0:83:98:
+                    09:0a:a8:a7:d6:ca:b4:86:49:03:86:f5:76:b5:0f:
+                    8a:a8:f2:b9:d3:f5:a5:32:b1:e8:50:5a:cf:45:7a:
+                    b9:81:26:08:69:24:d0:ac:ea:27:c4:69:0e:65:45:
+                    0f:cc:d4:b4:81:81:d0:e0:52:04:17:3e:74:fd:be:
+                    3b:de:29:11:41:7d:91:19:45:03:1a:8b:f9:93:ac:
+                    61:91:ce:4d:da:b2:1b:b1:2e:14:20:c3:44:78:17:
+                    70:1c:1e:cd:e2:86:bf:e4:63:b9:cb:aa:fa:1c:ae:
+                    63:4a:fe:a4:df:71:e7:ad:49:40:97:75:d4:b0:90:
+                    eb:9b:d1:92:07:a8:f1:b7:29:77:d7:17:c9:e6:55:
+                    5d:26:85:09:03:e9:b2:96:18:97:c6:7f:f7:1c:f9:
+                    2d:a7
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: critical
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                A2:3D:78:98:07:E9:84:62:82:AF:66:FF:8F:00:F4:9F:79:AA:EB:A5
+            X509v3 Authority Key Identifier: 
+                keyid:EE:54:52:3A:28:73:20:9D:56:2D:2A:98:F4:9C:B1:7D:FB:C5:22:47
+
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, TLS Web Client Authentication
+            X509v3 Subject Alternative Name: 
+                IP Address:127.0.0.1
+    Signature Algorithm: sha256WithRSAEncryption
+         3b:66:76:fa:c8:d3:a1:14:64:26:5b:e5:36:6c:e3:5f:53:fd:
+         dd:50:9e:01:36:2a:3a:08:ec:bc:1e:76:b5:fd:5f:39:a8:79:
+         a8:a7:9f:f0:8d:48:ba:d1:af:77:ed:bf:3a:1b:35:b7:ff:90:
+         1a:09:74:bf:1b:15:19:33:8b:f3:a8:61:da:c7:d0:fe:76:52:
+         15:5a:cf:a5:3d:c7:fc:05:c7:d2:e3:38:d3:ea:19:46:5b:94:
+         8e:75:aa:6e:ab:f3:64:47:7d:f5:65:93:68:54:a5:97:dc:f8:
+         1e:f5:fa:f4:8f:47:f6:d8:c5:85:67:6f:03:2f:82:67:0c:6f:
+         35:2a:e2:f3:c8:56:be:8f:59:3a:6a:fc:0a:e1:40:dc:28:53:
+         d0:1f:60:d1:2b:2c:a9:88:f3:82:63:67:1e:79:4e:0b:d5:90:
+         69:9e:91:af:57:9a:fc:db:5c:44:84:0e:dc:05:f7:91:ec:16:
+         9a:ad:b0:48:62:c5:3c:c0:ca:7f:43:06:34:ae:50:a0:2e:90:
+         fa:21:2b:14:1f:be:51:c3:4f:c6:c4:9e:60:e4:b7:1c:82:f1:
+         ef:9f:97:0c:bc:4a:90:86:35:90:da:e4:e7:83:80:8b:7c:7e:
+         82:89:cc:c3:67:90:42:30:7e:c1:ba:b0:59:ae:f5:29:88:75:
+         16:ff:df:2f
+-----BEGIN CERTIFICATE-----
+MIIDczCCAlugAwIBAgIBCzANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IFJvb3QgQ0EwHhcNMTIwNTAxMDAwMDAwWhcNMTkwNzAzMDAwMDAwWjBgMQswCQYD
+VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4g
+VmlldzEQMA4GA1UECgwHVGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArPV29w6nG/1QUoGuu1nFIQBvpO/K
+4BJ4SvZ4/IrI1HY3FZ5/RoPzx1f67HnEUU61dgkHLZFdfyWV+phZZoS0owG+PM0q
+cZ6DgpRLKDOvClegFiiPmit7UAzgDj9YSQlwxZkXrt/gg5gJCqin1sq0hkkDhvV2
+tQ+KqPK50/WlMrHoUFrPRXq5gSYIaSTQrOonxGkOZUUPzNS0gYHQ4FIEFz50/b47
+3ikRQX2RGUUDGov5k6xhkc5N2rIbsS4UIMNEeBdwHB7N4oa/5GO5y6r6HK5jSv6k
+33HnrUlAl3XUsJDrm9GSB6jxtyl31xfJ5lVdJoUJA+mylhiXxn/3HPktpwIDAQAB
+o4GAMH4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUoj14mAfphGKCr2b/jwD0n3mq
+66UwHwYDVR0jBBgwFoAU7lRSOihzIJ1WLSqY9JyxffvFIkcwHQYDVR0lBBYwFAYI
+KwYBBQUHAwEGCCsGAQUFBwMCMA8GA1UdEQQIMAaHBH8AAAEwDQYJKoZIhvcNAQEL
+BQADggEBADtmdvrI06EUZCZb5TZs419T/d1QngE2KjoI7LwedrX9Xzmoeainn/CN
+SLrRr3ftvzobNbf/kBoJdL8bFRkzi/OoYdrH0P52UhVaz6U9x/wFx9LjONPqGUZb
+lI51qm6r82RHffVlk2hUpZfc+B71+vSPR/bYxYVnbwMvgmcMbzUq4vPIVr6PWTpq
+/ArhQNwoU9AfYNErLKmI84JjZx55TgvVkGmeka9XmvzbXESEDtwF95HsFpqtsEhi
+xTzAyn9DBjSuUKAukPohKxQfvlHDT8bEnmDktxyC8e+flwy8SpCGNZDa5OeDgIt8
+foKJzMNnkEIwfsG6sFmu9SmIdRb/3y8=
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/pre_br_validity_ok.pem b/net/data/ssl/certificates/pre_br_validity_ok.pem
new file mode 100644
index 0000000..5d082ee
--- /dev/null
+++ b/net/data/ssl/certificates/pre_br_validity_ok.pem
@@ -0,0 +1,82 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 9 (0x9)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=Test Root CA
+        Validity
+            Not Before: Jan  1 00:00:00 2008 GMT
+            Not After : Jan  1 00:00:00 2015 GMT
+        Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:bc:a2:44:c7:c5:c4:bb:e2:fd:d2:1f:17:f4:3d:
+                    87:62:65:37:f8:87:78:97:75:04:b3:28:ca:1c:03:
+                    f8:76:9c:07:36:0c:67:35:fa:90:cc:31:73:d3:ec:
+                    b6:d9:a2:38:7b:94:00:59:23:2e:c4:f7:fd:ea:6d:
+                    67:ce:fe:7b:87:40:d3:14:74:71:3e:94:50:0e:3f:
+                    24:e5:83:fc:6a:c4:35:56:b9:a4:22:f0:84:6d:c7:
+                    ce:f1:19:ad:89:51:c7:c8:d4:c0:97:1b:86:64:d2:
+                    c7:04:cf:a3:9e:5d:6f:ed:ea:2e:08:ad:26:39:c7:
+                    1d:bb:29:4a:c0:4e:50:e7:8f:25:65:e2:fb:fe:4f:
+                    ea:62:3f:b4:70:91:1b:f3:cc:24:83:12:c2:38:5b:
+                    5e:ef:bc:c4:23:b8:d5:35:14:63:5f:b3:c1:f1:ad:
+                    35:ea:4d:0f:14:b8:a4:b1:19:c1:31:81:b0:8f:4a:
+                    b3:a9:60:c1:2b:f1:2c:0c:d6:a0:52:d9:e8:a5:78:
+                    d3:0b:b2:6e:88:bb:8d:36:07:2f:2d:d3:71:9d:87:
+                    ca:58:41:18:e9:06:17:ee:a5:bf:35:31:81:b2:2b:
+                    ee:af:92:10:64:22:88:38:3d:1b:08:80:59:ce:97:
+                    62:5e:cb:d1:fa:59:d7:b9:fd:40:42:41:b1:14:47:
+                    c4:0b
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: critical
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                E4:F4:EF:17:AA:96:3F:12:62:E0:E2:FA:98:88:AF:B4:E5:74:4E:4C
+            X509v3 Authority Key Identifier: 
+                keyid:EE:54:52:3A:28:73:20:9D:56:2D:2A:98:F4:9C:B1:7D:FB:C5:22:47
+
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, TLS Web Client Authentication
+            X509v3 Subject Alternative Name: 
+                IP Address:127.0.0.1
+    Signature Algorithm: sha256WithRSAEncryption
+         79:7d:93:8b:4b:3f:7f:02:9b:5c:c2:6e:a6:0c:2a:16:75:79:
+         ee:a6:15:e4:54:e0:3a:20:b7:62:52:1c:85:ae:03:5a:bb:9a:
+         3d:1f:f4:19:af:79:92:c2:e0:78:38:6d:42:39:75:07:ba:07:
+         6f:7c:5a:50:32:10:3b:68:f9:da:c4:a8:07:56:3f:71:ec:6e:
+         65:dc:20:0f:ab:c3:0b:4f:55:15:9e:94:4e:98:c9:f9:d7:6a:
+         f5:e4:49:5d:1d:ba:1f:b9:16:26:b5:6f:2b:e7:52:39:b9:aa:
+         60:58:c3:b9:eb:c5:20:92:a1:cb:a7:06:8f:1f:41:35:b6:c9:
+         a5:7e:9c:ba:77:f6:b3:92:47:ba:57:e2:b3:e5:02:6a:d1:e3:
+         52:d6:35:8b:8c:47:d0:f9:2e:ad:9b:14:43:11:81:f1:c7:38:
+         b0:3e:cc:3b:ca:39:e8:83:01:e4:fb:c9:ff:bb:6b:96:3a:22:
+         e0:4d:d8:06:b8:56:8a:b5:f8:84:12:68:ae:c7:05:00:d3:d7:
+         1f:3d:89:f4:c9:27:68:be:d0:07:cc:c7:d3:eb:d5:60:e3:c2:
+         2a:85:4b:cb:53:5c:d2:92:f6:ef:63:34:f0:a0:1e:40:9b:78:
+         0d:2a:2c:df:36:9c:26:3a:16:82:39:36:5f:d3:5b:ba:24:8c:
+         b0:18:a7:d1
+-----BEGIN CERTIFICATE-----
+MIIDczCCAlugAwIBAgIBCTANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IFJvb3QgQ0EwHhcNMDgwMTAxMDAwMDAwWhcNMTUwMTAxMDAwMDAwWjBgMQswCQYD
+VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4g
+VmlldzEQMA4GA1UECgwHVGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvKJEx8XEu+L90h8X9D2HYmU3+Id4
+l3UEsyjKHAP4dpwHNgxnNfqQzDFz0+y22aI4e5QAWSMuxPf96m1nzv57h0DTFHRx
+PpRQDj8k5YP8asQ1VrmkIvCEbcfO8RmtiVHHyNTAlxuGZNLHBM+jnl1v7eouCK0m
+OccduylKwE5Q548lZeL7/k/qYj+0cJEb88wkgxLCOFte77zEI7jVNRRjX7PB8a01
+6k0PFLiksRnBMYGwj0qzqWDBK/EsDNagUtnopXjTC7JuiLuNNgcvLdNxnYfKWEEY
+6QYX7qW/NTGBsivur5IQZCKIOD0bCIBZzpdiXsvR+lnXuf1AQkGxFEfECwIDAQAB
+o4GAMH4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU5PTvF6qWPxJi4OL6mIivtOV0
+TkwwHwYDVR0jBBgwFoAU7lRSOihzIJ1WLSqY9JyxffvFIkcwHQYDVR0lBBYwFAYI
+KwYBBQUHAwEGCCsGAQUFBwMCMA8GA1UdEQQIMAaHBH8AAAEwDQYJKoZIhvcNAQEL
+BQADggEBAHl9k4tLP38Cm1zCbqYMKhZ1ee6mFeRU4Dogt2JSHIWuA1q7mj0f9Bmv
+eZLC4Hg4bUI5dQe6B298WlAyEDto+drEqAdWP3HsbmXcIA+rwwtPVRWelE6YyfnX
+avXkSV0duh+5Fia1byvnUjm5qmBYw7nrxSCSocunBo8fQTW2yaV+nLp39rOSR7pX
+4rPlAmrR41LWNYuMR9D5Lq2bFEMRgfHHOLA+zDvKOeiDAeT7yf+7a5Y6IuBN2Aa4
+Voq1+IQSaK7HBQDT1x89ifTJJ2i+0AfMx9Pr1WDjwiqFS8tTXNKS9u9jNPCgHkCb
+eA0qLN82nCY6FoI5Nl/TW7okjLAYp9E=
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/reject_intranet_hosts.pem b/net/data/ssl/certificates/reject_intranet_hosts.pem
new file mode 100644
index 0000000..d5040cc
--- /dev/null
+++ b/net/data/ssl/certificates/reject_intranet_hosts.pem
@@ -0,0 +1,69 @@
+Certificate:
+    Data:
+        Version: 1 (0x0)
+        Serial Number: 15207369410964614739 (0xd30b6de83cafee53)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
+        Validity
+            Not Before: Oct 31 19:51:55 2014 GMT
+            Not After : Oct 30 19:51:55 2017 GMT
+        Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:a0:5c:e4:0d:5d:e4:01:47:d8:8c:06:41:12:f8:
+                    63:a9:d9:41:3d:e9:75:ad:80:ae:e9:32:2a:d6:6a:
+                    42:7c:be:f5:1b:02:99:36:a4:dd:02:db:32:36:ab:
+                    ac:8b:c5:78:cb:a2:03:28:db:95:83:56:9a:03:f4:
+                    37:70:dc:16:56:d9:0a:c6:34:23:f5:58:36:21:c8:
+                    fd:b7:41:1e:2f:85:50:50:d9:76:c0:7d:9e:0d:d7:
+                    ad:df:94:06:c1:b6:a4:c9:ee:61:16:5a:54:c2:1d:
+                    5e:d9:79:73:4a:21:d0:d3:fe:88:ee:27:3a:5f:e6:
+                    a3:cf:89:44:93:80:64:53:50:36:98:c5:da:1f:87:
+                    1e:a1:2e:e0:5a:60:c7:80:a7:93:eb:b8:39:33:c3:
+                    d7:e7:2b:bd:9b:48:5d:a4:af:ee:7d:93:5a:d0:9f:
+                    3b:6d:a8:52:95:ce:d1:bf:0b:a4:60:34:ee:77:80:
+                    50:35:0d:af:eb:0f:48:69:ab:c7:87:a8:31:44:69:
+                    9c:21:d6:01:de:61:04:95:a4:85:d0:d6:2e:a6:7c:
+                    d1:fd:61:45:51:fd:bb:bc:be:6b:d3:87:54:50:b8:
+                    36:f8:f0:0f:a4:07:e0:28:86:13:5b:72:ae:5d:b3:
+                    a2:fa:b7:54:8d:c9:6a:b3:82:88:4f:40:6d:36:1a:
+                    f5:2d
+                Exponent: 65537 (0x10001)
+    Signature Algorithm: sha256WithRSAEncryption
+         47:0d:cd:15:ec:51:89:2f:e0:d1:4e:04:7a:8e:cf:f5:16:ec:
+         11:55:bc:48:92:3b:98:60:ba:f1:97:98:a7:22:bf:9e:00:ac:
+         4a:5b:a7:e1:b5:aa:b7:20:c5:fc:85:d5:3f:cf:53:da:60:94:
+         75:93:78:87:e0:99:d7:f0:c7:35:e5:6d:82:f7:e7:23:e1:fe:
+         88:4d:f0:bf:3b:68:70:61:c1:e8:8d:e1:2a:c9:75:c9:28:66:
+         71:79:ff:58:a7:79:c3:1c:97:db:9c:3c:25:84:e0:c2:da:77:
+         08:9e:4e:9a:5a:c8:48:83:fe:74:41:73:13:46:c2:69:27:31:
+         71:d9:7d:40:46:43:59:6d:cd:54:d8:63:44:5b:5f:22:b9:8e:
+         2b:ba:99:d1:38:89:0c:ac:b8:f2:c2:b9:a2:67:ae:3d:56:b6:
+         c7:c0:cd:4c:e6:70:ce:8e:50:67:3c:93:c5:20:c2:45:66:e5:
+         79:7b:29:54:0e:fc:eb:39:75:51:54:5d:fc:69:ad:80:dc:88:
+         b0:6c:be:0c:e4:9f:e3:81:3c:aa:6b:b6:a6:34:b6:1e:f7:a9:
+         8a:3f:bd:3f:2e:e4:da:c0:27:cb:50:fd:8a:7f:44:bd:a3:70:
+         ad:4e:e4:1b:16:9a:fd:82:4d:55:26:06:ca:c7:25:49:fc:2b:
+         9e:54:87:7f
+-----BEGIN CERTIFICATE-----
+MIIDPDCCAiQCCQDTC23oPK/uUzANBgkqhkiG9w0BAQsFADBgMQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEQ
+MA4GA1UECgwHVGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMB4XDTE0MTAzMTE5
+NTE1NVoXDTE3MTAzMDE5NTE1NVowYDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNh
+bGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB1Rlc3Qg
+Q0ExEjAQBgNVBAMMCTEyNy4wLjAuMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAKBc5A1d5AFH2IwGQRL4Y6nZQT3pda2ArukyKtZqQny+9RsCmTak3QLb
+MjarrIvFeMuiAyjblYNWmgP0N3DcFlbZCsY0I/VYNiHI/bdBHi+FUFDZdsB9ng3X
+rd+UBsG2pMnuYRZaVMIdXtl5c0oh0NP+iO4nOl/mo8+JRJOAZFNQNpjF2h+HHqEu
+4Fpgx4Cnk+u4OTPD1+crvZtIXaSv7n2TWtCfO22oUpXO0b8LpGA07neAUDUNr+sP
+SGmrx4eoMURpnCHWAd5hBJWkhdDWLqZ80f1hRVH9u7y+a9OHVFC4NvjwD6QH4CiG
+E1tyrl2zovq3VI3JarOCiE9AbTYa9S0CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEA
+Rw3NFexRiS/g0U4Eeo7P9RbsEVW8SJI7mGC68ZeYpyK/ngCsSlun4bWqtyDF/IXV
+P89T2mCUdZN4h+CZ1/DHNeVtgvfnI+H+iE3wvztocGHB6I3hKsl1yShmcXn/WKd5
+wxyX25w8JYTgwtp3CJ5OmlrISIP+dEFzE0bCaScxcdl9QEZDWW3NVNhjRFtfIrmO
+K7qZ0TiJDKy48sK5omeuPVa2x8DNTOZwzo5QZzyTxSDCRWbleXspVA786zl1UVRd
+/GmtgNyIsGy+DOSf44E8qmu2pjS2Hvepij+9Py7k2sAny1D9in9EvaNwrU7kGxaa
+/YJNVSYGysclSfwrnlSHfw==
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/satveda.pem b/net/data/ssl/certificates/satveda.pem
deleted file mode 100644
index 4f79703..0000000
--- a/net/data/ssl/certificates/satveda.pem
+++ /dev/null
@@ -1,207 +0,0 @@
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 21120020890699950 (0x4b088c0ed6c8ae)
-    Signature Algorithm: sha1WithRSAEncryption
-        Issuer: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., OU=http://certificates.godaddy.com/repository, CN=Go Daddy Secure Certification Authority/serialNumber=07969287
-        Validity
-            Not Before: Mar  9 07:19:24 2013 GMT
-            Not After : May 24 09:39:06 2019 GMT
-        Subject: OU=Domain Control Validated, CN=www.satveda.com
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:bb:e0:ea:82:8e:50:bf:ba:94:89:e3:f4:dc:b4:
-                    a1:06:91:c1:46:bc:33:37:74:e0:c6:71:e7:f0:09:
-                    ec:d8:8e:ac:48:82:3f:b6:b4:49:80:98:04:04:61:
-                    f7:ea:d2:ad:23:ed:2b:28:54:f2:14:e2:f4:84:88:
-                    9c:4f:d1:b1:1b:52:98:a6:3e:85:e3:eb:22:df:09:
-                    86:ff:14:9c:41:46:dd:13:ed:d9:f0:5d:a5:fe:7f:
-                    6f:31:6b:a0:50:a5:f2:9a:ba:ea:8c:77:4d:1c:64:
-                    82:7a:ea:f4:54:5b:f3:92:81:5e:5c:b1:04:da:c1:
-                    d6:72:7d:e1:e5:ec:ad:53:ae:3d:14:21:44:2e:67:
-                    f3:a2:c9:7d:9e:0b:98:4d:89:fc:c8:1e:a6:00:45:
-                    8b:b6:a7:b9:dc:5e:5a:ff:0c:52:c6:92:7e:60:08:
-                    d4:8d:34:6c:00:98:bc:43:e9:7b:e1:92:0b:f5:81:
-                    f0:48:09:18:5a:35:8a:e2:74:f2:9d:da:48:b0:7d:
-                    02:f8:a4:2b:5e:a0:22:cf:a0:15:9f:fb:ca:4d:8c:
-                    f3:26:cb:62:74:a3:04:6e:e2:38:aa:0a:19:42:e8:
-                    e3:57:a5:d3:97:64:38:31:89:3e:af:93:af:d6:e3:
-                    60:c1:c3:6a:9c:58:da:16:60:c7:78:01:cf:dc:7c:
-                    e1:11
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Basic Constraints: critical
-                CA:FALSE
-            X509v3 Extended Key Usage: 
-                TLS Web Server Authentication, TLS Web Client Authentication
-            X509v3 Key Usage: critical
-                Digital Signature, Key Encipherment
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://crl.godaddy.com/gds1-87.crl
-
-            X509v3 Certificate Policies: 
-                Policy: 2.16.840.1.114413.1.7.23.1
-                  CPS: http://certificates.godaddy.com/repository/
-
-            Authority Information Access: 
-                OCSP - URI:http://ocsp.godaddy.com/
-                CA Issuers - URI:http://certificates.godaddy.com/repository/gd_intermediate.crt
-
-            X509v3 Authority Key Identifier: 
-                keyid:FD:AC:61:32:93:6C:45:D6:E2:EE:85:5F:9A:BA:E7:76:99:68:CC:E7
-
-            X509v3 Subject Alternative Name: 
-                DNS:www.satveda.com, DNS:satveda.com
-            X509v3 Subject Key Identifier: 
-                A7:39:2E:DC:0F:22:D5:D6:C6:B1:3B:35:65:3D:0D:B1:75:5B:F7:69
-    Signature Algorithm: sha1WithRSAEncryption
-         15:a9:fd:28:f6:cd:d1:f0:2d:d7:1c:df:b5:48:5c:c5:2c:44:
-         59:ad:ba:3d:bc:08:30:6f:50:a4:9f:0b:05:28:d7:5e:62:87:
-         f9:5d:24:c0:b1:ce:a1:d2:eb:aa:77:9b:01:21:1b:56:dd:e5:
-         32:18:38:44:24:60:76:14:4d:4a:6a:d2:37:8b:64:45:5a:ba:
-         4f:bf:b0:33:dd:f6:59:dc:fd:47:a9:3b:4f:29:65:3d:a4:0e:
-         c7:89:22:48:e7:6b:e4:38:b7:d4:e2:27:1f:22:9c:99:b0:bd:
-         b4:59:6d:8d:53:30:fa:28:ef:6c:66:b8:af:6c:9b:93:52:72:
-         37:b3:2f:c1:bd:73:22:b4:2e:fa:08:fd:0c:95:89:21:eb:01:
-         34:82:18:15:12:3c:a1:2c:d9:fc:f3:f9:48:1f:09:44:18:b8:
-         7a:5b:57:ea:10:62:59:90:8c:dc:6f:52:f2:2a:a2:da:fc:2d:
-         b4:8a:fb:11:cd:60:da:f9:dd:31:08:31:04:11:81:4e:4b:8a:
-         81:40:70:5e:00:99:87:cb:d6:e0:d8:85:fe:4a:2e:97:99:a0:
-         3d:6e:6f:26:a9:4d:e6:97:cb:c5:09:ef:49:24:c7:96:27:7e:
-         bf:e4:cb:02:f8:00:63:43:7f:ca:05:75:d2:89:7a:f0:25:52:
-         ac:47:fb:e6
------BEGIN CERTIFICATE-----
-MIIFRTCCBC2gAwIBAgIHSwiMDtbIrjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
-BhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAY
-BgNVBAoTEUdvRGFkZHkuY29tLCBJbmMuMTMwMQYDVQQLEypodHRwOi8vY2VydGlm
-aWNhdGVzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkxMDAuBgNVBAMTJ0dvIERhZGR5
-IFNlY3VyZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTERMA8GA1UEBRMIMDc5Njky
-ODcwHhcNMTMwMzA5MDcxOTI0WhcNMTkwNTI0MDkzOTA2WjA9MSEwHwYDVQQLExhE
-b21haW4gQ29udHJvbCBWYWxpZGF0ZWQxGDAWBgNVBAMTD3d3dy5zYXR2ZWRhLmNv
-bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALvg6oKOUL+6lInj9Ny0
-oQaRwUa8Mzd04MZx5/AJ7NiOrEiCP7a0SYCYBARh9+rSrSPtKyhU8hTi9ISInE/R
-sRtSmKY+hePrIt8Jhv8UnEFG3RPt2fBdpf5/bzFroFCl8pq66ox3TRxkgnrq9FRb
-85KBXlyxBNrB1nJ94eXsrVOuPRQhRC5n86LJfZ4LmE2J/MgepgBFi7anudxeWv8M
-UsaSfmAI1I00bACYvEPpe+GSC/WB8EgJGFo1iuJ08p3aSLB9AvikK16gIs+gFZ/7
-yk2M8ybLYnSjBG7iOKoKGULo41el05dkODGJPq+Tr9bjYMHDapxY2hZgx3gBz9x8
-4RECAwEAAaOCAbowggG2MA8GA1UdEwEB/wQFMAMBAQAwHQYDVR0lBBYwFAYIKwYB
-BQUHAwEGCCsGAQUFBwMCMA4GA1UdDwEB/wQEAwIFoDAzBgNVHR8ELDAqMCigJqAk
-hiJodHRwOi8vY3JsLmdvZGFkZHkuY29tL2dkczEtODcuY3JsMFMGA1UdIARMMEow
-SAYLYIZIAYb9bQEHFwEwOTA3BggrBgEFBQcCARYraHR0cDovL2NlcnRpZmljYXRl
-cy5nb2RhZGR5LmNvbS9yZXBvc2l0b3J5LzCBgAYIKwYBBQUHAQEEdDByMCQGCCsG
-AQUFBzABhhhodHRwOi8vb2NzcC5nb2RhZGR5LmNvbS8wSgYIKwYBBQUHMAKGPmh0
-dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeS9nZF9pbnRl
-cm1lZGlhdGUuY3J0MB8GA1UdIwQYMBaAFP2sYTKTbEXW4u6FX5q653aZaMznMCcG
-A1UdEQQgMB6CD3d3dy5zYXR2ZWRhLmNvbYILc2F0dmVkYS5jb20wHQYDVR0OBBYE
-FKc5LtwPItXWxrE7NWU9DbF1W/dpMA0GCSqGSIb3DQEBBQUAA4IBAQAVqf0o9s3R
-8C3XHN+1SFzFLERZrbo9vAgwb1CknwsFKNdeYof5XSTAsc6h0uuqd5sBIRtW3eUy
-GDhEJGB2FE1KatI3i2RFWrpPv7Az3fZZ3P1HqTtPKWU9pA7HiSJI52vkOLfU4icf
-IpyZsL20WW2NUzD6KO9sZrivbJuTUnI3sy/BvXMitC76CP0MlYkh6wE0ghgVEjyh
-LNn88/lIHwlEGLh6W1fqEGJZkIzcb1LyKqLa/C20ivsRzWDa+d0xCDEEEYFOS4qB
-QHBeAJmHy9bg2IX+Si6XmaA9bm8mqU3ml8vFCe9JJMeWJ36/5MsC+ABjQ3/KBXXS
-iXrwJVKsR/vm
------END CERTIFICATE-----
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 769 (0x301)
-    Signature Algorithm: sha1WithRSAEncryption
-        Issuer: C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority
-        Validity
-            Not Before: Nov 16 01:54:37 2006 GMT
-            Not After : Nov 16 01:54:37 2026 GMT
-        Subject: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., OU=http://certificates.godaddy.com/repository, CN=Go Daddy Secure Certification Authority/serialNumber=07969287
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:c4:2d:d5:15:8c:9c:26:4c:ec:32:35:eb:5f:b8:
-                    59:01:5a:a6:61:81:59:3b:70:63:ab:e3:dc:3d:c7:
-                    2a:b8:c9:33:d3:79:e4:3a:ed:3c:30:23:84:8e:b3:
-                    30:14:b6:b2:87:c3:3d:95:54:04:9e:df:99:dd:0b:
-                    25:1e:21:de:65:29:7e:35:a8:a9:54:eb:f6:f7:32:
-                    39:d4:26:55:95:ad:ef:fb:fe:58:86:d7:9e:f4:00:
-                    8d:8c:2a:0c:bd:42:04:ce:a7:3f:04:f6:ee:80:f2:
-                    aa:ef:52:a1:69:66:da:be:1a:ad:5d:da:2c:66:ea:
-                    1a:6b:bb:e5:1a:51:4a:00:2f:48:c7:98:75:d8:b9:
-                    29:c8:ee:f8:66:6d:0a:9c:b3:f3:fc:78:7c:a2:f8:
-                    a3:f2:b5:c3:f3:b9:7a:91:c1:a7:e6:25:2e:9c:a8:
-                    ed:12:65:6e:6a:f6:12:44:53:70:30:95:c3:9c:2b:
-                    58:2b:3d:08:74:4a:f2:be:51:b0:bf:87:d0:4c:27:
-                    58:6b:b5:35:c5:9d:af:17:31:f8:0b:8f:ee:ad:81:
-                    36:05:89:08:98:cf:3a:af:25:87:c0:49:ea:a7:fd:
-                    67:f7:45:8e:97:cc:14:39:e2:36:85:b5:7e:1a:37:
-                    fd:16:f6:71:11:9a:74:30:16:fe:13:94:a3:3f:84:
-                    0d:4f
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                FD:AC:61:32:93:6C:45:D6:E2:EE:85:5F:9A:BA:E7:76:99:68:CC:E7
-            X509v3 Authority Key Identifier: 
-                keyid:D2:C4:B0:D2:91:D4:4C:11:71:B3:61:CB:3D:A1:FE:DD:A8:6A:D4:E3
-
-            X509v3 Basic Constraints: critical
-                CA:TRUE, pathlen:0
-            Authority Information Access: 
-                OCSP - URI:http://ocsp.godaddy.com
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://certificates.godaddy.com/repository/gdroot.crl
-
-            X509v3 Certificate Policies: 
-                Policy: X509v3 Any Policy
-                  CPS: http://certificates.godaddy.com/repository
-
-            X509v3 Key Usage: critical
-                Certificate Sign, CRL Sign
-    Signature Algorithm: sha1WithRSAEncryption
-         d2:86:c0:ec:bd:f9:a1:b6:67:ee:66:0b:a2:06:3a:04:50:8e:
-         15:72:ac:4a:74:95:53:cb:37:cb:44:49:ef:07:90:6b:33:d9:
-         96:f0:94:56:a5:13:30:05:3c:85:32:21:7b:c9:c7:0a:a8:24:
-         a4:90:de:46:d3:25:23:14:03:67:c2:10:d6:6f:0f:5d:7b:7a:
-         cc:9f:c5:58:2a:c1:c4:9e:21:a8:5a:f3:ac:a4:46:f3:9e:e4:
-         63:cb:2f:90:a4:29:29:01:d9:72:2c:29:df:37:01:27:bc:4f:
-         ee:68:d3:21:8f:c0:b3:e4:f5:09:ed:d2:10:aa:53:b4:be:f0:
-         cc:59:0b:d6:3b:96:1c:95:24:49:df:ce:ec:fd:a7:48:91:14:
-         45:0e:3a:36:6f:da:45:b3:45:a2:41:c9:d4:d7:44:4e:3e:b9:
-         74:76:d5:a2:13:55:2c:c6:87:a3:b5:99:ac:06:84:87:7f:75:
-         06:fc:bf:14:4c:0e:cc:6e:c4:df:3d:b7:12:71:f4:e8:f1:51:
-         40:22:28:49:e0:1d:4b:87:a8:34:cc:06:a2:dd:12:5a:d1:86:
-         36:64:03:35:6f:6f:77:6e:eb:f2:85:50:98:5e:ab:03:53:ad:
-         91:23:63:1f:16:9c:cd:b9:b2:05:63:3a:e1:f4:68:1b:17:05:
-         35:95:53:ee
------BEGIN CERTIFICATE-----
-MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx
-ITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
-RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMTYw
-MTU0MzdaFw0yNjExMTYwMTU0MzdaMIHKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMH
-QXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEaMBgGA1UEChMRR29EYWRkeS5j
-b20sIEluYy4xMzAxBgNVBAsTKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5j
-b20vcmVwb3NpdG9yeTEwMC4GA1UEAxMnR28gRGFkZHkgU2VjdXJlIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MREwDwYDVQQFEwgwNzk2OTI4NzCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAMQt1RWMnCZM7DI161+4WQFapmGBWTtwY6vj3D3H
-KrjJM9N55DrtPDAjhI6zMBS2sofDPZVUBJ7fmd0LJR4h3mUpfjWoqVTr9vcyOdQm
-VZWt7/v+WIbXnvQAjYwqDL1CBM6nPwT27oDyqu9SoWlm2r4arV3aLGbqGmu75RpR
-SgAvSMeYddi5Kcju+GZtCpyz8/x4fKL4o/K1w/O5epHBp+YlLpyo7RJlbmr2EkRT
-cDCVw5wrWCs9CHRK8r5RsL+H0EwnWGu1NcWdrxcx+AuP7q2BNgWJCJjPOq8lh8BJ
-6qf9Z/dFjpfMFDniNoW1fho3/Rb2cRGadDAW/hOUoz+EDU8CAwEAAaOCATIwggEu
-MB0GA1UdDgQWBBT9rGEyk2xF1uLuhV+auud2mWjM5zAfBgNVHSMEGDAWgBTSxLDS
-kdRMEXGzYcs9of7dqGrU4zASBgNVHRMBAf8ECDAGAQH/AgEAMDMGCCsGAQUFBwEB
-BCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZ29kYWRkeS5jb20wRgYDVR0f
-BD8wPTA7oDmgN4Y1aHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNvbS9yZXBv
-c2l0b3J5L2dkcm9vdC5jcmwwSwYDVR0gBEQwQjBABgRVHSAAMDgwNgYIKwYBBQUH
-AgEWKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeTAO
-BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBANKGwOy9+aG2Z+5mC6IG
-OgRQjhVyrEp0lVPLN8tESe8HkGsz2ZbwlFalEzAFPIUyIXvJxwqoJKSQ3kbTJSMU
-A2fCENZvD117esyfxVgqwcSeIaha86ykRvOe5GPLL5CkKSkB2XIsKd83ASe8T+5o
-0yGPwLPk9Qnt0hCqU7S+8MxZC9Y7lhyVJEnfzuz9p0iRFEUOOjZv2kWzRaJBydTX
-RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH
-qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV
-U+4=
------END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/start_after_expiry.pem b/net/data/ssl/certificates/start_after_expiry.pem
new file mode 100644
index 0000000..7498654
--- /dev/null
+++ b/net/data/ssl/certificates/start_after_expiry.pem
@@ -0,0 +1,82 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 8 (0x8)
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=Test Root CA
+        Validity
+            Not Before: Sep  1 00:00:00 2018 GMT
+            Not After : Apr  2 00:00:00 2015 GMT
+        Subject: C=US, ST=California, L=Mountain View, O=Test CA, CN=127.0.0.1
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:c4:54:f5:42:22:fc:43:f4:68:f9:15:c3:cf:a1:
+                    88:35:58:a3:30:cc:eb:df:54:5c:d7:a0:19:00:7b:
+                    f4:65:6a:68:52:db:a6:52:48:26:ca:86:29:de:5e:
+                    7b:81:60:fb:ee:7d:11:58:38:48:61:1b:36:2b:41:
+                    8e:7a:99:b3:4e:5d:95:7a:4c:14:04:b4:92:ca:a3:
+                    75:41:bf:a9:91:3c:32:b4:02:1c:d3:86:29:b1:b0:
+                    02:ad:08:a9:72:13:79:95:fa:3c:c1:01:8b:e4:76:
+                    1f:21:ed:98:2b:63:07:7a:ce:6b:59:1c:92:5f:d8:
+                    cb:e0:f1:a5:37:74:17:c5:56:f3:34:7f:1b:62:f9:
+                    7a:38:ca:9d:98:c5:e1:de:b3:68:85:92:1c:ef:16:
+                    51:95:b2:18:a9:8b:40:5d:ff:a0:89:2b:20:e6:7d:
+                    64:5c:8b:96:66:eb:b8:c8:7c:f7:7b:74:c8:9c:d2:
+                    3d:8e:c3:d6:94:cc:45:6b:5f:5a:9e:59:94:73:14:
+                    c0:aa:1b:f6:8c:f5:6b:e3:dc:60:bb:b3:d8:05:74:
+                    94:ac:4d:42:1d:8a:d0:da:21:fe:19:49:af:2f:ca:
+                    d1:97:b8:85:a2:07:b4:64:23:3e:48:60:22:36:d5:
+                    f0:71:43:3a:76:47:db:c6:23:88:e8:9e:44:14:05:
+                    44:d3
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: critical
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                98:54:9A:FE:46:04:8F:0F:3A:D6:86:26:71:05:70:71:B1:31:34:4C
+            X509v3 Authority Key Identifier: 
+                keyid:BB:9E:AC:B3:7A:32:BA:83:21:C8:AC:02:95:09:0B:CA:68:03:EC:DB
+
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, TLS Web Client Authentication
+            X509v3 Subject Alternative Name: 
+                IP Address:127.0.0.1
+    Signature Algorithm: sha256WithRSAEncryption
+         09:7d:90:8a:cc:84:00:38:f8:a8:90:48:d3:7e:f0:58:37:dc:
+         ad:1b:87:a9:ef:de:f8:53:a9:23:73:57:10:c9:0c:6b:c4:fd:
+         0b:e6:96:7d:d5:87:a6:f5:45:6e:5b:62:aa:d0:55:58:7f:59:
+         a7:ba:28:22:2a:9d:ea:f7:9a:4b:f7:6b:f9:f1:65:56:d9:ef:
+         5c:9c:b6:45:3d:15:8f:83:d5:b4:cf:78:7e:8e:b6:8a:b7:c5:
+         33:99:1c:8b:49:51:81:d1:eb:01:1c:e5:49:69:2b:99:ad:9f:
+         5f:31:02:3a:f6:41:27:68:2f:2c:08:cd:89:91:86:5b:03:44:
+         d6:51:29:84:58:bc:a7:94:6e:59:b9:dd:0b:20:8e:c7:5c:4e:
+         88:38:77:16:59:59:e4:10:ee:27:9e:aa:dd:c3:fc:2c:a6:96:
+         95:7e:8f:6c:e2:97:f9:80:d3:92:f4:4d:31:2b:bf:76:dc:2e:
+         c1:1e:9b:53:e7:4d:6f:36:08:8e:75:a9:e3:07:46:c4:b5:e3:
+         97:0d:c6:d6:f3:10:36:aa:08:c0:76:1b:90:b8:97:b3:9f:d5:
+         42:c0:59:75:96:50:4c:d5:31:58:61:96:e3:62:da:e9:9f:ec:
+         9f:77:81:13:55:03:e4:fa:b3:93:0d:3a:78:db:7d:d1:dd:26:
+         ad:7e:5f:11
+-----BEGIN CERTIFICATE-----
+MIIDczCCAlugAwIBAgIBCDANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
+IFJvb3QgQ0EwHhcNMTgwOTAxMDAwMDAwWhcNMTUwNDAyMDAwMDAwWjBgMQswCQYD
+VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4g
+VmlldzEQMA4GA1UECgwHVGVzdCBDQTESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxFT1QiL8Q/Ro+RXDz6GINVijMMzr
+31Rc16AZAHv0ZWpoUtumUkgmyoYp3l57gWD77n0RWDhIYRs2K0GOepmzTl2VekwU
+BLSSyqN1Qb+pkTwytAIc04YpsbACrQipchN5lfo8wQGL5HYfIe2YK2MHes5rWRyS
+X9jL4PGlN3QXxVbzNH8bYvl6OMqdmMXh3rNohZIc7xZRlbIYqYtAXf+giSsg5n1k
+XIuWZuu4yHz3e3TInNI9jsPWlMxFa19anlmUcxTAqhv2jPVr49xgu7PYBXSUrE1C
+HYrQ2iH+GUmvL8rRl7iFoge0ZCM+SGAiNtXwcUM6dkfbxiOI6J5EFAVE0wIDAQAB
+o4GAMH4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUmFSa/kYEjw861oYmcQVwcbEx
+NEwwHwYDVR0jBBgwFoAUu56ss3oyuoMhyKwClQkLymgD7NswHQYDVR0lBBYwFAYI
+KwYBBQUHAwEGCCsGAQUFBwMCMA8GA1UdEQQIMAaHBH8AAAEwDQYJKoZIhvcNAQEL
+BQADggEBAAl9kIrMhAA4+KiQSNN+8Fg33K0bh6nv3vhTqSNzVxDJDGvE/Qvmln3V
+h6b1RW5bYqrQVVh/Wae6KCIqner3mkv3a/nxZVbZ71yctkU9FY+D1bTPeH6Otoq3
+xTOZHItJUYHR6wEc5UlpK5mtn18xAjr2QSdoLywIzYmRhlsDRNZRKYRYvKeUblm5
+3QsgjsdcTog4dxZZWeQQ7ieeqt3D/CymlpV+j2zil/mA05L0TTErv3bcLsEem1Pn
+TW82CI51qeMHRsS145cNxtbzEDaqCMB2G5C4l7Of1ULAWXWWUEzVMVhhluNi2umf
+7J93gRNVA+T6s5MNOnjbfdHdJq1+XxE=
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/certificates/twitter-chain.pem b/net/data/ssl/certificates/twitter-chain.pem
new file mode 100644
index 0000000..0d66f4a
--- /dev/null
+++ b/net/data/ssl/certificates/twitter-chain.pem
@@ -0,0 +1,302 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            1a:c8:5e:b7:ae:c3:51:3c:d8:0d:85:38:5e:cf:d2:08
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, O=Symantec Corporation, OU=Symantec Trust Network, CN=Symantec Class 3 EV SSL CA - G3
+        Validity
+            Not Before: Sep 10 00:00:00 2014 GMT
+            Not After : May  9 23:59:59 2016 GMT
+        Subject: 1.3.6.1.4.1.311.60.2.1.3=US/1.3.6.1.4.1.311.60.2.1.2=Delaware/businessCategory=Private Organization/serialNumber=4337446, C=US/postalCode=94103-1307, ST=California, L=San Francisco/street=1355 Market St, O=Twitter, Inc., OU=Twitter Security, CN=twitter.com
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:e3:ac:59:34:07:dc:11:f8:1c:ca:b3:0f:93:44:
+                    8a:54:34:76:90:6a:c0:22:00:be:95:9a:da:58:3c:
+                    6c:38:31:a2:a2:1f:3b:64:e2:9d:e0:f5:c2:ab:07:
+                    90:5b:7c:fe:f9:88:8c:6a:9d:69:3b:e0:23:65:b7:
+                    11:d6:e8:88:d6:3e:6d:8b:ed:ca:ea:58:0b:fe:4d:
+                    bf:2a:95:ca:bb:21:bb:ce:d6:e2:10:02:11:21:68:
+                    26:f7:92:7e:9c:a3:80:b1:82:d7:e5:a6:a0:86:47:
+                    42:1a:c6:5b:04:d9:c3:b5:b2:9b:38:d4:a1:6d:3b:
+                    bd:d8:05:f0:51:9b:bd:95:77:7f:e9:02:8e:60:a3:
+                    7a:65:20:52:23:db:8d:01:27:24:c2:00:66:0d:14:
+                    66:b3:52:2b:cc:6b:5b:a5:44:2f:e2:40:6d:da:21:
+                    a1:92:5a:57:12:d3:47:01:ef:e9:df:af:c6:91:8c:
+                    21:af:77:65:13:36:1c:63:7a:2d:05:e6:63:c5:0b:
+                    d8:39:e9:ac:f2:3b:ff:9d:c5:a7:46:0a:6e:1a:66:
+                    10:1e:4a:e7:ba:c7:89:79:1f:ae:f1:f3:84:03:ca:
+                    e7:50:8a:19:63:bf:3c:20:10:78:c5:f4:53:3c:7d:
+                    5e:0d:af:96:70:89:92:b9:7f:9a:19:0c:f6:78:6a:
+                    8f:73
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Subject Alternative Name: 
+                DNS:twitter.com, DNS:www.twitter.com
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            X509v3 Key Usage: critical
+                Digital Signature, Key Encipherment
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, TLS Web Client Authentication
+            X509v3 Certificate Policies: 
+                Policy: 2.16.840.1.113733.1.7.23.6
+                  CPS: https://d.symcb.com/cps
+                  User Notice:
+                    Explicit Text: https://d.symcb.com/rpa
+
+            X509v3 Authority Key Identifier: 
+                keyid:01:59:AB:E7:DD:3A:0B:59:A6:64:63:D6:CF:20:07:57:D5:91:E7:6A
+
+            X509v3 CRL Distribution Points: 
+
+                Full Name:
+                  URI:http://sr.symcb.com/sr.crl
+
+            Authority Information Access: 
+                OCSP - URI:http://sr.symcd.com
+                CA Issuers - URI:http://sr.symcb.com/sr.crt
+
+    Signature Algorithm: sha256WithRSAEncryption
+         d1:53:68:e9:d6:20:d0:56:7a:10:80:b8:e9:7e:00:c9:9e:d5:
+         35:4a:a2:d2:a0:16:8a:e2:fb:eb:96:88:77:c2:6e:35:f4:a7:
+         a9:aa:dc:35:7b:c6:7d:5e:3c:f6:c9:5b:a0:d1:58:ae:7d:96:
+         e7:54:02:5c:69:1b:56:92:26:ad:06:2c:c1:5a:ff:59:f3:8a:
+         8c:94:32:0d:1a:42:d1:6e:bc:1c:bd:a8:c6:08:01:1b:73:17:
+         93:28:30:ae:ce:4d:4e:2d:4b:bf:22:af:9a:61:32:7a:a8:68:
+         25:19:3c:6d:fb:67:cc:29:3f:5b:f5:d1:af:4c:bf:67:a3:60:
+         c4:dd:b0:fb:83:55:6d:b5:2c:a9:7d:34:ad:b0:08:c7:2c:f0:
+         cb:4c:d8:2b:79:f4:e9:da:7f:6e:c0:de:55:7c:d6:d6:47:cf:
+         c4:90:ef:4f:be:eb:c9:3d:05:71:6b:5e:c7:36:8d:4f:0c:3c:
+         47:83:a5:11:88:22:f8:46:e0:f8:9b:1a:fe:e9:a2:df:90:81:
+         10:71:f3:97:9c:b7:69:60:77:20:d6:87:85:ee:5a:77:d2:92:
+         ec:d9:5d:1f:31:3b:3a:e2:5b:35:d1:92:36:db:44:d4:79:d9:
+         6c:03:24:87:5d:c3:86:c6:10:e2:ea:65:7c:cf:b8:ef:c2:31:
+         02:55:72:12
+-----BEGIN CERTIFICATE-----
+MIIFjTCCBHWgAwIBAgIQGshet67DUTzYDYU4Xs/SCDANBgkqhkiG9w0BAQsFADB3
+MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAd
+BgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVj
+IENsYXNzIDMgRVYgU1NMIENBIC0gRzMwHhcNMTQwOTEwMDAwMDAwWhcNMTYwNTA5
+MjM1OTU5WjCCARIxEzARBgsrBgEEAYI3PAIBAxMCVVMxGTAXBgsrBgEEAYI3PAIB
+AgwIRGVsYXdhcmUxHTAbBgNVBA8TFFByaXZhdGUgT3JnYW5pemF0aW9uMRAwDgYD
+VQQFEwc0MzM3NDQ2MQswCQYDVQQGEwJVUzETMBEGA1UEEQwKOTQxMDMtMTMwNzET
+MBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzEXMBUG
+A1UECQwOMTM1NSBNYXJrZXQgU3QxFjAUBgNVBAoMDVR3aXR0ZXIsIEluYy4xGTAX
+BgNVBAsMEFR3aXR0ZXIgU2VjdXJpdHkxFDASBgNVBAMMC3R3aXR0ZXIuY29tMIIB
+IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA46xZNAfcEfgcyrMPk0SKVDR2
+kGrAIgC+lZraWDxsODGioh87ZOKd4PXCqweQW3z++YiMap1pO+AjZbcR1uiI1j5t
+i+3K6lgL/k2/KpXKuyG7ztbiEAIRIWgm95J+nKOAsYLX5aaghkdCGsZbBNnDtbKb
+ONShbTu92AXwUZu9lXd/6QKOYKN6ZSBSI9uNASckwgBmDRRms1IrzGtbpUQv4kBt
+2iGhklpXEtNHAe/p36/GkYwhr3dlEzYcY3otBeZjxQvYOems8jv/ncWnRgpuGmYQ
+HkrnuseJeR+u8fOEA8rnUIoZY788IBB4xfRTPH1eDa+WcImSuX+aGQz2eGqPcwID
+AQABo4IBdjCCAXIwJwYDVR0RBCAwHoILdHdpdHRlci5jb22CD3d3dy50d2l0dGVy
+LmNvbTAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEF
+BQcDAQYIKwYBBQUHAwIwZgYDVR0gBF8wXTBbBgtghkgBhvhFAQcXBjBMMCMGCCsG
+AQUFBwIBFhdodHRwczovL2Quc3ltY2IuY29tL2NwczAlBggrBgEFBQcCAjAZGhdo
+dHRwczovL2Quc3ltY2IuY29tL3JwYTAfBgNVHSMEGDAWgBQBWavn3ToLWaZkY9bP
+IAdX1ZHnajArBgNVHR8EJDAiMCCgHqAchhpodHRwOi8vc3Iuc3ltY2IuY29tL3Ny
+LmNybDBXBggrBgEFBQcBAQRLMEkwHwYIKwYBBQUHMAGGE2h0dHA6Ly9zci5zeW1j
+ZC5jb20wJgYIKwYBBQUHMAKGGmh0dHA6Ly9zci5zeW1jYi5jb20vc3IuY3J0MA0G
+CSqGSIb3DQEBCwUAA4IBAQDRU2jp1iDQVnoQgLjpfgDJntU1SqLSoBaK4vvrloh3
+wm419Kepqtw1e8Z9Xjz2yVug0ViufZbnVAJcaRtWkiatBizBWv9Z84qMlDINGkLR
+brwcvajGCAEbcxeTKDCuzk1OLUu/Iq+aYTJ6qGglGTxt+2fMKT9b9dGvTL9no2DE
+3bD7g1VttSypfTStsAjHLPDLTNgrefTp2n9uwN5VfNbWR8/EkO9PvuvJPQVxa17H
+No1PDDxHg6URiCL4RuD4mxr+6aLfkIEQcfOXnLdpYHcg1oeF7lp30pLs2V0fMTs6
+4ls10ZI220TUedlsAySHXcOGxhDi6mV8z7jvwjECVXIS
+-----END CERTIFICATE-----
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            7e:e1:4a:6f:6f:ef:f2:d3:7f:3f:ad:65:4d:3a:da:b4
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2006 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G5
+        Validity
+            Not Before: Oct 31 00:00:00 2013 GMT
+            Not After : Oct 30 23:59:59 2023 GMT
+        Subject: C=US, O=Symantec Corporation, OU=Symantec Trust Network, CN=Symantec Class 3 EV SSL CA - G3
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:d8:a1:65:74:23:e8:2b:64:e2:32:d7:33:37:3d:
+                    8e:f5:34:16:48:dd:4f:7f:87:1c:f8:44:23:13:8e:
+                    fb:11:d8:44:5a:18:71:8e:60:16:26:92:9b:fd:17:
+                    0b:e1:71:70:42:fe:bf:fa:1c:c0:aa:a3:a7:b5:71:
+                    e8:ff:18:83:f6:df:10:0a:13:62:c8:3d:9c:a7:de:
+                    2e:3f:0c:d9:1d:e7:2e:fb:2a:ce:c8:9a:7f:87:bf:
+                    d8:4c:04:15:32:c9:d1:cc:95:71:a0:4e:28:4f:84:
+                    d9:35:fb:e3:86:6f:94:53:e6:72:8a:63:67:2e:be:
+                    69:f6:f7:6e:8e:9c:60:04:eb:29:fa:c4:47:42:d2:
+                    78:98:e3:ec:0b:a5:92:dc:b7:9a:bd:80:64:2b:38:
+                    7c:38:09:5b:66:f6:2d:95:7a:86:b2:34:2e:85:9e:
+                    90:0e:5f:b7:5d:a4:51:72:46:70:13:bf:67:f2:b6:
+                    a7:4d:14:1e:6c:b9:53:ee:23:1a:4e:8d:48:55:43:
+                    41:b1:89:75:6a:40:28:c5:7d:dd:d2:6e:d2:02:19:
+                    2f:7b:24:94:4b:eb:f1:1a:a9:9b:e3:23:9a:ea:fa:
+                    33:ab:0a:2c:b7:f4:60:08:dd:9f:1c:cd:dd:2d:01:
+                    66:80:af:b3:2f:29:1d:23:b8:8a:e1:a1:70:07:0c:
+                    34:0f
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            Authority Information Access: 
+                OCSP - URI:http://s2.symcb.com
+
+            X509v3 Basic Constraints: critical
+                CA:TRUE, pathlen:0
+            X509v3 Certificate Policies: 
+                Policy: X509v3 Any Policy
+                  CPS: http://www.symauth.com/cps
+                  User Notice:
+                    Explicit Text: http://www.symauth.com/rpa
+
+            X509v3 CRL Distribution Points: 
+
+                Full Name:
+                  URI:http://s1.symcb.com/pca3-g5.crl
+
+            X509v3 Key Usage: critical
+                Certificate Sign, CRL Sign
+            X509v3 Subject Alternative Name: 
+                DirName:/CN=SymantecPKI-1-533
+            X509v3 Subject Key Identifier: 
+                01:59:AB:E7:DD:3A:0B:59:A6:64:63:D6:CF:20:07:57:D5:91:E7:6A
+            X509v3 Authority Key Identifier: 
+                keyid:7F:D3:65:A7:C2:DD:EC:BB:F0:30:09:F3:43:39:FA:02:AF:33:31:33
+
+    Signature Algorithm: sha256WithRSAEncryption
+         42:01:55:7b:d0:16:1a:5d:58:e8:bb:9b:a8:4d:d7:f3:d7:eb:
+         13:94:86:d6:7f:21:0b:47:bc:57:9b:92:5d:4f:05:9f:38:a4:
+         10:7c:cf:83:be:06:43:46:8d:08:bc:6a:d7:10:a6:fa:ab:af:
+         2f:61:a8:63:f2:65:df:7f:4c:88:12:88:4f:b3:69:d9:ff:27:
+         c0:0a:97:91:8f:56:fb:89:c4:a8:bb:92:2d:1b:73:b0:c6:ab:
+         36:f4:96:6c:20:08:ef:0a:1e:66:24:45:4f:67:00:40:c8:07:
+         54:74:33:3b:a6:ad:bb:23:9f:66:ed:a2:44:70:34:fb:0e:ea:
+         01:fd:cf:78:74:df:a7:ad:55:b7:5f:4d:f6:d6:3f:e0:86:ce:
+         24:c7:42:a9:13:14:44:35:4b:b6:df:c9:60:ac:0c:7f:d9:93:
+         21:4b:ee:9c:e4:49:02:98:d3:60:7b:5c:bc:d5:30:2f:07:ce:
+         44:42:c4:0b:99:fe:e6:9f:fc:b0:78:86:51:6d:d1:2c:9d:c6:
+         96:fb:85:82:bb:04:2f:f7:62:80:ef:62:da:7f:f6:0e:ac:90:
+         b8:56:bd:79:3f:f2:80:6e:a3:d9:b9:0f:5d:3a:07:1d:91:93:
+         86:4b:29:4c:e1:dc:b5:e1:e0:33:9d:b3:cb:36:91:4b:fe:a1:
+         b4:ee:f0:f9
+-----BEGIN CERTIFICATE-----
+MIIFKzCCBBOgAwIBAgIQfuFKb2/v8tN/P61lTTratDANBgkqhkiG9w0BAQsFADCB
+yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
+U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
+ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5IC0gRzUwHhcNMTMxMDMxMDAwMDAwWhcNMjMxMDMwMjM1OTU5WjB3MQsw
+CQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNV
+BAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIENs
+YXNzIDMgRVYgU1NMIENBIC0gRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQDYoWV0I+grZOIy1zM3PY71NBZI3U9/hxz4RCMTjvsR2ERaGHGOYBYmkpv9
+FwvhcXBC/r/6HMCqo6e1cej/GIP23xAKE2LIPZyn3i4/DNkd5y77Ks7Imn+Hv9hM
+BBUyydHMlXGgTihPhNk1++OGb5RT5nKKY2cuvmn2926OnGAE6yn6xEdC0niY4+wL
+pZLct5q9gGQrOHw4CVtm9i2VeoayNC6FnpAOX7ddpFFyRnATv2fytqdNFB5suVPu
+IxpOjUhVQ0GxiXVqQCjFfd3SbtICGS97JJRL6/EaqZvjI5rq+jOrCiy39GAI3Z8c
+zd0tAWaAr7MvKR0juIrhoXAHDDQPAgMBAAGjggFdMIIBWTAvBggrBgEFBQcBAQQj
+MCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9zMi5zeW1jYi5jb20wEgYDVR0TAQH/BAgw
+BgEB/wIBADBlBgNVHSAEXjBcMFoGBFUdIAAwUjAmBggrBgEFBQcCARYaaHR0cDov
+L3d3dy5zeW1hdXRoLmNvbS9jcHMwKAYIKwYBBQUHAgIwHBoaaHR0cDovL3d3dy5z
+eW1hdXRoLmNvbS9ycGEwMAYDVR0fBCkwJzAloCOgIYYfaHR0cDovL3MxLnN5bWNi
+LmNvbS9wY2EzLWc1LmNybDAOBgNVHQ8BAf8EBAMCAQYwKQYDVR0RBCIwIKQeMBwx
+GjAYBgNVBAMTEVN5bWFudGVjUEtJLTEtNTMzMB0GA1UdDgQWBBQBWavn3ToLWaZk
+Y9bPIAdX1ZHnajAfBgNVHSMEGDAWgBR/02Wnwt3su/AwCfNDOfoCrzMxMzANBgkq
+hkiG9w0BAQsFAAOCAQEAQgFVe9AWGl1Y6LubqE3X89frE5SG1n8hC0e8V5uSXU8F
+nzikEHzPg74GQ0aNCLxq1xCm+quvL2GoY/Jl339MiBKIT7Np2f8nwAqXkY9W+4nE
+qLuSLRtzsMarNvSWbCAI7woeZiRFT2cAQMgHVHQzO6atuyOfZu2iRHA0+w7qAf3P
+eHTfp61Vt19N9tY/4IbOJMdCqRMURDVLtt/JYKwMf9mTIUvunORJApjTYHtcvNUw
+LwfORELEC5n+5p/8sHiGUW3RLJ3GlvuFgrsEL/digO9i2n/2DqyQuFa9eT/ygG6j
+2bkPXToHHZGThkspTOHcteHgM52zyzaRS/6htO7w+Q==
+-----END CERTIFICATE-----
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            18:da:d1:9e:26:7d:e8:bb:4a:21:58:cd:cc:6b:3b:4a
+    Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2006 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G5
+        Validity
+            Not Before: Nov  8 00:00:00 2006 GMT
+            Not After : Jul 16 23:59:59 2036 GMT
+        Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 2006 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G5
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:af:24:08:08:29:7a:35:9e:60:0c:aa:e7:4b:3b:
+                    4e:dc:7c:bc:3c:45:1c:bb:2b:e0:fe:29:02:f9:57:
+                    08:a3:64:85:15:27:f5:f1:ad:c8:31:89:5d:22:e8:
+                    2a:aa:a6:42:b3:8f:f8:b9:55:b7:b1:b7:4b:b3:fe:
+                    8f:7e:07:57:ec:ef:43:db:66:62:15:61:cf:60:0d:
+                    a4:d8:de:f8:e0:c3:62:08:3d:54:13:eb:49:ca:59:
+                    54:85:26:e5:2b:8f:1b:9f:eb:f5:a1:91:c2:33:49:
+                    d8:43:63:6a:52:4b:d2:8f:e8:70:51:4d:d1:89:69:
+                    7b:c7:70:f6:b3:dc:12:74:db:7b:5d:4b:56:d3:96:
+                    bf:15:77:a1:b0:f4:a2:25:f2:af:1c:92:67:18:e5:
+                    f4:06:04:ef:90:b9:e4:00:e4:dd:3a:b5:19:ff:02:
+                    ba:f4:3c:ee:e0:8b:eb:37:8b:ec:f4:d7:ac:f2:f6:
+                    f0:3d:af:dd:75:91:33:19:1d:1c:40:cb:74:24:19:
+                    21:93:d9:14:fe:ac:2a:52:c7:8f:d5:04:49:e4:8d:
+                    63:47:88:3c:69:83:cb:fe:47:bd:2b:7e:4f:c5:95:
+                    ae:0e:9d:d4:d1:43:c0:67:73:e3:14:08:7e:e5:3f:
+                    9f:73:b8:33:0a:cf:5d:3f:34:87:96:8a:ee:53:e8:
+                    25:15
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: critical
+                CA:TRUE
+            X509v3 Key Usage: critical
+                Certificate Sign, CRL Sign
+            1.3.6.1.5.5.7.1.12: 
+                0_.].[0Y0W0U..image/gif0!0.0...+..............k...j.H.,{..0%.#http://logo.verisign.com/vslogo.gif
+            X509v3 Subject Key Identifier: 
+                7F:D3:65:A7:C2:DD:EC:BB:F0:30:09:F3:43:39:FA:02:AF:33:31:33
+    Signature Algorithm: sha1WithRSAEncryption
+         93:24:4a:30:5f:62:cf:d8:1a:98:2f:3d:ea:dc:99:2d:bd:77:
+         f6:a5:79:22:38:ec:c4:a7:a0:78:12:ad:62:0e:45:70:64:c5:
+         e7:97:66:2d:98:09:7e:5f:af:d6:cc:28:65:f2:01:aa:08:1a:
+         47:de:f9:f9:7c:92:5a:08:69:20:0d:d9:3e:6d:6e:3c:0d:6e:
+         d8:e6:06:91:40:18:b9:f8:c1:ed:df:db:41:aa:e0:96:20:c9:
+         cd:64:15:38:81:c9:94:ee:a2:84:29:0b:13:6f:8e:db:0c:dd:
+         25:02:db:a4:8b:19:44:d2:41:7a:05:69:4a:58:4f:60:ca:7e:
+         82:6a:0b:02:aa:25:17:39:b5:db:7f:e7:84:65:2a:95:8a:bd:
+         86:de:5e:81:16:83:2d:10:cc:de:fd:a8:82:2a:6d:28:1f:0d:
+         0b:c4:e5:e7:1a:26:19:e1:f4:11:6f:10:b5:95:fc:e7:42:05:
+         32:db:ce:9d:51:5e:28:b6:9e:85:d3:5b:ef:a5:7d:45:40:72:
+         8e:b7:0e:6b:0e:06:fb:33:35:48:71:b8:9d:27:8b:c4:65:5f:
+         0d:86:76:9c:44:7a:f6:95:5c:f6:5d:32:08:33:a4:54:b6:18:
+         3f:68:5c:f2:42:4a:85:38:54:83:5f:d1:e8:2c:f2:ac:11:d6:
+         a8:ed:63:6a
+-----BEGIN CERTIFICATE-----
+MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
+yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
+U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
+ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
+MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
+ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
+biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
+U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
+aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
+nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
+t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
+SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
+BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
+rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
+NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
+BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
+BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
+aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
+MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
+p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
+5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
+WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
+4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
+hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
+-----END CERTIFICATE-----
diff --git a/net/data/ssl/scripts/generate-test-certs.sh b/net/data/ssl/scripts/generate-test-certs.sh
index d62bb98..24eadf1 100755
--- a/net/data/ssl/scripts/generate-test-certs.sh
+++ b/net/data/ssl/scripts/generate-test-certs.sh
@@ -124,7 +124,140 @@
 SUBJECT_NAME="req_punycode_dn" \
   try openssl req -x509 -days 3650 -extensions req_punycode \
     -config ../scripts/ee.cnf -newkey rsa:2048 -text \
-     -out ../certificates/punycodetest.pem
+    -out ../certificates/punycodetest.pem
+
+## Reject intranet hostnames in "publicly" trusted certs
+# 365 * 3 = 1095
+SUBJECT_NAME="req_dn" \
+  try openssl req -x509 -days 1095 \
+    -config ../scripts/ee.cnf -newkey rsa:2048 -text \
+    -out ../certificates/reject_intranet_hosts.pem
+
+## Validity too long unit test support.
+try openssl req -config ../scripts/ee.cnf \
+  -newkey rsa:2048 -text -out ../certificates/10_year_validity.req
+CA_COMMON_NAME="Test Root CA" \
+  try openssl ca \
+    -batch \
+    -extensions user_cert \
+    -startdate 081030000000Z \
+    -enddate   181029000000Z \
+    -in ../certificates/10_year_validity.req \
+    -out ../certificates/10_year_validity.pem \
+    -config ca.cnf
+# 365 * 11 = 4015
+try openssl req -config ../scripts/ee.cnf \
+  -newkey rsa:2048 -text -out ../certificates/11_year_validity.req
+CA_COMMON_NAME="Test Root CA" \
+  try openssl ca \
+    -batch \
+    -extensions user_cert \
+    -startdate 141030000000Z \
+    -days 4015 \
+    -in ../certificates/11_year_validity.req \
+    -out ../certificates/11_year_validity.pem \
+    -config ca.cnf
+try openssl req -config ../scripts/ee.cnf \
+  -newkey rsa:2048 -text -out ../certificates/39_months_after_2015_04.req
+CA_COMMON_NAME="Test Root CA" \
+  try openssl ca \
+    -batch \
+    -extensions user_cert \
+    -startdate 150402000000Z \
+    -enddate   180702000000Z \
+    -in ../certificates/39_months_after_2015_04.req \
+    -out ../certificates/39_months_after_2015_04.pem \
+    -config ca.cnf
+try openssl req -config ../scripts/ee.cnf \
+  -newkey rsa:2048 -text -out ../certificates/40_months_after_2015_04.req
+CA_COMMON_NAME="Test Root CA" \
+  try openssl ca \
+    -batch \
+    -extensions user_cert \
+    -startdate 150402000000Z \
+    -enddate   180801000000Z \
+    -in ../certificates/40_months_after_2015_04.req \
+    -out ../certificates/40_months_after_2015_04.pem \
+    -config ca.cnf
+try openssl req -config ../scripts/ee.cnf \
+  -newkey rsa:2048 -text -out ../certificates/60_months_after_2012_07.req
+CA_COMMON_NAME="Test Root CA" \
+  try openssl ca \
+    -batch \
+    -extensions user_cert \
+    -startdate 141030000000Z \
+    -enddate   190930000000Z \
+    -in ../certificates/60_months_after_2012_07.req \
+    -out ../certificates/60_months_after_2012_07.pem \
+    -config ca.cnf
+try openssl req -config ../scripts/ee.cnf \
+  -newkey rsa:2048 -text -out ../certificates/61_months_after_2012_07.req
+# 30 * 61 = 1830
+CA_COMMON_NAME="Test Root CA" \
+  try openssl ca \
+    -batch \
+    -extensions user_cert \
+    -startdate 141030000000Z \
+    -days 1830 \
+    -in ../certificates/61_months_after_2012_07.req \
+    -out ../certificates/61_months_after_2012_07.pem \
+    -config ca.cnf
+# start date after expiry date
+try openssl req -config ../scripts/ee.cnf \
+  -newkey rsa:2048 -text -out ../certificates/start_after_expiry.req
+CA_COMMON_NAME="Test Root CA" \
+  try openssl ca \
+    -batch \
+    -extensions user_cert \
+    -startdate 180901000000Z \
+    -enddate   150402000000Z \
+    -in ../certificates/start_after_expiry.req \
+    -out ../certificates/start_after_expiry.pem \
+    -config ca.cnf
+try openssl req -config ../scripts/ee.cnf \
+  -newkey rsa:2048 -text -out ../certificates/start_after_expiry.req
+# Issued pre-BRs, lifetime < 120 months, expires before 2019-07-01
+try openssl req -config ../scripts/ee.cnf \
+  -newkey rsa:2048 -text -out ../certificates/pre_br_validity_ok.req
+CA_COMMON_NAME="Test Root CA" \
+  try openssl ca \
+    -batch \
+    -extensions user_cert \
+    -startdate 080101000000Z \
+    -enddate   150101000000Z \
+    -in ../certificates/pre_br_validity_ok.req \
+    -out ../certificates/pre_br_validity_ok.pem \
+    -config ca.cnf
+try openssl req -config ../scripts/ee.cnf \
+  -newkey rsa:2048 -text -out ../certificates/pre_br_validity_ok.req
+# Issued pre-BRs, lifetime > 120 months, expires before 2019-07-01
+try openssl req -config ../scripts/ee.cnf \
+  -newkey rsa:2048 -text -out ../certificates/pre_br_validity_bad_121.req
+CA_COMMON_NAME="Test Root CA" \
+  try openssl ca \
+    -batch \
+    -extensions user_cert \
+    -startdate 080101000000Z \
+    -enddate   180501000000Z \
+    -in ../certificates/pre_br_validity_bad_121.req \
+    -out ../certificates/pre_br_validity_bad_121.pem \
+    -config ca.cnf
+try openssl req -config ../scripts/ee.cnf \
+  -newkey rsa:2048 -text -out ../certificates/pre_br_validity_bad_121.req
+# Issued pre-BRs, lifetime < 120 months, expires after 2019-07-01
+try openssl req -config ../scripts/ee.cnf \
+  -newkey rsa:2048 -text -out ../certificates/pre_br_validity_bad_2020.req
+CA_COMMON_NAME="Test Root CA" \
+  try openssl ca \
+    -batch \
+    -extensions user_cert \
+    -startdate 120501000000Z \
+    -enddate   190703000000Z \
+    -in ../certificates/pre_br_validity_bad_2020.req \
+    -out ../certificates/pre_br_validity_bad_2020.pem \
+    -config ca.cnf
+try openssl req -config ../scripts/ee.cnf \
+  -newkey rsa:2048 -text -out ../certificates/pre_br_validity_bad_2020.req
 
 # Regenerate CRLSets
 ## Block a leaf cert directly by SPKI
diff --git a/net/data/websocket/truncated-headers_wsh.py b/net/data/websocket/truncated-headers_wsh.py
new file mode 100644
index 0000000..70ce2f2
--- /dev/null
+++ b/net/data/websocket/truncated-headers_wsh.py
@@ -0,0 +1,19 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+from mod_pywebsocket import handshake
+
+
+def web_socket_do_extra_handshake(request):
+  msg = ('HTTP/1.1 101 Switching Protocols\r\n'
+         'Upgrade: websocket\r\n'
+         'Connection: Upgrade\r\n'
+         'Sec-WebSocket-Accept: 3rfd')
+  request.connection.write(msg)
+  # Prevent pywebsocket from sending its own handshake message.
+  raise handshake.AbortedByUserException('Close the connection')
+
+
+def web_socket_transfer_data(request):
+  pass
diff --git a/net/ftp/ftp_network_transaction.cc b/net/ftp/ftp_network_transaction.cc
index 17d5754..2b308c7 100644
--- a/net/ftp/ftp_network_transaction.cc
+++ b/net/ftp/ftp_network_transaction.cc
@@ -224,7 +224,8 @@
       data_connection_port_(0),
       socket_factory_(socket_factory),
       next_state_(STATE_NONE),
-      state_after_data_connect_complete_(STATE_CTRL_WRITE_SIZE) {}
+      state_after_data_connect_complete_(STATE_NONE) {
+}
 
 FtpNetworkTransaction::~FtpNetworkTransaction() {
 }
@@ -345,20 +346,13 @@
   ctrl_socket_.reset();
   data_socket_.reset();
   next_state_ = STATE_NONE;
-  state_after_data_connect_complete_ = STATE_CTRL_WRITE_SIZE;
+  state_after_data_connect_complete_ = STATE_NONE;
 }
 
-void FtpNetworkTransaction::ResetDataConnectionAfterError(State next_state) {
-  // The server _might_ have reset the data connection
-  // (see RFC 959 3.2. ESTABLISHING DATA CONNECTIONS:
-  // "The server MUST close the data connection under the following
-  // conditions:
-  // ...
-  // 5. An irrecoverable error condition occurs.")
-  //
-  // It is ambiguous what an irrecoverable error condition is,
-  // so we take no chances.
-  state_after_data_connect_complete_ = next_state;
+void FtpNetworkTransaction::EstablishDataConnection(State state_after_connect) {
+  DCHECK(state_after_connect == STATE_CTRL_WRITE_RETR ||
+         state_after_connect == STATE_CTRL_WRITE_LIST);
+  state_after_data_connect_complete_ = state_after_connect;
   next_state_ = use_epsv_ ? STATE_CTRL_WRITE_EPSV : STATE_CTRL_WRITE_PASV;
 }
 
@@ -944,7 +938,7 @@
     case ERROR_CLASS_INITIATED:
       return Stop(ERR_INVALID_RESPONSE);
     case ERROR_CLASS_OK:
-      next_state_ = use_epsv_ ? STATE_CTRL_WRITE_EPSV : STATE_CTRL_WRITE_PASV;
+      next_state_ = STATE_CTRL_WRITE_SIZE;
       break;
     case ERROR_CLASS_INFO_NEEDED:
       return Stop(ERR_INVALID_RESPONSE);
@@ -1056,19 +1050,7 @@
     case ERROR_CLASS_TRANSIENT_ERROR:
       return Stop(GetNetErrorCodeForFtpResponseCode(response.status_code));
     case ERROR_CLASS_PERMANENT_ERROR:
-      // Code 550 means "Failed to open file". Other codes are unrelated,
-      // like "Not logged in" etc.
-      if (response.status_code != 550 || resource_type_ == RESOURCE_TYPE_FILE)
-        return Stop(GetNetErrorCodeForFtpResponseCode(response.status_code));
-
-      // It's possible that RETR failed because the path is a directory.
-      resource_type_ = RESOURCE_TYPE_DIRECTORY;
-
-      // We're going to try CWD next, but first send a PASV one more time,
-      // because some FTP servers, including FileZilla, require that.
-      // See http://crbug.com/25316.
-      next_state_ = use_epsv_ ? STATE_CTRL_WRITE_EPSV : STATE_CTRL_WRITE_PASV;
-      break;
+      return Stop(GetNetErrorCodeForFtpResponseCode(response.status_code));
     default:
       NOTREACHED();
       return Stop(ERR_UNEXPECTED);
@@ -1090,15 +1072,8 @@
 
 int FtpNetworkTransaction::ProcessResponseSIZE(
     const FtpCtrlResponse& response) {
-  State state_after_size;
-  if (resource_type_ == RESOURCE_TYPE_FILE)
-    state_after_size = STATE_CTRL_WRITE_RETR;
-  else
-    state_after_size = STATE_CTRL_WRITE_CWD;
-
   switch (GetErrorClass(response.status_code)) {
     case ERROR_CLASS_INITIATED:
-      next_state_ = state_after_size;
       break;
     case ERROR_CLASS_OK:
       if (response.lines.size() != 1)
@@ -1113,14 +1088,10 @@
       // Some FTP servers (for example, the qnx one) send a SIZE even for
       // directories.
       response_.expected_content_size = size;
-
-      next_state_ = state_after_size;
       break;
     case ERROR_CLASS_INFO_NEEDED:
-      next_state_ = state_after_size;
       break;
     case ERROR_CLASS_TRANSIENT_ERROR:
-      ResetDataConnectionAfterError(state_after_size);
       break;
     case ERROR_CLASS_PERMANENT_ERROR:
       // It's possible that SIZE failed because the path is a directory.
@@ -1128,14 +1099,15 @@
           response.status_code != 550) {
         return Stop(GetNetErrorCodeForFtpResponseCode(response.status_code));
       }
-
-      ResetDataConnectionAfterError(state_after_size);
       break;
     default:
       NOTREACHED();
       return Stop(ERR_UNEXPECTED);
   }
-
+  if (resource_type_ == RESOURCE_TYPE_FILE)
+    EstablishDataConnection(STATE_CTRL_WRITE_RETR);
+  else
+    next_state_ = STATE_CTRL_WRITE_CWD;
   return OK;
 }
 
@@ -1154,7 +1126,7 @@
     case ERROR_CLASS_INITIATED:
       return Stop(ERR_INVALID_RESPONSE);
     case ERROR_CLASS_OK:
-      next_state_ = STATE_CTRL_WRITE_LIST;
+      EstablishDataConnection(STATE_CTRL_WRITE_LIST);
       break;
     case ERROR_CLASS_INFO_NEEDED:
       return Stop(ERR_INVALID_RESPONSE);
@@ -1191,7 +1163,7 @@
   // an access error (http://crbug.com/56734). Try RETR just to be sure.
   resource_type_ = RESOURCE_TYPE_FILE;
 
-  ResetDataConnectionAfterError(STATE_CTRL_WRITE_RETR);
+  EstablishDataConnection(STATE_CTRL_WRITE_RETR);
   return OK;
 }
 
diff --git a/net/ftp/ftp_network_transaction.h b/net/ftp/ftp_network_transaction.h
index e350e16..fc94ae7 100644
--- a/net/ftp/ftp_network_transaction.h
+++ b/net/ftp/ftp_network_transaction.h
@@ -127,8 +127,9 @@
   // Resets the members of the transaction so it can be restarted.
   void ResetStateForRestart();
 
-  // Resets the data connection after an error and switches to |next_state|.
-  void ResetDataConnectionAfterError(State next_state);
+  // Establishes the data connection and switches to |state_after_connect|.
+  // |state_after_connect| should only be RETR or LIST.
+  void EstablishDataConnection(State state_after_connect);
 
   void DoCallback(int result);
   void OnIOComplete(int result);
diff --git a/net/ftp/ftp_network_transaction_unittest.cc b/net/ftp/ftp_network_transaction_unittest.cc
index ad748c9..ede22d3 100644
--- a/net/ftp/ftp_network_transaction_unittest.cc
+++ b/net/ftp/ftp_network_transaction_unittest.cc
@@ -41,14 +41,12 @@
     PRE_PWD,
     PRE_TYPE,
     PRE_SIZE,
-    PRE_EPSV,
-    PRE_PASV,
+    PRE_LIST_EPSV,
+    PRE_LIST_PASV,
     PRE_LIST,
     PRE_RETR,
     PRE_RETR_EPSV,
     PRE_RETR_PASV,
-    PRE_CWD_EPSV,
-    PRE_CWD_PASV,
     PRE_CWD,
     PRE_QUIT,
     PRE_NOPASV,
@@ -85,26 +83,19 @@
                       "257 \"/\" is your current location\r\n");
       case PRE_TYPE:
         return Verify(std::string("TYPE ") + data_type_ + "\r\n", data,
-                      use_epsv_ ? PRE_EPSV : PRE_PASV,
-                      "200 TYPE set successfully\r\n");
-      case PRE_EPSV:
-        return Verify("EPSV\r\n", data, PRE_SIZE,
+                      PRE_SIZE, "200 TYPE set successfully\r\n");
+      case PRE_LIST_EPSV:
+        return Verify("EPSV\r\n", data, PRE_LIST,
                       "227 Entering Extended Passive Mode (|||31744|)\r\n");
-      case PRE_CWD_EPSV:
-        return Verify("EPSV\r\n", data, PRE_CWD,
-                      "227 Entering Extended Passive Mode (|||31744|)\r\n");
+      case PRE_LIST_PASV:
+        return Verify("PASV\r\n", data, PRE_LIST,
+                      "227 Entering Passive Mode 127,0,0,1,123,456\r\n");
       case PRE_RETR_EPSV:
         return Verify("EPSV\r\n", data, PRE_RETR,
                       "227 Entering Extended Passive Mode (|||31744|)\r\n");
-      case PRE_CWD_PASV:
-        return Verify("PASV\r\n", data, PRE_CWD,
-                      "227 Entering Passive Mode 127,0,0,1,123,456\r\n");
       case PRE_RETR_PASV:
         return Verify("PASV\r\n", data, PRE_RETR,
                       "227 Entering Passive Mode 127,0,0,1,123,456\r\n");
-      case PRE_PASV:
-        return Verify("PASV\r\n", data, PRE_SIZE,
-                      "227 Entering Passive Mode 127,0,0,1,123,456\r\n");
       case PRE_NOPASV:
         // Use unallocated 599 FTP error code to make sure it falls into the
         // generic ERR_FTP_FAILED bucket.
@@ -211,11 +202,11 @@
       return MockWriteResult(ASYNC, data.length());
     switch (state()) {
       case PRE_SIZE:
-        return Verify("SIZE /\r\n", data,
-                      use_epsv() ? PRE_CWD_EPSV : PRE_CWD_PASV,
+        return Verify("SIZE /\r\n", data, PRE_CWD,
                       "550 I can only retrieve regular files\r\n");
       case PRE_CWD:
-        return Verify("CWD /\r\n", data, PRE_LIST, "200 OK\r\n");
+        return Verify("CWD /\r\n", data,
+                      use_epsv() ? PRE_LIST_EPSV : PRE_LIST_PASV, "200 OK\r\n");
       case PRE_LIST:
         return Verify("LIST -l\r\n", data, PRE_QUIT, "200 OK\r\n");
       default:
@@ -237,11 +228,11 @@
     if (InjectFault())
       return MockWriteResult(ASYNC, data.length());
     switch (state()) {
-      case PRE_EPSV:
-        return Verify("EPSV\r\n", data, PRE_PASV,
+      case PRE_LIST_EPSV:
+        return Verify("EPSV\r\n", data, PRE_LIST_PASV,
                       "500 no EPSV for you\r\n");
       case PRE_SIZE:
-        return Verify("SIZE /\r\n", data, PRE_CWD_PASV,
+        return Verify("SIZE /\r\n", data, PRE_CWD,
                       "550 I can only retrieve regular files\r\n");
       default:
         return FtpSocketDataProviderDirectoryListing::OnWrite(data);
@@ -288,14 +279,15 @@
       case PRE_PWD:
         return Verify("PWD\r\n", data, PRE_TYPE,
                       "257 \"ANONYMOUS_ROOT:[000000]\"\r\n");
-      case PRE_EPSV:
-        return Verify("EPSV\r\n", data, PRE_PASV, "500 Invalid command\r\n");
+      case PRE_LIST_EPSV:
+        return Verify("EPSV\r\n", data, PRE_LIST_PASV,
+                      "500 Invalid command\r\n");
       case PRE_SIZE:
-        return Verify("SIZE ANONYMOUS_ROOT:[000000]dir\r\n", data, PRE_CWD_PASV,
+        return Verify("SIZE ANONYMOUS_ROOT:[000000]dir\r\n", data, PRE_CWD,
                       "550 I can only retrieve regular files\r\n");
       case PRE_CWD:
-        return Verify("CWD ANONYMOUS_ROOT:[dir]\r\n", data, PRE_LIST,
-                      "200 OK\r\n");
+        return Verify("CWD ANONYMOUS_ROOT:[dir]\r\n", data,
+                      use_epsv() ? PRE_LIST_EPSV : PRE_LIST_PASV, "200 OK\r\n");
       case PRE_LIST:
         return Verify("LIST *.*;0\r\n", data, PRE_QUIT, "200 OK\r\n");
       default:
@@ -322,15 +314,15 @@
       case PRE_PWD:
         return Verify("PWD\r\n", data, PRE_TYPE,
                       "257 \"ANONYMOUS_ROOT:[000000]\"\r\n");
-      case PRE_EPSV:
-        return Verify("EPSV\r\n", data, PRE_PASV,
+      case PRE_LIST_EPSV:
+        return Verify("EPSV\r\n", data, PRE_LIST_PASV,
                       "500 EPSV command unknown\r\n");
       case PRE_SIZE:
-        return Verify("SIZE ANONYMOUS_ROOT\r\n", data, PRE_CWD_PASV,
+        return Verify("SIZE ANONYMOUS_ROOT\r\n", data, PRE_CWD,
                       "550 I can only retrieve regular files\r\n");
       case PRE_CWD:
-        return Verify("CWD ANONYMOUS_ROOT:[000000]\r\n", data, PRE_LIST,
-                      "200 OK\r\n");
+        return Verify("CWD ANONYMOUS_ROOT:[000000]\r\n", data,
+                      use_epsv() ? PRE_LIST_EPSV : PRE_LIST_PASV, "200 OK\r\n");
       case PRE_LIST:
         return Verify("LIST *.*;0\r\n", data, PRE_QUIT, "200 OK\r\n");
       default:
@@ -354,8 +346,8 @@
       return MockWriteResult(ASYNC, data.length());
     switch (state()) {
       case PRE_SIZE:
-        return Verify("SIZE /file\r\n", data, PRE_RETR,
-                      "213 18\r\n");
+        return Verify("SIZE /file\r\n", data,
+                      use_epsv() ? PRE_RETR_EPSV : PRE_RETR_PASV, "213 18\r\n");
       case PRE_RETR:
         return Verify("RETR /file\r\n", data, PRE_QUIT, "200 OK\r\n");
       default:
@@ -377,8 +369,7 @@
       return MockWriteResult(ASYNC, data.length());
     switch (state()) {
       case PRE_SIZE:
-        return Verify("SIZE /file\r\n", data, PRE_CWD,
-                      "213 18\r\n");
+        return Verify("SIZE /file\r\n", data, PRE_CWD, "213 18\r\n");
       case PRE_CWD:
         return Verify("CWD /file\r\n", data,
                       use_epsv() ? PRE_RETR_EPSV : PRE_RETR_PASV,
@@ -404,8 +395,7 @@
       return MockWriteResult(ASYNC, data.length());
     switch (state()) {
       case PRE_SIZE:
-        return Verify("SIZE /file\r\n", data,
-                      use_epsv() ? PRE_CWD_EPSV : PRE_CWD_PASV,
+        return Verify("SIZE /file\r\n", data, PRE_CWD,
                       "550 File Not Found\r\n");
       case PRE_CWD:
         return Verify("CWD /file\r\n", data,
@@ -433,11 +423,11 @@
     if (InjectFault())
       return MockWriteResult(ASYNC, data.length());
     switch (state()) {
-      case PRE_EPSV:
-        return Verify("EPSV\r\n", data, PRE_PASV,
-                      "500 No can do\r\n");
+      case PRE_RETR_EPSV:
+        return Verify("EPSV\r\n", data, PRE_RETR_PASV, "500 No can do\r\n");
       case PRE_CWD:
-        return Verify("CWD /file\r\n", data, PRE_RETR_PASV,
+        return Verify("CWD /file\r\n", data,
+                      use_epsv() ? PRE_RETR_EPSV : PRE_RETR_PASV,
                       "550 Not a directory\r\n");
       default:
         return FtpSocketDataProviderFileDownload::OnWrite(data);
@@ -511,14 +501,15 @@
       case PRE_PWD:
         return Verify("PWD\r\n", data, PRE_TYPE,
                       "257 \"ANONYMOUS_ROOT:[000000]\"\r\n");
-      case PRE_EPSV:
-        return Verify("EPSV\r\n", data, PRE_PASV,
+      case PRE_LIST_EPSV:
+        return Verify("EPSV\r\n", data, PRE_LIST_PASV,
                       "500 EPSV command unknown\r\n");
       case PRE_SIZE:
         return Verify("SIZE ANONYMOUS_ROOT:[000000]file\r\n", data, PRE_CWD,
                       "213 18\r\n");
       case PRE_CWD:
-        return Verify("CWD ANONYMOUS_ROOT:[file]\r\n", data, PRE_RETR_PASV,
+        return Verify("CWD ANONYMOUS_ROOT:[file]\r\n", data,
+                      use_epsv() ? PRE_RETR_EPSV : PRE_RETR_PASV,
                       "550 Not a directory\r\n");
       case PRE_RETR:
         return Verify("RETR ANONYMOUS_ROOT:[000000]file\r\n", data, PRE_QUIT,
@@ -653,7 +644,7 @@
     if (InjectFault())
       return MockWriteResult(ASYNC, data.length());
     switch (state()) {
-      case PRE_EPSV:
+      case PRE_RETR_EPSV:
         return Verify("EPSV\r\n", data, expected_state_,
                       epsv_response_, epsv_response_length_);
       default:
@@ -681,7 +672,7 @@
     if (InjectFault())
       return MockWriteResult(ASYNC, data.length());
     switch (state()) {
-      case PRE_PASV:
+      case PRE_RETR_PASV:
         return Verify("PASV\r\n", data, expected_state_, pasv_response_);
       default:
         return FtpSocketDataProviderFileDownloadWithPasvFallback::OnWrite(data);
@@ -807,7 +798,6 @@
 
   void ExecuteTransaction(FtpSocketDataProvider* ctrl_socket,
                           const char* request,
-                          int data_socket,
                           int expected_result) {
     // Expect EPSV usage for non-IPv4 control connections.
     ctrl_socket->set_use_epsv((GetFamily() != AF_INET));
@@ -822,19 +812,10 @@
       MockRead(mock_data.c_str()),
     };
 
-    ScopedVector<StaticSocketDataProvider> data_sockets;
-    data_sockets.reserve(data_socket);
-    for (int i = 0; i < data_socket + 1; i++) {
-      // We only read from one data socket, other ones are dummy.
-      if (i == data_socket) {
-        data_sockets.push_back(new StaticSocketDataProvider(
-                                   data_reads, arraysize(data_reads), NULL, 0));
-      } else {
-        data_sockets.push_back(new StaticSocketDataProvider);
-      }
-      mock_socket_factory_.AddSocketDataProvider(data_sockets[i]);
-    }
-
+    scoped_ptr<StaticSocketDataProvider> data_socket(
+        new StaticSocketDataProvider(data_reads, arraysize(data_reads), NULL,
+                                     0));
+    mock_socket_factory_.AddSocketDataProvider(data_socket.get());
     FtpRequestInfo request_info = GetRequestInfo(request);
     EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState());
     ASSERT_EQ(ERR_IO_PENDING,
@@ -872,7 +853,7 @@
                              const char* response,
                              int expected_result) {
     ctrl_socket->InjectFailure(state, next_state, response);
-    ExecuteTransaction(ctrl_socket, request, 1, expected_result);
+    ExecuteTransaction(ctrl_socket, request, expected_result);
   }
 
   scoped_ptr<MockHostResolver> host_resolver_;
@@ -913,12 +894,12 @@
   FtpSocketDataProviderEvilSize ctrl_socket(
       "213 99999999999999999999999999999999\r\n",
       FtpSocketDataProvider::PRE_QUIT);
-  ExecuteTransaction(&ctrl_socket, "ftp://[::1]/file", 1, ERR_INVALID_RESPONSE);
+  ExecuteTransaction(&ctrl_socket, "ftp://[::1]/file", ERR_INVALID_RESPONSE);
 }
 
 TEST_P(FtpNetworkTransactionTest, DirectoryTransaction) {
   FtpSocketDataProviderDirectoryListing ctrl_socket;
-  ExecuteTransaction(&ctrl_socket, "ftp://host", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
 
   EXPECT_TRUE(transaction_.GetResponseInfo()->is_directory_listing);
   EXPECT_EQ(-1, transaction_.GetResponseInfo()->expected_content_size);
@@ -929,7 +910,7 @@
 
 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionWithPasvFallback) {
   FtpSocketDataProviderDirectoryListingWithPasvFallback ctrl_socket;
-  ExecuteTransaction(&ctrl_socket, "ftp://host", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
 
   EXPECT_TRUE(transaction_.GetResponseInfo()->is_directory_listing);
   EXPECT_EQ(-1, transaction_.GetResponseInfo()->expected_content_size);
@@ -937,7 +918,7 @@
 
 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionWithTypecode) {
   FtpSocketDataProviderDirectoryListing ctrl_socket;
-  ExecuteTransaction(&ctrl_socket, "ftp://host;type=d", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host;type=d", OK);
 
   EXPECT_TRUE(transaction_.GetResponseInfo()->is_directory_listing);
   EXPECT_EQ(-1, transaction_.GetResponseInfo()->expected_content_size);
@@ -946,19 +927,19 @@
 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionMultilineWelcome) {
   FtpSocketDataProviderDirectoryListing ctrl_socket;
   ctrl_socket.set_multiline_welcome(true);
-  ExecuteTransaction(&ctrl_socket, "ftp://host", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
 }
 
 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionShortReads2) {
   FtpSocketDataProviderDirectoryListing ctrl_socket;
   ctrl_socket.set_short_read_limit(2);
-  ExecuteTransaction(&ctrl_socket, "ftp://host", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
 }
 
 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionShortReads5) {
   FtpSocketDataProviderDirectoryListing ctrl_socket;
   ctrl_socket.set_short_read_limit(5);
-  ExecuteTransaction(&ctrl_socket, "ftp://host", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
 }
 
 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionMultilineWelcomeShort) {
@@ -968,33 +949,33 @@
   ctrl_socket.allow_unconsumed_reads(true);
   ctrl_socket.set_multiline_welcome(true);
   ctrl_socket.set_short_read_limit(5);
-  ExecuteTransaction(&ctrl_socket, "ftp://host", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
 }
 
 // Regression test for http://crbug.com/60555.
 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionZeroSize) {
   FtpSocketDataProviderDirectoryListingZeroSize ctrl_socket;
-  ExecuteTransaction(&ctrl_socket, "ftp://host", 0, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
 }
 
 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionVMS) {
   FtpSocketDataProviderVMSDirectoryListing ctrl_socket;
-  ExecuteTransaction(&ctrl_socket, "ftp://host/dir", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/dir", OK);
 }
 
 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionVMSRootDirectory) {
   FtpSocketDataProviderVMSDirectoryListingRootDirectory ctrl_socket;
-  ExecuteTransaction(&ctrl_socket, "ftp://host", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
 }
 
 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionTransferStarting) {
   FtpSocketDataProviderDirectoryListingTransferStarting ctrl_socket;
-  ExecuteTransaction(&ctrl_socket, "ftp://host", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransaction) {
   FtpSocketDataProviderFileDownload ctrl_socket;
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
 
   // We pass an artificial value of 18 as a response to the SIZE command.
   EXPECT_EQ(18, transaction_.GetResponseInfo()->expected_content_size);
@@ -1005,7 +986,7 @@
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionWithPasvFallback) {
   FtpSocketDataProviderFileDownloadWithPasvFallback ctrl_socket;
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
 
   // We pass an artificial value of 18 as a response to the SIZE command.
   EXPECT_EQ(18, transaction_.GetResponseInfo()->expected_content_size);
@@ -1014,7 +995,7 @@
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionWithTypecodeA) {
   FtpSocketDataProviderFileDownloadWithFileTypecode ctrl_socket;
   ctrl_socket.set_data_type('A');
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file;type=a", 0, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file;type=a", OK);
 
   // We pass an artificial value of 18 as a response to the SIZE command.
   EXPECT_EQ(18, transaction_.GetResponseInfo()->expected_content_size);
@@ -1022,7 +1003,7 @@
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionWithTypecodeI) {
   FtpSocketDataProviderFileDownloadWithFileTypecode ctrl_socket;
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file;type=i", 0, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file;type=i", OK);
 
   // We pass an artificial value of 18 as a response to the SIZE command.
   EXPECT_EQ(18, transaction_.GetResponseInfo()->expected_content_size);
@@ -1031,82 +1012,82 @@
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionMultilineWelcome) {
   FtpSocketDataProviderFileDownload ctrl_socket;
   ctrl_socket.set_multiline_welcome(true);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionShortReads2) {
   FtpSocketDataProviderFileDownload ctrl_socket;
   ctrl_socket.set_short_read_limit(2);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionShortReads5) {
   FtpSocketDataProviderFileDownload ctrl_socket;
   ctrl_socket.set_short_read_limit(5);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionZeroSize) {
   FtpSocketDataProviderFileDownloadZeroSize ctrl_socket;
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionCWD451) {
   FtpSocketDataProviderFileDownloadCWD451 ctrl_socket;
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionVMS) {
   FtpSocketDataProviderVMSFileDownload ctrl_socket;
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionTransferStarting) {
   FtpSocketDataProviderFileDownloadTransferStarting ctrl_socket;
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionInvalidResponse) {
   FtpSocketDataProviderFileDownloadInvalidResponse ctrl_socket;
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_INVALID_RESPONSE);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilPasvReallyBadFormat) {
   FtpSocketDataProviderEvilPasv ctrl_socket("227 Portscan (127,0,0,\r\n",
                                             FtpSocketDataProvider::PRE_QUIT);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_INVALID_RESPONSE);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafePort1) {
   FtpSocketDataProviderEvilPasv ctrl_socket("227 Portscan (127,0,0,1,0,22)\r\n",
                                             FtpSocketDataProvider::PRE_QUIT);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_UNSAFE_PORT);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafePort2) {
   // Still unsafe. 1 * 256 + 2 = 258, which is < 1024.
   FtpSocketDataProviderEvilPasv ctrl_socket("227 Portscan (127,0,0,1,1,2)\r\n",
                                             FtpSocketDataProvider::PRE_QUIT);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_UNSAFE_PORT);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafePort3) {
   // Still unsafe. 3 * 256 + 4 = 772, which is < 1024.
   FtpSocketDataProviderEvilPasv ctrl_socket("227 Portscan (127,0,0,1,3,4)\r\n",
                                             FtpSocketDataProvider::PRE_QUIT);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_UNSAFE_PORT);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafePort4) {
   // Unsafe. 8 * 256 + 1 = 2049, which is used by nfs.
   FtpSocketDataProviderEvilPasv ctrl_socket("227 Portscan (127,0,0,1,8,1)\r\n",
                                             FtpSocketDataProvider::PRE_QUIT);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_UNSAFE_PORT);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafeHost) {
   FtpSocketDataProviderEvilPasv ctrl_socket(
-      "227 Portscan (10,1,2,3,123,456)\r\n", FtpSocketDataProvider::PRE_SIZE);
+      "227 Portscan (10,1,2,3,123,456)\r\n", FtpSocketDataProvider::PRE_RETR);
   ctrl_socket.set_use_epsv(GetFamily() != AF_INET);
   std::string mock_data("mock-data");
   MockRead data_reads[] = {
@@ -1149,7 +1130,7 @@
 
   FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (|||22)\r\n",
                                             FtpSocketDataProvider::PRE_QUIT);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_INVALID_RESPONSE);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvReallyBadFormat2) {
@@ -1159,7 +1140,7 @@
 
   FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (||\r\n",
                                             FtpSocketDataProvider::PRE_QUIT);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_INVALID_RESPONSE);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvReallyBadFormat3) {
@@ -1169,7 +1150,7 @@
 
   FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan\r\n",
                                             FtpSocketDataProvider::PRE_QUIT);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_INVALID_RESPONSE);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvReallyBadFormat4) {
@@ -1179,7 +1160,7 @@
 
   FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (||||)\r\n",
                                             FtpSocketDataProvider::PRE_QUIT);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_INVALID_RESPONSE);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvReallyBadFormat5) {
@@ -1191,7 +1172,7 @@
   const char response[] = "227 Portscan (\0\0\031" "773\0)\r\n";
   FtpSocketDataProviderEvilEpsv ctrl_socket(response, sizeof(response)-1,
                                             FtpSocketDataProvider::PRE_QUIT);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_INVALID_RESPONSE);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvUnsafePort1) {
@@ -1201,7 +1182,7 @@
 
   FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (|||22|)\r\n",
                                             FtpSocketDataProvider::PRE_QUIT);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_UNSAFE_PORT);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvUnsafePort2) {
@@ -1211,7 +1192,7 @@
 
   FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (|||258|)\r\n",
                                             FtpSocketDataProvider::PRE_QUIT);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_UNSAFE_PORT);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvUnsafePort3) {
@@ -1221,7 +1202,7 @@
 
   FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (|||772|)\r\n",
                                             FtpSocketDataProvider::PRE_QUIT);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_UNSAFE_PORT);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvUnsafePort4) {
@@ -1231,7 +1212,7 @@
 
   FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (|||2049|)\r\n",
                                             FtpSocketDataProvider::PRE_QUIT);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_UNSAFE_PORT);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvWeirdSep) {
@@ -1240,8 +1221,8 @@
     return;
 
   FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan ($$$31744$)\r\n",
-                                            FtpSocketDataProvider::PRE_SIZE);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK);
+                                            FtpSocketDataProvider::PRE_RETR);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
 }
 
 TEST_P(FtpNetworkTransactionTest,
@@ -1252,7 +1233,7 @@
 
   FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan ($$$317$)\r\n",
                                             FtpSocketDataProvider::PRE_QUIT);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_UNSAFE_PORT);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilEpsvIllegalHost) {
@@ -1262,27 +1243,27 @@
 
   FtpSocketDataProviderEvilEpsv ctrl_socket("227 Portscan (|2|::1|31744|)\r\n",
                                             FtpSocketDataProvider::PRE_QUIT);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_INVALID_RESPONSE);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilLoginBadUsername) {
   FtpSocketDataProviderEvilLogin ctrl_socket("hello%0Aworld", "test");
-  ExecuteTransaction(&ctrl_socket, "ftp://hello%0Aworld:test@host/file", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://hello%0Aworld:test@host/file", OK);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionEvilLoginBadPassword) {
   FtpSocketDataProviderEvilLogin ctrl_socket("test", "hello%0Dworld");
-  ExecuteTransaction(&ctrl_socket, "ftp://test:hello%0Dworld@host/file", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://test:hello%0Dworld@host/file", OK);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionSpaceInLogin) {
   FtpSocketDataProviderEvilLogin ctrl_socket("hello world", "test");
-  ExecuteTransaction(&ctrl_socket, "ftp://hello%20world:test@host/file", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://hello%20world:test@host/file", OK);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionSpaceInPassword) {
   FtpSocketDataProviderEvilLogin ctrl_socket("test", "hello world");
-  ExecuteTransaction(&ctrl_socket, "ftp://test:hello%20world@host/file", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://test:hello%20world@host/file", OK);
 }
 
 TEST_P(FtpNetworkTransactionTest, EvilRestartUser) {
@@ -1357,7 +1338,7 @@
 TEST_P(FtpNetworkTransactionTest, Escaping) {
   FtpSocketDataProviderEscaping ctrl_socket;
   ExecuteTransaction(&ctrl_socket, "ftp://host/%20%21%22%23%24%25%79%80%81",
-                     1, OK);
+                     OK);
 }
 
 // Test for http://crbug.com/23794.
@@ -1366,7 +1347,7 @@
   FtpSocketDataProviderEvilSize ctrl_socket(
       "213 99999999999999999999999999999999\r\n",
       FtpSocketDataProvider::PRE_QUIT);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, ERR_INVALID_RESPONSE);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE);
 }
 
 // Test for http://crbug.com/36360.
@@ -1375,7 +1356,7 @@
   FtpSocketDataProviderEvilSize ctrl_socket(
       "213 3204427776\r\n",
       FtpSocketDataProvider::PRE_CWD);
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 1, OK);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
   EXPECT_EQ(3204427776LL,
             transaction_.GetResponseInfo()->expected_content_size);
 }
@@ -1383,7 +1364,7 @@
 // Regression test for http://crbug.com/25023.
 TEST_P(FtpNetworkTransactionTest, CloseConnection) {
   FtpSocketDataProviderCloseConnection ctrl_socket;
-  ExecuteTransaction(&ctrl_socket, "ftp://host", 1, ERR_EMPTY_RESPONSE);
+  ExecuteTransaction(&ctrl_socket, "ftp://host", ERR_EMPTY_RESPONSE);
 }
 
 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionFailUser) {
@@ -1463,12 +1444,9 @@
   FtpSocketDataProviderDirectoryListing ctrl_socket;
   // Use unallocated 599 FTP error code to make sure it falls into the generic
   // ERR_FTP_FAILED bucket.
-  TransactionFailHelper(&ctrl_socket,
-                        "ftp://host",
-                        FtpSocketDataProvider::PRE_EPSV,
-                        FtpSocketDataProvider::PRE_NOPASV,
-                        "599 fail\r\n",
-                        ERR_FTP_FAILED);
+  TransactionFailHelper(
+      &ctrl_socket, "ftp://host", FtpSocketDataProvider::PRE_LIST_EPSV,
+      FtpSocketDataProvider::PRE_NOPASV, "599 fail\r\n", ERR_FTP_FAILED);
 }
 
 TEST_P(FtpNetworkTransactionTest, DirectoryTransactionFailCwd) {
@@ -1561,12 +1539,9 @@
   FtpSocketDataProviderFileDownload ctrl_socket;
   // Use unallocated 599 FTP error code to make sure it falls into the generic
   // ERR_FTP_FAILED bucket.
-  TransactionFailHelper(&ctrl_socket,
-                        "ftp://host/file",
-                        FtpSocketDataProvider::PRE_EPSV,
-                        FtpSocketDataProvider::PRE_NOPASV,
-                        "599 fail\r\n",
-                        ERR_FTP_FAILED);
+  TransactionFailHelper(
+      &ctrl_socket, "ftp://host/file", FtpSocketDataProvider::PRE_RETR_EPSV,
+      FtpSocketDataProvider::PRE_NOPASV, "599 fail\r\n", ERR_FTP_FAILED);
 }
 
 TEST_P(FtpNetworkTransactionTest, DownloadTransactionFailRetr) {
@@ -1583,7 +1558,7 @@
 
 TEST_P(FtpNetworkTransactionTest, FileNotFound) {
   FtpSocketDataProviderFileNotFound ctrl_socket;
-  ExecuteTransaction(&ctrl_socket, "ftp://host/file", 2, ERR_FTP_FAILED);
+  ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_FTP_FAILED);
 }
 
 // Test for http://crbug.com/38845.
diff --git a/net/http/http_cache.cc b/net/http/http_cache.cc
index ed36200..fb6f40c 100644
--- a/net/http/http_cache.cc
+++ b/net/http/http_cache.cc
@@ -211,7 +211,9 @@
   ~MetadataWriter() {}
 
   // Implements the bulk of HttpCache::WriteMetadata.
-  void Write(const GURL& url, base::Time expected_response_time, IOBuffer* buf,
+  void Write(const GURL& url,
+             double expected_response_time,
+             IOBuffer* buf,
              int buf_len);
 
  private:
@@ -223,14 +225,15 @@
   bool verified_;
   scoped_refptr<IOBuffer> buf_;
   int buf_len_;
-  base::Time expected_response_time_;
+  double expected_response_time_;
   HttpRequestInfo request_info_;
   DISALLOW_COPY_AND_ASSIGN(MetadataWriter);
 };
 
 void HttpCache::MetadataWriter::Write(const GURL& url,
-                                      base::Time expected_response_time,
-                                      IOBuffer* buf, int buf_len) {
+                                      double expected_response_time,
+                                      IOBuffer* buf,
+                                      int buf_len) {
   DCHECK_GT(buf_len, 0);
   DCHECK(buf);
   DCHECK(buf->data());
@@ -258,7 +261,7 @@
 
   const HttpResponseInfo* response_info = transaction_->GetResponseInfo();
   DCHECK(response_info->was_cached);
-  if (response_info->response_time != expected_response_time_)
+  if (response_info->response_time.ToDoubleT() != expected_response_time_)
     return SelfDestroy();
 
   result = transaction_->WriteMetadata(
@@ -576,7 +579,7 @@
 
 void HttpCache::WriteMetadata(const GURL& url,
                               RequestPriority priority,
-                              base::Time expected_response_time,
+                              double expected_response_time,
                               IOBuffer* buf,
                               int buf_len) {
   if (!buf_len)
diff --git a/net/http/http_cache.h b/net/http/http_cache.h
index 33b89f3..4f75ac5 100644
--- a/net/http/http_cache.h
+++ b/net/http/http_cache.h
@@ -178,7 +178,7 @@
   // be performed asynchronously without any completion notification.
   void WriteMetadata(const GURL& url,
                      RequestPriority priority,
-                     base::Time expected_response_time,
+                     double expected_response_time,
                      IOBuffer* buf,
                      int buf_len);
 
diff --git a/net/http/http_cache_unittest.cc b/net/http/http_cache_unittest.cc
index cee0c4a..3458402 100644
--- a/net/http/http_cache_unittest.cc
+++ b/net/http/http_cache_unittest.cc
@@ -6444,17 +6444,15 @@
 
   // Trivial call.
   cache.http_cache()->WriteMetadata(GURL("foo"), net::DEFAULT_PRIORITY,
-                                    Time::Now(), NULL, 0);
+                                    Time::Now().ToDoubleT(), NULL, 0);
 
   // Write meta data to the same entry.
   scoped_refptr<net::IOBufferWithSize> buf(new net::IOBufferWithSize(50));
   memset(buf->data(), 0, buf->size());
   base::strlcpy(buf->data(), "Hi there", buf->size());
-  cache.http_cache()->WriteMetadata(GURL(kSimpleGET_Transaction.url),
-                                    net::DEFAULT_PRIORITY,
-                                    response.response_time,
-                                    buf.get(),
-                                    buf->size());
+  cache.http_cache()->WriteMetadata(
+      GURL(kSimpleGET_Transaction.url), net::DEFAULT_PRIORITY,
+      response.response_time.ToDoubleT(), buf.get(), buf->size());
 
   // Release the buffer before the operation takes place.
   buf = NULL;
@@ -6489,11 +6487,9 @@
   base::strlcpy(buf->data(), "Hi there", buf->size());
   base::Time expected_time = response.response_time -
                              base::TimeDelta::FromMilliseconds(20);
-  cache.http_cache()->WriteMetadata(GURL(kSimpleGET_Transaction.url),
-                                    net::DEFAULT_PRIORITY,
-                                    expected_time,
-                                    buf.get(),
-                                    buf->size());
+  cache.http_cache()->WriteMetadata(
+      GURL(kSimpleGET_Transaction.url), net::DEFAULT_PRIORITY,
+      expected_time.ToDoubleT(), buf.get(), buf->size());
 
   // Makes sure we finish pending operations.
   base::MessageLoop::current()->RunUntilIdle();
@@ -6522,11 +6518,9 @@
   scoped_refptr<net::IOBufferWithSize> buf(new net::IOBufferWithSize(50));
   memset(buf->data(), 0, buf->size());
   base::strlcpy(buf->data(), "Hi there", buf->size());
-  cache.http_cache()->WriteMetadata(GURL(kTypicalGET_Transaction.url),
-                                    net::DEFAULT_PRIORITY,
-                                    response.response_time,
-                                    buf.get(),
-                                    buf->size());
+  cache.http_cache()->WriteMetadata(
+      GURL(kTypicalGET_Transaction.url), net::DEFAULT_PRIORITY,
+      response.response_time.ToDoubleT(), buf.get(), buf->size());
 
   // Makes sure we finish pending operations.
   base::MessageLoop::current()->RunUntilIdle();
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc
index 3812c60..1c70393 100644
--- a/net/http/http_network_transaction_unittest.cc
+++ b/net/http/http_network_transaction_unittest.cc
@@ -7616,7 +7616,7 @@
       session->http_server_properties();
   http_server_properties->SetAlternateProtocol(
       HostPortPair("host.with.alternate", 80), 443,
-      AlternateProtocolFromNextProto(next_proto), 1);
+      AlternateProtocolFromNextProto(next_proto), 1.0);
 
   return session;
 }
@@ -8564,7 +8564,7 @@
   http_server_properties->SetAlternateProtocol(
       HostPortPair::FromURL(request.url),
       666 /* port is ignored by MockConnect anyway */,
-      AlternateProtocolFromNextProto(GetParam()), 1);
+      AlternateProtocolFromNextProto(GetParam()), 1.0);
 
   scoped_ptr<HttpTransaction> trans(
       new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
@@ -8625,8 +8625,8 @@
   const int kUnrestrictedAlternatePort = 1024;
   http_server_properties->SetAlternateProtocol(
       HostPortPair::FromURL(restricted_port_request.url),
-      kUnrestrictedAlternatePort,
-      AlternateProtocolFromNextProto(GetParam()), 1);
+      kUnrestrictedAlternatePort, AlternateProtocolFromNextProto(GetParam()),
+      1.0);
 
   scoped_ptr<HttpTransaction> trans(
       new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
@@ -8676,8 +8676,8 @@
   const int kUnrestrictedAlternatePort = 1024;
   http_server_properties->SetAlternateProtocol(
       HostPortPair::FromURL(restricted_port_request.url),
-      kUnrestrictedAlternatePort,
-      AlternateProtocolFromNextProto(GetParam()), 1);
+      kUnrestrictedAlternatePort, AlternateProtocolFromNextProto(GetParam()),
+      1.0);
 
   scoped_ptr<HttpTransaction> trans(
       new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
@@ -8724,8 +8724,8 @@
   const int kRestrictedAlternatePort = 80;
   http_server_properties->SetAlternateProtocol(
       HostPortPair::FromURL(restricted_port_request.url),
-      kRestrictedAlternatePort,
-      AlternateProtocolFromNextProto(GetParam()), 1);
+      kRestrictedAlternatePort, AlternateProtocolFromNextProto(GetParam()),
+      1.0);
 
   scoped_ptr<HttpTransaction> trans(
       new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
@@ -8773,8 +8773,8 @@
   const int kRestrictedAlternatePort = 80;
   http_server_properties->SetAlternateProtocol(
       HostPortPair::FromURL(unrestricted_port_request.url),
-      kRestrictedAlternatePort,
-      AlternateProtocolFromNextProto(GetParam()), 1);
+      kRestrictedAlternatePort, AlternateProtocolFromNextProto(GetParam()),
+      1.0);
 
   scoped_ptr<HttpTransaction> trans(
       new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
@@ -8821,8 +8821,8 @@
   const int kUnrestrictedAlternatePort = 1024;
   http_server_properties->SetAlternateProtocol(
       HostPortPair::FromURL(unrestricted_port_request.url),
-      kUnrestrictedAlternatePort,
-      AlternateProtocolFromNextProto(GetParam()), 1);
+      kUnrestrictedAlternatePort, AlternateProtocolFromNextProto(GetParam()),
+      1.0);
 
   scoped_ptr<HttpTransaction> trans(
       new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
@@ -8863,9 +8863,8 @@
       session->http_server_properties();
   const int kUnsafePort = 7;
   http_server_properties->SetAlternateProtocol(
-      HostPortPair::FromURL(request.url),
-      kUnsafePort,
-      AlternateProtocolFromNextProto(GetParam()), 1);
+      HostPortPair::FromURL(request.url), kUnsafePort,
+      AlternateProtocolFromNextProto(GetParam()), 1.0);
 
   scoped_ptr<HttpTransaction> trans(
       new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
diff --git a/net/http/http_server_properties.h b/net/http/http_server_properties.h
index 79ce33d..840a359 100644
--- a/net/http/http_server_properties.h
+++ b/net/http/http_server_properties.h
@@ -86,6 +86,12 @@
     NextProto next_proto);
 
 struct NET_EXPORT AlternateProtocolInfo {
+  AlternateProtocolInfo()
+      : port(0),
+        protocol(UNINITIALIZED_ALTERNATE_PROTOCOL),
+        probability(0),
+        is_broken(false) {}
+
   AlternateProtocolInfo(uint16 port,
                         AlternateProtocol protocol,
                         double probability)
@@ -162,8 +168,9 @@
   // Deletes all data.
   virtual void Clear() = 0;
 
-  // Returns true if |server| supports SPDY.
-  virtual bool SupportsSpdy(const HostPortPair& server) = 0;
+  // Returns true if |server| supports a network protocol which honors
+  // request prioritization.
+  virtual bool SupportsRequestPriority(const HostPortPair& server) = 0;
 
   // Add |server| into the persistent store. Should only be called from IO
   // thread.
diff --git a/net/http/http_server_properties_impl.cc b/net/http/http_server_properties_impl.cc
index d048e98..a53e73f 100644
--- a/net/http/http_server_properties_impl.cc
+++ b/net/http/http_server_properties_impl.cc
@@ -168,7 +168,7 @@
   server_network_stats_map_.Clear();
 }
 
-bool HttpServerPropertiesImpl::SupportsSpdy(
+bool HttpServerPropertiesImpl::SupportsRequestPriority(
     const HostPortPair& host_port_pair) {
   DCHECK(CalledOnValidThread());
   if (host_port_pair.host().empty())
@@ -176,9 +176,14 @@
 
   SpdyServerHostPortMap::iterator spdy_host_port =
       spdy_servers_map_.Get(host_port_pair.ToString());
-  if (spdy_host_port != spdy_servers_map_.end())
-    return spdy_host_port->second;
-  return false;
+  if (spdy_host_port != spdy_servers_map_.end() && spdy_host_port->second)
+    return true;
+
+  if (!HasAlternateProtocol(host_port_pair))
+    return false;
+
+  AlternateProtocolInfo info = GetAlternateProtocol(host_port_pair);
+  return info.protocol == QUIC;
 }
 
 void HttpServerPropertiesImpl::SetSupportsSpdy(
@@ -234,12 +239,12 @@
 }
 
 std::string HttpServerPropertiesImpl::GetCanonicalSuffix(
-    const HostPortPair& server) {
+    const std::string& host) {
   // If this host ends with a canonical suffix, then return the canonical
   // suffix.
   for (size_t i = 0; i < canonical_suffixes_.size(); ++i) {
     std::string canonical_suffix = canonical_suffixes_[i];
-    if (EndsWith(server.host(), canonical_suffixes_[i], false)) {
+    if (EndsWith(host, canonical_suffixes_[i], false)) {
       return canonical_suffix;
     }
   }
@@ -341,8 +346,7 @@
   RemoveCanonicalHost(server);
 
   // If this is the only entry in the list, schedule an expiration task.
-  // Otherwse it will be rescheduled automatically when the pending
-  // task runs.
+  // Otherwise it will be rescheduled automatically when the pending task runs.
   if (broken_alternate_protocol_list_.size() == 1) {
     ScheduleBrokenAlternateProtocolMappingsExpiration();
   }
diff --git a/net/http/http_server_properties_impl.h b/net/http/http_server_properties_impl.h
index 7a5441c..8d251a2 100644
--- a/net/http/http_server_properties_impl.h
+++ b/net/http/http_server_properties_impl.h
@@ -63,105 +63,54 @@
   static void ForceAlternateProtocol(const AlternateProtocolInfo& pair);
   static void DisableForcedAlternateProtocol();
 
-  // Returns the canonical host suffix for |server|, or std::string() if none
+  // Returns the canonical host suffix for |host|, or std::string() if none
   // exists.
-  std::string GetCanonicalSuffix(const HostPortPair& server);
+  std::string GetCanonicalSuffix(const std::string& host);
 
   // -----------------------------
   // HttpServerProperties methods:
   // -----------------------------
 
-  // Gets a weak pointer for this object.
   base::WeakPtr<HttpServerProperties> GetWeakPtr() override;
-
-  // Deletes all data.
   void Clear() override;
-
-  // Returns true if |server| supports SPDY.
-  bool SupportsSpdy(const HostPortPair& server) override;
-
-  // Add |server| into the persistent store.
+  bool SupportsRequestPriority(const HostPortPair& server) override;
   void SetSupportsSpdy(const HostPortPair& server, bool support_spdy) override;
-
-  // Returns true if |server| has required HTTP/1.1 via HTTP/2 error code.
   bool RequiresHTTP11(const HostPortPair& server) override;
-
-  // Require HTTP/1.1 on subsequent connections.  Not persisted.
   void SetHTTP11Required(const HostPortPair& server) override;
-
-  // Modify SSLConfig to force HTTP/1.1 if necessary.
   void MaybeForceHTTP11(const HostPortPair& server,
                         SSLConfig* ssl_config) override;
-
-  // Returns true if |server| has an Alternate-Protocol header.
   bool HasAlternateProtocol(const HostPortPair& server) override;
-
-  // Returns the Alternate-Protocol and port for |server|.
-  // HasAlternateProtocol(server) must be true.
   AlternateProtocolInfo GetAlternateProtocol(
       const HostPortPair& server) override;
-
-  // Sets the Alternate-Protocol for |server|.
   void SetAlternateProtocol(const HostPortPair& server,
                             uint16 alternate_port,
                             AlternateProtocol alternate_protocol,
                             double probability) override;
-
-  // Sets the Alternate-Protocol for |server| to be BROKEN.
   void SetBrokenAlternateProtocol(const HostPortPair& server) override;
-
-  // Returns true if Alternate-Protocol for |server| was recently BROKEN.
   bool WasAlternateProtocolRecentlyBroken(const HostPortPair& server) override;
-
-  // Confirms that Alternate-Protocol for |server| is working.
   void ConfirmAlternateProtocol(const HostPortPair& server) override;
-
-  // Clears the Alternate-Protocol for |server|.
   void ClearAlternateProtocol(const HostPortPair& server) override;
-
-  // Returns all Alternate-Protocol mappings.
   const AlternateProtocolMap& alternate_protocol_map() const override;
-
   void SetAlternateProtocolProbabilityThreshold(double threshold) override;
-
-  // Gets a reference to the SettingsMap stored for a host.
-  // If no settings are stored, returns an empty SettingsMap.
   const SettingsMap& GetSpdySettings(
       const HostPortPair& host_port_pair) override;
-
-  // Saves an individual SPDY setting for a host. Returns true if SPDY setting
-  // is to be persisted.
   bool SetSpdySetting(const HostPortPair& host_port_pair,
                       SpdySettingsIds id,
                       SpdySettingsFlags flags,
                       uint32 value) override;
-
-  // Clears all entries in |spdy_settings_map_| for a host.
   void ClearSpdySettings(const HostPortPair& host_port_pair) override;
-
-  // Clears all entries in |spdy_settings_map_|.
   void ClearAllSpdySettings() override;
-
-  // Returns all persistent SPDY settings.
   const SpdySettingsMap& spdy_settings_map() const override;
-
-  // Methods for SupportsQuic.
   SupportsQuic GetSupportsQuic(
       const HostPortPair& host_port_pair) const override;
-
   void SetSupportsQuic(const HostPortPair& host_port_pair,
                        bool used_quic,
                        const std::string& address) override;
-
   const SupportsQuicMap& supports_quic_map() const override;
-
-  // Methods for ServerNetworkStats.
   void SetServerNetworkStats(const HostPortPair& host_port_pair,
                              ServerNetworkStats stats) override;
-
   const ServerNetworkStats* GetServerNetworkStats(
       const HostPortPair& host_port_pair) override;
-
   const ServerNetworkStatsMap& server_network_stats_map() const override;
 
  private:
diff --git a/net/http/http_server_properties_impl_unittest.cc b/net/http/http_server_properties_impl_unittest.cc
index 1675833..be5e6b9 100644
--- a/net/http/http_server_properties_impl_unittest.cc
+++ b/net/http/http_server_properties_impl_unittest.cc
@@ -41,18 +41,18 @@
 
   // Check by initializing NULL spdy servers.
   impl_.InitializeSpdyServers(NULL, true);
-  EXPECT_FALSE(impl_.SupportsSpdy(spdy_server_google));
+  EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_google));
 
   // Check by initializing empty spdy servers.
   std::vector<std::string> spdy_servers;
   impl_.InitializeSpdyServers(&spdy_servers, true);
-  EXPECT_FALSE(impl_.SupportsSpdy(spdy_server_google));
+  EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_google));
 
   // Check by initializing with www.google.com:443 spdy server.
   std::vector<std::string> spdy_servers1;
   spdy_servers1.push_back(spdy_server_g);
   impl_.InitializeSpdyServers(&spdy_servers1, true);
-  EXPECT_TRUE(impl_.SupportsSpdy(spdy_server_google));
+  EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_google));
 
   // Check by initializing with www.google.com:443 and docs.google.com:443 spdy
   // servers.
@@ -71,55 +71,38 @@
   std::string string_value_d;
   ASSERT_TRUE(spdy_server_list.GetString(1, &string_value_d));
   ASSERT_EQ(spdy_server_d, string_value_d);
-  EXPECT_TRUE(impl_.SupportsSpdy(spdy_server_google));
-  EXPECT_TRUE(impl_.SupportsSpdy(spdy_server_docs));
+  EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_google));
+  EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_docs));
 }
 
-TEST_F(SpdyServerPropertiesTest, SupportsSpdyTest) {
+TEST_F(SpdyServerPropertiesTest, SupportsRequestPriorityTest) {
   HostPortPair spdy_server_empty(std::string(), 443);
-  EXPECT_FALSE(impl_.SupportsSpdy(spdy_server_empty));
+  EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_empty));
 
   // Add www.google.com:443 as supporting SPDY.
   HostPortPair spdy_server_google("www.google.com", 443);
   impl_.SetSupportsSpdy(spdy_server_google, true);
-  EXPECT_TRUE(impl_.SupportsSpdy(spdy_server_google));
+  EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_google));
 
   // Add mail.google.com:443 as not supporting SPDY.
   HostPortPair spdy_server_mail("mail.google.com", 443);
-  EXPECT_FALSE(impl_.SupportsSpdy(spdy_server_mail));
+  EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_mail));
 
   // Add docs.google.com:443 as supporting SPDY.
   HostPortPair spdy_server_docs("docs.google.com", 443);
   impl_.SetSupportsSpdy(spdy_server_docs, true);
-  EXPECT_TRUE(impl_.SupportsSpdy(spdy_server_docs));
+  EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_docs));
+
+  // Add www.youtube.com:443 as supporting QUIC.
+  HostPortPair quic_server_youtube("www.youtube.com", 443);
+  impl_.SetAlternateProtocol(quic_server_youtube, 443, QUIC, 1);
+  EXPECT_TRUE(impl_.SupportsRequestPriority(quic_server_youtube));
 
   // Verify all the entries are the same after additions.
-  EXPECT_TRUE(impl_.SupportsSpdy(spdy_server_google));
-  EXPECT_FALSE(impl_.SupportsSpdy(spdy_server_mail));
-  EXPECT_TRUE(impl_.SupportsSpdy(spdy_server_docs));
-}
-
-TEST_F(SpdyServerPropertiesTest, SetSupportsSpdy) {
-  HostPortPair spdy_server_empty(std::string(), 443);
-  impl_.SetSupportsSpdy(spdy_server_empty, true);
-  EXPECT_FALSE(impl_.SupportsSpdy(spdy_server_empty));
-
-  // Add www.google.com:443 as supporting SPDY.
-  HostPortPair spdy_server_google("www.google.com", 443);
-  EXPECT_FALSE(impl_.SupportsSpdy(spdy_server_google));
-  impl_.SetSupportsSpdy(spdy_server_google, true);
-  EXPECT_TRUE(impl_.SupportsSpdy(spdy_server_google));
-
-  // Make www.google.com:443 as not supporting SPDY.
-  impl_.SetSupportsSpdy(spdy_server_google, false);
-  EXPECT_FALSE(impl_.SupportsSpdy(spdy_server_google));
-
-  // Add mail.google.com:443 as supporting SPDY.
-  HostPortPair spdy_server_mail("mail.google.com", 443);
-  EXPECT_FALSE(impl_.SupportsSpdy(spdy_server_mail));
-  impl_.SetSupportsSpdy(spdy_server_mail, true);
-  EXPECT_TRUE(impl_.SupportsSpdy(spdy_server_mail));
-  EXPECT_FALSE(impl_.SupportsSpdy(spdy_server_google));
+  EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_google));
+  EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_mail));
+  EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_docs));
+  EXPECT_TRUE(impl_.SupportsRequestPriority(quic_server_youtube));
 }
 
 TEST_F(SpdyServerPropertiesTest, Clear) {
@@ -129,12 +112,12 @@
   HostPortPair spdy_server_mail("mail.google.com", 443);
   impl_.SetSupportsSpdy(spdy_server_mail, true);
 
-  EXPECT_TRUE(impl_.SupportsSpdy(spdy_server_google));
-  EXPECT_TRUE(impl_.SupportsSpdy(spdy_server_mail));
+  EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_google));
+  EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_mail));
 
   impl_.Clear();
-  EXPECT_FALSE(impl_.SupportsSpdy(spdy_server_google));
-  EXPECT_FALSE(impl_.SupportsSpdy(spdy_server_mail));
+  EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_google));
+  EXPECT_FALSE(impl_.SupportsRequestPriority(spdy_server_mail));
 }
 
 TEST_F(SpdyServerPropertiesTest, GetSpdyServerList) {
@@ -223,7 +206,7 @@
 
   // Get www.google.com:443 should reorder SpdyServerHostPortMap. Verify that it
   // is www.google.com:443 is the MRU server.
-  EXPECT_TRUE(impl_.SupportsSpdy(spdy_server_google));
+  EXPECT_TRUE(impl_.SupportsRequestPriority(spdy_server_google));
   impl_.GetSpdyServerList(&spdy_server_list, kMaxSupportsSpdyServerHosts);
   ASSERT_EQ(2U, spdy_server_list.GetSize());
   ASSERT_TRUE(spdy_server_list.GetString(0, &string_value_g));
@@ -237,7 +220,7 @@
 TEST_F(AlternateProtocolServerPropertiesTest, Basic) {
   HostPortPair test_host_port_pair("foo", 80);
   EXPECT_FALSE(impl_.HasAlternateProtocol(test_host_port_pair));
-  impl_.SetAlternateProtocol(test_host_port_pair, 443, NPN_SPDY_3, 1);
+  impl_.SetAlternateProtocol(test_host_port_pair, 443, NPN_SPDY_3, 1.0);
   ASSERT_TRUE(impl_.HasAlternateProtocol(test_host_port_pair));
   const AlternateProtocolInfo alternate =
       impl_.GetAlternateProtocol(test_host_port_pair);
@@ -280,10 +263,10 @@
 
 TEST_F(AlternateProtocolServerPropertiesTest, Initialize) {
   HostPortPair test_host_port_pair1("foo1", 80);
-  impl_.SetAlternateProtocol(test_host_port_pair1, 443, NPN_SPDY_3, 1);
+  impl_.SetAlternateProtocol(test_host_port_pair1, 443, NPN_SPDY_3, 1.0);
   impl_.SetBrokenAlternateProtocol(test_host_port_pair1);
   HostPortPair test_host_port_pair2("foo2", 80);
-  impl_.SetAlternateProtocol(test_host_port_pair2, 443, NPN_SPDY_3, 1);
+  impl_.SetAlternateProtocol(test_host_port_pair2, 443, NPN_SPDY_3, 1.0);
 
   AlternateProtocolMap alternate_protocol_map(
       AlternateProtocolMap::NO_AUTO_EVICT);
@@ -297,7 +280,6 @@
   // Verify test_host_port_pair3 is the MRU server.
   const AlternateProtocolMap& map = impl_.alternate_protocol_map();
   AlternateProtocolMap::const_iterator it = map.begin();
-  it = map.begin();
   EXPECT_TRUE(it->first.Equals(test_host_port_pair3));
   EXPECT_EQ(1234, it->second.port);
   EXPECT_EQ(NPN_SPDY_3, it->second.protocol);
@@ -313,9 +295,9 @@
 
 TEST_F(AlternateProtocolServerPropertiesTest, MRUOfHasAlternateProtocol) {
   HostPortPair test_host_port_pair1("foo1", 80);
-  impl_.SetAlternateProtocol(test_host_port_pair1, 443, NPN_SPDY_3, 1);
+  impl_.SetAlternateProtocol(test_host_port_pair1, 443, NPN_SPDY_3, 1.0);
   HostPortPair test_host_port_pair2("foo2", 80);
-  impl_.SetAlternateProtocol(test_host_port_pair2, 1234, NPN_SPDY_3, 1);
+  impl_.SetAlternateProtocol(test_host_port_pair2, 1234, NPN_SPDY_3, 1.0);
 
   const AlternateProtocolMap& map = impl_.alternate_protocol_map();
   AlternateProtocolMap::const_iterator it = map.begin();
@@ -323,7 +305,7 @@
   EXPECT_EQ(1234, it->second.port);
   EXPECT_EQ(NPN_SPDY_3, it->second.protocol);
 
-  // HasAlternateProtocol should reoder the AlternateProtocol map.
+  // HasAlternateProtocol should reorder the AlternateProtocol map.
   ASSERT_TRUE(impl_.HasAlternateProtocol(test_host_port_pair1));
   it = map.begin();
   EXPECT_TRUE(it->first.Equals(test_host_port_pair1));
@@ -333,9 +315,9 @@
 
 TEST_F(AlternateProtocolServerPropertiesTest, MRUOfGetAlternateProtocol) {
   HostPortPair test_host_port_pair1("foo1", 80);
-  impl_.SetAlternateProtocol(test_host_port_pair1, 443, NPN_SPDY_3, 1);
+  impl_.SetAlternateProtocol(test_host_port_pair1, 443, NPN_SPDY_3, 1.0);
   HostPortPair test_host_port_pair2("foo2", 80);
-  impl_.SetAlternateProtocol(test_host_port_pair2, 1234, NPN_SPDY_3, 1);
+  impl_.SetAlternateProtocol(test_host_port_pair2, 1234, NPN_SPDY_3, 1.0);
 
   const AlternateProtocolMap& map = impl_.alternate_protocol_map();
   AlternateProtocolMap::const_iterator it = map.begin();
@@ -343,7 +325,7 @@
   EXPECT_EQ(1234, it->second.port);
   EXPECT_EQ(NPN_SPDY_3, it->second.protocol);
 
-  // GetAlternateProtocol should reoder the AlternateProtocol map.
+  // GetAlternateProtocol should reorder the AlternateProtocol map.
   AlternateProtocolInfo alternate =
       impl_.GetAlternateProtocol(test_host_port_pair1);
   EXPECT_EQ(443, alternate.port);
@@ -356,25 +338,21 @@
 
 TEST_F(AlternateProtocolServerPropertiesTest, SetBroken) {
   HostPortPair test_host_port_pair("foo", 80);
-  impl_.SetAlternateProtocol(test_host_port_pair, 443, NPN_SPDY_3, 1);
+  impl_.SetAlternateProtocol(test_host_port_pair, 443, NPN_SPDY_3, 1.0);
   impl_.SetBrokenAlternateProtocol(test_host_port_pair);
   ASSERT_TRUE(impl_.HasAlternateProtocol(test_host_port_pair));
   AlternateProtocolInfo alternate =
       impl_.GetAlternateProtocol(test_host_port_pair);
   EXPECT_TRUE(alternate.is_broken);
 
-  impl_.SetAlternateProtocol(
-      test_host_port_pair,
-      1234,
-      NPN_SPDY_3,
-      1);
+  impl_.SetAlternateProtocol(test_host_port_pair, 1234, NPN_SPDY_3, 1.0);
   alternate = impl_.GetAlternateProtocol(test_host_port_pair);
   EXPECT_TRUE(alternate.is_broken) << "Second attempt should be ignored.";
 }
 
 TEST_F(AlternateProtocolServerPropertiesTest, ClearBroken) {
   HostPortPair test_host_port_pair("foo", 80);
-  impl_.SetAlternateProtocol(test_host_port_pair, 443, NPN_SPDY_3, 1);
+  impl_.SetAlternateProtocol(test_host_port_pair, 443, NPN_SPDY_3, 1.0);
   impl_.SetBrokenAlternateProtocol(test_host_port_pair);
   ASSERT_TRUE(impl_.HasAlternateProtocol(test_host_port_pair));
   AlternateProtocolInfo alternate =
@@ -399,7 +377,7 @@
   EXPECT_EQ(default_protocol.protocol, alternate.protocol);
 
   // Verify the real protocol overrides the forced protocol.
-  impl_.SetAlternateProtocol(test_host_port_pair, 443, NPN_SPDY_3, 1);
+  impl_.SetAlternateProtocol(test_host_port_pair, 443, NPN_SPDY_3, 1.0);
   ASSERT_TRUE(impl_.HasAlternateProtocol(test_host_port_pair));
   alternate = impl_.GetAlternateProtocol(test_host_port_pair);
   EXPECT_EQ(443, alternate.port);
@@ -423,10 +401,8 @@
 
   AlternateProtocolInfo canonical_protocol(1234, QUIC, 1);
 
-  impl_.SetAlternateProtocol(canonical_port_pair,
-                             canonical_protocol.port,
-                             canonical_protocol.protocol,
-                             1);
+  impl_.SetAlternateProtocol(canonical_port_pair, canonical_protocol.port,
+                             canonical_protocol.protocol, 1.0);
   // Verify the forced protocol.
   ASSERT_TRUE(impl_.HasAlternateProtocol(test_host_port_pair));
   AlternateProtocolInfo alternate =
@@ -435,8 +411,10 @@
   EXPECT_EQ(canonical_protocol.protocol, alternate.protocol);
 
   // Verify the canonical suffix.
-  EXPECT_EQ(".c.youtube.com", impl_.GetCanonicalSuffix(test_host_port_pair));
-  EXPECT_EQ(".c.youtube.com", impl_.GetCanonicalSuffix(canonical_port_pair));
+  EXPECT_EQ(".c.youtube.com",
+            impl_.GetCanonicalSuffix(test_host_port_pair.host()));
+  EXPECT_EQ(".c.youtube.com",
+            impl_.GetCanonicalSuffix(canonical_port_pair.host()));
 }
 
 TEST_F(AlternateProtocolServerPropertiesTest, CanonicalBelowThreshold) {
@@ -446,8 +424,7 @@
   HostPortPair canonical_port_pair("bar.c.youtube.com", 80);
   AlternateProtocolInfo canonical_protocol(1234, QUIC, 0.01);
 
-  impl_.SetAlternateProtocol(canonical_port_pair,
-                             canonical_protocol.port,
+  impl_.SetAlternateProtocol(canonical_port_pair, canonical_protocol.port,
                              canonical_protocol.protocol,
                              canonical_protocol.probability);
   EXPECT_FALSE(impl_.HasAlternateProtocol(canonical_port_pair));
@@ -461,8 +438,7 @@
   HostPortPair canonical_port_pair("bar.c.youtube.com", 80);
   AlternateProtocolInfo canonical_protocol(1234, QUIC, 0.03);
 
-  impl_.SetAlternateProtocol(canonical_port_pair,
-                             canonical_protocol.port,
+  impl_.SetAlternateProtocol(canonical_port_pair, canonical_protocol.port,
                              canonical_protocol.protocol,
                              canonical_protocol.probability);
   EXPECT_TRUE(impl_.HasAlternateProtocol(canonical_port_pair));
@@ -475,8 +451,7 @@
 
   AlternateProtocolInfo canonical_protocol(1234, QUIC, 1);
 
-  impl_.SetAlternateProtocol(canonical_port_pair,
-                             canonical_protocol.port,
+  impl_.SetAlternateProtocol(canonical_port_pair, canonical_protocol.port,
                              canonical_protocol.protocol,
                              canonical_protocol.probability);
 
@@ -490,8 +465,7 @@
 
   AlternateProtocolInfo canonical_protocol(1234, QUIC, 1);
 
-  impl_.SetAlternateProtocol(canonical_port_pair,
-                             canonical_protocol.port,
+  impl_.SetAlternateProtocol(canonical_port_pair, canonical_protocol.port,
                              canonical_protocol.protocol,
                              canonical_protocol.probability);
 
@@ -505,8 +479,7 @@
 
   AlternateProtocolInfo canonical_protocol(1234, QUIC, 1);
 
-  impl_.SetAlternateProtocol(canonical_port_pair,
-                             canonical_protocol.port,
+  impl_.SetAlternateProtocol(canonical_port_pair, canonical_protocol.port,
                              canonical_protocol.protocol,
                              canonical_protocol.probability);
 
@@ -522,8 +495,7 @@
 
   AlternateProtocolInfo canonical_protocol(1234, QUIC, 1);
 
-  impl_.SetAlternateProtocol(canonical_port_pair,
-                             canonical_protocol.port,
+  impl_.SetAlternateProtocol(canonical_port_pair, canonical_protocol.port,
                              canonical_protocol.protocol,
                              canonical_protocol.probability);
 
@@ -696,7 +668,7 @@
   EXPECT_EQ(SETTINGS_FLAG_PERSISTED, flags_and_value2_ret.first);
   EXPECT_EQ(value2, flags_and_value2_ret.second);
 
-  // GetSpdySettings should reoder the SpdySettingsMap.
+  // GetSpdySettings should reorder the SpdySettingsMap.
   const SettingsMap& settings_map1_ret =
       impl_.GetSpdySettings(spdy_server_google);
   ASSERT_EQ(1U, settings_map1_ret.size());
diff --git a/net/http/http_server_properties_manager.cc b/net/http/http_server_properties_manager.cc
index 873c8ca..c02518d 100644
--- a/net/http/http_server_properties_manager.cc
+++ b/net/http/http_server_properties_manager.cc
@@ -133,9 +133,10 @@
   UpdatePrefsFromCacheOnNetworkThread(completion);
 }
 
-bool HttpServerPropertiesManager::SupportsSpdy(const HostPortPair& server) {
+bool HttpServerPropertiesManager::SupportsRequestPriority(
+    const HostPortPair& server) {
   DCHECK(network_task_runner_->RunsTasksOnCurrentThread());
-  return http_server_properties_impl_->SupportsSpdy(server);
+  return http_server_properties_impl_->SupportsRequestPriority(server);
 }
 
 void HttpServerPropertiesManager::SetSupportsSpdy(const HostPortPair& server,
@@ -146,14 +147,13 @@
   ScheduleUpdatePrefsOnNetworkThread();
 }
 
-bool HttpServerPropertiesManager::RequiresHTTP11(
-    const net::HostPortPair& server) {
+bool HttpServerPropertiesManager::RequiresHTTP11(const HostPortPair& server) {
   DCHECK(network_task_runner_->RunsTasksOnCurrentThread());
   return http_server_properties_impl_->RequiresHTTP11(server);
 }
 
 void HttpServerPropertiesManager::SetHTTP11Required(
-    const net::HostPortPair& server) {
+    const HostPortPair& server) {
   DCHECK(network_task_runner_->RunsTasksOnCurrentThread());
 
   http_server_properties_impl_->SetHTTP11Required(server);
@@ -613,7 +613,7 @@
        it != map.end() && count < kMaxAlternateProtocolHostsToPersist; ++it) {
     const HostPortPair& server = it->first;
     std::string canonical_suffix =
-        http_server_properties_impl_->GetCanonicalSuffix(server);
+        http_server_properties_impl_->GetCanonicalSuffix(server.host());
     if (!canonical_suffix.empty()) {
       if (persisted_map.find(canonical_suffix) != persisted_map.end())
         continue;
diff --git a/net/http/http_server_properties_manager.h b/net/http/http_server_properties_manager.h
index 5be571f..00e5a13 100644
--- a/net/http/http_server_properties_manager.h
+++ b/net/http/http_server_properties_manager.h
@@ -78,98 +78,46 @@
   // HttpServerProperties methods:
   // ----------------------------------
 
-  // Gets a weak pointer for this object.
   base::WeakPtr<HttpServerProperties> GetWeakPtr() override;
-
-  // Deletes all data. Works asynchronously.
   void Clear() override;
-
-  // Returns true if |server| supports SPDY. Should only be called from IO
-  // thread.
-  bool SupportsSpdy(const HostPortPair& server) override;
-
-  // Add |server| as the SPDY server which supports SPDY protocol into the
-  // persisitent store. Should only be called from IO thread.
+  bool SupportsRequestPriority(const HostPortPair& server) override;
   void SetSupportsSpdy(const HostPortPair& server, bool support_spdy) override;
-
-  // Returns true if |server| has required HTTP/1.1 via HTTP/2 error code.
   bool RequiresHTTP11(const HostPortPair& server) override;
-
-  // Require HTTP/1.1 on subsequent connections.  Not persisted.
   void SetHTTP11Required(const HostPortPair& server) override;
-
-  // Modify SSLConfig to force HTTP/1.1 if necessary.
   void MaybeForceHTTP11(const HostPortPair& server,
                         SSLConfig* ssl_config) override;
-
-  // Returns true if |server| has an Alternate-Protocol header.
   bool HasAlternateProtocol(const HostPortPair& server) override;
-
-  // Returns the Alternate-Protocol and port for |server|.
-  // HasAlternateProtocol(server) must be true.
   AlternateProtocolInfo GetAlternateProtocol(
       const HostPortPair& server) override;
-
-  // Sets the Alternate-Protocol for |server|.
   void SetAlternateProtocol(const HostPortPair& server,
                             uint16 alternate_port,
                             AlternateProtocol alternate_protocol,
                             double alternate_probability) override;
-
-  // Sets the Alternate-Protocol for |server| to be BROKEN.
   void SetBrokenAlternateProtocol(const HostPortPair& server) override;
-
-  // Returns true if Alternate-Protocol for |server| was recently BROKEN.
   bool WasAlternateProtocolRecentlyBroken(const HostPortPair& server) override;
-
-  // Confirms that Alternate-Protocol for |server| is working.
   void ConfirmAlternateProtocol(const HostPortPair& server) override;
-
-  // Clears the Alternate-Protocol for |server|.
   void ClearAlternateProtocol(const HostPortPair& server) override;
-
-  // Returns all Alternate-Protocol mappings.
   const AlternateProtocolMap& alternate_protocol_map() const override;
-
   void SetAlternateProtocolProbabilityThreshold(double threshold) override;
-
-  // Gets a reference to the SettingsMap stored for a host.
-  // If no settings are stored, returns an empty SettingsMap.
   const SettingsMap& GetSpdySettings(
       const HostPortPair& host_port_pair) override;
-
-  // Saves an individual SPDY setting for a host. Returns true if SPDY setting
-  // is to be persisted.
   bool SetSpdySetting(const HostPortPair& host_port_pair,
                       SpdySettingsIds id,
                       SpdySettingsFlags flags,
                       uint32 value) override;
-
-  // Clears all SPDY settings for a host.
   void ClearSpdySettings(const HostPortPair& host_port_pair) override;
-
-  // Clears all SPDY settings for all hosts.
   void ClearAllSpdySettings() override;
-
-  // Returns all SPDY persistent settings.
   const SpdySettingsMap& spdy_settings_map() const override;
-
-  // Methods for SupportsQuic.
   SupportsQuic GetSupportsQuic(
       const HostPortPair& host_port_pair) const override;
-
   void SetSupportsQuic(const HostPortPair& host_port_pair,
                        bool used_quic,
                        const std::string& address) override;
-
   const SupportsQuicMap& supports_quic_map() const override;
-
   void SetServerNetworkStats(const HostPortPair& host_port_pair,
                              ServerNetworkStats stats) override;
-
   const ServerNetworkStats* GetServerNetworkStats(
       const HostPortPair& host_port_pair) override;
-
   const ServerNetworkStatsMap& server_network_stats_map() const override;
 
  protected:
diff --git a/net/http/http_server_properties_manager_unittest.cc b/net/http/http_server_properties_manager_unittest.cc
index 99647b3..d021fc5 100644
--- a/net/http/http_server_properties_manager_unittest.cc
+++ b/net/http/http_server_properties_manager_unittest.cc
@@ -223,9 +223,10 @@
   Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
 
   // Verify SupportsSpdy.
-  EXPECT_TRUE(http_server_props_manager_->SupportsSpdy(google_server));
-  EXPECT_TRUE(http_server_props_manager_->SupportsSpdy(mail_server));
-  EXPECT_FALSE(http_server_props_manager_->SupportsSpdy(
+  EXPECT_TRUE(
+      http_server_props_manager_->SupportsRequestPriority(google_server));
+  EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(mail_server));
+  EXPECT_FALSE(http_server_props_manager_->SupportsRequestPriority(
       HostPortPair::FromString("foo.google.com:1337")));
 
   // Verify AlternateProtocol.
@@ -304,7 +305,7 @@
   Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
 
   // Verify that nothing is set.
-  EXPECT_FALSE(http_server_props_manager_->SupportsSpdy(
+  EXPECT_FALSE(http_server_props_manager_->SupportsRequestPriority(
       HostPortPair::FromString("www.google.com:65536")));
   EXPECT_FALSE(http_server_props_manager_->HasAlternateProtocol(
       HostPortPair::FromString("www.google.com:65536")));
@@ -363,13 +364,15 @@
 
   // Add mail.google.com:443 as a supporting spdy server.
   HostPortPair spdy_server_mail("mail.google.com", 443);
-  EXPECT_FALSE(http_server_props_manager_->SupportsSpdy(spdy_server_mail));
+  EXPECT_FALSE(
+      http_server_props_manager_->SupportsRequestPriority(spdy_server_mail));
   http_server_props_manager_->SetSupportsSpdy(spdy_server_mail, true);
 
   // Run the task.
   base::RunLoop().RunUntilIdle();
 
-  EXPECT_TRUE(http_server_props_manager_->SupportsSpdy(spdy_server_mail));
+  EXPECT_TRUE(
+      http_server_props_manager_->SupportsRequestPriority(spdy_server_mail));
   Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
 }
 
@@ -481,7 +484,7 @@
   EXPECT_FALSE(
       http_server_props_manager_->HasAlternateProtocol(spdy_server_mail));
   http_server_props_manager_->SetAlternateProtocol(spdy_server_mail, 443,
-                                                   NPN_SPDY_3, 1);
+                                                   NPN_SPDY_3, 1.0);
 
   // Run the task.
   base::RunLoop().RunUntilIdle();
@@ -541,7 +544,7 @@
   HostPortPair spdy_server_mail("mail.google.com", 443);
   http_server_props_manager_->SetSupportsSpdy(spdy_server_mail, true);
   http_server_props_manager_->SetAlternateProtocol(spdy_server_mail, 443,
-                                                   NPN_SPDY_3, 1);
+                                                   NPN_SPDY_3, 1.0);
   http_server_props_manager_->SetSupportsQuic(spdy_server_mail, true, "foo");
   ServerNetworkStats stats;
   stats.srtt = base::TimeDelta::FromMicroseconds(10);
@@ -556,7 +559,8 @@
   // Run the task.
   base::RunLoop().RunUntilIdle();
 
-  EXPECT_TRUE(http_server_props_manager_->SupportsSpdy(spdy_server_mail));
+  EXPECT_TRUE(
+      http_server_props_manager_->SupportsRequestPriority(spdy_server_mail));
   EXPECT_TRUE(
       http_server_props_manager_->HasAlternateProtocol(spdy_server_mail));
   SupportsQuic supports_quic =
@@ -585,7 +589,8 @@
   http_server_props_manager_->Clear(base::MessageLoop::QuitClosure());
   base::RunLoop().Run();
 
-  EXPECT_FALSE(http_server_props_manager_->SupportsSpdy(spdy_server_mail));
+  EXPECT_FALSE(
+      http_server_props_manager_->SupportsRequestPriority(spdy_server_mail));
   EXPECT_FALSE(
       http_server_props_manager_->HasAlternateProtocol(spdy_server_mail));
   SupportsQuic supports_quic1 =
@@ -603,7 +608,7 @@
   Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
 }
 
-// crbug.com/444956: Add 200 alternate_protocol servers followed by
+// https://crbug.com/444956: Add 200 alternate_protocol servers followed by
 // supports_quic and verify we have read supports_quic from prefs.
 TEST_F(HttpServerPropertiesManagerTest, BadSupportsQuic) {
   ExpectCacheUpdate();
@@ -650,18 +655,17 @@
   for (int i = 0; i < 200; ++i) {
     std::string server = StringPrintf("www.google.com:%d", i);
     ASSERT_TRUE(http_server_props_manager_->HasAlternateProtocol(
-        net::HostPortPair::FromString(server)));
-    net::AlternateProtocolInfo port_alternate_protocol =
+        HostPortPair::FromString(server)));
+    AlternateProtocolInfo port_alternate_protocol =
         http_server_props_manager_->GetAlternateProtocol(
-            net::HostPortPair::FromString(server));
+            HostPortPair::FromString(server));
     EXPECT_EQ(i, port_alternate_protocol.port);
-    EXPECT_EQ(net::NPN_SPDY_3, port_alternate_protocol.protocol);
+    EXPECT_EQ(NPN_SPDY_3, port_alternate_protocol.protocol);
   }
 
   // Verify SupportsQuic.
-  net::SupportsQuic supports_quic1 =
-      http_server_props_manager_->GetSupportsQuic(
-          net::HostPortPair::FromString("mail.google.com:80"));
+  SupportsQuic supports_quic1 = http_server_props_manager_->GetSupportsQuic(
+      HostPortPair::FromString("mail.google.com:80"));
   EXPECT_TRUE(supports_quic1.used_quic);
   EXPECT_EQ("bar", supports_quic1.address);
 }
diff --git a/net/http/http_stream_factory_impl.cc b/net/http/http_stream_factory_impl.cc
index 8b12dba..9e932ee 100644
--- a/net/http/http_stream_factory_impl.cc
+++ b/net/http/http_stream_factory_impl.cc
@@ -228,7 +228,7 @@
   } else {
     DCHECK_EQ(QUIC, alternate.protocol);
     if (!session_->params().enable_quic)
-        return kNoAlternateProtocol;
+      return kNoAlternateProtocol;
 
     // TODO(rch):  Figure out how to make QUIC iteract with PAC
     // scripts.  By not re-writing the URL, we will query the PAC script
diff --git a/net/http/http_stream_factory_impl_job.cc b/net/http/http_stream_factory_impl_job.cc
index d531476..45a0970 100644
--- a/net/http/http_stream_factory_impl_job.cc
+++ b/net/http/http_stream_factory_impl_job.cc
@@ -134,8 +134,9 @@
   DCHECK_GT(num_streams, 0);
   base::WeakPtr<HttpServerProperties> http_server_properties =
       session_->http_server_properties();
-  if (http_server_properties && http_server_properties->SupportsSpdy(
-      HostPortPair::FromURL(request_info_.url))) {
+  if (http_server_properties &&
+      http_server_properties->SupportsRequestPriority(
+          HostPortPair::FromURL(request_info_.url))) {
     num_streams_ = 1;
   } else {
     num_streams_ = num_streams;
@@ -168,6 +169,7 @@
     AlternateProtocolInfo alternate) {
   DCHECK(!original_url_.get());
   original_url_.reset(new GURL(original_url));
+  alternate_protocol_ = alternate;
   if (alternate.protocol == QUIC) {
     DCHECK(session_->params().enable_quic);
     using_quic_ = true;
@@ -1453,6 +1455,7 @@
 void HttpStreamFactoryImpl::Job::MarkOtherJobComplete(const Job& job) {
   DCHECK_EQ(STATUS_RUNNING, other_job_status_);
   other_job_status_ = job.job_status_;
+  other_job_alternate_protocol_ = job.alternate_protocol_;
   MaybeMarkAlternateProtocolBroken();
 }
 
diff --git a/net/http/http_stream_factory_impl_job.h b/net/http/http_stream_factory_impl_job.h
index 55bfeec..04342bf 100644
--- a/net/http/http_stream_factory_impl_job.h
+++ b/net/http/http_stream_factory_impl_job.h
@@ -275,6 +275,12 @@
   // and will specify the original URL.
   scoped_ptr<GURL> original_url_;
 
+  // AlternateProtocol for this job if this is an alternate job.
+  AlternateProtocolInfo alternate_protocol_;
+
+  // AlternateProtocol for the other job if this is not an alternate job.
+  AlternateProtocolInfo other_job_alternate_protocol_;
+
   // This is the Job we're dependent on. It will notify us if/when it's OK to
   // proceed.
   Job* blocking_job_;
diff --git a/net/http/http_stream_factory_impl_unittest.cc b/net/http/http_stream_factory_impl_unittest.cc
index ed4b496..505acdf 100644
--- a/net/http/http_stream_factory_impl_unittest.cc
+++ b/net/http/http_stream_factory_impl_unittest.cc
@@ -1261,10 +1261,7 @@
   request_info.load_flags = 0;
 
   session->http_server_properties()->SetAlternateProtocol(
-      HostPortPair("www.google.com", 8888),
-      9999,
-      NPN_SPDY_3,
-      1);
+      HostPortPair("www.google.com", 8888), 9999, NPN_SPDY_3, 1.0);
 
   SSLConfig ssl_config;
   StreamRequestWaiter waiter;
diff --git a/net/http/transport_security_state_static.h b/net/http/transport_security_state_static.h
index 7c0bf74..a0a6897 100644
--- a/net/http/transport_security_state_static.h
+++ b/net/http/transport_security_state_static.h
@@ -677,1255 +677,1299 @@
 // value has the MSB set then it represents a literal leaf value. Otherwise
 // it's a pointer to the n'th element of the array.
 static const uint8 kHSTSHuffmanTree[] = {
-    0xe7, 0xf2, 0xed, 0xae, 0xe9, 0x01, 0x00, 0x02, 0xb1, 0xb5, 0xf1, 0x04,
-    0xb3, 0xb2, 0x05, 0x06, 0xfa, 0x07, 0xf6, 0x08, 0xeb, 0x09, 0x0a, 0xe3,
-    0xe1, 0x0b, 0x80, 0x0c, 0x03, 0x0d, 0xe2, 0xe8, 0x0f, 0xf3, 0xe5, 0x10,
-    0xff, 0x11, 0xf4, 0xee, 0xef, 0x13, 0xf7, 0xe4, 0xb9, 0xb7, 0xb6, 0x16,
-    0xb8, 0x17, 0x18, 0xb0, 0xb4, 0x19, 0x1a, 0xea, 0xf8, 0x1b, 0xad, 0x1c,
-    0x1d, 0xf0, 0x15, 0x1e, 0xf9, 0xe6, 0xf5, 0x20, 0x21, 0xec, 0x1f, 0x22,
-    0x14, 0x23, 0x12, 0x24, 0x0e, 0x25,
+    0xec, 0xf2, 0x00, 0x80, 0xed, 0xae, 0xe9, 0x02, 0xb1, 0xb5, 0xf1, 0x04,
+    0xb3, 0xb2, 0x05, 0x06, 0x07, 0xfa, 0xf6, 0x08, 0xeb, 0x09, 0x0a, 0xe3,
+    0xe1, 0x0b, 0x03, 0x0c, 0x01, 0x0d, 0xe5, 0xef, 0xff, 0x0f, 0xe2, 0xe8,
+    0x11, 0xf3, 0xb9, 0xb7, 0xb6, 0x13, 0xb8, 0x14, 0x15, 0xb0, 0xb4, 0x16,
+    0x17, 0xea, 0xf8, 0x18, 0xad, 0x19, 0xf7, 0x1a, 0x1b, 0xee, 0x12, 0x1c,
+    0xe4, 0xf5, 0xf4, 0x1e, 0xf9, 0xe6, 0xf0, 0x20, 0xe7, 0x21, 0x1f, 0x22,
+    0x1d, 0x23, 0x10, 0x24, 0x0e, 0x25,
 };
 
 static const uint8 kPreloadedHSTSData[] = {
-    0xfe, 0x3d, 0x7c, 0x33, 0x01, 0x51, 0x12, 0xcf, 0xbe, 0x19, 0x80, 0xa8,
-    0x8b, 0x66, 0xab, 0x52, 0x93, 0x25, 0x2e, 0xfe, 0x69, 0x7b, 0x16, 0x9f,
-    0xda, 0xaf, 0xf6, 0x62, 0xba, 0x47, 0x35, 0x33, 0xf3, 0xf6, 0x4e, 0xa9,
-    0xc5, 0xa1, 0x8f, 0xcb, 0x10, 0xe7, 0xf8, 0x5b, 0x64, 0x0c, 0x62, 0x5a,
-    0x47, 0xa4, 0xd1, 0x7a, 0xa1, 0xe3, 0xe8, 0x82, 0x7f, 0x1e, 0xbe, 0x19,
-    0x80, 0xa8, 0xa8, 0xa7, 0xff, 0xb6, 0x5b, 0x3f, 0xba, 0xab, 0x39, 0x6a,
-    0xe5, 0x69, 0xf7, 0xc3, 0x30, 0x15, 0x15, 0xec, 0xf8, 0x9d, 0x83, 0xcb,
-    0x16, 0x91, 0xe8, 0xf7, 0x3e, 0x63, 0x3f, 0xf1, 0xf1, 0xe7, 0xaf, 0x86,
-    0x60, 0x2a, 0x24, 0x69, 0xff, 0xc7, 0x36, 0x3c, 0xf5, 0xf0, 0xcc, 0x05,
-    0x44, 0xf1, 0x3f, 0xf8, 0xe6, 0xc7, 0x9e, 0xbe, 0x19, 0x80, 0xa8, 0x9f,
-    0xe7, 0xff, 0x1c, 0xd8, 0xf3, 0xd7, 0xc3, 0x30, 0x15, 0x14, 0x34, 0xff,
-    0xe3, 0x9b, 0x1e, 0x7a, 0xf8, 0x66, 0x02, 0xa2, 0x88, 0x9f, 0xf6, 0x3c,
-    0xf5, 0xf0, 0xcc, 0x05, 0x45, 0x23, 0x3f, 0xff, 0x57, 0x3b, 0x6f, 0x47,
-    0xd0, 0xe7, 0x77, 0xbb, 0x76, 0x94, 0x8e, 0x64, 0x52, 0xf5, 0x23, 0xcf,
-    0xfc, 0x7c, 0x79, 0xeb, 0xe1, 0x98, 0x0a, 0x89, 0x42, 0x2c, 0x5d, 0x89,
-    0x7c, 0x70, 0x20, 0x81, 0xd7, 0x3c, 0xfc, 0x2b, 0x8c, 0x4f, 0xb4, 0xde,
-    0xd4, 0xdd, 0xc5, 0x3b, 0xa9, 0xf9, 0x0f, 0x87, 0x62, 0xc9, 0xff, 0xc7,
-    0x36, 0x3c, 0xf5, 0xf0, 0xcc, 0x05, 0x44, 0xe7, 0x3f, 0xf8, 0xe6, 0xc7,
-    0x9e, 0xbe, 0x19, 0x80, 0xa8, 0xa2, 0x67, 0xfe, 0xfb, 0xcf, 0xb2, 0xbb,
-    0x8f, 0x2e, 0xd6, 0x8f, 0xa3, 0xb2, 0xea, 0x7e, 0x29, 0xcf, 0xe3, 0xd7,
-    0xc3, 0x30, 0x15, 0x10, 0xe4, 0xfb, 0xe1, 0x98, 0x0a, 0x88, 0xbe, 0x7f,
-    0x5e, 0xb9, 0xdd, 0x77, 0x8b, 0x4d, 0x7b, 0x56, 0x9e, 0xd3, 0xdb, 0xda,
-    0x50, 0x63, 0x75, 0x82, 0xf2, 0x3d, 0x22, 0xf9, 0xc3, 0x11, 0x6d, 0x9f,
-    0xfc, 0x73, 0x63, 0xcf, 0x5f, 0x0c, 0xc0, 0x54, 0x4c, 0x93, 0xf8, 0xf5,
-    0xf0, 0xcc, 0x05, 0x45, 0xbd, 0x3f, 0xf8, 0xe6, 0xc7, 0x9e, 0xbe, 0x19,
-    0x80, 0xa8, 0xa4, 0xe7, 0xdb, 0x3b, 0xbf, 0xd6, 0xdd, 0xe5, 0xa1, 0x95,
-    0x24, 0xbe, 0x1f, 0x54, 0x6b, 0x75, 0x37, 0x47, 0x9e, 0x94, 0xe7, 0xf1,
-    0xeb, 0xe1, 0x98, 0x0a, 0x88, 0x76, 0x7f, 0xf1, 0xcd, 0x8f, 0x3d, 0x7c,
-    0x33, 0x01, 0x51, 0x2c, 0x4f, 0xe3, 0xd7, 0xc3, 0x30, 0x15, 0x11, 0x84,
-    0xfb, 0xe1, 0x98, 0x0a, 0x88, 0xf6, 0x7a, 0xf9, 0x6b, 0xa5, 0xa7, 0x8f,
-    0x8f, 0x3d, 0x1e, 0xae, 0x8c, 0x67, 0xf1, 0xeb, 0xe1, 0x98, 0x0a, 0x8b,
-    0x0e, 0x7f, 0x1e, 0xbe, 0x19, 0x80, 0xa8, 0xb9, 0xe1, 0x93, 0xd0, 0xb0,
-    0xf1, 0xea, 0x65, 0x09, 0x13, 0x1c, 0x68, 0xf2, 0x7f, 0x1e, 0xbe, 0x19,
-    0x80, 0xa8, 0x87, 0xa7, 0xdf, 0x0c, 0xc0, 0x54, 0x44, 0xd3, 0xff, 0xab,
-    0x59, 0xbd, 0xb3, 0xa7, 0xd7, 0xd9, 0x69, 0xb4, 0x65, 0xa7, 0xff, 0x56,
-    0xfd, 0x59, 0x76, 0x2b, 0x74, 0xc6, 0x5a, 0x2d, 0x3e, 0x2d, 0x8b, 0x4f,
-    0x6b, 0xcc, 0xf4, 0xa8, 0x85, 0xe4, 0x7a, 0x4c, 0xc3, 0x66, 0x37, 0x85,
-    0x5f, 0x84, 0x73, 0xbf, 0x80, 0xb4, 0xb6, 0xb4, 0x7b, 0x35, 0x5e, 0x0d,
-    0x4f, 0x6b, 0x65, 0xa5, 0xa7, 0xff, 0xfe, 0xdf, 0x9c, 0x95, 0x7d, 0xc1,
-    0xa7, 0x5b, 0xae, 0x5a, 0xf7, 0x6f, 0x6b, 0x4f, 0xfe, 0x27, 0x1f, 0x56,
-    0xbf, 0xa1, 0xb3, 0x05, 0x69, 0xb1, 0xd9, 0x68, 0xa4, 0x7d, 0x81, 0x0e,
-    0xdd, 0xf1, 0x2e, 0x77, 0xf0, 0x16, 0x87, 0x7c, 0xf5, 0x3d, 0x9d, 0x4f,
-    0xb7, 0x9a, 0xc7, 0xad, 0x3f, 0x9f, 0x76, 0xbf, 0x5a, 0xfd, 0x6f, 0xad,
-    0xad, 0x3c, 0x57, 0x2e, 0xd6, 0x9d, 0xc7, 0x1c, 0x25, 0x3e, 0xc1, 0xd6,
-    0xe9, 0x23, 0x97, 0xf3, 0xec, 0xd3, 0x95, 0xa5, 0xa3, 0x94, 0x4d, 0xf6,
-    0x80, 0x26, 0x93, 0xdb, 0xcc, 0xc5, 0xa7, 0xfe, 0xec, 0x9c, 0xe9, 0xb6,
-    0x2f, 0xf9, 0xd7, 0x5a, 0x7f, 0xc5, 0xed, 0x85, 0xae, 0xc4, 0x65, 0xa7,
-    0xea, 0x75, 0xe3, 0xea, 0xeb, 0x4f, 0x57, 0x35, 0x62, 0xd1, 0x4a, 0x8c,
-    0xad, 0x26, 0x28, 0x71, 0xf5, 0xcc, 0x5c, 0x1f, 0xda, 0x60, 0x9e, 0x68,
-    0xbe, 0x7e, 0xae, 0x1a, 0xb9, 0x25, 0xa7, 0x37, 0x9d, 0xad, 0x3f, 0xff,
-    0xf8, 0x46, 0xd6, 0xf6, 0x35, 0xce, 0xc9, 0xce, 0x97, 0xab, 0x5f, 0xfa,
-    0xe1, 0x69, 0xf1, 0x6b, 0xc6, 0xb1, 0x69, 0xff, 0xfd, 0x56, 0xbe, 0xe6,
-    0xa1, 0xe8, 0xec, 0x5b, 0xb0, 0xab, 0xeb, 0x4f, 0xff, 0xfb, 0x8e, 0x83,
-    0x41, 0xb2, 0x1a, 0xf2, 0xdd, 0x74, 0xce, 0x2b, 0xda, 0xd3, 0xfa, 0xd7,
-    0xdf, 0xdf, 0x8d, 0x6a, 0xd3, 0xfb, 0x38, 0xf1, 0xc6, 0xd6, 0x2d, 0x0c,
-    0x8d, 0xe2, 0x72, 0x13, 0x89, 0xee, 0xf4, 0x56, 0x2d, 0x3f, 0xe6, 0xcb,
-    0x18, 0xc2, 0xd6, 0xf6, 0xb4, 0x32, 0xa7, 0x6a, 0x7d, 0x22, 0x8f, 0xc6,
-    0x87, 0x85, 0xa2, 0x47, 0x37, 0x8f, 0x5a, 0x7c, 0xdd, 0xde, 0xcd, 0x2d,
-    0x3b, 0x35, 0x75, 0xa6, 0xf2, 0xc5, 0xa7, 0x0e, 0x9c, 0x79, 0xb3, 0xf8,
-    0xdc, 0xfd, 0xe0, 0x74, 0xe6, 0xde, 0x16, 0x86, 0x3e, 0x62, 0x33, 0x9f,
-    0xff, 0x78, 0xda, 0xe8, 0x3e, 0x3b, 0x74, 0xad, 0x75, 0x56, 0x96, 0x9f,
-    0xfb, 0x6d, 0xef, 0xa6, 0x87, 0x34, 0xda, 0x5a, 0x7f, 0x74, 0xb5, 0xe5,
-    0xbf, 0x0c, 0xb4, 0x76, 0x7f, 0xa2, 0x8d, 0x3f, 0xef, 0xb9, 0xd2, 0xec,
-    0x56, 0x66, 0x96, 0x86, 0x3e, 0x3f, 0x08, 0xa7, 0xff, 0xff, 0xbc, 0x1b,
-    0xfc, 0x59, 0xce, 0x9e, 0xb4, 0x4f, 0xab, 0x75, 0x4e, 0x86, 0xae, 0xb4,
-    0x99, 0x69, 0xfc, 0xfc, 0xf9, 0x5d, 0xad, 0x5a, 0x7f, 0xff, 0xff, 0x17,
-    0x77, 0x1a, 0xcb, 0x7a, 0x73, 0xbf, 0x3a, 0x0d, 0x5a, 0xfa, 0xf2, 0xc1,
-    0xac, 0xb5, 0x69, 0xd9, 0x80, 0xa8, 0xa6, 0x22, 0x91, 0x78, 0x10, 0x96,
-    0x9f, 0xf5, 0x0d, 0xaf, 0xbe, 0x9b, 0xee, 0x2d, 0x3a, 0x8b, 0xb5, 0xa5,
-    0x4b, 0x4e, 0xb4, 0x6b, 0xb3, 0x54, 0xe8, 0x6e, 0x09, 0x13, 0xd8, 0xd3,
-    0x39, 0xed, 0x6a, 0xd3, 0xf8, 0xdc, 0xed, 0xac, 0xae, 0x16, 0x8b, 0x4f,
-    0x47, 0x07, 0x27, 0xff, 0xf0, 0xd0, 0x6b, 0x4d, 0xab, 0xb8, 0x35, 0xc7,
-    0x46, 0x77, 0x4b, 0x4f, 0xf8, 0x18, 0xdb, 0xab, 0xd1, 0x0a, 0xd0, 0xc8,
-    0xa1, 0xdb, 0x3c, 0xfb, 0xec, 0xe9, 0xbe, 0xb4, 0xfd, 0x83, 0xd3, 0x96,
-    0x15, 0xa2, 0x8f, 0xdc, 0x88, 0xbc, 0x28, 0x8b, 0x17, 0x9e, 0x5e, 0x2f,
-    0xcc, 0x30, 0xbd, 0x90, 0x04, 0x68, 0x16, 0x91, 0x14, 0x20, 0xdc, 0x0f,
-    0xfc, 0x3b, 0x8d, 0x0c, 0x41, 0x72, 0xd4, 0x67, 0x53, 0xfe, 0xf7, 0xfc,
-    0xe3, 0xa6, 0x73, 0x96, 0x2d, 0x3d, 0x43, 0xef, 0xae, 0xb4, 0xff, 0xff,
-    0xfb, 0x65, 0xad, 0xd7, 0xd9, 0xd7, 0x43, 0x78, 0xed, 0xd2, 0xad, 0x7d,
-    0x78, 0x3d, 0xdd, 0x69, 0x68, 0x91, 0x6b, 0x72, 0x69, 0xff, 0xf5, 0x56,
-    0xc8, 0x37, 0x5d, 0x2f, 0xe6, 0xdb, 0xae, 0xb4, 0xff, 0xf6, 0xb7, 0x5d,
-    0xf4, 0x33, 0x56, 0xb9, 0xa1, 0x5a, 0x7f, 0xad, 0xe8, 0x66, 0xa1, 0xd7,
-    0x52, 0xd2, 0xbd, 0x22, 0x3b, 0x14, 0x64, 0x42, 0x98, 0x76, 0xa1, 0xcf,
-    0x3e, 0x7b, 0x5a, 0xfb, 0xad, 0x3f, 0xff, 0xff, 0xea, 0x1f, 0x7d, 0x0b,
-    0x7e, 0x1d, 0xc2, 0xd3, 0x18, 0x73, 0xde, 0xc8, 0xf5, 0xbb, 0x7b, 0x6e,
-    0x52, 0x9f, 0xff, 0xf8, 0x0b, 0x8e, 0x7c, 0xff, 0x4f, 0x1a, 0xcb, 0x86,
-    0xfc, 0xdd, 0xb9, 0xc2, 0xd3, 0x79, 0x65, 0xa9, 0xa2, 0x11, 0x45, 0xe1,
-    0x43, 0x0c, 0xab, 0xaf, 0x71, 0x9b, 0x0c, 0x6e, 0x33, 0xff, 0x8c, 0x1d,
-    0x37, 0x8f, 0xa3, 0x60, 0xf6, 0xb4, 0xff, 0xf8, 0x87, 0x5b, 0xa7, 0x6d,
-    0x39, 0x5d, 0x7c, 0x1e, 0xd6, 0x9f, 0xf9, 0x86, 0xc1, 0xa7, 0x57, 0xf1,
-    0xad, 0x5a, 0x2e, 0x8a, 0x1f, 0x16, 0xe7, 0xab, 0x54, 0xee, 0x2d, 0x3b,
-    0xaa, 0xb6, 0xb4, 0xd5, 0xca, 0xd1, 0x62, 0x6d, 0x0f, 0x87, 0x5d, 0xc9,
-    0x34, 0x4a, 0xe8, 0x7a, 0x7c, 0x5a, 0xbd, 0x76, 0xb4, 0xfd, 0xcb, 0x0e,
-    0xf1, 0xeb, 0x4e, 0x6e, 0x59, 0x69, 0xf9, 0xf5, 0xab, 0xe3, 0x9d, 0x0f,
-    0x1c, 0xc5, 0x90, 0xf4, 0x5a, 0xb8, 0xdd, 0x3f, 0x3b, 0x6f, 0x3a, 0xed,
-    0xda, 0xd3, 0xfb, 0xee, 0x0d, 0x6f, 0x34, 0xb4, 0x51, 0xf3, 0x11, 0xa4,
-    0xfc, 0xdd, 0xd6, 0xbd, 0x58, 0xb4, 0x3c, 0xf4, 0x04, 0x82, 0x7f, 0xb5,
-    0xba, 0x7e, 0x0d, 0x5a, 0xb4, 0xff, 0xff, 0x0e, 0x77, 0x7b, 0x28, 0x87,
-    0x43, 0x4e, 0xba, 0x5f, 0x81, 0x5a, 0x05, 0x14, 0x1a, 0x37, 0x9f, 0xf1,
-    0x53, 0x9d, 0x2e, 0xdb, 0xce, 0xba, 0xd3, 0xfb, 0x2d, 0xbe, 0xeb, 0x3e,
-    0xb4, 0x72, 0x7e, 0xba, 0x43, 0x9f, 0xea, 0xfd, 0x8c, 0x5f, 0xa1, 0x5a,
-    0x46, 0x5b, 0xa1, 0xb6, 0x9c, 0x35, 0xca, 0xd0, 0xc6, 0xf6, 0xd2, 0x29,
-    0xfa, 0xdb, 0xd5, 0x0f, 0xb5, 0xa7, 0x8d, 0xe9, 0xbb, 0x5a, 0x28, 0xf4,
-    0x88, 0xba, 0x77, 0x96, 0xf6, 0xb4, 0x32, 0x7b, 0xf5, 0x09, 0x72, 0x84,
-    0xb7, 0xdc, 0xc4, 0x82, 0x7f, 0x68, 0xac, 0xad, 0xf9, 0xa5, 0xa4, 0xe2,
-    0xd3, 0xf5, 0x79, 0x5b, 0x0b, 0x16, 0x9a, 0xad, 0x63, 0x7d, 0x71, 0x19,
-    0xfb, 0x78, 0xf3, 0x7c, 0x96, 0x9f, 0x17, 0x7f, 0xab, 0x56, 0x8f, 0x68,
-    0xf2, 0x27, 0x2e, 0xcb, 0x3c, 0x2c, 0x9f, 0xff, 0xbe, 0xfd, 0xd3, 0x9b,
-    0x61, 0xf6, 0x35, 0xad, 0xf8, 0xb4, 0xff, 0xfe, 0x2a, 0xb5, 0xf7, 0xd6,
-    0xd8, 0xcc, 0x5c, 0xf4, 0x67, 0x74, 0xb4, 0xff, 0xff, 0xfb, 0xc1, 0xe9,
-    0xc6, 0x5a, 0xff, 0xe7, 0x7d, 0x2f, 0xe3, 0x5b, 0xba, 0x21, 0xaf, 0x6b,
-    0x4f, 0xff, 0xbc, 0xff, 0xeb, 0x57, 0xd9, 0x57, 0x4d, 0xf6, 0xcb, 0x45,
-    0x23, 0x93, 0x70, 0x8c, 0x9f, 0xfe, 0x7b, 0xb6, 0xe9, 0x85, 0xc1, 0xad,
-    0x5f, 0x16, 0x9f, 0xff, 0x73, 0x46, 0xe8, 0xed, 0xa6, 0xbb, 0x8f, 0xcf,
-    0xd8, 0xb4, 0xff, 0x50, 0xd9, 0xd3, 0xbc, 0xc7, 0x16, 0x9f, 0xef, 0xd8,
-    0xd6, 0x59, 0xe7, 0xec, 0x5a, 0x7f, 0xbc, 0x1e, 0x97, 0xf3, 0xab, 0xcf,
-    0xad, 0x0c, 0x7f, 0xf7, 0x3e, 0x9f, 0xfd, 0x67, 0x4b, 0xef, 0xce, 0x9a,
-    0xbd, 0xdb, 0xeb, 0x4f, 0xff, 0xfa, 0xad, 0xb9, 0x57, 0x1d, 0x37, 0x5a,
-    0xbd, 0x59, 0xd2, 0x8b, 0x95, 0xa2, 0x91, 0x84, 0x4a, 0x31, 0x62, 0xbd,
-    0xe0, 0x8d, 0x32, 0xd2, 0x72, 0x50, 0x32, 0xed, 0xe1, 0x75, 0xa8, 0x71,
-    0xcf, 0xfb, 0x3f, 0xba, 0xd3, 0x09, 0x76, 0xb4, 0xff, 0x57, 0x16, 0xbe,
-    0xfd, 0x34, 0x4b, 0x4f, 0xff, 0xf9, 0x81, 0x8d, 0xd1, 0xcd, 0x90, 0xf3,
-    0xd3, 0xd0, 0x0d, 0x6e, 0x96, 0x80, 0x47, 0x38, 0x9e, 0x3b, 0x1e, 0x4f,
-    0x16, 0x89, 0x96, 0x9f, 0xff, 0xfc, 0x25, 0xef, 0x78, 0xe7, 0x41, 0xf1,
-    0xdb, 0xa5, 0x5a, 0xfa, 0xf0, 0x7b, 0xba, 0xd3, 0xed, 0x93, 0x0d, 0x8b,
-    0x4d, 0xa6, 0x32, 0x2a, 0x5d, 0x42, 0x0e, 0x1e, 0x8f, 0xd2, 0x86, 0x44,
-    0x32, 0xf7, 0x6d, 0x4e, 0x1d, 0x94, 0x6b, 0xb9, 0x19, 0x74, 0xf6, 0xaf,
-    0x9d, 0xad, 0x3f, 0xf6, 0xcb, 0xa1, 0x7f, 0xcb, 0x33, 0xe0, 0xb4, 0xf1,
-    0x6f, 0x2c, 0x5a, 0x79, 0xd3, 0x69, 0x96, 0x9f, 0xb7, 0x96, 0x74, 0x7e,
-    0x96, 0x9f, 0x67, 0xc6, 0xd2, 0x5a, 0x08, 0xf5, 0xb4, 0x61, 0x14, 0x99,
-    0x17, 0xb2, 0x20, 0x46, 0x22, 0x1d, 0x3c, 0x4f, 0x7a, 0xf3, 0x2e, 0xb4,
-    0xff, 0xfc, 0x5f, 0xe9, 0x45, 0x43, 0xef, 0x65, 0x46, 0xa0, 0x5a, 0x7f,
-    0xff, 0x8a, 0xcf, 0xb1, 0xaf, 0xe3, 0x74, 0x6f, 0xb7, 0x3b, 0x63, 0x2d,
-    0x14, 0x8c, 0x2f, 0xac, 0xcf, 0xff, 0xfe, 0xff, 0xca, 0xce, 0x9b, 0xad,
-    0x0b, 0x39, 0xba, 0xb1, 0xad, 0xd7, 0x80, 0xb4, 0xff, 0xff, 0xcd, 0xef,
-    0x6d, 0xd0, 0x6b, 0xcf, 0x7d, 0x2d, 0x7d, 0xc8, 0x7d, 0x35, 0x8b, 0x4f,
-    0xad, 0xb9, 0x50, 0xad, 0x14, 0x8a, 0x2f, 0x1f, 0x20, 0x93, 0x41, 0xdc,
-    0x63, 0xd3, 0xff, 0x3e, 0xe5, 0xef, 0x6c, 0x56, 0x37, 0xb5, 0xa7, 0xf8,
-    0x7c, 0x70, 0x6b, 0x79, 0xa5, 0xa7, 0xfb, 0x9d, 0xb7, 0x1c, 0xef, 0x0c,
-    0xb4, 0xff, 0xff, 0x67, 0xf7, 0x5a, 0x2a, 0x1b, 0x2e, 0xd4, 0x3c, 0xed,
-    0x96, 0x9e, 0xd7, 0x4b, 0x3e, 0xb4, 0x5a, 0x88, 0x8c, 0x63, 0x9f, 0xfd,
-    0xc6, 0x0d, 0x86, 0xf0, 0xb9, 0x21, 0x25, 0xa7, 0xe7, 0x2d, 0x7f, 0x8d,
-    0xa5, 0xa7, 0xfb, 0x78, 0x61, 0xad, 0xe6, 0x96, 0x9e, 0xaf, 0xf7, 0xc2,
-    0xd0, 0xc8, 0x89, 0xb9, 0x86, 0x8d, 0xa7, 0xea, 0xd7, 0xff, 0x4f, 0x5a,
-    0x7e, 0x1a, 0xd8, 0xd0, 0x2d, 0x3c, 0x35, 0x7e, 0x8e, 0x1e, 0xae, 0x8b,
-    0x23, 0x95, 0xc8, 0x30, 0x8d, 0x8e, 0xd2, 0x92, 0x47, 0xf9, 0xc6, 0xe1,
-    0x87, 0x72, 0x3d, 0x43, 0x4d, 0xd4, 0x21, 0x27, 0xfe, 0x11, 0xae, 0x9f,
-    0xad, 0x8d, 0x38, 0xb4, 0x32, 0xf2, 0x25, 0x4e, 0xb4, 0xe4, 0x26, 0x27,
-    0xc2, 0xc6, 0xce, 0x56, 0x9f, 0xd4, 0xe6, 0xeb, 0x4d, 0xca, 0xd3, 0xff,
-    0xff, 0xdb, 0xad, 0x5f, 0x1c, 0xe8, 0x35, 0x6b, 0xeb, 0xcb, 0x06, 0xb9,
-    0xd9, 0x38, 0xb4, 0xde, 0x7b, 0x5a, 0x3e, 0x89, 0xbd, 0x42, 0x0a, 0x7e,
-    0xab, 0x06, 0xad, 0xba, 0xd3, 0xff, 0xbf, 0x6b, 0xef, 0x46, 0xb5, 0xb7,
-    0xb6, 0x5a, 0x57, 0x5a, 0x3c, 0x3d, 0xbf, 0x49, 0x73, 0xf9, 0x8c, 0x35,
-    0xbc, 0xd2, 0xd3, 0xdd, 0x02, 0xce, 0x16, 0x9f, 0xff, 0xf6, 0x85, 0xbb,
-    0xb5, 0xf7, 0xf1, 0xb4, 0x35, 0xc9, 0x57, 0xdc, 0x5a, 0x09, 0x54, 0x63,
-    0x84, 0xd9, 0x0c, 0xe1, 0x28, 0xbc, 0x22, 0x3c, 0x25, 0x74, 0x61, 0xe8,
-    0x96, 0x7c, 0xf2, 0xfd, 0x5a, 0xb4, 0xfa, 0xaf, 0x65, 0x70, 0xb4, 0x5a,
-    0x79, 0xfb, 0x27, 0x9f, 0xff, 0x15, 0x94, 0x1c, 0xec, 0xab, 0xdf, 0x4f,
-    0x7e, 0x32, 0xd3, 0xce, 0xda, 0xad, 0xad, 0x3f, 0xff, 0xf3, 0xb5, 0xaf,
-    0xcb, 0x7a, 0x0f, 0x8e, 0xdd, 0x2a, 0xd7, 0xd7, 0x83, 0xdd, 0xd6, 0x8b,
-    0x11, 0x4b, 0x44, 0x93, 0xff, 0xff, 0xe6, 0xb6, 0xfe, 0x35, 0xbd, 0x37,
-    0x5c, 0xf4, 0x1a, 0xf3, 0xdf, 0x4b, 0xf7, 0xd9, 0x69, 0x69, 0xf3, 0x0d,
-    0xb9, 0x62, 0xd3, 0xff, 0xff, 0xff, 0xa8, 0xd4, 0x0d, 0xb6, 0x36, 0xaa,
-    0xf7, 0x6f, 0xfd, 0x86, 0xac, 0xaf, 0x2f, 0xe3, 0x82, 0xc6, 0x5a, 0x7f,
-    0xbb, 0xae, 0x46, 0xb7, 0x9a, 0x5a, 0x7f, 0x59, 0xe3, 0x68, 0xc5, 0xa5,
-    0xa7, 0xfc, 0xde, 0xdd, 0xbc, 0xa1, 0x73, 0xd1, 0x96, 0x8a, 0x3f, 0xab,
-    0x4d, 0x27, 0xff, 0xab, 0x5c, 0xd5, 0x77, 0x7e, 0x9f, 0xbf, 0x37, 0x5a,
-    0x7a, 0xc2, 0x1d, 0x2d, 0x0c, 0xaf, 0xaa, 0x88, 0xca, 0x30, 0x0f, 0x91,
-    0x9a, 0x12, 0x3b, 0x27, 0xc8, 0x51, 0x8c, 0x2c, 0xae, 0x45, 0xe2, 0xa4,
-    0xee, 0x7a, 0x38, 0xb4, 0xff, 0xf5, 0xaf, 0x16, 0xe8, 0x61, 0x6f, 0x7a,
-    0x2b, 0x16, 0x8a, 0x3f, 0x32, 0x20, 0x9f, 0xac, 0x71, 0xfd, 0x67, 0xec,
-    0x5a, 0x7c, 0x62, 0xe6, 0xb9, 0x5a, 0x4e, 0x2d, 0x33, 0x19, 0x69, 0x69,
-    0x68, 0xf9, 0xa5, 0xc1, 0x58, 0xe4, 0xf5, 0xb6, 0x6d, 0x3d, 0xab, 0xe5,
-    0xab, 0x4c, 0xe6, 0x2d, 0x3f, 0xb6, 0x5f, 0xb5, 0xe2, 0xcb, 0x47, 0x5b,
-    0x4d, 0x05, 0x8d, 0xa9, 0xf8, 0x88, 0xcc, 0x45, 0xe0, 0xb4, 0xfe, 0xb9,
-    0x5b, 0xc6, 0x0f, 0x6b, 0x4f, 0xff, 0x9b, 0xec, 0x14, 0x66, 0x07, 0x95,
-    0xfc, 0x32, 0xd0, 0xe2, 0x21, 0xba, 0x8d, 0x27, 0xef, 0xd3, 0x7b, 0x61,
-    0x5a, 0x70, 0xe1, 0x96, 0x9b, 0xb6, 0x5a, 0x1e, 0x7b, 0x84, 0x58, 0x23,
-    0x50, 0xef, 0x3b, 0x4a, 0x6e, 0xb2, 0x37, 0x36, 0x94, 0xb7, 0x63, 0xdb,
-    0xcb, 0x39, 0x95, 0x27, 0x53, 0xda, 0x7e, 0xe1, 0x96, 0x12, 0xf9, 0x2d,
-    0x8e, 0x90, 0xa3, 0x08, 0x72, 0x1b, 0x5f, 0x95, 0x40, 0x68, 0xd0, 0xf7,
-    0x3e, 0x5b, 0x91, 0xb9, 0x0c, 0xf4, 0x75, 0xe5, 0x64, 0xea, 0x72, 0xe5,
-    0xd4, 0x62, 0x3d, 0x51, 0xb0, 0xfa, 0x87, 0x13, 0xb4, 0x20, 0xe7, 0xff,
-    0xef, 0x00, 0xf6, 0xeb, 0xed, 0x56, 0xf5, 0x9c, 0xe6, 0x7b, 0x5a, 0x0e,
-    0xa8, 0xcc, 0xa3, 0xcf, 0x9f, 0xc7, 0xaf, 0x86, 0x60, 0x2a, 0x29, 0xd9,
-    0xf7, 0xc3, 0x30, 0x15, 0x15, 0x1c, 0xff, 0xb1, 0xe7, 0xaf, 0x86, 0x60,
-    0x2a, 0x26, 0x89, 0x1e, 0x8f, 0xe0, 0xc6, 0x33, 0xf8, 0xf5, 0xf0, 0xcc,
-    0x05, 0x45, 0x5f, 0x3e, 0xf8, 0x66, 0x02, 0xa2, 0xb6, 0x9f, 0xe7, 0x9e,
-    0xbe, 0x19, 0x80, 0xa8, 0x90, 0x64, 0x7a, 0x3f, 0x3c, 0x31, 0x9f, 0xf8,
-    0xf8, 0xf3, 0xd7, 0xc3, 0x30, 0x15, 0x12, 0x1c, 0xff, 0x9f, 0xb6, 0xd5,
-    0xdd, 0xd5, 0xdd, 0xe1, 0x5a, 0x7d, 0x54, 0x3d, 0xdd, 0x69, 0xf7, 0xc3,
-    0x30, 0x15, 0x16, 0x24, 0xfa, 0xbe, 0xc3, 0xed, 0x69, 0xf7, 0xae, 0xaa,
-    0xfb, 0x2d, 0x3a, 0xec, 0x2b, 0x4b, 0x6c, 0x78, 0xa4, 0x57, 0x3f, 0xf3,
-    0x55, 0xe8, 0x79, 0x2e, 0xd8, 0x56, 0x9c, 0x2d, 0x62, 0xd2, 0x78, 0x9e,
-    0xe7, 0x88, 0x33, 0xba, 0x8b, 0xb5, 0xa7, 0xc4, 0xeb, 0xcc, 0xba, 0xd3,
-    0xff, 0x3a, 0xf2, 0xad, 0xe5, 0xd6, 0xeb, 0x1c, 0x5a, 0x66, 0x7a, 0xd1,
-    0x47, 0xc1, 0xf4, 0xb9, 0xfd, 0x5f, 0x7f, 0x75, 0x4e, 0x2d, 0x3e, 0xc7,
-    0xfa, 0xdb, 0x2d, 0x3f, 0x5e, 0xff, 0x2e, 0x3a, 0xeb, 0x43, 0x22, 0x34,
-    0x8c, 0xf0, 0xa2, 0x7f, 0xf9, 0xec, 0x66, 0x7f, 0x22, 0xdb, 0xca, 0xfa,
-    0xd3, 0xf8, 0x06, 0x9d, 0x0d, 0x5d, 0x68, 0xb4, 0xff, 0xb6, 0x9b, 0x3f,
-    0xbb, 0x6a, 0xd1, 0x0f, 0x09, 0x4f, 0xab, 0x76, 0xe7, 0x5d, 0x69, 0xee,
-    0xee, 0xc2, 0xb4, 0xfe, 0xfe, 0xf0, 0xae, 0x4e, 0x96, 0x86, 0x3d, 0x4a,
-    0x21, 0x81, 0x44, 0xfd, 0xdf, 0xe7, 0xec, 0xb3, 0x4d, 0x6b, 0xd6, 0x9f,
-    0xf0, 0xb1, 0x73, 0xa1, 0xcb, 0x6e, 0xb4, 0x3b, 0xcb, 0xa7, 0x1c, 0xa4,
-    0xd1, 0x37, 0xb3, 0x10, 0x6c, 0xb6, 0x10, 0x44, 0x50, 0xe0, 0xff, 0xe1,
-    0x13, 0xb8, 0x57, 0x64, 0x2a, 0xfb, 0x23, 0xbc, 0x34, 0x74, 0x45, 0xe8,
-    0xba, 0x7f, 0xed, 0x93, 0x6b, 0x79, 0xee, 0x87, 0xb5, 0xa7, 0xff, 0xaa,
-    0xd7, 0xeb, 0xcb, 0x0f, 0xbc, 0x31, 0x5d, 0x69, 0xb6, 0x7a, 0x44, 0xb0,
-    0xa2, 0x41, 0xd3, 0xb4, 0x68, 0xe1, 0xe7, 0xf1, 0xeb, 0xe1, 0x98, 0x0a,
-    0x8b, 0x36, 0x6a, 0xe5, 0x69, 0xff, 0x63, 0xcf, 0x5f, 0x0c, 0xc0, 0x54,
-    0x50, 0x12, 0x3d, 0x1e, 0xe9, 0x85, 0xa6, 0xf3, 0x6b, 0x4f, 0xd7, 0x63,
-    0x0b, 0x38, 0xb4, 0xb6, 0xb4, 0xef, 0x42, 0xe2, 0xd3, 0x56, 0xa8, 0xd7,
-    0x76, 0x21, 0x1d, 0xa2, 0x18, 0x56, 0xa6, 0xe9, 0x75, 0xa7, 0xfb, 0x75,
-    0xfd, 0x0b, 0x1a, 0xeb, 0x4f, 0x06, 0x60, 0x2a, 0x2d, 0xf9, 0xfb, 0xd6,
-    0xb0, 0x33, 0xeb, 0x47, 0xcf, 0x63, 0xb2, 0xb9, 0xea, 0x12, 0x71, 0x69,
-    0xf6, 0x9f, 0x7f, 0x57, 0x5a, 0x7e, 0x75, 0xeb, 0x42, 0xdd, 0xad, 0x3e,
-    0xe5, 0xba, 0xfe, 0x19, 0x68, 0x63, 0xde, 0x23, 0x19, 0xec, 0x21, 0xd2,
-    0xd3, 0xfb, 0xcb, 0x6e, 0xc1, 0x46, 0x5a, 0x7b, 0x7e, 0xf9, 0x32, 0xd3,
-    0x53, 0xd6, 0x8a, 0x37, 0x42, 0x4b, 0x23, 0xbb, 0xca, 0xbf, 0x5a, 0x13,
-    0xaf, 0x23, 0xe4, 0x62, 0xa1, 0x1e, 0x44, 0x7f, 0x20, 0xdc, 0x22, 0x3b,
-    0x20, 0x11, 0xfd, 0x36, 0xcf, 0xfb, 0x1e, 0x7a, 0xf8, 0x66, 0x02, 0xa2,
-    0x94, 0x9f, 0xe7, 0x9e, 0xbe, 0x19, 0x80, 0xa8, 0x93, 0xa4, 0x73, 0x22,
-    0x27, 0x11, 0xe1, 0x9f, 0x1c, 0x52, 0xc8, 0xdb, 0x39, 0xb6, 0xe9, 0x94,
-    0x54, 0x10, 0xb4, 0x22, 0x7e, 0xbc, 0x2b, 0xdc, 0x26, 0x34, 0xf9, 0xce,
-    0xca, 0x7b, 0x84, 0xcd, 0xe5, 0x92, 0x3a, 0x8c, 0xee, 0x7d, 0xf0, 0xcc,
-    0x05, 0x44, 0x3f, 0x3f, 0xec, 0x79, 0xeb, 0xe1, 0x98, 0x0a, 0x89, 0x4e,
-    0x47, 0xa3, 0xf8, 0x31, 0x8c, 0xfe, 0x3d, 0x7c, 0x33, 0x01, 0x51, 0x13,
-    0xcf, 0xe3, 0xd7, 0xc3, 0x30, 0x15, 0x11, 0x8c, 0xff, 0xe3, 0x9b, 0x1e,
-    0x7a, 0xf8, 0x66, 0x02, 0xa2, 0x79, 0x86, 0x47, 0x95, 0x84, 0xef, 0x3c,
-    0xd9, 0xe4, 0xfb, 0xe1, 0x98, 0x0a, 0x88, 0x82, 0x7f, 0xd8, 0xf3, 0xd7,
-    0xc3, 0x30, 0x15, 0x12, 0xa4, 0x8f, 0x47, 0xf0, 0x63, 0x19, 0xfc, 0x7a,
-    0xf8, 0x66, 0x02, 0xa2, 0x28, 0x9f, 0xc7, 0xaf, 0x86, 0x60, 0x2a, 0x23,
-    0x29, 0xff, 0xc7, 0x36, 0x3c, 0xf5, 0xf0, 0xcc, 0x05, 0x44, 0xcb, 0x3f,
-    0x8f, 0x5f, 0x0c, 0xc0, 0x54, 0x54, 0x93, 0xf8, 0xf5, 0xf0, 0xcc, 0x05,
-    0x45, 0x75, 0x3f, 0x8f, 0x5f, 0x0c, 0xc0, 0x54, 0x58, 0xb3, 0xff, 0x1b,
-    0x1e, 0x7a, 0xf8, 0x66, 0x02, 0xa2, 0x7a, 0x9f, 0xee, 0x0f, 0x8c, 0x5d,
-    0x44, 0xec, 0xb4, 0x1d, 0x11, 0x4c, 0x9b, 0x3f, 0x75, 0xaf, 0x5a, 0x2f,
-    0x2e, 0xb4, 0xf7, 0xcd, 0xab, 0x56, 0x9c, 0x15, 0xb4, 0xa7, 0x19, 0xae,
-    0xb4, 0xff, 0xfd, 0xb1, 0xcf, 0x65, 0xf6, 0x7b, 0xea, 0xfd, 0xf6, 0xcb,
-    0x4f, 0xff, 0xdf, 0x27, 0x6c, 0x31, 0xdb, 0xff, 0x27, 0x60, 0xf2, 0xc5,
-    0xa7, 0xc0, 0x5b, 0xf4, 0x65, 0xa7, 0xff, 0x65, 0xc6, 0xbb, 0x3e, 0xc8,
-    0x33, 0xeb, 0x4f, 0xb5, 0xb6, 0x30, 0x2d, 0x3f, 0xf8, 0x7a, 0x33, 0x0b,
-    0x1b, 0xa7, 0x4d, 0xf5, 0x2d, 0x36, 0x5a, 0xb4, 0xfe, 0xcb, 0xe6, 0xfc,
-    0x1b, 0x16, 0x81, 0x3c, 0x9f, 0x05, 0xa2, 0xc5, 0x45, 0x04, 0x37, 0xf5,
-    0xc3, 0x30, 0xec, 0xa0, 0x51, 0xf4, 0x4c, 0xed, 0x09, 0x99, 0xc3, 0x9a,
-    0x5a, 0x70, 0x95, 0xd6, 0x97, 0x0e, 0xf9, 0xb4, 0x61, 0xa9, 0xef, 0xba,
-    0xc3, 0x2d, 0x14, 0x79, 0xe4, 0x59, 0x3f, 0xe2, 0xde, 0x69, 0x9c, 0xb9,
-    0x19, 0x69, 0xf0, 0xfb, 0x2a, 0xba, 0xd3, 0xff, 0x57, 0x19, 0xdd, 0x06,
-    0xf3, 0xbb, 0xad, 0x04, 0x7d, 0x62, 0x4f, 0x38, 0xcd, 0xb5, 0xa7, 0x87,
-    0x9e, 0x9e, 0xd6, 0x9f, 0xaa, 0xfc, 0x60, 0xd8, 0xb4, 0x51, 0xf7, 0x60,
-    0xd8, 0x93, 0x4f, 0xbc, 0xf7, 0x7e, 0x59, 0x68, 0xa4, 0x72, 0x94, 0x23,
-    0xb6, 0x59, 0x3f, 0xff, 0xfb, 0x6c, 0x5f, 0xfb, 0x7a, 0xd1, 0x0f, 0x8f,
-    0xab, 0xf3, 0xe6, 0x7d, 0xeb, 0x4f, 0xac, 0xe7, 0xe5, 0xc2, 0xd3, 0xf7,
-    0x39, 0xfe, 0xfa, 0xa9, 0x69, 0xff, 0x09, 0x3f, 0x5b, 0xaf, 0x95, 0xd6,
-    0x9f, 0xf6, 0x57, 0x6c, 0x39, 0xcd, 0x7b, 0x5a, 0x1e, 0x7f, 0x5d, 0x9e,
-    0x4f, 0xec, 0xb6, 0xfa, 0xd5, 0x75, 0xd6, 0x9f, 0xfc, 0xd5, 0x6e, 0xb6,
-    0xda, 0x16, 0xee, 0xeb, 0x4e, 0xbe, 0xcc, 0xb4, 0x68, 0xf9, 0x7c, 0x49,
-    0x9f, 0xbc, 0xbe, 0xaf, 0x5a, 0x5a, 0x77, 0x1c, 0x70, 0x94, 0xff, 0xed,
-    0x16, 0xaf, 0xb2, 0xea, 0xf5, 0xf6, 0x7a, 0x47, 0x2f, 0xe0, 0x91, 0x55,
-    0xe2, 0x6c, 0x3d, 0x57, 0xf5, 0x3d, 0x11, 0x57, 0xe1, 0x56, 0x62, 0x31,
-    0x84, 0xe6, 0xa1, 0x9b, 0x3f, 0xd6, 0xbe, 0xf7, 0xae, 0x73, 0x4b, 0x4a,
-    0x96, 0x86, 0x3c, 0x9f, 0x67, 0x53, 0xee, 0x34, 0xd6, 0xf0, 0xb4, 0xe0,
-    0xe3, 0x6b, 0x4f, 0xe6, 0xcf, 0xef, 0x8c, 0xe5, 0x29, 0xb8, 0xe1, 0x28,
-    0xe4, 0xf2, 0xf8, 0x33, 0x9d, 0xa2, 0xeb, 0xa4, 0x73, 0x49, 0x3d, 0xe3,
-    0xfc, 0xd2, 0xd1, 0x73, 0xd3, 0xea, 0x2f, 0x9b, 0x8b, 0xad, 0x2a, 0x5a,
-    0x56, 0xd1, 0xa6, 0xd0, 0xbc, 0xff, 0xd7, 0xbf, 0x22, 0xdc, 0xed, 0xb5,
-    0x75, 0xa1, 0x8f, 0xb3, 0xc2, 0x79, 0xff, 0x68, 0xbf, 0x9d, 0xbb, 0x6a,
-    0xb6, 0xb4, 0xfe, 0xcf, 0xea, 0xe2, 0x5e, 0xd6, 0x87, 0xa2, 0x58, 0x88,
-    0xb1, 0x06, 0x75, 0x17, 0xd6, 0x9e, 0xcf, 0xb3, 0xd6, 0x8b, 0x0d, 0xd1,
-    0x86, 0xa7, 0xfc, 0xd6, 0xed, 0x8c, 0x1b, 0x27, 0x16, 0x8a, 0x3e, 0x0f,
-    0x91, 0x4f, 0xda, 0x6f, 0xf3, 0x42, 0xb4, 0xfe, 0xe7, 0x6c, 0x3c, 0x65,
-    0xab, 0x4f, 0xfc, 0x5c, 0xed, 0x81, 0xbb, 0xc1, 0xed, 0x69, 0xff, 0xff,
-    0x11, 0xb0, 0x6d, 0x79, 0xf8, 0xa2, 0x75, 0x43, 0x5c, 0xe3, 0xd7, 0x17,
-    0xac, 0x32, 0x63, 0x98, 0x59, 0x73, 0x4f, 0x10, 0xe7, 0xff, 0xab, 0x57,
-    0xa7, 0x36, 0xce, 0xab, 0x7b, 0x65, 0xa7, 0xff, 0xff, 0xc5, 0x56, 0xdc,
-    0xab, 0x8e, 0x95, 0x6b, 0xee, 0x5a, 0xb9, 0x5b, 0xcf, 0x3e, 0x58, 0xb4,
-    0xff, 0xf8, 0x87, 0x9e, 0x9e, 0xb4, 0x57, 0xc2, 0x1f, 0x1e, 0xb4, 0x0a,
-    0x66, 0x7a, 0x50, 0x75, 0x08, 0xb9, 0xb3, 0x95, 0xa7, 0xef, 0xe5, 0xf7,
-    0x8f, 0x5a, 0x56, 0xad, 0x31, 0x70, 0xb4, 0xde, 0xbb, 0x5a, 0x1c, 0x35,
-    0xfd, 0x8b, 0x4e, 0x7e, 0x72, 0xb4, 0xdc, 0x70, 0xb4, 0x3d, 0x1b, 0x34,
-    0x2c, 0x05, 0x84, 0x81, 0x72, 0x3e, 0x07, 0x27, 0x6b, 0xd7, 0x69, 0x1c,
-    0xf5, 0x67, 0xff, 0xff, 0x69, 0xb9, 0xdf, 0x99, 0xec, 0xd9, 0xcd, 0x50,
-    0xfb, 0xbd, 0xe8, 0x7b, 0x5a, 0x2d, 0x45, 0x61, 0x18, 0x4f, 0xf5, 0x6b,
-    0x6d, 0xfd, 0x50, 0x2d, 0x39, 0xbe, 0xe2, 0xd1, 0x4a, 0xa1, 0xb2, 0x50,
-    0x88, 0x91, 0xf5, 0x1b, 0x4e, 0xbe, 0x38, 0xb4, 0xf5, 0x6b, 0x1d, 0x96,
-    0x8b, 0x4d, 0xf8, 0x8e, 0x4f, 0xfd, 0x5f, 0xfd, 0x39, 0xba, 0xbe, 0x0a,
-    0xd3, 0xf8, 0x5b, 0xfe, 0x06, 0xd9, 0x69, 0xf1, 0x7b, 0xde, 0x3d, 0x69,
-    0xf8, 0x98, 0xd6, 0x57, 0x0b, 0x4d, 0xc7, 0x0b, 0x40, 0x1f, 0x6f, 0xca,
-    0x38, 0x2d, 0x9f, 0xea, 0x73, 0x1c, 0xcb, 0x5f, 0x74, 0x8e, 0x6b, 0xe7,
-    0xfa, 0xab, 0xba, 0x71, 0xad, 0xba, 0xd3, 0xff, 0xa8, 0x7b, 0xad, 0x95,
-    0xb7, 0xdf, 0x97, 0x5a, 0x7e, 0x1c, 0xef, 0x9a, 0x15, 0xa7, 0xe3, 0x17,
-    0x55, 0x7f, 0xda, 0xd3, 0xb8, 0xe3, 0x84, 0xa7, 0xfe, 0x6f, 0x8f, 0x99,
-    0xea, 0x9c, 0x63, 0x2c, 0x72, 0xfe, 0x3a, 0xea, 0x9a, 0xdc, 0x86, 0x68,
-    0xa5, 0x5c, 0xe7, 0x49, 0x7e, 0x16, 0x70, 0xa1, 0x3f, 0xfe, 0xce, 0x6a,
-    0x87, 0xdf, 0xa1, 0x61, 0xb0, 0xbe, 0xb4, 0xec, 0xfd, 0x8b, 0x90, 0x4a,
-    0x79, 0xf5, 0x6b, 0xd7, 0x20, 0x94, 0xeb, 0x97, 0x2b, 0x90, 0x4a, 0x6e,
-    0x38, 0x5c, 0x82, 0x50, 0x08, 0xa6, 0x70, 0xa7, 0x45, 0xfc, 0x14, 0xcd,
-    0x9a, 0x4c, 0x82, 0x43, 0x9b, 0xe9, 0xfa, 0xb7, 0x54, 0x3e, 0xd6, 0x9d,
-    0x83, 0xd9, 0x93, 0x99, 0x18, 0xce, 0xb4, 0x67, 0x3d, 0xd5, 0x59, 0xb5,
-    0xa5, 0x5d, 0x73, 0xea, 0xed, 0x1e, 0x7f, 0x38, 0xff, 0x2c, 0xd1, 0x58,
-    0x94, 0xfe, 0x27, 0xf9, 0x97, 0xd9, 0x2d, 0x27, 0xa5, 0x3b, 0x3f, 0x62,
-    0x50, 0x94, 0x31, 0xb6, 0x01, 0x03, 0x0e, 0x4f, 0x0b, 0x76, 0x09, 0x1c,
-    0xd6, 0x43, 0x23, 0x12, 0xa1, 0x29, 0x3d, 0xe6, 0x7d, 0xeb, 0x48, 0xcb,
-    0x4d, 0x4f, 0xe4, 0xd9, 0x38, 0x45, 0x3e, 0xe2, 0x9c, 0x23, 0x2d, 0x3f,
-    0x03, 0x38, 0xf6, 0xed, 0x29, 0x12, 0xd3, 0xfd, 0x67, 0x8f, 0xe7, 0x7e,
-    0x60, 0xad, 0x3f, 0x13, 0x1a, 0xca, 0xe1, 0x69, 0xf5, 0x58, 0x6a, 0x32,
-    0xd3, 0xae, 0x5f, 0x5a, 0x04, 0xf0, 0xb4, 0x4f, 0x3f, 0x0e, 0x77, 0xdf,
-    0x97, 0x5a, 0x7e, 0x2f, 0x7e, 0x98, 0xc7, 0xe5, 0x30, 0xaa, 0x0f, 0xf9,
-    0xe5, 0xdb, 0xf4, 0x43, 0x14, 0x9e, 0x81, 0x14, 0x0c, 0x66, 0xf3, 0xc3,
-    0x56, 0x78, 0xb4, 0x3d, 0x5e, 0x9d, 0x16, 0x6e, 0x1f, 0x62, 0xb1, 0x78,
-    0xff, 0xb4, 0x69, 0x3f, 0xfe, 0xb3, 0xff, 0xae, 0x70, 0xdb, 0xcd, 0x0b,
-    0x38, 0xb4, 0xff, 0xff, 0xef, 0x3f, 0xe3, 0x83, 0x9d, 0xde, 0xf5, 0xee,
-    0xbc, 0xfe, 0x72, 0xdb, 0x65, 0xa7, 0x71, 0xc7, 0x09, 0x4c, 0xf6, 0x48,
-    0xe5, 0xfc, 0x32, 0x62, 0xd6, 0x2b, 0x7e, 0x13, 0x93, 0xf5, 0x8e, 0x3f,
-    0xac, 0xfd, 0x8b, 0x4f, 0x6f, 0x2d, 0xe1, 0x69, 0xf5, 0x9f, 0x26, 0x32,
-    0xd3, 0xff, 0xcd, 0xeb, 0x42, 0xdd, 0xe6, 0xbb, 0xf4, 0x2f, 0x5a, 0x3a,
-    0xda, 0x34, 0xc8, 0xdb, 0x08, 0xf4, 0x4f, 0x3b, 0xd7, 0x2e, 0x2d, 0x39,
-    0xe4, 0x2b, 0x4f, 0xda, 0x67, 0x07, 0xcb, 0xad, 0x16, 0x1f, 0x43, 0xc8,
-    0x34, 0x35, 0x36, 0x5d, 0x69, 0xbc, 0x77, 0x16, 0x81, 0x36, 0x3e, 0x0a,
-    0xcd, 0x87, 0x77, 0x9b, 0xee, 0xa7, 0x76, 0x6d, 0xd6, 0xb1, 0x1b, 0x4a,
-    0x42, 0xb2, 0x1f, 0xaf, 0x20, 0xe6, 0x38, 0xda, 0x96, 0x63, 0xee, 0x17,
-    0x60, 0x47, 0x69, 0x51, 0x43, 0x79, 0xc8, 0xd3, 0x7f, 0x0c, 0x83, 0x46,
-    0x7b, 0xb9, 0x7e, 0xd9, 0x08, 0x51, 0x21, 0xbc, 0xaa, 0xdd, 0x4f, 0x23,
-    0xf9, 0x1b, 0xc7, 0x54, 0x61, 0x3e, 0xa1, 0x52, 0xec, 0xc3, 0x3f, 0xf8,
-    0xe6, 0xc7, 0x9e, 0xbe, 0x19, 0x80, 0xa8, 0xa2, 0xa7, 0xf1, 0xeb, 0xe1,
-    0x98, 0x0a, 0x8b, 0xa2, 0x7f, 0xe3, 0xe3, 0xcf, 0x5f, 0x0c, 0xc0, 0x54,
-    0x49, 0x73, 0xf8, 0xf5, 0xf0, 0xcc, 0x05, 0x45, 0xe5, 0x0c, 0xe9, 0x08,
-    0xac, 0x27, 0x79, 0xe5, 0x1e, 0x02, 0x9b, 0x87, 0x86, 0x3c, 0xdc, 0x31,
-    0x86, 0xbf, 0x0c, 0xbc, 0x79, 0xda, 0x53, 0xf0, 0xf1, 0xd2, 0x6c, 0xff,
-    0xe3, 0x9b, 0x1e, 0x7a, 0xf8, 0x66, 0x02, 0xa2, 0x59, 0x9b, 0xcd, 0xad,
-    0x3c, 0x19, 0x80, 0xa8, 0x8c, 0xe7, 0xe2, 0x63, 0x59, 0x5c, 0x2d, 0x30,
-    0xbd, 0x69, 0x19, 0x69, 0xf1, 0x7f, 0x78, 0x7f, 0x9e, 0x91, 0x8b, 0x7d,
-    0x0a, 0xcf, 0xd8, 0xf2, 0xfe, 0x7d, 0x69, 0xff, 0xae, 0x5e, 0x5e, 0x87,
-    0xc7, 0xd5, 0xd6, 0x9d, 0x76, 0xb5, 0x68, 0xfa, 0x6a, 0xa6, 0x7d, 0x14,
-    0xdb, 0x95, 0xe9, 0x12, 0x7f, 0xed, 0x17, 0xf3, 0xbe, 0x96, 0xbd, 0x8c,
-    0xb4, 0xf8, 0x59, 0xf7, 0xc5, 0xa0, 0x8f, 0xb1, 0xd2, 0x3c, 0xec, 0xf4,
-    0xf5, 0xa7, 0xff, 0xbc, 0xd5, 0xed, 0x7b, 0x0f, 0x77, 0xe9, 0xe0, 0xad,
-    0x39, 0xb4, 0xcb, 0x48, 0xb9, 0x3e, 0xf7, 0x4a, 0xb3, 0xfd, 0x96, 0xdc,
-    0x6b, 0xfc, 0xb2, 0xd3, 0xff, 0x51, 0xb4, 0x5c, 0x5d, 0xb7, 0x9d, 0x75,
-    0xa7, 0xfd, 0xb6, 0x2d, 0x93, 0x0b, 0x9e, 0x2d, 0x3f, 0xaa, 0xed, 0xab,
-    0xec, 0x96, 0x91, 0xdd, 0xe5, 0x7d, 0x15, 0x1b, 0x63, 0x90, 0xb6, 0xd9,
-    0x1e, 0x42, 0x33, 0xb2, 0xa1, 0x38, 0xba, 0x3f, 0x51, 0xec, 0xff, 0xe3,
-    0x9b, 0x1e, 0x7a, 0xf8, 0x66, 0x02, 0xa2, 0x69, 0x9f, 0xfc, 0x73, 0x63,
-    0xcf, 0x5f, 0x0c, 0xc0, 0x54, 0x4e, 0x33, 0xff, 0x8e, 0x6c, 0x79, 0xeb,
-    0xe1, 0x98, 0x0a, 0x8a, 0x06, 0x7d, 0xf0, 0xcc, 0x05, 0x45, 0xc1, 0x33,
-    0x12, 0xd3, 0xf8, 0x5e, 0xc5, 0xcd, 0x19, 0x69, 0x1e, 0x8f, 0xdb, 0x66,
-    0x3e, 0x0a, 0x4f, 0xe2, 0x3f, 0xa6, 0xee, 0xb8, 0x5a, 0x7f, 0x9e, 0x7a,
-    0xf8, 0x66, 0x02, 0xa2, 0x49, 0x91, 0xf6, 0x7e, 0xf8, 0x6b, 0x3e, 0xc3,
-    0xf3, 0xc7, 0x6b, 0x45, 0x8b, 0xe8, 0x8f, 0x9c, 0x3b, 0x08, 0x4e, 0xb8,
-    0xa7, 0xda, 0x9d, 0xe1, 0x93, 0xa8, 0x56, 0x3a, 0x27, 0x9f, 0xf7, 0xbc,
-    0x3d, 0x7c, 0x33, 0x01, 0x51, 0x6a, 0x4f, 0xfb, 0x1e, 0x7a, 0xf8, 0x66,
-    0x02, 0xa2, 0x55, 0x85, 0xa4, 0x7f, 0x68, 0x9a, 0x32, 0x4b, 0xb2, 0x3c,
-    0xfe, 0x3d, 0x7c, 0x33, 0x01, 0x51, 0x14, 0xcf, 0xe3, 0xd7, 0xc3, 0x30,
-    0x15, 0x11, 0xa4, 0xde, 0x6d, 0x69, 0xe0, 0xcc, 0x05, 0x45, 0x3f, 0x36,
-    0x99, 0x68, 0xf9, 0xe0, 0x68, 0xae, 0x7f, 0xef, 0x35, 0xff, 0x1c, 0xb8,
-    0x63, 0x97, 0x5a, 0x7f, 0xea, 0x73, 0xc1, 0xb2, 0xe1, 0x8e, 0x5d, 0x69,
-    0x1d, 0xde, 0x4c, 0x1e, 0x95, 0xc4, 0x8b, 0x49, 0x13, 0xff, 0x8e, 0x6c,
-    0x79, 0xeb, 0xe1, 0x98, 0x0a, 0x89, 0xaa, 0x7f, 0x1e, 0xbe, 0x19, 0x80,
-    0xa8, 0xae, 0xe7, 0x83, 0x30, 0x15, 0x15, 0xf4, 0xee, 0x38, 0xe1, 0x29,
-    0x0a, 0x47, 0x2f, 0xe3, 0xe7, 0xd0, 0x64, 0xa9, 0xcf, 0x6b, 0x56, 0x9c,
-    0xe5, 0x6d, 0x69, 0xff, 0x56, 0xf8, 0xcd, 0x5d, 0xaa, 0xc5, 0xa5, 0xa5,
-    0xa7, 0xf8, 0xbf, 0x56, 0x13, 0xeb, 0x95, 0xa3, 0xe7, 0x91, 0x82, 0x12,
-    0x3d, 0x26, 0x02, 0xe1, 0x16, 0x0e, 0x08, 0xe5, 0xe1, 0x0d, 0x3f, 0xf8,
-    0xe6, 0xc7, 0x9e, 0xbe, 0x19, 0x80, 0xa8, 0x9e, 0xe7, 0xf1, 0xeb, 0xe1,
-    0x98, 0x0a, 0x8b, 0x86, 0x7f, 0xe3, 0xe3, 0xcf, 0x5f, 0x0c, 0xc0, 0x54,
-    0x49, 0xf0, 0xcb, 0xa5, 0x36, 0x1d, 0xbc, 0xf3, 0xdc, 0x68, 0x60, 0x8e,
-    0xe2, 0x9f, 0xe3, 0xa5, 0xda, 0xa5, 0xd4, 0xdd, 0x1e, 0x4f, 0xe3, 0xd7,
-    0xc3, 0x30, 0x15, 0x11, 0x54, 0xfe, 0x3d, 0x7c, 0x33, 0x01, 0x51, 0x4c,
-    0xcf, 0xfe, 0x39, 0xb1, 0xe7, 0xaf, 0x86, 0x60, 0x2a, 0x26, 0x79, 0xff,
-    0xc7, 0x36, 0x3c, 0xf5, 0xf0, 0xcc, 0x05, 0x45, 0x1b, 0x16, 0x26, 0x3d,
-    0xc9, 0xe7, 0xb3, 0xcd, 0x29, 0xcf, 0xfc, 0x7c, 0x79, 0xeb, 0xe1, 0x98,
-    0x0a, 0x88, 0xea, 0x6f, 0x36, 0xb4, 0xfc, 0x54, 0x3c, 0xd5, 0x8b, 0x4f,
-    0xbe, 0x19, 0x80, 0xa8, 0xa6, 0xa7, 0xff, 0x6c, 0xb5, 0x7c, 0xb6, 0x9c,
-    0x6d, 0xdd, 0x69, 0xff, 0x9f, 0xb2, 0x1b, 0x2f, 0xe3, 0x7d, 0xc5, 0xa6,
-    0x6f, 0x6b, 0x4f, 0xc4, 0xc6, 0xb2, 0xb8, 0x5a, 0x7f, 0xfa, 0xb5, 0xba,
-    0x7f, 0xf0, 0x75, 0xbc, 0x7a, 0xd3, 0x37, 0x6b, 0x4f, 0xec, 0xb5, 0x80,
-    0x80, 0xff, 0x44, 0x80, 0x96, 0xfa, 0x4d, 0x8d, 0xa3, 0xfa, 0xf0, 0xa7,
-    0x91, 0xdd, 0xe5, 0x45, 0x5c, 0x8b, 0xd1, 0x60, 0x18, 0xda, 0x95, 0xa8,
-    0xd1, 0x27, 0xdf, 0x0c, 0xc0, 0x54, 0x55, 0x53, 0xfe, 0xc7, 0x9e, 0xbe,
-    0x19, 0x80, 0xa8, 0x9b, 0x64, 0x7a, 0x3f, 0x83, 0x18, 0xcf, 0xe3, 0xd7,
-    0xc3, 0x30, 0x15, 0x15, 0xfc, 0xfe, 0x3d, 0x7c, 0x33, 0x01, 0x51, 0x63,
-    0x4f, 0xbe, 0x19, 0x80, 0xa8, 0xb5, 0x67, 0xfd, 0x8f, 0x3d, 0x7c, 0x33,
-    0x01, 0x51, 0x41, 0x48, 0xf4, 0x7f, 0x06, 0x31, 0x9f, 0x7c, 0x33, 0x01,
-    0x51, 0x71, 0x4f, 0x63, 0xb1, 0x58, 0xb4, 0xf3, 0xb3, 0xb1, 0x02, 0xd3,
-    0xf9, 0x8d, 0x8e, 0x9b, 0xee, 0xcb, 0x48, 0xf4, 0x8b, 0x1d, 0x98, 0xe1,
-    0x26, 0x89, 0xa7, 0xdf, 0x0c, 0xc0, 0x54, 0x5d, 0x33, 0xe6, 0x1c, 0xe5,
-    0x96, 0x91, 0xe8, 0xf5, 0x88, 0xc6, 0x7f, 0xfe, 0x31, 0xe9, 0xed, 0xfe,
-    0xfa, 0x5f, 0x6c, 0x6c, 0x15, 0xa7, 0xff, 0xed, 0x8f, 0x99, 0xd7, 0xa7,
-    0xee, 0xbd, 0xd7, 0x2e, 0x78, 0xb4, 0xc1, 0x4b, 0x43, 0x1f, 0xbf, 0xb6,
-    0x39, 0xff, 0x3e, 0xbf, 0xfc, 0x7d, 0x95, 0xc2, 0xd3, 0x87, 0x0f, 0xf3,
-    0xe2, 0xd1, 0x1c, 0xff, 0xbe, 0xd6, 0xef, 0x2f, 0xa6, 0xe1, 0x69, 0xbc,
-    0xda, 0xd3, 0xe1, 0xad, 0xe6, 0x96, 0x9f, 0x9f, 0x94, 0xe9, 0xb9, 0x5a,
-    0x1d, 0xf3, 0xd3, 0xeb, 0x51, 0x2c, 0xfd, 0xde, 0x38, 0xf2, 0xd2, 0xd3,
-    0xff, 0xfc, 0xdc, 0xee, 0xad, 0xd0, 0xe6, 0xfb, 0xcb, 0xdf, 0x3e, 0x0b,
-    0x4f, 0xea, 0xaa, 0xf7, 0xef, 0x1e, 0xb4, 0x7b, 0x44, 0xd6, 0x99, 0xa7,
-    0xff, 0xfb, 0x6c, 0x3e, 0x5f, 0x65, 0x7d, 0x6e, 0xb9, 0x2b, 0xd0, 0xad,
-    0x3c, 0x19, 0x80, 0xa8, 0x93, 0x27, 0xc1, 0xd6, 0x9d, 0x67, 0x5b, 0x77,
-    0xd6, 0x9f, 0xd5, 0x6e, 0xb5, 0x8f, 0xba, 0xd0, 0xc7, 0xe3, 0xf3, 0xe8,
-    0x7a, 0x64, 0x5f, 0x65, 0x34, 0x27, 0x27, 0xee, 0x7b, 0x77, 0xef, 0xdf,
-    0x52, 0xd3, 0xff, 0xb6, 0x5a, 0xb4, 0x0b, 0xf7, 0x71, 0xb1, 0x69, 0xf5,
-    0x68, 0x8d, 0x8b, 0x4f, 0xf3, 0x6f, 0x45, 0x61, 0x98, 0x16, 0x9f, 0xff,
-    0x60, 0x7d, 0xb6, 0x35, 0xaa, 0x3f, 0x1c, 0x70, 0x94, 0x3d, 0x16, 0x37,
-    0x25, 0xd1, 0xbc, 0xfc, 0x01, 0xe0, 0x0b, 0x2d, 0x3f, 0xfb, 0xc1, 0xcd,
-    0x37, 0xef, 0xb6, 0x1d, 0x2d, 0x3b, 0x8e, 0x38, 0x4a, 0x7e, 0xfe, 0x58,
-    0x62, 0xba, 0x47, 0x2f, 0xe7, 0xd4, 0x6f, 0xd7, 0x5d, 0x69, 0xf1, 0x6a,
-    0xca, 0xe1, 0x69, 0xfe, 0x60, 0xd8, 0xf9, 0xa6, 0xba, 0xd3, 0xff, 0xed,
-    0x6e, 0x9f, 0xd0, 0x36, 0x5a, 0xb4, 0x0b, 0xeb, 0x47, 0xd1, 0x6a, 0x62,
-    0x81, 0x37, 0x9f, 0xea, 0xce, 0xfa, 0x57, 0x38, 0xf5, 0xa7, 0xff, 0x65,
-    0x9b, 0x26, 0x1a, 0x70, 0xbe, 0x4b, 0x45, 0x22, 0xc3, 0x45, 0xfc, 0x1d,
-    0x4f, 0x86, 0xb7, 0x9a, 0x5a, 0x7f, 0xcf, 0x61, 0xb3, 0xd7, 0xc7, 0xc7,
-    0xad, 0x1d, 0x73, 0xe6, 0x70, 0x96, 0x7b, 0x56, 0x57, 0x2b, 0x4f, 0xf1,
-    0x7b, 0xf5, 0xfe, 0xcc, 0x57, 0x5a, 0x1c, 0x3e, 0x0e, 0xa2, 0x39, 0xdc,
-    0x71, 0xc2, 0xd3, 0xff, 0xea, 0x36, 0x85, 0xbb, 0xae, 0x6f, 0x46, 0x60,
-    0x48, 0xe5, 0xfc, 0x52, 0x65, 0xc5, 0x08, 0x7d, 0xa2, 0xc8, 0x96, 0x9f,
-    0xb6, 0xdd, 0x00, 0xac, 0x5a, 0x7e, 0xfe, 0x7c, 0x59, 0xeb, 0x43, 0xbb,
-    0x3e, 0x8e, 0x43, 0xfe, 0x5d, 0x33, 0xce, 0xef, 0x32, 0x4c, 0xfa, 0xc6,
-    0xa6, 0x2f, 0x7c, 0x32, 0x2a, 0x34, 0x7f, 0x66, 0xc0, 0x73, 0x6c, 0x3e,
-    0x88, 0xc1, 0xc2, 0xac, 0x67, 0x13, 0xcb, 0xc7, 0x1f, 0xa8, 0xf1, 0x3d,
-    0x42, 0x72, 0x7f, 0xf7, 0xeb, 0x8e, 0x77, 0x4e, 0x0d, 0x7d, 0xeb, 0x4e,
-    0xfd, 0x75, 0xd6, 0x95, 0x7c, 0xfa, 0x8c, 0x97, 0x3f, 0xf5, 0x6c, 0x5a,
-    0xcf, 0x5b, 0xde, 0x75, 0xd6, 0x9f, 0xb0, 0x0f, 0xc7, 0x1c, 0x2d, 0x23,
-    0xd3, 0x33, 0xa4, 0x23, 0x35, 0xf9, 0x96, 0x52, 0x5c, 0x86, 0x37, 0x1b,
-    0x93, 0xba, 0x49, 0x87, 0xb6, 0x6d, 0xfc, 0xca, 0x77, 0xb6, 0x1c, 0x5f,
-    0x27, 0x31, 0xe7, 0x70, 0xb4, 0xbc, 0x36, 0x35, 0x09, 0x7f, 0x29, 0xa1,
-    0xf3, 0xf8, 0xf5, 0xf0, 0xcc, 0x05, 0x44, 0x6b, 0x3e, 0xf8, 0x66, 0x02,
-    0xa2, 0xa5, 0x9b, 0x01, 0x51, 0x0d, 0x48, 0xf4, 0x7a, 0x58, 0x63, 0x3f,
-    0xf1, 0xf1, 0xe7, 0xaf, 0x86, 0x60, 0x2a, 0x23, 0xe9, 0xf7, 0xc3, 0x30,
-    0x15, 0x16, 0x3c, 0xff, 0x0e, 0x7b, 0xd9, 0x30, 0xd8, 0xb4, 0x8f, 0x47,
-    0xd2, 0xe1, 0x8c, 0xee, 0xb4, 0x37, 0xb5, 0xa7, 0xe7, 0x7c, 0x6b, 0x79,
-    0xa5, 0xa7, 0xf8, 0x73, 0xbb, 0xe6, 0xb5, 0x8b, 0x4f, 0x76, 0x62, 0xfa,
-    0xd3, 0xff, 0xfc, 0xdf, 0x1a, 0xe6, 0xb7, 0xb2, 0x0d, 0x96, 0xaf, 0x96,
-    0xad, 0x04, 0x88, 0x6d, 0x91, 0x4e, 0xcc, 0x05, 0x45, 0xa1, 0x3f, 0xec,
-    0xe1, 0xd8, 0x33, 0xf6, 0x57, 0x0b, 0x40, 0x1f, 0x47, 0xc9, 0xa7, 0xff,
-    0xff, 0x8b, 0xfb, 0xc1, 0x26, 0xd1, 0x6d, 0xaf, 0xba, 0xbf, 0xe8, 0x2b,
-    0x4b, 0x47, 0xd1, 0x31, 0xb2, 0x19, 0xf9, 0xd7, 0xad, 0x0b, 0x76, 0xb4,
-    0xf9, 0xb5, 0x5b, 0x65, 0xa7, 0xff, 0xab, 0x57, 0xa7, 0x36, 0xce, 0xab,
-    0x7b, 0x65, 0xa2, 0xc3, 0xf5, 0x12, 0x58, 0x64, 0x64, 0x54, 0x29, 0xa7,
-    0xfd, 0xdb, 0x06, 0xc9, 0xcc, 0xcb, 0x16, 0x9f, 0xe2, 0xf0, 0x5f, 0xf6,
-    0xae, 0x56, 0x9f, 0xff, 0xed, 0xd3, 0xc3, 0x65, 0xb6, 0xaf, 0xbf, 0x42,
-    0xc6, 0xba, 0xd2, 0xab, 0xa2, 0x6f, 0x47, 0x13, 0xed, 0x6f, 0x07, 0xda,
-    0xd3, 0xfc, 0x3e, 0x59, 0xce, 0xe8, 0x59, 0x69, 0x86, 0xa8, 0xf8, 0x40,
-    0xa2, 0x7f, 0x56, 0xdc, 0x2d, 0x91, 0x96, 0x9f, 0xcf, 0xaf, 0xdc, 0x5a,
-    0xc5, 0xa7, 0x56, 0xf1, 0x69, 0xf3, 0x9c, 0xf9, 0xe0, 0xad, 0x1c, 0x9e,
-    0x2e, 0x0d, 0x4f, 0xf5, 0x57, 0x14, 0x01, 0x5c, 0x2d, 0x14, 0x98, 0x0d,
-    0xa6, 0x58, 0xef, 0x72, 0x29, 0xea, 0xde, 0x69, 0x69, 0xf8, 0x87, 0xc7,
-    0xd5, 0xd6, 0x9f, 0xff, 0xe2, 0x1f, 0x1f, 0x57, 0xe9, 0x5a, 0x6b, 0x7b,
-    0xcd, 0xec, 0x96, 0x8f, 0x68, 0x94, 0xd1, 0x64, 0x8e, 0xef, 0x2f, 0x74,
-    0x75, 0x84, 0xac, 0x61, 0xcc, 0x2f, 0x6a, 0x32, 0x2d, 0xc3, 0xaf, 0xb2,
-    0x61, 0x86, 0xcd, 0xe1, 0x13, 0xa8, 0xca, 0xfa, 0x8f, 0x7d, 0x42, 0xd2,
-    0x7e, 0x76, 0x2e, 0x45, 0x9c, 0x5a, 0x7a, 0xb7, 0x9a, 0x5a, 0x4e, 0xfd,
-    0x1e, 0x80, 0x98, 0x4f, 0xbe, 0x19, 0x80, 0xa8, 0xb5, 0xa7, 0xfd, 0x8f,
-    0x3d, 0x7c, 0x33, 0x01, 0x51, 0x41, 0xc8, 0xfd, 0x62, 0x28, 0xe8, 0xac,
-    0xc6, 0x33, 0xff, 0x8e, 0x6c, 0x79, 0xeb, 0xe1, 0x98, 0x0a, 0x8a, 0x2e,
-    0x7f, 0x1e, 0xbe, 0x19, 0x80, 0xa8, 0xba, 0xa1, 0xec, 0xb1, 0x70, 0x84,
-    0x71, 0x13, 0x1a, 0x16, 0xdb, 0x9f, 0x10, 0xee, 0x3d, 0x4b, 0x9d, 0x69,
-    0x4e, 0x7d, 0xf0, 0xcc, 0x05, 0x44, 0x43, 0x3b, 0x75, 0xca, 0xd2, 0x3d,
-    0x1e, 0x6d, 0xa6, 0x33, 0xf8, 0xf5, 0xf0, 0xcc, 0x05, 0x44, 0x6d, 0x3f,
-    0x8f, 0x5f, 0x0c, 0xc0, 0x54, 0x53, 0x73, 0xf8, 0xf5, 0xf0, 0xcc, 0x05,
-    0x45, 0x41, 0x3f, 0x8f, 0x5f, 0x0c, 0xc0, 0x54, 0x54, 0xd3, 0xef, 0x86,
-    0x60, 0x2a, 0x2b, 0x09, 0xf1, 0x71, 0xcf, 0x9f, 0x5a, 0x7f, 0x9e, 0x7a,
-    0xf8, 0x66, 0x02, 0xa2, 0x3f, 0x9d, 0x4d, 0x62, 0xd2, 0x3d, 0x22, 0xe0,
-    0x0c, 0x70, 0xa8, 0x50, 0xa7, 0xff, 0x1c, 0xd8, 0xf3, 0xd7, 0xc3, 0x30,
-    0x15, 0x13, 0x7c, 0xff, 0xc6, 0xc7, 0x9e, 0xbe, 0x19, 0x80, 0xa8, 0x9f,
-    0xa7, 0xdd, 0x6d, 0xdf, 0xea, 0xab, 0x56, 0x96, 0xd6, 0x87, 0x74, 0x78,
-    0xde, 0x1b, 0x4f, 0xf7, 0x5a, 0xdb, 0xcd, 0x6b, 0x33, 0x85, 0xa7, 0xdd,
-    0x3d, 0xff, 0x01, 0x69, 0xf7, 0x58, 0xee, 0xfb, 0xf6, 0xcb, 0x4f, 0xff,
-    0x33, 0x33, 0x33, 0x33, 0x33, 0x5b, 0x75, 0xa7, 0xdf, 0x2b, 0x30, 0xc9,
-    0x4d, 0xc7, 0x09, 0x45, 0x1b, 0xfe, 0x09, 0xe5, 0xe2, 0x47, 0x34, 0x30,
-    0xc8, 0xca, 0xbc, 0x2a, 0x67, 0xff, 0xea, 0x35, 0xf5, 0xfc, 0xb3, 0x9d,
-    0xb5, 0xf5, 0xe6, 0xd6, 0x9f, 0x60, 0x6c, 0xbe, 0xb4, 0xff, 0xff, 0xe1,
-    0xcf, 0x65, 0xf6, 0x7f, 0x4d, 0x91, 0xb9, 0x6e, 0x9d, 0x5e, 0x6c, 0xbe,
-    0xb4, 0xf6, 0x3c, 0xad, 0x5a, 0x39, 0x4c, 0x93, 0xeb, 0xdb, 0x25, 0x18,
-    0x40, 0x4f, 0xff, 0x9d, 0x9a, 0xd7, 0xe0, 0xf7, 0xd3, 0xb2, 0xf9, 0x7b,
-    0x5a, 0x7a, 0xc3, 0x13, 0xd6, 0x9f, 0x5c, 0x7c, 0xc7, 0xad, 0x3f, 0xb6,
-    0xc6, 0x3f, 0x7d, 0xb2, 0xd2, 0xfb, 0x1f, 0xed, 0x11, 0x11, 0x3c, 0xff,
-    0x9a, 0xde, 0x7d, 0x37, 0x5f, 0x7e, 0x5d, 0x69, 0x75, 0xd6, 0x9a, 0xf4,
-    0xb4, 0x11, 0xa9, 0xec, 0x52, 0x7f, 0xee, 0x5b, 0x59, 0x7a, 0xde, 0xc8,
-    0xcb, 0x4e, 0xd1, 0x38, 0xb4, 0x31, 0xef, 0xdd, 0x0e, 0x19, 0x5d, 0x59,
-    0x46, 0x96, 0xe2, 0x1f, 0xe1, 0xb4, 0x63, 0x21, 0x70, 0xd4, 0x20, 0x27,
-    0x39, 0xe8, 0xcb, 0x4f, 0xf5, 0x6a, 0xf5, 0xad, 0xd7, 0x6b, 0x46, 0x1e,
-    0xb8, 0x8f, 0xcd, 0x82, 0xb4, 0x7c, 0xda, 0x18, 0x82, 0x77, 0x1c, 0x70,
-    0xb4, 0xf5, 0x82, 0x4c, 0x91, 0xcb, 0xf9, 0xad, 0x7a, 0xd3, 0xfb, 0xdb,
-    0x6a, 0xfb, 0xcf, 0x16, 0x98, 0x81, 0x69, 0x5a, 0xc7, 0xc1, 0xec, 0x5f,
-    0x46, 0xb0, 0xc9, 0x83, 0x6d, 0x03, 0xc8, 0x47, 0xcf, 0xfd, 0x67, 0x9d,
-    0xd0, 0xf8, 0xe3, 0x6b, 0x16, 0x9f, 0xf9, 0xb7, 0xeb, 0x9d, 0x15, 0x38,
-    0xc6, 0x5a, 0x79, 0xb5, 0x70, 0x54, 0x41, 0xd3, 0xf6, 0x6d, 0xba, 0xfe,
-    0x3d, 0x68, 0xfa, 0x3a, 0xcc, 0x8f, 0xa4, 0x67, 0x45, 0xb3, 0x7f, 0x95,
-    0xa6, 0xe3, 0x85, 0xa1, 0xe6, 0xbf, 0x81, 0x79, 0xeb, 0xb1, 0x3a, 0x48,
-    0xe6, 0x8a, 0x7d, 0x7f, 0x5c, 0xf7, 0x75, 0xa0, 0x8f, 0x7b, 0xd1, 0x94,
-    0xee, 0x38, 0xe1, 0x28, 0x48, 0xe5, 0xfc, 0xf1, 0x70, 0x4e, 0x25, 0x00,
-    0x6e, 0xc8, 0x66, 0x09, 0x38, 0xad, 0xc3, 0xb8, 0x5f, 0x67, 0x09, 0x5d,
-    0x69, 0xee, 0x70, 0x7b, 0x5a, 0x7f, 0xe6, 0x1e, 0xc5, 0xad, 0x71, 0x87,
-    0xb5, 0xa0, 0x91, 0x01, 0xd8, 0xd5, 0xc8, 0xa7, 0xcd, 0x5f, 0xd9, 0x2d,
-    0x3d, 0xcd, 0x1b, 0xae, 0xb4, 0x38, 0x79, 0x6e, 0x89, 0x67, 0xed, 0x53,
-    0x82, 0xc6, 0x5c, 0x40, 0x53, 0xec, 0x1e, 0x76, 0xca, 0x88, 0x08, 0xe6,
-    0xe6, 0x7e, 0xfb, 0x3f, 0x2d, 0xe1, 0x69, 0xfe, 0x6f, 0xd9, 0xd2, 0x9c,
-    0x23, 0x2d, 0x3c, 0x66, 0xa3, 0x2d, 0x3f, 0xac, 0xb6, 0xed, 0xce, 0x89,
-    0x69, 0xc5, 0x6d, 0xd6, 0x93, 0x61, 0xe8, 0xf6, 0x6b, 0x3f, 0xbe, 0xe5,
-    0xc8, 0x74, 0x4b, 0x4f, 0x5b, 0xdf, 0xd9, 0x29, 0xb8, 0xe1, 0x28, 0x63,
-    0x77, 0xc1, 0x1c, 0xfd, 0x9f, 0x7b, 0xc4, 0x92, 0x39, 0xa1, 0x86, 0x55,
-    0xcd, 0x4f, 0x64, 0xbd, 0xf4, 0x3d, 0x97, 0x61, 0xd8, 0xb8, 0xe8, 0x9f,
-    0xc8, 0x47, 0x4f, 0xbc, 0xd7, 0x99, 0xe9, 0x51, 0x03, 0xcf, 0xfb, 0x7e,
-    0x58, 0xdd, 0x1b, 0x4d, 0xca, 0xd3, 0xb3, 0xf6, 0x2d, 0x37, 0x1c, 0x2d,
-    0x3f, 0xbe, 0x54, 0xeb, 0xd3, 0xce, 0x06, 0xd3, 0x81, 0xc8, 0xe5, 0x18,
-    0x7f, 0x76, 0x9f, 0xf8, 0x6b, 0xde, 0xf1, 0xfe, 0xb2, 0xd6, 0x5a, 0x18,
-    0xfa, 0xa8, 0x92, 0x7f, 0xf5, 0x18, 0xd8, 0xfa, 0xf8, 0x66, 0x02, 0xa2,
-    0x18, 0x8d, 0x9f, 0x90, 0x90, 0x4f, 0xbe, 0x19, 0x80, 0xa8, 0x82, 0xa7,
-    0x6d, 0x8c, 0xb4, 0x51, 0xe6, 0x11, 0x8c, 0xf6, 0xae, 0xdd, 0xa5, 0x3b,
-    0x3f, 0x62, 0x53, 0xde, 0x0e, 0x7b, 0x4a, 0x7f, 0x15, 0x95, 0xab, 0xb7,
-    0x69, 0x42, 0x53, 0xf5, 0x03, 0x6d, 0x8c, 0x94, 0xdc, 0x70, 0x94, 0xfc,
-    0x2c, 0x36, 0x17, 0xd2, 0x8a, 0x4c, 0x2c, 0x08, 0x8c, 0x39, 0xb2, 0x3e,
-    0xcc, 0xc4, 0x2b, 0x82, 0xaf, 0x43, 0x13, 0x17, 0xd2, 0x39, 0xf9, 0xcb,
-    0x1e, 0x9e, 0x26, 0xe3, 0x9e, 0x9f, 0xf3, 0x3f, 0x06, 0xaf, 0xf6, 0xba,
-    0xd3, 0xfd, 0xad, 0xb3, 0xae, 0x5b, 0xb6, 0x5a, 0x7f, 0x9a, 0xd7, 0xf5,
-    0x30, 0x51, 0x96, 0x86, 0x3f, 0x5d, 0x9d, 0xcf, 0xff, 0xce, 0x66, 0x3f,
-    0x37, 0xd2, 0xac, 0xf3, 0x5e, 0x67, 0xa5, 0x45, 0xf7, 0x3e, 0x2d, 0x0d,
-    0x3d, 0x69, 0xff, 0x09, 0x3f, 0x5b, 0xaf, 0x95, 0xd6, 0x9f, 0xda, 0xef,
-    0xd0, 0xbf, 0x74, 0xb8, 0x80, 0x67, 0x67, 0xde, 0xb8, 0x80, 0x62, 0x8f,
-    0xab, 0xc4, 0x29, 0xb1, 0xeb, 0x88, 0x06, 0x7b, 0x06, 0xd7, 0xae, 0x20,
-    0x19, 0xfc, 0x41, 0xba, 0xef, 0xb6, 0x5c, 0x40, 0x33, 0x88, 0x79, 0x5c,
-    0x40, 0x31, 0xca, 0x2d, 0xcc, 0x45, 0xb2, 0xe7, 0x47, 0xf3, 0xbe, 0xda,
-    0x5c, 0x40, 0x30, 0xb8, 0x80, 0x66, 0x63, 0x2e, 0x20, 0x18, 0xe4, 0xdc,
-    0x90, 0xbc, 0xf1, 0x1b, 0x96, 0x5c, 0x40, 0x33, 0xb5, 0x80, 0xb8, 0x80,
-    0x67, 0xfc, 0x38, 0xf3, 0xec, 0x83, 0x3e, 0xb8, 0x80, 0x66, 0xce, 0x57,
-    0x10, 0x0c, 0xfe, 0x1c, 0xe2, 0xf7, 0x6e, 0xd7, 0x10, 0x0c, 0xf8, 0xbd,
-    0xe0, 0xf6, 0xb8, 0x80, 0x66, 0x2b, 0xae, 0x20, 0x18, 0xf9, 0xeb, 0xe8,
-    0xd6, 0x7d, 0xa1, 0x6b, 0x5e, 0xa8, 0x80, 0x66, 0xed, 0x97, 0x10, 0x09,
-    0xcd, 0xa4, 0xf8, 0x98, 0xd9, 0xca, 0xe2, 0x01, 0x9e, 0xf3, 0x04, 0x17,
-    0x10, 0x0c, 0xe6, 0xf8, 0x2e, 0x20, 0x19, 0xff, 0x55, 0xb7, 0xe5, 0xa8,
-    0x7b, 0xba, 0xe2, 0x01, 0x9f, 0x79, 0x8f, 0x7b, 0x2e, 0x20, 0x18, 0xa4,
-    0x40, 0x6d, 0x32, 0x6f, 0xf6, 0xb8, 0x80, 0x61, 0xea, 0xa4, 0x39, 0x23,
-    0xa8, 0x4b, 0x92, 0xb6, 0xcc, 0xfb, 0x33, 0xb9, 0x6e, 0xa1, 0x4f, 0xe1,
-    0x14, 0xfa, 0xb5, 0x7c, 0xb5, 0x71, 0x00, 0xcf, 0xee, 0x58, 0x1c, 0xfb,
-    0x69, 0x71, 0x00, 0xf2, 0x6d, 0x27, 0x7d, 0xb8, 0x5c, 0x40, 0x30, 0x07,
-    0xf5, 0xf5, 0x19, 0xe2, 0x17, 0xdd, 0x71, 0x00, 0xcf, 0xd8, 0xe3, 0xea,
-    0xd7, 0xae, 0x20, 0x18, 0xa4, 0x44, 0xf6, 0x43, 0xe1, 0x6c, 0xff, 0x6d,
-    0xae, 0x7b, 0xf9, 0xfe, 0xd7, 0x10, 0x0c, 0x89, 0x71, 0x00, 0xcd, 0x96,
-    0x72, 0x7c, 0x9b, 0x48, 0x9b, 0xfd, 0xae, 0x20, 0x19, 0xf6, 0x6a, 0xe5,
-    0x6a, 0xe2, 0x01, 0x9f, 0x88, 0x7c, 0x7d, 0x5d, 0x71, 0x00, 0xc3, 0x22,
-    0x44, 0x49, 0x34, 0x69, 0x1c, 0xb2, 0x03, 0x6a, 0x1b, 0x2e, 0x20, 0x7d,
-    0x87, 0x64, 0x38, 0x5d, 0xd9, 0x3d, 0xe5, 0x6c, 0x6a, 0x3c, 0x2e, 0xa8,
-    0x4a, 0xfa, 0x86, 0x04, 0xec, 0xc0, 0x54, 0x40, 0x27, 0x45, 0xf4, 0xf7,
-    0xb7, 0x77, 0xc9, 0x96, 0x9f, 0xf9, 0xe3, 0x41, 0xb2, 0xef, 0xbf, 0x1c,
-    0x5a, 0x6e, 0xd9, 0x29, 0x7b, 0x4a, 0x76, 0xda, 0xc5, 0xa6, 0xe3, 0x84,
-    0xa0, 0x8f, 0x73, 0xae, 0x2c, 0xe0, 0x97, 0x03, 0x93, 0x8c, 0x57, 0x48,
-    0xe7, 0x83, 0x16, 0x32, 0xc2, 0x1e, 0x4a, 0x14, 0x97, 0x12, 0x38, 0xc2,
-    0xbe, 0xe1, 0xc7, 0x3f, 0x8b, 0x5e, 0x9d, 0x3a, 0x6b, 0xad, 0x3f, 0x7d,
-    0xc7, 0xb7, 0xec, 0x5a, 0x7f, 0xcf, 0xbf, 0x41, 0xa3, 0x37, 0xfd, 0xad,
-    0x3f, 0xf7, 0xf7, 0x94, 0xf6, 0xff, 0x7e, 0x8c, 0xb4, 0xfd, 0xeb, 0x8f,
-    0x95, 0x6d, 0x29, 0xe7, 0x37, 0x8e, 0x2d, 0x3e, 0xa7, 0x1e, 0xd6, 0xad,
-    0x3d, 0x42, 0xcf, 0x4a, 0x3e, 0x7d, 0x42, 0x46, 0xec, 0x51, 0x0c, 0x9c,
-    0x05, 0x17, 0x92, 0x0e, 0xd1, 0xb2, 0x13, 0x33, 0xc4, 0x3a, 0xba, 0xd3,
-    0xbc, 0x77, 0x2e, 0xb4, 0xff, 0xdd, 0x9a, 0x83, 0x65, 0xce, 0xfc, 0xf6,
-    0xb4, 0xfe, 0xe5, 0xad, 0xbd, 0x5b, 0xa5, 0xa7, 0xf9, 0xb4, 0x40, 0x5c,
-    0xb6, 0x96, 0x9b, 0x57, 0xa3, 0xeb, 0xf9, 0xac, 0xfe, 0x7d, 0x5f, 0xd5,
-    0xf5, 0x4b, 0x43, 0x26, 0x6c, 0x44, 0x59, 0x0b, 0x3f, 0x0b, 0x67, 0xd8,
-    0xeb, 0x9e, 0x59, 0x69, 0xaf, 0x75, 0xa7, 0x71, 0xc7, 0x0b, 0x4d, 0xde,
-    0x24, 0x72, 0xfe, 0x3e, 0x7b, 0x57, 0x35, 0x9f, 0xf5, 0x5c, 0x73, 0xdb,
-    0x82, 0x4e, 0x2d, 0x3b, 0x3b, 0xa4, 0xa1, 0xe9, 0x80, 0x1a, 0x10, 0x9b,
-    0x22, 0xea, 0x3f, 0x9f, 0xda, 0x1a, 0xb7, 0xbf, 0x4f, 0x5a, 0x7f, 0x86,
-    0x9d, 0x51, 0xf8, 0xe3, 0x84, 0xa7, 0x1b, 0x34, 0xb4, 0x6c, 0xf5, 0xdd,
-    0x1e, 0x4f, 0xa9, 0xc7, 0xb3, 0xd6, 0x86, 0x4c, 0x78, 0x91, 0xb2, 0x11,
-    0xba, 0x24, 0x9f, 0x9d, 0xc2, 0xfb, 0x7c, 0x56, 0x9f, 0xfd, 0x5c, 0xe1,
-    0xaa, 0xd7, 0xd7, 0x75, 0xca, 0xd3, 0x6f, 0x16, 0x99, 0xcb, 0xad, 0x3e,
-    0xa7, 0x44, 0x3c, 0xd1, 0xac, 0xf4, 0x2b, 0x1d, 0x11, 0x6e, 0x77, 0x79,
-    0xee, 0x6b, 0x78, 0xb4, 0xff, 0xcd, 0x42, 0xfd, 0xd0, 0x8b, 0x70, 0xb4,
-    0x8b, 0xe8, 0x86, 0x12, 0x5d, 0x10, 0xc5, 0x8d, 0xc4, 0x03, 0xe3, 0xd7,
-    0xe6, 0x51, 0x8f, 0xb2, 0xf0, 0x85, 0x81, 0x10, 0xfe, 0x96, 0xec, 0x66,
-    0x8d, 0xc7, 0x71, 0xda, 0x60, 0xc6, 0xad, 0xa9, 0x4b, 0xfe, 0x20, 0x3a,
-    0x8d, 0xb6, 0x7f, 0xab, 0xe2, 0xda, 0x7d, 0x6d, 0x69, 0xf8, 0x7b, 0xae,
-    0x71, 0xeb, 0x4f, 0xb1, 0xfd, 0x39, 0x25, 0xa7, 0xde, 0x9c, 0x7b, 0x75,
-    0xd2, 0x86, 0x45, 0xd5, 0x1b, 0x6c, 0xb7, 0xd1, 0x4c, 0xff, 0xde, 0xc7,
-    0xcc, 0xf5, 0x57, 0x26, 0x15, 0xa7, 0x75, 0x17, 0x2b, 0x47, 0xcf, 0x90,
-    0xc8, 0xb2, 0xf4, 0xa8, 0x81, 0x65, 0xa5, 0x50, 0x29, 0x22, 0xd1, 0xbc,
-    0xe0, 0x7e, 0x7f, 0xc5, 0xd5, 0xb2, 0xf4, 0x7e, 0xfb, 0x64, 0xa7, 0xff,
-    0xf6, 0xdb, 0xfd, 0xd3, 0xa2, 0xbd, 0xe8, 0x43, 0x07, 0xb5, 0xa7, 0xfe,
-    0xbe, 0x5b, 0xd0, 0xcd, 0x43, 0xae, 0xa5, 0xa3, 0x68, 0xa8, 0xd3, 0x04,
-    0x32, 0x61, 0xe5, 0x0e, 0xc9, 0xff, 0xfe, 0xfd, 0x94, 0x4e, 0x66, 0x3e,
-    0xec, 0x6e, 0x76, 0xc2, 0x0b, 0x4e, 0xb0, 0x5e, 0xb4, 0x32, 0xa3, 0xc3,
-    0x2f, 0x6e, 0x33, 0x6c, 0x27, 0xf1, 0x96, 0x7f, 0x3d, 0xca, 0x1c, 0xdd,
-    0x2d, 0x3f, 0xfb, 0xe0, 0x34, 0xe8, 0x69, 0xbe, 0xd7, 0x5a, 0x7f, 0x63,
-    0x9b, 0xa3, 0x55, 0xd6, 0x8a, 0x3f, 0x97, 0x48, 0xf3, 0xf1, 0x7b, 0xd5,
-    0x51, 0x96, 0x9f, 0x57, 0x25, 0xfb, 0xad, 0x3f, 0xfd, 0x7d, 0x5a, 0x05,
-    0xbe, 0x8e, 0xd5, 0xb2, 0x32, 0xd2, 0x6b, 0x0f, 0xef, 0x82, 0x78, 0x24,
-    0x7a, 0x6c, 0x8f, 0x50, 0xa8, 0x9f, 0xf0, 0x97, 0xab, 0x69, 0xd5, 0xad,
-    0xe9, 0x69, 0xdc, 0xe7, 0xd6, 0x9f, 0x77, 0x83, 0x4e, 0xcb, 0x43, 0x1e,
-    0x2f, 0x83, 0x93, 0x8d, 0x6b, 0x8b, 0x4f, 0xfc, 0x6b, 0x99, 0xb9, 0x6f,
-    0xf8, 0xdd, 0xad, 0x0c, 0x7c, 0x84, 0x3d, 0x0c, 0xac, 0x05, 0xf1, 0xcf,
-    0x51, 0xa5, 0xe1, 0x13, 0xa8, 0x43, 0x4f, 0xfe, 0x79, 0x6e, 0x9c, 0x27,
-    0x3c, 0x76, 0xf2, 0xeb, 0x4f, 0x9a, 0xc6, 0x76, 0x65, 0xa7, 0xef, 0x3d,
-    0x6e, 0xad, 0xba, 0xd3, 0xff, 0xff, 0xef, 0xb6, 0x87, 0x00, 0xae, 0xe1,
-    0x7c, 0x1a, 0xfa, 0x6b, 0x5b, 0xd5, 0x5d, 0x69, 0xff, 0xff, 0xff, 0x5e,
-    0xf5, 0xad, 0xe1, 0xaf, 0xff, 0x95, 0xba, 0xcc, 0xf7, 0x54, 0xe7, 0x9a,
-    0x6e, 0x2d, 0x65, 0xa1, 0x93, 0x1f, 0xc8, 0x40, 0xcf, 0x77, 0x96, 0xdd,
-    0x69, 0xb8, 0xe1, 0x68, 0xb9, 0xbb, 0xe0, 0x8e, 0x7c, 0x5b, 0xca, 0xda,
-    0x47, 0x34, 0x51, 0x6a, 0xa8, 0x2d, 0xa8, 0x3b, 0x85, 0x23, 0x1a, 0x85,
-    0xe1, 0x09, 0x3b, 0x8e, 0x38, 0x4a, 0x79, 0xfa, 0xa0, 0x48, 0xe5, 0xfc,
-    0xfa, 0xb9, 0x2e, 0xee, 0xbb, 0xbf, 0xa5, 0x9f, 0x3e, 0x41, 0x2f, 0x9b,
-    0xf7, 0x5a, 0x73, 0xa6, 0x05, 0xa1, 0x8d, 0x91, 0x0b, 0x4f, 0xc3, 0x6d,
-    0xdc, 0xad, 0x2d, 0x3f, 0xfc, 0x3a, 0x72, 0xbf, 0x58, 0x66, 0xd9, 0x72,
-    0xb4, 0xfa, 0xce, 0xb9, 0x55, 0xab, 0x4f, 0x8a, 0xed, 0x61, 0x97, 0x67,
-    0xec, 0xf9, 0xb3, 0xfd, 0xf8, 0xbb, 0x3f, 0x66, 0xc7, 0xae, 0xcf, 0xd9,
-    0xef, 0x1f, 0x57, 0x5d, 0x9f, 0xb1, 0xc9, 0xe8, 0x89, 0x14, 0xf9, 0xaa,
-    0xf4, 0x2b, 0xb3, 0xf6, 0x17, 0x67, 0xec, 0xd9, 0xa5, 0xd9, 0xfa, 0x62,
-    0xde, 0x4f, 0x13, 0xf9, 0xf1, 0x22, 0x7a, 0xba, 0x8b, 0xb5, 0xd9, 0xfb,
-    0x0b, 0xb3, 0xf6, 0x6e, 0xd9, 0x76, 0x7e, 0xcf, 0xf5, 0x77, 0x9f, 0xa7,
-    0x55, 0xca, 0xec, 0xfd, 0x9f, 0xab, 0x65, 0x7f, 0x2c, 0x5d, 0x9f, 0xb1,
-    0xda, 0x29, 0x44, 0x8e, 0xe8, 0xf3, 0xdf, 0xb1, 0xb4, 0xbb, 0x3f, 0x61,
-    0x76, 0x7e, 0xd1, 0xaf, 0x9b, 0x8e, 0x17, 0x67, 0xec, 0x3d, 0x58, 0xa7,
-    0x26, 0x95, 0x08, 0x6b, 0x61, 0x37, 0xf2, 0x83, 0x18, 0xde, 0x17, 0x9a,
-    0x5f, 0xe0, 0x9a, 0x7a, 0x9e, 0xde, 0xd3, 0x67, 0xe8, 0xe8, 0x91, 0x9f,
-    0xf5, 0x07, 0x35, 0xfe, 0x33, 0x6e, 0x2d, 0x33, 0xec, 0x4a, 0x2c, 0x44,
-    0xc5, 0xa8, 0x42, 0x7f, 0x1f, 0x5c, 0x9a, 0xc9, 0xc6, 0x99, 0xff, 0xf3,
-    0xfe, 0xce, 0xb1, 0xc6, 0xe7, 0x6c, 0x6c, 0x71, 0x69, 0xfc, 0xed, 0x97,
-    0x2b, 0xb9, 0x4b, 0x45, 0xa8, 0x8d, 0xfa, 0xc4, 0x32, 0xf3, 0x5b, 0xd6,
-    0x28, 0x7c, 0x8b, 0xb2, 0x73, 0xa3, 0xc8, 0x5d, 0x4f, 0xfb, 0xdb, 0x5a,
-    0x2d, 0xbd, 0xf8, 0x0b, 0x4f, 0xc3, 0x9e, 0xf7, 0x8f, 0x5a, 0x77, 0x1c,
-    0x70, 0x94, 0xef, 0x4d, 0xda, 0x47, 0x2f, 0xe7, 0xfc, 0x38, 0xff, 0x5f,
-    0xa7, 0x59, 0xf5, 0xa7, 0xf8, 0x73, 0xbe, 0x8f, 0x6e, 0xed, 0x5a, 0x39,
-    0x4c, 0xd4, 0xc8, 0x1d, 0xa6, 0x09, 0x6e, 0x90, 0x27, 0xfc, 0x22, 0x5e,
-    0x3b, 0x97, 0xea, 0x6d, 0x2d, 0x3b, 0x8e, 0x38, 0x4c, 0x42, 0x09, 0xf7,
-    0xc3, 0x30, 0x13, 0x10, 0x80, 0xe6, 0xb6, 0x77, 0x1c, 0x70, 0x98, 0x83,
-    0xd0, 0x98, 0x83, 0xc7, 0x35, 0xb3, 0x31, 0xa9, 0x12, 0xe0, 0xdf, 0x3e,
-    0xd3, 0x69, 0x8c, 0xb4, 0xf0, 0x93, 0x7b, 0x5a, 0x77, 0xa6, 0xed, 0x68,
-    0xb0, 0xdf, 0x98, 0x86, 0x7c, 0x0d, 0xb6, 0x32, 0x53, 0xe1, 0xc1, 0x1a,
-    0x4a, 0x6a, 0x04, 0xa6, 0xe3, 0x84, 0xa2, 0x8f, 0xd2, 0xe4, 0xba, 0x23,
-    0xe0, 0x52, 0x7f, 0x0f, 0xa6, 0xef, 0x74, 0xec, 0x91, 0xcd, 0xe4, 0x32,
-    0x6f, 0xc4, 0xcb, 0x90, 0xd2, 0x9f, 0xf9, 0xbb, 0xbd, 0x57, 0x38, 0x39,
-    0xed, 0x69, 0xff, 0xf5, 0xaf, 0xbf, 0x0d, 0xfd, 0xb1, 0x6d, 0x84, 0x96,
-    0x8d, 0xa2, 0x63, 0x11, 0x27, 0xf5, 0xfd, 0x1a, 0xfc, 0x65, 0xab, 0x43,
-    0x2e, 0x11, 0xd2, 0x61, 0x46, 0x13, 0xf8, 0xea, 0xb2, 0x19, 0x77, 0x22,
-    0x9d, 0xc7, 0x1c, 0x25, 0x3d, 0xde, 0x0f, 0x29, 0x1c, 0xbf, 0x9f, 0xbd,
-    0x57, 0xea, 0x9c, 0x5a, 0x1e, 0x7b, 0xf7, 0x31, 0x9f, 0xfe, 0x1b, 0x7a,
-    0x5b, 0xdb, 0x08, 0x65, 0x83, 0x8b, 0x4f, 0xff, 0xff, 0xf6, 0xaf, 0xea,
-    0xfd, 0x37, 0x85, 0xa2, 0xd8, 0x17, 0x47, 0x96, 0xf0, 0x74, 0xfa, 0xfd,
-    0x2d, 0x3f, 0xfd, 0x4c, 0x7e, 0x45, 0xbc, 0x0a, 0xf6, 0x5f, 0x5a, 0x79,
-    0xdb, 0x7d, 0xba, 0x5a, 0x1e, 0x7e, 0xf8, 0x9f, 0x3f, 0xf9, 0xf5, 0xfe,
-    0xcc, 0x57, 0xf5, 0x76, 0xa5, 0xa7, 0x8b, 0x9a, 0x32, 0xd0, 0xca, 0x83,
-    0x5e, 0x45, 0x4a, 0x39, 0x18, 0x68, 0x90, 0xf8, 0x97, 0x3f, 0x75, 0xee,
-    0x43, 0x6b, 0xd6, 0x9f, 0xf6, 0x7f, 0xa8, 0xb7, 0x59, 0x6f, 0x6b, 0x4f,
-    0xfa, 0xf7, 0x6f, 0xe9, 0x8f, 0xc9, 0x2d, 0x3f, 0xe1, 0xc7, 0x37, 0x9f,
-    0xf9, 0x72, 0xb4, 0x52, 0x3b, 0x80, 0xc4, 0x90, 0x4c, 0x7d, 0x3c, 0xff,
-    0x54, 0xe2, 0xd3, 0xef, 0xf3, 0x54, 0x2b, 0x4f, 0xfd, 0xd7, 0x2a, 0xdb,
-    0x3a, 0xbe, 0xda, 0xd5, 0xa3, 0x0f, 0xbe, 0xe4, 0xd3, 0xfd, 0x43, 0xfa,
-    0xbd, 0x16, 0xd6, 0x9f, 0xfe, 0xad, 0x5e, 0x9c, 0xdb, 0x3a, 0xad, 0xed,
-    0x96, 0x9e, 0xad, 0x15, 0xd6, 0x9f, 0x9d, 0xd3, 0x82, 0xef, 0x59, 0xe2,
-    0xd1, 0x73, 0xdb, 0xd1, 0x04, 0x72, 0x99, 0x18, 0x10, 0x89, 0xae, 0xa1,
-    0x57, 0x3f, 0xfc, 0x57, 0xae, 0x75, 0x72, 0xf7, 0xbc, 0x12, 0x5a, 0x7f,
-    0xff, 0x0e, 0xab, 0x64, 0xda, 0x2e, 0xd9, 0xe7, 0xe3, 0x8e, 0x12, 0x9e,
-    0xe6, 0xab, 0xda, 0x53, 0xd9, 0xde, 0x69, 0x69, 0xcf, 0x1f, 0x15, 0x10,
-    0xcc, 0xee, 0x38, 0xe1, 0x29, 0xd4, 0x20, 0x91, 0xcb, 0xf9, 0xff, 0x55,
-    0x95, 0xce, 0x3c, 0x5a, 0xc5, 0xa3, 0xb3, 0xe6, 0x12, 0x89, 0xfc, 0xf1,
-    0xad, 0x6b, 0xcb, 0x16, 0x86, 0x4e, 0xaa, 0xc6, 0x2e, 0x48, 0xed, 0x21,
-    0xfc, 0x2b, 0xb0, 0x8a, 0x78, 0xb4, 0x4c, 0xb4, 0xfe, 0xf2, 0xbf, 0xdf,
-    0x64, 0x2b, 0x4f, 0xff, 0x3c, 0xb9, 0xdf, 0xab, 0xd7, 0xc3, 0x30, 0x15,
-    0x10, 0x64, 0xff, 0xef, 0xe3, 0xaa, 0x10, 0xd9, 0x77, 0xeb, 0x4b, 0x43,
-    0x22, 0xa3, 0xc5, 0xc8, 0xda, 0x3f, 0xf5, 0x0d, 0xc9, 0xb7, 0xe2, 0xd3,
-    0xdf, 0x2e, 0x3a, 0xeb, 0x41, 0x1b, 0xdb, 0x8b, 0xcf, 0xee, 0xaa, 0xbf,
-    0x55, 0x7d, 0x96, 0x87, 0xa7, 0xb4, 0x51, 0x8f, 0x5d, 0x97, 0x44, 0x13,
-    0xff, 0xcc, 0x36, 0x74, 0x70, 0x86, 0xb9, 0xa1, 0xf6, 0xb4, 0xe6, 0xfb,
-    0x8b, 0x43, 0x2f, 0x8a, 0x72, 0x75, 0x51, 0xdb, 0x02, 0x11, 0x47, 0xf3,
-    0x92, 0x8e, 0x3c, 0x43, 0xea, 0x52, 0x9f, 0x61, 0xb2, 0xae, 0xb4, 0xff,
-    0xf0, 0x35, 0xee, 0xc6, 0xad, 0x15, 0xf7, 0x8b, 0x4f, 0xe1, 0x16, 0x79,
-    0x98, 0x96, 0x9f, 0xda, 0x27, 0x45, 0xa7, 0xb2, 0x52, 0x32, 0xd3, 0xf5,
-    0x0f, 0xbf, 0xb1, 0xc8, 0xf0, 0xfd, 0x19, 0xc5, 0x26, 0x08, 0x49, 0x97,
-    0x72, 0x9e, 0xff, 0x96, 0xbd, 0x69, 0xfc, 0x2f, 0x1a, 0x33, 0x02, 0xd3,
-    0x8d, 0xcd, 0x2d, 0x0c, 0x7d, 0xf4, 0x49, 0x85, 0xf3, 0xb4, 0x56, 0x2d,
-    0x3f, 0xef, 0x35, 0x7f, 0x5f, 0xec, 0xc5, 0x75, 0xa7, 0xf5, 0xda, 0xca,
-    0x12, 0xf6, 0xb4, 0xff, 0xcc, 0x39, 0xb6, 0xec, 0xff, 0xbd, 0xd2, 0x8e,
-    0x51, 0x73, 0x48, 0x66, 0x33, 0x9f, 0x6c, 0x8a, 0xdb, 0xad, 0x3f, 0xfe,
-    0xae, 0x7a, 0x61, 0x55, 0xda, 0xca, 0x12, 0xf6, 0xb4, 0x25, 0x3f, 0x5f,
-    0xd3, 0x7d, 0x8c, 0x94, 0x25, 0x09, 0x42, 0x50, 0x94, 0x3c, 0xf8, 0x08,
-    0x2b, 0xb2, 0xef, 0x02, 0xba, 0x82, 0x9d, 0x82, 0xa6, 0xdd, 0x25, 0x3f,
-    0x66, 0x69, 0xc6, 0x32, 0x5d, 0x0b, 0x59, 0x3b, 0x89, 0x42, 0x50, 0x94,
-    0x3c, 0xb4, 0x20, 0xa8, 0x4a, 0x12, 0x84, 0xa1, 0x28, 0x4a, 0x12, 0x8b,
-    0x0d, 0xe7, 0x21, 0x44, 0x15, 0xd8, 0x55, 0xc2, 0x9d, 0x05, 0x42, 0x50,
-    0x94, 0x3c, 0xb4, 0xb8, 0x54, 0x25, 0x09, 0x42, 0x50, 0x94, 0x3c, 0xd4,
-    0x76, 0x15, 0xa0, 0xa7, 0x60, 0xa8, 0x4a, 0x12, 0x84, 0xa1, 0x28, 0xb0,
-    0xd4, 0x7b, 0x0a, 0xf8, 0x56, 0xc2, 0xa5, 0xed, 0x28, 0x4a, 0x12, 0x84,
-    0xa1, 0x28, 0xe4, 0xd4, 0x5a, 0x15, 0xd8, 0x57, 0x81, 0x50, 0x94, 0x25,
-    0x09, 0x4f, 0xb6, 0xdd, 0xde, 0x92, 0x84, 0xa1, 0xe7, 0x9e, 0x01, 0x5b,
-    0x0a, 0xc0, 0xae, 0xc9, 0xe4, 0x09, 0x42, 0x50, 0x94, 0x25, 0x09, 0x43,
-    0xcd, 0x45, 0xa1, 0x44, 0x14, 0xe8, 0x2a, 0x12, 0x84, 0xa1, 0x28, 0x4a,
-    0x1e, 0x6a, 0x39, 0x0a, 0xd8, 0x50, 0x85, 0x4b, 0x69, 0x42, 0x50, 0x94,
-    0x9e, 0x94, 0x25, 0x69, 0x61, 0x09, 0x42, 0x50, 0x94, 0x25, 0x16, 0x1f,
-    0x33, 0xc2, 0xbd, 0x8d, 0x00, 0xd3, 0x81, 0x5d, 0x85, 0x68, 0x2a, 0x54,
-    0x94, 0x25, 0x09, 0x49, 0xe9, 0x42, 0x56, 0x96, 0x10, 0x94, 0x25, 0x0c,
-    0x7a, 0x4f, 0x0a, 0x21, 0xaf, 0x8d, 0x18, 0x2a, 0x12, 0x84, 0xa1, 0x28,
-    0x4a, 0x12, 0x86, 0x36, 0x56, 0x85, 0x7c, 0x28, 0xc1, 0x42, 0x15, 0x09,
-    0x42, 0x50, 0x94, 0x7c, 0xbe, 0xb8, 0x56, 0x82, 0xa1, 0x28, 0x4a, 0x12,
-    0x83, 0x17, 0xc2, 0x15, 0xa0, 0xa9, 0x19, 0x28, 0x4a, 0x12, 0x8e, 0xcb,
-    0x4f, 0x02, 0xa1, 0x28, 0x4a, 0x12, 0x84, 0xa1, 0x8d, 0x43, 0x81, 0x5b,
-    0x0a, 0xf0, 0x2a, 0x19, 0x7e, 0xc6, 0xc7, 0x27, 0x9e, 0xf2, 0x53, 0x4b,
-    0x60, 0xdb, 0x6a, 0x41, 0x33, 0xf5, 0xcf, 0x9c, 0x3a, 0xfc, 0x23, 0x8c,
-    0x91, 0xb3, 0x7c, 0x65, 0xec, 0xec, 0x5d, 0xae, 0xcf, 0xa6, 0x1f, 0x1e,
-    0x5d, 0x32, 0xf0, 0x97, 0xd4, 0x59, 0xe8, 0x91, 0xd9, 0x2a, 0x7c, 0xf1,
-    0x6a, 0xba, 0x47, 0x4d, 0x62, 0x71, 0x31, 0x92, 0x9e, 0x20, 0xcf, 0xad,
-    0x38, 0xb9, 0xa5, 0xa7, 0x37, 0xa3, 0xda, 0x88, 0xcf, 0x9c, 0x6c, 0x6b,
-    0x43, 0xf3, 0xfb, 0x65, 0xc7, 0x3f, 0x6b, 0x16, 0x8b, 0x51, 0x0c, 0xe2,
-    0x8c, 0xdd, 0xb2, 0xd3, 0xf7, 0xf0, 0x7d, 0x37, 0x6b, 0x4d, 0x9f, 0x5a,
-    0x44, 0xb0, 0x16, 0xb2, 0x05, 0xa4, 0x65, 0xa6, 0xea, 0x39, 0x22, 0x57,
-    0xe2, 0xdb, 0x43, 0xc1, 0xdf, 0x41, 0xf3, 0xfd, 0xb6, 0x35, 0x38, 0xc3,
-    0x62, 0xd1, 0x48, 0x91, 0xed, 0x66, 0x7e, 0x31, 0x75, 0x60, 0xf6, 0xb4,
-    0xff, 0xf3, 0x74, 0xcf, 0xff, 0x3b, 0x63, 0xf1, 0xc7, 0x0b, 0x43, 0x22,
-    0x0f, 0xc2, 0xf8, 0xb1, 0xb0, 0x04, 0x7c, 0x65, 0x3c, 0xc2, 0x78, 0x0b,
-    0x0a, 0x1a, 0xae, 0x18, 0x18, 0x9f, 0x29, 0x5a, 0x23, 0x1a, 0x5e, 0xa1,
-    0x4d, 0x3f, 0x98, 0x75, 0x83, 0xe5, 0x2d, 0x3f, 0x3c, 0x49, 0xfb, 0xa5,
-    0xa7, 0xd6, 0x17, 0xd9, 0xeb, 0x47, 0xcf, 0x48, 0x4a, 0xe7, 0xfd, 0xb6,
-    0xff, 0x63, 0x5c, 0x67, 0x6b, 0x4e, 0xaa, 0x71, 0x69, 0x56, 0xcf, 0x6b,
-    0xb3, 0xf9, 0xfb, 0xcf, 0xf8, 0x6c, 0x15, 0xa7, 0x8c, 0xd5, 0x62, 0xd3,
-    0xea, 0x74, 0x2d, 0x6a, 0xd0, 0x47, 0x93, 0x72, 0x19, 0xe6, 0x1d, 0x02,
-    0xd2, 0x6a, 0x4d, 0x68, 0x5e, 0xee, 0x51, 0xa7, 0x7e, 0xa2, 0x19, 0xef,
-    0x33, 0xef, 0x5a, 0x79, 0xbc, 0x77, 0x2e, 0x94, 0xf9, 0xe7, 0xe3, 0x8e,
-    0x16, 0x81, 0x3d, 0x2f, 0x09, 0xe3, 0x94, 0x4b, 0x53, 0xa4, 0x19, 0x57,
-    0x37, 0x71, 0xee, 0x79, 0x0e, 0x79, 0xfb, 0xfe, 0x77, 0x42, 0x0b, 0x4f,
-    0xf5, 0x83, 0x4f, 0xdd, 0x77, 0x75, 0xa7, 0xb9, 0xe5, 0x9d, 0x2d, 0x3f,
-    0xfd, 0xb6, 0x30, 0x36, 0xab, 0xe1, 0x98, 0x0a, 0x8b, 0xe2, 0x76, 0x7e,
-    0xc5, 0x45, 0xff, 0x0c, 0x88, 0x00, 0x57, 0x9f, 0xdc, 0x66, 0xae, 0xd5,
-    0x62, 0xd3, 0xff, 0x3a, 0xd7, 0xb6, 0x17, 0xd6, 0xc8, 0xcb, 0x4f, 0xd5,
-    0xc7, 0xad, 0xe6, 0x96, 0x9f, 0xff, 0x6b, 0xd3, 0xd9, 0xd1, 0x0f, 0x7f,
-    0x26, 0x35, 0x25, 0x3d, 0xbf, 0x56, 0xe9, 0x68, 0xb1, 0x15, 0x74, 0x5e,
-    0x0a, 0xf3, 0x6a, 0x96, 0x9f, 0x7c, 0xac, 0xc3, 0x2a, 0x61, 0x39, 0xed,
-    0x78, 0xd8, 0xa9, 0x84, 0xe6, 0xed, 0x95, 0x40, 0x9c, 0xfe, 0x1c, 0xf7,
-    0xa6, 0xff, 0x6a, 0xa0, 0x4e, 0x7f, 0x5e, 0xb6, 0x57, 0xf2, 0xc5, 0x4c,
-    0x27, 0x35, 0x72, 0xa9, 0x84, 0xe6, 0xe3, 0x85, 0xcc, 0x27, 0x14, 0x9a,
-    0x7d, 0xa6, 0x84, 0x5c, 0x62, 0x3b, 0xa0, 0xba, 0x41, 0xe0, 0x8e, 0x5a,
-    0x4c, 0xc2, 0x63, 0x9f, 0x3c, 0x8a, 0xd4, 0xfe, 0xb8, 0x8f, 0x2e, 0x31,
-    0x5a, 0x5d, 0xe1, 0xe3, 0xa9, 0x45, 0x33, 0x87, 0xb3, 0x2d, 0x3f, 0xcd,
-    0xe6, 0x84, 0x9d, 0x7a, 0x32, 0xd3, 0x86, 0xaf, 0x47, 0xb1, 0xf1, 0xc8,
-    0x65, 0xd4, 0x3e, 0x4e, 0x42, 0x14, 0xbb, 0x21, 0xd4, 0xb7, 0xe7, 0x50,
-    0x95, 0x9f, 0x73, 0x5f, 0x2f, 0x6b, 0x4f, 0x86, 0xbd, 0x53, 0x8b, 0x4f,
-    0xf6, 0xf0, 0xdb, 0x26, 0xb5, 0xeb, 0x4f, 0xde, 0x85, 0xfd, 0x59, 0x62,
-    0xd0, 0x47, 0xd5, 0xd9, 0xc4, 0x0a, 0x2d, 0x35, 0x09, 0x29, 0xff, 0x56,
-    0x6d, 0xc2, 0x1d, 0xd5, 0xab, 0x43, 0x2f, 0x8e, 0xd4, 0xeb, 0x81, 0x36,
-    0x64, 0x37, 0x44, 0x9e, 0x7f, 0xf1, 0xb5, 0x72, 0x1b, 0x5f, 0xa2, 0xb9,
-    0x2d, 0x3f, 0xff, 0x86, 0xad, 0xab, 0xe0, 0xec, 0x9b, 0x5b, 0xf3, 0x0c,
-    0xb4, 0xfc, 0x3e, 0x18, 0xb6, 0xcb, 0x4f, 0xff, 0xb0, 0x75, 0x99, 0xb1,
-    0x6d, 0x5f, 0x8a, 0xda, 0xd3, 0xfe, 0xb3, 0x06, 0xfa, 0xd9, 0x35, 0xd6,
-    0x9d, 0xfb, 0xdd, 0x71, 0x01, 0xcf, 0xfe, 0xfb, 0x6d, 0xba, 0x57, 0xc3,
-    0x30, 0x15, 0x10, 0x19, 0xcd, 0x4c, 0x62, 0x32, 0xbd, 0x33, 0x47, 0x69,
-    0xa0, 0x6a, 0x31, 0xc8, 0xa4, 0xe5, 0xca, 0x36, 0xc9, 0xe1, 0xd7, 0x7e,
-    0x2d, 0x3f, 0xff, 0x3e, 0xae, 0x5f, 0xf9, 0x1b, 0xd6, 0xb7, 0x5c, 0x69,
-    0x68, 0xa4, 0x40, 0x61, 0x1c, 0xff, 0xff, 0x63, 0xe8, 0x5c, 0x7d, 0x5a,
-    0xff, 0x4d, 0xd9, 0xf8, 0xe3, 0x84, 0xa3, 0x68, 0x8e, 0x12, 0x19, 0xfc,
-    0xd5, 0xf0, 0xcc, 0x05, 0x44, 0x13, 0x3f, 0xcd, 0xaa, 0xf8, 0x66, 0x02,
-    0xa2, 0xf9, 0x9f, 0x13, 0xa1, 0xab, 0xf2, 0x7f, 0x80, 0x77, 0x3f, 0xbc,
-    0xdf, 0x56, 0xc8, 0x36, 0xb4, 0xff, 0xac, 0xcb, 0x7a, 0xab, 0x43, 0x8e,
-    0x96, 0x9d, 0xc7, 0x1c, 0x25, 0x3e, 0xdd, 0x06, 0x7d, 0x23, 0x97, 0xf3,
-    0xff, 0xf9, 0xcf, 0xb3, 0xae, 0x9e, 0xf3, 0xa7, 0xa7, 0x2f, 0xd2, 0xad,
-    0xd2, 0xd1, 0xa4, 0x52, 0x7a, 0x34, 0x8b, 0x13, 0x2b, 0x18, 0xc1, 0xa7,
-    0xfe, 0xb0, 0xcd, 0x6d, 0xc6, 0xac, 0xf4, 0xf5, 0xa7, 0xff, 0xbd, 0x5a,
-    0x3d, 0x03, 0x65, 0xdf, 0x6d, 0xf7, 0xad, 0x3f, 0xef, 0x2e, 0xd4, 0x3a,
-    0x77, 0xf8, 0x05, 0xa7, 0x71, 0xc7, 0x09, 0x4f, 0xef, 0x5d, 0xb0, 0xd5,
-    0xba, 0x48, 0xe5, 0xfc, 0xff, 0xfc, 0xee, 0x74, 0x0d, 0x97, 0x3c, 0xd7,
-    0x1d, 0x35, 0x7a, 0xb1, 0x69, 0x66, 0xd1, 0x57, 0xe2, 0x24, 0x3d, 0x5c,
-    0xef, 0x27, 0xe5, 0x1b, 0x0f, 0xca, 0x8c, 0x90, 0x2a, 0xba, 0x8c, 0x36,
-    0x7d, 0xba, 0xd3, 0x8f, 0x5a, 0x7f, 0xd5, 0xa6, 0xfd, 0xf6, 0xc3, 0xa5,
-    0xc4, 0x11, 0x3f, 0x9a, 0xbe, 0x19, 0x80, 0xa8, 0x82, 0x0e, 0x79, 0x33,
-    0xf6, 0x6f, 0xff, 0x2e, 0x16, 0x9f, 0xba, 0xfc, 0xf1, 0x82, 0xf5, 0xa0,
-    0x4f, 0x7f, 0xc2, 0xd8, 0xda, 0x67, 0xdd, 0xb8, 0x8c, 0x2a, 0xe7, 0xf9,
-    0x87, 0x5e, 0xab, 0x79, 0x6a, 0xd3, 0xff, 0xd9, 0xc6, 0xab, 0x6c, 0x5a,
-    0x1a, 0xd9, 0x2d, 0x0f, 0x44, 0x28, 0x9c, 0xcf, 0xf6, 0xdb, 0xfa, 0x16,
-    0xab, 0x56, 0x9f, 0xff, 0xe2, 0xb1, 0x9f, 0x7f, 0xfc, 0xad, 0x71, 0xf9,
-    0xf3, 0x55, 0xab, 0x4f, 0x6b, 0x74, 0x3c, 0xa2, 0x83, 0x66, 0xf3, 0xf7,
-    0xa3, 0x5f, 0x8c, 0xb5, 0x68, 0x63, 0xeb, 0xd1, 0xd4, 0xf1, 0x38, 0x5c,
-    0x2d, 0x3f, 0xfe, 0xf2, 0xc1, 0x6a, 0xd9, 0xdb, 0x55, 0xbf, 0x3e, 0xb4,
-    0xfa, 0xb5, 0x7f, 0x57, 0xe4, 0xfe, 0x3d, 0x11, 0x4f, 0xc1, 0xb2, 0xea,
-    0x2f, 0x6b, 0x4f, 0xc6, 0x6e, 0xbe, 0xea, 0xc5, 0xa7, 0xff, 0xff, 0x8b,
-    0x58, 0x6c, 0x1e, 0xde, 0x57, 0xf0, 0xdb, 0x26, 0xd6, 0xfc, 0xc3, 0x2d,
-    0x1c, 0xa3, 0x78, 0x8c, 0x30, 0xc6, 0x7e, 0x1e, 0xe8, 0xcd, 0xb5, 0xa7,
-    0x7f, 0xd5, 0xd6, 0x9f, 0xf6, 0x08, 0x57, 0xc3, 0x30, 0x15, 0x10, 0x8c,
-    0x31, 0xf1, 0xf8, 0x3d, 0x3f, 0xf9, 0xaa, 0xdf, 0x5a, 0x21, 0xf1, 0xf5,
-    0x75, 0xa7, 0xff, 0xb3, 0x2c, 0xf5, 0x5b, 0xc3, 0x1f, 0x8e, 0x38, 0x5a,
-    0x39, 0x44, 0xfb, 0x89, 0x73, 0xfd, 0xcb, 0x5e, 0xed, 0x65, 0x70, 0xb4,
-    0x51, 0xef, 0xe1, 0x2c, 0xee, 0x38, 0xe1, 0x29, 0xfe, 0xae, 0xf3, 0xf4,
-    0xea, 0xb9, 0x48, 0xe5, 0xfc, 0xdc, 0x70, 0x94, 0xee, 0x38, 0xe1, 0x29,
-    0xfb, 0x2c, 0xe7, 0x6d, 0x74, 0x8e, 0x5f, 0xc0, 0xa2, 0xf7, 0x84, 0x9e,
-    0xa3, 0x79, 0xf0, 0x17, 0x3e, 0x8c, 0x91, 0xcd, 0x9c, 0xee, 0x38, 0xe1,
-    0x29, 0xd7, 0x6f, 0xa4, 0x72, 0xfe, 0x5d, 0x92, 0x20, 0xb4, 0xb1, 0x3f,
-    0x72, 0x2c, 0xfc, 0x05, 0xa7, 0xf7, 0xaf, 0xf2, 0x4e, 0x9b, 0x95, 0xa7,
-    0xfe, 0xde, 0x3c, 0x73, 0xdb, 0x82, 0x4e, 0x2d, 0x3f, 0x6e, 0x9d, 0x56,
-    0xae, 0xb4, 0x01, 0xf9, 0xe9, 0x16, 0x3e, 0x8f, 0x7d, 0x95, 0x8c, 0x2a,
-    0xe1, 0x93, 0x54, 0xa8, 0xc8, 0x27, 0x5b, 0xd6, 0xbb, 0xba, 0x5a, 0x7f,
-    0xf5, 0x75, 0xf0, 0x7b, 0xa0, 0x6d, 0xb1, 0x96, 0x9f, 0x80, 0xaf, 0xb2,
-    0x71, 0x29, 0xfc, 0x35, 0x6b, 0xee, 0x5e, 0xd6, 0x9e, 0xcc, 0xff, 0xb5,
-    0xa3, 0xa1, 0xeb, 0x58, 0x69, 0x3c, 0xd8, 0x67, 0x49, 0x4e, 0xe3, 0x8e,
-    0x12, 0x9f, 0xfe, 0xf4, 0xdd, 0xd5, 0x0e, 0xb6, 0x4c, 0x36, 0x24, 0x72,
-    0xfe, 0x54, 0x08, 0x9f, 0x32, 0x0c, 0x32, 0x7c, 0x6f, 0x2c, 0xb5, 0x28,
-    0xa1, 0x05, 0xb8, 0x62, 0x4f, 0xff, 0x8d, 0x40, 0xc3, 0x9a, 0xbf, 0x3e,
-    0x67, 0xde, 0xb4, 0xf9, 0xb5, 0x77, 0x54, 0xb4, 0x31, 0xfe, 0x69, 0x52,
-    0x7f, 0xf8, 0x9d, 0x50, 0xf2, 0x39, 0xc5, 0x0e, 0x7b, 0x5a, 0x7f, 0xff,
-    0xb9, 0xd9, 0x71, 0x4e, 0xc4, 0x6c, 0xd5, 0xfc, 0x7d, 0x5b, 0xa5, 0xa2,
-    0x91, 0x79, 0x8a, 0x10, 0xcd, 0xad, 0xed, 0x89, 0x2f, 0x8f, 0xd7, 0x98,
-    0xcd, 0xaa, 0x70, 0xec, 0xa3, 0xaf, 0x72, 0x17, 0x7f, 0x8c, 0xb4, 0xd0,
-    0x99, 0xdc, 0x64, 0x58, 0x5f, 0xdc, 0x23, 0xc6, 0x32, 0x0b, 0xcb, 0x05,
-    0xd4, 0xa0, 0xbf, 0x21, 0xa1, 0xc4, 0x37, 0x67, 0x3a, 0x61, 0x5a, 0x7f,
-    0xfa, 0x84, 0xfa, 0xf6, 0x56, 0xdf, 0x75, 0xde, 0x2d, 0x2b, 0x5e, 0x7d,
-    0xbc, 0x8e, 0x4f, 0xdb, 0x70, 0xb6, 0x46, 0x5a, 0x7f, 0xc2, 0xda, 0xde,
-    0x77, 0x96, 0xdd, 0x69, 0xce, 0x79, 0xf5, 0xa7, 0xfd, 0x85, 0xfa, 0xb4,
-    0xfc, 0x71, 0xc2, 0xd1, 0x87, 0xbf, 0x71, 0xe9, 0xff, 0xe1, 0x67, 0xf4,
-    0xf5, 0xa2, 0x1f, 0x1f, 0x57, 0x5a, 0x29, 0x33, 0xd0, 0x2d, 0xdc, 0x27,
-    0x7b, 0x21, 0x9f, 0xcc, 0x2f, 0x1a, 0xae, 0xd6, 0x9f, 0xcf, 0xaf, 0xdc,
-    0x5a, 0xc5, 0xa7, 0xff, 0xab, 0x4c, 0x21, 0x5a, 0xd9, 0x7f, 0xb0, 0x5a,
-    0x7f, 0x31, 0xaf, 0x7c, 0x1b, 0x16, 0x9f, 0x65, 0xe8, 0x74, 0xb4, 0xed,
-    0x67, 0x5d, 0x69, 0xfd, 0xad, 0x91, 0xfb, 0xc2, 0x5a, 0x39, 0x47, 0xa6,
-    0xd3, 0x04, 0xcb, 0x44, 0xbe, 0x0f, 0xcf, 0xef, 0x3b, 0x6d, 0x96, 0x3d,
-    0x69, 0xfe, 0x0a, 0xd3, 0x3a, 0x21, 0xed, 0x69, 0xff, 0xfb, 0xc6, 0xd5,
-    0xe8, 0x7a, 0x7d, 0x8b, 0x91, 0xc7, 0xad, 0x04, 0x89, 0x31, 0x38, 0x9f,
-    0xff, 0x86, 0xaf, 0xe7, 0x4a, 0xde, 0x0d, 0x38, 0xf6, 0xb5, 0x69, 0xff,
-    0x55, 0xfc, 0xaf, 0x86, 0x60, 0x2a, 0x20, 0x69, 0xed, 0x6f, 0x1f, 0xd1,
-    0x14, 0x82, 0xb9, 0x0c, 0x98, 0x05, 0x43, 0x16, 0x7f, 0xd9, 0xfa, 0x1e,
-    0xef, 0xab, 0xda, 0xb4, 0xff, 0xff, 0xfd, 0x5a, 0xde, 0x0f, 0xbe, 0x97,
-    0xfe, 0x66, 0x9d, 0x57, 0x3d, 0x28, 0xd8, 0x36, 0xbd, 0x71, 0x05, 0xcf,
-    0xfb, 0x33, 0xd8, 0x67, 0x3d, 0x3d, 0xf0, 0xb8, 0x82, 0xe7, 0xfe, 0xd9,
-    0x6c, 0x98, 0x75, 0xd3, 0xdf, 0x0b, 0x88, 0x2e, 0x7f, 0x31, 0x0e, 0xba,
-    0x7b, 0xe1, 0x71, 0x05, 0xcf, 0xc6, 0xae, 0x7a, 0x7b, 0xe1, 0x71, 0x05,
-    0xcf, 0xff, 0xf6, 0x08, 0x91, 0xba, 0x5c, 0x36, 0x5f, 0x2f, 0x76, 0x57,
-    0x0b, 0x88, 0x2e, 0x6b, 0x7a, 0x72, 0x9c, 0xe8, 0x28, 0xfd, 0x53, 0x10,
-    0xc5, 0x02, 0x19, 0x56, 0x86, 0xcf, 0xc6, 0x51, 0xcc, 0xfe, 0x26, 0xf7,
-    0x7d, 0x5e, 0xd5, 0xa7, 0xb3, 0xfd, 0xe2, 0xd3, 0xff, 0x6c, 0xb6, 0x4c,
-    0x3a, 0xe9, 0xef, 0x85, 0xc4, 0x17, 0x3f, 0xce, 0x5c, 0x0a, 0xce, 0x9e,
-    0xf8, 0x5c, 0x41, 0x73, 0xed, 0x5d, 0x8d, 0xd0, 0x11, 0x41, 0xe9, 0x52,
-    0x7f, 0xf7, 0x40, 0xd9, 0x03, 0x6a, 0xfd, 0x3d, 0xf0, 0xb8, 0x82, 0xe7,
-    0xff, 0xfe, 0x11, 0x23, 0x74, 0xf2, 0xba, 0x5c, 0x36, 0x5f, 0x2f, 0x76,
-    0x57, 0x0b, 0x88, 0x2e, 0x29, 0x32, 0x3b, 0x50, 0xf1, 0x72, 0x7f, 0xb6,
-    0x5f, 0x2f, 0x76, 0x57, 0x0b, 0x88, 0x2e, 0x7f, 0xfb, 0x32, 0xd7, 0xdf,
-    0x65, 0xcf, 0x2d, 0xf6, 0x4a, 0x7f, 0xd4, 0xf7, 0xf9, 0x7f, 0x8d, 0x9d,
-    0x4b, 0x88, 0x2e, 0x01, 0x1d, 0x1f, 0x48, 0xba, 0x84, 0xff, 0x80, 0xbf,
-    0xac, 0xee, 0xfd, 0x38, 0x5c, 0x41, 0x73, 0xf6, 0xcb, 0x7b, 0x2e, 0xd5,
-    0x00, 0x5c, 0xfa, 0xbb, 0xe9, 0xef, 0x85, 0xc4, 0x17, 0x35, 0x68, 0x0f,
-    0xd3, 0x67, 0x51, 0x6a, 0x3b, 0xaf, 0x0c, 0x29, 0xf8, 0xd5, 0xcf, 0x4f,
-    0x7c, 0x2e, 0x20, 0xb9, 0xff, 0x06, 0xcb, 0xe5, 0xee, 0xca, 0xe1, 0x71,
-    0x05, 0xcd, 0x5d, 0x31, 0x11, 0xb7, 0x40, 0x9f, 0xde, 0x11, 0xb0, 0x6d,
-    0x7a, 0xe2, 0x0b, 0x9f, 0xf5, 0x13, 0xaa, 0x1a, 0xe7, 0x1e, 0xb8, 0x82,
-    0xcc, 0x78, 0x11, 0xca, 0xf0, 0x2f, 0xcd, 0xfb, 0x35, 0x18, 0xf9, 0x2f,
-    0x18, 0xc6, 0xa3, 0x1d, 0xf2, 0x16, 0xdc, 0x37, 0xcf, 0xbb, 0xbf, 0x7d,
-    0xb2, 0xa2, 0x0b, 0x3a, 0x23, 0xa7, 0xfd, 0x4f, 0xde, 0x3d, 0xd9, 0xdb,
-    0xcb, 0x16, 0x9c, 0x66, 0x7a, 0xd3, 0xea, 0xe7, 0x7e, 0x70, 0xb4, 0xbf,
-    0x87, 0x8a, 0x23, 0x73, 0x8b, 0xaa, 0x96, 0x9d, 0x9f, 0xed, 0x69, 0x5a,
-    0xc6, 0xe7, 0x43, 0xb3, 0xf5, 0x59, 0x9b, 0x6e, 0xba, 0xd0, 0x48, 0xb6,
-    0xc5, 0xf1, 0x27, 0x9d, 0x9f, 0xb1, 0x69, 0xbb, 0x65, 0xa7, 0x89, 0x8d,
-    0x4b, 0x42, 0xd3, 0xf6, 0x7b, 0xd3, 0x7f, 0xb5, 0xa3, 0x93, 0x72, 0x21,
-    0x53, 0xff, 0xf9, 0x8b, 0x91, 0x6f, 0x03, 0x54, 0x1c, 0xb0, 0x7a, 0x32,
-    0xd3, 0x76, 0xcb, 0x4c, 0xde, 0xd6, 0x9f, 0xea, 0xd5, 0xd8, 0xde, 0xa9,
-    0xc5, 0xa7, 0xf5, 0xeb, 0x65, 0x7f, 0x2c, 0x5a, 0x6e, 0x38, 0x4a, 0x7f,
-    0x86, 0x9d, 0x63, 0xee, 0x5c, 0xad, 0x00, 0x9f, 0xb9, 0x0e, 0x7c, 0x58,
-    0xcb, 0x1b, 0x21, 0xed, 0x81, 0xdc, 0x16, 0x11, 0x7b, 0x9d, 0x70, 0x69,
-    0xe8, 0x62, 0x77, 0x1c, 0x70, 0x94, 0x8c, 0x91, 0xcb, 0xf9, 0xf6, 0x39,
-    0x99, 0xf4, 0x8e, 0x8d, 0xdf, 0x50, 0xbe, 0x9f, 0xd6, 0xe9, 0xab, 0x75,
-    0x62, 0xd0, 0xcd, 0x9d, 0x25, 0x46, 0xcf, 0xed, 0x0a, 0xd3, 0x02, 0x8c,
-    0x9b, 0xe9, 0x7b, 0x8f, 0x1b, 0x29, 0x31, 0x42, 0x93, 0x78, 0xd0, 0x7c,
-    0x96, 0x02, 0xe9, 0x32, 0x7a, 0x81, 0xb4, 0xb4, 0xf5, 0x1a, 0xb4, 0xb4,
-    0xff, 0xdb, 0xf2, 0xcf, 0x0f, 0xb2, 0x0c, 0xfa, 0xd3, 0xd9, 0x67, 0xa7,
-    0xad, 0x0c, 0x8a, 0x9b, 0x47, 0xf4, 0x40, 0xec, 0x8d, 0x3f, 0x0f, 0x9c,
-    0x9b, 0x1e, 0xb4, 0xff, 0xf5, 0xaf, 0x16, 0xe8, 0x61, 0x6f, 0x7a, 0x2b,
-    0x16, 0x9f, 0xd7, 0xd3, 0xaa, 0x1a, 0xe5, 0x68, 0x64, 0x5a, 0x91, 0x76,
-    0x29, 0xce, 0xce, 0x9e, 0x96, 0x9f, 0xfe, 0x17, 0xf4, 0xae, 0x4a, 0xf6,
-    0xeb, 0xcc, 0xba, 0xd3, 0xee, 0x9b, 0x6f, 0xbd, 0x68, 0xe8, 0x89, 0xba,
-    0x1f, 0xe1, 0x4e, 0x7e, 0xb1, 0xc7, 0xf5, 0x9f, 0xb1, 0x69, 0x9f, 0x62,
-    0xd3, 0xed, 0xd1, 0x3e, 0xeb, 0x4f, 0xff, 0x6d, 0xbd, 0x1f, 0x43, 0x9d,
-    0xde, 0xed, 0xda, 0x53, 0xfb, 0xba, 0xf8, 0x66, 0x02, 0xe2, 0x04, 0x9d,
-    0xa2, 0xb1, 0x68, 0x7a, 0x34, 0x79, 0x26, 0xfa, 0x91, 0x8f, 0x66, 0x76,
-    0x7a, 0xd3, 0xda, 0xb3, 0x05, 0x69, 0xeb, 0x6f, 0x9a, 0x5a, 0x2c, 0x3d,
-    0xca, 0x19, 0xd9, 0x0c, 0xfe, 0x1c, 0xe2, 0xf7, 0x6e, 0xd6, 0x9d, 0xc7,
-    0x1c, 0x2e, 0xaf, 0xa9, 0xd8, 0x3c, 0xa6, 0xaf, 0xa1, 0xcd, 0x64, 0x72,
-    0x89, 0x8e, 0xd7, 0xe7, 0xff, 0xd4, 0x25, 0xec, 0xf7, 0xd6, 0xfc, 0xc7,
-    0xbd, 0x96, 0x8b, 0x0f, 0xef, 0xd9, 0x2c, 0xfb, 0x04, 0x48, 0xcb, 0x47,
-    0x5b, 0x56, 0x86, 0xf3, 0x6a, 0x87, 0x41, 0x42, 0x6b, 0x23, 0x42, 0x12,
-    0x59, 0xf1, 0x69, 0xb5, 0x74, 0xa7, 0x81, 0xb5, 0x74, 0xa6, 0xe3, 0x84,
-    0xa1, 0xe7, 0xbd, 0x44, 0xdc, 0x10, 0x4d, 0x5c, 0x24, 0x73, 0x5f, 0x3f,
-    0xfe, 0xad, 0x30, 0x55, 0x0e, 0xb6, 0x4c, 0x36, 0x2d, 0x1d, 0x9f, 0xb7,
-    0x04, 0xd3, 0xff, 0xf9, 0x9d, 0x10, 0xf7, 0xd3, 0x57, 0xa0, 0xde, 0x0e,
-    0xae, 0xb4, 0xfd, 0x6b, 0xf7, 0xe3, 0x7d, 0x69, 0xff, 0x55, 0x39, 0xfa,
-    0xf0, 0xcd, 0x75, 0xa1, 0xc3, 0xed, 0xf9, 0x7c, 0xe7, 0xe7, 0xd6, 0x9f,
-    0x3e, 0xb5, 0x5c, 0xa5, 0x22, 0x70, 0xf0, 0xb4, 0x37, 0x3d, 0xaf, 0x75,
-    0xb5, 0xa6, 0xed, 0x96, 0x9b, 0xb6, 0x5a, 0x7d, 0xe3, 0xe8, 0x4e, 0x46,
-    0xb3, 0xb1, 0x68, 0x64, 0x46, 0x8a, 0x7c, 0xff, 0xda, 0xdd, 0x1b, 0xd3,
-    0x77, 0x56, 0xe9, 0x69, 0xfd, 0x68, 0x17, 0xfd, 0x37, 0x2b, 0x4f, 0x76,
-    0x6c, 0x7d, 0xcf, 0xf3, 0x48, 0xf3, 0xba, 0xaa, 0xd5, 0xa7, 0xbb, 0xf9,
-    0x7d, 0x68, 0x63, 0xfb, 0xc3, 0xae, 0x07, 0xe7, 0xaf, 0xe5, 0xba, 0x5a,
-    0x77, 0x1c, 0x70, 0x94, 0xfa, 0xbd, 0x8f, 0x97, 0x48, 0xe5, 0xfc, 0xfa,
-    0x8f, 0xc7, 0x1c, 0x2d, 0x0c, 0x7c, 0x5a, 0x38, 0x9f, 0xfa, 0x86, 0xae,
-    0x1b, 0x20, 0x61, 0x5a, 0x7b, 0x8c, 0x17, 0xad, 0x3f, 0xda, 0x6b, 0x7b,
-    0xcd, 0xec, 0x96, 0x96, 0xd6, 0x8a, 0x3c, 0x90, 0x39, 0x9d, 0xc7, 0x1c,
-    0x25, 0x3f, 0x16, 0x7b, 0xd9, 0x69, 0x23, 0x97, 0xf3, 0xea, 0xee, 0xa9,
-    0xc5, 0xa5, 0x7e, 0x88, 0xa2, 0xf9, 0xf8, 0x9e, 0x4d, 0xe3, 0xf9, 0x4d,
-    0x0e, 0xa3, 0x0c, 0x91, 0x6d, 0x3b, 0x81, 0x8e, 0x06, 0x19, 0x77, 0xfd,
-    0xe4, 0x95, 0x0c, 0xff, 0x6c, 0xbf, 0x85, 0xae, 0xe3, 0x18, 0xc2, 0xeb,
-    0xc2, 0x97, 0x51, 0xec, 0xcf, 0xcc, 0x6f, 0xff, 0x34, 0xb4, 0xff, 0xf1,
-    0x1a, 0xd7, 0xdf, 0xa5, 0x08, 0xd1, 0x76, 0xb4, 0x6c, 0xff, 0x34, 0x59,
-    0x23, 0xbb, 0xd0, 0x9f, 0xd7, 0x77, 0x65, 0x3d, 0x6a, 0x41, 0xeb, 0x42,
-    0xa6, 0x9c, 0xaa, 0xb2, 0x50, 0x2b, 0xe5, 0x55, 0xf3, 0x2e, 0x6a, 0xab,
-    0x90, 0x1f, 0x71, 0xdb, 0x84, 0xad, 0xdb, 0x65, 0xa9, 0x14, 0xad, 0xc7,
-    0x27, 0xd2, 0xbf, 0x3b, 0x78, 0x69, 0x5e, 0x5b, 0xa4, 0x2f, 0x65, 0x61,
-    0x17, 0xdc, 0xb9, 0x91, 0x9f, 0x5c, 0xbd, 0x6c, 0x25, 0xaa, 0xd5, 0x43,
-    0xc8, 0xdf, 0x1d, 0x43, 0xd7, 0x88, 0x64, 0x75, 0x4b, 0x75, 0xf5, 0x3e,
-    0xda, 0xed, 0x18, 0xbc, 0x1e, 0x14, 0x59, 0x0f, 0xc5, 0x03, 0x54, 0xfe,
-    0x3d, 0x7c, 0x33, 0x01, 0x51, 0x71, 0xcf, 0xe3, 0xd7, 0xc3, 0x30, 0x15,
-    0x17, 0x5c, 0xff, 0xc7, 0xc7, 0x9e, 0xbe, 0x19, 0x80, 0xa8, 0x94, 0x61,
-    0xa1, 0x4c, 0x4e, 0xf2, 0x8e, 0x4f, 0x3d, 0x9e, 0x01, 0xe1, 0x43, 0xd3,
-    0xae, 0x7f, 0x98, 0xa3, 0x1b, 0xb9, 0xc6, 0x8f, 0x1d, 0x8f, 0x27, 0xff,
-    0x1c, 0xd8, 0xf3, 0xd7, 0xc3, 0x30, 0x15, 0x12, 0xd4, 0xfb, 0xe1, 0x98,
-    0x0a, 0x88, 0xde, 0x7f, 0xd8, 0xf3, 0xd7, 0xc3, 0x30, 0x15, 0x12, 0xfc,
-    0x8f, 0x47, 0xf0, 0x63, 0x19, 0xfc, 0x7a, 0xf8, 0x66, 0x02, 0xa2, 0xab,
-    0x9f, 0xef, 0x74, 0x35, 0x6e, 0xb0, 0xcb, 0x4d, 0xc9, 0x2d, 0x3f, 0x57,
-    0xc3, 0x30, 0x15, 0x12, 0x04, 0x74, 0x3c, 0xc3, 0x8b, 0x4f, 0xaf, 0x83,
-    0x96, 0xad, 0x0f, 0x3c, 0xab, 0x49, 0x27, 0xff, 0x53, 0x9b, 0xc3, 0x6b,
-    0x6d, 0xaf, 0x0c, 0xb4, 0x7b, 0x4c, 0xf7, 0x21, 0x9f, 0xe8, 0x8e, 0x7f,
-    0xe1, 0xab, 0x0f, 0xd4, 0xc2, 0x35, 0xa5, 0xa0, 0xe7, 0xfb, 0xf3, 0x99,
-    0xfc, 0x7a, 0xf8, 0x66, 0x02, 0xa2, 0xc8, 0x9f, 0xc7, 0xaf, 0x86, 0x60,
-    0x2a, 0x2d, 0x79, 0xfc, 0x7a, 0xf8, 0x66, 0x02, 0xa2, 0xe4, 0x9f, 0x7c,
-    0x33, 0x01, 0x51, 0x76, 0x4f, 0xfb, 0x1e, 0x7a, 0xf8, 0x66, 0x02, 0xa2,
-    0x8e, 0x91, 0xe8, 0xfe, 0x0c, 0x63, 0x27, 0xad, 0x3e, 0xf8, 0x66, 0x02,
-    0xa2, 0x95, 0x9f, 0xff, 0xfe, 0xdb, 0x58, 0xdb, 0x27, 0x59, 0xce, 0xc8,
-    0xe1, 0xb2, 0x73, 0x6d, 0x65, 0x2d, 0x33, 0xcf, 0x48, 0xb0, 0x70, 0xc6,
-    0x63, 0x9a, 0xd4, 0x77, 0xe4, 0x30, 0x22, 0xc5, 0xd8, 0x07, 0xc3, 0x2e,
-    0xd2, 0x72, 0x8f, 0xd8, 0xc4, 0x5d, 0x9e, 0x5c, 0xf3, 0x50, 0xb4, 0x75,
-    0x18, 0xb4, 0xff, 0x3c, 0xf5, 0xf0, 0xcc, 0x05, 0x44, 0x71, 0x3f, 0xc4,
-    0x7a, 0xf8, 0x66, 0x02, 0xa2, 0xb5, 0x91, 0xf1, 0x10, 0x7a, 0x42, 0x9f,
-    0xfc, 0x73, 0x63, 0xcf, 0x5f, 0x0c, 0xc0, 0x54, 0x4b, 0x73, 0x55, 0xab,
-    0x4f, 0xee, 0x68, 0xc6, 0x62, 0xba, 0xd1, 0x69, 0xe4, 0x10, 0xb4, 0xed,
-    0xf2, 0xf5, 0xa7, 0x3c, 0xc0, 0xb4, 0xff, 0xfd, 0xbc, 0xb7, 0xbe, 0x77,
-    0x8f, 0xab, 0x8f, 0x99, 0xe9, 0x68, 0x54, 0x43, 0x73, 0xfe, 0xc7, 0x9e,
-    0xbe, 0x19, 0x80, 0xa8, 0x98, 0x26, 0x0a, 0x5a, 0x6f, 0x3b, 0x4a, 0x08,
-    0xd6, 0x7c, 0x52, 0x7f, 0x0d, 0x6b, 0x4d, 0xfb, 0xad, 0x23, 0xb2, 0x72,
-    0x96, 0x11, 0x72, 0x3b, 0x43, 0x60, 0xbe, 0x61, 0x7d, 0x39, 0xfa, 0x20,
-    0x9c, 0x6f, 0x3e, 0x94, 0xff, 0xb1, 0xe7, 0xaf, 0x86, 0x60, 0x2a, 0x26,
-    0x39, 0x1c, 0x8f, 0x90, 0xc3, 0xb3, 0xf3, 0x5f, 0xa6, 0xab, 0x6b, 0x4e,
-    0x61, 0xb1, 0x69, 0xff, 0xff, 0xe7, 0xdf, 0x75, 0xe7, 0x17, 0xdd, 0x05,
-    0x5f, 0xa5, 0x5a, 0xfb, 0x90, 0x92, 0xd3, 0xc1, 0x98, 0x0a, 0x8a, 0xc6,
-    0x7f, 0xdd, 0x55, 0xa1, 0xaf, 0x18, 0x74, 0xb4, 0x7b, 0x4c, 0xc8, 0x0b,
-    0xad, 0x1b, 0xfb, 0xfe, 0x8a, 0xe7, 0xff, 0x30, 0xeb, 0xdf, 0x8c, 0x34,
-    0x0d, 0xf5, 0xa7, 0xfb, 0x9d, 0xd5, 0xed, 0x7b, 0x6d, 0x69, 0xfe, 0x6b,
-    0x5e, 0xe3, 0xf3, 0xf6, 0x2d, 0x14, 0x7e, 0xa4, 0x75, 0x3f, 0xea, 0xe7,
-    0xe5, 0xe5, 0x9d, 0xdd, 0xeb, 0x4f, 0xff, 0xfc, 0x3e, 0x59, 0x41, 0xd0,
-    0x7c, 0x76, 0xe9, 0x56, 0xbe, 0xbc, 0x1e, 0xee, 0xb4, 0xfe, 0xeb, 0x76,
-    0x38, 0xfe, 0xb3, 0xf6, 0x2d, 0x3f, 0xfa, 0x9c, 0xde, 0x1b, 0x5b, 0x6d,
-    0x78, 0x65, 0xa7, 0x6c, 0x8f, 0x4a, 0x9d, 0x41, 0x37, 0x70, 0xbd, 0x12,
-    0x0d, 0x21, 0x75, 0x3e, 0x7a, 0x42, 0x9b, 0xd7, 0x6b, 0x4d, 0xe3, 0x8b,
-    0x4f, 0xb0, 0x6c, 0xf2, 0xeb, 0x47, 0x67, 0xb2, 0x23, 0x37, 0x18, 0x9f,
-    0x79, 0x6d, 0x8d, 0xed, 0x69, 0xf1, 0xa8, 0x59, 0xeb, 0x4f, 0x37, 0xf0,
-    0x56, 0x9e, 0xbd, 0xdb, 0xb5, 0xa1, 0x8f, 0x9b, 0x64, 0xbc, 0x0f, 0xcf,
-    0x99, 0xfd, 0xf8, 0xf5, 0xa7, 0x30, 0xbd, 0x68, 0x70, 0xf0, 0xf4, 0x53,
-    0x3b, 0x7e, 0x8c, 0xb4, 0xfc, 0xc6, 0xa1, 0x2f, 0x6b, 0x4a, 0xeb, 0x41,
-    0x1b, 0xcc, 0x2c, 0x9b, 0xb6, 0x4a, 0x6e, 0x38, 0x4a, 0x08, 0xd7, 0x70,
-    0x2d, 0x3f, 0xb1, 0xe3, 0x5a, 0xd9, 0x24, 0x73, 0x43, 0x3d, 0xce, 0x5b,
-    0x75, 0xa7, 0x30, 0xb8, 0xb4, 0xc2, 0xcb, 0x43, 0x86, 0xbf, 0xe3, 0x73,
-    0xff, 0x7b, 0x21, 0x0b, 0xb1, 0xb2, 0xdd, 0x2d, 0x3b, 0xba, 0x76, 0x5a,
-    0x3d, 0x9f, 0x1f, 0xd1, 0x25, 0xed, 0x69, 0xbf, 0xed, 0x68, 0x23, 0x55,
-    0xe8, 0x4a, 0x7f, 0xf8, 0xb4, 0xcf, 0x2d, 0x6e, 0xad, 0xd7, 0x8c, 0xb4,
-    0x32, 0x72, 0xd4, 0xa4, 0x50, 0x85, 0xda, 0x76, 0x11, 0x42, 0xd2, 0x32,
-    0xd2, 0xde, 0x8b, 0xa7, 0x41, 0x53, 0xf7, 0x6d, 0xba, 0x75, 0x8b, 0x4f,
-    0xc5, 0xaa, 0xde, 0x7b, 0x5a, 0x77, 0x1c, 0x70, 0x94, 0xff, 0xd4, 0x1c,
-    0xb5, 0x9e, 0xab, 0x79, 0x6a, 0x47, 0x2f, 0xe7, 0x8b, 0xee, 0xdc, 0xad,
-    0x2f, 0xad, 0x3e, 0x31, 0x6b, 0xbc, 0x5a, 0x2c, 0x3d, 0xce, 0xb9, 0x2f,
-    0x82, 0x13, 0xf8, 0x0a, 0xe3, 0x4e, 0xb1, 0x69, 0xab, 0x4b, 0x45, 0xa7,
-    0x8d, 0xb3, 0x19, 0xed, 0x0d, 0x3d, 0x69, 0xff, 0xc5, 0x7d, 0xd7, 0x23,
-    0x4e, 0x86, 0xae, 0xb4, 0x7c, 0xfa, 0x74, 0x41, 0x23, 0xb2, 0xf6, 0xb5,
-    0x85, 0xfc, 0xc2, 0x4a, 0x9c, 0x88, 0x8f, 0xeb, 0x46, 0x6e, 0xdc, 0x7a,
-    0xd8, 0xcd, 0xd9, 0x43, 0xb8, 0x5c, 0x29, 0x97, 0x85, 0x8e, 0x9e, 0xfd,
-    0x42, 0x32, 0x7d, 0xf0, 0xcc, 0x05, 0x45, 0x6f, 0x3f, 0xec, 0x79, 0xeb,
-    0xe1, 0x98, 0x0a, 0x89, 0xc2, 0x47, 0xa3, 0xf8, 0x31, 0x8c, 0xde, 0x6d,
-    0x69, 0xf7, 0xc3, 0x30, 0x15, 0x16, 0x8c, 0xfc, 0xd8, 0x3e, 0x73, 0x4b,
-    0x4c, 0x5e, 0xd6, 0x9f, 0xff, 0x58, 0xda, 0x6e, 0x7e, 0xdb, 0xcb, 0x8d,
-    0x76, 0xb4, 0xff, 0x9a, 0xdc, 0xeb, 0xec, 0x73, 0xaf, 0x62, 0xd0, 0xc8,
-    0x9b, 0xda, 0xac, 0xa9, 0xc4, 0x6a, 0x5e, 0x16, 0x52, 0x3b, 0xbc, 0x9b,
-    0xb5, 0x0b, 0x98, 0xc7, 0x71, 0x80, 0x4f, 0x06, 0x60, 0x2a, 0x2d, 0xa9,
-    0xfb, 0x6c, 0x66, 0x2e, 0x56, 0x95, 0x7c, 0xf5, 0xf4, 0x57, 0x3f, 0xc7,
-    0xf7, 0xef, 0x3f, 0xcf, 0x82, 0xb4, 0x1c, 0xf9, 0x7b, 0x27, 0x9f, 0xc7,
-    0xaf, 0x86, 0x60, 0x2a, 0x2e, 0x59, 0xfc, 0x7a, 0xf8, 0x66, 0x02, 0xa2,
-    0xed, 0x86, 0x6c, 0xd6, 0x2c, 0x28, 0x7c, 0xa2, 0xfe, 0x61, 0xbb, 0xee,
-    0x5e, 0x71, 0x4f, 0xd6, 0xf5, 0xe3, 0x67, 0xdc, 0x73, 0xa3, 0x18, 0x55,
-    0xc8, 0xf4, 0x79, 0x3f, 0x8f, 0x5f, 0x0c, 0xc0, 0x54, 0x54, 0xf3, 0x16,
-    0x96, 0x9e, 0x0c, 0xc0, 0x54, 0x57, 0x33, 0xf8, 0xf5, 0xf0, 0xcc, 0x05,
-    0x45, 0x9d, 0x1f, 0x3e, 0x7d, 0x95, 0xcf, 0xff, 0x56, 0x9a, 0xfd, 0x3c,
-    0xbe, 0x99, 0xc7, 0x09, 0x69, 0xff, 0x6c, 0xbf, 0xce, 0xe8, 0x87, 0xda,
-    0xd3, 0xef, 0x86, 0x60, 0x2a, 0x24, 0x29, 0xfe, 0x2b, 0x6f, 0xa1, 0x63,
-    0x5d, 0x69, 0x9e, 0x7a, 0x3e, 0x9e, 0xcc, 0x67, 0x9d, 0xed, 0xb1, 0x96,
-    0x9f, 0xd5, 0xbb, 0xde, 0xbf, 0x62, 0xd2, 0x3f, 0x2a, 0x88, 0x29, 0xf0,
-    0x88, 0x9c, 0x53, 0xc8, 0x54, 0x5c, 0xbb, 0x44, 0xd3, 0xff, 0x8e, 0x6c,
-    0x79, 0xeb, 0xe1, 0x98, 0x0a, 0x89, 0xf2, 0x01, 0x58, 0xff, 0x5e, 0x52,
-    0xe6, 0xdc, 0x27, 0xdf, 0x0c, 0xc0, 0x54, 0x56, 0x53, 0xfe, 0xc7, 0x9e,
-    0xbe, 0x19, 0x80, 0xa8, 0x9b, 0xa6, 0x23, 0xd1, 0xfc, 0x18, 0xc6, 0x7f,
-    0xf1, 0xcd, 0x8f, 0x3d, 0x7c, 0x33, 0x01, 0x51, 0x2b, 0x4f, 0xf8, 0xaf,
-    0xe1, 0x84, 0x9d, 0x79, 0x8b, 0x4f, 0xe1, 0x6f, 0xd3, 0xac, 0x32, 0xd0,
-    0xf3, 0xf2, 0x24, 0x09, 0xf7, 0xc3, 0x30, 0x15, 0x12, 0xe4, 0xff, 0x16,
-    0x3f, 0x42, 0xc6, 0xba, 0xd3, 0xce, 0x88, 0x59, 0x69, 0xf1, 0xcd, 0x8f,
-    0x3b, 0x22, 0xa6, 0x88, 0x76, 0x63, 0x86, 0xd3, 0xff, 0x1f, 0x1e, 0x7a,
-    0xf8, 0x66, 0x02, 0xa2, 0x3b, 0x9f, 0xed, 0x6e, 0x9e, 0x7c, 0x1b, 0xad,
-    0x3f, 0x75, 0x82, 0xc1, 0x42, 0xb4, 0xde, 0x6d, 0x69, 0xf9, 0xdf, 0x1a,
-    0xde, 0x69, 0x69, 0xfd, 0x5c, 0x5d, 0x87, 0x57, 0x5a, 0x7d, 0xf0, 0xcc,
-    0x05, 0x45, 0x43, 0x3d, 0xbd, 0x55, 0x8b, 0x4f, 0xaa, 0xcc, 0x17, 0x4b,
-    0x4f, 0xff, 0xff, 0xe6, 0x7f, 0x4d, 0x6c, 0x9a, 0xfd, 0x2b, 0xc0, 0x67,
-    0x5d, 0x2b, 0xff, 0xa7, 0x5e, 0x66, 0xd6, 0x8a, 0x47, 0x08, 0x91, 0x5c,
-    0xa2, 0x7f, 0xff, 0xbc, 0xce, 0xb9, 0x59, 0xbc, 0x2d, 0x36, 0xcb, 0x57,
-    0xae, 0x56, 0x91, 0xdd, 0xf5, 0x4a, 0x2e, 0xf1, 0x77, 0x58, 0x2f, 0x61,
-    0x85, 0x19, 0x6a, 0x31, 0x2e, 0xa2, 0xe9, 0xf7, 0xc3, 0x30, 0x15, 0x15,
-    0x44, 0xff, 0xb1, 0xe7, 0xaf, 0x86, 0x60, 0x2a, 0x26, 0xb9, 0x1e, 0x8f,
-    0xe0, 0xc6, 0x33, 0xf8, 0xf5, 0xf0, 0xcc, 0x05, 0x45, 0x59, 0x3f, 0xf1,
-    0xf1, 0xe7, 0xaf, 0x86, 0x60, 0x2a, 0x24, 0x49, 0xf7, 0xc3, 0x30, 0x15,
-    0x16, 0x94, 0xff, 0xb1, 0xe7, 0xaf, 0x86, 0x60, 0x2a, 0x27, 0xd9, 0x1e,
-    0x8f, 0xe0, 0xc6, 0x33, 0xff, 0x8e, 0x6c, 0x79, 0xeb, 0xe1, 0x98, 0x0a,
-    0x8a, 0x12, 0x7d, 0xb2, 0xb1, 0xbe, 0xb4, 0xfb, 0xe1, 0x98, 0x0a, 0x8a,
-    0x3e, 0x7f, 0xc2, 0xce, 0x30, 0xb3, 0x9b, 0x65, 0xa7, 0xff, 0xea, 0xe7,
-    0x6d, 0xe8, 0xfa, 0x1c, 0xee, 0xf7, 0x6e, 0xd2, 0x9f, 0x1c, 0xd8, 0xf3,
-    0xb2, 0x3c, 0xa8, 0x9f, 0x46, 0x3d, 0x47, 0x90, 0xcc, 0x88, 0x5b, 0x23,
-    0x6e, 0x7a, 0xbd, 0x26, 0xfb, 0x95, 0x10, 0x10, 0xfc, 0xb4, 0x9d, 0xc3,
-    0xcd, 0xc3, 0x17, 0xb2, 0x7d, 0x46, 0x8b, 0x3f, 0x8f, 0x5f, 0x0c, 0xc0,
-    0x54, 0x44, 0x53, 0xf5, 0x7c, 0x33, 0x01, 0x51, 0x15, 0xcf, 0xf7, 0x5c,
-    0xf5, 0xf0, 0xcc, 0x05, 0x45, 0x71, 0x07, 0x3f, 0xcc, 0x36, 0x9e, 0xad,
-    0xe6, 0x96, 0x9f, 0xd4, 0x5f, 0xef, 0xbf, 0x2e, 0xb4, 0x9d, 0xf1, 0x3d,
-    0x5b, 0x90, 0x4f, 0xff, 0xda, 0xb9, 0x6f, 0x09, 0xe4, 0x3a, 0xf3, 0x7f,
-    0xa5, 0xa7, 0xdf, 0x0c, 0xc0, 0x54, 0x53, 0xd3, 0xf5, 0x5f, 0xa0, 0xe3,
-    0xd6, 0x8e, 0xb1, 0x1c, 0x6c, 0x59, 0x4b, 0x22, 0x63, 0x3f, 0xfb, 0x1e,
-    0x7e, 0x47, 0x38, 0xbd, 0xdb, 0xb5, 0xa0, 0xe8, 0x8a, 0xe4, 0xfe, 0x71,
-    0xf9, 0xa5, 0xa7, 0xcc, 0xfe, 0xfc, 0x7a, 0xd3, 0xc1, 0x98, 0x0a, 0x8a,
-    0xce, 0x1c, 0x3d, 0x4f, 0x94, 0xcf, 0xd6, 0x19, 0x85, 0xf7, 0x5a, 0x73,
-    0x58, 0x4b, 0x4f, 0xb5, 0xdf, 0xa1, 0x7a, 0xd3, 0xbc, 0xcb, 0xad, 0x3e,
-    0xa7, 0x2c, 0xf3, 0xb5, 0xa4, 0x7a, 0x46, 0xe7, 0xc8, 0xf6, 0x5b, 0x83,
-    0x62, 0x55, 0xe8, 0x72, 0x7f, 0xe3, 0xe3, 0xcf, 0x5f, 0x0c, 0xc0, 0x54,
-    0x48, 0xb3, 0xf5, 0x7c, 0x33, 0x01, 0x51, 0x64, 0xcf, 0xfe, 0xd5, 0xfd,
-    0x5c, 0xf5, 0x61, 0x0b, 0xee, 0xb4, 0x1d, 0x10, 0x54, 0x6d, 0x3f, 0x8f,
-    0x5f, 0x0c, 0xc0, 0x54, 0x5b, 0x13, 0xaa, 0xf4, 0xb4, 0xf0, 0x66, 0x02,
-    0xa2, 0xdb, 0x9e, 0xbd, 0x99, 0xf5, 0xa3, 0xe7, 0x9b, 0xa2, 0xb9, 0x1d,
-    0xe8, 0x89, 0xa6, 0x79, 0xd6, 0x6c, 0x96, 0x9f, 0xf7, 0x59, 0xd6, 0x3b,
-    0xbd, 0x6e, 0x85, 0xbb, 0x5a, 0x7e, 0x61, 0x7f, 0x3e, 0x19, 0x69, 0xf7,
-    0xc3, 0x30, 0x15, 0x17, 0x84, 0xf6, 0xba, 0xab, 0x6b, 0x4f, 0xfc, 0xde,
-    0x8d, 0x6b, 0xf5, 0x43, 0xab, 0xad, 0x3e, 0xa1, 0xed, 0xd9, 0x96, 0x9f,
-    0x37, 0xaf, 0x32, 0xeb, 0x4e, 0xd3, 0x76, 0xb4, 0x8f, 0xd6, 0x27, 0x43,
-    0xd6, 0xa1, 0xcb, 0x13, 0xa8, 0xba, 0xd3, 0x1d, 0x92, 0x76, 0x8c, 0x25,
-    0x3a, 0x29, 0x9c, 0x55, 0x6a, 0xd3, 0xef, 0x86, 0x60, 0x2a, 0x2f, 0x49,
-    0xff, 0x0e, 0x69, 0xed, 0xef, 0x45, 0x62, 0xd3, 0xea, 0x36, 0xf3, 0x95,
-    0xa4, 0x7e, 0x51, 0x65, 0x43, 0x7e, 0x8c, 0x5d, 0x8f, 0xe1, 0x99, 0x2e,
-    0x76, 0x42, 0xe2, 0xa3, 0xe3, 0x02, 0x42, 0x8d, 0x33, 0xeb, 0x86, 0x86,
-    0x7f, 0x64, 0x43, 0x0c, 0x5f, 0x23, 0xc9, 0xe2, 0x34, 0x59, 0xbc, 0xda,
-    0xd3, 0xd5, 0xbc, 0xd2, 0xd3, 0xfa, 0x8b, 0xfd, 0xf7, 0xe5, 0xd6, 0x93,
-    0xbe, 0x27, 0xab, 0x72, 0x09, 0xf1, 0x69, 0xad, 0xb1, 0x69, 0xf7, 0xc3,
-    0x30, 0x15, 0x11, 0x1c, 0xff, 0xf6, 0xfc, 0xbd, 0xe8, 0xc3, 0x4e, 0xba,
-    0x33, 0xba, 0x5a, 0x7f, 0xcf, 0x6b, 0x3f, 0x5a, 0xd1, 0x69, 0x69, 0xfe,
-    0xaf, 0xd5, 0xeb, 0x06, 0xc5, 0xa7, 0xff, 0xf9, 0xb7, 0x85, 0xa6, 0xd8,
-    0xd6, 0xb6, 0x5b, 0xa2, 0xe1, 0x69, 0xac, 0x32, 0x53, 0x71, 0xc2, 0x53,
-    0xfe, 0x38, 0x6c, 0x9c, 0xdb, 0x58, 0x7e, 0xcd, 0x7f, 0x02, 0xf3, 0xce,
-    0x9b, 0x4c, 0xb4, 0x3c, 0xfe, 0x89, 0x62, 0x7e, 0xeb, 0x8d, 0x6f, 0x34,
-    0xb4, 0xfc, 0xde, 0xe8, 0x4b, 0xda, 0xd3, 0xf5, 0x69, 0xdb, 0x55, 0xb5,
-    0xa2, 0x91, 0x18, 0x25, 0xf7, 0x2e, 0x9f, 0xff, 0x80, 0xff, 0xc1, 0x2d,
-    0x1f, 0xed, 0xa1, 0xce, 0xd6, 0x87, 0x79, 0x5f, 0xe7, 0x58, 0xd8, 0xc5,
-    0x94, 0x50, 0x06, 0x36, 0xac, 0x91, 0xf7, 0xcd, 0xb2, 0x30, 0xbd, 0x42,
-    0xb5, 0xd1, 0x74, 0xfb, 0xe1, 0x98, 0x0a, 0x88, 0xba, 0x7d, 0xae, 0xfd,
-    0x0b, 0xd2, 0x91, 0xe8, 0xf6, 0xf0, 0xc6, 0x0e, 0x99, 0x73, 0xe3, 0x08,
-    0x9f, 0xf8, 0xd8, 0xf3, 0xd7, 0xc3, 0x30, 0x15, 0x13, 0x34, 0xfd, 0xd6,
-    0x8e, 0xed, 0xdf, 0xbb, 0x69, 0x69, 0xd6, 0xb5, 0xd6, 0x9c, 0x04, 0x65,
-    0xa6, 0xea, 0xeb, 0x6b, 0x4f, 0xda, 0xab, 0x2b, 0xb7, 0x16, 0x8e, 0xb6,
-    0x79, 0xce, 0x0f, 0xcf, 0x83, 0x36, 0x4e, 0x2d, 0x3f, 0xfe, 0xee, 0xd7,
-    0xef, 0xc6, 0xf9, 0xf6, 0x41, 0x9f, 0x5a, 0x7f, 0xe7, 0x62, 0xd1, 0x01,
-    0x73, 0xaa, 0x05, 0xa7, 0xff, 0xfb, 0xcc, 0x10, 0x1a, 0xe7, 0x7e, 0x74,
-    0xdb, 0x3f, 0xed, 0x62, 0xd0, 0xc9, 0x82, 0x52, 0xbe, 0xd1, 0x27, 0xff,
-    0xdc, 0x90, 0xd9, 0x57, 0x2c, 0xd9, 0xf8, 0xe3, 0x84, 0xa7, 0xeb, 0x5f,
-    0x7e, 0xfc, 0x71, 0x69, 0xe0, 0xcc, 0x05, 0x45, 0x9f, 0x3f, 0xe2, 0xdb,
-    0x3c, 0xb4, 0xda, 0xba, 0xd3, 0xff, 0xc5, 0xfd, 0xe7, 0x4a, 0x74, 0x35,
-    0x7a, 0x15, 0xa7, 0x71, 0xc7, 0x09, 0x4f, 0xfb, 0x1f, 0x71, 0xa0, 0xe6,
-    0xbe, 0x91, 0xcb, 0xf9, 0xfe, 0x6d, 0x97, 0x23, 0x98, 0xe2, 0xd3, 0xfc,
-    0x43, 0xcf, 0xae, 0x7c, 0xd5, 0xd6, 0x80, 0x54, 0x3c, 0xe2, 0xc7, 0xcc,
-    0x8c, 0x57, 0xb3, 0xce, 0xdb, 0xb4, 0x96, 0xe8, 0xde, 0x7f, 0xbf, 0x9c,
-    0x6c, 0x9b, 0xec, 0xb4, 0xff, 0xff, 0xfd, 0x55, 0xdd, 0xea, 0x87, 0xdf,
-    0xaf, 0x8b, 0x56, 0xcf, 0x71, 0xab, 0x0d, 0x46, 0x5a, 0x75, 0xda, 0xc5,
-    0xa7, 0x75, 0x56, 0xd6, 0x87, 0xa3, 0x0e, 0xf0, 0x89, 0xd0, 0xe4, 0xed,
-    0xf9, 0xc2, 0xd3, 0xbb, 0xf0, 0x16, 0x9d, 0xaa, 0xf4, 0xb4, 0x72, 0x7b,
-    0x16, 0x8f, 0x10, 0xec, 0xfd, 0xf2, 0x75, 0x43, 0x75, 0xa7, 0xdb, 0x16,
-    0xaf, 0xa9, 0x3f, 0xe2, 0xfb, 0xeb, 0xf6, 0x79, 0x9c, 0xaa, 0x20, 0xd3,
-    0x9a, 0x59, 0xf6, 0x01, 0x19, 0x96, 0x9f, 0x9f, 0xb1, 0xcb, 0x74, 0xb4,
-    0xa8, 0x0f, 0x44, 0x49, 0x27, 0xfe, 0xa1, 0xb7, 0x55, 0xf2, 0xb3, 0x0c,
-    0xb4, 0xc4, 0x2b, 0x4f, 0xd9, 0xc6, 0xab, 0x7a, 0x63, 0xd7, 0xf6, 0x87,
-    0x0c, 0x9e, 0x13, 0xd4, 0xaa, 0x15, 0xc2, 0xf9, 0x3f, 0x7e, 0xb9, 0xbe,
-    0xd9, 0x69, 0xff, 0xfd, 0xe0, 0xe7, 0xbe, 0x9e, 0x87, 0x35, 0x72, 0xb7,
-    0x65, 0xc2, 0xd3, 0xfe, 0x35, 0x6a, 0xfe, 0xaf, 0x8f, 0xa5, 0xa7, 0xeb,
-    0xdd, 0xbf, 0xa6, 0x58, 0xe6, 0xfe, 0x7b, 0x74, 0x4e, 0x96, 0x9f, 0xae,
-    0x5f, 0xaf, 0x3e, 0xb4, 0x12, 0x22, 0xf6, 0x79, 0xa2, 0x29, 0x8c, 0xef,
-    0xaa, 0x2f, 0xc9, 0xff, 0x9f, 0xaf, 0x1e, 0xf3, 0x6b, 0x4c, 0x65, 0xa7,
-    0xfe, 0x2a, 0x1a, 0xab, 0xf4, 0x7d, 0xcc, 0xb4, 0x5a, 0x88, 0x9b, 0xa3,
-    0x4c, 0x4e, 0x2d, 0x3b, 0x45, 0x62, 0xd3, 0x85, 0x81, 0x68, 0xe8, 0x79,
-    0x66, 0x16, 0x11, 0xc8, 0x64, 0xdf, 0xf9, 0x2f, 0xa8, 0x58, 0xe3, 0x7c,
-    0xff, 0xff, 0xce, 0xcd, 0xb2, 0x31, 0xdc, 0x7e, 0x7f, 0xd6, 0xca, 0xdb,
-    0x81, 0x58, 0xb4, 0xfd, 0x9f, 0x6d, 0xfa, 0xe5, 0x69, 0xee, 0x32, 0xae,
-    0xb4, 0xff, 0x3c, 0xd8, 0xfd, 0x5d, 0xbd, 0xad, 0x0c, 0x7b, 0x78, 0x43,
-    0x3d, 0x57, 0x21, 0x5a, 0x31, 0x19, 0x23, 0x08, 0xaf, 0x08, 0x27, 0xbd,
-    0x79, 0x97, 0x5a, 0x7e, 0x76, 0xd5, 0x60, 0x82, 0xd3, 0xfd, 0x7e, 0xca,
-    0xdb, 0x5f, 0x5a, 0x5a, 0x36, 0x7d, 0x1a, 0x2d, 0x86, 0x45, 0x75, 0x42,
-    0x32, 0x67, 0x3c, 0x5a, 0x46, 0x5a, 0x2d, 0x35, 0x0e, 0xe0, 0xc4, 0xfe,
-    0xcc, 0xb5, 0xe2, 0xdc, 0xad, 0x3f, 0xf8, 0x49, 0xae, 0x38, 0xfe, 0x97,
-    0xaf, 0xad, 0x3f, 0xff, 0xed, 0x95, 0xba, 0xab, 0x75, 0xff, 0xb6, 0xbb,
-    0xf4, 0x2f, 0xdd, 0x2d, 0x3d, 0xcf, 0x38, 0x2b, 0x4f, 0xfb, 0x36, 0x05,
-    0x9d, 0x2f, 0x9b, 0x5a, 0x19, 0x37, 0x0e, 0x49, 0xe8, 0xc8, 0x12, 0x09,
-    0xc3, 0x64, 0x53, 0xff, 0x50, 0xdb, 0xaa, 0xf9, 0x59, 0x86, 0x5a, 0x7d,
-    0x5a, 0x79, 0xb6, 0xb4, 0xfa, 0xdb, 0x8b, 0x19, 0x68, 0x64, 0x48, 0xdd,
-    0x0f, 0xc2, 0x79, 0xbb, 0xda, 0xd3, 0xf5, 0x8e, 0x3f, 0xac, 0xfd, 0x8b,
-    0x4f, 0xef, 0x7b, 0xad, 0x6c, 0xb4, 0xb4, 0xc5, 0xf5, 0xa3, 0xad, 0x9f,
-    0xf9, 0x1b, 0x6c, 0xd2, 0x7f, 0xee, 0x5b, 0x9f, 0xb6, 0x88, 0x0b, 0x95,
-    0xa7, 0xed, 0xf9, 0x63, 0x9b, 0x25, 0xa3, 0x93, 0xf4, 0xda, 0x24, 0x8f,
-    0xd6, 0xdb, 0x20, 0x87, 0x78, 0xfd, 0xdd, 0x8e, 0x33, 0x45, 0x85, 0x3c,
-    0xc6, 0x55, 0x52, 0x93, 0x7d, 0xbb, 0x5b, 0x0f, 0xa2, 0x84, 0x6b, 0x91,
-    0xf9, 0x7d, 0x00, 0xc5, 0xbb, 0x95, 0x61, 0x88, 0x3d, 0xc6, 0x82, 0x30,
-    0xe2, 0xbc, 0x77, 0xda, 0x87, 0x37, 0x06, 0x1d, 0x50, 0x96, 0xf5, 0x0a,
-    0x88, 0x3b, 0x67, 0xc9, 0xba, 0xc9, 0x56, 0x7f, 0xf1, 0xcd, 0x8f, 0x3d,
-    0x7c, 0x33, 0x01, 0x51, 0x36, 0x4f, 0xe3, 0xd7, 0xc3, 0x30, 0x15, 0x15,
-    0x6c, 0xfe, 0x7b, 0xfc, 0xd0, 0xb3, 0xd6, 0x9e, 0xad, 0xe6, 0x96, 0x93,
-    0xbf, 0x47, 0xa6, 0x26, 0x73, 0xef, 0x86, 0x60, 0x2a, 0x2b, 0x49, 0xff,
-    0xe0, 0x6f, 0xd7, 0x78, 0x6c, 0x7b, 0x10, 0x2d, 0x3f, 0xfc, 0xfb, 0xd0,
-    0xb1, 0xb2, 0xb5, 0xa6, 0x32, 0xd3, 0x6b, 0x4c, 0x89, 0x7c, 0x4b, 0x9f,
-    0xcc, 0xeb, 0xd6, 0x85, 0xbb, 0x5a, 0x7e, 0xb2, 0xb6, 0x54, 0x65, 0xa7,
-    0xfa, 0x9d, 0x85, 0xb8, 0xb5, 0xf7, 0x5a, 0x7f, 0x3e, 0xb5, 0x83, 0xdf,
-    0x8b, 0x48, 0xfd, 0x62, 0x7e, 0x34, 0x56, 0x50, 0xc8, 0xd9, 0x6e, 0x1b,
-    0x09, 0x66, 0x8f, 0x27, 0xf1, 0xeb, 0xe1, 0x98, 0x0a, 0x8b, 0x02, 0x7d,
-    0xf0, 0xcc, 0x05, 0x44, 0xeb, 0x3f, 0xff, 0xb6, 0xd6, 0x73, 0x46, 0x3d,
-    0xef, 0x5b, 0x2b, 0xf9, 0x62, 0xd3, 0xe3, 0x9b, 0x1e, 0x7a, 0x44, 0xab,
-    0x86, 0x33, 0xf9, 0xf7, 0x3f, 0xbf, 0x6c, 0x65, 0xa7, 0xdf, 0x0c, 0xc0,
-    0x54, 0x5b, 0x33, 0xfe, 0xed, 0xae, 0x7d, 0x90, 0x67, 0xd6, 0x91, 0xe8,
-    0xfb, 0xb0, 0xc6, 0x78, 0x33, 0x01, 0x51, 0x73, 0x48, 0xcb, 0x47, 0xcd,
-    0xdf, 0x05, 0x73, 0x38, 0x65, 0xa4, 0x7a, 0x37, 0x3c, 0x11, 0x4f, 0xe3,
-    0xd7, 0xc3, 0x30, 0x15, 0x17, 0x7c, 0xf1, 0xfd, 0xf3, 0xda, 0xd0, 0xcd,
-    0xd2, 0xed, 0x56, 0x81, 0xc0, 0x65, 0x6a, 0x99, 0x4a, 0x80, 0xfb, 0x89,
-    0xa1, 0xa3, 0x88, 0x1d, 0xc2, 0x96, 0xf0, 0x9a, 0xd1, 0x3f, 0xa3, 0xc9,
-    0xf5, 0xee, 0x6c, 0x7a, 0xd3, 0xff, 0x5a, 0x1e, 0x65, 0xba, 0xaa, 0x1f,
-    0x6b, 0x4e, 0x1c, 0x3b, 0x1f, 0x6e, 0x89, 0xe7, 0xf0, 0xd9, 0x4e, 0xda,
-    0x6f, 0x6b, 0x4f, 0xbe, 0x19, 0x80, 0xa8, 0x95, 0xe7, 0xfc, 0x39, 0xc7,
-    0x3b, 0x6b, 0x2b, 0x85, 0xa7, 0xff, 0xe7, 0xd1, 0x77, 0x46, 0x2d, 0x5d,
-    0x8d, 0x96, 0xe9, 0x69, 0xef, 0x33, 0xef, 0x5a, 0x7f, 0xff, 0x16, 0xb0,
-    0xd8, 0x3d, 0xef, 0x8c, 0x1b, 0x00, 0xac, 0x5a, 0x39, 0x44, 0x16, 0x11,
-    0x47, 0x29, 0x9f, 0xd2, 0x06, 0xe1, 0xb9, 0x3b, 0x1e, 0x76, 0x4f, 0x76,
-    0x8d, 0xef, 0x1b, 0x84, 0xed, 0x37, 0x29, 0x4f, 0xfe, 0xde, 0x16, 0x99,
-    0xe5, 0xfb, 0x3c, 0xed, 0x29, 0xfd, 0x80, 0x7e, 0x7e, 0xee, 0x1d, 0x8f,
-    0x9e, 0xe3, 0x92, 0x38, 0x2b, 0x0a, 0x34, 0xa0, 0xe7, 0x50, 0xad, 0x9f,
-    0xfc, 0x73, 0x63, 0xcf, 0x5f, 0x0c, 0xc0, 0x54, 0x4c, 0x33, 0xff, 0x85,
-    0x9d, 0x0b, 0x5a, 0x7e, 0xb6, 0xee, 0xee, 0xf5, 0xa7, 0xff, 0x7f, 0x3b,
-    0x3f, 0xbd, 0x3f, 0x86, 0xbb, 0xd6, 0x9a, 0x8f, 0xca, 0x29, 0x7d, 0x2b,
-    0xcf, 0xfc, 0xef, 0xd5, 0xaf, 0xf3, 0x34, 0x2c, 0xf5, 0xa7, 0xf3, 0x65,
-    0x9a, 0xf7, 0x9f, 0x5a, 0x7d, 0x9f, 0x7e, 0x19, 0x68, 0x13, 0xda, 0xf0,
-    0xd2, 0x7e, 0x33, 0x50, 0xeb, 0xa9, 0x69, 0x5d, 0x69, 0xf3, 0x50, 0xeb,
-    0xa9, 0x69, 0xfb, 0x65, 0xab, 0xe5, 0xbd, 0x0f, 0x99, 0xc2, 0xe3, 0x08,
-    0x4f, 0xff, 0xf8, 0x6b, 0x87, 0x6d, 0x56, 0xfa, 0x0d, 0x58, 0x54, 0x36,
-    0xbe, 0xeb, 0x4f, 0xff, 0x36, 0x87, 0x3b, 0xdd, 0x17, 0x3e, 0x6a, 0xeb,
-    0x4f, 0xce, 0xbd, 0x68, 0x5b, 0xb5, 0xa7, 0xff, 0x36, 0xbb, 0x67, 0xd5,
-    0xba, 0xb3, 0xce, 0x16, 0x86, 0x3f, 0xf2, 0x31, 0x9f, 0xae, 0x5e, 0xcd,
-    0x9a, 0x5a, 0x7f, 0xff, 0xdf, 0xa7, 0x4c, 0x3a, 0xe9, 0xe8, 0x5b, 0x78,
-    0x5a, 0x6d, 0x5d, 0x69, 0x55, 0xa8, 0x9c, 0xf9, 0x74, 0xff, 0xfb, 0x63,
-    0x5a, 0xd9, 0x55, 0xba, 0xa7, 0x4d, 0x75, 0xa7, 0x37, 0x7e, 0x96, 0x8a,
-    0x3f, 0x31, 0x55, 0x9e, 0xcf, 0x5c, 0xd2, 0xd2, 0x3f, 0x58, 0xb8, 0xb5,
-    0xcc, 0x28, 0xc2, 0x11, 0x0e, 0x2a, 0xfd, 0xc3, 0x70, 0xcf, 0x18, 0x5e,
-    0x6a, 0x13, 0x9e, 0x10, 0x4f, 0xbe, 0x19, 0x80, 0xa8, 0xab, 0xa7, 0xf9,
-    0xe7, 0xaf, 0x86, 0x60, 0x2a, 0x23, 0xc9, 0x1e, 0x8f, 0xcf, 0x0c, 0x67,
-    0xf1, 0xeb, 0xe1, 0x98, 0x0a, 0x8b, 0x06, 0x7f, 0x1e, 0xbe, 0x19, 0x80,
-    0xa8, 0xb2, 0xa7, 0xf1, 0xeb, 0xe1, 0x98, 0x0a, 0x8b, 0x4e, 0x7f, 0x55,
-    0xfa, 0x7f, 0xfe, 0x6d, 0x69, 0xe0, 0xcc, 0x05, 0x45, 0xb9, 0x3f, 0xf3,
-    0x57, 0xe8, 0x7a, 0x6e, 0xad, 0xe1, 0x68, 0xf9, 0xf8, 0x5c, 0xae, 0x7f,
-    0x98, 0x7c, 0x33, 0x5f, 0x44, 0xb4, 0xfe, 0xcc, 0xb3, 0x96, 0xaf, 0xad,
-    0x3f, 0xec, 0x79, 0xeb, 0xe1, 0x98, 0x0a, 0x8a, 0x1e, 0x7f, 0xe3, 0x67,
-    0x2d, 0xce, 0xc8, 0x48, 0xcb, 0x4f, 0xfd, 0xe3, 0xf7, 0x9f, 0xb7, 0x4c,
-    0x56, 0x2d, 0x3f, 0xef, 0x3f, 0xdf, 0xf0, 0x75, 0x5d, 0xad, 0x3f, 0x5f,
-    0x2d, 0xbe, 0x89, 0x69, 0xf8, 0x7a, 0xca, 0xfb, 0x5d, 0x69, 0xff, 0xfa,
-    0xb9, 0xdb, 0x7a, 0x3e, 0x87, 0x3b, 0xbd, 0xdb, 0xb4, 0xa4, 0x77, 0xaa,
-    0xfc, 0xa8, 0x53, 0x11, 0x13, 0x86, 0xe6, 0x32, 0xc4, 0x7e, 0xd0, 0xee,
-    0x8d, 0xa4, 0x0f, 0x0b, 0x7a, 0x8c, 0x27, 0xf1, 0xeb, 0xe1, 0x98, 0x0a,
-    0x8b, 0xce, 0x19, 0x97, 0x36, 0xf4, 0x5e, 0x61, 0xf1, 0x53, 0x91, 0x76,
-    0xc6, 0x33, 0xf2, 0x63, 0x1e, 0x6c, 0xf0, 0x65, 0x9c, 0x3a, 0x85, 0x44,
-    0xfe, 0x3d, 0x7c, 0x33, 0x01, 0x51, 0x4b, 0x4f, 0xe3, 0xd7, 0xc3, 0x30,
-    0x15, 0x16, 0x14, 0xfe, 0x3d, 0x7c, 0x33, 0x01, 0x51, 0x65, 0xcf, 0x1f,
-    0xdf, 0x5a, 0x3b, 0xa5, 0xa7, 0x1f, 0xd1, 0x96, 0x95, 0xc0, 0xf3, 0xfc,
-    0x31, 0x9f, 0x67, 0xeb, 0xdd, 0x8b, 0x4f, 0xf0, 0xb7, 0x0d, 0x4e, 0x9a,
-    0xeb, 0x4f, 0xd9, 0xf6, 0xd6, 0x6d, 0x69, 0x9a, 0xeb, 0x46, 0xcf, 0x01,
-    0xd1, 0x5c, 0xfc, 0x59, 0x7e, 0xef, 0xe2, 0xd2, 0x7a, 0xd2, 0x7a, 0xd2,
-    0x7a, 0xd0, 0xc6, 0xc3, 0xd8, 0x81, 0x08, 0x4c, 0x4c, 0xb4, 0xfc, 0x2c,
-    0x61, 0x6a, 0x5a, 0x39, 0x37, 0xae, 0x0a, 0x4c, 0xc6, 0x5a, 0x7f, 0xfe,
-    0x7b, 0x0f, 0x8f, 0x7b, 0x6b, 0x74, 0x6f, 0x4d, 0xda, 0xd3, 0x01, 0xd9,
-    0x52, 0x5d, 0x85, 0x1c, 0x94, 0xd3, 0xc0, 0x12, 0x62, 0xf5, 0xda, 0xfa,
-    0x88, 0xfd, 0x0a, 0xcf, 0xfe, 0x39, 0xb1, 0xe7, 0xaf, 0x86, 0x60, 0x2a,
-    0x28, 0xc9, 0xfc, 0x76, 0x74, 0xdf, 0x6e, 0xd6, 0x87, 0xae, 0x31, 0xfc,
-    0xf0, 0xc7, 0x99, 0x2b, 0x5a, 0xf0, 0x8e, 0xd2, 0x9c, 0xff, 0xc7, 0xc7,
-    0x9e, 0xbe, 0x19, 0x80, 0xa8, 0x8e, 0x67, 0xff, 0x1c, 0xd8, 0xf3, 0xd7,
-    0xc3, 0x30, 0x15, 0x13, 0x94, 0xfe, 0x3d, 0x7c, 0x33, 0x01, 0x51, 0x66,
-    0x4f, 0xf7, 0x7f, 0x6d, 0x6f, 0x2d, 0x7a, 0xd3, 0xfa, 0xaf, 0xff, 0xd5,
-    0xb7, 0x5a, 0x47, 0x63, 0xed, 0x79, 0xd4, 0xfe, 0x3d, 0x7c, 0x33, 0x01,
-    0x51, 0x6e, 0xcf, 0xfe, 0x39, 0xb1, 0xe7, 0xaf, 0x86, 0x60, 0x2a, 0x29,
-    0x09, 0xff, 0x8f, 0x8f, 0x3d, 0x7c, 0x33, 0x01, 0x51, 0x29, 0x45, 0x8a,
-    0x93, 0x1c, 0x4d, 0x32, 0x9f, 0x70, 0xa9, 0x12, 0x7d, 0x1e, 0x3b, 0x29,
-    0xcf, 0xfb, 0x1e, 0x7a, 0xf8, 0x66, 0x02, 0xa2, 0x76, 0x9f, 0xff, 0x17,
-    0x3e, 0x19, 0x9d, 0xb3, 0x91, 0x61, 0xa0, 0x5a, 0x47, 0x32, 0x27, 0x71,
-    0x1e, 0x7f, 0xec, 0x36, 0xe8, 0x33, 0x6d, 0xe9, 0xeb, 0x4f, 0xfc, 0x35,
-    0xbc, 0xb2, 0xae, 0x39, 0x6a, 0xd3, 0x75, 0x1f, 0x94, 0x42, 0xdd, 0x0e,
-    0x0c, 0x8e, 0x0e, 0xa8, 0x56, 0xcf, 0xbe, 0x19, 0x80, 0xa8, 0x8b, 0x27,
-    0xfd, 0x8f, 0x3d, 0x7c, 0x33, 0x01, 0x51, 0x2e, 0xcf, 0xff, 0xd5, 0xce,
-    0xdb, 0xd1, 0xf4, 0x39, 0xdd, 0xee, 0xdd, 0xa5, 0x23, 0xd2, 0x35, 0x8c,
-    0x63, 0xd4, 0x8f, 0x3f, 0xf8, 0xe6, 0xc7, 0x9e, 0xbe, 0x19, 0x80, 0xa8,
-    0x98, 0xa7, 0xdf, 0x0c, 0xc0, 0x54, 0x55, 0x32, 0xa5, 0xa2, 0x8f, 0x03,
-    0xd9, 0x8c, 0xff, 0xff, 0xef, 0xe6, 0xed, 0x7d, 0x68, 0xfb, 0xcb, 0xfc,
-    0xb8, 0xd6, 0xcb, 0xef, 0x5a, 0x0e, 0x89, 0xcc, 0x23, 0x9f, 0xfc, 0x73,
-    0x63, 0xcf, 0x5f, 0x0c, 0xc0, 0x54, 0x4e, 0x93, 0xf8, 0xb3, 0xec, 0xfc,
-    0x74, 0xb4, 0xf9, 0xc6, 0x71, 0xae, 0xb4, 0xfd, 0xc5, 0x13, 0xaa, 0x15,
-    0xa0, 0x8f, 0x56, 0xe5, 0x13, 0x8b, 0x6c, 0xb1, 0xcd, 0x0c, 0xff, 0xde,
-    0x5f, 0x4d, 0x69, 0xfc, 0x70, 0x8c, 0xb4, 0x18, 0xfc, 0xb6, 0x55, 0x3f,
-    0xec, 0x79, 0xeb, 0xe1, 0x98, 0x0a, 0x89, 0xde, 0x7d, 0xaf, 0x30, 0xc4,
-    0x94, 0x8f, 0xca, 0x75, 0x55, 0x18, 0xd1, 0x88, 0xb1, 0x1e, 0x7f, 0xf1,
-    0xcd, 0x8f, 0x3d, 0x7c, 0x33, 0x01, 0x51, 0x42, 0xcf, 0xfe, 0x39, 0xb1,
-    0xe7, 0xaf, 0x86, 0x60, 0x2a, 0x29, 0x29, 0xff, 0xfd, 0x57, 0x3f, 0xaa,
-    0x73, 0x78, 0x6d, 0x6d, 0xb5, 0xe1, 0x96, 0x8b, 0x17, 0x36, 0x5e, 0x70,
-    0x11, 0x97, 0xfc, 0x88, 0xd1, 0xfe, 0xf6, 0x93, 0xe2, 0x9f, 0x52, 0x9c,
-    0xfe, 0x3d, 0x7c, 0x33, 0x01, 0x51, 0x12, 0x4f, 0xfe, 0x39, 0xb1, 0xe7,
-    0xaf, 0x86, 0x60, 0x2a, 0x25, 0xe9, 0xf7, 0xfb, 0x31, 0x5d, 0x69, 0xdd,
-    0xb6, 0x96, 0x9f, 0xfb, 0x1c, 0xbb, 0x3a, 0xcd, 0xb5, 0xae, 0x2d, 0x04,
-    0x88, 0xb7, 0x0a, 0x3e, 0x39, 0x3f, 0xc5, 0x83, 0xe6, 0x9c, 0x6f, 0x6b,
-    0x4f, 0xbe, 0x19, 0x80, 0xa8, 0xa5, 0xe7, 0xc3, 0xab, 0x2b, 0x85, 0xa7,
-    0xfb, 0xbb, 0xfd, 0xad, 0x79, 0x19, 0x69, 0xfe, 0xcb, 0x3a, 0x59, 0xe3,
-    0x8d, 0xd7, 0x5a, 0x6a, 0x7b, 0x1f, 0xe7, 0x87, 0x53, 0x3e, 0x96, 0x9c,
-    0xdd, 0xdd, 0x68, 0xe4, 0xd8, 0xf0, 0x2b, 0x3f, 0xf1, 0x1b, 0x39, 0xf4,
-    0xe3, 0xd8, 0x6d, 0x5a, 0x7a, 0xe5, 0xc6, 0x96, 0x8d, 0x9f, 0x4e, 0x91,
-    0xe7, 0xfb, 0x37, 0x8e, 0x17, 0xda, 0xc5, 0xa7, 0xce, 0xc4, 0x66, 0xba,
-    0xd3, 0xec, 0x75, 0x5f, 0xba, 0xd2, 0x6e, 0x4f, 0x44, 0xc5, 0x32, 0x3b,
-    0x2a, 0xfc, 0xe4, 0xc2, 0x8e, 0xad, 0x31, 0x72, 0x14, 0x9b, 0x5e, 0xc8,
-    0x46, 0x5c, 0x8b, 0x50, 0x89, 0x9f, 0xc7, 0xaf, 0x86, 0x60, 0x2a, 0x29,
-    0xc9, 0xff, 0x17, 0xf2, 0xfb, 0xaa, 0x10, 0x5a, 0x7f, 0xd5, 0xb6, 0xfd,
-    0x1f, 0x8e, 0x38, 0x4a, 0x62, 0xe1, 0x69, 0xac, 0x3f, 0x28, 0x90, 0xea,
-    0x3a, 0x76, 0x40, 0x9f, 0x7c, 0x33, 0x01, 0x51, 0x5e, 0x4f, 0xff, 0xd5,
-    0xce, 0xdb, 0xd1, 0xf4, 0x39, 0xdd, 0xee, 0xdd, 0xa5, 0x23, 0xd2, 0x23,
-    0xfa, 0x8c, 0x67, 0xfe, 0x3e, 0x3c, 0xf5, 0xf0, 0xcc, 0x05, 0x44, 0x8f,
-    0x38, 0xbb, 0x65, 0xa7, 0x05, 0x19, 0x23, 0x97, 0x73, 0xef, 0x86, 0x60,
-    0x2a, 0x24, 0x89, 0xe3, 0xe3, 0xce, 0xc7, 0xb5, 0x45, 0x33, 0xff, 0x1f,
-    0x1e, 0x7a, 0xf8, 0x66, 0x02, 0xa2, 0x4a, 0x9f, 0x7c, 0x33, 0x01, 0x51,
-    0x78, 0xcf, 0xaf, 0x7d, 0x50, 0x2d, 0x3f, 0xcf, 0x3d, 0x7c, 0x33, 0x01,
-    0x51, 0x26, 0xc8, 0xf4, 0x89, 0x9f, 0x98, 0xe1, 0x34, 0x33, 0x22, 0x22,
-    0xc3, 0xc7, 0xcb, 0xda, 0xe6, 0x12, 0xa5, 0x0c, 0xc7, 0x21, 0xa6, 0x62,
-    0xbd, 0xc3, 0x0b, 0x46, 0xfe, 0x43, 0x9a, 0x1a, 0x3c, 0x73, 0x0b, 0x23,
-    0xb2, 0x7c, 0xa7, 0xae, 0x65, 0x18, 0x55, 0xe3, 0xb8, 0x7b, 0x94, 0xbc,
-    0x16, 0x93, 0x5e, 0xda, 0x40, 0x91, 0x4f, 0x29, 0x75, 0xe3, 0xbc, 0x72,
-    0xb3, 0xb1, 0xfd, 0x2f, 0x08, 0xd8, 0xa7, 0x00, 0xdc, 0xf1, 0xc6, 0x56,
-    0x8e, 0xdd, 0xcb, 0xee, 0x77, 0x21, 0x68, 0x34, 0x8b, 0x1b, 0xd2, 0x8b,
-    0xf5, 0x68, 0x12, 0x7c, 0xa7, 0xed, 0xba, 0x9d, 0x12, 0xe2, 0x55, 0x8f,
-    0x54, 0x7d, 0xbe, 0xa7, 0x76, 0x9d, 0xa9, 0x21, 0xb0,
+    0xfe, 0x5d, 0x07, 0xae, 0xfc, 0x68, 0x89, 0x67, 0xc1, 0xeb, 0xbf, 0x1a,
+    0x22, 0xd9, 0xab, 0x12, 0xa4, 0xc5, 0x4b, 0xe0, 0x34, 0xbf, 0x0b, 0x4f,
+    0xee, 0x50, 0x7c, 0xa4, 0xc9, 0x4b, 0x35, 0x13, 0xf3, 0xf6, 0x8e, 0xa9,
+    0xc3, 0xa1, 0x8f, 0xc6, 0xd0, 0xa7, 0xf8, 0x5b, 0x69, 0xe6, 0x52, 0x1d,
+    0x25, 0xd2, 0x68, 0xba, 0xd0, 0xf0, 0xfc, 0x41, 0x3f, 0x97, 0x41, 0xeb,
+    0xbf, 0x1a, 0x2a, 0x29, 0xff, 0xed, 0xa6, 0xd7, 0xfe, 0xab, 0x0e, 0x9a,
+    0xba, 0x3a, 0x7c, 0x1e, 0xbb, 0xf1, 0xa2, 0xbd, 0x9f, 0x23, 0xbf, 0xbb,
+    0xc0, 0xe9, 0x2e, 0x8f, 0x78, 0x0c, 0xa7, 0xfe, 0x5d, 0xbd, 0x74, 0x1e,
+    0xbb, 0xf1, 0xa2, 0x46, 0x9f, 0xfc, 0xb5, 0x5b, 0xd7, 0x41, 0xeb, 0xbf,
+    0x1a, 0x27, 0x89, 0xff, 0xcb, 0x55, 0xbd, 0x74, 0x1e, 0xbb, 0xf1, 0xa2,
+    0x7f, 0x9f, 0xfc, 0xb5, 0x5b, 0xd7, 0x41, 0xeb, 0xbf, 0x1a, 0x28, 0x69,
+    0xff, 0xcb, 0x55, 0xbd, 0x74, 0x1e, 0xbb, 0xf1, 0xa2, 0x88, 0x9f, 0xf5,
+    0xbd, 0x74, 0x1e, 0xbb, 0xf1, 0xa2, 0x91, 0x9f, 0xff, 0xab, 0xad, 0xb7,
+    0xe5, 0xf0, 0x6f, 0xec, 0xe5, 0xbe, 0x2a, 0x4b, 0x52, 0x29, 0xb5, 0x92,
+    0x27, 0xfe, 0x5d, 0xbd, 0x74, 0x1e, 0xbb, 0xf1, 0xa2, 0x50, 0x8c, 0x17,
+    0x64, 0xdf, 0x1c, 0x17, 0x90, 0x35, 0xe7, 0xa1, 0x0b, 0x05, 0x13, 0x6d,
+    0x3b, 0xe5, 0x47, 0x61, 0x53, 0x2a, 0x9d, 0xc3, 0xe9, 0xdc, 0xb2, 0x7f,
+    0xf2, 0xd5, 0x6f, 0x5d, 0x07, 0xae, 0xfc, 0x68, 0x9c, 0xe7, 0xff, 0x2d,
+    0x56, 0xf5, 0xd0, 0x7a, 0xef, 0xc6, 0x8a, 0x26, 0x7f, 0xe0, 0x7a, 0xf6,
+    0x99, 0x71, 0xe9, 0xf1, 0xd0, 0x08, 0xed, 0xca, 0xa7, 0x6a, 0x93, 0xf9,
+    0x74, 0x1e, 0xbb, 0xf1, 0xa2, 0x1c, 0x9f, 0xe6, 0x0a, 0xf6, 0xdb, 0x17,
+    0x9d, 0x3e, 0x0f, 0x5d, 0xf8, 0xd1, 0x17, 0xcf, 0xec, 0xd7, 0x5b, 0xaf,
+    0xac, 0xe9, 0xb3, 0x89, 0xd3, 0xdc, 0x7b, 0x7f, 0x2a, 0x14, 0x6e, 0xac,
+    0x5e, 0x4b, 0xc1, 0x1e, 0xd4, 0x6e, 0xe1, 0x90, 0xb6, 0xcf, 0xfe, 0x5a,
+    0xad, 0xeb, 0xa0, 0xf5, 0xdf, 0x8d, 0x13, 0x24, 0xfe, 0x5d, 0x07, 0xae,
+    0xfc, 0x68, 0xb7, 0xa7, 0xff, 0x2d, 0x56, 0xf5, 0xd0, 0x7a, 0xef, 0xc6,
+    0x8a, 0x4e, 0x7d, 0xb5, 0xbb, 0x7a, 0xed, 0xda, 0x3a, 0x19, 0x54, 0x9b,
+    0xe3, 0x33, 0xa4, 0x3c, 0xaa, 0x3a, 0x3d, 0xfc, 0xa9, 0x3f, 0x97, 0x41,
+    0xeb, 0xbf, 0x1a, 0x21, 0xd9, 0xff, 0xcb, 0x55, 0xbd, 0x74, 0x1e, 0xbb,
+    0xf1, 0xa2, 0x58, 0x9f, 0xcb, 0xa0, 0xf5, 0xdf, 0x8d, 0x11, 0x84, 0xf8,
+    0x3d, 0x77, 0xe3, 0x44, 0x7b, 0x3d, 0x9b, 0xc5, 0xd1, 0xd3, 0xcb, 0xb7,
+    0xae, 0x8f, 0x5b, 0x86, 0x53, 0xf9, 0x74, 0x1e, 0xbb, 0xf1, 0xa2, 0xc3,
+    0x9f, 0xcb, 0xa0, 0xf5, 0xdf, 0x8d, 0x17, 0x3c, 0x32, 0x7a, 0xd8, 0x1e,
+    0xbd, 0x51, 0x21, 0x26, 0xa3, 0x8e, 0x1e, 0xcf, 0xe5, 0xd0, 0x7a, 0xef,
+    0xc6, 0x88, 0x7a, 0x7c, 0x1e, 0xbb, 0xf1, 0xa2, 0x26, 0x9f, 0xfd, 0x5c,
+    0xbd, 0xed, 0x9d, 0x3e, 0x81, 0x8e, 0x9b, 0x8a, 0x3a, 0x7f, 0xf5, 0x6f,
+    0xf6, 0x19, 0x64, 0xc7, 0x8c, 0xa3, 0xa3, 0x13, 0xe2, 0xd8, 0xb4, 0xf7,
+    0x3b, 0xbf, 0xc6, 0x88, 0x5e, 0x4b, 0xa4, 0xcc, 0x36, 0x65, 0x98, 0x55,
+    0x76, 0x47, 0x38, 0x2f, 0xc7, 0x4b, 0x67, 0x47, 0xf3, 0x55, 0xd8, 0xd4,
+    0xf7, 0x36, 0x9c, 0x3a, 0x7f, 0xff, 0xed, 0xf7, 0xd2, 0x50, 0x38, 0x34,
+    0xeb, 0x75, 0xd3, 0x67, 0x2d, 0xfc, 0xe9, 0xff, 0xc8, 0xe3, 0xeb, 0x17,
+    0xea, 0x55, 0xd8, 0x9d, 0x35, 0xbb, 0x9d, 0x14, 0x8f, 0xaf, 0x10, 0xed,
+    0xda, 0xd2, 0xe7, 0x05, 0xf8, 0xe8, 0x76, 0xcf, 0x57, 0xf9, 0xdc, 0xfb,
+    0x77, 0xcb, 0x79, 0xd3, 0xf9, 0xf9, 0x6c, 0xeb, 0xaf, 0xae, 0xf5, 0xd9,
+    0xd3, 0xc9, 0x94, 0xf8, 0xe9, 0xda, 0x69, 0xa1, 0x53, 0xeb, 0x1e, 0x6e,
+    0x8a, 0x59, 0x7f, 0x3e, 0xbe, 0x39, 0x5c, 0x3a, 0x3a, 0x44, 0xdf, 0xc8,
+    0x02, 0x69, 0x3d, 0xbb, 0xbb, 0x3a, 0x7f, 0xef, 0x91, 0xcd, 0x5b, 0x64,
+    0x0e, 0xf5, 0xe7, 0x4f, 0xf9, 0x3f, 0xb0, 0xb6, 0x59, 0x14, 0x74, 0xfd,
+    0x4e, 0xbb, 0x7d, 0x64, 0xe9, 0xea, 0xea, 0xb0, 0x3a, 0x29, 0x51, 0x8e,
+    0x24, 0xc9, 0x0e, 0x3d, 0x79, 0x8b, 0x83, 0xfb, 0x4b, 0x13, 0xce, 0x17,
+    0xcf, 0xd5, 0xa3, 0x57, 0x48, 0x74, 0xe6, 0xef, 0xe3, 0xa7, 0xff, 0xff,
+    0x08, 0xe2, 0xdf, 0xc6, 0xba, 0xda, 0x39, 0xab, 0x35, 0x8b, 0xc2, 0xb4,
+    0x3a, 0x7c, 0x9c, 0xed, 0xb0, 0x3a, 0x7f, 0xff, 0x56, 0x2f, 0xca, 0xa8,
+    0x75, 0x3b, 0xa6, 0xf0, 0x4a, 0x03, 0xa7, 0xff, 0xfd, 0xa6, 0xa1, 0xaf,
+    0x6d, 0x06, 0xbb, 0xc7, 0x9a, 0xaf, 0x4a, 0xfe, 0x74, 0xfe, 0xc5, 0xf9,
+    0xff, 0xdb, 0x62, 0x74, 0xfe, 0xbd, 0x3b, 0x71, 0xb9, 0x67, 0x43, 0x23,
+    0x7d, 0x1c, 0xc4, 0xe2, 0x7b, 0xee, 0x26, 0x07, 0x4f, 0xf9, 0xaf, 0x06,
+    0x50, 0xb6, 0x3f, 0x1d, 0x0c, 0xa9, 0xd6, 0x9f, 0x10, 0xa0, 0x23, 0x43,
+    0xb2, 0xd1, 0x23, 0x9b, 0xb7, 0x9d, 0x3e, 0x6f, 0xb3, 0x87, 0x0e, 0x9d,
+    0x7c, 0xc9, 0xd3, 0x77, 0x81, 0xd3, 0x87, 0x8e, 0x3c, 0xd9, 0x80, 0xdc,
+    0xfd, 0xdf, 0xb5, 0x75, 0x8e, 0x87, 0x43, 0x1f, 0x32, 0x19, 0x4f, 0xff,
+    0xbb, 0x6e, 0x6a, 0x1e, 0xdd, 0xf5, 0x57, 0x35, 0xab, 0x87, 0x4f, 0xfd,
+    0xb6, 0xff, 0xab, 0x83, 0x7c, 0x6e, 0x1d, 0x3f, 0xb5, 0x62, 0xf4, 0xdf,
+    0x6a, 0x3a, 0x3e, 0x3f, 0xd1, 0x46, 0x9f, 0xf0, 0x39, 0xab, 0x2c, 0x98,
+    0x5f, 0x0e, 0x86, 0x3e, 0x2e, 0xc8, 0xa7, 0xff, 0xff, 0xbb, 0x1c, 0x80,
+    0xb3, 0x9a, 0xbf, 0x71, 0x1f, 0x58, 0xf2, 0x9d, 0x0d, 0x64, 0xe9, 0x31,
+    0xd3, 0xf5, 0x82, 0x65, 0xb1, 0x3a, 0x7f, 0xd7, 0xa0, 0x30, 0xf3, 0x74,
+    0xee, 0x74, 0x3c, 0xfa, 0x80, 0xae, 0x7f, 0xb6, 0x80, 0xe6, 0xee, 0x80,
+    0xe9, 0xff, 0xff, 0xfb, 0xec, 0x8d, 0x5e, 0x3a, 0xba, 0xdf, 0x7a, 0x86,
+    0xb1, 0x7d, 0x77, 0x80, 0xd5, 0xe2, 0x74, 0x79, 0x18, 0xe8, 0x6d, 0x3a,
+    0xef, 0xc6, 0x8a, 0x62, 0x28, 0xf2, 0x7c, 0x45, 0x3f, 0xea, 0x1c, 0x5f,
+    0x9e, 0x30, 0x38, 0x74, 0xea, 0x4f, 0x8e, 0x95, 0x1d, 0x3b, 0x11, 0xaf,
+    0x8d, 0x53, 0xa1, 0xb8, 0x44, 0x4e, 0xdb, 0x44, 0xe7, 0xb6, 0x27, 0x4f,
+    0xe5, 0x75, 0xb6, 0xc2, 0xb4, 0x3a, 0x31, 0x3d, 0x1b, 0x1c, 0x9f, 0xff,
+    0xc3, 0x5e, 0xe7, 0x1b, 0x99, 0x70, 0x6b, 0x4d, 0x4c, 0xec, 0x8e, 0x9f,
+    0xf7, 0x99, 0x5b, 0xac, 0xd2, 0x09, 0xd0, 0xc8, 0xa3, 0xdb, 0x44, 0xf8,
+    0x19, 0xd3, 0x01, 0xd3, 0xf5, 0x8e, 0xae, 0x98, 0x4e, 0x8a, 0x3f, 0x54,
+    0x22, 0xec, 0x9a, 0x30, 0x5f, 0x1e, 0x78, 0xbf, 0x50, 0xc2, 0xfe, 0x41,
+    0xe8, 0xcf, 0xf1, 0x22, 0x48, 0x41, 0x38, 0xf2, 0x11, 0x98, 0xaa, 0x17,
+    0xc2, 0xe5, 0xc8, 0xce, 0xa7, 0xfd, 0xfc, 0x2f, 0x4d, 0x57, 0xd5, 0xe0,
+    0x74, 0xf5, 0x0f, 0xfd, 0x79, 0xd3, 0xff, 0xff, 0xed, 0xa7, 0x37, 0x40,
+    0xce, 0xb5, 0x2b, 0xb7, 0x7d, 0x55, 0x8b, 0xeb, 0xb1, 0xfb, 0x27, 0x4b,
+    0x88, 0x8b, 0x4c, 0x93, 0x4f, 0xff, 0xaa, 0xb6, 0x9e, 0xdd, 0x6a, 0xcf,
+    0x7b, 0x6d, 0x79, 0xd3, 0xff, 0xdc, 0xdd, 0x7d, 0xa9, 0x4d, 0x5c, 0xea,
+    0x84, 0xe9, 0xfe, 0xc7, 0x52, 0x9a, 0x87, 0x9a, 0xc7, 0x4b, 0x34, 0x88,
+    0xeb, 0x51, 0x92, 0x0a, 0x61, 0xfc, 0x87, 0x44, 0xf9, 0xed, 0x8b, 0xf2,
+    0x74, 0xff, 0xff, 0xff, 0xa8, 0x7f, 0xea, 0x4d, 0xf6, 0xb7, 0x13, 0x8c,
+    0xa1, 0xbf, 0xfb, 0x45, 0xd6, 0xf1, 0xf9, 0xba, 0x2a, 0x7f, 0xff, 0xef,
+    0x26, 0x9d, 0x76, 0x1a, 0xbb, 0x6c, 0x33, 0xed, 0xf7, 0xbc, 0x6f, 0x43,
+    0xa6, 0xef, 0x0c, 0x53, 0x45, 0x42, 0x8c, 0xc2, 0x86, 0x19, 0x57, 0x6e,
+    0xe3, 0x37, 0x18, 0xdc, 0xa7, 0xff, 0x2b, 0xda, 0xb7, 0x6f, 0xa5, 0x58,
+    0xfc, 0x74, 0xff, 0xf9, 0x07, 0x9b, 0xa7, 0x7e, 0x39, 0x5a, 0xfb, 0x1f,
+    0x8e, 0x9f, 0xf9, 0x87, 0x01, 0xa7, 0x59, 0xed, 0xb1, 0x3a, 0x32, 0x8a,
+    0x1e, 0xd6, 0xe7, 0xab, 0x94, 0xec, 0x1d, 0x3b, 0x5a, 0xb6, 0x74, 0xd5,
+    0xd1, 0xd1, 0x82, 0x6d, 0x2f, 0x87, 0x66, 0x49, 0x38, 0x4a, 0xe8, 0x7a,
+    0x7c, 0x9c, 0xcd, 0x7c, 0x74, 0xfd, 0xd3, 0x0e, 0xed, 0xe7, 0x4e, 0x6e,
+    0x98, 0xe9, 0xf9, 0xf5, 0xcc, 0xdb, 0x9a, 0x8f, 0x1d, 0x45, 0x90, 0xf4,
+    0x5a, 0xb8, 0xdd, 0x3f, 0x3b, 0xee, 0xf5, 0xed, 0xf1, 0xd3, 0xf8, 0x1c,
+    0x1a, 0xdd, 0xf0, 0xe8, 0xa3, 0xe5, 0x43, 0x49, 0xf9, 0xbe, 0xae, 0x7e,
+    0xc0, 0xe8, 0x79, 0xe8, 0x09, 0x04, 0xff, 0x73, 0x74, 0xfb, 0x1a, 0xc4,
+    0xe9, 0xff, 0xfe, 0x1b, 0xfb, 0x38, 0x52, 0x0f, 0x06, 0x9d, 0x6a, 0xce,
+    0x82, 0x74, 0x0a, 0x28, 0x38, 0x6f, 0x3f, 0xe4, 0xa7, 0x35, 0x65, 0xb7,
+    0x7a, 0xf3, 0xa7, 0xf5, 0xe3, 0x9d, 0xd5, 0x81, 0xd1, 0xd1, 0xfa, 0x71,
+    0x0e, 0x7f, 0xa8, 0x30, 0x64, 0x0a, 0x13, 0xa4, 0xa3, 0xb5, 0x1b, 0x49,
+    0xc3, 0x5d, 0x1d, 0x0c, 0x6f, 0x71, 0x22, 0x9f, 0xb1, 0xcd, 0x50, 0xff,
+    0x3a, 0x79, 0x5f, 0x9b, 0xe3, 0xa2, 0x8f, 0x49, 0x0b, 0xa7, 0x77, 0x8f,
+    0xc7, 0x43, 0x27, 0xb9, 0x50, 0x96, 0x48, 0x4a, 0x03, 0x98, 0x90, 0x4f,
+    0xee, 0x26, 0x15, 0xbe, 0xf8, 0x74, 0x9c, 0x3a, 0x7e, 0xae, 0xeb, 0x7e,
+    0xc0, 0xe9, 0xab, 0x16, 0x37, 0xf9, 0x11, 0x9f, 0xb7, 0x6f, 0x50, 0x21,
+    0xd3, 0xe4, 0xf8, 0x2b, 0x13, 0xa3, 0xfa, 0x3c, 0x51, 0xcf, 0xe2, 0xce,
+    0xca, 0xe7, 0xff, 0xe0, 0x7e, 0xe9, 0xcd, 0xb0, 0xff, 0x1a, 0xe6, 0xfb,
+    0x3a, 0x7f, 0xff, 0x25, 0x62, 0xfc, 0xf3, 0x6c, 0xa6, 0x4e, 0xb5, 0x33,
+    0xb2, 0x3a, 0x7f, 0xff, 0xfd, 0xd8, 0xea, 0xd2, 0xf1, 0x78, 0x5f, 0xda,
+    0xb3, 0xdb, 0x63, 0xba, 0x41, 0xaf, 0xe7, 0x4f, 0xff, 0xbb, 0x00, 0xae,
+    0x67, 0x69, 0x5a, 0xb7, 0xf3, 0x1d, 0x14, 0x8e, 0x1d, 0xc2, 0x2e, 0x7f,
+    0xf9, 0xee, 0xfb, 0xa6, 0x17, 0x06, 0xb9, 0x9b, 0x3a, 0x7f, 0xfd, 0xd5,
+    0x2b, 0x53, 0xbf, 0x1b, 0x2e, 0x3e, 0xc3, 0x03, 0xa7, 0xff, 0xee, 0x26,
+    0x15, 0xd6, 0xa5, 0x5b, 0xc1, 0x30, 0xb5, 0x1d, 0x3f, 0xb0, 0xb5, 0x0b,
+    0x03, 0x87, 0x4f, 0xf6, 0x35, 0xff, 0xe5, 0x56, 0xa0, 0xa4, 0x47, 0xa2,
+    0xec, 0xff, 0x50, 0xe1, 0xab, 0xeb, 0xb7, 0x0e, 0x9f, 0xe0, 0xc1, 0xb0,
+    0xc3, 0xb0, 0xc0, 0xe9, 0xfe, 0xec, 0x75, 0x67, 0xbd, 0x6e, 0xc0, 0xe8,
+    0x63, 0xfc, 0xc9, 0xe4, 0xff, 0xec, 0x35, 0x67, 0x7d, 0xea, 0xe6, 0x72,
+    0xc0, 0x74, 0xff, 0xff, 0xab, 0x1c, 0xa5, 0x69, 0xab, 0x75, 0xcc, 0xd6,
+    0x1a, 0xa9, 0x3a, 0x3a, 0x29, 0x18, 0x28, 0xa1, 0x18, 0x2e, 0x5c, 0xfa,
+    0x34, 0x9c, 0x49, 0xd1, 0x40, 0x21, 0xd6, 0xa5, 0x4c, 0xc2, 0xdf, 0x90,
+    0xe2, 0x9f, 0xf5, 0x86, 0xeb, 0x8c, 0x29, 0xf1, 0xd3, 0xfd, 0x5a, 0x62,
+    0xfc, 0xea, 0xe2, 0x1d, 0x3f, 0xff, 0xe6, 0xf3, 0x2b, 0x53, 0x9b, 0x41,
+    0xeb, 0x57, 0xef, 0x0d, 0x6e, 0x8e, 0x8f, 0x23, 0xa0, 0x4e, 0xdd, 0xcf,
+    0x27, 0x93, 0x88, 0xc7, 0x4f, 0xff, 0xfe, 0x14, 0xff, 0xbb, 0x73, 0x50,
+    0xf6, 0xef, 0xaa, 0xb1, 0x7d, 0x76, 0x3f, 0x64, 0xe9, 0xf6, 0xd1, 0x87,
+    0x03, 0xa6, 0xe3, 0x29, 0x15, 0x2e, 0xa1, 0x07, 0x0f, 0x47, 0xea, 0x43,
+    0x22, 0x19, 0x7f, 0x72, 0xa7, 0x45, 0x52, 0x37, 0x1b, 0x8c, 0xbe, 0x7c,
+    0xc3, 0xc4, 0x74, 0x74, 0xf7, 0x33, 0x7f, 0x1d, 0x3f, 0xf6, 0xd3, 0x52,
+    0x07, 0x78, 0x58, 0x78, 0xe9, 0xe4, 0xdd, 0xe0, 0x74, 0xf3, 0xa6, 0xe3,
+    0x1d, 0x3f, 0x6e, 0xf0, 0xd4, 0xfe, 0x1d, 0x3e, 0xb0, 0x1c, 0x50, 0xe8,
+    0x43, 0xd5, 0xe1, 0x84, 0x74, 0x9a, 0x3d, 0x13, 0xff, 0x22, 0xf2, 0x2a,
+    0x10, 0xf1, 0xde, 0x7b, 0xf7, 0x77, 0x93, 0xa7, 0xff, 0xe4, 0x0d, 0x54,
+    0x94, 0x3f, 0xf6, 0x94, 0xaa, 0xf1, 0xd3, 0xff, 0xfc, 0x98, 0x03, 0x2b,
+    0x3d, 0xb6, 0xa6, 0x06, 0xeb, 0x6c, 0xa3, 0xa2, 0x91, 0x80, 0x0b, 0x33,
+    0xff, 0xff, 0x80, 0x13, 0x0d, 0x5b, 0xae, 0x0b, 0x39, 0xba, 0xc1, 0xb1,
+    0xe7, 0x7e, 0x3a, 0x7f, 0xff, 0xe6, 0xff, 0xb6, 0xd4, 0x35, 0xdf, 0xfd,
+    0x58, 0xbf, 0x28, 0x3f, 0x9b, 0x03, 0xa7, 0xd8, 0xe5, 0x28, 0x4e, 0x8a,
+    0x45, 0x17, 0x6f, 0x90, 0x89, 0xa0, 0x6e, 0x31, 0xd9, 0xff, 0x9f, 0x94,
+    0xff, 0xb6, 0x4c, 0x1b, 0xf9, 0xd3, 0xfc, 0x3d, 0xb8, 0x35, 0xbb, 0xe1,
+    0xd3, 0xfd, 0xd6, 0xdb, 0x4e, 0xb7, 0x6a, 0x3a, 0x7f, 0xff, 0xac, 0x37,
+    0x5c, 0x4a, 0x1c, 0x32, 0xd4, 0x3d, 0x6d, 0x8e, 0x9e, 0xe6, 0xac, 0x00,
+    0xe8, 0xc5, 0x10, 0xd6, 0xc5, 0x3f, 0xfb, 0x4b, 0x1c, 0x15, 0xda, 0x74,
+    0x82, 0x87, 0x4f, 0xce, 0x62, 0xfe, 0xdb, 0x87, 0x4f, 0xf6, 0xed, 0x43,
+    0x5b, 0xbe, 0x1d, 0x3d, 0x41, 0xf6, 0x87, 0x43, 0x22, 0x23, 0x26, 0x1c,
+    0x36, 0x9f, 0xab, 0x80, 0x14, 0xf3, 0xa7, 0xe1, 0xad, 0x8d, 0x78, 0xe9,
+    0xe1, 0xac, 0xea, 0x70, 0xf5, 0x38, 0x55, 0x1d, 0x2e, 0x3e, 0xfa, 0x36,
+    0x1c, 0x4a, 0x51, 0x1c, 0x0e, 0x37, 0x0c, 0x1c, 0x91, 0xf2, 0x1a, 0x4e,
+    0xa1, 0x07, 0x3f, 0xf0, 0x8d, 0x6a, 0x0a, 0xd8, 0xd3, 0x87, 0x43, 0x2f,
+    0x1d, 0xd4, 0xeb, 0x0d, 0xc2, 0x62, 0x7c, 0x2c, 0xab, 0xe8, 0xe9, 0xfd,
+    0x4e, 0x6e, 0xb8, 0xdd, 0x1d, 0x3f, 0xff, 0xfd, 0xba, 0xe6, 0x6d, 0xcd,
+    0x43, 0x58, 0xbe, 0xbb, 0xc0, 0x6b, 0xad, 0xa3, 0x87, 0x4d, 0xdf, 0xf3,
+    0xa0, 0x11, 0x37, 0xc8, 0x41, 0x4f, 0xd5, 0x80, 0xd6, 0x39, 0x3a, 0x7f,
+    0xf0, 0x62, 0xfc, 0xd2, 0xb1, 0x6d, 0xed, 0x8e, 0x96, 0x4e, 0x8e, 0xcf,
+    0x6b, 0xf2, 0x54, 0xfe, 0x65, 0x0d, 0x6e, 0xf8, 0x74, 0xf6, 0xaf, 0x61,
+    0xa1, 0xd3, 0xff, 0xfe, 0xe0, 0xb7, 0xd8, 0xbf, 0x3d, 0xb7, 0x06, 0xba,
+    0x4a, 0x07, 0x0e, 0x84, 0x55, 0x14, 0xe1, 0x35, 0xc3, 0x38, 0x49, 0xf3,
+    0x08, 0x7e, 0xc9, 0x5d, 0x18, 0x7e, 0x26, 0x9f, 0x3d, 0x02, 0xb1, 0x3a,
+    0x7d, 0x59, 0xc2, 0xb4, 0x3a, 0x31, 0x3c, 0xed, 0x93, 0x4f, 0xff, 0x93,
+    0x0a, 0xf7, 0x5b, 0x4a, 0xff, 0xab, 0xff, 0x6c, 0x74, 0xf3, 0xbf, 0x2b,
+    0x67, 0x4c, 0x8a, 0x3a, 0x7f, 0xff, 0xd8, 0xbe, 0xf1, 0xd4, 0x3d, 0xbb,
+    0xea, 0xac, 0x5f, 0x5d, 0x8f, 0xd9, 0x3a, 0x14, 0x88, 0xd7, 0x71, 0x58,
+    0xc1, 0x1a, 0xf5, 0x0b, 0x19, 0xff, 0xff, 0xf3, 0x63, 0x9e, 0xdb, 0x1d,
+    0x5b, 0xae, 0xb5, 0x0d, 0x77, 0xff, 0x56, 0x7e, 0xf9, 0x38, 0x74, 0xf9,
+    0x87, 0x1b, 0xc0, 0xe9, 0xff, 0xff, 0xff, 0xd4, 0xaa, 0xf3, 0x6d, 0x95,
+    0xca, 0xce, 0x58, 0x01, 0x86, 0xb0, 0xae, 0xf3, 0xdb, 0x82, 0xca, 0x3a,
+    0x7f, 0xbe, 0xae, 0x86, 0xb7, 0x7c, 0x3a, 0x7f, 0x61, 0xdb, 0x71, 0x49,
+    0xc3, 0xa7, 0xfc, 0xdf, 0xdd, 0xfb, 0xa1, 0x73, 0xf2, 0x8e, 0x8a, 0x3f,
+    0xac, 0x4d, 0x27, 0xfd, 0x55, 0xf6, 0x75, 0x06, 0x7a, 0xc9, 0xd3, 0xf8,
+    0x2b, 0xdb, 0x40, 0x70, 0xe9, 0xab, 0x9d, 0x1f, 0x95, 0x20, 0xcf, 0x60,
+    0x83, 0xc3, 0xa1, 0x97, 0x1b, 0x28, 0x8d, 0x23, 0x33, 0x02, 0x85, 0x42,
+    0x47, 0x64, 0xf7, 0x0a, 0x21, 0x85, 0x96, 0x61, 0x29, 0xd9, 0x6c, 0xee,
+    0xb5, 0x38, 0x74, 0xff, 0xf6, 0x2f, 0x16, 0xd4, 0xa1, 0x6f, 0xfc, 0x4c,
+    0x0e, 0x8a, 0x3f, 0x34, 0x20, 0x9f, 0xb0, 0x71, 0xfa, 0xe0, 0x60, 0x74,
+    0xf9, 0x49, 0xd5, 0x74, 0x74, 0x9c, 0x3a, 0x66, 0x51, 0xd2, 0xe1, 0xd0,
+    0x06, 0x96, 0xc5, 0x63, 0xa3, 0xd5, 0xd9, 0xb4, 0xf7, 0x33, 0x78, 0x9d,
+    0x33, 0x96, 0x74, 0xfe, 0xda, 0x06, 0x2f, 0x16, 0x3a, 0x35, 0xda, 0x67,
+    0xcc, 0x6b, 0x4f, 0xa8, 0x46, 0xa2, 0x2e, 0xc5, 0xa7, 0xf6, 0x53, 0x1d,
+    0x2c, 0x7e, 0x3a, 0x7f, 0xfc, 0xc0, 0xde, 0xa5, 0x37, 0x9e, 0x99, 0xed,
+    0x47, 0x43, 0x88, 0x87, 0xd6, 0x34, 0x9f, 0x82, 0x9b, 0xfb, 0x09, 0xd3,
+    0x86, 0xd4, 0x74, 0xdf, 0x31, 0xd0, 0xf3, 0xdb, 0x42, 0xb1, 0x1a, 0x87,
+    0x69, 0xdb, 0x6f, 0xeb, 0x91, 0xb9, 0xb4, 0xa5, 0xac, 0x1e, 0xde, 0x59,
+    0xd4, 0xa9, 0x2a, 0x9f, 0x77, 0xff, 0x0c, 0xcf, 0x4b, 0xe4, 0xc6, 0x3a,
+    0x54, 0x8c, 0x21, 0xc8, 0x6c, 0x84, 0xa9, 0xd5, 0x46, 0x83, 0xba, 0x40,
+    0xe5, 0xc7, 0x2e, 0x33, 0xd2, 0x99, 0x95, 0x8f, 0xc9, 0xd3, 0xa7, 0x51,
+    0x8b, 0x6b, 0x46, 0xbd, 0xfa, 0x1c, 0x6e, 0xf0, 0x82, 0x9f, 0xff, 0xbb,
+    0xf2, 0xf1, 0xe0, 0x35, 0x63, 0xae, 0x75, 0x77, 0xfc, 0xe8, 0x5a, 0xa3,
+    0x44, 0x8f, 0x42, 0x7f, 0x2e, 0x83, 0xd7, 0x7e, 0x34, 0x53, 0xb3, 0xe0,
+    0xf5, 0xdf, 0x8d, 0x15, 0x1c, 0xff, 0xad, 0xeb, 0xa0, 0xf5, 0xdf, 0x8d,
+    0x13, 0x44, 0x97, 0x47, 0xf4, 0xa3, 0x29, 0xfc, 0xba, 0x0f, 0x5d, 0xf8,
+    0xd1, 0x57, 0xcf, 0x83, 0xd7, 0x7e, 0x34, 0x56, 0xd3, 0xfc, 0xf5, 0xd0,
+    0x7a, 0xef, 0xc6, 0x89, 0x06, 0x4b, 0xa3, 0xf5, 0xb3, 0x29, 0xff, 0x97,
+    0x6f, 0x5d, 0x07, 0xae, 0xfc, 0x68, 0x90, 0xe7, 0xfc, 0xfd, 0xb7, 0x32,
+    0xec, 0xb2, 0xed, 0x09, 0xd3, 0xea, 0xa1, 0xfb, 0x27, 0x4f, 0x83, 0xd7,
+    0x7e, 0x34, 0x58, 0x93, 0xea, 0x06, 0x1f, 0xe7, 0x4f, 0xbf, 0x6b, 0x50,
+    0x31, 0xd3, 0xb2, 0xc2, 0x74, 0xb6, 0xc7, 0x88, 0x85, 0x53, 0xff, 0x35,
+    0x66, 0x87, 0xa4, 0xf9, 0x84, 0xe9, 0xc2, 0xd8, 0x1d, 0x27, 0x89, 0xee,
+    0x76, 0x83, 0x3b, 0x59, 0x3e, 0x3a, 0x7c, 0x8e, 0xbb, 0xbc, 0x9d, 0x3f,
+    0xf3, 0xae, 0xeb, 0x1e, 0x9d, 0x6e, 0xad, 0xc3, 0xa6, 0x67, 0x9d, 0x14,
+    0x7c, 0x00, 0x97, 0x3f, 0xa8, 0x1f, 0xf5, 0x53, 0x87, 0x4f, 0xad, 0xff,
+    0xb6, 0xc7, 0x4f, 0xd9, 0xc8, 0x26, 0x9a, 0xf3, 0xa1, 0x91, 0x16, 0x86,
+    0x56, 0x51, 0x3f, 0xfc, 0xf6, 0x53, 0x3f, 0xa1, 0x6d, 0xdd, 0x01, 0xd3,
+    0xfb, 0xc3, 0x4e, 0x86, 0xb2, 0x74, 0x62, 0x7f, 0xdb, 0x4c, 0x9f, 0xdf,
+    0x35, 0x71, 0x07, 0x42, 0xa7, 0xfe, 0xdd, 0xa7, 0x1f, 0x5f, 0xc6, 0xbe,
+    0x3a, 0x7d, 0x5b, 0xc6, 0xf5, 0xe7, 0x4f, 0x7d, 0x96, 0x13, 0xa7, 0xf0,
+    0x6e, 0xd3, 0x28, 0xe8, 0xe8, 0x63, 0xd3, 0xa2, 0x18, 0x44, 0x71, 0x0a,
+    0x26, 0x5f, 0xa7, 0xeb, 0xc3, 0x8d, 0x8b, 0xce, 0x9f, 0xf0, 0xb2, 0x75,
+    0xc1, 0xbc, 0x72, 0x74, 0x3b, 0x4b, 0xb0, 0x7d, 0x24, 0xd1, 0x37, 0xf3,
+    0x2f, 0x35, 0x63, 0x08, 0x24, 0x28, 0x70, 0x7c, 0x21, 0x13, 0xb8, 0x55,
+    0xdc, 0x2a, 0xfe, 0x23, 0xcc, 0x62, 0x9c, 0x2e, 0xfc, 0x5d, 0x3f, 0xf6,
+    0xd1, 0xb9, 0xbb, 0xff, 0x43, 0xf1, 0xd3, 0xff, 0xd5, 0x8b, 0xf9, 0xde,
+    0x0b, 0xdd, 0xa9, 0x32, 0x74, 0xdb, 0x5d, 0x22, 0x58, 0x51, 0x21, 0x69,
+    0xda, 0xb4, 0x71, 0x13, 0xf9, 0x74, 0x1e, 0xbb, 0xf1, 0xa2, 0xcd, 0x9a,
+    0xba, 0x3a, 0x7f, 0xd6, 0xf5, 0xd0, 0x7a, 0xef, 0xc6, 0x8a, 0x02, 0x7f,
+    0x22, 0x9b, 0x5f, 0xba, 0xc0, 0xe9, 0x2e, 0x91, 0x28, 0xa1, 0x6d, 0xa4,
+    0x4d, 0xde, 0xce, 0x9f, 0xb2, 0xca, 0x16, 0x70, 0xe9, 0x6c, 0xe9, 0xdf,
+    0x85, 0xc3, 0xa6, 0xae, 0x51, 0xae, 0xf8, 0x42, 0x3e, 0x44, 0x30, 0xad,
+    0x4d, 0xab, 0x27, 0x4f, 0xf6, 0xe8, 0x38, 0x2c, 0xac, 0x9d, 0x3d, 0xeb,
+    0xbf, 0x1a, 0x2d, 0xf9, 0xfb, 0xf7, 0x2f, 0xd6, 0x07, 0x40, 0x1e, 0xd7,
+    0xc5, 0xb3, 0xd4, 0x28, 0xe1, 0xd3, 0xee, 0x3f, 0x3f, 0xb2, 0x74, 0xfc,
+    0xeb, 0xf7, 0x05, 0xbe, 0x3a, 0x7d, 0xd3, 0x6b, 0xfb, 0x51, 0xd0, 0xc7,
+    0xbc, 0x86, 0x33, 0xd6, 0x83, 0xc3, 0xa7, 0xf7, 0x78, 0xe5, 0xbd, 0x4a,
+    0x3a, 0x7b, 0x7f, 0xfa, 0x51, 0xd3, 0x53, 0xce, 0x8a, 0x37, 0x42, 0x4b,
+    0x25, 0xbb, 0x4a, 0xbf, 0x9a, 0x13, 0xaf, 0x23, 0xe8, 0x62, 0xa1, 0x20,
+    0x84, 0x40, 0x41, 0xb8, 0x44, 0x7c, 0x40, 0x23, 0xfc, 0x6e, 0x9f, 0xf5,
+    0xbd, 0x74, 0x1e, 0xbb, 0xf1, 0xa2, 0x94, 0x9f, 0xe7, 0xae, 0x83, 0xd7,
+    0x7e, 0x34, 0x49, 0xd2, 0x5a, 0x91, 0x17, 0x69, 0x10, 0xcf, 0x93, 0xd5,
+    0x84, 0x6d, 0xbd, 0x5b, 0x98, 0x6a, 0x2a, 0xf4, 0x2d, 0xd0, 0x9f, 0x5f,
+    0x0b, 0x27, 0x09, 0x95, 0x3f, 0x0d, 0xb2, 0x9f, 0xa1, 0xa3, 0x99, 0x66,
+    0x6e, 0xa3, 0x3c, 0x9f, 0x07, 0xae, 0xfc, 0x68, 0x87, 0xe7, 0xfd, 0x6f,
+    0x5d, 0x07, 0xae, 0xfc, 0x68, 0x94, 0xe4, 0xba, 0x3f, 0xa5, 0x19, 0x4f,
+    0xe5, 0xd0, 0x7a, 0xef, 0xc6, 0x88, 0x9e, 0x7f, 0x2e, 0x83, 0xd7, 0x7e,
+    0x34, 0x46, 0x33, 0xff, 0x96, 0xab, 0x7a, 0xe8, 0x3d, 0x77, 0xe3, 0x44,
+    0xf3, 0x0c, 0x8f, 0x5c, 0x09, 0xde, 0x7b, 0xb3, 0xd9, 0xf0, 0x7a, 0xef,
+    0xc6, 0x88, 0x82, 0x7f, 0xd6, 0xf5, 0xd0, 0x7a, 0xef, 0xc6, 0x89, 0x52,
+    0x4b, 0xa3, 0xfa, 0x51, 0x94, 0xfe, 0x5d, 0x07, 0xae, 0xfc, 0x68, 0x8a,
+    0x27, 0xf2, 0xe8, 0x3d, 0x77, 0xe3, 0x44, 0x65, 0x3f, 0xf9, 0x6a, 0xb7,
+    0xae, 0x83, 0xd7, 0x7e, 0x34, 0x4c, 0xb3, 0xf9, 0x74, 0x1e, 0xbb, 0xf1,
+    0xa2, 0xa4, 0x9f, 0xcb, 0xa0, 0xf5, 0xdf, 0x8d, 0x15, 0xd4, 0xfe, 0x5d,
+    0x07, 0xae, 0xfc, 0x68, 0xb1, 0x67, 0xfe, 0x55, 0xbd, 0x74, 0x1e, 0xbb,
+    0xf1, 0xa2, 0x7a, 0x9f, 0xed, 0x17, 0x6c, 0x9a, 0xc8, 0xee, 0x74, 0x2d,
+    0x11, 0x6c, 0x9d, 0x3f, 0x6b, 0xaf, 0x5c, 0x4e, 0xf2, 0x74, 0xf0, 0x2b,
+    0x98, 0x9d, 0x3b, 0xd5, 0xb2, 0xa7, 0x29, 0xb2, 0x74, 0xff, 0xfd, 0xb1,
+    0xbf, 0xe8, 0x0c, 0xf7, 0xd6, 0x7e, 0xf9, 0x8e, 0x9f, 0xff, 0x81, 0x1d,
+    0xed, 0x4b, 0x60, 0x04, 0x77, 0xf7, 0x78, 0x1d, 0x3e, 0xf2, 0x6f, 0xf2,
+    0x8e, 0x9f, 0xfd, 0x79, 0x1a, 0xf9, 0x7b, 0x4f, 0x58, 0x1d, 0x3e, 0xe6,
+    0xd9, 0x5e, 0x3a, 0x7f, 0xf0, 0xea, 0x66, 0x16, 0x56, 0xad, 0x5b, 0xd6,
+    0x3a, 0x6b, 0xc4, 0xe9, 0xfd, 0x79, 0xbd, 0xf6, 0x38, 0x1d, 0x02, 0x79,
+    0x3d, 0x8b, 0x46, 0x0a, 0x89, 0xd0, 0x6c, 0x16, 0xd4, 0xbf, 0xb2, 0x91,
+    0x47, 0xe1, 0x3b, 0xbc, 0x26, 0x67, 0x0d, 0xf0, 0xe9, 0xc2, 0x99, 0x3a,
+    0x5a, 0x3b, 0x66, 0xd1, 0x86, 0xa7, 0x81, 0xd5, 0xa8, 0xe8, 0xa3, 0xce,
+    0x42, 0xc9, 0xff, 0x26, 0xef, 0x8c, 0xe6, 0x51, 0x47, 0x4f, 0x87, 0xfa,
+    0x56, 0x4e, 0x9f, 0xfa, 0xb4, 0xbf, 0xab, 0xdb, 0xbf, 0xb2, 0x74, 0x21,
+    0xf6, 0x09, 0x3c, 0xe5, 0x36, 0xce, 0x9e, 0x1e, 0xb5, 0x7f, 0x3a, 0x7e,
+    0xac, 0xe9, 0x63, 0x81, 0xd1, 0x47, 0xdd, 0x63, 0x62, 0x4d, 0x3e, 0xef,
+    0xfe, 0x7a, 0x63, 0xa2, 0x91, 0xca, 0x90, 0x8e, 0xd9, 0x64, 0xff, 0xff,
+    0xed, 0xb2, 0x00, 0x37, 0xee, 0x20, 0xf6, 0xfa, 0xcf, 0x5d, 0xd8, 0x3c,
+    0xe9, 0xf6, 0x1d, 0x02, 0x68, 0x74, 0xfd, 0xd5, 0x87, 0xda, 0xd4, 0x74,
+    0xff, 0x85, 0x1f, 0xcd, 0xd0, 0x26, 0x4e, 0x9f, 0xf5, 0xd7, 0xcc, 0x37,
+    0xd5, 0x7f, 0x3a, 0x1e, 0x7f, 0x3f, 0x1d, 0xcf, 0xeb, 0xc7, 0x3c, 0xe5,
+    0x6b, 0xce, 0x9f, 0xfc, 0xd5, 0x8f, 0x36, 0xdc, 0x16, 0xfb, 0x27, 0x4e,
+    0xce, 0xd4, 0x74, 0x70, 0xf9, 0x7b, 0x49, 0x9f, 0xbb, 0xcf, 0x33, 0x5c,
+    0x3a, 0x76, 0x9a, 0x68, 0x54, 0xff, 0xee, 0x27, 0x33, 0xb4, 0xd6, 0xfc,
+    0x0c, 0xf2, 0x96, 0x5f, 0xc2, 0x22, 0xa7, 0xb4, 0xd8, 0x7a, 0xaf, 0x7a,
+    0x77, 0x42, 0x90, 0x85, 0x4a, 0x88, 0xc6, 0x13, 0x9c, 0x86, 0x64, 0xff,
+    0x62, 0xfc, 0xe6, 0xba, 0xbe, 0x1d, 0x2a, 0x3a, 0x18, 0xf2, 0x7f, 0x9d,
+    0x4f, 0xb4, 0xe3, 0x63, 0xa1, 0xd3, 0xbd, 0xa6, 0xce, 0x9f, 0xcd, 0x61,
+    0xbd, 0x2f, 0xa2, 0xa6, 0xd3, 0x42, 0xa3, 0xa3, 0xca, 0xd0, 0xca, 0x77,
+    0x13, 0x5e, 0x52, 0xcd, 0x24, 0xf7, 0x6f, 0xef, 0x87, 0x46, 0x4f, 0x4f,
+    0x58, 0xbe, 0x6d, 0x32, 0x74, 0xa8, 0xe9, 0x63, 0x46, 0x9b, 0x82, 0xf3,
+    0xff, 0x67, 0x3d, 0x0b, 0x75, 0xb6, 0xe6, 0x4e, 0x86, 0x3e, 0xce, 0xc9,
+    0xe7, 0xfd, 0xc4, 0x0b, 0xf9, 0xdf, 0x95, 0xb3, 0xa7, 0xf5, 0x87, 0x32,
+    0x29, 0xfc, 0xe8, 0x7a, 0x25, 0x10, 0x8a, 0xd0, 0x27, 0x52, 0x01, 0xd3,
+    0xd6, 0x0c, 0xf3, 0xa3, 0x03, 0x70, 0xa1, 0x99, 0xff, 0x36, 0x3b, 0x65,
+    0x7b, 0x68, 0xe1, 0xd1, 0x47, 0xc2, 0x04, 0x53, 0xf7, 0x18, 0x3a, 0xa1,
+    0x3a, 0x7f, 0x75, 0xb6, 0x1d, 0x2f, 0x13, 0xa7, 0xfe, 0x4e, 0xb6, 0xde,
+    0x6f, 0xac, 0x7e, 0x3a, 0x7f, 0xff, 0xc8, 0xab, 0x1c, 0x5e, 0xbd, 0x29,
+    0x1d, 0x50, 0xd7, 0x56, 0xf3, 0xc5, 0xeb, 0x0c, 0x98, 0xe5, 0x95, 0xe4,
+    0xd3, 0xb4, 0x49, 0xff, 0xea, 0xe6, 0x69, 0xcd, 0xb3, 0xaa, 0xde, 0xd8,
+    0xe9, 0xff, 0xff, 0xf2, 0x56, 0x39, 0x4a, 0xd3, 0x55, 0x62, 0xfc, 0xa7,
+    0x32, 0x98, 0xf5, 0xd7, 0x78, 0x1d, 0x3f, 0xfe, 0x41, 0xeb, 0x57, 0xee,
+    0x26, 0x6d, 0x07, 0xb7, 0x9d, 0x02, 0x99, 0x9f, 0x14, 0x1d, 0x42, 0x2e,
+    0x7f, 0x61, 0x7c, 0xfb, 0xf0, 0xbc, 0xe9, 0xaf, 0xa3, 0xa7, 0xe0, 0xbc,
+    0xee, 0xde, 0x74, 0xb1, 0x3a, 0x64, 0xd0, 0xe9, 0xbf, 0x7c, 0x74, 0x38,
+    0x6b, 0xfe, 0x16, 0x9c, 0xfb, 0xe8, 0xe9, 0xb4, 0xd0, 0xe8, 0x7a, 0x36,
+    0x28, 0x5b, 0xc5, 0x68, 0x81, 0x92, 0x3d, 0x07, 0x27, 0x73, 0xf7, 0xc5,
+    0x2c, 0xf5, 0xa7, 0xff, 0xff, 0x71, 0xba, 0xdf, 0x77, 0xfd, 0x57, 0xd5,
+    0x50, 0xff, 0xce, 0x68, 0x7e, 0x3a, 0x31, 0x45, 0x62, 0x18, 0x4f, 0xf5,
+    0x73, 0x6c, 0x1c, 0xaf, 0x1d, 0x39, 0x81, 0xc3, 0xa2, 0x95, 0x5d, 0xa1,
+    0xbd, 0xca, 0x10, 0x12, 0x3d, 0x63, 0x69, 0xd9, 0xb7, 0x0e, 0x9e, 0xae,
+    0x5b, 0xb9, 0xd1, 0x89, 0xbf, 0x11, 0xc9, 0xff, 0xa8, 0x02, 0x9c, 0xdd,
+    0x66, 0xc4, 0xe9, 0xfc, 0x2c, 0x1d, 0xfb, 0x6c, 0x74, 0xf9, 0x3f, 0xee,
+    0xde, 0x74, 0xfc, 0x8c, 0xac, 0x2b, 0x43, 0xa6, 0xd3, 0x43, 0xa3, 0xc7,
+    0xda, 0x05, 0x1a, 0x16, 0xcf, 0xf5, 0x39, 0x6e, 0x5e, 0x2f, 0xc9, 0x4b,
+    0x35, 0xf3, 0xba, 0x65, 0x1d, 0x3f, 0xab, 0xea, 0x71, 0xb1, 0xc9, 0xd0,
+    0xc7, 0xa1, 0x43, 0x93, 0xff, 0xa8, 0x7e, 0xad, 0xa6, 0x39, 0xdf, 0x79,
+    0x3a, 0x7e, 0x1b, 0xfb, 0xaa, 0x13, 0xa7, 0xe5, 0x26, 0xb5, 0x07, 0xf3,
+    0xa7, 0x69, 0xa6, 0x85, 0x4f, 0xfc, 0xc0, 0x3d, 0xdf, 0xea, 0x71, 0x94,
+    0x72, 0xcb, 0xf8, 0xd7, 0xaa, 0xa0, 0x72, 0x19, 0xa3, 0x09, 0xac, 0x90,
+    0x71, 0x2f, 0xb2, 0xcd, 0x13, 0xe7, 0xff, 0xd7, 0xd5, 0x50, 0xff, 0xfc,
+    0x2c, 0x38, 0x20, 0x1d, 0x3a, 0xc3, 0x03, 0xc8, 0x25, 0x3c, 0xfa, 0xc5,
+    0xe7, 0x90, 0x4a, 0x76, 0x53, 0xa3, 0xc8, 0x25, 0x36, 0x9a, 0x1e, 0x41,
+    0x28, 0xf2, 0x29, 0x5c, 0x28, 0xe1, 0x7e, 0x85, 0x33, 0x5f, 0x0b, 0x20,
+    0x91, 0x66, 0xfe, 0x7e, 0xad, 0xd5, 0x0f, 0xf3, 0xa7, 0x58, 0xfc, 0xa4,
+    0xe6, 0x06, 0x33, 0x9e, 0x19, 0xcf, 0x6b, 0x55, 0xec, 0xe9, 0x56, 0xbc,
+    0xfa, 0xbe, 0x47, 0x9f, 0xce, 0x3f, 0xbc, 0x38, 0x98, 0x15, 0x3f, 0x91,
+    0xfd, 0xde, 0x76, 0x87, 0x49, 0xe5, 0x4e, 0xb0, 0xc0, 0xa8, 0x2a, 0x18,
+    0xda, 0xf8, 0x41, 0x43, 0x73, 0xc2, 0xdf, 0x78, 0xa5, 0x9a, 0xd8, 0x64,
+    0x62, 0xd4, 0x25, 0x27, 0xbb, 0xb0, 0x79, 0xd2, 0x51, 0xd3, 0x53, 0xfa,
+    0x36, 0x2e, 0x10, 0xcf, 0xb4, 0xa7, 0x11, 0x47, 0x4f, 0xde, 0x67, 0x1e,
+    0xdf, 0x15, 0x24, 0x3a, 0x7f, 0xb0, 0xed, 0xfd, 0x6f, 0xbb, 0x13, 0xa7,
+    0xe4, 0x65, 0x61, 0x5a, 0x1d, 0x3e, 0xac, 0x15, 0x4a, 0x3a, 0x76, 0x50,
+    0x0e, 0x81, 0x3c, 0x1e, 0x13, 0xcf, 0xc3, 0x7f, 0x7d, 0xde, 0x4e, 0x9f,
+    0x93, 0xff, 0xe6, 0x52, 0xfa, 0x4c, 0x26, 0x83, 0xc0, 0xf3, 0x2d, 0xdc,
+    0x21, 0x8a, 0x4f, 0x3d, 0x0a, 0x06, 0x33, 0x79, 0xe1, 0xac, 0x3b, 0x3a,
+    0x1e, 0xaf, 0x4a, 0x8b, 0x37, 0x0f, 0xc1, 0x57, 0xcc, 0x7f, 0xbc, 0x34,
+    0x9f, 0xff, 0x60, 0x01, 0x5d, 0x5a, 0xb7, 0x7c, 0x16, 0x70, 0xe9, 0xff,
+    0xff, 0xdd, 0x87, 0x6e, 0x0d, 0xfd, 0x9c, 0xd7, 0xfa, 0xec, 0x2f, 0xa6,
+    0xdb, 0x1d, 0x3b, 0x4d, 0x34, 0x2a, 0x67, 0xb1, 0x4b, 0x2f, 0xe1, 0x93,
+    0x12, 0xc1, 0x50, 0x21, 0x35, 0x3f, 0x60, 0xe3, 0xf5, 0xc0, 0xc0, 0xe9,
+    0xed, 0xde, 0x3a, 0x1d, 0x3e, 0xc0, 0x11, 0x94, 0x74, 0xff, 0xf3, 0x7e,
+    0xe0, 0xb7, 0xd7, 0xcf, 0xbf, 0x0b, 0xce, 0x8d, 0x76, 0x8d, 0x14, 0x35,
+    0xb2, 0x3e, 0x13, 0x4e, 0xfd, 0xd3, 0x87, 0x4e, 0x7a, 0x09, 0xd3, 0xf7,
+    0x19, 0xc1, 0xef, 0x27, 0x46, 0x07, 0xd0, 0xf2, 0x0e, 0x0d, 0x4d, 0x79,
+    0x3a, 0x6e, 0xdd, 0x83, 0xa0, 0x4d, 0x8f, 0x62, 0xb3, 0x5a, 0xdd, 0xa6,
+    0xfd, 0x31, 0xd9, 0x9b, 0x6b, 0xac, 0x44, 0xd2, 0x90, 0xb0, 0x87, 0xdb,
+    0xc8, 0x3a, 0x8e, 0x3a, 0xa5, 0x95, 0x7f, 0x85, 0xd7, 0x88, 0xf1, 0x2a,
+    0x48, 0x6f, 0x39, 0x1a, 0x58, 0x43, 0x1d, 0x51, 0x9e, 0x6e, 0x70, 0xae,
+    0xe1, 0x22, 0x24, 0x39, 0x95, 0xc1, 0xc9, 0xe4, 0xae, 0xe3, 0x74, 0xd6,
+    0x8c, 0x1b, 0xf4, 0x2a, 0x5d, 0xd8, 0x67, 0xff, 0x2d, 0x56, 0xf5, 0xd0,
+    0x7a, 0xef, 0xc6, 0x8a, 0x2a, 0x7f, 0x2e, 0x83, 0xd7, 0x7e, 0x34, 0x5d,
+    0x13, 0xff, 0x2e, 0xde, 0xba, 0x0f, 0x5d, 0xf8, 0xd1, 0x25, 0xcf, 0xe5,
+    0xd0, 0x7a, 0xef, 0xc6, 0x8b, 0xca, 0x19, 0xd2, 0x48, 0x60, 0x4e, 0xf3,
+    0xda, 0x3d, 0xf2, 0xa3, 0x87, 0xaa, 0x3d, 0xdc, 0x32, 0x06, 0xbf, 0x6e,
+    0xcc, 0x79, 0xfc, 0x54, 0xec, 0xf5, 0xd2, 0x74, 0xff, 0xe5, 0xaa, 0xde,
+    0xba, 0x0f, 0x5d, 0xf8, 0xd1, 0x2c, 0xcd, 0xde, 0xce, 0x9e, 0xf5, 0xdf,
+    0x8d, 0x11, 0x9c, 0xfc, 0x8c, 0xac, 0x2b, 0x43, 0xa6, 0x17, 0x9d, 0x25,
+    0x1d, 0x3e, 0x40, 0xdd, 0xac, 0x0f, 0x49, 0x45, 0xbf, 0x85, 0x67, 0xeb,
+    0x7a, 0x05, 0x81, 0xd3, 0xff, 0x65, 0x3b, 0xcd, 0x0f, 0x6f, 0xac, 0x9d,
+    0x3b, 0x2d, 0x89, 0xd0, 0x09, 0xa9, 0xa9, 0xfc, 0x52, 0xf2, 0x53, 0xc4,
+    0x49, 0xff, 0xb8, 0x81, 0x7f, 0x6a, 0xc5, 0xec, 0xa3, 0xa7, 0xc2, 0xcf,
+    0xcd, 0x9d, 0x08, 0x7d, 0x6e, 0x91, 0xa7, 0x5f, 0xe7, 0x9d, 0x3f, 0xfd,
+    0xdf, 0x33, 0x8b, 0xd8, 0x7e, 0xce, 0xae, 0xc4, 0xe9, 0xcd, 0xc6, 0x3a,
+    0x49, 0xd1, 0xf7, 0xba, 0x55, 0x9f, 0xeb, 0xc7, 0x23, 0x41, 0xd3, 0x1d,
+    0x3f, 0xf5, 0x2b, 0x89, 0xa6, 0x5b, 0x77, 0xaf, 0x3a, 0x7f, 0xdb, 0x64,
+    0xda, 0x30, 0xb9, 0xd9, 0xd3, 0xfa, 0xb2, 0xdc, 0xce, 0xd0, 0xe9, 0x2d,
+    0xda, 0x57, 0xc7, 0x51, 0xb5, 0x39, 0x0b, 0x4d, 0x91, 0xdc, 0x23, 0x3e,
+    0x2a, 0x13, 0x7c, 0xa3, 0xeb, 0x1e, 0xcf, 0xfe, 0x5a, 0xad, 0xeb, 0xa0,
+    0xf5, 0xdf, 0x8d, 0x13, 0x4c, 0xff, 0xe5, 0xaa, 0xde, 0xba, 0x0f, 0x5d,
+    0xf8, 0xd1, 0x38, 0xcf, 0xfe, 0x5a, 0xad, 0xeb, 0xa0, 0xf5, 0xdf, 0x8d,
+    0x14, 0x0c, 0xf8, 0x3d, 0x77, 0xe3, 0x45, 0xc1, 0x33, 0x21, 0xd3, 0xf8,
+    0x5e, 0xc9, 0xd5, 0x28, 0xe9, 0x2e, 0x8f, 0xdf, 0x66, 0x5d, 0x8a, 0x4f,
+    0xe4, 0x5f, 0xe6, 0xfa, 0xb4, 0x3a, 0x7f, 0x9e, 0xba, 0x0f, 0x5d, 0xf8,
+    0xd1, 0x24, 0xc9, 0x7b, 0x3f, 0x8b, 0x35, 0x9f, 0x5a, 0xfa, 0xd3, 0xe3,
+    0xa3, 0x05, 0xf4, 0x57, 0xce, 0x1b, 0xfa, 0x13, 0xae, 0x2a, 0x7c, 0xa9,
+    0x98, 0x65, 0xf2, 0x15, 0xae, 0x89, 0xe7, 0xfd, 0xfe, 0xd7, 0x41, 0xeb,
+    0xbf, 0x1a, 0x2d, 0x49, 0xff, 0x5b, 0xd7, 0x41, 0xeb, 0xbf, 0x1a, 0x25,
+    0x58, 0x3a, 0x4b, 0xfe, 0x89, 0xc5, 0x25, 0x3b, 0xa4, 0x4f, 0xe5, 0xd0,
+    0x7a, 0xef, 0xc6, 0x88, 0xa6, 0x7f, 0x2e, 0x83, 0xd7, 0x7e, 0x34, 0x46,
+    0x93, 0x77, 0xb3, 0xa7, 0xbd, 0x77, 0xe3, 0x45, 0x3f, 0x37, 0x18, 0xe8,
+    0x03, 0xc2, 0xe1, 0x6c, 0xff, 0xb8, 0xe3, 0x73, 0x76, 0xe6, 0xaa, 0x3a,
+    0x7f, 0xee, 0xf8, 0x1d, 0xb9, 0x9f, 0x5b, 0x99, 0x3a, 0x7f, 0xea, 0x73,
+    0xb1, 0xc3, 0x3e, 0xb7, 0x32, 0x74, 0x96, 0xed, 0x26, 0x95, 0x4b, 0x28,
+    0x42, 0x28, 0x3c, 0x48, 0x9f, 0xfc, 0xb5, 0x5b, 0xd7, 0x41, 0xeb, 0xbf,
+    0x1a, 0x26, 0xa9, 0xfc, 0xba, 0x0f, 0x5d, 0xf8, 0xd1, 0x5d, 0xcf, 0x7a,
+    0xef, 0xc6, 0x8a, 0xfa, 0x76, 0x9a, 0x68, 0x54, 0x84, 0xa5, 0x97, 0xf0,
+    0x07, 0xd4, 0xa4, 0xc9, 0xcf, 0x6c, 0x4e, 0x9c, 0xe5, 0x6c, 0xe9, 0xff,
+    0x56, 0xf4, 0xbe, 0x65, 0xab, 0x03, 0xa5, 0xc3, 0xa7, 0xf9, 0x02, 0xb0,
+    0x47, 0xd7, 0x47, 0x40, 0x1e, 0x3d, 0x88, 0x49, 0x74, 0x8f, 0xe7, 0x08,
+    0x6c, 0x70, 0x47, 0x33, 0x08, 0x59, 0xff, 0xcb, 0x55, 0xbd, 0x74, 0x1e,
+    0xbb, 0xf1, 0xa2, 0x7b, 0x9f, 0xcb, 0xa0, 0xf5, 0xdf, 0x8d, 0x17, 0x0c,
+    0xff, 0xcb, 0xb7, 0xae, 0x83, 0xd7, 0x7e, 0x34, 0x49, 0xf0, 0xcb, 0xaf,
+    0xb8, 0x1d, 0xbc, 0xf7, 0xfc, 0x70, 0xfe, 0x53, 0x71, 0x50, 0x23, 0xa5,
+    0xda, 0x9e, 0x55, 0x1d, 0x1e, 0xcf, 0xe5, 0xd0, 0x7a, 0xef, 0xc6, 0x88,
+    0xaa, 0x7f, 0x2e, 0x83, 0xd7, 0x7e, 0x34, 0x53, 0x33, 0xff, 0x96, 0xab,
+    0x7a, 0xe8, 0x3d, 0x77, 0xe3, 0x44, 0xcf, 0x3f, 0xf9, 0x6a, 0xb7, 0xae,
+    0x83, 0xd7, 0x7e, 0x34, 0x51, 0xb1, 0x82, 0x64, 0x5d, 0x1e, 0xff, 0x3d,
+    0xe2, 0xa4, 0xff, 0xcb, 0xb7, 0xae, 0x83, 0xd7, 0x7e, 0x34, 0x47, 0x53,
+    0x77, 0xb3, 0xa7, 0xe4, 0xa1, 0xea, 0xb0, 0x3a, 0x7b, 0xd7, 0x7e, 0x34,
+    0x53, 0x53, 0xea, 0xc7, 0x4b, 0xd9, 0xd0, 0x07, 0xaa, 0x25, 0xb3, 0xff,
+    0xb6, 0x9c, 0xcd, 0xe3, 0x4e, 0x36, 0xf2, 0x74, 0xff, 0xcf, 0xda, 0x0e,
+    0x19, 0xed, 0x81, 0xc3, 0xa6, 0x6f, 0xe7, 0x4f, 0xc8, 0xca, 0xc2, 0xb4,
+    0x3a, 0x7f, 0xfa, 0xb9, 0xba, 0x78, 0x58, 0xf3, 0x76, 0xf3, 0xa6, 0x6f,
+    0x8e, 0x9f, 0xd7, 0x8b, 0x79, 0x3c, 0xb0, 0x44, 0x78, 0x96, 0xfe, 0x4c,
+    0x8d, 0xa3, 0xfb, 0x30, 0xa6, 0x92, 0xdd, 0xa5, 0x4d, 0xbd, 0x0b, 0xd4,
+    0x20, 0x7c, 0x41, 0x8a, 0x57, 0x23, 0x43, 0x9f, 0x07, 0xae, 0xfc, 0x68,
+    0xaa, 0xa7, 0xfd, 0x6f, 0x5d, 0x07, 0xae, 0xfc, 0x68, 0x9b, 0x64, 0xba,
+    0x3f, 0xa5, 0x19, 0x4f, 0xe5, 0xd0, 0x7a, 0xef, 0xc6, 0x8a, 0xfe, 0x7f,
+    0x2e, 0x83, 0xd7, 0x7e, 0x34, 0x58, 0xd3, 0xf9, 0x01, 0x79, 0xfe, 0xfa,
+    0x3a, 0x7c, 0x1e, 0xbb, 0xf1, 0xa2, 0xd5, 0x9f, 0xf5, 0xbd, 0x74, 0x1e,
+    0xbb, 0xf1, 0xa2, 0x82, 0x92, 0xe8, 0xfe, 0x94, 0x65, 0x3e, 0x0f, 0x5d,
+    0xf8, 0xd1, 0x71, 0x4f, 0x5b, 0xba, 0x60, 0x74, 0xf3, 0xbb, 0xba, 0x78,
+    0xe9, 0xfc, 0xca, 0xb7, 0x4c, 0x0e, 0xe7, 0x49, 0x74, 0x8b, 0x2d, 0x99,
+    0x59, 0x27, 0x09, 0xe7, 0xc1, 0xeb, 0xbf, 0x1a, 0x2e, 0x99, 0xf3, 0x0d,
+    0xf4, 0xc7, 0x49, 0x74, 0x7a, 0xe8, 0x65, 0x3f, 0xfd, 0x43, 0xc4, 0x56,
+    0xd9, 0x06, 0xc3, 0xf9, 0xd3, 0xff, 0xf2, 0x97, 0x4f, 0x60, 0xfb, 0x56,
+    0x76, 0xca, 0xb1, 0x3a, 0x7f, 0xfe, 0xd8, 0xf7, 0x7a, 0xfa, 0x7e, 0xeb,
+    0xfd, 0x74, 0xe7, 0x67, 0x4d, 0xea, 0x3a, 0x18, 0xfe, 0x3f, 0xb1, 0xcf,
+    0xf9, 0xf4, 0x01, 0x6f, 0xc2, 0xb4, 0x3a, 0x70, 0xda, 0xc0, 0xf8, 0x38,
+    0x47, 0x3f, 0xe0, 0x6c, 0x77, 0x79, 0xe3, 0x68, 0x74, 0xdd, 0xec, 0xe9,
+    0xf0, 0xd6, 0xef, 0x87, 0x4f, 0xcf, 0xba, 0x74, 0xdd, 0x1d, 0x0e, 0xd9,
+    0xe9, 0xeb, 0xa8, 0x96, 0x7e, 0xfa, 0xdc, 0x7a, 0x70, 0xe9, 0xff, 0xfe,
+    0x6e, 0xb7, 0x58, 0xf0, 0x6f, 0x7f, 0x5e, 0x73, 0x61, 0xe3, 0xa7, 0xf5,
+    0x55, 0x7f, 0xff, 0x6f, 0x3a, 0x3f, 0xa2, 0x6b, 0x8c, 0xd3, 0xff, 0xfd,
+    0xb6, 0x1e, 0xf3, 0xb4, 0xcf, 0x37, 0x5d, 0x26, 0x68, 0x4e, 0x9e, 0xf5,
+    0xdf, 0x8d, 0x12, 0x64, 0xfb, 0xda, 0xe9, 0xae, 0x6b, 0xb7, 0x6c, 0xe9,
+    0xfd, 0x58, 0xf3, 0x96, 0xfc, 0x9d, 0x0c, 0x7e, 0x40, 0x7f, 0x0f, 0x4c,
+    0x90, 0x19, 0x55, 0x09, 0xf9, 0xfb, 0xaf, 0x9d, 0xbc, 0xfd, 0xac, 0x74,
+    0xff, 0xed, 0xa7, 0x31, 0xf2, 0x06, 0x5c, 0x6b, 0x3a, 0x7d, 0x5c, 0x45,
+    0x59, 0xd3, 0xfc, 0xdb, 0xe2, 0x60, 0xa6, 0xf1, 0xd3, 0xff, 0xeb, 0xf0,
+    0x36, 0xc6, 0xb9, 0x4b, 0xd3, 0x4d, 0x0a, 0x87, 0xa2, 0xcb, 0x24, 0xbc,
+    0x38, 0x9f, 0xbd, 0xee, 0xfc, 0x2c, 0x74, 0xff, 0xee, 0xc6, 0xf8, 0xc1,
+    0x9d, 0xb0, 0xf0, 0xe9, 0xda, 0x69, 0xa1, 0x53, 0xf0, 0x5e, 0x0a, 0x4c,
+    0x94, 0xb2, 0xfe, 0x7d, 0x4a, 0x0a, 0xd7, 0x9d, 0x3e, 0x4e, 0x61, 0x5a,
+    0x1d, 0x3f, 0xcd, 0xed, 0x8f, 0x7c, 0x6c, 0x9d, 0x3f, 0xfe, 0xe6, 0xe9,
+    0xfa, 0xbd, 0xb4, 0xe6, 0x3e, 0x40, 0x3a, 0x01, 0x16, 0xea, 0x28, 0x13,
+    0x89, 0xfe, 0xab, 0xfb, 0x55, 0x75, 0x6f, 0x3a, 0x7f, 0xb5, 0x0e, 0xac,
+    0xe1, 0x77, 0xb3, 0xa7, 0xff, 0x5e, 0x1b, 0x46, 0x1a, 0x71, 0x01, 0x0e,
+    0x8a, 0x47, 0x57, 0x0b, 0xbb, 0x3a, 0xd0, 0xf2, 0x7c, 0x35, 0xbb, 0xe1,
+    0xd3, 0xfe, 0x7b, 0x0e, 0x1f, 0x80, 0x7b, 0x79, 0xd1, 0xaf, 0x3e, 0x57,
+    0x09, 0x67, 0xb9, 0x85, 0x74, 0x74, 0xff, 0x27, 0xff, 0xc1, 0xf2, 0x93,
+    0x27, 0x43, 0x87, 0xbf, 0xac, 0x47, 0x3b, 0x4d, 0x34, 0x3a, 0x7f, 0xfd,
+    0x4a, 0xe0, 0xb7, 0xd5, 0xd6, 0x69, 0x4d, 0xe2, 0x96, 0x5f, 0xc5, 0x26,
+    0x5c, 0x90, 0x86, 0xda, 0x2c, 0x90, 0xe9, 0xfb, 0x6d, 0xab, 0xc9, 0x81,
+    0xd3, 0xf0, 0x58, 0x0b, 0x3c, 0xe8, 0x76, 0x67, 0xcf, 0xd0, 0x78, 0x17,
+    0xcc, 0xf5, 0xbb, 0x4c, 0x97, 0xcd, 0x71, 0xa9, 0x8b, 0xdf, 0x0c, 0x8a,
+    0x8d, 0x27, 0xf9, 0xaf, 0x8e, 0x71, 0x87, 0xda, 0x18, 0x38, 0x5b, 0x6c,
+    0xc2, 0x77, 0x98, 0xf2, 0xb9, 0x1e, 0x8f, 0xe8, 0x4d, 0xcf, 0xfe, 0x0a,
+    0xd3, 0xad, 0xd3, 0x83, 0x40, 0xf3, 0xa7, 0x05, 0x6b, 0xce, 0x95, 0x01,
+    0xf3, 0xa9, 0x26, 0x7f, 0xea, 0xd8, 0xb6, 0x1f, 0xb7, 0xbb, 0xd7, 0x9d,
+    0x3f, 0x5f, 0x97, 0xa6, 0x9a, 0x1d, 0x25, 0xb3, 0x35, 0xe2, 0x93, 0x3d,
+    0x19, 0x98, 0x18, 0xdd, 0x26, 0xe8, 0x63, 0x6f, 0xc9, 0x33, 0xa4, 0x98,
+    0x7b, 0x69, 0x1f, 0xd4, 0xab, 0xbc, 0x61, 0xd4, 0x04, 0xea, 0x3d, 0xd9,
+    0xef, 0xd0, 0xad, 0xcc, 0x36, 0x79, 0x09, 0x8e, 0xe9, 0xb3, 0xd3, 0xf9,
+    0x74, 0x1e, 0xbb, 0xf1, 0xa2, 0x35, 0x9f, 0x07, 0xae, 0xfc, 0x68, 0xa9,
+    0x66, 0xbf, 0x1a, 0x21, 0xa9, 0x2e, 0x8f, 0x52, 0xcc, 0xa7, 0xfe, 0x5d,
+    0xbd, 0x74, 0x1e, 0xbb, 0xf1, 0xa2, 0x3e, 0x9f, 0x07, 0xae, 0xfc, 0x68,
+    0xb1, 0xe7, 0xf8, 0x6f, 0xfe, 0xd1, 0x87, 0x03, 0xa4, 0xba, 0x3e, 0xa7,
+    0x0c, 0xa7, 0x6b, 0xa2, 0xbf, 0x9d, 0x3f, 0x3b, 0x63, 0x5b, 0xbe, 0x1d,
+    0x3f, 0xc3, 0x7f, 0x66, 0xf9, 0xcb, 0x3a, 0x7b, 0xe5, 0x20, 0x1d, 0x3f,
+    0xff, 0xcc, 0x03, 0x5d, 0x56, 0xf6, 0x9e, 0xda, 0x73, 0x37, 0x89, 0xd0,
+    0x88, 0x85, 0xd9, 0x0c, 0xeb, 0xbf, 0x1a, 0x2d, 0x09, 0xff, 0x5e, 0x8e,
+    0xfe, 0xb0, 0xc2, 0xb4, 0x3a, 0x3c, 0x7d, 0x20, 0x4f, 0x3f, 0xff, 0xfc,
+    0x81, 0xbb, 0x14, 0x6e, 0x26, 0xdb, 0x3b, 0xac, 0x85, 0x7a, 0xb8, 0x74,
+    0x02, 0x25, 0xf6, 0x43, 0x3f, 0x3a, 0xfd, 0xc1, 0x6f, 0x8e, 0x9f, 0x37,
+    0x2b, 0x6c, 0x74, 0xff, 0xf5, 0x73, 0x34, 0xe6, 0xd9, 0xd5, 0x6f, 0x6c,
+    0x74, 0x60, 0x7e, 0xa2, 0x4b, 0x0c, 0x8c, 0x8a, 0x85, 0x34, 0xff, 0xbe,
+    0x6f, 0x6d, 0x1c, 0xbb, 0xc0, 0xe9, 0xfe, 0x4e, 0xc5, 0xe0, 0xd5, 0xd1,
+    0xd3, 0xff, 0xfd, 0xba, 0x7f, 0xb6, 0x9b, 0x6a, 0x07, 0xf0, 0x59, 0x59,
+    0x3a, 0x55, 0x94, 0x4d, 0x70, 0xde, 0x7e, 0x06, 0xe6, 0x15, 0xa1, 0xd3,
+    0xee, 0x6e, 0xc7, 0xf9, 0xd3, 0xfc, 0x3d, 0xe1, 0xd6, 0xe8, 0x58, 0xe9,
+    0x55, 0x1f, 0x0f, 0x8a, 0x21, 0x11, 0x68, 0x30, 0x8e, 0x9f, 0xd5, 0xb7,
+    0x13, 0x68, 0xa3, 0xa7, 0xf3, 0xe8, 0x32, 0x2d, 0x81, 0xd3, 0xab, 0x76,
+    0x74, 0xf9, 0xce, 0xbb, 0xec, 0x4e, 0x8e, 0x8f, 0x16, 0xc6, 0xa7, 0xfa,
+    0xab, 0x4a, 0xf7, 0xab, 0x43, 0xa2, 0x93, 0x02, 0xc4, 0xca, 0xdd, 0xb2,
+    0x45, 0x3d, 0x5b, 0xbe, 0x1d, 0x3f, 0x20, 0xf6, 0xfa, 0xc9, 0xd3, 0xff,
+    0xfc, 0x83, 0xdb, 0xeb, 0x3a, 0xab, 0x8d, 0x8f, 0xd7, 0xbd, 0xa1, 0xd1,
+    0xfd, 0x12, 0x9c, 0x2c, 0x92, 0xdd, 0xa5, 0xf3, 0x6d, 0x70, 0x95, 0x8c,
+    0x3a, 0x85, 0xe5, 0x46, 0x45, 0xb8, 0x75, 0x7c, 0x4c, 0x30, 0xd9, 0xcc,
+    0x37, 0x39, 0x19, 0x46, 0xb1, 0xef, 0xe8, 0x5a, 0x4f, 0xce, 0xe9, 0xd0,
+    0xb3, 0x87, 0x4f, 0x56, 0xef, 0x87, 0x49, 0xdb, 0xa3, 0xd0, 0x13, 0x09,
+    0xf0, 0x7a, 0xef, 0xc6, 0x8b, 0x5a, 0x7f, 0xd6, 0xf5, 0xd0, 0x7a, 0xef,
+    0xc6, 0x8a, 0x0e, 0x4b, 0xd7, 0x11, 0x4b, 0x45, 0x6a, 0x32, 0x9f, 0xfc,
+    0xb5, 0x5b, 0xd7, 0x41, 0xeb, 0xbf, 0x1a, 0x28, 0xb9, 0xfc, 0xba, 0x0f,
+    0x5d, 0xf8, 0xd1, 0x75, 0x43, 0xd9, 0x6d, 0xde, 0x84, 0x8a, 0x13, 0x2a,
+    0x17, 0x1b, 0x9f, 0x5e, 0xfa, 0x3d, 0x6c, 0x9d, 0x71, 0x52, 0x7c, 0x1e,
+    0xbb, 0xf1, 0xa2, 0x21, 0x9d, 0xba, 0xe8, 0xe9, 0x2e, 0x8f, 0x3b, 0x13,
+    0x29, 0xfc, 0xba, 0x0f, 0x5d, 0xf8, 0xd1, 0x1b, 0x4f, 0xe5, 0xd0, 0x7a,
+    0xef, 0xc6, 0x8a, 0x6e, 0x7f, 0x2e, 0x83, 0xd7, 0x7e, 0x34, 0x54, 0x13,
+    0xf9, 0x74, 0x1e, 0xbb, 0xf1, 0xa2, 0xa6, 0x9f, 0x07, 0xae, 0xfc, 0x68,
+    0xac, 0x27, 0xc9, 0xa7, 0x5d, 0x81, 0xd3, 0xfc, 0xf5, 0xd0, 0x7a, 0xef,
+    0xc6, 0x88, 0xfe, 0x75, 0x36, 0x07, 0x49, 0x74, 0x8b, 0x9f, 0x19, 0x59,
+    0x48, 0xa1, 0xcf, 0xfe, 0x5a, 0xad, 0xeb, 0xa0, 0xf5, 0xdf, 0x8d, 0x13,
+    0x7c, 0xff, 0xca, 0xb7, 0xae, 0x83, 0xd7, 0x7e, 0x34, 0x4f, 0xd3, 0xed,
+    0x76, 0xed, 0xeb, 0x56, 0x27, 0x4b, 0x67, 0x43, 0xb2, 0x3c, 0x6e, 0xcd,
+    0xa7, 0xfb, 0x5d, 0x6d, 0xdf, 0x39, 0x77, 0xa1, 0xd3, 0xed, 0x5f, 0xc2,
+    0xfc, 0x74, 0xfb, 0x5c, 0x76, 0x7f, 0x7f, 0x63, 0xa7, 0xff, 0x99, 0x99,
+    0x99, 0x99, 0x99, 0xb1, 0xc9, 0xd3, 0xe0, 0x4c, 0x2d, 0x45, 0x4d, 0xa6,
+    0x85, 0x45, 0x1b, 0xed, 0x09, 0xa5, 0xd9, 0x4b, 0x34, 0x30, 0xc8, 0xc9,
+    0xcc, 0x2a, 0x27, 0x80, 0x51, 0x8e, 0x9f, 0xff, 0xa9, 0x59, 0xe0, 0x5e,
+    0x1d, 0x6d, 0xb3, 0xce, 0xf6, 0x74, 0xfa, 0xfd, 0xb4, 0x03, 0xa7, 0xff,
+    0xff, 0x0d, 0xff, 0x40, 0x67, 0xea, 0xda, 0x2b, 0xa6, 0xd5, 0xad, 0xde,
+    0xd0, 0x0e, 0x9e, 0xb7, 0xa6, 0x27, 0x47, 0x49, 0x90, 0x82, 0xee, 0xc9,
+    0x45, 0xfa, 0x7f, 0xfc, 0xee, 0xd8, 0xbe, 0xc7, 0xed, 0x5f, 0x20, 0x27,
+    0xf3, 0xa7, 0xb0, 0x52, 0x3c, 0xe9, 0xf6, 0x47, 0xbb, 0x79, 0xd3, 0xfb,
+    0x6c, 0xa5, 0xfd, 0xf3, 0x1d, 0x20, 0x63, 0xfd, 0xa2, 0x24, 0x27, 0x9f,
+    0xf3, 0x63, 0xd7, 0xe6, 0xd7, 0xef, 0xbc, 0x9d, 0x2d, 0x79, 0xd3, 0x66,
+    0x8e, 0x84, 0x35, 0x3f, 0x0a, 0x4f, 0xfd, 0xd3, 0x72, 0xf3, 0x5b, 0xda,
+    0x28, 0xe9, 0xdc, 0x47, 0x0e, 0x86, 0x3d, 0xfc, 0xa1, 0xc3, 0x2b, 0xbe,
+    0xa2, 0x74, 0x8c, 0xfd, 0xc3, 0xd0, 0x86, 0xca, 0x8c, 0x45, 0xc3, 0x90,
+    0x80, 0x9c, 0xe7, 0xe5, 0x1d, 0x3f, 0xd5, 0xcc, 0xd7, 0x37, 0x5f, 0x1d,
+    0x16, 0x7a, 0xe2, 0x3f, 0x35, 0x89, 0xd0, 0x06, 0xd1, 0x44, 0x13, 0xb4,
+    0xd3, 0x43, 0xa7, 0xb0, 0x14, 0x62, 0x96, 0x5f, 0xcd, 0x8b, 0xce, 0x9f,
+    0xdf, 0xdb, 0x99, 0xdd, 0xf6, 0x74, 0xc9, 0xe3, 0xa5, 0x8b, 0x1f, 0x0f,
+    0xf1, 0x7e, 0x1a, 0xc3, 0x26, 0x0d, 0xb3, 0xfe, 0xe1, 0x21, 0x3f, 0xf6,
+    0x1d, 0xfd, 0x43, 0xdb, 0x8d, 0xcb, 0x3a, 0x7f, 0xe6, 0xdf, 0xee, 0xb8,
+    0x94, 0xe3, 0x28, 0xe9, 0xe6, 0xe6, 0x7c, 0x68, 0x83, 0xa7, 0xeb, 0xdb,
+    0x6b, 0xfb, 0x79, 0xd0, 0x08, 0xec, 0x52, 0x3f, 0x11, 0x9d, 0x17, 0x4c,
+    0x1d, 0x1d, 0x36, 0x9a, 0x1d, 0x0f, 0x35, 0xda, 0x0b, 0x4f, 0x65, 0x91,
+    0xd1, 0x4b, 0x34, 0x53, 0xec, 0xfe, 0xeb, 0xec, 0x9d, 0x08, 0x7b, 0xdf,
+    0x8c, 0xa7, 0x69, 0xa6, 0x85, 0x41, 0x4b, 0x2f, 0xe7, 0x93, 0x44, 0x70,
+    0xa8, 0xf1, 0xbb, 0x41, 0x98, 0x44, 0xe2, 0x77, 0x0e, 0xc1, 0x7d, 0x9c,
+    0x29, 0x93, 0xa7, 0xba, 0xb1, 0xf8, 0xe9, 0xff, 0x98, 0x7e, 0x16, 0xc5,
+    0xc6, 0x1f, 0x8e, 0x84, 0x44, 0x07, 0xc3, 0x59, 0x22, 0x9f, 0x35, 0x06,
+    0xd0, 0xe9, 0xd4, 0xad, 0x79, 0xd3, 0xfa, 0xb2, 0x35, 0xcd, 0xa1, 0xd1,
+    0xd1, 0xe7, 0x88, 0xfc, 0x38, 0x89, 0x57, 0x4e, 0x73, 0xf7, 0x29, 0xc1,
+    0x65, 0x1e, 0x20, 0x29, 0xf5, 0x8f, 0x5b, 0x63, 0x44, 0x04, 0xb3, 0x73,
+    0x3f, 0x03, 0x3e, 0xf1, 0xd0, 0xe9, 0xfe, 0x60, 0xc3, 0x55, 0x38, 0x8a,
+    0x3a, 0x79, 0x4d, 0x4a, 0x3a, 0x7c, 0xdf, 0x26, 0x39, 0x3a, 0x7f, 0x03,
+    0x99, 0x41, 0xe2, 0x1d, 0x3d, 0x8f, 0xc0, 0xc5, 0x4d, 0xa6, 0x85, 0x43,
+    0x1b, 0xad, 0x08, 0xa7, 0xeb, 0x07, 0xbc, 0x50, 0xa5, 0x9a, 0x18, 0x65,
+    0x5b, 0x95, 0x0c, 0x54, 0x5f, 0x04, 0x3d, 0x96, 0xd9, 0xd0, 0x90, 0x70,
+    0xa3, 0xb8, 0x46, 0x4f, 0xbb, 0xe7, 0x77, 0xf8, 0xd1, 0x03, 0xcf, 0xfb,
+    0x7d, 0xe0, 0xda, 0x9b, 0x8d, 0xd1, 0xd3, 0xac, 0x30, 0x3a, 0x6d, 0x34,
+    0x3a, 0x7f, 0x02, 0x53, 0xaf, 0xcf, 0x5f, 0x8d, 0x9e, 0x83, 0x71, 0xd2,
+    0x30, 0x81, 0xd6, 0x7f, 0xe1, 0xaf, 0xfb, 0xb7, 0xfe, 0xbc, 0x58, 0xe8,
+    0x63, 0xe9, 0xa2, 0x39, 0xff, 0xd4, 0xa5, 0x5b, 0xe8, 0x3d, 0x77, 0xe3,
+    0x44, 0x31, 0x1b, 0x3f, 0x31, 0x20, 0x9f, 0x07, 0xae, 0xfc, 0x68, 0x82,
+    0xa7, 0x6d, 0x94, 0x74, 0x51, 0xe6, 0xa1, 0x94, 0xf7, 0x32, 0xdf, 0x15,
+    0x3a, 0xc3, 0x02, 0xa7, 0xbb, 0x1b, 0xfe, 0x54, 0xfe, 0x4c, 0x2b, 0x99,
+    0x6f, 0x8a, 0x82, 0xa7, 0xea, 0xf3, 0x6d, 0x94, 0x54, 0xda, 0x68, 0x54,
+    0xfc, 0x2c, 0x38, 0x20, 0x15, 0x14, 0x98, 0x57, 0x88, 0x94, 0x37, 0xb2,
+    0x3f, 0x8c, 0xc4, 0x2b, 0x42, 0xbf, 0xc3, 0x13, 0x20, 0x14, 0xb3, 0xf4,
+    0x95, 0xbd, 0x3c, 0x3d, 0xc7, 0x3d, 0x3f, 0xe6, 0x7d, 0x8d, 0x64, 0x1b,
+    0x27, 0x4f, 0xf7, 0x36, 0xce, 0xba, 0x6f, 0x98, 0xe9, 0xfe, 0x6c, 0x5f,
+    0xac, 0xde, 0xa5, 0x1d, 0x0c, 0x7e, 0xdb, 0x3b, 0x9f, 0xff, 0x9c, 0xbb,
+    0x7d, 0xef, 0x55, 0x61, 0xdf, 0x3b, 0xbf, 0xc6, 0x8b, 0xee, 0x77, 0x2b,
+    0xc7, 0x4f, 0x70, 0x69, 0xe7, 0x43, 0x1b, 0xb4, 0x1b, 0x9f, 0xf0, 0xa3,
+    0xf9, 0xba, 0x04, 0xc9, 0xd3, 0xfb, 0x9f, 0x7e, 0x17, 0xee, 0x8f, 0x10,
+    0x0c, 0xeb, 0x07, 0x9e, 0x20, 0x18, 0xa3, 0xe9, 0xed, 0x0a, 0x6b, 0x79,
+    0xe2, 0x01, 0x9e, 0xb1, 0xc5, 0xe7, 0x88, 0x06, 0x7f, 0x27, 0xb7, 0x5f,
+    0x7c, 0xc7, 0x88, 0x06, 0x72, 0x0f, 0x47, 0x88, 0x06, 0x3a, 0x45, 0xc2,
+    0x88, 0xb6, 0x5c, 0xe9, 0x02, 0x70, 0x37, 0x0f, 0x10, 0x0c, 0x1e, 0x20,
+    0x19, 0x99, 0x47, 0x88, 0x06, 0x3a, 0x37, 0x28, 0x2f, 0x3c, 0x8a, 0xe9,
+    0x8f, 0x10, 0x0c, 0xee, 0x5f, 0x8f, 0x10, 0x0c, 0xff, 0x86, 0xde, 0xbd,
+    0xa7, 0xac, 0x0f, 0x10, 0x0c, 0xd7, 0xd1, 0xe2, 0x01, 0x9f, 0xc3, 0x7a,
+    0x67, 0x2d, 0xf1, 0xe2, 0x01, 0x9f, 0x27, 0xfb, 0x1f, 0x8f, 0x10, 0x0c,
+    0xc9, 0x93, 0xc4, 0x03, 0x00, 0x7a, 0xfc, 0x35, 0x9f, 0x70, 0x5b, 0x17,
+    0x9a, 0x20, 0x19, 0xbe, 0x63, 0xc4, 0x02, 0xb3, 0x69, 0x3e, 0x46, 0x55,
+    0xf4, 0x78, 0x80, 0x67, 0xbb, 0xb1, 0xf1, 0xe2, 0x01, 0x9c, 0xc1, 0xe3,
+    0xc4, 0x03, 0x3f, 0xea, 0xc7, 0x3d, 0x35, 0x0f, 0xd9, 0x3c, 0x40, 0x33,
+    0xee, 0xed, 0xef, 0x63, 0xc4, 0x03, 0x14, 0x88, 0x0d, 0xa6, 0x4c, 0x1f,
+    0x1e, 0x20, 0x18, 0x7a, 0xa8, 0xfe, 0x88, 0xea, 0x12, 0xe8, 0xab, 0xb3,
+    0x3f, 0x8c, 0xf2, 0x5d, 0xc8, 0x53, 0xf6, 0x45, 0x3e, 0xae, 0x66, 0xf1,
+    0x3c, 0x40, 0x33, 0xfb, 0xa6, 0xf3, 0x80, 0xdc, 0x3c, 0x40, 0x3d, 0x1b,
+    0x49, 0xc0, 0xda, 0x1e, 0x20, 0x18, 0xf1, 0xfc, 0x82, 0x8c, 0xf2, 0x0b,
+    0xf2, 0x78, 0x80, 0x67, 0xeb, 0x71, 0xf5, 0x8b, 0xcf, 0x10, 0x0c, 0x52,
+    0x22, 0x7e, 0x21, 0xec, 0xb6, 0x7f, 0xb6, 0xd9, 0x5e, 0x7b, 0x0f, 0x8f,
+    0x10, 0x0c, 0x90, 0xf1, 0x00, 0xcd, 0x78, 0x74, 0x7c, 0x7b, 0x47, 0x98,
+    0x3e, 0x3c, 0x40, 0x33, 0xeb, 0xe6, 0x53, 0x13, 0xc4, 0x03, 0x3f, 0x20,
+    0xf6, 0xfa, 0xc9, 0xe2, 0x01, 0x86, 0x44, 0x80, 0x91, 0xf0, 0xd2, 0x3a,
+    0x64, 0x05, 0x54, 0x36, 0x9c, 0x40, 0x06, 0x0d, 0x90, 0xd9, 0x77, 0xc5,
+    0x19, 0x95, 0xaf, 0xc8, 0xf0, 0x75, 0xa1, 0x29, 0xfa, 0x17, 0xf3, 0xae,
+    0xfc, 0x68, 0x80, 0x56, 0x8b, 0xd9, 0xef, 0xee, 0xcf, 0xa5, 0x1d, 0x3f,
+    0xf3, 0xc6, 0xbd, 0xb4, 0xfb, 0xee, 0xdc, 0x3a, 0x6f, 0x98, 0xa9, 0x7f,
+    0x2a, 0x76, 0xdb, 0x03, 0xa6, 0xd3, 0x42, 0xa1, 0x0f, 0x73, 0x5e, 0x2c,
+    0xe0, 0x96, 0x83, 0x93, 0x94, 0x99, 0x29, 0x67, 0x83, 0x3f, 0xfb, 0x99,
+    0xaf, 0xe8, 0x1f, 0xbe, 0xf9, 0xb1, 0x3a, 0x30, 0x65, 0xa6, 0xbc, 0x7f,
+    0xd4, 0x96, 0xb4, 0x39, 0xb2, 0xbf, 0xa1, 0xc9, 0xf8, 0xb2, 0x7f, 0x27,
+    0x3f, 0x3a, 0x74, 0xd9, 0x3a, 0x7e, 0x07, 0x1e, 0xc1, 0x81, 0xd3, 0xfe,
+    0x7e, 0x75, 0x0d, 0x29, 0x83, 0xf9, 0xd3, 0xff, 0x06, 0xee, 0x9e, 0xc1,
+    0xf7, 0xe5, 0x1d, 0x3f, 0x7e, 0xd0, 0x12, 0xb6, 0x54, 0xf3, 0x9b, 0xb7,
+    0x0e, 0x9f, 0x53, 0x8f, 0x6c, 0x4e, 0x9e, 0xa1, 0x67, 0x95, 0x00, 0x7d,
+    0x42, 0x46, 0xee, 0x51, 0x0c, 0x9b, 0xcd, 0x16, 0xa2, 0x06, 0xd1, 0x2e,
+    0x13, 0x13, 0xf6, 0x39, 0x00, 0x6e, 0x1d, 0x3c, 0x83, 0xcc, 0x9d, 0x3b,
+    0xb7, 0x63, 0x27, 0x4f, 0xfd, 0xf2, 0xab, 0xdb, 0x4e, 0xb7, 0xdf, 0xf3,
+    0xa7, 0xf7, 0x4d, 0x8e, 0x6b, 0x1e, 0x1d, 0x3f, 0xcd, 0xc4, 0xf2, 0x74,
+    0xdc, 0x3a, 0x6e, 0x66, 0x8f, 0xb0, 0x0d, 0x67, 0xf3, 0xeb, 0x3f, 0xb3,
+    0xca, 0x3a, 0x19, 0x33, 0x74, 0x22, 0xb8, 0x5a, 0xf6, 0x59, 0x3e, 0xb7,
+    0x5d, 0x74, 0xc7, 0x4d, 0x9c, 0x9d, 0x3b, 0x4d, 0x34, 0x3a, 0x6f, 0xac,
+    0xa5, 0x97, 0xf0, 0x07, 0xb5, 0x93, 0x59, 0xff, 0x56, 0x46, 0xff, 0xb8,
+    0x28, 0xe1, 0xd3, 0xaf, 0xea, 0x2a, 0x1e, 0x8f, 0xf5, 0x42, 0x13, 0x64,
+    0x3a, 0xc7, 0xf3, 0xfb, 0x83, 0x58, 0xfd, 0xf9, 0xe7, 0x4f, 0xf0, 0xd3,
+    0xaa, 0x5e, 0x9a, 0x68, 0x54, 0xe5, 0x5f, 0x0e, 0x8d, 0x9e, 0xbb, 0xa3,
+    0xc9, 0xf5, 0x38, 0xf6, 0x79, 0xd3, 0xf6, 0x1d, 0x35, 0x0f, 0x47, 0x43,
+    0x26, 0x96, 0x88, 0xb7, 0x08, 0xde, 0x12, 0x7e, 0x27, 0x9f, 0x9d, 0x84,
+    0x06, 0x01, 0x3a, 0x7f, 0xf5, 0x75, 0x6a, 0xac, 0x5f, 0x5f, 0x57, 0x47,
+    0x4d, 0xbb, 0x3a, 0x67, 0x32, 0x74, 0xfa, 0x9d, 0x20, 0xf5, 0x46, 0xb3,
+    0xf0, 0xac, 0x6a, 0x45, 0xba, 0xdd, 0xe7, 0xba, 0xad, 0xd9, 0xd3, 0xff,
+    0x35, 0x0b, 0xf7, 0x42, 0x2d, 0xa1, 0xd2, 0x40, 0x44, 0x30, 0x92, 0xf0,
+    0x86, 0x30, 0x6e, 0x5b, 0x5f, 0x1e, 0xb7, 0x52, 0x8c, 0x7f, 0x97, 0xfa,
+    0x16, 0x08, 0x42, 0x14, 0xbf, 0x65, 0x3c, 0x6e, 0x3b, 0x1b, 0x4c, 0xf8,
+    0xb0, 0x63, 0x57, 0xe4, 0xa8, 0xbe, 0xd3, 0xdd, 0x46, 0xd7, 0x3f, 0xd4,
+    0x02, 0xdc, 0x7d, 0x6c, 0xe9, 0xf8, 0x7e, 0xae, 0xad, 0xe7, 0x4f, 0xad,
+    0xfa, 0xba, 0x43, 0xa7, 0xdf, 0x9c, 0x7b, 0x6b, 0xca, 0x86, 0x45, 0xcd,
+    0x1a, 0xec, 0xb7, 0xf1, 0x4c, 0xff, 0xdf, 0xc7, 0xbb, 0xfd, 0x59, 0x46,
+    0x13, 0xa7, 0x6b, 0x27, 0x47, 0x40, 0x1f, 0x22, 0x91, 0x65, 0xf8, 0xd1,
+    0x02, 0xcb, 0x86, 0xa0, 0x52, 0x49, 0xc3, 0x79, 0xa0, 0xfc, 0xff, 0x93,
+    0x5b, 0x69, 0xf9, 0x7f, 0x7c, 0xc5, 0x4f, 0xf8, 0x5b, 0x15, 0x5f, 0x2b,
+    0x1e, 0x1d, 0x3f, 0xff, 0xb6, 0xc1, 0xf5, 0x3a, 0x4c, 0xe6, 0x87, 0xd6,
+    0x3f, 0x1d, 0x3f, 0xf6, 0x6f, 0x1d, 0x4a, 0x6a, 0x1e, 0x6b, 0x1d, 0x00,
+    0x8e, 0x6d, 0x9f, 0x71, 0x82, 0x19, 0x35, 0x94, 0x8c, 0xaa, 0x7f, 0xff,
+    0x83, 0x0a, 0x47, 0x2e, 0xdf, 0x96, 0x57, 0x5b, 0x61, 0xf1, 0xd3, 0xb0,
+    0x17, 0x9d, 0x0c, 0xaa, 0x19, 0x4b, 0xbb, 0x8e, 0x02, 0xca, 0x3b, 0x65,
+    0x9f, 0xcf, 0x72, 0x86, 0xf7, 0x47, 0x4f, 0xfe, 0x0f, 0x0d, 0x3a, 0x1a,
+    0x60, 0x6c, 0x9d, 0x3f, 0xad, 0xcd, 0xd2, 0xab, 0x27, 0x45, 0x1f, 0xc3,
+    0xa4, 0x69, 0xf9, 0x3f, 0xf2, 0xa9, 0x47, 0x4f, 0xab, 0xa4, 0x0c, 0x9d,
+    0x3b, 0x9c, 0xc4, 0xe9, 0xff, 0xb1, 0xf2, 0x6f, 0x53, 0xbd, 0x6d, 0x14,
+    0x74, 0xb3, 0xf1, 0xf3, 0x70, 0x76, 0x4d, 0x82, 0x2d, 0x74, 0x84, 0x64,
+    0x22, 0x66, 0x9b, 0x23, 0xe4, 0x38, 0xa7, 0xfc, 0x29, 0xfb, 0x1a, 0x75,
+    0x8b, 0x7e, 0x3a, 0x77, 0x56, 0x07, 0x4f, 0xbe, 0xb1, 0xa7, 0x73, 0xa1,
+    0x8f, 0x13, 0xb1, 0xb9, 0xca, 0xc5, 0xc3, 0xa7, 0xfe, 0x56, 0x54, 0xdd,
+    0x30, 0x76, 0xdf, 0x1d, 0x3f, 0xe6, 0xb1, 0xae, 0x71, 0x34, 0xe1, 0xd0,
+    0xc8, 0x9f, 0x41, 0xee, 0xd1, 0x61, 0x95, 0xc5, 0x3e, 0x3d, 0xda, 0x35,
+    0xcc, 0x22, 0x39, 0x0c, 0x19, 0xff, 0xcf, 0x4d, 0xd3, 0x88, 0xe7, 0x6e,
+    0xfd, 0xe4, 0xe9, 0xfc, 0x9b, 0xea, 0xc5, 0xb6, 0x74, 0xf9, 0xb0, 0x67,
+    0x76, 0x3a, 0x7e, 0xef, 0xf6, 0xeb, 0x1c, 0x9d, 0x3f, 0xff, 0xfe, 0x06,
+    0xe0, 0xdf, 0x93, 0x2e, 0x20, 0x79, 0xb3, 0xc6, 0xc5, 0xbf, 0x56, 0x4e,
+    0x9f, 0xff, 0xff, 0xf6, 0x73, 0x5c, 0xdd, 0xab, 0x20, 0x09, 0x8f, 0x2e,
+    0xff, 0xd5, 0x39, 0xdf, 0x1b, 0x4c, 0x58, 0xe8, 0x64, 0xc7, 0x6e, 0x10,
+    0x33, 0xdf, 0x5e, 0x39, 0x3a, 0x6d, 0x34, 0x3a, 0x32, 0x6e, 0xf4, 0x23,
+    0x9f, 0x26, 0xee, 0xb6, 0x52, 0xcd, 0x14, 0x62, 0xaa, 0xc5, 0xc5, 0x0d,
+    0x98, 0xbb, 0x05, 0x23, 0x1a, 0x76, 0x61, 0x09, 0x3b, 0x4d, 0x34, 0x2a,
+    0x79, 0xfc, 0xaf, 0x14, 0xb2, 0xfe, 0x7d, 0x5d, 0x27, 0xd9, 0x3d, 0xdf,
+    0xd2, 0xb0, 0x3e, 0x51, 0x30, 0x98, 0x32, 0x74, 0xe7, 0x4d, 0xe3, 0xa1,
+    0x8d, 0x92, 0x0a, 0xcf, 0xc3, 0x8e, 0x5c, 0xae, 0x1d, 0x3f, 0xfc, 0x3c,
+    0x72, 0x82, 0xad, 0x4d, 0xb4, 0xe8, 0xe9, 0xf6, 0x1a, 0xf4, 0xac, 0x4e,
+    0x9f, 0x26, 0x5b, 0x05, 0x1e, 0xcf, 0xd9, 0xf3, 0x58, 0x7d, 0xd9, 0xec,
+    0xfd, 0x9a, 0xde, 0x7b, 0x3f, 0x67, 0xbb, 0x7d, 0x64, 0xf6, 0x7e, 0xc7,
+    0x47, 0xa2, 0x24, 0x53, 0xe6, 0xac, 0xd0, 0x9e, 0xcf, 0xd8, 0x3d, 0x9f,
+    0xb3, 0x5f, 0x0f, 0x67, 0xea, 0x8b, 0x79, 0x3c, 0x4f, 0xe7, 0xb4, 0x89,
+    0xea, 0xd6, 0x4f, 0x8f, 0x67, 0xec, 0x1e, 0xcf, 0xd9, 0xbe, 0x63, 0xd9,
+    0xfb, 0x3f, 0xd5, 0xf5, 0x85, 0x3a, 0xae, 0x8f, 0x67, 0xec, 0xfd, 0x5b,
+    0x4c, 0xf7, 0x81, 0xec, 0xfd, 0x8f, 0x91, 0x48, 0x24, 0x79, 0x46, 0x9e,
+    0x0c, 0x1b, 0x87, 0xb3, 0xf6, 0x0f, 0x67, 0xed, 0x1a, 0xe9, 0xb4, 0xd0,
+    0xf6, 0x7e, 0xc3, 0xd5, 0x88, 0xf4, 0x69, 0x50, 0x85, 0xc6, 0x13, 0x60,
+    0x50, 0xa3, 0x1c, 0xc2, 0xef, 0x8b, 0xda, 0x13, 0x4f, 0x53, 0xdb, 0xf9,
+    0x6c, 0xfd, 0x2d, 0x12, 0x13, 0xfe, 0xaf, 0x75, 0x41, 0xa5, 0xed, 0xc3,
+    0xa6, 0x7e, 0x05, 0x46, 0x08, 0x98, 0xc5, 0x08, 0x4f, 0xe0, 0x17, 0x25,
+    0xae, 0x71, 0x96, 0x7f, 0xfc, 0xf0, 0x67, 0x56, 0xe3, 0x75, 0xb6, 0x55,
+    0xb8, 0x74, 0xfe, 0x77, 0xbc, 0xa6, 0x5c, 0xa3, 0xa3, 0x14, 0x46, 0x02,
+    0xbc, 0x32, 0xf3, 0x13, 0xd5, 0xe8, 0x7d, 0x0b, 0xae, 0x73, 0x8f, 0xb8,
+    0x5c, 0x4f, 0xfb, 0xfb, 0x62, 0x2d, 0xbd, 0xf7, 0xe3, 0xa7, 0xe1, 0xbf,
+    0xfb, 0xb7, 0x9d, 0x3b, 0x4d, 0x34, 0x2a, 0x77, 0xe6, 0xf8, 0xa5, 0x97,
+    0xf3, 0xfe, 0x1b, 0x7f, 0xe0, 0xa7, 0x56, 0x07, 0x4f, 0xf0, 0xdf, 0xda,
+    0x9e, 0xdf, 0x62, 0x74, 0x74, 0x99, 0xa2, 0x90, 0x7e, 0x4c, 0x12, 0xde,
+    0x1f, 0x4f, 0xf8, 0x45, 0x3b, 0x76, 0x33, 0xac, 0xdc, 0x3a, 0x76, 0x9a,
+    0x68, 0x58, 0x84, 0x13, 0xe0, 0xf5, 0xdf, 0x8b, 0x10, 0x81, 0x66, 0xb6,
+    0x76, 0x9a, 0x68, 0x58, 0x83, 0xd0, 0x58, 0x83, 0xcb, 0x35, 0xb2, 0x55,
+    0x22, 0x63, 0xce, 0x13, 0xff, 0x6d, 0x9e, 0x9c, 0xad, 0xf9, 0x94, 0x74,
+    0x31, 0xf5, 0x3a, 0x28, 0x9f, 0x71, 0xb8, 0xca, 0x3a, 0x78, 0x51, 0xbf,
+    0x9d, 0x3b, 0xf3, 0x7c, 0x74, 0x60, 0x6f, 0xd4, 0x43, 0x3e, 0xf3, 0x6d,
+    0x94, 0x54, 0xf8, 0x6c, 0x46, 0x8a, 0x9a, 0xbc, 0x54, 0xda, 0x68, 0x54,
+    0x51, 0xfb, 0x64, 0x9b, 0x84, 0x7a, 0x0a, 0xcf, 0xe1, 0xfc, 0xdf, 0x6e,
+    0x9d, 0xca, 0x59, 0xbc, 0x86, 0x4e, 0x01, 0x19, 0x6e, 0x1a, 0x93, 0xff,
+    0x37, 0xd9, 0xaa, 0xea, 0xc6, 0xff, 0x9d, 0x3f, 0xfe, 0xc5, 0xf9, 0xd1,
+    0x83, 0x6c, 0x9b, 0x61, 0x43, 0xa3, 0x68, 0x97, 0xb4, 0x49, 0xfd, 0x9f,
+    0xca, 0xce, 0x97, 0x89, 0xd0, 0xcb, 0x90, 0xd4, 0x98, 0x91, 0xba, 0x04,
+    0x74, 0x77, 0x0c, 0xac, 0x91, 0x4e, 0xd3, 0x4d, 0x0a, 0x9e, 0xfa, 0xc7,
+    0xa2, 0x96, 0x5f, 0xcf, 0xdf, 0xa8, 0x2a, 0x9c, 0x3a, 0x1e, 0x7b, 0xd9,
+    0x31, 0x9f, 0xfe, 0x1c, 0x75, 0x63, 0xf3, 0x0f, 0xaf, 0x01, 0xb3, 0xa7,
+    0xff, 0xff, 0xfb, 0x99, 0xfd, 0x9d, 0x5b, 0xb4, 0xe2, 0x6f, 0xc9, 0xa9,
+    0xe9, 0xbb, 0x1e, 0x3e, 0x82, 0x8e, 0x9f, 0xfe, 0xa6, 0x5f, 0x42, 0xdd,
+    0xfa, 0xbf, 0xa0, 0x1d, 0x3c, 0xef, 0xbf, 0x9d, 0x1d, 0x0f, 0x3f, 0x7b,
+    0x4f, 0x9f, 0xfc, 0xfa, 0x0f, 0x94, 0x99, 0xfd, 0x96, 0xa3, 0xa7, 0x93,
+    0xaa, 0x51, 0xd0, 0xca, 0x83, 0x5e, 0x45, 0x4a, 0x57, 0x18, 0x68, 0x90,
+    0xf6, 0x95, 0x3f, 0x6b, 0xf2, 0x83, 0x8b, 0xce, 0x9f, 0xf5, 0x86, 0xb2,
+    0x6e, 0xaf, 0x1f, 0x8e, 0x9f, 0xff, 0x27, 0x19, 0x55, 0x8f, 0x19, 0x5f,
+    0x82, 0xfe, 0x3a, 0x7f, 0xb2, 0xc1, 0xc6, 0x5f, 0x48, 0x74, 0x3d, 0x11,
+    0xb9, 0x56, 0x9f, 0xc9, 0xff, 0x8d, 0xb6, 0xc9, 0xd3, 0xfe, 0x1b, 0x73,
+    0x76, 0x00, 0x9d, 0x1d, 0x14, 0x9c, 0x87, 0x8c, 0x52, 0x19, 0xa0, 0x46,
+    0xa3, 0x39, 0xe7, 0xfe, 0xa7, 0x0e, 0x9f, 0x07, 0x55, 0x42, 0x74, 0xff,
+    0xda, 0xf4, 0xad, 0xb3, 0xac, 0xed, 0xb1, 0x3a, 0x2c, 0xfb, 0xb2, 0x4b,
+    0x3f, 0xd4, 0x21, 0x59, 0xa4, 0xd9, 0xd3, 0xff, 0xd5, 0xcc, 0xd3, 0x9b,
+    0x67, 0x55, 0xbd, 0xb1, 0xd3, 0xd5, 0xc4, 0xc9, 0xd3, 0xf3, 0xb2, 0x70,
+    0x5d, 0xac, 0x3b, 0x3a, 0x32, 0x7b, 0x7c, 0x20, 0x8e, 0x93, 0x22, 0xf1,
+    0x08, 0x9a, 0x72, 0x15, 0x73, 0xff, 0xc9, 0x9a, 0xeb, 0x99, 0x4f, 0xfb,
+    0xb1, 0x43, 0xa7, 0xff, 0xf0, 0xf2, 0xb6, 0x8d, 0xc4, 0xf9, 0x9e, 0xbd,
+    0x34, 0xd0, 0xa9, 0xee, 0xaa, 0xbf, 0x95, 0x3d, 0x7f, 0x5f, 0x0e, 0x9c,
+    0xf1, 0xec, 0xd1, 0x0c, 0xce, 0xd3, 0x4d, 0x0a, 0x9d, 0x43, 0xe2, 0x96,
+    0x5f, 0xcf, 0xfa, 0xb0, 0xae, 0xad, 0xe2, 0xd8, 0x1d, 0x1f, 0x1f, 0x38,
+    0x94, 0xcf, 0xe7, 0x8d, 0x73, 0x9d, 0xe0, 0x74, 0x32, 0x75, 0x78, 0x31,
+    0x74, 0x47, 0x89, 0x08, 0x42, 0xbe, 0xc8, 0xa7, 0x93, 0x88, 0xc7, 0x4f,
+    0xee, 0xe8, 0x3e, 0xf9, 0x04, 0xe9, 0xff, 0xe7, 0xa7, 0x5b, 0xfd, 0x9a,
+    0x0f, 0x5d, 0xf8, 0xd1, 0x06, 0x4f, 0xfe, 0x0b, 0x75, 0x43, 0xed, 0xa7,
+    0xdf, 0xb8, 0x74, 0x32, 0x2a, 0x7b, 0x5d, 0x8d, 0xa3, 0xff, 0x90, 0xdc,
+    0x9b, 0x7d, 0x9d, 0x3c, 0x09, 0xa6, 0xbc, 0xe8, 0x43, 0x79, 0x91, 0x79,
+    0xfd, 0xad, 0x59, 0xd6, 0xa0, 0x63, 0xa1, 0xe9, 0xec, 0x24, 0x63, 0xd9,
+    0x64, 0xe1, 0x04, 0xff, 0xf3, 0x0e, 0x1a, 0x9c, 0x41, 0xae, 0xa8, 0x7f,
+    0x9d, 0x39, 0x81, 0xc3, 0xa1, 0x97, 0xc8, 0xfa, 0x4d, 0xa8, 0xed, 0x3c,
+    0x86, 0x91, 0xfd, 0x5c, 0xa3, 0x5e, 0xd0, 0xf5, 0x94, 0xa7, 0xd6, 0xab,
+    0xac, 0x9d, 0x3f, 0xfd, 0xe6, 0xce, 0x59, 0x55, 0xc4, 0xce, 0xec, 0xe9,
+    0xfc, 0x22, 0xcf, 0x53, 0x21, 0xd3, 0xfb, 0x88, 0xe9, 0x38, 0xf6, 0x2a,
+    0x4a, 0x3a, 0x7e, 0xa1, 0xfe, 0x0c, 0xb4, 0x3c, 0x3f, 0xc6, 0x71, 0x49,
+    0x82, 0x22, 0x6e, 0x5c, 0xa7, 0x83, 0xbc, 0x5e, 0x74, 0xfe, 0x17, 0x8d,
+    0x29, 0xbc, 0x74, 0xe5, 0x75, 0x47, 0x43, 0x1f, 0x7d, 0x11, 0xd9, 0x84,
+    0xee, 0x26, 0x07, 0x4f, 0xb4, 0x4e, 0x9d, 0xd0, 0xe9, 0xff, 0x77, 0xcc,
+    0xfe, 0x0f, 0x94, 0x99, 0x3a, 0x7f, 0x65, 0xb0, 0xa1, 0x4f, 0xe7, 0x4f,
+    0xfc, 0xc3, 0x7b, 0x6f, 0x96, 0x19, 0xc9, 0x51, 0xd2, 0x2d, 0xe9, 0x09,
+    0x46, 0x73, 0xed, 0xa2, 0x63, 0x93, 0xa7, 0xff, 0xd5, 0xd6, 0xab, 0x4a,
+    0xcb, 0x61, 0x42, 0x9f, 0xce, 0x9a, 0xb4, 0x3a, 0x0a, 0x9f, 0xb3, 0xf9,
+    0x81, 0x94, 0x54, 0x15, 0x05, 0x41, 0x50, 0x54, 0x3c, 0xf7, 0xd0, 0x2b,
+    0xe2, 0xde, 0xc2, 0xb5, 0x82, 0x9d, 0xc2, 0xa6, 0xdd, 0x15, 0x3f, 0x5d,
+    0xf1, 0xc6, 0x51, 0x5a, 0x8b, 0x59, 0x3b, 0x05, 0x41, 0x50, 0x54, 0x3c,
+    0xb4, 0x40, 0xa8, 0x2a, 0x0a, 0x82, 0xa0, 0xa8, 0x2a, 0x0a, 0x8c, 0x0d,
+    0xe7, 0x41, 0x48, 0x15, 0xf0, 0x56, 0x42, 0x9d, 0x05, 0x41, 0x50, 0x54,
+    0x3c, 0xb4, 0xc8, 0x54, 0x15, 0x05, 0x41, 0x50, 0x54, 0x3c, 0xd4, 0x7c,
+    0x15, 0xc0, 0xa7, 0x70, 0xa8, 0x2a, 0x0a, 0x82, 0xa0, 0xa8, 0xc0, 0xd4,
+    0x7f, 0x0a, 0x00, 0xad, 0x85, 0x4b, 0xf9, 0x50, 0x54, 0x15, 0x05, 0x41,
+    0x51, 0xd1, 0xa8, 0xc4, 0x2b, 0xe0, 0xae, 0xc2, 0xa0, 0xa8, 0x2a, 0x0a,
+    0x9f, 0x6d, 0xbe, 0xcd, 0x15, 0x05, 0x43, 0xcf, 0x3f, 0xc1, 0x5b, 0x0a,
+    0xb0, 0xaf, 0x89, 0xe5, 0xe2, 0xa0, 0xa8, 0x2a, 0x0a, 0x82, 0xa1, 0xe6,
+    0xa3, 0x10, 0xa4, 0x0a, 0x74, 0x15, 0x05, 0x41, 0x50, 0x54, 0x15, 0x0f,
+    0x35, 0x1d, 0x05, 0x6c, 0x28, 0x42, 0xa5, 0xb2, 0xa0, 0xa8, 0x2a, 0x4f,
+    0x2a, 0x0a, 0xc4, 0xb0, 0x82, 0xa0, 0xa8, 0x2a, 0x0a, 0x8c, 0x0f, 0x99,
+    0xe1, 0x5f, 0xc6, 0xbc, 0x34, 0xe0, 0x57, 0xc1, 0x5c, 0x0a, 0x95, 0x15,
+    0x05, 0x41, 0x52, 0x79, 0x50, 0x56, 0x25, 0x84, 0x15, 0x05, 0x43, 0x1e,
+    0x93, 0xc2, 0x90, 0x68, 0x06, 0x94, 0x15, 0x05, 0x41, 0x50, 0x54, 0x15,
+    0x05, 0x43, 0x1b, 0x2c, 0x42, 0x80, 0x29, 0x41, 0x42, 0x15, 0x05, 0x41,
+    0x50, 0x54, 0x01, 0x7d, 0x90, 0xae, 0x05, 0x41, 0x50, 0x54, 0x15, 0x0a,
+    0x2f, 0x84, 0x2b, 0x81, 0x52, 0x51, 0x50, 0x54, 0x15, 0x1f, 0x16, 0x9d,
+    0x85, 0x41, 0x50, 0x54, 0x15, 0x05, 0x43, 0x1a, 0x87, 0x02, 0xb6, 0x15,
+    0xd8, 0x54, 0x32, 0xfd, 0x86, 0x0e, 0x4f, 0x3d, 0xe8, 0xa6, 0x96, 0xfc,
+    0xdb, 0x8a, 0x42, 0x33, 0xeb, 0xcf, 0x5c, 0x3a, 0x08, 0x47, 0x29, 0x27,
+    0x67, 0x16, 0xcb, 0xf1, 0xd8, 0xbb, 0x65, 0xa3, 0x8c, 0x3d, 0xbc, 0x3a,
+    0x64, 0xd1, 0x2b, 0x58, 0xb3, 0xf1, 0x23, 0xba, 0x54, 0xf9, 0xe2, 0xd5,
+    0x92, 0x96, 0x9a, 0xc4, 0xe4, 0x65, 0x15, 0x3c, 0x9e, 0xb0, 0x3a, 0x72,
+    0x75, 0x47, 0x49, 0x78, 0xa2, 0x30, 0x0e, 0x36, 0x35, 0xc1, 0xf9, 0x33,
+    0xa6, 0x52, 0x67, 0xea, 0x50, 0x4c, 0xfe, 0xda, 0x69, 0xd0, 0x36, 0x07,
+    0x46, 0x27, 0xda, 0xe1, 0xcc, 0xdf, 0x31, 0xd3, 0xf0, 0x58, 0xfe, 0x6f,
+    0x8e, 0x9a, 0xc0, 0xe9, 0x21, 0xde, 0x2d, 0x25, 0xe3, 0xa4, 0xa3, 0xa6,
+    0xd6, 0x5a, 0x22, 0x54, 0x05, 0xb6, 0x83, 0x63, 0xdf, 0x84, 0x27, 0xfb,
+    0x6c, 0xaa, 0x71, 0x87, 0x03, 0xa2, 0x91, 0x21, 0xf2, 0xc4, 0xfc, 0xa4,
+    0xd6, 0xb1, 0xf8, 0xe9, 0xff, 0xe6, 0xd5, 0x60, 0x17, 0xf3, 0x2f, 0x4d,
+    0x34, 0x3a, 0x19, 0x10, 0x3d, 0x97, 0xc6, 0x0d, 0x83, 0x3b, 0xe3, 0x29,
+    0xea, 0x13, 0xde, 0x2c, 0xc4, 0x71, 0x21, 0xc4, 0xe1, 0x82, 0x89, 0xee,
+    0x96, 0x1e, 0x31, 0xa4, 0xf2, 0x14, 0x93, 0xf9, 0x87, 0x96, 0x3d, 0xd1,
+    0xd3, 0xf3, 0xc5, 0x1f, 0xba, 0x3a, 0x7d, 0x82, 0x03, 0x3c, 0xe8, 0x03,
+    0xd1, 0x12, 0xb9, 0xff, 0x6d, 0x83, 0xe1, 0xad, 0x2f, 0xe3, 0xa7, 0x55,
+    0x38, 0x74, 0xab, 0x67, 0xb3, 0xf1, 0xf4, 0xfd, 0xd8, 0x76, 0xab, 0x13,
+    0xa7, 0x94, 0xd5, 0x81, 0xd3, 0xea, 0x74, 0x2d, 0x89, 0xd0, 0x87, 0x93,
+    0x92, 0x19, 0xe6, 0x1e, 0x78, 0xe9, 0x35, 0x26, 0xb0, 0x2f, 0x39, 0x28,
+    0xe3, 0xb6, 0xb1, 0x0c, 0xf7, 0x76, 0x0f, 0x3a, 0x79, 0xbb, 0x76, 0x32,
+    0x54, 0xf9, 0xeb, 0xd3, 0x4d, 0x0e, 0x81, 0x3d, 0x2e, 0xc9, 0xe3, 0xa4,
+    0x4a, 0xd3, 0x9c, 0x29, 0x57, 0x17, 0xd1, 0xec, 0xf7, 0x0e, 0x69, 0xf7,
+    0x7f, 0x50, 0xf8, 0xe9, 0xfd, 0xca, 0xfc, 0xce, 0x26, 0x4e, 0x80, 0x3d,
+    0xc7, 0x45, 0x13, 0xfd, 0x80, 0xd3, 0xf7, 0x5f, 0x64, 0xe9, 0xee, 0xba,
+    0x67, 0x47, 0x4f, 0xff, 0x6d, 0x95, 0xe6, 0xe5, 0x07, 0xae, 0xfc, 0x68,
+    0xbe, 0x27, 0x58, 0x60, 0x68, 0xbf, 0xe1, 0x91, 0x03, 0xe5, 0x99, 0xd7,
+    0x8b, 0xb9, 0xd3, 0xf5, 0xf3, 0x2d, 0x58, 0x1d, 0x0e, 0x8f, 0x2f, 0x41,
+    0xf9, 0xff, 0x9d, 0x73, 0xfb, 0x0b, 0xeb, 0x68, 0xa3, 0xa7, 0xea, 0xd3,
+    0xf6, 0xef, 0x87, 0x4f, 0xff, 0xb9, 0xf9, 0xec, 0xe9, 0x07, 0xe0, 0x46,
+    0x55, 0x15, 0x3d, 0xbf, 0xd8, 0xf0, 0xe8, 0xc1, 0x15, 0x54, 0x5f, 0xe5,
+    0x69, 0xb9, 0x47, 0x4f, 0x81, 0x30, 0xb5, 0x1a, 0x61, 0x39, 0xee, 0x76,
+    0xd6, 0x69, 0x84, 0xe6, 0xf9, 0x8d, 0x40, 0x9c, 0xfe, 0x1b, 0xff, 0xc6,
+    0x0f, 0x8d, 0x40, 0x9c, 0xfe, 0xcd, 0x6d, 0x33, 0xde, 0x06, 0x98, 0x4e,
+    0x6a, 0xe8, 0xd3, 0x09, 0xcd, 0xa6, 0x87, 0x98, 0x4e, 0x29, 0x34, 0xdc,
+    0x4c, 0xd0, 0xb9, 0x44, 0x79, 0x40, 0x74, 0x83, 0xa1, 0x1c, 0xb8, 0x59,
+    0x84, 0xcb, 0x3e, 0x79, 0x26, 0x29, 0xfc, 0x69, 0x1e, 0x4c, 0x5a, 0xb4,
+    0x9c, 0xc3, 0xc3, 0x92, 0x8a, 0x27, 0x0f, 0xca, 0x3a, 0x7f, 0x9b, 0xbe,
+    0x0a, 0x3a, 0xfc, 0xa3, 0xa7, 0x0d, 0x66, 0x8f, 0x60, 0x07, 0x21, 0x97,
+    0x5f, 0xfa, 0x39, 0xf4, 0x29, 0xb6, 0xdb, 0xc9, 0x6d, 0xce, 0xa1, 0x2b,
+    0x3e, 0xea, 0x81, 0x3f, 0x9d, 0x3f, 0x6d, 0xbf, 0x0e, 0x3f, 0x1d, 0x3e,
+    0x1a, 0xfd, 0x4e, 0x1d, 0x3f, 0xdb, 0xb5, 0x6d, 0x1b, 0x17, 0x9d, 0x3f,
+    0x7e, 0x17, 0xeb, 0x5e, 0x07, 0x42, 0x1f, 0x57, 0xc7, 0x10, 0x28, 0xb4,
+    0xe4, 0x24, 0xa7, 0xfd, 0x57, 0xb7, 0x10, 0x77, 0x58, 0x9d, 0x0c, 0xbe,
+    0xff, 0x53, 0xb4, 0x48, 0xdb, 0xaf, 0x28, 0xb8, 0x72, 0x09, 0x3c, 0xff,
+    0xe5, 0x73, 0x28, 0x38, 0xbf, 0x89, 0x94, 0x3a, 0x7f, 0xff, 0x0d, 0x63,
+    0x59, 0xb1, 0xda, 0x37, 0x37, 0xdd, 0xa8, 0xe9, 0xf8, 0x7b, 0x52, 0x6d,
+    0x8e, 0x9f, 0xff, 0x58, 0xf2, 0xef, 0x62, 0xdc, 0xce, 0x95, 0xb3, 0xa7,
+    0xfd, 0x85, 0x8e, 0x79, 0xb4, 0x6c, 0x9d, 0x38, 0x33, 0x93, 0xc4, 0x07,
+    0x3f, 0xf8, 0x1b, 0x6d, 0xaa, 0x83, 0xd7, 0x7e, 0x34, 0x40, 0x6b, 0x35,
+    0x11, 0x68, 0xc9, 0xfc, 0xcb, 0x1f, 0x26, 0x7f, 0xc8, 0xc6, 0xe2, 0x93,
+    0x96, 0x48, 0xda, 0xe7, 0xdc, 0x6f, 0xb5, 0xa8, 0xe9, 0xe1, 0xe7, 0xdd,
+    0x9d, 0x3f, 0xff, 0x3e, 0xb2, 0x80, 0x08, 0xaf, 0xdc, 0xdd, 0x69, 0xc3,
+    0xa2, 0x8f, 0xfa, 0xc8, 0xe7, 0xff, 0xfa, 0xdf, 0x42, 0xe3, 0xeb, 0x17,
+    0xfe, 0x6f, 0x97, 0xa6, 0x9a, 0x15, 0x0c, 0x99, 0xae, 0xe1, 0x50, 0x24,
+    0x13, 0xf9, 0xa8, 0x3d, 0x77, 0xe3, 0x44, 0x13, 0x3f, 0xcd, 0xca, 0x0f,
+    0x5d, 0xf8, 0xd1, 0x7c, 0xcf, 0x91, 0xd0, 0xd6, 0x7a, 0x3f, 0xef, 0x1e,
+    0x4f, 0xee, 0xf7, 0xad, 0xb4, 0xf6, 0xce, 0x9f, 0xf6, 0x17, 0x8e, 0xb5,
+    0x70, 0x6d, 0xd1, 0xd3, 0xb4, 0xd3, 0x42, 0xa7, 0xdb, 0xaf, 0x58, 0x14,
+    0xb2, 0xfe, 0x7f, 0xff, 0x38, 0x0c, 0xeb, 0x57, 0xfb, 0xd5, 0xf9, 0xcc,
+    0xea, 0xac, 0x78, 0x74, 0x71, 0x14, 0x7f, 0x8d, 0x23, 0x04, 0xca, 0x86,
+    0x30, 0x59, 0xff, 0xb0, 0x53, 0x63, 0x91, 0xac, 0x3f, 0x3c, 0xe9, 0xfb,
+    0x5f, 0x4f, 0xdb, 0x01, 0xd3, 0xff, 0xb1, 0x1d, 0x5e, 0xda, 0x7d, 0xf3,
+    0x03, 0xce, 0x86, 0x3f, 0xcf, 0xc5, 0xf3, 0xfe, 0xef, 0x2d, 0x43, 0xc7,
+    0x6f, 0x4f, 0x1d, 0x3b, 0x4d, 0x34, 0x2a, 0x7f, 0x7e, 0xf9, 0x86, 0xb1,
+    0xe1, 0x4b, 0x2f, 0xe7, 0xff, 0xe7, 0x63, 0x57, 0xb6, 0x9d, 0x75, 0x5a,
+    0x6a, 0xe6, 0x6b, 0x03, 0xa5, 0x7b, 0x45, 0x67, 0x68, 0x90, 0xf5, 0x7d,
+    0x5d, 0x20, 0x24, 0x6c, 0x20, 0x54, 0xa8, 0x62, 0x09, 0x1f, 0x23, 0x0f,
+    0x9f, 0x6e, 0xb8, 0xe3, 0xce, 0x9f, 0xf5, 0x71, 0x83, 0x3b, 0x61, 0xe1,
+    0xe2, 0x08, 0x9f, 0xcd, 0x41, 0xeb, 0xbf, 0x1a, 0x20, 0x85, 0x9e, 0x44,
+    0xfd, 0x7b, 0x00, 0x4d, 0x0e, 0x9f, 0xb5, 0xfd, 0x69, 0x62, 0xf3, 0xa0,
+    0x4f, 0x77, 0xb2, 0xb8, 0xda, 0x67, 0x9f, 0x38, 0x0c, 0x2a, 0xa7, 0xf9,
+    0x87, 0x9f, 0xab, 0x77, 0x89, 0xd3, 0xff, 0xd7, 0xa7, 0x2b, 0x6c, 0x9c,
+    0x1a, 0xda, 0x1d, 0x0f, 0x44, 0x28, 0x9c, 0xcf, 0xf6, 0xd8, 0x38, 0x2d,
+    0x58, 0x9d, 0x3f, 0xff, 0xc9, 0x83, 0x3f, 0x20, 0x09, 0x8b, 0x8f, 0xb0,
+    0x55, 0x62, 0x74, 0xf7, 0x37, 0x43, 0xd2, 0x27, 0x36, 0x6d, 0x3f, 0x7e,
+    0x56, 0x74, 0xbc, 0x4e, 0x86, 0x3e, 0xbe, 0x1d, 0x4f, 0x23, 0x89, 0xa1,
+    0xd3, 0xff, 0xee, 0xf0, 0x16, 0xad, 0xad, 0xb9, 0x5b, 0xec, 0x0e, 0x9f,
+    0x57, 0x33, 0xfb, 0x3d, 0x1f, 0xbf, 0xe2, 0x29, 0xfb, 0xdb, 0x4d, 0x64,
+    0xfe, 0x74, 0xfc, 0xa6, 0xd7, 0xee, 0xb0, 0x3a, 0x7f, 0xff, 0xf9, 0x39,
+    0x6a, 0xb1, 0xf9, 0xe9, 0x9e, 0xd5, 0xb4, 0x6e, 0x6f, 0xbb, 0x51, 0xd1,
+    0xd2, 0x37, 0xd0, 0xc6, 0xcc, 0x67, 0xe1, 0xfa, 0x94, 0xdb, 0x3a, 0x70,
+    0x7e, 0xc9, 0xd3, 0xfe, 0xb1, 0xf5, 0x07, 0xae, 0xfc, 0x68, 0x84, 0x61,
+    0x8f, 0x93, 0xb1, 0xd9, 0xff, 0xcd, 0x58, 0xfe, 0xe2, 0x0f, 0x6f, 0xac,
+    0x9d, 0x3f, 0xfd, 0x77, 0x87, 0xea, 0xdd, 0xa9, 0x7a, 0x69, 0xa1, 0xd1,
+    0xd2, 0x27, 0xdc, 0x4b, 0x9f, 0xee, 0x9b, 0x39, 0x6c, 0x2b, 0x43, 0xa2,
+    0x8f, 0x7e, 0xc9, 0x67, 0x69, 0xa6, 0x85, 0x4f, 0xf5, 0x7d, 0x61, 0x4e,
+    0xab, 0xa2, 0x96, 0x5f, 0xcd, 0xa6, 0x85, 0x4e, 0xd3, 0x4d, 0x0a, 0x9f,
+    0xaf, 0x0e, 0xb6, 0xd9, 0x29, 0x65, 0xfc, 0x0a, 0x2f, 0x34, 0x48, 0xd6,
+    0x37, 0x9f, 0x79, 0x3a, 0xfc, 0xa2, 0x96, 0x6c, 0xe7, 0x69, 0xa6, 0x85,
+    0x4e, 0xcb, 0x01, 0x4b, 0x2f, 0xe5, 0xf2, 0x22, 0x0b, 0x8b, 0x33, 0xf7,
+    0x42, 0xcf, 0xbf, 0x1d, 0x3f, 0xbf, 0x07, 0x48, 0xe9, 0xba, 0x3a, 0x7f,
+    0xed, 0xdb, 0xc6, 0xff, 0xb8, 0x28, 0xe1, 0xd3, 0xf6, 0xe9, 0xd5, 0x73,
+    0x27, 0x47, 0x8f, 0xcf, 0x88, 0xb0, 0x08, 0xf8, 0xd9, 0x60, 0xc2, 0xaa,
+    0x19, 0x35, 0x4a, 0x8c, 0x86, 0x76, 0x3a, 0xeb, 0xbb, 0x23, 0xa7, 0xff,
+    0x56, 0xbe, 0xc7, 0xea, 0xf3, 0x6d, 0x94, 0x74, 0xfd, 0xe4, 0xce, 0xd1,
+    0xc2, 0xa7, 0xf0, 0xd6, 0x2f, 0xca, 0x7f, 0x3a, 0x7a, 0xec, 0x3f, 0x9d,
+    0x1a, 0x8f, 0x57, 0x03, 0x49, 0xe6, 0xb5, 0x3a, 0x2a, 0x76, 0x9a, 0x68,
+    0x54, 0xff, 0xf7, 0xe6, 0xfa, 0xa8, 0x79, 0xb4, 0x61, 0xc0, 0xa5, 0x97,
+    0xf2, 0xaf, 0x22, 0x7d, 0x48, 0x30, 0xc9, 0xf2, 0xbc, 0xb3, 0x14, 0xb4,
+    0x84, 0x16, 0xe1, 0x89, 0x3f, 0xfe, 0x55, 0x79, 0x86, 0xf9, 0x9e, 0xbb,
+    0xb0, 0x79, 0xd3, 0xe6, 0xe6, 0x5d, 0x51, 0xd0, 0xc7, 0xf9, 0xc5, 0x49,
+    0xff, 0xe4, 0x75, 0x43, 0xd0, 0xde, 0x94, 0x37, 0xfc, 0xe9, 0xff, 0xfe,
+    0xeb, 0x69, 0xa5, 0x3b, 0xa2, 0xaf, 0x99, 0xed, 0xf5, 0x8f, 0x0e, 0x8a,
+    0x45, 0xe5, 0xa8, 0x43, 0x36, 0xc8, 0x98, 0x24, 0xbe, 0x3f, 0x4e, 0xa3,
+    0x5d, 0xa9, 0xc9, 0xc4, 0x8e, 0xc5, 0xc8, 0x5d, 0x84, 0x65, 0x2a, 0x84,
+    0xc6, 0xe3, 0x23, 0xb2, 0xff, 0xa1, 0x20, 0x31, 0x90, 0x66, 0x58, 0x27,
+    0x25, 0x06, 0xf7, 0x0d, 0x0d, 0x21, 0xbb, 0x39, 0xd3, 0x09, 0xd3, 0xff,
+    0xd4, 0x2b, 0xe7, 0xf4, 0xc7, 0x3b, 0xaf, 0xac, 0xe9, 0x62, 0xf3, 0xed,
+    0xe8, 0x72, 0x7e, 0xdb, 0x89, 0xb4, 0x51, 0xd3, 0xfe, 0x16, 0xe6, 0xef,
+    0xeb, 0xc7, 0x27, 0x4e, 0x73, 0xb0, 0x3a, 0x7f, 0xd6, 0x81, 0x58, 0xaf,
+    0x4d, 0x34, 0x3a, 0x2c, 0xf7, 0x72, 0x3b, 0x3f, 0xfc, 0x2c, 0xfd, 0x5f,
+    0xb8, 0x83, 0xdb, 0xeb, 0x27, 0x45, 0x26, 0x77, 0xe2, 0xdd, 0xc2, 0x6f,
+    0xe2, 0x19, 0xfc, 0xc2, 0xf1, 0xaa, 0xf8, 0xe9, 0xfc, 0xfa, 0x0c, 0x8b,
+    0x60, 0x74, 0xff, 0xf5, 0x71, 0x87, 0xd5, 0xcd, 0xa0, 0x7d, 0xe3, 0xa7,
+    0xf3, 0x2b, 0x39, 0xb1, 0xc0, 0xe9, 0xf5, 0xe6, 0x87, 0x87, 0x4e, 0xe5,
+    0xeb, 0xce, 0x9f, 0xdc, 0xda, 0x2f, 0xeb, 0x43, 0xa3, 0xa4, 0x7a, 0xed,
+    0x34, 0x4c, 0xb8, 0x4b, 0xd8, 0xfc, 0xfe, 0xef, 0xe6, 0xda, 0x5b, 0xce,
+    0x9f, 0xef, 0x57, 0x19, 0xd2, 0x0f, 0xc7, 0x4f, 0xff, 0xdd, 0xb7, 0x33,
+    0x43, 0xa8, 0x19, 0x3a, 0x1b, 0x79, 0xd0, 0x88, 0x93, 0x13, 0x99, 0xff,
+    0xf8, 0x6b, 0x3d, 0xea, 0xad, 0xd8, 0xd3, 0x8f, 0x6c, 0x4e, 0x9f, 0xf5,
+    0x67, 0xba, 0x0f, 0x5d, 0xf8, 0xd1, 0x03, 0x4f, 0x73, 0x76, 0xfd, 0x48,
+    0xa5, 0x15, 0xc8, 0x64, 0xc0, 0x6a, 0x18, 0xd3, 0xfe, 0xb0, 0xa1, 0xfb,
+    0x3c, 0xce, 0x27, 0x4f, 0xff, 0xff, 0xd5, 0xcd, 0xd8, 0xff, 0xd5, 0x90,
+    0xbb, 0xe3, 0xaa, 0xeb, 0x55, 0x2a, 0xc7, 0x17, 0x9e, 0x20, 0xb9, 0xff,
+    0x5d, 0xff, 0xf5, 0xf5, 0xab, 0xfe, 0x87, 0x88, 0x2e, 0x7f, 0xed, 0xa6,
+    0xd1, 0x87, 0x9a, 0xbf, 0xe8, 0x78, 0x82, 0xe7, 0xf3, 0x20, 0xf3, 0x57,
+    0xfd, 0x0f, 0x10, 0x5c, 0xfc, 0xaa, 0xeb, 0x57, 0xfd, 0x0f, 0x10, 0x5c,
+    0xff, 0xff, 0x58, 0x8a, 0x2b, 0x56, 0x7d, 0xb4, 0x04, 0xff, 0x85, 0x68,
+    0x78, 0x82, 0xe6, 0xc7, 0x57, 0x49, 0xcf, 0x79, 0x48, 0x15, 0x2d, 0x0c,
+    0x50, 0x21, 0x95, 0x67, 0xec, 0xf8, 0x65, 0x1c, 0xcf, 0xe4, 0x6f, 0xf9,
+    0xe6, 0x71, 0x3a, 0x7a, 0xc3, 0xeb, 0x3a, 0x7f, 0xed, 0xa6, 0xd1, 0x87,
+    0x9a, 0xbf, 0xe8, 0x78, 0x82, 0xe7, 0xf9, 0xcc, 0xf9, 0x30, 0xd5, 0xff,
+    0x43, 0xc4, 0x17, 0x3e, 0xe6, 0x59, 0x5a, 0xbc, 0x8a, 0x1f, 0xca, 0x93,
+    0xff, 0xb5, 0x7b, 0x69, 0xe6, 0xe6, 0x75, 0x7f, 0xd0, 0xf1, 0x05, 0xcf,
+    0xff, 0xfc, 0x22, 0x8a, 0xd5, 0xdd, 0x6a, 0xcf, 0xb6, 0x80, 0x9f, 0xf0,
+    0xad, 0x0f, 0x10, 0x5c, 0x52, 0x64, 0xd8, 0xa2, 0x5a, 0xf4, 0xff, 0x6d,
+    0x01, 0x3f, 0xe1, 0x5a, 0x1e, 0x20, 0xb9, 0xff, 0xeb, 0xbc, 0x5f, 0x9d,
+    0xa7, 0x5d, 0x30, 0x31, 0x53, 0xfe, 0xa7, 0xbf, 0xbc, 0x80, 0xe1, 0xac,
+    0x78, 0x82, 0xe3, 0xc8, 0xe5, 0x04, 0x7c, 0xa7, 0xcf, 0xfb, 0xc8, 0x1c,
+    0xbf, 0xb3, 0xab, 0x43, 0xc4, 0x17, 0x3f, 0x6d, 0x37, 0xb4, 0xf8, 0xd0,
+    0x05, 0xcf, 0xab, 0xed, 0x5f, 0xf4, 0x3c, 0x41, 0x73, 0x57, 0x3c, 0x7e,
+    0x9b, 0x3a, 0x8c, 0x51, 0xdf, 0x98, 0x61, 0x4f, 0xca, 0xae, 0xb5, 0x7f,
+    0xd0, 0xf1, 0x05, 0xcf, 0xfb, 0xdb, 0x40, 0x4f, 0xf8, 0x56, 0x87, 0x88,
+    0x2e, 0x6a, 0xd5, 0x68, 0x8d, 0xca, 0x04, 0xfe, 0xed, 0x15, 0x63, 0x8b,
+    0xcf, 0x10, 0x5c, 0xff, 0xa9, 0x1d, 0x50, 0xd7, 0x56, 0xf3, 0xc4, 0x16,
+    0xa3, 0xc0, 0x8e, 0x97, 0x81, 0x80, 0xdf, 0xe3, 0x51, 0x8f, 0x9f, 0x31,
+    0x8a, 0xf2, 0x31, 0xee, 0xe1, 0x6d, 0xa3, 0x7c, 0xfb, 0xec, 0xfd, 0xf3,
+    0x1a, 0x20, 0xb5, 0xa2, 0x36, 0x7f, 0xd4, 0xfd, 0xdb, 0xdd, 0xdd, 0xfb,
+    0xc0, 0xe9, 0xca, 0x67, 0x9d, 0x3e, 0xae, 0xb7, 0xde, 0x87, 0x48, 0x2c,
+    0xf1, 0x44, 0x6e, 0x72, 0x6b, 0x51, 0xd3, 0xac, 0x3e, 0x3a, 0x58, 0xb1,
+    0xb8, 0xe0, 0xec, 0xfd, 0x58, 0x5e, 0xdb, 0x5e, 0x74, 0x22, 0x2d, 0x2d,
+    0x74, 0x49, 0xe7, 0x58, 0x60, 0x74, 0xdf, 0x31, 0xd3, 0xc8, 0xca, 0xa3,
+    0xa0, 0xe9, 0xfa, 0xff, 0xf1, 0x83, 0xe3, 0xa3, 0xa3, 0x70, 0x21, 0x53,
+    0xff, 0xf9, 0x93, 0xa1, 0x6e, 0xfd, 0xca, 0xf7, 0x4d, 0xef, 0xca, 0x3a,
+    0x6f, 0x98, 0xe9, 0x9b, 0xf9, 0xd3, 0xfd, 0x5c, 0xcb, 0x2b, 0xf5, 0x38,
+    0x74, 0xfe, 0xcd, 0x6d, 0x33, 0xde, 0x07, 0x4d, 0xa6, 0x85, 0x4f, 0xf0,
+    0xd3, 0xab, 0x7e, 0x53, 0xa3, 0xa3, 0xc9, 0xfc, 0x20, 0xd8, 0x0b, 0x29,
+    0x5f, 0x64, 0x3f, 0x31, 0xbb, 0x02, 0xc2, 0x2f, 0x93, 0xad, 0x0d, 0x3f,
+    0x0c, 0x4e, 0xd3, 0x4d, 0x0a, 0x92, 0x8a, 0x59, 0x7f, 0x3e, 0xb7, 0x2e,
+    0xc0, 0xa5, 0xa3, 0x77, 0xf4, 0x2f, 0xa7, 0xf6, 0x3c, 0x6a, 0xdd, 0x60,
+    0x74, 0x33, 0x67, 0x43, 0x51, 0xb2, 0xff, 0x43, 0xc4, 0xc1, 0x23, 0x26,
+    0x04, 0xbd, 0xc7, 0x8f, 0x74, 0x98, 0x91, 0x49, 0xcc, 0x67, 0xfd, 0xcb,
+    0x02, 0x74, 0x97, 0x3d, 0x5e, 0x6e, 0x1d, 0x3d, 0x4a, 0xae, 0x1d, 0x3f,
+    0xf6, 0xfb, 0xc3, 0xb5, 0xed, 0x3d, 0x60, 0x74, 0xf5, 0xe1, 0xf9, 0xe7,
+    0x43, 0x22, 0xab, 0x12, 0x0e, 0x10, 0x3b, 0xa3, 0x4f, 0xc3, 0xdf, 0x4a,
+    0xb7, 0x9d, 0x3f, 0xfd, 0x8b, 0xc5, 0xb5, 0x28, 0x5b, 0xff, 0x13, 0x03,
+    0xa7, 0xf6, 0x78, 0xea, 0x86, 0xba, 0x3a, 0x19, 0x16, 0xa8, 0x5d, 0x6a,
+    0x73, 0xaf, 0x57, 0xe3, 0xa7, 0xff, 0x85, 0xfa, 0xab, 0xa4, 0xce, 0x3c,
+    0xee, 0xf2, 0x74, 0xfb, 0x56, 0xd8, 0x1e, 0x74, 0x6a, 0x44, 0xd5, 0x0f,
+    0xe8, 0xa7, 0x3f, 0x60, 0xe3, 0xf5, 0xc0, 0xc0, 0xe9, 0x9f, 0x81, 0xd3,
+    0xed, 0xd2, 0x3f, 0x27, 0x4f, 0xff, 0x6d, 0xbf, 0x2f, 0x83, 0x7f, 0x67,
+    0x2d, 0xf1, 0x53, 0xfb, 0xea, 0x0f, 0x5d, 0xf8, 0xf1, 0x02, 0x4e, 0xe2,
+    0x60, 0x74, 0x3d, 0x1a, 0x5d, 0x13, 0x02, 0x92, 0x8f, 0xa6, 0x77, 0x79,
+    0xd3, 0xdc, 0xc2, 0xc4, 0xe9, 0xec, 0x73, 0x7c, 0x3a, 0x30, 0x3d, 0xca,
+    0x19, 0xd9, 0x0c, 0xfe, 0x1b, 0xd3, 0x39, 0x6f, 0x8e, 0x9d, 0xa6, 0x9a,
+    0x1e, 0xaf, 0xa9, 0xd6, 0x3d, 0x16, 0xaf, 0xa2, 0xcd, 0x64, 0x74, 0x89,
+    0x8f, 0x97, 0xe7, 0xff, 0xd4, 0x29, 0xfd, 0x79, 0xe6, 0xfb, 0xb7, 0xbd,
+    0x8e, 0x8c, 0x0f, 0xef, 0xf9, 0x2c, 0xfa, 0xc4, 0x51, 0x47, 0x46, 0xbb,
+    0x56, 0x84, 0xf3, 0x5a, 0x87, 0x4a, 0x42, 0x66, 0xe3, 0x42, 0x12, 0x59,
+    0xf2, 0x71, 0xb9, 0x92, 0xa7, 0xbc, 0xdc, 0xc9, 0x53, 0x69, 0xa1, 0x50,
+    0xf3, 0xdf, 0xa2, 0x6d, 0x08, 0x66, 0xad, 0x0a, 0x59, 0xaf, 0x9f, 0xff,
+    0x57, 0x1b, 0xd5, 0x43, 0xcd, 0xa3, 0x0e, 0x07, 0x47, 0xc7, 0xef, 0xa1,
+    0x34, 0xff, 0xfe, 0x67, 0x48, 0x3f, 0x6a, 0xe6, 0x6b, 0xdb, 0xb1, 0xe6,
+    0x4e, 0x9f, 0xb1, 0x7e, 0xfb, 0x60, 0x3a, 0x7f, 0xd5, 0x4e, 0x05, 0x76,
+    0xa6, 0xc9, 0xd0, 0xe1, 0xf5, 0x81, 0x74, 0xe7, 0xd8, 0x1d, 0x3e, 0x7d,
+    0x72, 0xba, 0x2a, 0x48, 0xe1, 0xe0, 0xf0, 0x6a, 0x7b, 0x9f, 0xeb, 0x67,
+    0x4d, 0xf3, 0x1d, 0x37, 0xcc, 0x74, 0xfb, 0xb7, 0xd0, 0xad, 0x0d, 0x67,
+    0xc2, 0xd0, 0xc8, 0x8d, 0x14, 0xf9, 0xff, 0xb9, 0xba, 0x57, 0xe6, 0xfa,
+    0xb1, 0xe1, 0xd3, 0xfb, 0x1f, 0x20, 0x7e, 0x6e, 0x8e, 0x9e, 0xf9, 0x56,
+    0xfc, 0x9f, 0xe7, 0x11, 0xe7, 0x6b, 0x56, 0x27, 0x4f, 0x7c, 0x08, 0x07,
+    0x43, 0x1f, 0xcd, 0x9d, 0x68, 0x3f, 0x3d, 0x9e, 0xf1, 0xe1, 0xd3, 0xb4,
+    0xd3, 0x42, 0xa7, 0xd5, 0xfc, 0x7b, 0xc9, 0x4b, 0x2f, 0xe7, 0xd4, 0xbd,
+    0x34, 0xd0, 0xe8, 0x63, 0xe2, 0xe1, 0xc4, 0xff, 0xd4, 0x35, 0x9f, 0x6d,
+    0x3c, 0xc2, 0x74, 0xf6, 0x96, 0x2f, 0x3a, 0x7f, 0xb8, 0xd8, 0xfd, 0x7b,
+    0xda, 0x1d, 0x2d, 0x9d, 0x14, 0x79, 0x3e, 0x39, 0x9d, 0xa6, 0x9a, 0x15,
+    0x3f, 0x25, 0xff, 0xda, 0x70, 0xa5, 0x97, 0xf3, 0xea, 0xfa, 0xa9, 0xc3,
+    0xa5, 0x9d, 0x48, 0xa3, 0x04, 0x01, 0x3c, 0x9b, 0xb7, 0xf4, 0x9a, 0x1d,
+    0x46, 0x1b, 0x24, 0xda, 0x77, 0x43, 0x1c, 0x1c, 0xf5, 0x82, 0x6c, 0xe8,
+    0x65, 0xe1, 0xb7, 0x92, 0x54, 0x33, 0xbf, 0xb1, 0x84, 0x2d, 0x77, 0x18,
+    0xb5, 0x97, 0x66, 0x14, 0xbc, 0x8f, 0x6f, 0x58, 0xba, 0x7e, 0x65, 0x00,
+    0x5f, 0x0e, 0x9f, 0xfe, 0x45, 0x62, 0xfc, 0xea, 0xa1, 0x1a, 0x4f, 0x8e,
+    0x8d, 0x9f, 0xd7, 0x0a, 0xa4, 0xb7, 0x6a, 0x14, 0x9d, 0x2e, 0xcc, 0xa7,
+    0x5d, 0x48, 0x3a, 0xe8, 0x54, 0xd3, 0x97, 0x98, 0x4a, 0x10, 0x7c, 0xaa,
+    0xbe, 0xa5, 0xc8, 0x55, 0x73, 0xe5, 0xfe, 0x3c, 0x2f, 0x4b, 0x27, 0xc6,
+    0x5e, 0xda, 0x4b, 0x0b, 0x72, 0x7d, 0x40, 0x27, 0x87, 0x95, 0x2b, 0xc3,
+    0x74, 0x90, 0xfb, 0xac, 0x3b, 0xfe, 0x97, 0x48, 0x34, 0x81, 0xac, 0xd6,
+    0xd5, 0x5c, 0xad, 0x53, 0x3b, 0x8d, 0xf1, 0xd4, 0x3d, 0x74, 0x86, 0x3e,
+    0xb4, 0xb7, 0x4f, 0xd3, 0xf1, 0x6e, 0xf1, 0x92, 0x42, 0xe1, 0x4f, 0xb8,
+    0xfc, 0x52, 0xbe, 0xcf, 0xe5, 0xd0, 0x7a, 0xef, 0xc6, 0x8b, 0x8e, 0x7f,
+    0x2e, 0x83, 0xd7, 0x7e, 0x34, 0x5d, 0x73, 0xff, 0x2e, 0xde, 0xba, 0x0f,
+    0x5d, 0xf8, 0xd1, 0x28, 0xc3, 0x42, 0xad, 0x15, 0xe5, 0x1d, 0x1e, 0xff,
+    0x3d, 0xf1, 0xea, 0x43, 0xdb, 0x5e, 0x81, 0x78, 0xa8, 0x30, 0xc9, 0xc7,
+    0x0f, 0x5d, 0xcf, 0x67, 0xff, 0x2d, 0x56, 0xf5, 0xd0, 0x7a, 0xef, 0xc6,
+    0x89, 0x6a, 0x7c, 0x1e, 0xbb, 0xf1, 0xa2, 0x37, 0x9f, 0xf5, 0xbd, 0x74,
+    0x1e, 0xbb, 0xf1, 0xa2, 0x5f, 0x92, 0xe8, 0xfe, 0x94, 0x65, 0x3f, 0x97,
+    0x41, 0xeb, 0xbf, 0x1a, 0x2a, 0xb9, 0xfe, 0xff, 0x43, 0x58, 0xf2, 0xd4,
+    0x74, 0xdd, 0x21, 0xd3, 0xf5, 0x07, 0xae, 0xfc, 0x68, 0x90, 0x23, 0x51,
+    0xe6, 0xac, 0x5a, 0x7d, 0x9b, 0x1b, 0xc4, 0xe8, 0x79, 0xe5, 0x62, 0x49,
+    0x3f, 0xfa, 0x9c, 0xdd, 0xab, 0x9b, 0x6e, 0x76, 0xa3, 0xa3, 0xfa, 0x67,
+    0xd7, 0x0d, 0x0f, 0xc4, 0x73, 0xff, 0x0d, 0x60, 0xbd, 0x66, 0x11, 0xae,
+    0x1d, 0x0b, 0x3f, 0xd0, 0x39, 0x9f, 0xcb, 0xa0, 0xf5, 0xdf, 0x8d, 0x16,
+    0x44, 0xfe, 0x5d, 0x07, 0xae, 0xfc, 0x68, 0xb5, 0xe7, 0xf2, 0xe8, 0x3d,
+    0x77, 0xe3, 0x45, 0xc9, 0x3e, 0x0f, 0x5d, 0xf8, 0xd1, 0x76, 0x4f, 0xfa,
+    0xde, 0xba, 0x0f, 0x5d, 0xf8, 0xd1, 0x47, 0x49, 0x74, 0x7f, 0x4a, 0x32,
+    0x93, 0xce, 0x9f, 0x07, 0xae, 0xfc, 0x68, 0xa5, 0x67, 0xff, 0xff, 0xb6,
+    0xd8, 0x36, 0xd1, 0xd5, 0xf5, 0xb4, 0x5f, 0xb6, 0x8e, 0x6d, 0xb0, 0xa3,
+    0xa6, 0x7a, 0xe9, 0x16, 0x4e, 0x19, 0x4c, 0xb5, 0x62, 0x8f, 0x1b, 0x86,
+    0x14, 0x60, 0xbb, 0x16, 0xf8, 0x67, 0x62, 0x4e, 0x91, 0xfc, 0x28, 0x87,
+    0xe3, 0xdc, 0x9e, 0xf2, 0x16, 0xee, 0xa3, 0x18, 0x9f, 0xe7, 0xae, 0x83,
+    0xd7, 0x7e, 0x34, 0x47, 0x13, 0xfc, 0x8b, 0xa0, 0xf5, 0xdf, 0x8d, 0x15,
+    0xac, 0x97, 0x68, 0x85, 0xe2, 0x1c, 0xff, 0xe5, 0xaa, 0xde, 0xba, 0x0f,
+    0x5d, 0xf8, 0xd1, 0x2d, 0xcd, 0x58, 0x9d, 0x3f, 0xba, 0xa5, 0x29, 0x93,
+    0x27, 0x46, 0x27, 0x90, 0x82, 0xd3, 0xb7, 0xd3, 0xce, 0x9c, 0xf5, 0x78,
+    0xe9, 0xff, 0xfb, 0x77, 0x8f, 0xdd, 0x6e, 0xdf, 0x59, 0x1e, 0xef, 0xf1,
+    0xd0, 0x68, 0x86, 0xe7, 0xfd, 0x6f, 0x5d, 0x07, 0xae, 0xfc, 0x68, 0x98,
+    0x26, 0xf5, 0x1d, 0x37, 0x7f, 0x15, 0x08, 0x6b, 0x40, 0x56, 0x7f, 0x0d,
+    0x73, 0x8c, 0x19, 0x3a, 0x4b, 0x64, 0xe5, 0x70, 0x22, 0xe8, 0x76, 0x87,
+    0x3c, 0xbe, 0xa1, 0x7e, 0x3a, 0xfe, 0x1f, 0x9c, 0xae, 0xc0, 0xa9, 0xff,
+    0x5b, 0xd7, 0x41, 0xeb, 0xbf, 0x1a, 0x26, 0x39, 0x2d, 0x0f, 0x91, 0x43,
+    0x93, 0xf3, 0x67, 0x57, 0x2b, 0x67, 0x4e, 0x61, 0xc0, 0xe9, 0xff, 0xff,
+    0xe7, 0xe7, 0x75, 0xde, 0x99, 0xdd, 0x7a, 0xb3, 0xaa, 0xb1, 0x7e, 0x50,
+    0x50, 0xe9, 0xef, 0x5d, 0xf8, 0xd1, 0x58, 0xcf, 0xfb, 0x5a, 0xb8, 0x35,
+    0xdb, 0x0f, 0x0e, 0x8f, 0xe9, 0x9a, 0xf8, 0xbb, 0x11, 0xb0, 0x84, 0x07,
+    0x0b, 0x67, 0xff, 0x30, 0xf3, 0xff, 0x6c, 0x35, 0xe6, 0x03, 0xa7, 0xfb,
+    0xad, 0xd6, 0x71, 0x7b, 0x6c, 0xe9, 0xfe, 0x6c, 0x5e, 0xe3, 0xec, 0x30,
+    0x3a, 0x28, 0xfd, 0x10, 0xea, 0x7f, 0xd5, 0xd0, 0x27, 0x78, 0x7d, 0x97,
+    0x9d, 0x3f, 0xff, 0xf0, 0xf7, 0x85, 0x7b, 0x50, 0xf6, 0xef, 0xaa, 0xb1,
+    0x7d, 0x76, 0x3f, 0x64, 0xe9, 0xfd, 0xae, 0xf0, 0x71, 0xfa, 0xe0, 0x60,
+    0x74, 0xff, 0xea, 0x73, 0x76, 0xae, 0x6d, 0xb9, 0xda, 0x8e, 0x9d, 0xb4,
+    0x5d, 0x2a, 0x78, 0xf2, 0x96, 0xe1, 0x78, 0x24, 0x1c, 0x41, 0xd6, 0x7d,
+    0xfc, 0x83, 0x37, 0xef, 0x8e, 0x9b, 0xb7, 0x0e, 0x9f, 0x58, 0xe1, 0xde,
+    0x4e, 0x8f, 0x8f, 0x64, 0x46, 0x72, 0x31, 0x3b, 0x3f, 0xb2, 0x74, 0xf6,
+    0x38, 0x37, 0xf3, 0xa3, 0xa3, 0xc3, 0xec, 0x7a, 0x7c, 0xaa, 0x16, 0x79,
+    0xd3, 0xcc, 0x16, 0x27, 0x4f, 0x67, 0x2d, 0xf1, 0xd0, 0xc7, 0xcb, 0xb2,
+    0x5d, 0x07, 0xa7, 0xcc, 0xff, 0xbb, 0x79, 0xd3, 0x98, 0x5e, 0x74, 0x38,
+    0x78, 0x7c, 0x29, 0x9d, 0xbf, 0xca, 0x3a, 0x7e, 0x65, 0x50, 0xa7, 0xf3,
+    0xa5, 0x93, 0xa1, 0x0d, 0xe5, 0x96, 0x4d, 0xf3, 0x15, 0x36, 0x9a, 0x15,
+    0x08, 0x6b, 0xb4, 0x16, 0x9f, 0xd6, 0xf1, 0xae, 0x6d, 0x0a, 0x59, 0xa1,
+    0x9e, 0xea, 0xf1, 0xc9, 0xd3, 0x98, 0x5c, 0x3a, 0x61, 0x63, 0xa1, 0xc3,
+    0x5e, 0x03, 0x73, 0xff, 0x7f, 0x41, 0xf6, 0x59, 0x57, 0x8f, 0x0e, 0x9d,
+    0xf5, 0x3b, 0x9d, 0x1f, 0xcf, 0x90, 0x11, 0x65, 0xfc, 0xe9, 0x83, 0xf9,
+    0xd0, 0x86, 0xa7, 0xf0, 0x94, 0xff, 0xf2, 0x71, 0x9e, 0x9c, 0xdd, 0x63,
+    0xce, 0xd8, 0xe8, 0x64, 0xe5, 0x29, 0x49, 0x21, 0x0b, 0xb4, 0xcb, 0x22,
+    0x83, 0xa4, 0xa3, 0xa5, 0xbe, 0x17, 0x4e, 0x82, 0xa7, 0xef, 0x9b, 0x74,
+    0xea, 0xce, 0x9f, 0x93, 0x95, 0xbb, 0xfe, 0x74, 0xed, 0x34, 0xd0, 0xa9,
+    0xff, 0xab, 0xdd, 0x36, 0x1f, 0xab, 0x77, 0x89, 0x4b, 0x2f, 0xe7, 0x90,
+    0x1d, 0xfa, 0x3a, 0x40, 0x74, 0xf9, 0x49, 0xcf, 0xac, 0xe8, 0xc0, 0xf6,
+    0xb5, 0xe4, 0x9d, 0x87, 0xcf, 0xef, 0x26, 0x46, 0x9d, 0x59, 0xd3, 0x57,
+    0x0e, 0x8c, 0x4f, 0x1f, 0x66, 0x53, 0xdc, 0x1a, 0x79, 0xd3, 0xff, 0x93,
+    0x3b, 0xae, 0x86, 0x9d, 0x0d, 0x64, 0xe8, 0x03, 0xe9, 0xe1, 0x04, 0x96,
+    0xcb, 0xe1, 0xb8, 0x39, 0x75, 0x08, 0x9a, 0x72, 0x42, 0x30, 0x5a, 0x53,
+    0x76, 0xe3, 0xd4, 0xb6, 0x6f, 0x8a, 0x1d, 0x82, 0xe1, 0x4c, 0xcc, 0x2c,
+    0x38, 0xf9, 0xfa, 0x11, 0x93, 0xe0, 0xf5, 0xdf, 0x8d, 0x15, 0xbc, 0xff,
+    0xad, 0xeb, 0xa0, 0xf5, 0xdf, 0x8d, 0x13, 0x84, 0x97, 0x47, 0xf4, 0xa3,
+    0x29, 0xbb, 0xd9, 0xd3, 0xe0, 0xf5, 0xdf, 0x8d, 0x16, 0x8c, 0xfc, 0xd6,
+    0x3d, 0xf5, 0x47, 0x4c, 0x9f, 0xce, 0x9f, 0xff, 0x60, 0xdc, 0x6e, 0x81,
+    0xb7, 0x79, 0x1a, 0xf8, 0xe9, 0xff, 0x36, 0x37, 0xaf, 0xd8, 0xde, 0xbf,
+    0x03, 0xa1, 0x91, 0x35, 0xb5, 0x49, 0x53, 0x88, 0xd3, 0xcc, 0x2c, 0x64,
+    0xb7, 0x69, 0x37, 0x6a, 0x17, 0x51, 0x96, 0xe1, 0xff, 0x3d, 0xeb, 0xbf,
+    0x1a, 0x2d, 0xa9, 0xfb, 0x6c, 0xa6, 0x4e, 0x8e, 0x95, 0x01, 0xec, 0xf0,
+    0xb6, 0x7f, 0x97, 0xff, 0xfd, 0x87, 0x5d, 0x89, 0xd0, 0xb3, 0xe3, 0xf8,
+    0x9a, 0x7f, 0x2e, 0x83, 0xd7, 0x7e, 0x34, 0x5c, 0xb3, 0xf9, 0x74, 0x1e,
+    0xbb, 0xf1, 0xa2, 0xed, 0x86, 0x6c, 0xe6, 0xf0, 0x28, 0x7c, 0xa3, 0x1e,
+    0xa1, 0xbd, 0xfe, 0x5e, 0xa2, 0x4f, 0xf2, 0xeb, 0xe3, 0x68, 0xdc, 0x73,
+    0xa3, 0x18, 0x4e, 0x48, 0xf8, 0x7b, 0x3f, 0x97, 0x41, 0xeb, 0xbf, 0x1a,
+    0x2a, 0x79, 0x93, 0x87, 0x4f, 0x7a, 0xef, 0xc6, 0x8a, 0xe6, 0x7f, 0x2e,
+    0x83, 0xd7, 0x7e, 0x34, 0x59, 0xd0, 0x07, 0xd5, 0xb2, 0xd9, 0xff, 0xea,
+    0xe3, 0x67, 0x57, 0x79, 0xe3, 0x38, 0xe2, 0x1d, 0x3f, 0xed, 0xa0, 0x75,
+    0xba, 0x41, 0xfe, 0x74, 0xf8, 0x3d, 0x77, 0xe3, 0x44, 0x85, 0x3f, 0xc9,
+    0x8e, 0x78, 0x2c, 0xac, 0x9d, 0x33, 0xd7, 0x47, 0xd5, 0xf1, 0x94, 0xf3,
+    0xb5, 0xb6, 0x51, 0xd3, 0xfa, 0xb7, 0x9c, 0xd0, 0x60, 0x74, 0x97, 0xd2,
+    0xa2, 0x1a, 0x7f, 0x42, 0x17, 0x14, 0xee, 0x15, 0x19, 0x2e, 0xe1, 0x34,
+    0xff, 0xe5, 0xaa, 0xde, 0xba, 0x0f, 0x5d, 0xf8, 0xd1, 0x3e, 0x47, 0x95,
+    0x91, 0x6b, 0xe5, 0x2f, 0x6d, 0xc2, 0x7c, 0x1e, 0xbb, 0xf1, 0xa2, 0xb2,
+    0x9f, 0xf5, 0xbd, 0x74, 0x1e, 0xbb, 0xf1, 0xa2, 0x6e, 0x99, 0x17, 0x47,
+    0xf4, 0xa3, 0x29, 0xff, 0xcb, 0x55, 0xbd, 0x74, 0x1e, 0xbb, 0xf1, 0xa2,
+    0x56, 0x9f, 0xf2, 0x67, 0xb5, 0x0a, 0x3a, 0xee, 0xce, 0x9f, 0xc2, 0xc1,
+    0x4e, 0xad, 0x47, 0x43, 0xcf, 0xc5, 0x10, 0x27, 0xc1, 0xeb, 0xbf, 0x1a,
+    0x25, 0xc9, 0xfe, 0x4b, 0x7f, 0x05, 0x95, 0x93, 0xa7, 0x9d, 0x20, 0xb1,
+    0xd3, 0xe5, 0xaa, 0xde, 0xb6, 0x45, 0x55, 0x10, 0xec, 0xca, 0xcd, 0xa7,
+    0xfe, 0x5d, 0xbd, 0x74, 0x1e, 0xbb, 0xf1, 0xa2, 0x3b, 0x9f, 0xee, 0x6e,
+    0x9e, 0xbb, 0x1c, 0x9d, 0x3f, 0x6b, 0x82, 0xde, 0xa1, 0x3a, 0x6e, 0xf6,
+    0x74, 0xfc, 0xed, 0x8d, 0x6e, 0xf8, 0x74, 0xfe, 0xad, 0x32, 0xc3, 0xcc,
+    0x9d, 0x3e, 0x0f, 0x5d, 0xf8, 0xd1, 0x50, 0xcf, 0x6f, 0x95, 0x81, 0xd3,
+    0xea, 0xc2, 0xc5, 0xd1, 0xd3, 0xff, 0xff, 0xf9, 0x9f, 0xab, 0x9b, 0x46,
+    0xce, 0xaa, 0xef, 0xcc, 0xeb, 0x55, 0x00, 0x53, 0xae, 0xef, 0x67, 0x45,
+    0x23, 0x80, 0x48, 0xb2, 0x51, 0x3f, 0xff, 0xdd, 0xde, 0xbd, 0x30, 0xdd,
+    0xa7, 0x1b, 0x69, 0xcc, 0xd7, 0x47, 0x49, 0x6e, 0xda, 0xa5, 0x27, 0x68,
+    0xbf, 0x5c, 0x17, 0xc0, 0xc2, 0x8c, 0xb9, 0x18, 0x96, 0xb1, 0x74, 0xf8,
+    0x3d, 0x77, 0xe3, 0x45, 0x51, 0x3f, 0xeb, 0x7a, 0xe8, 0x3d, 0x77, 0xe3,
+    0x44, 0xd7, 0x25, 0xd1, 0xfd, 0x28, 0xca, 0x7f, 0x2e, 0x83, 0xd7, 0x7e,
+    0x34, 0x55, 0x93, 0xfe, 0x5e, 0xdb, 0x1e, 0x36, 0xef, 0x5e, 0x74, 0xff,
+    0xcb, 0xb7, 0xae, 0x83, 0xd7, 0x7e, 0x34, 0x48, 0x93, 0xe0, 0xf5, 0xdf,
+    0x8d, 0x16, 0x94, 0xff, 0xad, 0xeb, 0xa0, 0xf5, 0xdf, 0x8d, 0x13, 0xec,
+    0x97, 0x47, 0xf4, 0xa3, 0x29, 0xff, 0xcb, 0x55, 0xbd, 0x74, 0x1e, 0xbb,
+    0xf1, 0xa2, 0x84, 0x9f, 0x6d, 0x30, 0x60, 0x3a, 0x7c, 0x1e, 0xbb, 0xf1,
+    0xa2, 0x8f, 0x9f, 0xf0, 0xb3, 0x8c, 0x2c, 0xe6, 0xd8, 0xe9, 0xff, 0xfa,
+    0xba, 0xdb, 0x7e, 0x5f, 0x06, 0xfe, 0xce, 0x5b, 0xe2, 0xa7, 0xcb, 0x55,
+    0xbd, 0x6c, 0x8f, 0x2a, 0x26, 0xe1, 0x96, 0xb1, 0xe4, 0x33, 0x23, 0x47,
+    0x08, 0xdb, 0xde, 0xaf, 0x49, 0xdf, 0xe5, 0x44, 0xfa, 0x1f, 0xd8, 0x93,
+    0xa1, 0xeb, 0x88, 0x5b, 0x86, 0x47, 0xc4, 0xfc, 0x8d, 0x1a, 0x7f, 0x2e,
+    0x83, 0xd7, 0x7e, 0x34, 0x44, 0x53, 0xf5, 0x07, 0xae, 0xfc, 0x68, 0x8a,
+    0xe7, 0xfb, 0x5e, 0xba, 0x0f, 0x5d, 0xf8, 0xd1, 0x5c, 0x42, 0xcf, 0xfa,
+    0xcd, 0xe7, 0xab, 0x77, 0xc3, 0xa7, 0xf5, 0x20, 0x7d, 0xf7, 0x79, 0x3a,
+    0x4e, 0xd8, 0x9e, 0xa6, 0x48, 0x27, 0xff, 0xee, 0x65, 0x37, 0x68, 0xf4,
+    0x1e, 0x77, 0xb0, 0xa3, 0xa7, 0xc1, 0xeb, 0xbf, 0x1a, 0x29, 0xe9, 0xfa,
+    0xb3, 0xa8, 0x6d, 0xe7, 0x46, 0xb8, 0x8e, 0x36, 0x2c, 0xa5, 0x81, 0x32,
+    0x9f, 0xfd, 0x6f, 0x5f, 0x43, 0x7a, 0x67, 0x2d, 0xf1, 0xd0, 0xb4, 0x45,
+    0x74, 0x7f, 0x39, 0x7d, 0x51, 0xd3, 0xff, 0xed, 0xb0, 0x53, 0xd2, 0xf9,
+    0x5d, 0x27, 0x7e, 0x3a, 0x7c, 0xcf, 0xfb, 0xb7, 0x9d, 0x3d, 0xeb, 0xbf,
+    0x1a, 0x2b, 0x38, 0x70, 0xf5, 0x80, 0xa6, 0x7e, 0xc1, 0x4c, 0x2f, 0xc9,
+    0xd3, 0x9b, 0x04, 0x3a, 0x7d, 0xcf, 0xbf, 0x0b, 0xce, 0x9d, 0xdd, 0xe4,
+    0xe9, 0xf5, 0x39, 0x87, 0x7f, 0x1d, 0x25, 0xf4, 0x9c, 0x25, 0x42, 0xa4,
+    0x08, 0xb6, 0x5b, 0x63, 0x62, 0x55, 0xf8, 0x72, 0x7f, 0xe5, 0xdb, 0xd7,
+    0x41, 0xeb, 0xbf, 0x1a, 0x24, 0x59, 0xfa, 0x83, 0xd7, 0x7e, 0x34, 0x59,
+    0x33, 0xff, 0xb9, 0x9f, 0xd9, 0x5d, 0x60, 0x82, 0xfc, 0x9d, 0x0b, 0x44,
+    0x1d, 0x1b, 0xcf, 0xe5, 0xd0, 0x7a, 0xef, 0xc6, 0x8b, 0x62, 0x75, 0x66,
+    0x8e, 0x9e, 0xf5, 0xdf, 0x8d, 0x16, 0xdc, 0xf6, 0x70, 0xb0, 0x3a, 0x00,
+    0xf3, 0xb8, 0x5b, 0x25, 0xbd, 0x11, 0x34, 0xd1, 0x3b, 0x0d, 0xa1, 0xd3,
+    0xfe, 0xd7, 0x35, 0xc7, 0x67, 0xcd, 0xd0, 0xb7, 0xc7, 0x4f, 0xcc, 0x2f,
+    0xeb, 0xb5, 0x1d, 0x3e, 0x0f, 0x5d, 0xf8, 0xd1, 0x78, 0x4f, 0x73, 0x5a,
+    0xb6, 0x74, 0xff, 0xcd, 0xf9, 0x58, 0xbf, 0x94, 0x3c, 0xc9, 0xd3, 0xea,
+    0x1f, 0x9d, 0xd8, 0xe9, 0xf3, 0x7e, 0xee, 0xf2, 0x74, 0xee, 0x37, 0xc7,
+    0x49, 0x7a, 0xe2, 0x74, 0x5a, 0xea, 0x1c, 0xc1, 0x3a, 0x8b, 0xb1, 0x32,
+    0xd9, 0x27, 0xc8, 0xc2, 0x53, 0xc2, 0x99, 0xc9, 0x58, 0x9d, 0x3e, 0x0f,
+    0x5d, 0xf8, 0xd1, 0x7a, 0x4f, 0xf8, 0x6f, 0x8f, 0x6f, 0xfc, 0x4c, 0x0e,
+    0x9f, 0x52, 0xb7, 0x7d, 0x1d, 0x25, 0xf4, 0x8b, 0x3a, 0x1b, 0xfc, 0x64,
+    0xee, 0x7f, 0x0c, 0xc9, 0xe1, 0xc2, 0x17, 0x75, 0x1f, 0x17, 0x89, 0x12,
+    0x3a, 0x00, 0x6f, 0x54, 0x34, 0x7e, 0x22, 0x18, 0x63, 0x77, 0x1e, 0x56,
+    0x91, 0xa3, 0x4d, 0xde, 0xce, 0x9e, 0xad, 0xdf, 0x0e, 0x9f, 0xd4, 0x81,
+    0xf7, 0xdd, 0xe4, 0xe9, 0x3b, 0x62, 0x7a, 0x99, 0x20, 0x9f, 0x27, 0x1b,
+    0x1c, 0x0e, 0x9f, 0x07, 0xae, 0xfc, 0x68, 0x88, 0xe7, 0xff, 0xb7, 0xde,
+    0x73, 0x4a, 0x1a, 0x75, 0xa9, 0x9d, 0x91, 0xd3, 0xfe, 0x7b, 0x60, 0x15,
+    0xce, 0x27, 0x0e, 0x9f, 0xea, 0x0a, 0xcd, 0x58, 0xe0, 0x74, 0xff, 0xff,
+    0x36, 0xed, 0x38, 0xdb, 0x1a, 0xe6, 0xd3, 0x74, 0x9a, 0x1d, 0x36, 0x0a,
+    0x2a, 0x6d, 0x34, 0x2a, 0x7f, 0xcb, 0xf6, 0xd1, 0xcd, 0xb6, 0x0b, 0xf8,
+    0xd7, 0xe8, 0x2f, 0x3c, 0xe9, 0xb8, 0xc7, 0x43, 0xcf, 0xed, 0x16, 0x67,
+    0xed, 0x78, 0xd6, 0xef, 0x87, 0x4f, 0xcd, 0xfe, 0x85, 0x3f, 0x9d, 0x3f,
+    0x57, 0x1d, 0xf9, 0x5b, 0x3a, 0x29, 0x11, 0x82, 0x5f, 0x92, 0xe9, 0xff,
+    0xfb, 0xcb, 0x0b, 0x14, 0xe2, 0xc1, 0xb8, 0x37, 0xf1, 0xd0, 0xed, 0x2b,
+    0xfa, 0xd7, 0x1a, 0xd8, 0xb2, 0x8a, 0x3c, 0x65, 0x8a, 0xca, 0x1e, 0x81,
+    0xad, 0xc6, 0x19, 0xc8, 0x56, 0xba, 0x2e, 0x9f, 0x07, 0xae, 0xfc, 0x68,
+    0x8b, 0xa7, 0xdc, 0xfb, 0xf0, 0xbc, 0xa9, 0x2e, 0x8f, 0x72, 0xcc, 0xa1,
+    0x69, 0x97, 0xbe, 0x30, 0x99, 0xff, 0x95, 0x6f, 0x5d, 0x07, 0xae, 0xfc,
+    0x68, 0x99, 0xa7, 0xed, 0x74, 0x76, 0x6e, 0xde, 0x5b, 0x87, 0x4e, 0xc5,
+    0xb2, 0x74, 0xef, 0x22, 0x8e, 0x9b, 0x5b, 0x5d, 0x9d, 0x3f, 0x72, 0xb0,
+    0xaf, 0x9c, 0x3a, 0x35, 0xd9, 0xe7, 0x38, 0x3f, 0x3e, 0xf5, 0xed, 0x1c,
+    0x3a, 0x7f, 0xfd, 0xf6, 0x2f, 0xdf, 0x6c, 0x0b, 0xda, 0x7a, 0xc0, 0xe9,
+    0xff, 0x9d, 0xd3, 0x89, 0xe4, 0xeb, 0x95, 0xe3, 0xa7, 0xff, 0xfb, 0xbb,
+    0x1f, 0x0d, 0x75, 0xbe, 0xf5, 0x6d, 0x9e, 0x0d, 0x81, 0xd0, 0xc9, 0x82,
+    0xd2, 0xb6, 0xd1, 0xa7, 0xff, 0xdd, 0x20, 0xe1, 0x59, 0x4b, 0xda, 0xf4,
+    0xd3, 0x42, 0xa7, 0xec, 0x5f, 0x9f, 0xbb, 0x70, 0xe9, 0xef, 0x5d, 0xf8,
+    0xd1, 0x67, 0xcf, 0xf9, 0x36, 0xcf, 0x4e, 0x37, 0x32, 0x74, 0xff, 0xf2,
+    0x06, 0xef, 0x55, 0x3a, 0x1a, 0xcd, 0x09, 0xd3, 0xb4, 0xd3, 0x42, 0xa7,
+    0xfd, 0x6f, 0xc8, 0xd7, 0xba, 0xa0, 0x29, 0x65, 0xfc, 0xff, 0x36, 0xd3,
+    0xa1, 0xbb, 0x70, 0xe9, 0xfe, 0x41, 0xeb, 0xf7, 0x5d, 0xf3, 0x27, 0x47,
+    0x95, 0x0f, 0xb8, 0xb0, 0x06, 0x4a, 0x2d, 0xd9, 0xe7, 0xcd, 0xbc, 0x4b,
+    0x74, 0x6f, 0x3f, 0xc1, 0x7a, 0x6d, 0x18, 0x18, 0xe9, 0xff, 0xff, 0xfa,
+    0xab, 0xec, 0xd5, 0x0f, 0xff, 0xc0, 0x2d, 0x5b, 0x5e, 0x46, 0xb0, 0x55,
+    0x28, 0xe9, 0xd9, 0x6c, 0x0e, 0x9d, 0xad, 0x5b, 0x3a, 0x1e, 0x8c, 0x2c,
+    0xc2, 0x23, 0x83, 0x93, 0xb7, 0xde, 0x87, 0x4e, 0xfb, 0xbf, 0x1d, 0x3b,
+    0x95, 0xf8, 0xe8, 0xe8, 0xf6, 0x71, 0x1e, 0x41, 0xe9, 0xf8, 0x11, 0xd5,
+    0x0e, 0x4e, 0x9f, 0x6c, 0x5a, 0x80, 0xc9, 0xff, 0x20, 0x3e, 0x83, 0x0e,
+    0xef, 0xa3, 0x44, 0x1a, 0xb3, 0x49, 0x3e, 0xbf, 0x22, 0x98, 0xe9, 0xf9,
+    0xfb, 0x1b, 0xc7, 0x87, 0x4a, 0xbc, 0x7a, 0x42, 0x4b, 0x3f, 0xf5, 0x0e,
+    0x3c, 0xa0, 0x4c, 0x2d, 0x47, 0x4c, 0x82, 0x74, 0xfd, 0x7a, 0x72, 0xb7,
+    0xc6, 0x3d, 0x6f, 0xe8, 0x50, 0xc9, 0xdf, 0xbd, 0x42, 0xa1, 0x5a, 0x2f,
+    0x93, 0xf0, 0x57, 0x59, 0xdb, 0x1d, 0x3f, 0xff, 0xbb, 0x1b, 0xff, 0xab,
+    0xf0, 0xdf, 0x32, 0x98, 0xed, 0x34, 0x3a, 0x7f, 0xca, 0xae, 0x67, 0xf6,
+    0x6d, 0xf4, 0x74, 0xfd, 0x9c, 0xb0, 0x71, 0x8e, 0x59, 0xbf, 0x9e, 0xdd,
+    0x23, 0xa3, 0xa7, 0xec, 0xa0, 0x57, 0x60, 0x74, 0x22, 0x22, 0x36, 0x77,
+    0xc2, 0x29, 0x94, 0xed, 0x9a, 0x2f, 0xc9, 0xff, 0x9f, 0xce, 0xde, 0xf5,
+    0x73, 0x8c, 0xa3, 0xa7, 0xfe, 0x4a, 0x1a, 0xac, 0xea, 0x7e, 0x54, 0x74,
+    0x62, 0x88, 0x9c, 0xa3, 0x4c, 0x8e, 0x1d, 0x3b, 0x89, 0x81, 0xd3, 0x85,
+    0xbc, 0x74, 0x6a, 0x3c, 0xc5, 0x0b, 0x08, 0xe4, 0x32, 0x70, 0x1d, 0x17,
+    0xd4, 0x2c, 0x6d, 0xc2, 0x7f, 0xff, 0xe7, 0x76, 0xda, 0x29, 0x6e, 0x3e,
+    0xc3, 0xf6, 0xd3, 0x1c, 0xf9, 0x30, 0x3a, 0x7e, 0xb0, 0x6d, 0xfe, 0xe8,
+    0xe9, 0xed, 0x2e, 0xb2, 0x74, 0xff, 0x3d, 0x56, 0xfe, 0x65, 0xbf, 0x9d,
+    0x0c, 0x7b, 0x76, 0x43, 0x3d, 0x59, 0x41, 0x3a, 0x2d, 0x19, 0x03, 0x08,
+    0x9e, 0xc8, 0x27, 0xbf, 0x77, 0x79, 0x3a, 0x7b, 0xef, 0xab, 0x13, 0xa7,
+    0xe7, 0x7e, 0x55, 0x8f, 0x8e, 0x9f, 0xec, 0xfc, 0x98, 0xe2, 0xfa, 0xe1,
+    0xd3, 0xf3, 0x63, 0x95, 0x26, 0xbc, 0xe8, 0x04, 0x5f, 0x6c, 0x93, 0x85,
+    0xce, 0x8e, 0xe1, 0x93, 0x20, 0xa8, 0x71, 0x4c, 0xe7, 0x67, 0x49, 0x47,
+    0x46, 0x26, 0xa1, 0xd8, 0x18, 0x9f, 0xd7, 0x78, 0xbc, 0x5b, 0xa3, 0xa7,
+    0xff, 0x0a, 0x36, 0x46, 0xdf, 0xab, 0x34, 0x07, 0x4f, 0xff, 0xfb, 0x69,
+    0x8f, 0x2b, 0x1e, 0x00, 0x37, 0x3e, 0xfc, 0x2f, 0xdd, 0x1d, 0x3d, 0xd7,
+    0x56, 0x27, 0x4f, 0xfa, 0xf7, 0xe4, 0xbd, 0x59, 0xbd, 0x9d, 0x0c, 0x9b,
+    0x77, 0x44, 0xf4, 0x65, 0xe4, 0x74, 0x6e, 0xd9, 0x14, 0xff, 0xd4, 0x38,
+    0xf2, 0x81, 0x30, 0xb5, 0x1d, 0x3e, 0xae, 0x3d, 0x5b, 0x3a, 0x7d, 0x8e,
+    0x45, 0x94, 0x74, 0x32, 0x24, 0x32, 0x85, 0xd9, 0x3c, 0xf9, 0xc4, 0xda,
+    0x28, 0xe9, 0x6c, 0xe9, 0xb2, 0xf3, 0xa3, 0xe3, 0x4d, 0xd8, 0x84, 0xfd,
+    0x83, 0x8f, 0xd7, 0x03, 0x03, 0xa7, 0xf7, 0xfd, 0xd7, 0x36, 0x9c, 0x3a,
+    0x64, 0x03, 0xa3, 0x5d, 0x9f, 0xea, 0x1a, 0xec, 0xd2, 0x7f, 0xee, 0x9b,
+    0xa0, 0x6e, 0x27, 0x93, 0xa3, 0xa7, 0xed, 0xf7, 0x83, 0x9b, 0x43, 0xa3,
+    0xa3, 0xf4, 0xda, 0x24, 0x97, 0xae, 0xdb, 0x2c, 0xb7, 0x68, 0xfd, 0xd9,
+    0x8e, 0x33, 0x4e, 0x05, 0x3d, 0x46, 0x59, 0x52, 0x93, 0xbf, 0xbb, 0x63,
+    0x0f, 0x74, 0x84, 0x73, 0x91, 0xf7, 0x82, 0x02, 0x8b, 0x37, 0x2a, 0xba,
+    0xd0, 0x7e, 0x8d, 0x00, 0x63, 0x54, 0xcc, 0x77, 0xbc, 0x87, 0x37, 0x66,
+    0x1a, 0x26, 0xeb, 0x42, 0x83, 0xf4, 0x2a, 0x21, 0x6d, 0xa5, 0xb6, 0xeb,
+    0x31, 0x99, 0xff, 0xcb, 0x55, 0xbd, 0x74, 0x1e, 0xbb, 0xf1, 0xa2, 0x6c,
+    0x9f, 0xcb, 0xa0, 0xf5, 0xdf, 0x8d, 0x15, 0x6c, 0xfe, 0x7b, 0xfb, 0xe0,
+    0xb3, 0xce, 0x9e, 0xad, 0xdf, 0x0e, 0x93, 0xb7, 0x47, 0xa6, 0x26, 0x73,
+    0xe0, 0xf5, 0xdf, 0x8d, 0x15, 0xa4, 0xff, 0xf7, 0x98, 0x2b, 0xeb, 0x55,
+    0xbd, 0x93, 0xc7, 0x4f, 0xff, 0x3f, 0x34, 0x2c, 0xab, 0xae, 0x71, 0x94,
+    0x74, 0xdc, 0xe3, 0x22, 0x62, 0xd3, 0x27, 0xf3, 0x3a, 0xfd, 0xc1, 0x6f,
+    0x8e, 0x9f, 0xb0, 0xad, 0xa5, 0x28, 0xe9, 0xf3, 0x95, 0xd2, 0xb5, 0xe7,
+    0x4f, 0xc2, 0xda, 0x62, 0xfc, 0x9d, 0x2a, 0x70, 0xf6, 0xdd, 0xcb, 0x67,
+    0xf3, 0xeb, 0x96, 0x3f, 0x76, 0x74, 0x97, 0xae, 0x2a, 0x3d, 0xa2, 0xb4,
+    0x86, 0x56, 0xcb, 0x6c, 0xd8, 0x61, 0x0f, 0xc2, 0xb9, 0xfc, 0xba, 0x0f,
+    0x5d, 0xf8, 0xd1, 0x60, 0x4f, 0x83, 0xd7, 0x7e, 0x34, 0x4e, 0xb3, 0xff,
+    0xfb, 0x6d, 0x87, 0x54, 0xa5, 0xe7, 0x35, 0xb4, 0xcf, 0x78, 0x1d, 0x3e,
+    0x5a, 0xad, 0xeb, 0xa4, 0x4b, 0x38, 0x65, 0x3f, 0x9f, 0x95, 0xff, 0xfe,
+    0xca, 0x3a, 0x7c, 0x1e, 0xbb, 0xf1, 0xa2, 0xd9, 0x9f, 0xf7, 0xcd, 0x95,
+    0xed, 0x3d, 0x60, 0x74, 0x97, 0x47, 0xdf, 0x66, 0x53, 0xde, 0xbb, 0xf1,
+    0xa2, 0xe6, 0x92, 0x8e, 0x80, 0x37, 0xba, 0x16, 0xcc, 0xe2, 0x8e, 0x92,
+    0xe8, 0xdc, 0x68, 0x43, 0x3f, 0x97, 0x41, 0xeb, 0xbf, 0x1a, 0x2e, 0xf9,
+    0xe5, 0xff, 0xeb, 0xe3, 0xa1, 0x9b, 0xb8, 0x8a, 0xad, 0x38, 0x3c, 0x65,
+    0x8a, 0xa2, 0x4a, 0xcd, 0x07, 0x75, 0x43, 0x4e, 0xd0, 0x3e, 0x85, 0x36,
+    0x61, 0x37, 0xc2, 0x7f, 0xc7, 0xb3, 0xec, 0xe5, 0x56, 0xf3, 0xa7, 0xfe,
+    0xc7, 0xdd, 0xde, 0x3c, 0xaa, 0x1f, 0xe7, 0x4e, 0x1b, 0x5b, 0x1f, 0x77,
+    0x09, 0xe7, 0xf0, 0xe1, 0x4e, 0xfc, 0x6f, 0xe7, 0x4f, 0x83, 0xd7, 0x7e,
+    0x34, 0x4a, 0xf3, 0xfe, 0x1b, 0xd3, 0xad, 0xb6, 0x15, 0xa1, 0xd3, 0xff,
+    0xf3, 0xe9, 0x3e, 0xa5, 0x27, 0x32, 0xca, 0xbc, 0x78, 0x74, 0xf7, 0x76,
+    0x0f, 0x3a, 0x7f, 0xff, 0x27, 0x2d, 0x56, 0x3f, 0x6f, 0x4b, 0x1c, 0x3c,
+    0x98, 0x1d, 0x1d, 0x22, 0x0a, 0xc8, 0x63, 0xa4, 0xcf, 0xe9, 0x03, 0x70,
+    0xdc, 0x9f, 0xf7, 0x2d, 0xf9, 0xdb, 0x07, 0xee, 0x8e, 0x9f, 0xfb, 0x88,
+    0xe9, 0x38, 0xe3, 0xd8, 0x78, 0x74, 0xeb, 0x7a, 0xd9, 0x53, 0x1d, 0x1b,
+    0xe6, 0x37, 0x1e, 0x1b, 0x7e, 0x40, 0x9f, 0xfd, 0x5b, 0x58, 0xd7, 0x48,
+    0x3c, 0xad, 0x9d, 0x3b, 0x8d, 0xd1, 0x53, 0xff, 0xb7, 0x69, 0xc6, 0x7a,
+    0x06, 0x1d, 0xfc, 0x54, 0xfe, 0xbf, 0x2f, 0xa0, 0x76, 0x16, 0xc7, 0xcd,
+    0x91, 0xc9, 0x2f, 0xca, 0xfc, 0xd5, 0x2a, 0x53, 0x8c, 0x6e, 0xa1, 0x5b,
+    0x3f, 0xf9, 0x6a, 0xb7, 0xae, 0x83, 0xd7, 0x7e, 0x34, 0x4c, 0x33, 0xff,
+    0x85, 0x9d, 0x0b, 0x62, 0xbd, 0x76, 0xec, 0xf2, 0xf3, 0xa7, 0xff, 0x05,
+    0xfc, 0xbf, 0xfc, 0x7e, 0x8d, 0x97, 0x9d, 0x35, 0x2f, 0xa4, 0x52, 0x7e,
+    0x57, 0x9f, 0xf9, 0xdb, 0xac, 0x5f, 0xdd, 0xf0, 0x59, 0xe7, 0x4f, 0xe6,
+    0xbc, 0x39, 0xfe, 0xc0, 0xe9, 0xf5, 0x83, 0xed, 0x47, 0x40, 0x9e, 0xc7,
+    0x66, 0x73, 0xf2, 0x9a, 0x87, 0x9a, 0xc7, 0x4b, 0x27, 0x4f, 0x9a, 0x87,
+    0x9a, 0xc7, 0x4f, 0xdb, 0x4e, 0x66, 0xf1, 0xd4, 0x7c, 0xce, 0x17, 0x28,
+    0x42, 0x7f, 0xff, 0xc3, 0x5a, 0x3b, 0xf2, 0xb7, 0xa8, 0x6b, 0x04, 0xa1,
+    0xc5, 0xf9, 0x3a, 0x7f, 0xf9, 0xb8, 0x37, 0xf6, 0xe9, 0x3a, 0xef, 0x99,
+    0x3a, 0x7e, 0x75, 0xfb, 0x82, 0xdf, 0x1d, 0x3f, 0xf9, 0xb9, 0xf3, 0x3e,
+    0xb1, 0xe6, 0x1d, 0xe8, 0x74, 0x31, 0xff, 0xa1, 0x8c, 0xfd, 0x94, 0xfe,
+    0xab, 0xe1, 0xd3, 0xff, 0xfe, 0x0a, 0x74, 0xc3, 0xcd, 0x5f, 0x85, 0xb7,
+    0x69, 0xc6, 0xe6, 0x4e, 0x95, 0x62, 0x89, 0xb0, 0x2e, 0x9f, 0xff, 0x6c,
+    0x6b, 0x9b, 0x4a, 0xc7, 0x94, 0xe9, 0xb2, 0x74, 0xe6, 0xfb, 0xf1, 0xd1,
+    0x47, 0xe6, 0x2a, 0xb3, 0xd7, 0xfb, 0xaa, 0x3a, 0x4b, 0xd7, 0x17, 0x15,
+    0xba, 0x85, 0x0f, 0xa1, 0x10, 0xe2, 0xa8, 0x38, 0x6e, 0x19, 0xe3, 0x0b,
+    0xbe, 0x42, 0x6f, 0xb2, 0x09, 0xff, 0xe0, 0x4c, 0x5f, 0x94, 0xe6, 0xd8,
+    0x38, 0xc7, 0x4f, 0x83, 0xd7, 0x7e, 0x34, 0x55, 0xd3, 0xfc, 0xf5, 0xd0,
+    0x7a, 0xef, 0xc6, 0x88, 0xf2, 0x4b, 0xe9, 0x18, 0x54, 0x9b, 0x66, 0x53,
+    0xf9, 0x74, 0x1e, 0xbb, 0xf1, 0xa2, 0xc1, 0x9f, 0xcb, 0xa0, 0xf5, 0xdf,
+    0x8d, 0x16, 0x54, 0xfe, 0x5d, 0x07, 0xae, 0xfc, 0x68, 0xb4, 0xe7, 0xf5,
+    0x67, 0x50, 0x07, 0x7b, 0x3a, 0x7b, 0xd7, 0x7e, 0x34, 0x5b, 0x93, 0xff,
+    0x35, 0x05, 0x0e, 0xad, 0xd6, 0x3a, 0x1d, 0x00, 0x7e, 0x39, 0x2d, 0x9f,
+    0xe6, 0x1e, 0xd4, 0xd9, 0xe2, 0x1d, 0x3f, 0xae, 0xf0, 0xe9, 0xa8, 0x0e,
+    0x9f, 0xf5, 0xbd, 0x74, 0x1e, 0xbb, 0xf1, 0xa2, 0x87, 0x9f, 0xf9, 0x57,
+    0xd3, 0x75, 0xb4, 0x14, 0x51, 0xd3, 0xff, 0x76, 0xfd, 0xd8, 0x63, 0xc6,
+    0x4c, 0x0e, 0x9f, 0xf7, 0x61, 0xf0, 0x58, 0xf2, 0xbe, 0x3a, 0x7f, 0xa8,
+    0x46, 0xf9, 0xf9, 0xbc, 0x74, 0xfa, 0xf1, 0xcf, 0x10, 0xe8, 0xd9, 0xef,
+    0x64, 0xde, 0x7e, 0x1d, 0x72, 0x81, 0xb2, 0x74, 0xff, 0xfd, 0x5d, 0x6d,
+    0xbf, 0x2f, 0x83, 0x7f, 0x67, 0x2d, 0xf1, 0x52, 0x5b, 0xd5, 0xa4, 0xd4,
+    0x29, 0x50, 0x85, 0xc3, 0x75, 0x18, 0xda, 0x47, 0xc8, 0x79, 0x45, 0xe4,
+    0x27, 0x3b, 0x22, 0xd6, 0x2f, 0x9f, 0xcb, 0xa0, 0xf5, 0xdf, 0x8d, 0x17,
+    0x9c, 0x33, 0x31, 0x65, 0xea, 0x7d, 0x43, 0xe2, 0xa7, 0x21, 0xf1, 0x8d,
+    0xa0, 0x0d, 0x54, 0x7b, 0xb3, 0xd1, 0x97, 0x0c, 0xea, 0x15, 0xb3, 0xf9,
+    0x74, 0x1e, 0xbb, 0xf1, 0xa2, 0x96, 0x9f, 0x07, 0xae, 0xfc, 0x68, 0xb0,
+    0xa7, 0xff, 0xcd, 0x43, 0xd3, 0x6d, 0xb1, 0xe5, 0x0d, 0xa8, 0xe9, 0x2e,
+    0x91, 0x08, 0xa3, 0x29, 0xfc, 0xba, 0x0f, 0x5d, 0xf8, 0xd1, 0x65, 0xcf,
+    0x2f, 0xfe, 0xba, 0x3b, 0x23, 0xa7, 0x2f, 0xf2, 0x8e, 0x96, 0x7c, 0x79,
+    0xfd, 0x98, 0xcf, 0xac, 0x2b, 0xfe, 0x07, 0x4f, 0xec, 0x31, 0xcb, 0x75,
+    0xc4, 0x3a, 0x7c, 0xd4, 0xe9, 0xb2, 0x74, 0xc2, 0xd6, 0x7b, 0x9a, 0x1a,
+    0xcf, 0x5b, 0xdf, 0xd1, 0xd3, 0xf5, 0x83, 0x72, 0xf6, 0x74, 0xcd, 0x93,
+    0xa3, 0xa3, 0xe1, 0xd9, 0x13, 0xa2, 0xa9, 0xf9, 0x2f, 0x3f, 0x67, 0xb3,
+    0xa4, 0xf3, 0xa4, 0xf3, 0xa4, 0xf3, 0xa1, 0x8d, 0x87, 0xf1, 0x04, 0x10,
+    0x9d, 0xcc, 0xf6, 0x74, 0xc8, 0xc7, 0x4f, 0xc2, 0xca, 0x16, 0xa3, 0xa3,
+    0xa3, 0x7a, 0xe0, 0xa4, 0xcc, 0xa3, 0xa7, 0xff, 0xe7, 0xb0, 0xf6, 0xf7,
+    0xb7, 0x37, 0x4a, 0xfc, 0xdf, 0x1d, 0x37, 0x96, 0xca, 0xb9, 0xf0, 0x29,
+    0xea, 0x10, 0x95, 0x08, 0xdf, 0x19, 0x5a, 0xf0, 0x97, 0x65, 0x6b, 0x58,
+    0x8f, 0xf0, 0xac, 0xff, 0xe5, 0xaa, 0xde, 0xba, 0x0f, 0x5d, 0xf8, 0xd1,
+    0x46, 0x4f, 0xe5, 0xb3, 0xa6, 0x06, 0xf8, 0xe8, 0x7a, 0xec, 0x48, 0x43,
+    0x05, 0x45, 0x17, 0x2d, 0xcf, 0x30, 0xa6, 0xe2, 0xa4, 0xff, 0xcb, 0xb7,
+    0xae, 0x83, 0xd7, 0x7e, 0x34, 0x47, 0x33, 0xff, 0x96, 0xab, 0x7a, 0xe8,
+    0x3d, 0x77, 0xe3, 0x44, 0xe5, 0x3f, 0x97, 0x41, 0xeb, 0xbf, 0x1a, 0x2c,
+    0xc9, 0xfe, 0xf8, 0x1b, 0x9b, 0xbc, 0x5e, 0x74, 0xfe, 0xac, 0x80, 0x56,
+    0x39, 0x3a, 0x4b, 0x63, 0xea, 0x79, 0xcc, 0xfe, 0x5d, 0x07, 0xae, 0xfc,
+    0x68, 0xb7, 0x67, 0xff, 0x2d, 0x56, 0xf5, 0xd0, 0x7a, 0xef, 0xc6, 0x8a,
+    0x42, 0x7f, 0xe5, 0xdb, 0xd7, 0x41, 0xeb, 0xbf, 0x1a, 0x25, 0x28, 0xc1,
+    0x52, 0x7b, 0x89, 0xca, 0x54, 0xfa, 0x14, 0xe2, 0x4f, 0xc3, 0xd7, 0x75,
+    0x49, 0xff, 0x5b, 0xd7, 0x41, 0xeb, 0xbf, 0x1a, 0x27, 0x69, 0xff, 0xf2,
+    0x75, 0xda, 0x99, 0xde, 0xfa, 0x16, 0x1a, 0xf1, 0xd2, 0x5a, 0x91, 0x3f,
+    0x69, 0x13, 0xff, 0x5a, 0xb7, 0x5e, 0xbd, 0xb7, 0xe7, 0x9d, 0x3f, 0xf0,
+    0xd6, 0xef, 0x0a, 0xc8, 0xde, 0x27, 0x4d, 0xac, 0xbe, 0x91, 0x0d, 0x94,
+    0x48, 0x52, 0x38, 0x75, 0xa1, 0x5d, 0x3e, 0x0f, 0x5d, 0xf8, 0xd1, 0x16,
+    0x4f, 0xfa, 0xde, 0xba, 0x0f, 0x5d, 0xf8, 0xd1, 0x2e, 0xcf, 0xff, 0xd5,
+    0xd6, 0xdb, 0xf2, 0xf8, 0x37, 0xf6, 0x72, 0xdf, 0x15, 0x25, 0xd2, 0x36,
+    0x14, 0x65, 0xac, 0x91, 0x3f, 0xf9, 0x6a, 0xb7, 0xae, 0x83, 0xd7, 0x7e,
+    0x34, 0x4c, 0x53, 0xe0, 0xf5, 0xdf, 0x8d, 0x15, 0x4c, 0xa8, 0xe8, 0xa3,
+    0xc1, 0xfe, 0x65, 0x3f, 0xff, 0xf8, 0x2f, 0x78, 0xbe, 0xb8, 0xbd, 0xde,
+    0x41, 0x34, 0xe6, 0xd0, 0x1e, 0x74, 0x2d, 0x13, 0x36, 0x47, 0x3f, 0xf9,
+    0x6a, 0xb7, 0xae, 0x83, 0xd7, 0x7e, 0x34, 0x4e, 0x93, 0xf9, 0x2c, 0x19,
+    0xf6, 0xe8, 0xe9, 0xf3, 0x8c, 0xe3, 0x64, 0xe9, 0xfb, 0x4a, 0x47, 0x54,
+    0x27, 0x42, 0x1e, 0xae, 0x4a, 0x27, 0x26, 0xd8, 0xe5, 0x9a, 0x19, 0xff,
+    0xbb, 0xcf, 0x1b, 0x15, 0xf6, 0xe2, 0x28, 0xe8, 0x51, 0xf9, 0x6c, 0xaa,
+    0x7f, 0xd6, 0xf5, 0xd0, 0x7a, 0xef, 0xc6, 0x89, 0xde, 0x7d, 0xce, 0xed,
+    0x48, 0x54, 0x97, 0xd2, 0x75, 0x55, 0x18, 0xca, 0x88, 0xad, 0x22, 0x7f,
+    0xf2, 0xd5, 0x6f, 0x5d, 0x07, 0xae, 0xfc, 0x68, 0xa1, 0x67, 0xff, 0x2d,
+    0x56, 0xf5, 0xd0, 0x7a, 0xef, 0xc6, 0x8a, 0x4a, 0x7f, 0xff, 0x56, 0x57,
+    0xfa, 0x9c, 0xdd, 0xab, 0x9b, 0x6e, 0x76, 0xa3, 0xa3, 0x05, 0xcd, 0xb7,
+    0x9c, 0x7a, 0x32, 0xe0, 0x22, 0x54, 0x7f, 0xdf, 0x24, 0xf6, 0xa9, 0xac,
+    0xa9, 0x3f, 0x97, 0x41, 0xeb, 0xbf, 0x1a, 0x22, 0x49, 0xff, 0xcb, 0x55,
+    0xbd, 0x74, 0x1e, 0xbb, 0xf1, 0xa2, 0x5e, 0x9e, 0x0e, 0xf9, 0x93, 0xa7,
+    0xc1, 0xf2, 0x93, 0x27, 0x4e, 0xf9, 0xb8, 0x74, 0xff, 0xd6, 0xe6, 0x59,
+    0xd5, 0xed, 0xb1, 0x70, 0xe8, 0xe9, 0x15, 0x88, 0x44, 0xe1, 0x38, 0x0e,
+    0x4f, 0xf2, 0x58, 0xf7, 0xc7, 0x1b, 0xf9, 0xd3, 0xe0, 0xf5, 0xdf, 0x8d,
+    0x14, 0xbc, 0xf8, 0x79, 0x85, 0x68, 0x74, 0xff, 0x7d, 0x90, 0x6c, 0x5e,
+    0x8a, 0x3a, 0x7f, 0xaf, 0x0d, 0x58, 0x76, 0xe3, 0x6b, 0xce, 0x9a, 0x9e,
+    0xc7, 0xf7, 0xd9, 0xcc, 0xcf, 0xa3, 0xa7, 0x37, 0xd9, 0x3a, 0x3a, 0x36,
+    0x3a, 0x0a, 0xcf, 0xfc, 0x8a, 0xbe, 0xbf, 0x38, 0xf6, 0x1c, 0x4e, 0x9e,
+    0xca, 0x69, 0xc3, 0xa3, 0x67, 0xd3, 0xc4, 0x79, 0xfe, 0xbd, 0xdb, 0x88,
+    0x0d, 0x81, 0xd3, 0xe7, 0x74, 0x53, 0x64, 0xe9, 0xf5, 0xba, 0xa0, 0xc9,
+    0xd2, 0x6e, 0x8f, 0x41, 0x45, 0x33, 0xe4, 0xff, 0x9f, 0xbc, 0x74, 0x96,
+    0xca, 0xcc, 0x7a, 0x3d, 0xa3, 0xac, 0x4c, 0x9c, 0x85, 0x1e, 0xd7, 0xae,
+    0x11, 0x99, 0x22, 0xe4, 0x21, 0xf5, 0x8a, 0x27, 0xf2, 0xe8, 0x3d, 0x77,
+    0xe3, 0x45, 0x39, 0x3f, 0xe4, 0x0b, 0xce, 0xea, 0x87, 0xc7, 0x4f, 0xfa,
+    0xb6, 0xc1, 0x4b, 0xd3, 0x4d, 0x0a, 0x99, 0x34, 0x3a, 0x6c, 0x17, 0xd2,
+    0x23, 0xf5, 0x8e, 0x9d, 0xcf, 0xe7, 0xc1, 0xeb, 0xbf, 0x1a, 0x2b, 0xc9,
+    0xff, 0xfa, 0xba, 0xdb, 0x7e, 0x5f, 0x06, 0xfe, 0xce, 0x5b, 0xe2, 0xa4,
+    0xba, 0x44, 0x86, 0xb1, 0x94, 0xff, 0xcb, 0xb7, 0xae, 0x83, 0xd7, 0x7e,
+    0x34, 0x48, 0xf3, 0x93, 0xe6, 0x3a, 0x77, 0xa9, 0x45, 0x2c, 0xbb, 0x9f,
+    0x07, 0xae, 0xfc, 0x68, 0x92, 0x27, 0x97, 0x6f, 0x5b, 0x1e, 0xe5, 0x15,
+    0x4f, 0xfc, 0xbb, 0x7a, 0xe8, 0x3d, 0x77, 0xe3, 0x44, 0x95, 0x3e, 0x0f,
+    0x5d, 0xf8, 0xd1, 0x78, 0xcf, 0xb3, 0x9e, 0x57, 0x8e, 0x9f, 0xe7, 0xae,
+    0x83, 0xd7, 0x7e, 0x34, 0x49, 0xb2, 0x5d, 0x22, 0x70, 0x0c, 0xac, 0x9e,
+    0x19, 0x91, 0xef, 0x81, 0xeb, 0xe7, 0x0c, 0x7a, 0x85, 0x2a, 0x43, 0x31,
+    0xc8, 0x6a, 0x28, 0xaf, 0x70, 0xc5, 0xe1, 0xbf, 0x70, 0xea, 0x86, 0x8f,
+    0x5d, 0x83, 0x08, 0xec, 0xdf, 0x2b, 0x0f, 0xa9, 0x46, 0xf5, 0x79, 0x48,
+    0xdf, 0xe5, 0x32, 0x7a, 0xd2, 0xa3, 0xe3, 0x48, 0x14, 0x49, 0xea, 0x9d,
+    0x7c, 0x78, 0x0e, 0x56, 0x9a, 0x21, 0x4c, 0x25, 0x56, 0x2b, 0x08, 0x37,
+    0x3c, 0x89, 0x75, 0xa5, 0xdf, 0xd2, 0xfc, 0x5d, 0x88, 0x5b, 0x8d, 0x23,
+    0xf7, 0x34, 0xaa, 0xae, 0x5a, 0x17, 0x3e, 0xeb, 0x18, 0x37, 0x53, 0xc6,
+    0xfa, 0x4a, 0xb8, 0xd6, 0x8f, 0xc3, 0xf4, 0xee, 0xf3, 0xbd, 0x25, 0xf2,
+    0x00,
 };
 
-static const unsigned kPreloadedHSTSBits = 118534;
+static const unsigned kPreloadedHSTSBits = 122689;
 
-static const unsigned kHSTSRootPosition = 117945;
+static const unsigned kHSTSRootPosition = 122099;
 
 #endif // NET_HTTP_TRANSPORT_SECURITY_STATE_STATIC_H_
diff --git a/net/http/transport_security_state_static.json b/net/http/transport_security_state_static.json
index 288797f..750688a 100644
--- a/net/http/transport_security_state_static.json
+++ b/net/http/transport_security_state_static.json
@@ -1778,7 +1778,7 @@
     { "name": "uspsoig.gov", "include_subdomains": true, "mode": "force-https" },
     { "name": "notalone.gov", "include_subdomains": true, "mode": "force-https" },
     { "name": "aids.gov", "include_subdomains": true, "mode": "force-https" },
-    { "name": "itdashboard.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "itdashboard.gov", "include_subdomains": true, "mode": "force-https" },
     { "name": "paymentaccuracy.gov", "include_subdomains": true, "mode": "force-https" },
     { "name": "cao.gov", "include_subdomains": true, "mode": "force-https" },
     { "name": "cfo.gov", "include_subdomains": true, "mode": "force-https" },
@@ -1787,7 +1787,64 @@
     { "name": "bfelob.gov", "include_subdomains": true, "mode": "force-https" },
     { "name": "max.gov", "include_subdomains": true, "mode": "force-https" },
     { "name": "save.gov", "include_subdomains": true, "mode": "force-https" },
-    { "name": "saveaward.gov", "include_subdomains": true, "mode": "force-https" }
+    { "name": "saveaward.gov", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ustr.gov", "include_subdomains": true, "mode": "force-https" },
+    { "name": "airlea.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "atlantischild.hu", "include_subdomains": true, "mode": "force-https" },
+    { "name": "benjamin.pe", "include_subdomains": true, "mode": "force-https" },
+    { "name": "changelab.cc", "include_subdomains": true, "mode": "force-https" },
+    { "name": "cryptobin.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "csuw.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dccode.gov", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dreadbyte.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "dylanscott.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "e-kontakti.fi", "include_subdomains": true, "mode": "force-https" },
+    { "name": "ecfs.link", "include_subdomains": true, "mode": "force-https" },
+    { "name": "expatads.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "florianmitrea.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gaytorrent.ru", "include_subdomains": true, "mode": "force-https" },
+    { "name": "getable.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "gpsfix.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "guidetoiceland.is", "include_subdomains": true, "mode": "force-https" },
+    { "name": "happylifestyle.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "heppler.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "httpswatch.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "interserved.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "izdiwho.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jimshaver.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jmdekker.it", "include_subdomains": true, "mode": "force-https" },
+    { "name": "jonathan.ir", "include_subdomains": true, "mode": "force-https" },
+    { "name": "klarmobil-empfehlen.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "klingeletest.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "lancejames.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "leonklingele.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "madars.org", "include_subdomains": true, "mode": "force-https" },
+    { "name": "magneticanvil.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mimeit.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "miniku.net", "include_subdomains": true, "mode": "force-https" },
+    { "name": "mobilcom-debitel-empfehlen.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "morethanadream.lv", "include_subdomains": true, "mode": "force-https" },
+    { "name": "narodniki.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "netrider.net.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "niloxy.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "noobs-r-us.co.uk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "nowhere.dk", "include_subdomains": true, "mode": "force-https" },
+    { "name": "perfectionis.me", "include_subdomains": true, "mode": "force-https" },
+    { "name": "phryanjr.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "polymathematician.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sanatfilan.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sikayetvar.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "stulda.cz", "include_subdomains": true, "mode": "force-https" },
+    { "name": "sysdb.io", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tallshoe.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "thetomharling.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "tracktivity.com.au", "include_subdomains": true, "mode": "force-https" },
+    { "name": "twitteroauth.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "vitrado.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "webtalis.nl", "include_subdomains": true, "mode": "force-https" },
+    { "name": "wevahoo.com", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zentralwolke.de", "include_subdomains": true, "mode": "force-https" },
+    { "name": "zhovner.com", "include_subdomains": true, "mode": "force-https" }
   ],
 
   // |ReportUMAOnPinFailure| uses these to report which domain was associated
diff --git a/net/quic/quic_http_stream.cc b/net/quic/quic_http_stream.cc
index b22fb93..d61a303 100644
--- a/net/quic/quic_http_stream.cc
+++ b/net/quic/quic_http_stream.cc
@@ -111,7 +111,8 @@
   // TODO(rch): remove this once we figure out why channel ID is not being
   // sent when it should be.
   HostPortPair origin = HostPortPair::FromURL(request_info_->url);
-  if (origin.Equals(HostPortPair("accounts.google.com", 443))) {
+  if (origin.Equals(HostPortPair("accounts.google.com", 443)) &&
+      request_headers.HasHeader(HttpRequestHeaders::kCookie)) {
     SSLInfo ssl_info;
     bool secure_session =
         session_->GetSSLInfo(&ssl_info) && ssl_info.cert.get();
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc
index da2f56c..f957c18 100644
--- a/net/quic/quic_stream_factory.cc
+++ b/net/quic/quic_stream_factory.cc
@@ -1186,7 +1186,7 @@
 
   if (http_server_properties_) {
     if (quic_supported_servers_at_startup_.empty()) {
-      for (const std::pair<const net::HostPortPair, net::AlternateProtocolInfo>&
+      for (const std::pair<const HostPortPair, AlternateProtocolInfo>&
                key_value : http_server_properties_->alternate_protocol_map()) {
         if (key_value.second.protocol == QUIC) {
           quic_supported_servers_at_startup_.insert(key_value.first);
diff --git a/net/sdch/README.md b/net/sdch/README.md
new file mode 100644
index 0000000..8200ee5
--- /dev/null
+++ b/net/sdch/README.md
@@ -0,0 +1,119 @@
+# SDCH 
+
+"SDCH" stands for "Shared Dictionary Compression over HTTP".  It is a
+protocol for compressing URL responses used when the server and
+the client share a dictionary that can be referred to for
+compression/encoding and decompression/decoding.  The details of the
+SDCH protocol are specified in 
+[the spec](https://docs.google.com/a/chromium.org/document/d/1REMkwjXY5yFOkJwtJPjCMwZ4Shx3D9vfdAytV_KQCUo/edit?pli=1)
+(soon to be moved to github) but in brief:
+
+1. If the client supports SDCH decoding, it advertises "sdch" in the
+   "Accept-Encoding" header.
+2. If the server could have encoded a response with a dictionary (but
+   didn't, because the client didn't have the dictionary), it includes
+   an advisory "Get-Dictionary: <url>" header in its response.
+3. If the client has a dictionary that the server has previously
+   advertised as being usable for encoding a particular requests, it
+   advertises that dictionary as being available via an
+   "Avail-Dictionary: <hash>" header in the request.
+4. If the server chooses to encode a response with a dictionary, it
+   includes "sdch" in a "Content-Encoding" header, in which case the
+   body will reference the dictionary to be used for decoding (which
+   must be one the client advertised in the original request).
+   Encodings may be chained; often responses are SDCH encoded, and then
+   gzip encoded.
+
+## SDCH in Chromium: Overview
+
+The SDCH implementation in Chromium is spread across several classes
+in several different directories:
+
+* SdchManager (in net/base): This class contains all
+  dictionaries currently known to Chromium.  Each URLRequestContext
+  points to an SdchManager; at the chrome/ level, there is one
+  SdchManager per profile.  URLRequestHttpJob consults the SdchManager
+  for what dictionaries should be advertised with a URLRequest, and
+  notifies the SdchManager whenever it sees a "Get-Dictionary"
+  header.  The SdchManager does *not* mediate fetching of
+  dictionaries; it is conceptually layered underneath URLRequest and
+  has no knowledge of URLRequests.  There are several nested classes of
+  SdchManager (Dictionary, DictionarySet) used in the SDCH
+  implementation; see sdch_manager.h for details.
+* SdchObserver (in net/base).  This is an Abstract Base
+  Class which other classes may implement if those classes wish to
+  receive notifications about SDCH events.  Such classes should also
+  register as observers with the SdchManager.
+* SdchFilter (int net/filter).  This class is derived from net::Filter
+  that is used for decoding the SDCH response; it cooperates with
+  SdchManager and the URLRequestJob to decode SDCH encoded responses. 
+* SdchDictionaryFetcher (int net/url_request):
+  This class implements the nuts&bolts of fetching an SDCH
+  dictionary.  
+* SdchOwner (in net/sdch): This class is an SdchObserver.
+  It contains policy for the SDCH implementation, including mediation
+  of fetching dictionaries, prioritization and eviction of
+  dictionaries in response to new fetches, and constraints on the
+  amount of memory that is usable by SDCH dictionaries.  It initiates
+  dictionary fetches as appropriate when it receives notification of
+  a "Get-Dictionary" header from the SdchManager.
+
+A net/ embedder should instantiate an SdchManager and an SdchOwner,
+and guarantee that the SdchManager outlive the SdchOwner.
+
+Note the layering of the above classes:
+
+1. The SdchManager and SdchOwner classes have no knowledge of
+   URLRequests.  URLRequest is dependent on those classes, not the
+   reverse.
+2. SdchDictionaryFetcher is dependent on URLRequest, but is still a
+   utility class exported by the net/ library for use by higher levels.
+3. SdchOwner manages the entire system on behalf of the embedder.  The
+   intent is that the embedder can change policies through methods on
+   SdchOwner, while letting the SdchOwner class take care of policy
+   implementation. 
+
+## SDCH in Chromium: Debugging
+
+Data that is useful in debugging SDCH problems:
+
+* The SDCH UMA prefix is "Sdch3", and histograms that have been found
+  useful for debugging include 
+    * ProblemCodes_* (though this requires trawling the source for each bucket).
+    * ResponseCorruptionDetection.{Cached,Uncached}: An attempt to make
+      sense of the twisted mess in SdchFilter::ReadFilteredData mentioned
+      above. 
+    * BlacklistReason: Why requests avoid using SDCH when they could use
+      it. 
+* about:net-internals has an SDCH tab, showing loaded dictionaries and
+  other information.  Searching in net-internals for "Get-Dictionary",
+  the URLRequest that actually fetches that dictionary, and then the
+  hash of that dictionary (often used as the file name) can also be
+  useful.
+
+## SDCH in Chromium: Gotchas and corner cases
+
+There are a couple of known issues in SDCH in Chromium that developers
+in this space should be aware of:
+
+* As noted in the spec above, there have historically been problems
+  with middleboxes stripping or corrupting SDCH encoded responses.
+  For this reason, the protocol requires that if a server is not using
+  SDCH encoding when it has previously advertised the availability of
+  doing such, it includes an "X-SDCH-Encode: 0" header in the
+  response.  Servers don't always do this (especially multi-servers),
+  and that can result in failed decodings and requests being dropped
+  on the floor.  The code to handle this is a twisted mess (see
+  SdchFilter::ReadFilteredData()) and problems have often been seen
+  from or associated with it.
+* If the decoding logic trips over a problem, it will often blacklist
+  the server in question, temporarily (if it can recover that request)
+  or permanently (if it can't).  This can lead to a mysterious lack of
+  SDCH encoding when it's expected to be present.
+* The network cache currently stores the response precisely as received from
+  the network.  This means that requests that don't advertise SDCH
+  may get a cached value that is SDCH encoded, and requests that do
+  advertise SDCH may get a cached value that is not SDCH encoded.
+  The second case is handled transparently, but the first case may
+  lead to request failure. 
+
diff --git a/net/socket/socks5_client_socket.cc b/net/socket/socks5_client_socket.cc
index b435e13..6d67913 100644
--- a/net/socket/socks5_client_socket.cc
+++ b/net/socket/socks5_client_socket.cc
@@ -7,10 +7,10 @@
 #include "base/basictypes.h"
 #include "base/callback_helpers.h"
 #include "base/compiler_specific.h"
-#include "base/debug/trace_event.h"
 #include "base/format_macros.h"
 #include "base/strings/string_util.h"
 #include "base/sys_byteorder.h"
+#include "base/trace_event/trace_event.h"
 #include "net/base/io_buffer.h"
 #include "net/base/net_log.h"
 #include "net/base/net_util.h"
diff --git a/net/socket/ssl_client_socket.cc b/net/socket/ssl_client_socket.cc
index 2ea403f..f41ab32 100644
--- a/net/socket/ssl_client_socket.cc
+++ b/net/socket/ssl_client_socket.cc
@@ -101,22 +101,7 @@
 }
 
 bool SSLClientSocket::IgnoreCertError(int error, int load_flags) {
-  if (error == OK || load_flags & LOAD_IGNORE_ALL_CERT_ERRORS)
-    return true;
-
-  if (error == ERR_CERT_COMMON_NAME_INVALID &&
-      (load_flags & LOAD_IGNORE_CERT_COMMON_NAME_INVALID))
-    return true;
-
-  if (error == ERR_CERT_DATE_INVALID &&
-      (load_flags & LOAD_IGNORE_CERT_DATE_INVALID))
-    return true;
-
-  if (error == ERR_CERT_AUTHORITY_INVALID &&
-      (load_flags & LOAD_IGNORE_CERT_AUTHORITY_INVALID))
-    return true;
-
-  return false;
+  return error == OK || (load_flags & LOAD_IGNORE_ALL_CERT_ERRORS);
 }
 
 bool SSLClientSocket::set_was_npn_negotiated(bool negotiated) {
diff --git a/net/socket/ssl_client_socket_openssl.cc b/net/socket/ssl_client_socket_openssl.cc
index 504b702..c4af957 100644
--- a/net/socket/ssl_client_socket_openssl.cc
+++ b/net/socket/ssl_client_socket_openssl.cc
@@ -18,6 +18,7 @@
 #include "base/environment.h"
 #include "base/memory/singleton.h"
 #include "base/metrics/histogram.h"
+#include "base/metrics/sparse_histogram.h"
 #include "base/profiler/scoped_tracker.h"
 #include "base/strings/string_piece.h"
 #include "base/synchronization/lock.h"
@@ -191,6 +192,10 @@
     SSL_CTX_set_cert_verify_callback(ssl_ctx_.get(), CertVerifyCallback, NULL);
     SSL_CTX_set_cert_cb(ssl_ctx_.get(), ClientCertRequestCallback, NULL);
     SSL_CTX_set_verify(ssl_ctx_.get(), SSL_VERIFY_PEER, NULL);
+    // This stops |SSL_shutdown| from generating the close_notify message, which
+    // is currently not sent on the network.
+    // TODO(haavardm): Remove setting quiet shutdown once 118366 is fixed.
+    SSL_CTX_set_quiet_shutdown(ssl_ctx_.get(), 1);
     // TODO(kristianm): Only select this if ssl_config_.next_proto is not empty.
     // It would be better if the callback were not a global setting,
     // but that is an OpenSSL issue.
@@ -468,6 +473,7 @@
   int rv = Init();
   if (rv != OK) {
     net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
+    UMA_HISTOGRAM_SPARSE_SLOWLY("Net.SSL_Connection_Error", std::abs(rv));
     return rv;
   }
 
@@ -480,6 +486,7 @@
     user_connect_callback_ = callback;
   } else {
     net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
+    UMA_HISTOGRAM_SPARSE_SLOWLY("Net.SSL_Connection_Error", std::abs(rv));
     if (rv < OK)
       OnHandshakeCompletion();
   }
@@ -1359,6 +1366,7 @@
   int rv = DoHandshakeLoop(result);
   if (rv != ERR_IO_PENDING) {
     net_log_.EndEventWithNetErrorCode(NetLog::TYPE_SSL_CONNECT, rv);
+    UMA_HISTOGRAM_SPARSE_SLOWLY("Net.SSL_Connection_Error", std::abs(rv));
     DoConnectCallback(rv);
   }
 }
diff --git a/net/socket/ssl_client_socket_pool.cc b/net/socket/ssl_client_socket_pool.cc
index b791b1c..7734d64 100644
--- a/net/socket/ssl_client_socket_pool.cc
+++ b/net/socket/ssl_client_socket_pool.cc
@@ -371,8 +371,7 @@
   } else if (result == ERR_PROXY_AUTH_REQUESTED ||
              result == ERR_HTTPS_PROXY_TUNNEL_RESPONSE) {
     StreamSocket* socket = transport_socket_handle_->socket();
-    HttpProxyClientSocket* tunnel_socket =
-        static_cast<HttpProxyClientSocket*>(socket);
+    ProxyClientSocket* tunnel_socket = static_cast<ProxyClientSocket*>(socket);
     error_response_info_ = *tunnel_socket->GetConnectResponseInfo();
   }
   if (result < 0)
diff --git a/net/socket/websocket_endpoint_lock_manager_unittest.cc b/net/socket/websocket_endpoint_lock_manager_unittest.cc
index 1603a3b..dbe8494 100644
--- a/net/socket/websocket_endpoint_lock_manager_unittest.cc
+++ b/net/socket/websocket_endpoint_lock_manager_unittest.cc
@@ -292,6 +292,13 @@
 TEST_F(WebSocketEndpointLockManagerTest, UnlockEndpointIsDelayed) {
   using base::TimeTicks;
 
+  // This 1ms delay is too short for very slow environments (usually those
+  // running memory checkers). In those environments, the code takes >1ms to run
+  // and no delay is needed. Rather than increase the delay and slow down the
+  // test everywhere, the test doesn't explicitly verify that a delay has been
+  // applied. Instead it just verifies that the whole thing took >=1ms. 1ms is
+  // easily enough for normal compiles even on Android, so the fact that there
+  // is a delay is still checked on every platform.
   const base::TimeDelta unlock_delay = base::TimeDelta::FromMilliseconds(1);
   instance()->SetUnlockDelayForTesting(unlock_delay);
   FakeWaiter fake_waiter;
@@ -302,8 +309,6 @@
 
   TimeTicks before_unlock = TimeTicks::Now();
   instance()->UnlockEndpoint(DummyEndpoint());
-  RunUntilIdle();
-  EXPECT_FALSE(blocking_waiter.called());
   blocking_waiter.WaitForLock();
   TimeTicks after_unlock = TimeTicks::Now();
   EXPECT_GE(after_unlock - before_unlock, unlock_delay);
diff --git a/net/test/android/javatests/src/org/chromium/net/test/BaseHttpTestServer.java b/net/test/android/javatests/src/org/chromium/net/test/BaseHttpTestServer.java
new file mode 100644
index 0000000..d1b45f9
--- /dev/null
+++ b/net/test/android/javatests/src/org/chromium/net/test/BaseHttpTestServer.java
@@ -0,0 +1,129 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.net.test;
+
+import android.util.Log;
+
+import org.apache.http.HttpEntityEnclosingRequest;
+import org.apache.http.HttpException;
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
+import org.apache.http.HttpVersion;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.DefaultHttpServerConnection;
+import org.apache.http.message.BasicHttpResponse;
+import org.apache.http.params.BasicHttpParams;
+import org.apache.http.params.HttpParams;
+
+import java.io.IOException;
+import java.net.Socket;
+
+/** A base class for simple HTTP test servers. */
+public abstract class BaseHttpTestServer extends BaseTcpTestServer {
+    private static final String TAG = "BaseHttpTestServer";
+
+    /**
+     * Create an HTTP test server on the given port.
+     *
+     * @param serverPort The port to listen on for incoming HTTP connections.
+     * @param acceptTimeoutMs The timeout for calls to ServerSocket.accept(), in milliseconds.
+     * @throws IOException If the server port can't be bound.
+     */
+    public BaseHttpTestServer(int serverPort, int acceptTimeoutMs) throws IOException {
+        super(serverPort, acceptTimeoutMs);
+    }
+
+    /**
+     * Handle an incoming connection on |sock|.
+     *
+     * This will bind the socket, receive the request header (and entity, if applicable),
+     * dispatch the request to a handler based on the request method, and send the response
+     * generated by the handler.
+     *
+     * @param sock The socket for the incoming connection.
+     * @throws IOException If an error occurs while reading from or writing to the socket.
+     */
+    @Override
+    protected final void handle(Socket sock) throws IOException {
+        HttpParams httpParams = getConnectionParams();
+        DefaultHttpServerConnection conn = new DefaultHttpServerConnection();
+        conn.bind(sock, httpParams);
+
+        try {
+            HttpRequest request = conn.receiveRequestHeader();
+            if (request instanceof HttpEntityEnclosingRequest) {
+                conn.receiveRequestEntity((HttpEntityEnclosingRequest) request);
+            }
+
+            HttpResponse response = null;
+            switch (request.getRequestLine().getMethod()) {
+                case HttpGet.METHOD_NAME:
+                    response = handleGet(request);
+                    break;
+                case HttpPost.METHOD_NAME:
+                    response = handlePost((HttpEntityEnclosingRequest) request);
+                    break;
+                default:
+                    response = handleUnsupported(request);
+                    break;
+            }
+
+            conn.sendResponseHeader(response);
+            conn.sendResponseEntity(response);
+        } catch (HttpException e) {
+            Log.e(TAG, "Error while handling HTTP request", e);
+        } finally {
+            conn.close();
+        }
+    }
+
+    /**
+     * Returns the parameters used to establish the HTTP connection.
+     *
+     * The default implementation returns a default BasicHttpParams instance.
+     *
+     * @return The HttpParams to use to establish the HTTP connection.
+     */
+    protected HttpParams getConnectionParams() {
+        return new BasicHttpParams();
+    }
+
+    /**
+     * Handle a GET request.
+     *
+     * The default implementation returns a 405. Override this function if you want to support
+     * GET.
+     *
+     * @param request The GET request to handle.
+     * @return The response to the GET request.
+     */
+    protected HttpResponse handleGet(HttpRequest request) throws HttpException {
+        return handleUnsupported(request);
+    }
+
+    /**
+     * Handle a POST request.
+     *
+     * The default implementation returns a 405. Override this function if you want to support
+     * POST.
+     *
+     * @param request The POST request to handle.
+     * @return The response to the POST request.
+     */
+    protected HttpResponse handlePost(HttpEntityEnclosingRequest request) throws HttpException {
+        return handleUnsupported(request);
+    }
+
+    /** Handle an unsupported HTTP request.
+     *
+     * @param request The unsupported HTTP request.
+     * @return A 405 Method Not Allowed response.
+     */
+    protected HttpResponse handleUnsupported(HttpRequest request) {
+        return new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_METHOD_NOT_ALLOWED, "");
+    }
+}
diff --git a/net/test/android/javatests/src/org/chromium/net/test/BaseTcpTestServer.java b/net/test/android/javatests/src/org/chromium/net/test/BaseTcpTestServer.java
new file mode 100644
index 0000000..3f82359
--- /dev/null
+++ b/net/test/android/javatests/src/org/chromium/net/test/BaseTcpTestServer.java
@@ -0,0 +1,71 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.net.test;
+
+import android.util.Log;
+
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.SocketTimeoutException;
+
+/** A base class for simple TCP test servers. */
+public abstract class BaseTcpTestServer extends BaseTestServer {
+    private static final String TAG = "BaseTcpTestServer";
+
+    private ServerSocket mServerSocket;
+
+    /**
+     * Creates a TCP test server on the given port.
+     *
+     * @param serverPort The port to listen on for incoming TCP connections.
+     * @param acceptTimeoutMs The timeout for calls to ServerSocket.accept(), in milliseconds.
+     * @throws IOException If the server port can't be bound.
+     */
+    public BaseTcpTestServer(int serverPort, int acceptTimeoutMs) throws IOException {
+        mServerSocket = new ServerSocket(serverPort);
+        mServerSocket.setSoTimeout(acceptTimeoutMs);
+    }
+
+    /** Returns the port on which this server is listening for connections. */
+    @Override
+    public int getServerPort() {
+        return mServerSocket.getLocalPort();
+    }
+
+    /** Waits for and handles an incoming request. */
+    protected final void accept() {
+        try {
+            Socket sock = mServerSocket.accept();
+
+            if (!validateSocket(sock)) {
+                Log.e(TAG, "Socket failed validation.");
+                sock.close();
+                return;
+            }
+
+            handle(sock);
+        } catch (SocketTimeoutException e) {
+            Log.i(TAG, "Timed out waiting for incoming connection.");
+        } catch (IOException e) {
+            Log.e(TAG, "Error while handling incoming connection", e);
+        }
+    }
+
+    /**
+     * Returns whether the connection open on the given socket should be handled.
+     *
+     * @param sock The socket to validate.
+     */
+    protected abstract boolean validateSocket(Socket sock);
+
+    /**
+     * Handles the connection open on the given socket.
+     *
+     * @param sock The socket to handle.
+     * @throws IOException If an error occurs while reading from or writing to the socket.
+     */
+    protected abstract void handle(Socket sock) throws IOException;
+}
diff --git a/net/test/android/javatests/src/org/chromium/net/test/BaseTestServer.java b/net/test/android/javatests/src/org/chromium/net/test/BaseTestServer.java
new file mode 100644
index 0000000..a9ca6bd
--- /dev/null
+++ b/net/test/android/javatests/src/org/chromium/net/test/BaseTestServer.java
@@ -0,0 +1,37 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.net.test;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/** A base class for simple test servers. */
+public abstract class BaseTestServer implements Runnable {
+    private AtomicBoolean mKeepRunning;
+
+    /** Creates a test server. */
+    public BaseTestServer() {
+        mKeepRunning = new AtomicBoolean(true);
+    }
+
+    /** Accepts incoming connections until stopped via stop(). */
+    public void run() {
+        mKeepRunning.set(true);
+
+        while (mKeepRunning.get()) {
+            accept();
+        }
+    }
+
+    /** Waits for and handles an incoming request. */
+    protected abstract void accept();
+
+    /** Returns the port on which this server is listening for connections. */
+    public abstract int getServerPort();
+
+    /** Stops the server. */
+    public void stop() {
+        mKeepRunning.set(false);
+    }
+}
diff --git a/net/test/android/javatests/src/org/chromium/net/test/TestServerBuilder.java b/net/test/android/javatests/src/org/chromium/net/test/TestServerBuilder.java
new file mode 100644
index 0000000..3b52ab1
--- /dev/null
+++ b/net/test/android/javatests/src/org/chromium/net/test/TestServerBuilder.java
@@ -0,0 +1,341 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.net.test;
+
+import android.util.Log;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.regex.Pattern;
+
+/** Creates instances of BaseTestServer.
+ *
+ * This will eventually create instances of:
+ *  - FtpTestServer
+ *  - HttpTestServer
+ *  - TcpEchoTestServer
+ *  - UdpEchoTestServer
+ *  - WebsocketTestServer
+ * depending on the parameters passed to the constructor.
+ */
+class TestServerBuilder {
+    private static final String TAG = "TestServerBuilder";
+
+    private static final Pattern SWITCH_PREFIX_RE = Pattern.compile("--");
+    private static final Pattern SWITCH_VALUE_SEPARATOR_RE = Pattern.compile("=");
+
+    private static final Set<String> OCSP_RESPONSES;
+    private static final Set<String> SSL_BULK_CIPHERS;
+    private static final Set<String> SSL_CLIENT_CERT_TYPES;
+    private static final Set<String> SSL_KEY_EXCHANGE_ALGORITHMS;
+    private static final Set<String> TLS_INTOLERANCE_TYPES;
+    static {
+        HashSet<String> ocspResponses = new HashSet<String>();
+        ocspResponses.add("ok");
+        ocspResponses.add("revoked");
+        ocspResponses.add("invalid");
+        OCSP_RESPONSES = Collections.unmodifiableSet(ocspResponses);
+
+        HashSet<String> sslBulkCiphers = new HashSet<String>();
+        sslBulkCiphers.add("aes256");
+        sslBulkCiphers.add("aes128");
+        sslBulkCiphers.add("3des");
+        sslBulkCiphers.add("rc4");
+        SSL_BULK_CIPHERS = Collections.unmodifiableSet(sslBulkCiphers);
+
+        HashSet<String> sslClientCertTypes = new HashSet<String>();
+        sslClientCertTypes.add("rsa_sign");
+        sslClientCertTypes.add("dss_sign");
+        sslClientCertTypes.add("ecdsa_sign");
+        SSL_CLIENT_CERT_TYPES = Collections.unmodifiableSet(sslClientCertTypes);
+
+        HashSet<String> sslKeyExchangeAlgorithms = new HashSet<String>();
+        sslKeyExchangeAlgorithms.add("rsa");
+        sslKeyExchangeAlgorithms.add("dhe_rsa");
+        SSL_KEY_EXCHANGE_ALGORITHMS = Collections.unmodifiableSet(sslKeyExchangeAlgorithms);
+
+        HashSet<String> tlsIntoleranceTypes = new HashSet<String>();
+        tlsIntoleranceTypes.add("alert");
+        tlsIntoleranceTypes.add("close");
+        tlsIntoleranceTypes.add("reset");
+        TLS_INTOLERANCE_TYPES = Collections.unmodifiableSet(tlsIntoleranceTypes);
+    }
+
+    private enum TlsIntolerant {
+        MIN(0),
+
+        TOLERATE_ALL(0),
+        ABORT_ALL(1),
+        ABORT_1_1_AND_ABOVE(2),
+        ABORT_1_2_AND_ABOVE(3),
+
+        MAX(3);
+
+        private TlsIntolerant(int value) {
+            mValue = value;
+        }
+
+        public int value() {
+            return mValue;
+        }
+
+        private final int mValue;
+    }
+
+    private enum ServerType {
+        HTTP,
+        FTP,
+        TCP_ECHO,
+        UDP_ECHO,
+        BASIC_AUTH_PROXY,
+        WEBSOCKET,
+    }
+
+    // The path to the file containing the certificate and private key that the server should use,
+    // in PEM format.
+    private String mCertAndKeyFile;
+
+    // Directory from which the server should read data files.
+    private String mDataDir;
+
+    // If true, the server should disable the TLS session cache. Defaults to false.
+    private boolean mDisableSessionCache;
+
+    // Root URL for files served. Defaults to "/files/"
+    private String mFileRootUrl = "/files/";
+
+    // Hostname or IP the server should listen on and accept connections from.
+    // Defaults to "127.0.0.1"
+    private String mHost = "127.0.0.1";
+
+    // If true, the server should use HTTPS.
+    private boolean mHttps;
+
+    // If true, log to the logcat.
+    private boolean mLogToConsole;
+
+    // Type of OCSP response generated. Defaults to "ok".
+    private String mOcsp = "ok";
+
+    // Port to be used by the server.
+    private int mPort;
+
+    // Type of server to build.
+    private ServerType mServerType = ServerType.HTTP;
+
+    // The bulk encryption algorithms that should be accepted by the server.
+    // Defaults to "aes256", "aes128", "3des", "rc4"
+    private List<String> mSslBulkCiphers;
+
+    // If true, the server should require SSL client authentication on every connection.
+    // Defaults to false.
+    private boolean mSslClientAuth;
+
+    // The CA names that should be included in the client certificate requests.
+    private List<String> mSslClientCas;
+
+    // The certificate_types that should be included in the client certificate request.
+    // Defaults to "rsa_sign"
+    private List<String> mSslClientCertTypes;
+
+    // The key exchange algorithms that should be accepted by the server.
+    // Defaults to "rsa", "dhe_rsa"
+    private List<String> mSslKeyExchanges;
+
+    /** Create a TestServerBuilder.
+     *
+     * @param json The server configuration. Determines the type of server spawned and the specific
+     *      configuration thereof.
+     */
+    public TestServerBuilder(JSONObject json) throws JSONException {
+        mSslBulkCiphers = new ArrayList<String>(SSL_BULK_CIPHERS);
+        mSslClientCas = new ArrayList<String>();
+        mSslClientCertTypes = new ArrayList<String>();
+        mSslClientCertTypes.add("rsa_sign");
+        mSslKeyExchanges = new ArrayList<String>(SSL_KEY_EXCHANGE_ALGORITHMS);
+
+        parse(json);
+    }
+
+    /** Create a BaseTestServer.
+     *
+     * @return An instance of BaseTestServer.
+     */
+    public BaseTestServer build() {
+        Log.i(TAG, "building with: " + toString());
+
+        // TODO(jbudorick): Implement this in a subsequent CL.
+        throw new UnsupportedOperationException(
+                "TestServerBuilder.build() hasn't been implemented yet.");
+    }
+
+    private void parse(JSONObject json) throws JSONException {
+        Iterator<String> keyIter = json.keys();
+        while (keyIter.hasNext()) {
+            String key = keyIter.next();
+            Log.i(TAG, "Received key: " + key);
+            switch (key) {
+                case "cert-and-key-file":
+                    mCertAndKeyFile = json.getString(key);
+                    break;
+                case "data-dir":
+                    mDataDir = json.getString(key);
+                    break;
+                case "disable-session-cache":
+                    mDisableSessionCache = true;
+                    break;
+                case "host":
+                    mHost = json.getString(key);
+                    break;
+                case "https":
+                    mHttps = true;
+                    break;
+                case "log-to-console":
+                    mLogToConsole = true;
+                    break;
+                case "port":
+                    mPort = json.getInt(key);
+                    break;
+                case "server-type":
+                    parseServerType(json.getString(key));
+                    break;
+                case "ssl-client-auth":
+                    mSslClientAuth = true;
+                    break;
+                case "ssl-client-ca":
+                    mSslClientCas = jsonArrayAsStringList(json.getJSONArray(key));
+                    break;
+                case "ssl-key-exchange":
+                    mSslKeyExchanges = jsonArrayAsStringList(json.getJSONArray(key));
+                    if (SSL_KEY_EXCHANGE_ALGORITHMS.containsAll(mSslKeyExchanges)) {
+                        mSslKeyExchanges.removeAll(SSL_KEY_EXCHANGE_ALGORITHMS);
+                        throw new JSONException("invalid values provided for ssl-key-exchange: "
+                                + mSslKeyExchanges.toString());
+                    }
+                    break;
+                default:
+                    Log.e(TAG, "Unrecognized command-line flag: " + key);
+                    break;
+            }
+        }
+    }
+
+    private void parseServerType(String serverType) throws JSONException {
+        switch (serverType) {
+            case "http":
+                mServerType = ServerType.HTTP;
+                break;
+            case "ftp":
+                mServerType = ServerType.FTP;
+                break;
+            case "tcp-echo":
+                mServerType = ServerType.TCP_ECHO;
+                break;
+            case "udp-echo":
+                mServerType = ServerType.UDP_ECHO;
+                break;
+            case "basic-auth-proxy":
+                mServerType = ServerType.BASIC_AUTH_PROXY;
+                break;
+            case "websocket":
+                mServerType = ServerType.WEBSOCKET;
+                break;
+            default:
+                throw new JSONException("Unrecognized server-type value: \"" + serverType + "\"");
+        }
+    }
+
+    private static List<String> jsonArrayAsStringList(JSONArray jsonArray) throws JSONException {
+        List<String> result = new ArrayList<String>(jsonArray.length());
+        for (int i = 0; i < jsonArray.length(); ++i) {
+            result.set(i, jsonArray.getString(i));
+        }
+        return result;
+    }
+
+    public String toString() {
+        StringBuilder resultBuilder = new StringBuilder("{");
+        resultBuilder.append(formatString("mCertAndKeyFile", mCertAndKeyFile));
+        resultBuilder.append(formatString("mDataDir", mDataDir));
+        resultBuilder.append(formatBoolean("mDisableSessionCache", mDisableSessionCache));
+        resultBuilder.append(formatString("mFileRootUrl", mFileRootUrl));
+        resultBuilder.append(formatString("mHost", mHost));
+        resultBuilder.append(formatBoolean("mHttps", mHttps));
+        resultBuilder.append(formatBoolean("mLogToConsole", mLogToConsole));
+        resultBuilder.append(formatString("mOcsp", mOcsp));
+        resultBuilder.append(formatInt("mPort", mPort));
+        resultBuilder.append(formatServerType("mServerType", mServerType));
+        resultBuilder.append(formatList("mSslBulkCiphers", mSslBulkCiphers));
+        resultBuilder.append(formatBoolean("mSslClientAuth", mSslClientAuth));
+        resultBuilder.append(formatList("mSslClientCas", mSslClientCas));
+        resultBuilder.append(formatList("mSslClientCertTypes", mSslClientCertTypes));
+        resultBuilder.append(formatList("mSslKeyExchanges", mSslKeyExchanges));
+        resultBuilder.append("}");
+        return resultBuilder.toString();
+    }
+
+    private String formatString(String label, String value) {
+        return "\"" + label + "\": \"" + formatString(value) + "\",";
+    }
+
+    private String formatString(String value) {
+        return value != null ? value : "null";
+    }
+
+    private String formatInt(String label, int value) {
+        return "\"" + label + "\": \"" + Integer.toString(value) + "\",";
+    }
+
+    private String formatBoolean(String label, boolean value) {
+        return "\"" + label + "\": \"" + Boolean.toString(value) + "\",";
+    }
+
+    private String formatList(String label, List<String> value) {
+        StringBuilder resultBuilder = new StringBuilder("\"");
+        resultBuilder.append(label).append("\": [");
+        for (String s : value) {
+            resultBuilder.append("\"").append(formatString(s)).append("\",");
+        }
+        resultBuilder.append("],");
+        return resultBuilder.toString();
+    }
+
+    private String formatServerType(String label, ServerType serverType) {
+        String result = "\"mServerType\": \"";
+        switch (serverType) {
+            case HTTP:
+                result += "HTTP";
+                break;
+            case FTP:
+                result += "FTP";
+                break;
+            case TCP_ECHO:
+                result += "TCP_ECHO";
+                break;
+            case UDP_ECHO:
+                result += "UDP_ECHO";
+                break;
+            case BASIC_AUTH_PROXY:
+                result += "BASIC_AUTH_PROXY";
+                break;
+            case WEBSOCKET:
+                result += "WEBSOCKET";
+                break;
+            default:
+                result += "???";
+                break;
+        }
+        result += "\",";
+        return result;
+    }
+}
diff --git a/net/test/android/javatests/src/org/chromium/net/test/TestServerSpawner.java b/net/test/android/javatests/src/org/chromium/net/test/TestServerSpawner.java
new file mode 100644
index 0000000..67fa562
--- /dev/null
+++ b/net/test/android/javatests/src/org/chromium/net/test/TestServerSpawner.java
@@ -0,0 +1,195 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.net.test;
+
+import android.util.Log;
+
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpEntityEnclosingRequest;
+import org.apache.http.HttpException;
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
+import org.apache.http.HttpVersion;
+import org.apache.http.RequestLine;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.message.BasicHttpResponse;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.net.Socket;
+
+/**
+ * A server that spawns test servers based on request JSONs.
+ *
+ * This communicates with net::SpawnerCommunicator according to the protocol specified in
+ * //net/test/spawned_test_server/spawner_communicator.h. It spawns test servers on the device.
+ */
+public class TestServerSpawner extends BaseHttpTestServer {
+    private static final String TAG = "TestServerSpawner";
+
+    private static final int ARBITRARY_MAX_JSON_SIZE = 65536;
+    private static final String COMMAND_KILL = "/kill";
+    private static final String COMMAND_PING = "/ping";
+    private static final String COMMAND_START = "/start";
+
+    private BaseTestServer mTestServer;
+    private Thread mTestServerThread;
+
+    /**
+     * Creates a test server spawner on the given port.
+     *
+     * @param serverPort The port to listen on for incoming connections.
+     * @param acceptTimeoutMs The timeout for calls to ServerSocket.accept(), in milliseconds.
+     * @throws IOException If the server port can't be bound.
+     */
+    public TestServerSpawner(int serverPort, int acceptTimeoutMs) throws IOException {
+        super(serverPort, acceptTimeoutMs);
+        mTestServer = null;
+        mTestServerThread = null;
+    }
+
+    /**
+     * Returns true if the socket is coming from a local address.
+     *
+     * @param sock The socket to validate.
+     * @return True if the remote endpoint is local, false otherwise.
+     */
+    @Override
+    protected boolean validateSocket(Socket sock) {
+        return sock.getInetAddress().isLoopbackAddress();
+    }
+
+    /**
+     * Handles a GET request.
+     *
+     * This handles the /kill and /ping commands. It returns 403s for anything else.
+     *
+     * @param request The GET request to handle.
+     * @return The response to |request|.
+     */
+    @Override
+    protected HttpResponse handleGet(HttpRequest request) {
+        RequestLine requestLine = request.getRequestLine();
+        String uri = requestLine.getUri();
+
+        int status = HttpStatus.SC_INTERNAL_SERVER_ERROR;
+        String reason = "";
+        HttpEntity entity = null;
+
+        try {
+            // TODO(jbudorick): Refactor how this communicates with RemoteTestServer and
+            // SpawnerCommunicator (or maybe how we spawn and manage test servers on android
+            // entirely) once tests are no longer using chrome_test_server_spawner.py.
+            // The server startup and shutdown processes should be done in code (e.g. with events)
+            // rather than over HTTP. crbug/452596
+            if (COMMAND_KILL.equals(uri)) {
+                Log.i(TAG, "Received GET /kill request.");
+
+                if (mTestServer != null) {
+                    mTestServer.stop();
+                    mTestServerThread.join();
+                    status = HttpStatus.SC_OK;
+                    entity = new StringEntity("killed");
+                    mTestServer = null;
+                } else {
+                    status = HttpStatus.SC_BAD_REQUEST;
+                    reason = "Test server does not exist.";
+                }
+            } else if (COMMAND_PING.equals(uri)) {
+                Log.i(TAG, "Received GET /ping request.");
+                status = HttpStatus.SC_OK;
+                entity = new StringEntity("ready");
+            } else {
+                status = HttpStatus.SC_FORBIDDEN;
+            }
+        } catch (InterruptedException e) {
+            Log.e(TAG, "Interrupted while joining test server thread: " + e.toString());
+        } catch (UnsupportedEncodingException e) {
+            Log.e(TAG, "Unsupported encoding while writing response entity: " + e.toString());
+            entity = null;
+        }
+
+        BasicHttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_0, status, reason);
+        response.setEntity(entity);
+        return response;
+    }
+
+    /**
+     * Handles a POST request.
+     *
+     * This handles the /start command. It returns 403s for anything else.
+     *
+     * @param request The POST request to handle.
+     * @return The response to |request|.
+     */
+    @Override
+    protected HttpResponse handlePost(HttpEntityEnclosingRequest request) throws HttpException {
+        RequestLine requestLine = request.getRequestLine();
+        String uri = requestLine.getUri();
+
+        int status = HttpStatus.SC_INTERNAL_SERVER_ERROR;
+        String reason = "";
+        HttpEntity responseEntity = null;
+
+        if (COMMAND_START.equals(uri)) {
+            Log.i(TAG, "Received POST /start request.");
+            BufferedReader entityReader = null;
+            try {
+                HttpEntity requestEntity = request.getEntity();
+                if (requestEntity.getContentLength() > ARBITRARY_MAX_JSON_SIZE) {
+                    throw new HttpException("Request JSON too long ("
+                            + Long.toString(requestEntity.getContentLength()) + " bytes)");
+                }
+
+                entityReader = new BufferedReader(
+                        new InputStreamReader(new BufferedInputStream(requestEntity.getContent())));
+                StringBuilder rawJson = new StringBuilder();
+                for (String line = entityReader.readLine(); line != null;
+                        line = entityReader.readLine()) {
+                    rawJson.append(line);
+                }
+
+                mTestServer = new TestServerBuilder(new JSONObject(rawJson.toString())).build();
+                mTestServerThread = new Thread(mTestServer);
+                mTestServerThread.start();
+
+                status = HttpStatus.SC_OK;
+                JSONObject entityJson = new JSONObject();
+                entityJson.put("port", mTestServer.getServerPort());
+                entityJson.put("message", "started");
+                responseEntity = new StringEntity(entityJson.toString());
+            } catch (UnsupportedOperationException e) {
+                // TODO(jbudorick): Remove this catch block once TestServerFactory.createTestServer
+                // is fully implemented.
+                throw new HttpException("Error creating test server", e);
+            } catch (JSONException e) {
+                throw new HttpException("Error handling JSON", e);
+            } catch (UnsupportedEncodingException e) {
+                throw new HttpException("Error generating response", e);
+            } catch (IOException e) {
+                throw new HttpException("Error while reading HTTP entity", e);
+            } finally {
+                try {
+                    if (entityReader != null) entityReader.close();
+                } catch (IOException e) {
+                    Log.e(TAG, "Unable to close entity input stream", e);
+                }
+            }
+        } else {
+            status = HttpStatus.SC_FORBIDDEN;
+        }
+
+        BasicHttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_0, status, reason);
+        response.setEntity(responseEntity);
+        return response;
+    }
+}
diff --git a/net/test/python_utils.cc b/net/test/python_utils.cc
index 7e40fae..bd0e565 100644
--- a/net/test/python_utils.cc
+++ b/net/test/python_utils.cc
@@ -9,9 +9,12 @@
 #include "base/environment.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/path_service.h"
+#include "base/process/launch.h"
+#include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 
 const char kPythonPathEnv[] = "PYTHONPATH";
@@ -106,10 +109,40 @@
   return true;
 }
 
+#if defined(OS_WIN)
+struct PythonExePath {
+  PythonExePath() {
+    // This is test-only code, so CHECK with a subprocess invocation is ok.
+    base::CommandLine command(base::FilePath(FILE_PATH_LITERAL("cmd")));
+    command.AppendArg("/c");
+    command.AppendArg("python");
+    command.AppendArg("-c");
+    command.AppendArg("import sys; print sys.executable");
+    std::string output;
+    CHECK(GetAppOutput(command, &output));
+    // This does only work if cmd.exe doesn't use a non-US codepage.
+    path_ = base::ASCIIToUTF16(output);
+    TrimWhitespace(path_, base::TRIM_ALL, &path_);
+  }
+  base::string16 path_;
+};
+static base::LazyInstance<PythonExePath>::Leaky g_python_path;
+#endif
+
 bool GetPythonCommand(base::CommandLine* python_cmd) {
   DCHECK(python_cmd);
 
+#if defined(OS_WIN)
+  // Most developers have depot_tools in their path, which only has a
+  // python.bat, not a python.exe.  Go through cmd to find the path to
+  // the python executable.
+  // (Don't just return a a "cmd /c python" command line, because then tests
+  // that try to kill the python process will kill the cmd process instead,
+  // which can cause flakiness.)
+  python_cmd->SetProgram(base::FilePath(g_python_path.Get().path_));
+#else
   python_cmd->SetProgram(base::FilePath(FILE_PATH_LITERAL("python")));
+#endif
 
   // Launch python in unbuffered mode, so that python output doesn't mix with
   // gtest output in buildbot log files. See http://crbug.com/147368.
diff --git a/net/test/spawned_test_server/base_test_server.cc b/net/test/spawned_test_server/base_test_server.cc
index 0c586f2..de76eed 100644
--- a/net/test/spawned_test_server/base_test_server.cc
+++ b/net/test/spawned_test_server/base_test_server.cc
@@ -70,6 +70,8 @@
     values->Append(new base::StringValue("aes256"));
   if (cipher & BaseTestServer::SSLOptions::BULK_CIPHER_3DES)
     values->Append(new base::StringValue("3des"));
+  if (cipher & BaseTestServer::SSLOptions::BULK_CIPHER_AES128GCM)
+    values->Append(new base::StringValue("aes128gcm"));
 }
 
 base::StringValue* GetTLSIntoleranceType(
diff --git a/net/test/spawned_test_server/base_test_server.h b/net/test/spawned_test_server/base_test_server.h
index 73ac855..a43df11 100644
--- a/net/test/spawned_test_server/base_test_server.h
+++ b/net/test/spawned_test_server/base_test_server.h
@@ -90,16 +90,18 @@
     enum BulkCipher {
       // Special value used to indicate that any algorithm the server supports
       // is acceptable. Preferred over explicitly OR-ing all ciphers.
-      BULK_CIPHER_ANY    = 0,
+      BULK_CIPHER_ANY = 0,
 
-      BULK_CIPHER_RC4    = (1 << 0),
+      BULK_CIPHER_RC4 = (1 << 0),
       BULK_CIPHER_AES128 = (1 << 1),
       BULK_CIPHER_AES256 = (1 << 2),
 
       // NOTE: 3DES support in the Python test server has external
       // dependencies and not be available on all machines. Clients may not
       // be able to connect if only 3DES is specified.
-      BULK_CIPHER_3DES   = (1 << 3),
+      BULK_CIPHER_3DES = (1 << 3),
+
+      BULK_CIPHER_AES128GCM = (1 << 4),
     };
 
     // NOTE: the values of these enumerators are passed to the the Python test
diff --git a/net/test/test_certificate_data.h b/net/test/test_certificate_data.h
index 3ccda5e..b5346b4 100644
--- a/net/test/test_certificate_data.h
+++ b/net/test/test_certificate_data.h
@@ -9,22 +9,26 @@
     "\x15\x60\xde\x65\x4e\x03\x9f\xd0\x08\x82"
     "\xa9\x6a\xc4\x65\x8e\x6f\x92\x06\x84\x35";
 
-// kSatvedaSPKIs contains the SHA1 hashes of the SPKIs of the satveda.pem
+// kTwitterSPKIs contains the SHA1 hashes of the SPKIs of the twitter-chain.pem
 // certificate chain, in order.
-static const char kSatvedaSPKIs[2][21] = {
-  "\xd6\x2d\x7a\x12\x02\x7f\x9b\x8e\x4f\x2b"
-  "\x07\xc5\xfb\xf9\x2a\x2e\x9a\xcc\x0e\xe3",
-  "\xba\x2e\xb5\xa8\x3e\x13\x23\xd9\x53\x4b"
-  "\x5e\x65\xbc\xe7\xa3\x13\x5d\xd0\xa9\x96",
+static const char kTwitterSPKIs[3][21] = {
+    "\x26\x9a\x19\xa3\x88\x28\xc1\xdd\x70\x1b"
+    "\xa0\xca\x2c\x98\xdb\xc6\xe1\x4f\x37\x3e",
+    "\x47\x49\xdf\x16\x57\xf4\x6c\x8b\xd2\x8c"
+    "\x79\x1b\x99\xfb\x9f\x28\x81\x2a\x60\xe0",
+    "\xb1\x81\x08\x1a\x19\xa4\xc0\x94\x1f\xfa"
+    "\xe8\x95\x28\xc1\x24\xc9\x9b\x34\xac\xc7",
 };
 
-// kSatvedaSPKIsSHA256 contains the SHA256 hashes of the SPKIs of the
-// satveda.pem certificate chain, in order.
-static const char kSatvedaSPKIsSHA256[2][33] = {
-  "\xb9\x42\xab\xf2\x08\x63\xef\x81\x70\x88\x45\xc4\x39\xa2\x6e\x9c"
-  "\x2f\x9a\xf9\xf4\xcb\x23\x61\xd4\x83\x97\x61\x6d\xf2\x5b\x27\xa8",
-  "\x32\xb6\x4b\x66\x72\x7a\x20\x63\xe4\x06\x6f\x3b\x95\x8c\xb0\xaa"
-  "\xee\x57\x6a\x5e\xce\xfd\x95\x33\x99\xbb\x88\x74\x73\x1d\x95\x87",
+// kTwitterSPKIsSHA256 contains the SHA256 hashes of the SPKIs of the
+// twitter-chain.pem certificate chain, in order.
+static const char kTwitterSPKIsSHA256[3][33] = {
+    "\x20\xec\x5d\x0a\xfb\xc6\xc0\xe2\xe1\x95\x56\xc5\x35\x2b\x3c\x60"
+    "\x78\xa6\xed\x95\x55\xc2\xfa\x86\x82\x40\x4f\xdb\x55\x29\xd3\xad",
+    "\x80\xcc\x56\x3a\xb5\xf8\x3c\xc4\x1e\xb0\xaf\x6a\x14\xd6\xd8\x07"
+    "\x18\xc1\x7e\x35\x2f\x96\x49\xff\xbc\xdd\x67\xf8\xbf\x65\x13\x91",
+    "\x25\xb4\x1b\x50\x6e\x49\x30\x95\x28\x23\xa6\xeb\x9f\x1d\x31\xde"
+    "\xf6\x45\xea\x38\xa5\xc6\xc6\xa9\x6d\x71\x95\x7e\x38\x4d\xf0\x58",
 };
 
 // Certificates for test data. They're obtained with:
diff --git a/net/test/url_request/url_request_mock_http_job.cc b/net/test/url_request/url_request_mock_http_job.cc
index 1c6e35c..9e63c25 100644
--- a/net/test/url_request/url_request_mock_http_job.cc
+++ b/net/test/url_request/url_request_mock_http_job.cc
@@ -96,16 +96,29 @@
   return raw_headers;
 }
 
+// For a given file |path| and |scheme|, return the URL served by the
+// URlRequestMockHTTPJob.
+GURL GetMockUrlForScheme(const base::FilePath& path,
+                         const std::string& scheme) {
+  std::string url = scheme + "://" + kMockHostname + "/";
+  std::string path_str = path.MaybeAsASCII();
+  DCHECK(!path_str.empty());  // We only expect ASCII paths in tests.
+  url.append(path_str);
+  return GURL(url);
+}
+
 }  // namespace
 
 // static
-void URLRequestMockHTTPJob::AddUrlHandler(
+void URLRequestMockHTTPJob::AddUrlHandlers(
     const base::FilePath& base_path,
     const scoped_refptr<base::SequencedWorkerPool>& worker_pool) {
-  // Add kMockHostname to net::URLRequestFilter.
+  // Add kMockHostname to net::URLRequestFilter, for both HTTP and HTTPS.
   net::URLRequestFilter* filter = net::URLRequestFilter::GetInstance();
   filter->AddHostnameInterceptor(
       "http", kMockHostname, CreateInterceptor(base_path, worker_pool));
+  filter->AddHostnameInterceptor("https", kMockHostname,
+                                 CreateInterceptor(base_path, worker_pool));
 }
 
 // static
@@ -120,13 +133,12 @@
 
 // static
 GURL URLRequestMockHTTPJob::GetMockUrl(const base::FilePath& path) {
-  std::string url = "http://";
-  url.append(kMockHostname);
-  url.append("/");
-  std::string path_str = path.MaybeAsASCII();
-  DCHECK(!path_str.empty());  // We only expect ASCII paths in tests.
-  url.append(path_str);
-  return GURL(url);
+  return GetMockUrlForScheme(path, "http");
+}
+
+// static
+GURL URLRequestMockHTTPJob::GetMockHttpsUrl(const base::FilePath& path) {
+  return GetMockUrlForScheme(path, "https");
 }
 
 // static
diff --git a/net/test/url_request/url_request_mock_http_job.h b/net/test/url_request/url_request_mock_http_job.h
index 6eb3c72..6e454f4 100644
--- a/net/test/url_request/url_request_mock_http_job.h
+++ b/net/test/url_request/url_request_mock_http_job.h
@@ -49,8 +49,8 @@
   void GetResponseInfo(HttpResponseInfo* info) override;
   bool IsRedirectResponse(GURL* location, int* http_status_code) override;
 
-  // Adds the testing URLs to the URLRequestFilter.
-  static void AddUrlHandler(
+  // Adds the testing URLs to the URLRequestFilter, both under HTTP and HTTPS.
+  static void AddUrlHandlers(
       const base::FilePath& base_path,
       const scoped_refptr<base::SequencedWorkerPool>& worker_pool);
 
@@ -64,6 +64,7 @@
   // Given the path to a file relative to the path passed to AddUrlHandler(),
   // construct a mock URL.
   static GURL GetMockUrl(const base::FilePath& path);
+  static GURL GetMockHttpsUrl(const base::FilePath& path);
 
   // Given the path to a file relative to the path passed to AddUrlHandler(),
   // construct a mock URL that reports |net_error| at given |phase| of the
diff --git a/net/tools/testserver/testserver.py b/net/tools/testserver/testserver.py
index 3098cc0..9e8b0bb 100755
--- a/net/tools/testserver/testserver.py
+++ b/net/tools/testserver/testserver.py
@@ -2254,11 +2254,12 @@
     self.option_parser.add_option('--ssl-bulk-cipher', action='append',
                                   help='Specify the bulk encryption '
                                   'algorithm(s) that will be accepted by the '
-                                  'SSL server. Valid values are "aes256", '
-                                  '"aes128", "3des", "rc4". If omitted, all '
-                                  'algorithms will be used. This option may '
-                                  'appear multiple times, indicating '
-                                  'multiple algorithms should be enabled.');
+                                  'SSL server. Valid values are "aes128gcm", '
+                                  '"aes256", "aes128", "3des", "rc4". If '
+                                  'omitted, all algorithms will be used. This '
+                                  'option may appear multiple times, '
+                                  'indicating multiple algorithms should be '
+                                  'enabled.');
     self.option_parser.add_option('--ssl-key-exchange', action='append',
                                   help='Specify the key exchange algorithm(s)'
                                   'that will be accepted by the SSL server. '
diff --git a/net/udp/udp_socket_win.cc b/net/udp/udp_socket_win.cc
index 2f5549f..3c121b2 100644
--- a/net/udp/udp_socket_win.cc
+++ b/net/udp/udp_socket_win.cc
@@ -327,10 +327,10 @@
     SockaddrStorage storage;
     if (getpeername(socket_, storage.addr, &storage.addr_len))
       return MapSystemError(WSAGetLastError());
-    scoped_ptr<IPEndPoint> address(new IPEndPoint());
-    if (!address->FromSockAddr(storage.addr, storage.addr_len))
+    scoped_ptr<IPEndPoint> remote_address(new IPEndPoint());
+    if (!remote_address->FromSockAddr(storage.addr, storage.addr_len))
       return ERR_ADDRESS_INVALID;
-    remote_address_.reset(address.release());
+    remote_address_.reset(remote_address.release());
   }
 
   *address = *remote_address_;
@@ -348,10 +348,10 @@
     SockaddrStorage storage;
     if (getsockname(socket_, storage.addr, &storage.addr_len))
       return MapSystemError(WSAGetLastError());
-    scoped_ptr<IPEndPoint> address(new IPEndPoint());
-    if (!address->FromSockAddr(storage.addr, storage.addr_len))
+    scoped_ptr<IPEndPoint> local_address(new IPEndPoint());
+    if (!local_address->FromSockAddr(storage.addr, storage.addr_len))
       return ERR_ADDRESS_INVALID;
-    local_address_.reset(address.release());
+    local_address_.reset(local_address.release());
     net_log_.AddEvent(NetLog::TYPE_UDP_LOCAL_ADDRESS,
                       CreateNetLogUDPConnectCallback(local_address_.get()));
   }
diff --git a/net/url_request/sdch_dictionary_fetcher.cc b/net/url_request/sdch_dictionary_fetcher.cc
index b30f78a..3607bfd 100644
--- a/net/url_request/sdch_dictionary_fetcher.cc
+++ b/net/url_request/sdch_dictionary_fetcher.cc
@@ -13,18 +13,35 @@
 #include "base/thread_task_runner_handle.h"
 #include "net/base/io_buffer.h"
 #include "net/base/load_flags.h"
+#include "net/base/net_log.h"
 #include "net/base/sdch_net_log_params.h"
 #include "net/url_request/url_request_context.h"
 #include "net/url_request/url_request_status.h"
 #include "net/url_request/url_request_throttler_manager.h"
 
+namespace net {
+
 namespace {
 
 const int kBufferSize = 4096;
 
-}  // namespace
+// Map the bytes_read result from a read attempt and a URLRequest's
+// status into a single net return value.
+int GetReadResult(int bytes_read, const URLRequest* request) {
+  int rv = request->status().error();
+  if (request->status().is_success() && bytes_read < 0) {
+    rv = ERR_FAILED;
+    request->net_log().AddEventWithNetErrorCode(
+        NetLog::TYPE_SDCH_DICTIONARY_FETCH_IMPLIED_ERROR, rv);
+  }
 
-namespace net {
+  if (rv == OK)
+    rv = bytes_read;
+
+  return rv;
+}
+
+}  // namespace
 
 SdchDictionaryFetcher::SdchDictionaryFetcher(
     URLRequestContext* context,
@@ -65,7 +82,7 @@
   if (next_state_ != STATE_NONE)
     return;
 
-  next_state_ = STATE_IDLE;
+  next_state_ = STATE_SEND_REQUEST;
 
   // There are no callbacks to user code from the dictionary fetcher,
   // and Schedule() is only called from user code, so this call to DoLoop()
@@ -95,16 +112,8 @@
 
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(request, current_request_.get());
-  DCHECK_EQ(next_state_, STATE_REQUEST_STARTED);
-
-  // The response has started, so the stream can be read from.
-  next_state_ = STATE_REQUEST_READING;
-
-  // If this function was synchronously called, the containing
-  // state machine loop will handle the state transition. Otherwise,
-  // restart the state machine loop.
-  if (in_loop_)
-    return;
+  DCHECK_EQ(next_state_, STATE_SEND_REQUEST_COMPLETE);
+  DCHECK(!in_loop_);
 
   DoLoop(request->status().error());
 }
@@ -118,21 +127,10 @@
 
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(request, current_request_.get());
-  DCHECK_EQ(next_state_, STATE_REQUEST_READING);
+  DCHECK_EQ(next_state_, STATE_READ_BODY_COMPLETE);
+  DCHECK(!in_loop_);
 
-  // No state transition is required in this function; the
-  // completion of the request is detected in DoRead().
-
-  if (request->status().is_success())
-    dictionary_.append(buffer_->data(), bytes_read);
-
-  // If this function was synchronously called, the containing
-  // state machine loop will handle the state transition. Otherwise,
-  // restart the state machine loop.
-  if (in_loop_)
-    return;
-
-  DoLoop(request->status().error());
+  DoLoop(GetReadResult(bytes_read, current_request_.get()));
 }
 
 int SdchDictionaryFetcher::DoLoop(int rv) {
@@ -143,14 +141,17 @@
     State state = next_state_;
     next_state_ = STATE_NONE;
     switch (state) {
-      case STATE_IDLE:
-        rv = DoDispatchRequest(rv);
+      case STATE_SEND_REQUEST:
+        rv = DoSendRequest(rv);
         break;
-      case STATE_REQUEST_STARTED:
-        rv = DoRequestStarted(rv);
+      case STATE_SEND_REQUEST_COMPLETE:
+        rv = DoSendRequestComplete(rv);
         break;
-      case STATE_REQUEST_READING:
-        rv = DoRead(rv);
+      case STATE_READ_BODY:
+        rv = DoReadBody(rv);
+        break;
+      case STATE_READ_BODY_COMPLETE:
+        rv = DoReadBodyComplete(rv);
         break;
       case STATE_REQUEST_COMPLETE:
         rv = DoCompleteRequest(rv);
@@ -163,7 +164,7 @@
   return rv;
 }
 
-int SdchDictionaryFetcher::DoDispatchRequest(int rv) {
+int SdchDictionaryFetcher::DoSendRequest(int rv) {
   DCHECK(CalledOnValidThread());
 
   // |rv| is ignored, as the result from the previous request doesn't
@@ -174,6 +175,8 @@
     return OK;
   }
 
+  next_state_ = STATE_SEND_REQUEST_COMPLETE;
+
   current_request_ =
       context_->CreateRequest(fetch_queue_.front(), IDLE, this, NULL);
   current_request_->SetLoadFlags(LOAD_DO_NOT_SEND_COOKIES |
@@ -181,82 +184,88 @@
   buffer_ = new IOBuffer(kBufferSize);
   fetch_queue_.pop();
 
-  next_state_ = STATE_REQUEST_STARTED;
   current_request_->Start();
   current_request_->net_log().AddEvent(NetLog::TYPE_SDCH_DICTIONARY_FETCH);
 
-  return OK;
-}
-
-int SdchDictionaryFetcher::DoRequestStarted(int rv) {
-  DCHECK(CalledOnValidThread());
-  DCHECK_EQ(rv, OK);  // Can only come straight from above function.
-
-  // The transition to STATE_REQUEST_READING occurs in the
-  // OnResponseStarted() callback triggered by URLRequest::Start()
-  // (called in DoDispatchRequest(), above). If that callback did not
-  // occur synchronously, this routine is executed; it returns ERR_IO_PENDING,
-  // indicating to the controlling loop that no further work should be done
-  // until the callback occurs (which will re-invoke DoLoop()).
-  next_state_ = STATE_REQUEST_STARTED;
   return ERR_IO_PENDING;
 }
 
-int SdchDictionaryFetcher::DoRead(int rv) {
+int SdchDictionaryFetcher::DoSendRequestComplete(int rv) {
   DCHECK(CalledOnValidThread());
 
   // If there's been an error, abort the current request.
   if (rv != OK) {
     current_request_.reset();
     buffer_ = NULL;
-    next_state_ = STATE_IDLE;
+    next_state_ = STATE_SEND_REQUEST;
 
     return OK;
   }
 
-  next_state_ = STATE_REQUEST_READING;
+  next_state_ = STATE_READ_BODY;
+  return OK;
+}
+
+int SdchDictionaryFetcher::DoReadBody(int rv) {
+  DCHECK(CalledOnValidThread());
+
+  // If there's been an error, abort the current request.
+  if (rv != OK) {
+    current_request_.reset();
+    buffer_ = NULL;
+    next_state_ = STATE_SEND_REQUEST;
+
+    return OK;
+  }
+
+  next_state_ = STATE_READ_BODY_COMPLETE;
   int bytes_read = 0;
   current_request_->Read(buffer_.get(), kBufferSize, &bytes_read);
   if (current_request_->status().is_io_pending())
     return ERR_IO_PENDING;
 
-  if (bytes_read < 0 || !current_request_->status().is_success()) {
-    if (current_request_->status().error() != OK)
-      return current_request_->status().error();
+  return GetReadResult(bytes_read, current_request_.get());
+}
 
-    // An error with request status of OK should not happen,
-    // but there's enough machinery underneath URLRequest::Read()
-    // that this routine checks for that case.
-    net::Error error =
-        current_request_->status().status() == URLRequestStatus::CANCELED ?
-        ERR_ABORTED : ERR_FAILED;
-    current_request_->net_log().AddEventWithNetErrorCode(
-        NetLog::TYPE_SDCH_DICTIONARY_FETCH_IMPLIED_ERROR, error);
-    return error;
+int SdchDictionaryFetcher::DoReadBodyComplete(int rv) {
+  DCHECK(CalledOnValidThread());
+
+  // An error; abort the current request.
+  if (rv < 0) {
+    current_request_.reset();
+    buffer_ = NULL;
+    next_state_ = STATE_SEND_REQUEST;
+    return OK;
   }
 
-  if (bytes_read == 0)
-    next_state_ = STATE_REQUEST_COMPLETE;
-  else
-    dictionary_.append(buffer_->data(), bytes_read);
+  DCHECK(current_request_->status().is_success());
 
+  // Data; append to the dictionary and look for more data.
+  if (rv > 0) {
+    dictionary_.append(buffer_->data(), rv);
+    next_state_ = STATE_READ_BODY;
+    return OK;
+  }
+
+  // End of file; complete the request.
+  next_state_ = STATE_REQUEST_COMPLETE;
   return OK;
 }
 
 int SdchDictionaryFetcher::DoCompleteRequest(int rv) {
   DCHECK(CalledOnValidThread());
 
-  // If the dictionary was successfully fetched, add it to the manager.
-  if (rv == OK) {
-    dictionary_fetched_callback_.Run(dictionary_, current_request_->url(),
-                                     current_request_->net_log());
-  }
+  // DoReadBodyComplete() only transitions to this state
+  // on success.
+  DCHECK_EQ(OK, rv);
 
+  dictionary_fetched_callback_.Run(dictionary_, current_request_->url(),
+                                   current_request_->net_log());
   current_request_.reset();
   buffer_ = NULL;
   dictionary_.clear();
 
-  next_state_ = STATE_IDLE;
+  next_state_ = STATE_SEND_REQUEST;
 
   return OK;
 }
diff --git a/net/url_request/sdch_dictionary_fetcher.h b/net/url_request/sdch_dictionary_fetcher.h
index 79d8778..4ca2503 100644
--- a/net/url_request/sdch_dictionary_fetcher.h
+++ b/net/url_request/sdch_dictionary_fetcher.h
@@ -15,15 +15,19 @@
 #include <set>
 #include <string>
 
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/threading/non_thread_safe.h"
 #include "net/base/sdch_manager.h"
 #include "net/url_request/url_fetcher_delegate.h"
 #include "net/url_request/url_request.h"
+#include "url/gurl.h"
 
 namespace net {
 
+class BoundNetLog;
 class URLRequest;
 class URLRequestThrottlerEntryInterface;
 
@@ -61,17 +65,19 @@
  private:
   enum State {
     STATE_NONE,
-    STATE_IDLE,
-    STATE_REQUEST_STARTED,
-    STATE_REQUEST_READING,
+    STATE_SEND_REQUEST,
+    STATE_SEND_REQUEST_COMPLETE,
+    STATE_READ_BODY,
+    STATE_READ_BODY_COMPLETE,
     STATE_REQUEST_COMPLETE,
   };
 
   // State machine implementation.
   int DoLoop(int rv);
-  int DoDispatchRequest(int rv);
-  int DoRequestStarted(int rv);
-  int DoRead(int rv);
+  int DoSendRequest(int rv);
+  int DoSendRequestComplete(int rv);
+  int DoReadBody(int rv);
+  int DoReadBodyComplete(int rv);
   int DoCompleteRequest(int rv);
 
   State next_state_;
diff --git a/net/url_request/sdch_dictionary_fetcher_unittest.cc b/net/url_request/sdch_dictionary_fetcher_unittest.cc
index 460fc5c..1826ddb 100644
--- a/net/url_request/sdch_dictionary_fetcher_unittest.cc
+++ b/net/url_request/sdch_dictionary_fetcher_unittest.cc
@@ -17,7 +17,6 @@
 #include "net/url_request/url_request_interceptor.h"
 #include "net/url_request/url_request_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "url/gurl.h"
 
 namespace net {
 
diff --git a/net/url_request/url_request_simple_job.cc b/net/url_request/url_request_simple_job.cc
index b50bbc8..46d9c38 100644
--- a/net/url_request/url_request_simple_job.cc
+++ b/net/url_request/url_request_simple_job.cc
@@ -10,7 +10,6 @@
 #include "base/compiler_specific.h"
 #include "base/memory/ref_counted_memory.h"
 #include "base/message_loop/message_loop.h"
-#include "base/profiler/scoped_tracker.h"
 #include "base/threading/worker_pool.h"
 #include "net/base/io_buffer.h"
 #include "net/base/net_errors.h"
@@ -26,10 +25,6 @@
               int buf_size,
               const scoped_refptr<base::RefCountedMemory>& data,
               int64 data_offset) {
-  // TODO(vadimt): Remove ScopedTracker below once crbug.com/422489 is fixed.
-  tracked_objects::ScopedTracker tracking_profile(
-      FROM_HERE_WITH_EXPLICIT_FUNCTION("422489 CopyData"));
-
   memcpy(buf->data(), data->front() + data_offset, buf_size);
 }
 
@@ -65,11 +60,6 @@
 
 bool URLRequestSimpleJob::ReadRawData(IOBuffer* buf, int buf_size,
                                       int* bytes_read) {
-  // TODO(vadimt): Remove ScopedTracker below once crbug.com/422489 is fixed.
-  tracked_objects::ScopedTracker tracking_profile(
-      FROM_HERE_WITH_EXPLICIT_FUNCTION(
-          "422489 URLRequestSimpleJob::ReadRawData"));
-
   DCHECK(bytes_read);
   buf_size = static_cast<int>(
       std::min(static_cast<int64>(buf_size),
@@ -124,11 +114,6 @@
     return;
 
   if (ranges().size() > 1) {
-    // TODO(vadimt): Remove ScopedTracker below once crbug.com/422489 is fixed.
-    tracked_objects::ScopedTracker tracking_profile(
-        FROM_HERE_WITH_EXPLICIT_FUNCTION(
-            "422489 URLRequestSimpleJob::StartAsync 1"));
-
     NotifyDone(URLRequestStatus(URLRequestStatus::FAILED,
                                 ERR_REQUEST_RANGE_NOT_SATISFIABLE));
     return;
@@ -137,36 +122,16 @@
   if (!ranges().empty() && range_parse_result() == OK)
     byte_range_ = ranges().front();
 
-  int result;
-  {
-    // TODO(vadimt): Remove ScopedTracker below once crbug.com/422489 is fixed.
-    // Remove the block and assign 'result' in its declaration.
-    tracked_objects::ScopedTracker tracking_profile(
-        FROM_HERE_WITH_EXPLICIT_FUNCTION(
-            "422489 URLRequestSimpleJob::StartAsync 2"));
+  const int result =
+      GetRefCountedData(&mime_type_, &charset_, &data_,
+                        base::Bind(&URLRequestSimpleJob::OnGetDataCompleted,
+                                   weak_factory_.GetWeakPtr()));
 
-    result =
-        GetRefCountedData(&mime_type_, &charset_, &data_,
-                          base::Bind(&URLRequestSimpleJob::OnGetDataCompleted,
-                                     weak_factory_.GetWeakPtr()));
-  }
-
-  if (result != ERR_IO_PENDING) {
-    // TODO(vadimt): Remove ScopedTracker below once crbug.com/422489 is fixed.
-    tracked_objects::ScopedTracker tracking_profile(
-        FROM_HERE_WITH_EXPLICIT_FUNCTION(
-            "422489 URLRequestSimpleJob::StartAsync 3"));
-
+  if (result != ERR_IO_PENDING)
     OnGetDataCompleted(result);
-  }
 }
 
 void URLRequestSimpleJob::OnGetDataCompleted(int result) {
-  // TODO(vadimt): Remove ScopedTracker below once crbug.com/422489 is fixed.
-  tracked_objects::ScopedTracker tracking_profile(
-      FROM_HERE_WITH_EXPLICIT_FUNCTION(
-          "422489 URLRequestSimpleJob::OnGetDataCompleted"));
-
   if (result == OK) {
     // Notify that the headers are complete
     if (!byte_range_.ComputeBounds(data_->size())) {
diff --git a/net/websockets/websocket_basic_handshake_stream.cc b/net/websockets/websocket_basic_handshake_stream.cc
index c0f20c7..7d99311 100644
--- a/net/websockets/websocket_basic_handshake_stream.cc
+++ b/net/websockets/websocket_basic_handshake_stream.cc
@@ -50,6 +50,8 @@
 
 namespace {
 
+const char kConnectionErrorStatusLine[] = "HTTP/1.1 503 Connection Error";
+
 // TODO(yhirano): Remove these functions once http://crbug.com/399535 is fixed.
 NOINLINE void RunCallbackWithOk(const CompletionCallback& callback,
                                 int result) {
@@ -654,6 +656,16 @@
     set_failure_message(std::string("Error during WebSocket handshake: ") +
                         ErrorToString(rv));
     OnFinishOpeningHandshake();
+    // Some error codes (for example ERR_CONNECTION_CLOSED) get changed to OK at
+    // higher levels. To prevent an unvalidated connection getting erroneously
+    // upgraded, don't pass through the status code unchanged if it is
+    // HTTP_SWITCHING_PROTOCOLS.
+    if (http_response_info_->headers &&
+        http_response_info_->headers->response_code() ==
+            HTTP_SWITCHING_PROTOCOLS) {
+      http_response_info_->headers->ReplaceStatusLine(
+          kConnectionErrorStatusLine);
+    }
     return rv;
   }
 }
diff --git a/net/websockets/websocket_end_to_end_test.cc b/net/websockets/websocket_end_to_end_test.cc
index 0b5944f..4aa2f1c 100644
--- a/net/websockets/websocket_end_to_end_test.cc
+++ b/net/websockets/websocket_end_to_end_test.cc
@@ -365,6 +365,19 @@
   EXPECT_TRUE(info.proxy_info.is_http());
 }
 
+// This is a regression test for crbug.com/408061 Crash in
+// net::WebSocketBasicHandshakeStream::Upgrade.
+TEST_F(WebSocketEndToEndTest, DISABLED_ON_ANDROID(TruncatedResponse)) {
+  SpawnedTestServer ws_server(SpawnedTestServer::TYPE_WS,
+                              SpawnedTestServer::kLocalhost,
+                              GetWebSocketTestDataDirectory());
+  ASSERT_TRUE(ws_server.Start());
+  InitialiseContext();
+
+  GURL ws_url = ws_server.GetURL("truncated-headers");
+  EXPECT_FALSE(ConnectAndWait(ws_url));
+}
+
 }  // namespace
 
 }  // namespace net
diff --git a/net/websockets/websocket_stream_test.cc b/net/websockets/websocket_stream_test.cc
index 0fdc34b..713af37 100644
--- a/net/websockets/websocket_stream_test.cc
+++ b/net/websockets/websocket_stream_test.cc
@@ -1388,5 +1388,29 @@
   EXPECT_EQ(0, samples->GetCount(FAILED));
 }
 
+TEST_F(WebSocketStreamCreateTest, HandleErrConnectionClosed) {
+  static const char kTruncatedResponse[] =
+      "HTTP/1.1 101 Switching Protocols\r\n"
+      "Upgrade: websocket\r\n"
+      "Connection: Upgrade\r\n"
+      "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n"
+      "Cache-Control: no-sto";
+
+  std::string request =
+      WebSocketStandardRequest("/", "localhost", "http://localhost", "");
+  MockRead reads[] = {
+      MockRead(SYNCHRONOUS, 1, kTruncatedResponse),
+      MockRead(SYNCHRONOUS, ERR_CONNECTION_CLOSED, 2),
+  };
+  MockWrite writes[] = {MockWrite(SYNCHRONOUS, 0, request.c_str())};
+  scoped_ptr<DeterministicSocketData> socket_data(
+      BuildSocketData(reads, writes));
+  socket_data->set_connect_data(MockConnect(SYNCHRONOUS, OK));
+  CreateAndConnectRawExpectations("ws://localhost/", NoSubProtocols(),
+                                  "http://localhost", socket_data.Pass());
+  RunUntilIdle();
+  EXPECT_TRUE(has_failed());
+}
+
 }  // namespace
 }  // namespace net
diff --git a/sandbox/linux/BUILD.gn b/sandbox/linux/BUILD.gn
index 120b4b7..96df5fd 100644
--- a/sandbox/linux/BUILD.gn
+++ b/sandbox/linux/BUILD.gn
@@ -114,6 +114,7 @@
   if (compile_credentials) {
     sources += [
       "services/credentials_unittest.cc",
+      "services/namespace_sandbox_unittest.cc",
       "services/namespace_utils_unittest.cc",
       "services/proc_util_unittest.cc",
       "services/unix_domain_socket_unittest.cc",
@@ -255,6 +256,8 @@
     sources += [
       "services/credentials.cc",
       "services/credentials.h",
+      "services/namespace_sandbox.cc",
+      "services/namespace_sandbox.h",
       "services/namespace_utils.cc",
       "services/namespace_utils.h",
       "services/proc_util.cc",
diff --git a/sandbox/linux/sandbox_linux.gypi b/sandbox/linux/sandbox_linux.gypi
index d5b2608..15bd71c 100644
--- a/sandbox/linux/sandbox_linux.gypi
+++ b/sandbox/linux/sandbox_linux.gypi
@@ -254,6 +254,8 @@
           'sources': [
             'services/credentials.cc',
             'services/credentials.h',
+            'services/namespace_sandbox.cc',
+            'services/namespace_sandbox.h',
             'services/namespace_utils.cc',
             'services/namespace_utils.h',
             'services/proc_util.cc',
diff --git a/sandbox/linux/sandbox_linux_test_sources.gypi b/sandbox/linux/sandbox_linux_test_sources.gypi
index 42e9598..61517cc 100644
--- a/sandbox/linux/sandbox_linux_test_sources.gypi
+++ b/sandbox/linux/sandbox_linux_test_sources.gypi
@@ -54,6 +54,7 @@
     [ 'compile_credentials==1', {
       'sources': [
         'services/credentials_unittest.cc',
+        'services/namespace_sandbox_unittest.cc',
         'services/namespace_utils_unittest.cc',
         'services/proc_util_unittest.cc',
         'services/unix_domain_socket_unittest.cc',
diff --git a/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc b/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
index 214b99c..afa74cb 100644
--- a/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
+++ b/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
@@ -109,6 +109,11 @@
     return Allow();
   }
 
+  // Used when RSS limiting is enabled in sanitizers.
+  if (sysno == __NR_getrusage) {
+    return RestrictGetrusage();
+  }
+
   if (sysno == __NR_sigaltstack) {
     // Required for better stack overflow detection in ASan. Disallowed in
     // non-ASan builds.
diff --git a/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc b/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
index 42d98bb..64a6bb0 100644
--- a/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
+++ b/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
@@ -304,4 +304,9 @@
   return If(pid == 0 || pid == target_pid, Allow()).Else(CrashSIGSYS());
 }
 
+ResultExpr RestrictGetrusage() {
+  const Arg<int> who(0);
+  return If(who == RUSAGE_SELF, Allow()).Else(CrashSIGSYS());
+}
+
 }  // namespace sandbox.
diff --git a/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h b/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h
index 8bde616..d557c5f 100644
--- a/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h
+++ b/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h
@@ -91,6 +91,10 @@
 // or target_pid.
 SANDBOX_EXPORT bpf_dsl::ResultExpr RestrictPrlimit64(pid_t target_pid);
 
+// Restricts the |who| argument of getrusage to RUSAGE_SELF (meaning the calling
+// process).
+SANDBOX_EXPORT bpf_dsl::ResultExpr RestrictGetrusage();
+
 }  // namespace sandbox.
 
 #endif  // SANDBOX_LINUX_SECCOMP_BPF_HELPERS_SYSCALL_PARAMETERS_RESTRICTIONS_H_
diff --git a/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions_unittests.cc b/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions_unittests.cc
index b76b8e1..e374ed2 100644
--- a/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions_unittests.cc
+++ b/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions_unittests.cc
@@ -240,6 +240,34 @@
   sys_prlimit64(kInitPID, RLIMIT_AS, NULL, NULL);
 }
 
+class RestrictGetrusagePolicy : public bpf_dsl::Policy {
+ public:
+  RestrictGetrusagePolicy() {}
+  ~RestrictGetrusagePolicy() override {}
+
+  ResultExpr EvaluateSyscall(int sysno) const override {
+    switch (sysno) {
+      case __NR_getrusage:
+        return RestrictGetrusage();
+      default:
+        return Allow();
+    }
+  }
+};
+
+BPF_TEST_C(ParameterRestrictions, getrusage_allowed, RestrictGetrusagePolicy) {
+  struct rusage usage;
+  BPF_ASSERT_EQ(0, getrusage(RUSAGE_SELF, &usage));
+}
+
+BPF_DEATH_TEST_C(ParameterRestrictions,
+                 getrusage_crash_not_self,
+                 DEATH_SEGV_MESSAGE(sandbox::GetErrorMessageContentForTests()),
+                 RestrictGetrusagePolicy) {
+  struct rusage usage;
+  getrusage(RUSAGE_CHILDREN, &usage);
+}
+
 }  // namespace
 
 }  // namespace sandbox
diff --git a/sandbox/linux/services/credentials_unittest.cc b/sandbox/linux/services/credentials_unittest.cc
index eb0ff83..1209fdf 100644
--- a/sandbox/linux/services/credentials_unittest.cc
+++ b/sandbox/linux/services/credentials_unittest.cc
@@ -130,7 +130,8 @@
   ASSERT_TRUE(WorkingDirectoryIsRoot());
 }
 
-SANDBOX_TEST(Credentials, DISABLE_ON_LSAN(DropFileSystemAccessIsSafe)) {
+// Disabled on ASAN because of crbug.com/451603.
+SANDBOX_TEST(Credentials, DISABLE_ON_ASAN(DropFileSystemAccessIsSafe)) {
   CHECK(Credentials::DropAllCapabilities());
   // Probably missing kernel support.
   if (!Credentials::MoveToNewUserNS()) return;
@@ -145,7 +146,7 @@
 
 // Check that after dropping filesystem access and dropping privileges
 // it is not possible to regain capabilities.
-SANDBOX_TEST(Credentials, DISABLE_ON_LSAN(CannotRegainPrivileges)) {
+SANDBOX_TEST(Credentials, DISABLE_ON_ASAN(CannotRegainPrivileges)) {
   CHECK(Credentials::DropAllCapabilities());
   // Probably missing kernel support.
   if (!Credentials::MoveToNewUserNS()) return;
diff --git a/sandbox/linux/services/namespace_sandbox.cc b/sandbox/linux/services/namespace_sandbox.cc
new file mode 100644
index 0000000..559b93c
--- /dev/null
+++ b/sandbox/linux/services/namespace_sandbox.cc
@@ -0,0 +1,112 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "sandbox/linux/services/namespace_sandbox.h"
+
+#include <sched.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <string>
+#include <utility>
+
+#include "base/command_line.h"
+#include "base/environment.h"
+#include "base/files/scoped_file.h"
+#include "base/logging.h"
+#include "base/posix/eintr_wrapper.h"
+#include "base/process/launch.h"
+#include "base/process/process.h"
+#include "sandbox/linux/services/namespace_utils.h"
+
+namespace sandbox {
+
+namespace {
+
+class WriteUidGidMapDelegate : public base::LaunchOptions::PreExecDelegate {
+ public:
+  WriteUidGidMapDelegate() : uid_(getuid()), gid_(getgid()) {}
+
+  ~WriteUidGidMapDelegate() override {}
+
+  void RunAsyncSafe() override {
+    RAW_CHECK(NamespaceUtils::WriteToIdMapFile("/proc/self/uid_map", uid_));
+    RAW_CHECK(NamespaceUtils::WriteToIdMapFile("/proc/self/gid_map", gid_));
+  }
+
+ private:
+  uid_t uid_;
+  gid_t gid_;
+  DISALLOW_COPY_AND_ASSIGN(WriteUidGidMapDelegate);
+};
+
+void SetEnvironForNamespaceType(base::EnvironmentMap* environ,
+                                base::NativeEnvironmentString env_var,
+                                bool value) {
+  // An empty string causes the env var to be unset in the child process.
+  (*environ)[env_var] = value ? "1" : "";
+}
+
+const char kSandboxUSERNSEnvironmentVarName[] = "SBX_USER_NS";
+const char kSandboxPIDNSEnvironmentVarName[] = "SBX_PID_NS";
+const char kSandboxNETNSEnvironmentVarName[] = "SBX_NET_NS";
+
+}  // namespace
+
+// static
+base::Process NamespaceSandbox::LaunchProcess(
+    const base::CommandLine& cmdline,
+    const base::LaunchOptions& options) {
+  int clone_flags = 0;
+  int ns_types[] = {CLONE_NEWUSER, CLONE_NEWPID, CLONE_NEWNET};
+  for (const int ns_type : ns_types) {
+    if (NamespaceUtils::KernelSupportsUnprivilegedNamespace(ns_type)) {
+      clone_flags |= ns_type;
+    }
+  }
+  CHECK(clone_flags & CLONE_NEWUSER);
+
+  // These fields may not be set by the caller.
+  CHECK(options.pre_exec_delegate == nullptr);
+  CHECK_EQ(0, options.clone_flags);
+
+  WriteUidGidMapDelegate write_uid_gid_map_delegate;
+
+  base::LaunchOptions launch_options = options;
+  launch_options.pre_exec_delegate = &write_uid_gid_map_delegate;
+  launch_options.clone_flags = clone_flags;
+
+  const std::pair<int, const char*> clone_flag_environ[] = {
+      std::make_pair(CLONE_NEWUSER, kSandboxUSERNSEnvironmentVarName),
+      std::make_pair(CLONE_NEWPID, kSandboxPIDNSEnvironmentVarName),
+      std::make_pair(CLONE_NEWNET, kSandboxNETNSEnvironmentVarName),
+  };
+
+  base::EnvironmentMap* environ = &launch_options.environ;
+  for (const auto& entry : clone_flag_environ) {
+    const int flag = entry.first;
+    const char* environ_name = entry.second;
+    SetEnvironForNamespaceType(environ, environ_name, clone_flags & flag);
+  }
+
+  return base::LaunchProcess(cmdline, launch_options);
+}
+
+// static
+bool NamespaceSandbox::InNewUserNamespace() {
+  return getenv(kSandboxUSERNSEnvironmentVarName) != nullptr;
+}
+
+// static
+bool NamespaceSandbox::InNewPidNamespace() {
+  return getenv(kSandboxPIDNSEnvironmentVarName) != nullptr;
+}
+
+// static
+bool NamespaceSandbox::InNewNetNamespace() {
+  return getenv(kSandboxNETNSEnvironmentVarName) != nullptr;
+}
+
+}  // namespace sandbox
diff --git a/sandbox/linux/services/namespace_sandbox.h b/sandbox/linux/services/namespace_sandbox.h
new file mode 100644
index 0000000..ddc4dee
--- /dev/null
+++ b/sandbox/linux/services/namespace_sandbox.h
@@ -0,0 +1,58 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SANDBOX_LINUX_SERVICES_NAMESPACE_SANDBOX_H_
+#define SANDBOX_LINUX_SERVICES_NAMESPACE_SANDBOX_H_
+
+#include "base/command_line.h"
+#include "base/macros.h"
+#include "base/process/launch.h"
+#include "base/process/process.h"
+#include "sandbox/sandbox_export.h"
+
+namespace sandbox {
+
+// Helper class for starting a process inside a new user, PID, and network
+// namespace. Before using a namespace sandbox, check for namespaces support
+// using Credentials::CanCreateProcessInNewUserNS.
+//
+// A typical use for "A" launching a sandboxed process "B" would be:
+// 1. A sets up a command line and launch options for process B.
+// 2. A launches B with LaunchProcess.
+// 3. B should be prepared to assume the role of init(1). In particular, apart
+//    from SIGKILL and SIGSTOP, B cannot receive any signal for which it does
+//    not have an explicit signal handler registered.
+//    If B dies, all the processes in the namespace will die.
+//    B can fork() and the parent can assume the role of init(1), by using
+//    CreateInitProcessReaper().
+// 4. B chroots using Credentials::MoveToNewUserNS() and
+//    Credentials::DropFileSystemAccess()
+// 5. B drops capabilities gained by entering the new user namespace with
+//    Credentials::DropAllCapabilities().
+class SANDBOX_EXPORT NamespaceSandbox {
+ public:
+  // Launch a new process inside its own user/PID/network namespaces (depending
+  // on kernel support). Requires at a minimum that user namespaces are
+  // supported (use Credentials::CanCreateProcessInNewUserNS to check this).
+  //
+  // pre_exec_delegate and clone_flags fields of LaunchOptions should be nullptr
+  // and 0, respectively, since this function makes a copy of options and
+  // overrides them.
+  static base::Process LaunchProcess(const base::CommandLine& cmdline,
+                                     const base::LaunchOptions& options);
+
+  // Returns whether the namespace sandbox created a new user, PID, and network
+  // namespace. In particular, InNewUserNamespace should return true iff the
+  // process was started via this class.
+  static bool InNewUserNamespace();
+  static bool InNewPidNamespace();
+  static bool InNewNetNamespace();
+
+ private:
+  DISALLOW_IMPLICIT_CONSTRUCTORS(NamespaceSandbox);
+};
+
+}  // namespace sandbox
+
+#endif  // SANDBOX_LINUX_SERVICES_NAMESPACE_SANDBOX_H_
diff --git a/sandbox/linux/services/namespace_sandbox_unittest.cc b/sandbox/linux/services/namespace_sandbox_unittest.cc
new file mode 100644
index 0000000..ace1f92
--- /dev/null
+++ b/sandbox/linux/services/namespace_sandbox_unittest.cc
@@ -0,0 +1,121 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "sandbox/linux/services/namespace_sandbox.h"
+
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include <string>
+#include <utility>
+
+#include "base/command_line.h"
+#include "base/files/file_enumerator.h"
+#include "base/files/file_path.h"
+#include "base/logging.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/process/launch.h"
+#include "base/process/process.h"
+#include "base/test/multiprocess_test.h"
+#include "sandbox/linux/services/credentials.h"
+#include "sandbox/linux/services/namespace_utils.h"
+#include "sandbox/linux/tests/unit_tests.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/multiprocess_func_list.h"
+
+namespace sandbox {
+
+namespace {
+
+bool RootDirectoryIsEmpty() {
+  base::FilePath root("/");
+  int file_type =
+      base::FileEnumerator::DIRECTORIES | base::FileEnumerator::FILES;
+  base::FileEnumerator enumerator_before(root, false, file_type);
+  return enumerator_before.Next().empty();
+}
+
+class NamespaceSandboxTest : public base::MultiProcessTest {
+ public:
+  void TestProc(const std::string& procname) {
+    if (!Credentials::CanCreateProcessInNewUserNS()) {
+      return;
+    }
+
+    base::FileHandleMappingVector fds_to_remap = {
+        std::make_pair(STDOUT_FILENO, STDOUT_FILENO),
+        std::make_pair(STDERR_FILENO, STDERR_FILENO),
+    };
+    base::LaunchOptions launch_options;
+    launch_options.fds_to_remap = &fds_to_remap;
+
+    base::Process process =
+        NamespaceSandbox::LaunchProcess(MakeCmdLine(procname), launch_options);
+    ASSERT_TRUE(process.IsValid());
+
+    const int kDummyExitCode = 42;
+    int exit_code = kDummyExitCode;
+    EXPECT_TRUE(process.WaitForExit(&exit_code));
+    EXPECT_EQ(0, exit_code);
+  }
+};
+
+MULTIPROCESS_TEST_MAIN(SimpleChildProcess) {
+  scoped_ptr<base::Environment> env(base::Environment::Create());
+  bool in_user_ns = NamespaceSandbox::InNewUserNamespace();
+  bool in_pid_ns = NamespaceSandbox::InNewPidNamespace();
+  bool in_net_ns = NamespaceSandbox::InNewNetNamespace();
+  CHECK(in_user_ns);
+  CHECK_EQ(in_pid_ns,
+           NamespaceUtils::KernelSupportsUnprivilegedNamespace(CLONE_NEWPID));
+  CHECK_EQ(in_net_ns,
+           NamespaceUtils::KernelSupportsUnprivilegedNamespace(CLONE_NEWNET));
+  if (in_pid_ns) {
+    CHECK_EQ(1, getpid());
+  }
+  return 0;
+}
+
+TEST_F(NamespaceSandboxTest, BasicUsage) {
+  TestProc("SimpleChildProcess");
+}
+
+MULTIPROCESS_TEST_MAIN(ChrootMe) {
+  CHECK(!RootDirectoryIsEmpty());
+  CHECK(sandbox::Credentials::MoveToNewUserNS());
+  CHECK(sandbox::Credentials::DropFileSystemAccess());
+  CHECK(RootDirectoryIsEmpty());
+  return 0;
+}
+
+TEST_F(NamespaceSandboxTest, ChrootAndDropCapabilities) {
+  TestProc("ChrootMe");
+}
+
+MULTIPROCESS_TEST_MAIN(NestedNamespaceSandbox) {
+  base::FileHandleMappingVector fds_to_remap = {
+      std::make_pair(STDOUT_FILENO, STDOUT_FILENO),
+      std::make_pair(STDERR_FILENO, STDERR_FILENO),
+  };
+  base::LaunchOptions launch_options;
+  launch_options.fds_to_remap = &fds_to_remap;
+  base::Process process = NamespaceSandbox::LaunchProcess(
+      base::CommandLine(base::FilePath("/bin/true")), launch_options);
+  CHECK(process.IsValid());
+
+  const int kDummyExitCode = 42;
+  int exit_code = kDummyExitCode;
+  CHECK(process.WaitForExit(&exit_code));
+  CHECK_EQ(0, exit_code);
+  return 0;
+}
+
+TEST_F(NamespaceSandboxTest, NestedNamespaceSandbox) {
+  TestProc("NestedNamespaceSandbox");
+}
+
+}  // namespace
+
+}  // namespace sandbox
diff --git a/sandbox/linux/services/namespace_utils.cc b/sandbox/linux/services/namespace_utils.cc
index f03fe40..cf4c37a 100644
--- a/sandbox/linux/services/namespace_utils.cc
+++ b/sandbox/linux/services/namespace_utils.cc
@@ -18,7 +18,7 @@
 #include "base/logging.h"
 #include "base/posix/eintr_wrapper.h"
 #include "base/process/launch.h"
-#include "base/strings/stringprintf.h"
+#include "base/strings/safe_sprintf.h"
 #include "base/third_party/valgrind/valgrind.h"
 
 namespace sandbox {
@@ -31,18 +31,23 @@
 
 // static
 bool NamespaceUtils::WriteToIdMapFile(const char* map_file, generic_id_t id) {
-  base::ScopedFD fd(HANDLE_EINTR(open(map_file, O_WRONLY)));
-  if (!fd.is_valid()) {
+  // This function needs to be async-signal-safe, as it may be called in between
+  // fork and exec.
+
+  int fd = HANDLE_EINTR(open(map_file, O_WRONLY));
+  if (fd == -1) {
     return false;
   }
 
   const generic_id_t inside_id = id;
   const generic_id_t outside_id = id;
-  const std::string mapping =
-      base::StringPrintf("%d %d 1\n", inside_id, outside_id);
-  const size_t len = mapping.size();
-  const ssize_t rc = HANDLE_EINTR(write(fd.get(), mapping.c_str(), len));
-  return rc == static_cast<ssize_t>(len);
+
+  char mapping[64];
+  ssize_t len =
+      base::strings::SafeSPrintf(mapping, "%d %d 1\n", inside_id, outside_id);
+  const ssize_t rc = HANDLE_EINTR(write(fd, mapping, len));
+  RAW_CHECK(IGNORE_EINTR(close(fd)) == 0);
+  return rc == len;
 }
 
 // static
diff --git a/sandbox/linux/services/namespace_utils.h b/sandbox/linux/services/namespace_utils.h
index d248d95..6f3a2a8 100644
--- a/sandbox/linux/services/namespace_utils.h
+++ b/sandbox/linux/services/namespace_utils.h
@@ -7,6 +7,7 @@
 
 #include <sys/types.h>
 
+#include "base/compiler_specific.h"
 #include "base/macros.h"
 #include "base/template_util.h"
 #include "sandbox/sandbox_export.h"
@@ -20,8 +21,10 @@
   // generic_id_t can be used for either uid_t or gid_t.
   typedef uid_t generic_id_t;
 
-  // Write a uid or gid mapping from |id| to |id| in |map_file|.
-  static bool WriteToIdMapFile(const char* map_file, generic_id_t id);
+  // Write a uid or gid mapping from |id| to |id| in |map_file|. This function
+  // is async-signal-safe.
+  static bool WriteToIdMapFile(const char* map_file,
+                               generic_id_t id) WARN_UNUSED_RESULT;
 
   // Returns true if unprivileged namespaces of type |type| is supported
   // (meaning that both CLONE_NEWUSER and type are are supported).  |type| must
diff --git a/sandbox/linux/services/namespace_utils_unittest.cc b/sandbox/linux/services/namespace_utils_unittest.cc
index 33ead94..42b469d 100644
--- a/sandbox/linux/services/namespace_utils_unittest.cc
+++ b/sandbox/linux/services/namespace_utils_unittest.cc
@@ -45,11 +45,11 @@
   ASSERT_NE(-1, pid);
   if (pid == 0) {
     RAW_CHECK(getuid() != uid);
-    NamespaceUtils::WriteToIdMapFile("/proc/self/uid_map", uid);
+    RAW_CHECK(NamespaceUtils::WriteToIdMapFile("/proc/self/uid_map", uid));
     RAW_CHECK(getuid() == uid);
 
     RAW_CHECK(getgid() != gid);
-    NamespaceUtils::WriteToIdMapFile("/proc/self/gid_map", gid);
+    RAW_CHECK(NamespaceUtils::WriteToIdMapFile("/proc/self/gid_map", gid));
     RAW_CHECK(getgid() == gid);
 
     _exit(0);
diff --git a/sandbox/linux/tests/main.cc b/sandbox/linux/tests/main.cc
index 81a0b32..17b4fe7 100644
--- a/sandbox/linux/tests/main.cc
+++ b/sandbox/linux/tests/main.cc
@@ -3,11 +3,14 @@
 // found in the LICENSE file.
 
 #include "base/at_exit.h"
+#include "base/base_switches.h"
+#include "base/command_line.h"
 #include "base/logging.h"
 #include "base/test/test_suite.h"
 #include "sandbox/linux/tests/test_utils.h"
 #include "sandbox/linux/tests/unit_tests.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "testing/multiprocess_func_list.h"
 
 namespace sandbox {
 namespace {
@@ -30,6 +33,15 @@
 #endif
 
 int main(int argc, char* argv[]) {
+  base::CommandLine::Init(argc, argv);
+  std::string client_func =
+      base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
+          switches::kTestChildProcess);
+  if (!client_func.empty()) {
+    base::AtExitManager exit_manager;
+    return multi_process_function_list::InvokeChildProcessTest(client_func);
+  }
+
 #if defined(OS_ANDROID)
   // The use of Callbacks requires an AtExitManager.
   base::AtExitManager exit_manager;
diff --git a/skia/BUILD.gn b/skia/BUILD.gn
index b14e1cc..a7d2296 100644
--- a/skia/BUILD.gn
+++ b/skia/BUILD.gn
@@ -68,7 +68,7 @@
                 "scope",
                 [ "//third_party/skia/gyp/effects.gypi" ])
 
-# The list of Skia utilss that are to be set for chromium.
+# The list of Skia utils that are to be set for chromium.
 gypi_skia_utils =
     exec_script("//build/gypi_to_gn.py",
                 [
@@ -79,6 +79,16 @@
                 "scope",
                 [ "//third_party/skia/gyp/utils.gypi" ])
 
+gypi_skia_opts =
+    exec_script("//build/gypi_to_gn.py",
+                [
+                  rebase_path("//third_party/skia/gyp/opts.gypi"),
+                  "--replace=<(skia_include_path)=//third_party/skia/include",
+                  "--replace=<(skia_src_path)=//third_party/skia/src",
+                ],
+                "scope",
+                [ "//third_party/skia/gyp/opts.gypi" ])
+
 # The list of Skia files is kept in skia_gn_files.gypi. Read it.
 gypi_values =
     exec_script("//build/gypi_to_gn.py",
@@ -555,72 +565,25 @@
   defines = []
 
   if (cpu_arch == "x86" || cpu_arch == "x64") {
-    sources = [
-      "//third_party/skia/src/opts/SkTextureCompression_opts_none.cpp",
-
-      # SSE 2
-      "//third_party/skia/src/opts/opts_check_x86.cpp",
-      "//third_party/skia/src/opts/SkBitmapFilter_opts_SSE2.cpp",
-      "//third_party/skia/src/opts/SkBitmapProcState_opts_SSE2.cpp",
-      "//third_party/skia/src/opts/SkBlitRect_opts_SSE2.cpp",
-      "//third_party/skia/src/opts/SkBlitRow_opts_SSE2.cpp",
-      "//third_party/skia/src/opts/SkBlurImage_opts_SSE2.cpp",
-      "//third_party/skia/src/opts/SkMorphology_opts_SSE2.cpp",
-      "//third_party/skia/src/opts/SkUtils_opts_SSE2.cpp",
-      "//third_party/skia/src/opts/SkXfermode_opts_SSE2.cpp",
-
-      # SSSE 3
-      "//third_party/skia/src/opts/SkBitmapProcState_opts_SSSE3.cpp",
-
-      # SSE 4
-      "//third_party/skia/src/opts/SkBlurImage_opts_SSE4.cpp",
-
-      # Chrome-specific.
-      "ext/convolver_SSE2.cc",
-
-      # These are header files used by this target from the skia one above.
-      "ext/convolver.h",
-      "//third_party/skia/include/core/SkTypes.h",
-    ]
-
-    if (!is_win) {
-      # SSE 4
-      if (cpu_arch == "x86") {
-        sources += [ "//third_party/skia/src/opts/SkBlitRow_opts_SSE4_asm.S" ]
-      } else {  # x64
-        sources +=
-            [ "//third_party/skia/src/opts/SkBlitRow_opts_SSE4_x64_asm.S" ]
-      }
-    }
+    sources = gypi_skia_opts.sse2_sources + gypi_skia_opts.ssse3_sources +
+              gypi_skia_opts.sse41_sources +
+              [
+                # Chrome-specific.
+                "ext/convolver_SSE2.cc",
+              ]
 
     if (is_linux || is_mac) {
       cflags += [ "-msse4.1" ]
     }
   } else if (cpu_arch == "arm") {
-    sources = [
-      "//third_party/skia/src/opts/SkBitmapProcState_opts_arm.cpp",
-    ]
-
     # The assembly uses the frame pointer register (r7 in Thumb/r11 in
     # ARM), the compiler doesn't like that.
     cflags += [ "-fomit-frame-pointer" ]
 
     if (arm_version >= 7) {
+      sources = gypi_skia_opts.armv7_sources
       if (arm_use_neon || arm_optionally_use_neon) {
-        sources += [
-          "//third_party/skia/src/opts/SkBitmapProcState_arm_neon.cpp",
-          "//third_party/skia/src/opts/SkBitmapProcState_matrixProcs_neon.cpp",
-          "//third_party/skia/src/opts/SkBitmapProcState_matrix_clamp_neon.h",
-          "//third_party/skia/src/opts/SkBitmapProcState_matrix_repeat_neon.h",
-          "//third_party/skia/src/opts/SkBlitMask_opts_arm_neon.cpp",
-          "//third_party/skia/src/opts/SkBlitRow_opts_arm_neon.cpp",
-          "//third_party/skia/src/opts/SkBlurImage_opts_neon.cpp",
-          "//third_party/skia/src/opts/SkMorphology_opts_neon.cpp",
-          "//third_party/skia/src/opts/SkTextureCompression_opts_neon.cpp",
-          "//third_party/skia/src/opts/SkXfermode_opts_arm_neon.cpp",
-          "//third_party/skia/src/opts/memset16_neon.S",
-          "//third_party/skia/src/opts/memset32_neon.S",
-        ]
+        sources += gypi_skia_opts.neon_sources
 
         # Root build config sets -mfpu=$arm_fpu, which we expect to be neon
         # when running this.
@@ -628,54 +591,13 @@
           configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
           cflags += [ "-mfpu=neon" ]
         }
-
-        #ldflags = [
-        #  "-march=armv7-a",
-        #  "-Wl,--fix-cortex-a8",
-        #]
       }
-    }
-
-    # Non-Neon ARM code.
-    if (arm_version < 7 || !arm_use_neon) {
-      sources += [ "//third_party/skia/src/opts/memset.arm.S" ]
-    }
-
-    if (arm_version < 6) {
-      sources += [
-        "//third_party/skia/src/opts/SkBlitMask_opts_none.cpp",
-        "//third_party/skia/src/opts/SkBlitRow_opts_none.cpp",
-        "//third_party/skia/src/opts/SkBlurImage_opts_none.cpp",
-        "//third_party/skia/src/opts/SkMorphology_opts_none.cpp",
-        "//third_party/skia/src/opts/SkTextureCompression_opts_none.cpp",
-        "//third_party/skia/src/opts/SkUtils_opts_none.cpp",
-        "//third_party/skia/src/opts/SkXfermode_opts_none.cpp",
-      ]
     } else {
-      # arm version >= 6.
-      sources += [
-        "//third_party/skia/src/opts/SkBlitMask_opts_arm.cpp",
-        "//third_party/skia/src/opts/SkBlitRow_opts_arm.cpp",
-        "//third_party/skia/src/opts/SkBlitRow_opts_arm.h",
-        "//third_party/skia/src/opts/SkBlurImage_opts_arm.cpp",
-        "//third_party/skia/src/opts/SkMorphology_opts_arm.cpp",
-        "//third_party/skia/src/opts/SkTextureCompression_opts_arm.cpp",
-        "//third_party/skia/src/opts/SkUtils_opts_arm.cpp",
-        "//third_party/skia/src/opts/SkXfermode_opts_none.cpp",
-      ]
+      sources = gypi_skia_opts.none_sourcees
     }
   } else if (cpu_arch == "mipsel") {
     cflags += [ "-fomit-frame-pointer" ]
-    sources = [
-      "//third_party/skia/src/opts/SkBitmapProcState_opts_none.cpp",
-      "//third_party/skia/src/opts/SkBlitMask_opts_none.cpp",
-      "//third_party/skia/src/opts/SkBlitRow_opts_none.cpp",
-      "//third_party/skia/src/opts/SkBlurImage_opts_none.cpp",
-      "//third_party/skia/src/opts/SkMorphology_opts_none.cpp",
-      "//third_party/skia/src/opts/SkTextureCompression_opts_none.cpp",
-      "//third_party/skia/src/opts/SkUtils_opts_none.cpp",
-      "//third_party/skia/src/opts/SkXfermode_opts_none.cpp",
-    ]
+    sources = gypi_skia_opts.none_sources
   } else {
     assert(false, "Need to port cpu specific stuff from skia_library_opts.gyp")
   }
diff --git a/skia/OWNERS b/skia/OWNERS
index d9d0a8b..6f1af58 100644
--- a/skia/OWNERS
+++ b/skia/OWNERS
@@ -8,6 +8,7 @@
 fmalita@chromium.org
 junov@chromium.org
 jvanverth@google.com
+mtklein@chromium.org
 reed@google.com
 rmistry@google.com
 robertphillips@google.com
diff --git a/skia/ext/analysis_canvas.cc b/skia/ext/analysis_canvas.cc
index eefd8f3..376d173 100644
--- a/skia/ext/analysis_canvas.cc
+++ b/skia/ext/analysis_canvas.cc
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
+#include "base/trace_event/trace_event.h"
 #include "skia/ext/analysis_canvas.h"
 #include "third_party/skia/include/core/SkDraw.h"
 #include "third_party/skia/include/core/SkRRect.h"
diff --git a/skia/ext/benchmarking_canvas.cc b/skia/ext/benchmarking_canvas.cc
index 257ac3f..409d56b 100644
--- a/skia/ext/benchmarking_canvas.cc
+++ b/skia/ext/benchmarking_canvas.cc
@@ -7,7 +7,7 @@
 #include "base/time/time.h"
 #include "skia/ext/benchmarking_canvas.h"
 #include "third_party/skia/include/core/SkSurface.h"
-#include "third_party/skia/include/utils/SkProxyCanvas.h"
+#include "third_party/skia/include/utils/SkNWayCanvas.h"
 
 namespace skia {
 
@@ -21,13 +21,14 @@
   base::TimeTicks start_ticks_;
 };
 
-class TimingCanvas : public SkProxyCanvas {
+class TimingCanvas : public SkNWayCanvas {
 public:
   TimingCanvas(int width, int height, const BenchmarkingCanvas* track_canvas)
-      : tracking_canvas_(track_canvas) {
+      : SkNWayCanvas(width, height)
+      , tracking_canvas_(track_canvas) {
     surface_ = skia::AdoptRef(SkSurface::NewRasterN32Premul(width, height));
 
-    setProxy(surface_->getCanvas());
+    addCanvas(surface_->getCanvas());
   }
 
   ~TimingCanvas() override {}
@@ -42,24 +43,24 @@
   // SkCanvas overrides.
   void willSave() override {
     AutoStamper stamper(this);
-    SkProxyCanvas::willSave();
+    SkNWayCanvas::willSave();
   }
 
   SaveLayerStrategy willSaveLayer(const SkRect* bounds,
                                   const SkPaint* paint,
                                   SaveFlags flags) override {
     AutoStamper stamper(this);
-    return SkProxyCanvas::willSaveLayer(bounds, paint, flags);
+    return SkNWayCanvas::willSaveLayer(bounds, paint, flags);
   }
 
   void willRestore() override {
     AutoStamper stamper(this);
-    SkProxyCanvas::willRestore();
+    SkNWayCanvas::willRestore();
   }
 
   void onDrawPaint(const SkPaint& paint) override {
     AutoStamper stamper(this);
-    SkProxyCanvas::onDrawPaint(paint);
+    SkNWayCanvas::onDrawPaint(paint);
   }
 
   void onDrawPoints(PointMode mode,
@@ -67,27 +68,27 @@
                     const SkPoint pts[],
                     const SkPaint& paint) override {
     AutoStamper stamper(this);
-    SkProxyCanvas::onDrawPoints(mode, count, pts, paint);
+    SkNWayCanvas::onDrawPoints(mode, count, pts, paint);
   }
 
   void onDrawOval(const SkRect& rect, const SkPaint& paint) override {
     AutoStamper stamper(this);
-    SkProxyCanvas::onDrawOval(rect, paint);
+    SkNWayCanvas::onDrawOval(rect, paint);
   }
 
   void onDrawRect(const SkRect& rect, const SkPaint& paint) override {
     AutoStamper stamper(this);
-    SkProxyCanvas::onDrawRect(rect, paint);
+    SkNWayCanvas::onDrawRect(rect, paint);
   }
 
   void onDrawRRect(const SkRRect& rrect, const SkPaint& paint) override {
     AutoStamper stamper(this);
-    SkProxyCanvas::onDrawRRect(rrect, paint);
+    SkNWayCanvas::onDrawRRect(rrect, paint);
   }
 
   void onDrawPath(const SkPath& path, const SkPaint& paint) override {
     AutoStamper stamper(this);
-    SkProxyCanvas::onDrawPath(path, paint);
+    SkNWayCanvas::onDrawPath(path, paint);
   }
 
   void onDrawBitmap(const SkBitmap& bitmap,
@@ -95,7 +96,7 @@
                     SkScalar top,
                     const SkPaint* paint) override {
     AutoStamper stamper(this);
-    SkProxyCanvas::onDrawBitmap(bitmap, left, top, paint);
+    SkNWayCanvas::onDrawBitmap(bitmap, left, top, paint);
   }
 
   void onDrawBitmapRect(const SkBitmap& bitmap,
@@ -104,7 +105,7 @@
                         const SkPaint* paint,
                         DrawBitmapRectFlags flags) override {
     AutoStamper stamper(this);
-    SkProxyCanvas::onDrawBitmapRect(bitmap, src, dst, paint, flags);
+    SkNWayCanvas::onDrawBitmapRect(bitmap, src, dst, paint, flags);
   }
 
   void onDrawSprite(const SkBitmap& bitmap,
@@ -112,7 +113,7 @@
                     int top,
                     const SkPaint* paint) override {
     AutoStamper stamper(this);
-    SkProxyCanvas::onDrawSprite(bitmap, left, top, paint);
+    SkNWayCanvas::onDrawSprite(bitmap, left, top, paint);
   }
 
   void onDrawVertices(VertexMode vmode,
@@ -125,7 +126,7 @@
                       int indexCount,
                       const SkPaint& paint) override {
     AutoStamper stamper(this);
-    SkProxyCanvas::onDrawVertices(vmode, vertexCount, vertices, texs, colors,
+    SkNWayCanvas::onDrawVertices(vmode, vertexCount, vertices, texs, colors,
                                   xmode, indices, indexCount, paint);
   }
 
@@ -136,7 +137,7 @@
                  SkScalar y,
                  const SkPaint& paint) override {
     AutoStamper stamper(this);
-    SkProxyCanvas::onDrawText(text, byteLength, x, y, paint);
+    SkNWayCanvas::onDrawText(text, byteLength, x, y, paint);
   }
 
   void onDrawPosText(const void* text,
@@ -144,7 +145,7 @@
                      const SkPoint pos[],
                      const SkPaint& paint) override {
     AutoStamper stamper(this);
-    SkProxyCanvas::onDrawPosText(text, byteLength, pos, paint);
+    SkNWayCanvas::onDrawPosText(text, byteLength, pos, paint);
   }
 
   void onDrawPosTextH(const void* text,
@@ -153,7 +154,7 @@
                       SkScalar constY,
                       const SkPaint& paint) override {
     AutoStamper stamper(this);
-    SkProxyCanvas::onDrawPosTextH(text, byteLength, xpos, constY, paint);
+    SkNWayCanvas::onDrawPosTextH(text, byteLength, xpos, constY, paint);
   }
 
   void onDrawTextOnPath(const void* text,
@@ -162,40 +163,40 @@
                         const SkMatrix* matrix,
                         const SkPaint& paint) override {
     AutoStamper stamper(this);
-    SkProxyCanvas::onDrawTextOnPath(text, byteLength, path, matrix, paint);
+    SkNWayCanvas::onDrawTextOnPath(text, byteLength, path, matrix, paint);
   }
 
   void onClipRect(const SkRect& rect,
                   SkRegion::Op op,
                   ClipEdgeStyle edge_style) override {
     AutoStamper stamper(this);
-    SkProxyCanvas::onClipRect(rect, op, edge_style);
+    SkNWayCanvas::onClipRect(rect, op, edge_style);
   }
 
   void onClipRRect(const SkRRect& rrect,
                    SkRegion::Op op,
                    ClipEdgeStyle edge_style) override {
     AutoStamper stamper(this);
-    SkProxyCanvas::onClipRRect(rrect, op, edge_style);
+    SkNWayCanvas::onClipRRect(rrect, op, edge_style);
   }
 
   void onClipPath(const SkPath& path,
                   SkRegion::Op op,
                   ClipEdgeStyle edge_style) override {
     AutoStamper stamper(this);
-    SkProxyCanvas::onClipPath(path, op, edge_style);
+    SkNWayCanvas::onClipPath(path, op, edge_style);
   }
 
   void onClipRegion(const SkRegion& region, SkRegion::Op op) override {
     AutoStamper stamper(this);
-    SkProxyCanvas::onClipRegion(region, op);
+    SkNWayCanvas::onClipRegion(region, op);
   }
 
   void onDrawPicture(const SkPicture* picture,
                      const SkMatrix* matrix,
                      const SkPaint* paint) override {
     AutoStamper stamper(this);
-    SkProxyCanvas::onDrawPicture(picture, matrix, paint);
+    SkNWayCanvas::onDrawPicture(picture, matrix, paint);
   }
 
 private:
diff --git a/skia/ext/event_tracer_impl.cc b/skia/ext/event_tracer_impl.cc
index 53ddf2b..e283814 100644
--- a/skia/ext/event_tracer_impl.cc
+++ b/skia/ext/event_tracer_impl.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "skia/ext/event_tracer_impl.h"
 #include "third_party/skia/include/utils/SkEventTracer.h"
 
diff --git a/skia/ext/image_operations.cc b/skia/ext/image_operations.cc
index e91b42e..a14344d 100644
--- a/skia/ext/image_operations.cc
+++ b/skia/ext/image_operations.cc
@@ -11,10 +11,10 @@
 
 // TODO(pkasting): skia/ext should not depend on base/!
 #include "base/containers/stack_container.h"
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "base/metrics/histogram.h"
 #include "base/time/time.h"
+#include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "skia/ext/convolver.h"
 #include "third_party/skia/include/core/SkColorPriv.h"
diff --git a/skia/skia_library.gypi b/skia/skia_library.gypi
index a3903bf..6a1c16c 100644
--- a/skia/skia_library.gypi
+++ b/skia/skia_library.gypi
@@ -32,8 +32,6 @@
     '../third_party/skia/src/images/SkScaledBitmapSampler.cpp',
     '../third_party/skia/src/images/SkScaledBitmapSampler.h',
 
-    '../third_party/skia/src/opts/opts_check_x86.cpp',
-
     '../third_party/skia/src/ports/SkFontConfigInterface_direct.cpp',
 
     '../third_party/skia/src/fonts/SkFontMgr_fontconfig.cpp',
@@ -225,12 +223,6 @@
         '../build/android/cpufeatures.gypi',
       ],
     }],
-    [ 'target_arch == "arm" or target_arch == "arm64" or \
-       target_arch == "mipsel" or target_arch == "mips64el"', {
-      'sources!': [
-        '../third_party/skia/src/opts/opts_check_x86.cpp'
-      ],
-    }],
     [ 'desktop_linux == 1 or chromeos == 1', {
       'dependencies': [
         '../build/linux/system.gyp:fontconfig',
@@ -289,9 +281,6 @@
         #  list.
         '../third_party/skia/src/utils/mac/SkStream_mac.cpp',
       ],
-      'sources/': [
-        ['exclude', 'opts_check_x86\\.cpp$'],
-      ],
 
       # The main skia_opts target does not currently work on iOS because the
       # target architecture on iOS is determined at compile time rather than
diff --git a/skia/skia_library_opts.gyp b/skia/skia_library_opts.gyp
index 6673105..cde0e0b 100644
--- a/skia/skia_library_opts.gyp
+++ b/skia/skia_library_opts.gyp
@@ -2,9 +2,21 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-
 # This gyp file contains the platform-specific optimizations for Skia
 {
+  'variables': {
+      'skia_src_path': '../third_party/skia/src',
+      'includes': [ '../third_party/skia/gyp/opts.gypi' ],
+      'include_dirs': [
+        '../third_party/skia/include/core',
+        '../third_party/skia/include/effects',
+        '../third_party/skia/include/utils',
+        '../third_party/skia/src/core',
+        '../third_party/skia/src/opts',
+        '../third_party/skia/src/utils',
+      ],
+   },
+
   'targets': [
     # Due to an unfortunate intersection of lameness between gcc and gyp,
     # we have to build the *_SSE2.cpp files in a separate target.  The
@@ -35,37 +47,19 @@
         # crbug.com/422255
         '../build/android/disable_lto.gypi',
       ],
-      'include_dirs': [
-        '../third_party/skia/include/core',
-        '../third_party/skia/include/effects',
-        '../third_party/skia/src/core',
-        '../third_party/skia/src/opts',
-        '../third_party/skia/src/utils',
-      ],
+      'include_dirs': [ '<@(include_dirs)' ],
       'conditions': [
         [ 'os_posix == 1 and OS != "mac" and OS != "android" and \
            target_arch != "arm" and target_arch != "arm64" and \
            target_arch != "mipsel" and target_arch != "mips64el"', {
-          'cflags': [
-            '-msse2',
-          ],
+          'cflags': [ '-msse2' ],
         }],
         [ 'target_arch != "arm" and target_arch != "mipsel" and \
            target_arch != "arm64" and target_arch != "mips64el"', {
-          'sources': [
-            '../third_party/skia/src/opts/SkBitmapFilter_opts_SSE2.cpp',
-            '../third_party/skia/src/opts/SkBitmapProcState_opts_SSE2.cpp',
-            '../third_party/skia/src/opts/SkBlitRect_opts_SSE2.cpp',
-            '../third_party/skia/src/opts/SkBlitRow_opts_SSE2.cpp',
-            '../third_party/skia/src/opts/SkBlurImage_opts_SSE2.cpp',
-            '../third_party/skia/src/opts/SkMorphology_opts_SSE2.cpp',
-            '../third_party/skia/src/opts/SkTextureCompression_opts_none.cpp',
-            '../third_party/skia/src/opts/SkUtils_opts_SSE2.cpp',
-            '../third_party/skia/src/opts/SkXfermode_opts_SSE2.cpp',
-          ],
+          'sources': [ '<@(sse2_sources)' ],
           'dependencies': [
             'skia_opts_ssse3',
-            'skia_opts_sse4',
+            'skia_opts_sse41',
           ],
         }],
         [ 'target_arch == "arm"', {
@@ -88,71 +82,19 @@
           'cflags': [
             '-fomit-frame-pointer',
           ],
-          'sources': [
-            '../third_party/skia/src/opts/SkBitmapProcState_opts_arm.cpp',
-          ],
         }],
-        [ 'target_arch == "arm" and (arm_version < 7 or arm_neon == 0)', {
-          'sources': [
-            '../third_party/skia/src/opts/memset.arm.S',
-          ],
+        [ 'target_arch == "arm" and arm_version < 7', {
+          'sources': [ '<@(none_sources)' ],
         }],
-        [ 'target_arch == "arm" and arm_version < 6', {
-          'sources': [
-            '../third_party/skia/src/opts/SkBlitMask_opts_none.cpp',
-            '../third_party/skia/src/opts/SkBlitRow_opts_none.cpp',
-            '../third_party/skia/src/opts/SkBlurImage_opts_none.cpp',
-            '../third_party/skia/src/opts/SkMorphology_opts_none.cpp',
-            '../third_party/skia/src/opts/SkTextureCompression_opts_none.cpp',
-            '../third_party/skia/src/opts/SkUtils_opts_none.cpp',
-            '../third_party/skia/src/opts/SkXfermode_opts_none.cpp',
-          ],
-        }],
-        [ 'target_arch == "arm" and arm_version >= 6', {
-          'sources': [
-            '../third_party/skia/src/opts/SkBlitMask_opts_arm.cpp',
-            '../third_party/skia/src/opts/SkBlitRow_opts_arm.cpp',
-            '../third_party/skia/src/opts/SkBlitRow_opts_arm.h',
-            '../third_party/skia/src/opts/SkBlurImage_opts_arm.cpp',
-            '../third_party/skia/src/opts/SkMorphology_opts_arm.cpp',
-            '../third_party/skia/src/opts/SkTextureCompression_opts_arm.cpp',
-            '../third_party/skia/src/opts/SkUtils_opts_arm.cpp',
-            '../third_party/skia/src/opts/SkXfermode_opts_none.cpp',
-          ],
+        [ 'target_arch == "arm" and arm_version >= 7', {
+          'sources': [ '<@(armv7_sources)' ],
         }],
         [ 'target_arch == "mipsel" or target_arch == "mips64el"',{
-          'cflags': [
-            '-fomit-frame-pointer',
-          ],
-          'sources': [
-            '../third_party/skia/src/opts/SkBitmapProcState_opts_none.cpp',
-            '../third_party/skia/src/opts/SkBlitMask_opts_none.cpp',
-            '../third_party/skia/src/opts/SkBlitRow_opts_none.cpp',
-            '../third_party/skia/src/opts/SkBlurImage_opts_none.cpp',
-            '../third_party/skia/src/opts/SkMorphology_opts_none.cpp',
-            '../third_party/skia/src/opts/SkTextureCompression_opts_none.cpp',
-            '../third_party/skia/src/opts/SkUtils_opts_none.cpp',
-            '../third_party/skia/src/opts/SkXfermode_opts_none.cpp',
-          ],
+          'cflags': [ '-fomit-frame-pointer' ],
+          'sources': [ '<@(none_sources)' ],
         }],
         [ 'target_arch == "arm64"', {
-          'sources': [
-            '../third_party/skia/src/opts/SkBitmapProcState_arm_neon.cpp',
-            '../third_party/skia/src/opts/SkBitmapProcState_matrixProcs_neon.cpp',
-            '../third_party/skia/src/opts/SkBitmapProcState_opts_arm.cpp',
-            '../third_party/skia/src/opts/SkBlitMask_opts_arm.cpp',
-            '../third_party/skia/src/opts/SkBlitMask_opts_arm_neon.cpp',
-            '../third_party/skia/src/opts/SkBlitRow_opts_none.cpp',
-            '../third_party/skia/src/opts/SkBlurImage_opts_arm.cpp',
-            '../third_party/skia/src/opts/SkBlurImage_opts_neon.cpp',
-            '../third_party/skia/src/opts/SkMorphology_opts_arm.cpp',
-            '../third_party/skia/src/opts/SkMorphology_opts_neon.cpp',
-            '../third_party/skia/src/opts/SkTextureCompression_opts_arm.cpp',
-            '../third_party/skia/src/opts/SkTextureCompression_opts_neon.cpp',
-            '../third_party/skia/src/opts/SkUtils_opts_none.cpp',
-            '../third_party/skia/src/opts/SkXfermode_opts_arm.cpp',
-            '../third_party/skia/src/opts/SkXfermode_opts_arm_neon.cpp',
-          ],
+          'sources': [ '<@(arm64_sources)' ],
         }],
       ],
     },
@@ -167,16 +109,10 @@
         'skia_common.gypi',
         '../build/android/increase_size_for_speed.gypi',
       ],
-      'include_dirs': [
-        '../third_party/skia/include/core',
-        '../third_party/skia/include/effects',
-        '../third_party/skia/src/core',
-      ],
+      'include_dirs': [ '<@(include_dirs)' ],
       'conditions': [
         [ 'OS in ["linux", "freebsd", "openbsd", "solaris", "android"]', {
-          'cflags': [
-            '-mssse3',
-          ],
+          'cflags': [ '-mssse3' ],
         }],
         [ 'OS == "mac"', {
           'xcode_settings': {
@@ -191,49 +127,30 @@
           },
         }],
         [ 'OS == "win"', {
-          'include_dirs': [
-            'config/win',
-          ],
-          'direct_dependent_settings': {
-            'include_dirs': [
-              'config/win',
-            ],
-          },
-          'defines' : [
-            'SK_CPU_SSE_LEVEL=31'
-          ],
+          'defines' : [ 'SK_CPU_SSE_LEVEL=31' ],
         }],
         [ 'target_arch != "arm" and target_arch != "arm64" and \
            target_arch != "mipsel" and target_arch != "mips64el"', {
-          'sources': [
-            '../third_party/skia/src/opts/SkBitmapProcState_opts_SSSE3.cpp',
-          ],
+          'sources': [ '<@(ssse3_sources)' ],
         }],
       ],
     },
     # For the same lame reasons as what is done for skia_opts, we also have to
-    # create another target specifically for SSE4 code as we would not want
-    # to compile the SSE2 code with -msse4 which would potentially allow
-    # gcc to generate SSE4 code.
+    # create another target specifically for SSE4.1 code as we would not want
+    # to compile the SSE2 code with -msse4.1 which would potentially allow
+    # gcc to generate SSE4.1 code.
     {
-      'target_name': 'skia_opts_sse4',
+      'target_name': 'skia_opts_sse41',
       'type': 'static_library',
       'includes': [
         'skia_common.gypi',
         '../build/android/increase_size_for_speed.gypi',
       ],
-      'include_dirs': [
-        '../third_party/skia/include/core',
-        '../third_party/skia/src/core',
-      ],
-      'sources': [
-        '../third_party/skia/src/opts/SkBlurImage_opts_SSE4.cpp',
-      ],
+      'include_dirs': [ '<@(include_dirs)' ],
+      'sources': [ '<@(sse41_sources)' ],
       'conditions': [
         [ 'OS in ["linux", "freebsd", "openbsd", "solaris", "android"]', {
-          'cflags': [
-            '-msse4.1',
-          ],
+          'cflags': [ '-msse4.1' ],
         }],
         [ 'OS == "mac"', {
           'xcode_settings': {
@@ -248,19 +165,7 @@
           },
         }],
         [ 'OS == "win"', {
-          'defines' : [
-            'SK_CPU_SSE_LEVEL=41'
-          ],
-        }],
-        [ 'target_arch == "x64"', {
-          'sources': [
-            '../third_party/skia/src/opts/SkBlitRow_opts_SSE4_x64_asm.S',
-          ],
-        }],
-        [ 'target_arch == "ia32"', {
-          'sources': [
-            '../third_party/skia/src/opts/SkBlitRow_opts_SSE4_asm.S',
-          ],
+          'defines' : [ 'SK_CPU_SSE_LEVEL=41' ],
         }],
       ],
     },
@@ -271,22 +176,8 @@
         'skia_common.gypi',
         '../build/android/increase_size_for_speed.gypi',
       ],
-      'include_dirs': [
-        '../third_party/skia/include/core',
-        '../third_party/skia/include/effects',
-        '../third_party/skia/src/core',
-        '../third_party/skia/src/utils',
-      ],
-      'sources': [
-        '../third_party/skia/src/opts/SkBitmapProcState_opts_none.cpp',
-        '../third_party/skia/src/opts/SkBlitMask_opts_none.cpp',
-        '../third_party/skia/src/opts/SkBlitRow_opts_none.cpp',
-        '../third_party/skia/src/opts/SkBlurImage_opts_none.cpp',
-        '../third_party/skia/src/opts/SkMorphology_opts_none.cpp',
-        '../third_party/skia/src/opts/SkTextureCompression_opts_none.cpp',
-        '../third_party/skia/src/opts/SkUtils_opts_none.cpp',
-        '../third_party/skia/src/opts/SkXfermode_opts_none.cpp',
-      ],
+      'include_dirs': [ '<@(include_dirs)' ],
+      'sources': [ '<@(none_sources)' ],
     },
   ],
   'conditions': [
@@ -306,13 +197,7 @@
             # crbug.com/408997
             '../build/android/disable_lto.gypi',
           ],
-          'include_dirs': [
-            '../third_party/skia/include/core',
-            '../third_party/skia/include/effects',
-            '../third_party/skia/src/core',
-            '../third_party/skia/src/opts',
-            '../third_party/skia/src/utils',
-          ],
+          'include_dirs': [ '<@(include_dirs)' ],
           'cflags!': [
             '-fno-omit-frame-pointer',
             '-mfpu=vfp',  # remove them all, just in case.
@@ -327,20 +212,7 @@
             '-march=armv7-a',
             '-Wl,--fix-cortex-a8',
           ],
-          'sources': [
-            '../third_party/skia/src/opts/SkBitmapProcState_arm_neon.cpp',
-            '../third_party/skia/src/opts/SkBitmapProcState_matrixProcs_neon.cpp',
-            '../third_party/skia/src/opts/SkBitmapProcState_matrix_clamp_neon.h',
-            '../third_party/skia/src/opts/SkBitmapProcState_matrix_repeat_neon.h',
-            '../third_party/skia/src/opts/SkBlitMask_opts_arm_neon.cpp',
-            '../third_party/skia/src/opts/SkBlitRow_opts_arm_neon.cpp',
-            '../third_party/skia/src/opts/SkBlurImage_opts_neon.cpp',
-            '../third_party/skia/src/opts/SkMorphology_opts_neon.cpp',
-            '../third_party/skia/src/opts/SkTextureCompression_opts_neon.cpp',
-            '../third_party/skia/src/opts/SkXfermode_opts_arm_neon.cpp',
-            '../third_party/skia/src/opts/memset16_neon.S',
-            '../third_party/skia/src/opts/memset32_neon.S',
-          ],
+          'sources': [ '<@(neon_sources)' ],
         },
       ],
     }],
diff --git a/testing/PRESUBMIT.py b/testing/PRESUBMIT.py
index 90e524f..5e8fc90 100644
--- a/testing/PRESUBMIT.py
+++ b/testing/PRESUBMIT.py
@@ -4,8 +4,8 @@
 
 """Top-level presubmit script for testing.
 
-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
-details on the presubmit API built into gcl.
+See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
+for more details on the presubmit API built into depot_tools.
 """
 
 
diff --git a/testing/android/BUILD.gn b/testing/android/BUILD.gn
index 1cf250b..e0288f6 100644
--- a/testing/android/BUILD.gn
+++ b/testing/android/BUILD.gn
@@ -8,7 +8,9 @@
 source_set("native_test_native_code") {
   testonly = true
   sources = [
+    "native_test_jni_onload.cc",
     "native_test_launcher.cc",
+    "native_test_launcher.h",
   ]
   libs = [ "log" ]
   deps = [
diff --git a/testing/android/java/src/org/chromium/native_test/ChromeNativeTestInstrumentationTestRunner.java b/testing/android/java/src/org/chromium/native_test/ChromeNativeTestInstrumentationTestRunner.java
index 5043932..cc89268 100644
--- a/testing/android/java/src/org/chromium/native_test/ChromeNativeTestInstrumentationTestRunner.java
+++ b/testing/android/java/src/org/chromium/native_test/ChromeNativeTestInstrumentationTestRunner.java
@@ -12,13 +12,17 @@
 import android.os.Environment;
 import android.util.Log;
 
+import org.chromium.net.test.TestServerSpawner;
+
 import java.io.BufferedInputStream;
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.regex.Matcher;
@@ -32,9 +36,15 @@
     public static final String EXTRA_ONLY_OUTPUT_FAILURES =
             "org.chromium.native_test.ChromeNativeTestInstrumentationTestRunner."
                     + "OnlyOutputFailures";
+    public static final String EXTRA_ENABLE_TEST_SERVER_SPAWNER =
+            "org.chromium.native_test.ChromeNativeTestInstrumentationTestRunner."
+                    + "EnableTestServerSpawner";
 
     private static final String TAG = "ChromeNativeTestInstrumentationTestRunner";
+
+    private static final int ACCEPT_TIMEOUT_MS = 5000;
     private static final Pattern RE_TEST_OUTPUT = Pattern.compile("\\[ *([^ ]*) *\\] ?([^ ]+) .*");
+    private static final int SERVER_SPAWNER_PORT = 0;
 
     private static interface ResultsBundleGenerator {
         public Bundle generate(Map<String, TestResult> rawResults);
@@ -47,6 +57,10 @@
     private ResultsBundleGenerator mBundleGenerator;
     private boolean mOnlyOutputFailures;
 
+    private boolean mEnableTestServerSpawner;
+    private TestServerSpawner mTestServerSpawner;
+    private Thread mTestServerSpawnerThread;
+
     @Override
     public void onCreate(Bundle arguments) {
         mCommandLineFile = arguments.getString(ChromeNativeTestActivity.EXTRA_COMMAND_LINE_FILE);
@@ -63,16 +77,55 @@
         mLogBundle = new Bundle();
         mBundleGenerator = new RobotiumBundleGenerator();
         mOnlyOutputFailures = arguments.containsKey(EXTRA_ONLY_OUTPUT_FAILURES);
+        mEnableTestServerSpawner = arguments.containsKey(EXTRA_ENABLE_TEST_SERVER_SPAWNER);
+        mTestServerSpawner = null;
+        mTestServerSpawnerThread = null;
         start();
     }
 
     @Override
     public void onStart() {
         super.onStart();
+
+        setUp();
         Bundle results = runTests();
+        tearDown();
+
         finish(Activity.RESULT_OK, results);
     }
 
+    private void setUp() {
+        if (mEnableTestServerSpawner) {
+            Log.i(TAG, "Test server spawner enabled.");
+            try {
+                mTestServerSpawner = new TestServerSpawner(SERVER_SPAWNER_PORT, ACCEPT_TIMEOUT_MS);
+
+                File portFile = new File(
+                        Environment.getExternalStorageDirectory(), "net-test-server-ports");
+                OutputStreamWriter writer =
+                        new OutputStreamWriter(new FileOutputStream(portFile));
+                writer.write(Integer.toString(mTestServerSpawner.getServerPort()) + ":0");
+                writer.close();
+
+                mTestServerSpawnerThread = new Thread(mTestServerSpawner);
+                mTestServerSpawnerThread.start();
+            } catch (IOException e) {
+                Log.e(TAG, "Error creating TestServerSpawner: " + e.toString());
+            }
+        }
+    }
+
+    private void tearDown() {
+        if (mTestServerSpawnerThread != null) {
+            try {
+                mTestServerSpawner.stop();
+                mTestServerSpawnerThread.join();
+            } catch (InterruptedException e) {
+                Log.e(TAG, "Interrupted while shutting down test server spawner: " + e.toString());
+            }
+        }
+    }
+
     /** Runs the tests in the ChromeNativeTestActivity and returns a Bundle containing the results.
      */
     private Bundle runTests() {
diff --git a/testing/android/native_test.gyp b/testing/android/native_test.gyp
index 14f3229..7d0ebc8 100644
--- a/testing/android/native_test.gyp
+++ b/testing/android/native_test.gyp
@@ -12,7 +12,9 @@
           'message': 'building native pieces of native test package',
           'type': 'static_library',
           'sources': [
+            'native_test_jni_onload.cc',
             'native_test_launcher.cc',
+            'native_test_launcher.h',
           ],
           'direct_dependent_settings': {
             'ldflags!': [
diff --git a/testing/android/native_test_jni_onload.cc b/testing/android/native_test_jni_onload.cc
new file mode 100644
index 0000000..bfab3c9
--- /dev/null
+++ b/testing/android/native_test_jni_onload.cc
@@ -0,0 +1,40 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/android/base_jni_onload.h"
+#include "base/android/jni_android.h"
+#include "base/android/jni_onload_delegate.h"
+#include "testing/android/native_test_launcher.h"
+
+namespace {
+
+class NativeTestJNIOnLoadDelegate : public base::android::JNIOnLoadDelegate {
+ public:
+  bool RegisterJNI(JNIEnv* env) override;
+  bool Init() override;
+};
+
+bool NativeTestJNIOnLoadDelegate::RegisterJNI(JNIEnv* env) {
+  return RegisterNativeTestJNI(env);
+}
+
+bool NativeTestJNIOnLoadDelegate::Init() {
+  InstallHandlers();
+  return true;
+}
+
+}  // namespace
+
+
+// This is called by the VM when the shared library is first loaded.
+JNI_EXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
+  NativeTestJNIOnLoadDelegate delegate;
+  std::vector<base::android::JNIOnLoadDelegate*> delegates;
+  delegates.push_back(&delegate);
+
+  if (!base::android::OnJNIOnLoad(vm, &delegates))
+    return -1;
+
+  return JNI_VERSION_1_4;
+}
diff --git a/testing/android/native_test_launcher.cc b/testing/android/native_test_launcher.cc
index 191dfcd..4cc87d2 100644
--- a/testing/android/native_test_launcher.cc
+++ b/testing/android/native_test_launcher.cc
@@ -60,20 +60,6 @@
   g_old_sa[sig].sa_sigaction(sig, info, reserved);
 }
 
-// TODO(nileshagrawal): now that we're using FIFO, test scripts can detect EOF.
-// Remove the signal handlers.
-void InstallHandlers() {
-  struct sigaction sa;
-  memset(&sa, 0, sizeof(sa));
-
-  sa.sa_sigaction = SignalHandler;
-  sa.sa_flags = SA_SIGINFO;
-
-  for (unsigned int i = 0; kExceptionSignals[i] != -1; ++i) {
-    sigaction(kExceptionSignals[i], &sa, &g_old_sa[kExceptionSignals[i]]);
-  }
-}
-
 // Writes printf() style string to Android's logger where |priority| is one of
 // the levels defined in <android/log.h>.
 void AndroidLog(int priority, const char* format, ...) {
@@ -92,8 +78,6 @@
                      jstring jstdout_file_path,
                      jboolean jstdout_fifo,
                      jobject app_context) {
-  base::AtExitManager exit_manager;
-
   // Command line initialized basically, will be fully initialized later.
   static const char* const kInitialArgv[] = { "ChromeTestActivity" };
   base::CommandLine::Init(arraysize(kInitialArgv), kInitialArgv);
@@ -157,16 +141,21 @@
   main(argc, &argv[0]);
 }
 
-// This is called by the VM when the shared library is first loaded.
-JNI_EXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
-  // Install signal handlers to detect crashes.
-  InstallHandlers();
+bool RegisterNativeTestJNI(JNIEnv* env) {
+  return RegisterNativesImpl(env);
+}
 
-  base::android::InitVM(vm);
-  JNIEnv* env = base::android::AttachCurrentThread();
-  if (!RegisterNativesImpl(env)) {
-    return -1;
+
+// TODO(nileshagrawal): now that we're using FIFO, test scripts can detect EOF.
+// Remove the signal handlers.
+void InstallHandlers() {
+  struct sigaction sa;
+  memset(&sa, 0, sizeof(sa));
+
+  sa.sa_sigaction = SignalHandler;
+  sa.sa_flags = SA_SIGINFO;
+
+  for (unsigned int i = 0; kExceptionSignals[i] != -1; ++i) {
+    sigaction(kExceptionSignals[i], &sa, &g_old_sa[kExceptionSignals[i]]);
   }
-
-  return JNI_VERSION_1_4;
 }
diff --git a/testing/android/native_test_launcher.h b/testing/android/native_test_launcher.h
new file mode 100644
index 0000000..cdd1e76
--- /dev/null
+++ b/testing/android/native_test_launcher.h
@@ -0,0 +1,13 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef TESTING_ANDROID_NATIVE_TEST_LAUNCHER_H_
+#define TESTING_ANDROID_NATIVE_TEST_LAUNCHER_H_
+
+#include <jni.h>
+
+void InstallHandlers();
+bool RegisterNativeTestJNI(JNIEnv* env);
+
+#endif  // TESTING_ANDROID_NATIVE_TEST_LAUNCHER_H_
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index 530c874..01d893f 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -395,7 +395,6 @@
       "unit_tests",
       "sql_unittests",
       "ui_base_unittests",
-      "content_unittests",
       "views_unittests",
       "browser_tests",
       {
@@ -447,7 +446,6 @@
       "unit_tests",
       "sql_unittests",
       "ui_base_unittests",
-      "content_unittests",
       "views_unittests",
       "browser_tests",
       {
@@ -499,7 +497,6 @@
       "unit_tests",
       "sql_unittests",
       "ui_base_unittests",
-      "content_unittests",
       "views_unittests",
       "browser_tests",
       {
@@ -551,7 +548,6 @@
       "unit_tests",
       "sql_unittests",
       "ui_base_unittests",
-      "content_unittests",
       "views_unittests",
       "browser_tests",
       {
@@ -603,7 +599,6 @@
       "unit_tests",
       "sql_unittests",
       "ui_base_unittests",
-      "content_unittests",
       "views_unittests",
       "browser_tests",
       {
@@ -655,7 +650,6 @@
       "unit_tests",
       "sql_unittests",
       "ui_base_unittests",
-      "content_unittests",
       "views_unittests",
       "browser_tests",
       {
@@ -707,7 +701,6 @@
       "unit_tests",
       "sql_unittests",
       "ui_base_unittests",
-      "content_unittests",
       "views_unittests",
       "browser_tests",
       {
@@ -719,7 +712,7 @@
       "installer_util_unittests"
     ]
   },
-  "CrWinClang(asan) tester": {
+  "CrWinAsan tester": {
     "gtest_tests": [
       {
         "test": "base_unittests",
@@ -756,7 +749,54 @@
       "unit_tests",
       "sql_unittests",
       "ui_base_unittests",
+      "views_unittests",
+      "browser_tests",
+      {
+        "test": "content_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        }
+      },
+      "installer_util_unittests"
+    ]
+  },
+  "CrWinAsan(dll) tester": {
+    "gtest_tests": [
+      {
+        "test": "base_unittests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        }
+      },
+      "cacheinvalidation_unittests",
+      "chrome_elf_unittests",
+      "components_unittests",
+      {
+        "test": "courgette_unittests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        }
+      },
+      "crypto_unittests",
+      "extensions_unittests",
+      "gcm_unit_tests",
+      "google_apis_unittests",
+      "gpu_unittests",
+      "url_unittests",
+      "jingle_unittests",
       "content_unittests",
+      "device_unittests",
+      "media_unittests",
+      "net_unittests",
+      "ppapi_unittests",
+      "printing_unittests",
+      "remoting_unittests",
+      "ipc_tests",
+      "sync_unit_tests",
+      "skia_unittests",
+      "unit_tests",
+      "sql_unittests",
+      "ui_base_unittests",
       "views_unittests",
       "browser_tests",
       {
diff --git a/testing/chromoting/browser_tests_launcher.py b/testing/chromoting/browser_tests_launcher.py
index 0cb903b..a265f56 100644
--- a/testing/chromoting/browser_tests_launcher.py
+++ b/testing/chromoting/browser_tests_launcher.py
@@ -20,24 +20,16 @@
 NATIVE_MESSAGING_DIR = 'NativeMessagingHosts'
 CRD_ID = 'chrome-remote-desktop'  # Used in a few file/folder names
 CHROMOTING_HOST_PATH = '/opt/google/chrome-remote-desktop/chrome-remote-desktop'
+TEST_FAILURE = False
 
 
 def LaunchBTCommand(command):
-  results, error = RunCommandInSubProcess(command)
+  global TEST_FAILURE
+  results = RunCommandInSubProcess(command)
 
   # Check that the test passed.
   if SUCCESS_INDICATOR not in results:
-    # Obtain contents of Chromoting host logs.
-    log_contents = ''
-    # There should be only 1 log file, as we delete logs on test completion.
-    # Loop through matching files, just in case there are more.
-    for log_file in glob.glob('/tmp/chrome_remote_desktop_*'):
-      with open(log_file, 'r') as log:
-        log_contents += '\nHOST LOG %s CONTENTS:\n%s' % (log_file, log.read())
-    print log_contents
-    raise Exception(
-        'Test failed. Command:%s\nResults:%s\nError:%s\n' %
-        (command, results, error))
+    TEST_FAILURE = True
 
 
 def RunCommandInSubProcess(command):
@@ -47,7 +39,6 @@
     command: The text of command to be executed.
   Returns:
     results: stdout contents of executing the command.
-    error: stderr contents.
   """
 
   cmd_line = [command]
@@ -59,7 +50,7 @@
                     (e, command, error))
   else:
     print results
-  return results, error
+  return results
 
 
 def TestCleanUp(user_profile_dir):
@@ -88,12 +79,6 @@
   $HOME/.config/chrome-remote-desktop
   Its name is expected to have a hash that is specific to a machine.
 
-  TODO(anandc):
-  Once we have Linux machines in the swarming lab already installed with the
-  me2me host, this function should also perform the step of starting the host.
-  That is gated on this CL: https://chromereviews.googleplex.com/123957013/, and
-  then having base images in the chrome-labs be updated with it.
-
   Args:
     cfg_file: location of test account's host-config file.
   """
@@ -119,7 +104,7 @@
 
 def SetupUserProfileDir(me2me_manifest_file, it2me_manifest_file,
                         user_profile_dir):
-  """Sets up the Google Chrome user profile directory
+  """Sets up the Google Chrome user profile directory.
 
   Delete the previous user profile directory if exists and create a new one.
   This invalidates any state changes by the previous test so each test can start
@@ -179,6 +164,18 @@
       line = line.replace(PROD_DIR_ID, args.prod_dir)
       LaunchBTCommand(line)
 
+  # Was there any test failure?
+  if TEST_FAILURE:
+    # Obtain contents of Chromoting host logs.
+    log_contents = ''
+    # There should be only 1 log file, as we delete logs on test completion.
+    # Loop through matching files, just in case there are more.
+    for log_file in glob.glob('/tmp/chrome_remote_desktop_*'):
+      with open(log_file, 'r') as log:
+        log_contents += '\nHOST LOG %s\n CONTENTS:\n%s' % (log_file, log.read())
+    print log_contents
+    raise Exception('At least one test failed.')
+
   # Now, stop host, and cleanup user-profile-dir
   TestCleanUp(args.user_profile_dir)
 
diff --git a/testing/commit_queue/config.json b/testing/commit_queue/config.json
index c1c7eb1..4563928 100644
--- a/testing/commit_queue/config.json
+++ b/testing/commit_queue/config.json
@@ -11,7 +11,8 @@
                         "mac_chromium_gn_rel": ["defaulttests"]
                     },
                     "tryserver.chromium.win": {
-                        "win8_chromium_ng": ["defaulttests"]
+                        "win8_chromium_ng": ["defaulttests"],
+                        "win8_chromium_gn_rel": ["defaulttests"]
                     }
                 }
             }
@@ -85,14 +86,12 @@
             },
             "tryserver.chromium.win": {
               "win8_chromium_rel": ["defaulttests"],
-              "win8_chromium_gn_rel": ["defaulttests"],
               "win_chromium_compile_dbg_ng": ["defaulttests"],
               "win_chromium_rel_ng": ["defaulttests"],
               "win_chromium_x64_rel_ng": ["defaulttests"]
             },
             "tryserver.chromium.gpu": {
-                "win_gpu": ["defaulttests"],
-                "win_gpu_triggered_tests": ["defaulttests"]
+                "win_gpu": ["defaulttests"]
             }
         },
         "triggered": {
diff --git a/testing/test_env.py b/testing/test_env.py
index 4c19427..0743f34 100755
--- a/testing/test_env.py
+++ b/testing/test_env.py
@@ -17,43 +17,17 @@
 CHROME_SANDBOX_PATH = '/opt/chromium/chrome_sandbox'
 
 
-def should_enable_sandbox(cmd, sandbox_path):
-  """Return a boolean indicating that the current slave is capable of using the
-  sandbox and should enable it.  This should return True iff the slave is a
-  Linux host with the sandbox file present and configured correctly."""
-  if not (sys.platform.startswith('linux') and
-          os.path.exists(sandbox_path)):
-    return False
-
-  # Copy the check in tools/build/scripts/slave/runtest.py.
-  if '--lsan=1' in cmd:
-    return False
-
-  sandbox_stat = os.stat(sandbox_path)
-  if ((sandbox_stat.st_mode & stat.S_ISUID) and
-      (sandbox_stat.st_mode & stat.S_IRUSR) and
-      (sandbox_stat.st_mode & stat.S_IXUSR) and
-      (sandbox_stat.st_uid == 0)):
-    return True
-  return False
-
-
-def get_sandbox_env(cmd, env, verbose=False):
-  """Checks enables the sandbox if it is required, otherwise it disables it.
-  Returns the environment flags to set."""
+def get_sandbox_env(env):
+  """Returns the environment flags needed for the SUID sandbox to work."""
   extra_env = {}
   chrome_sandbox_path = env.get(CHROME_SANDBOX_ENV, CHROME_SANDBOX_PATH)
-
-  if should_enable_sandbox(cmd, chrome_sandbox_path):
-    if verbose:
-      print 'Enabling sandbox. Setting environment variable:'
-      print '  %s="%s"' % (CHROME_SANDBOX_ENV, chrome_sandbox_path)
-    extra_env[CHROME_SANDBOX_ENV] = chrome_sandbox_path
-  else:
-    if verbose:
-      print 'Disabling sandbox.  Setting environment variable:'
-      print '  CHROME_DEVEL_SANDBOX=""'
-    extra_env['CHROME_DEVEL_SANDBOX'] = ''
+  # The above would silently disable the SUID sandbox if the env value were
+  # an empty string. We don't want to allow that. http://crbug.com/245376
+  # TODO(jln): Remove this check once it's no longer possible to disable the
+  # sandbox that way.
+  if not chrome_sandbox_path:
+    chrome_sandbox_path = CHROME_SANDBOX_PATH
+  extra_env[CHROME_SANDBOX_ENV] = chrome_sandbox_path
 
   return extra_env
 
@@ -131,11 +105,47 @@
   return extra_env
 
 
+def get_sanitizer_symbolize_command(json_path=None):
+  """Construct the command to invoke offline symbolization script."""
+  script_path = '../tools/valgrind/asan/asan_symbolize.py'
+  cmd = [sys.executable, script_path]
+  if json_path is not None:
+    cmd.append('--test-summary-json-file=%s' % json_path)
+  return cmd
+
+
+def get_json_path(cmd):
+  """Extract the JSON test summary path from a command line."""
+  json_path_flag = '--test-launcher-summary-output='
+  for arg in cmd:
+    if arg.startswith(json_path_flag):
+      return arg.split(json_path_flag).pop()
+  return None
+
+
+def symbolize_snippets_in_json(cmd, env):
+  """Symbolize output snippets inside the JSON test summary."""
+  json_path = get_json_path(cmd)
+  if json_path is None:
+    return
+
+  try:
+    symbolize_command = get_sanitizer_symbolize_command(json_path=json_path)
+    p = subprocess.Popen(symbolize_command, stderr=subprocess.PIPE, env=env)
+    (_, stderr) = p.communicate()
+  except OSError as e:
+      print 'Exception while symbolizing snippets: %s' % e
+
+  if p.returncode != 0:
+    print "Error: failed to symbolize snippets in JSON:\n"
+    print stderr
+
+
 def run_executable(cmd, env):
   """Runs an executable with:
     - environment variable CR_SOURCE_ROOT set to the root directory.
     - environment variable LANGUAGE to en_US.UTF-8.
-    - environment variable CHROME_DEVEL_SANDBOX set if need
+    - environment variable CHROME_DEVEL_SANDBOX set
     - Reuses sys.executable automatically.
   """
   extra_env = {}
@@ -144,14 +154,18 @@
   # Used by base/base_paths_linux.cc as an override. Just make sure the default
   # logic is used.
   env.pop('CR_SOURCE_ROOT', None)
-  extra_env.update(get_sandbox_env(cmd, env))
+  extra_env.update(get_sandbox_env(env))
 
   # Copy logic from  tools/build/scripts/slave/runtest.py.
   asan = '--asan=1' in cmd
   lsan = '--lsan=1' in cmd
+  use_symbolization_script = asan and not lsan
 
   if asan:
     extra_env.update(get_asan_env(cmd, lsan))
+    # ASan is not yet sandbox-friendly on Windows (http://crbug.com/382867).
+    if sys.platform == 'win32':
+      cmd.append('--no-sandbox')
   if lsan:
     cmd.append('--no-sandbox')
 
@@ -169,15 +183,17 @@
   env.update(extra_env or {})
   try:
     # See above comment regarding offline symbolization.
-    if asan and not lsan:
+    if use_symbolization_script:
       # Need to pipe to the symbolizer script.
       p1 = subprocess.Popen(cmd, env=env, stdout=subprocess.PIPE,
                             stderr=sys.stdout)
-      p2 = subprocess.Popen(["../tools/valgrind/asan/asan_symbolize.py"],
+      p2 = subprocess.Popen(get_sanitizer_symbolize_command(),
                             env=env, stdin=p1.stdout)
       p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
       p1.wait()
       p2.wait()
+      # Also feed the out-of-band JSON output to the symbolizer script.
+      symbolize_snippets_in_json(cmd, env)
       return p1.returncode
     else:
       return subprocess.call(cmd, env=env)
diff --git a/third_party/android_testrunner/OWNERS b/third_party/android_testrunner/OWNERS
index 9281d8a..69f908a 100644
--- a/third_party/android_testrunner/OWNERS
+++ b/third_party/android_testrunner/OWNERS
@@ -1,3 +1,3 @@
-craigdh@chromium.org
-frankf@chromium.org
 jbudorick@chromium.org
+klundberg@chromium.org
+perezju@chromium.org
diff --git a/third_party/boringssl/boringssl_tests.gypi b/third_party/boringssl/boringssl_tests.gypi
index 100fb1b..0373742 100644
--- a/third_party/boringssl/boringssl_tests.gypi
+++ b/third_party/boringssl/boringssl_tests.gypi
@@ -202,6 +202,19 @@
       'msvs_disabled_warnings': [ 4267, ],
     },
     {
+      'target_name': 'boringssl_pbkdf_test',
+      'type': 'executable',
+      'dependencies': [
+        'boringssl.gyp:boringssl',
+      ],
+      'sources': [
+        'src/crypto/evp/pbkdf_test.c',
+      ],
+      # TODO(davidben): Fix size_t truncations in BoringSSL.
+      # https://crbug.com/429039
+      'msvs_disabled_warnings': [ 4267, ],
+    },
+    {
       'target_name': 'boringssl_hkdf_test',
       'type': 'executable',
       'dependencies': [
@@ -340,6 +353,7 @@
       'boringssl_hkdf_test',
       'boringssl_hmac_test',
       'boringssl_lhash_test',
+      'boringssl_pbkdf_test',
       'boringssl_pkcs12_test',
       'boringssl_pkcs7_test',
       'boringssl_pqueue_test',
diff --git a/third_party/boringssl/boringssl_unittest.cc b/third_party/boringssl/boringssl_unittest.cc
index 177298f..4cc0804 100644
--- a/third_party/boringssl/boringssl_unittest.cc
+++ b/third_party/boringssl/boringssl_unittest.cc
@@ -232,6 +232,10 @@
   TestSimple("pqueue_test");
 }
 
-TEST(BoringSSL, HKDF) {                                                        
+TEST(BoringSSL, HKDF) {
   TestSimple("hkdf_test");                                                     
 }
+
+TEST(BoringSSL, PBKDF) {
+  TestSimple("pbkdf_test");                                                     
+}
diff --git a/third_party/khronos/README.chromium b/third_party/khronos/README.chromium
index 10259c9..052e9d9 100644
--- a/third_party/khronos/README.chromium
+++ b/third_party/khronos/README.chromium
@@ -12,17 +12,19 @@
 generating the GL binding initialization logic.
 
 MIT/X11 (BSD like) license is for {EGL,KHR}/*, SGI Free Software License B is
-for GLES2/* and GLES3/*.
+for noninclude/GL/*, GLES2/* and GLES3/*.
 
 Local Modifications:
 
 NOTE: Please add Chromium-specific declarations to files in gpu/{GL,EGL,GLES2}
 and not here.
 
+noninclude/GL/glext.h
+ - Added missing function prototypes and enums for GL_KHR_robustness
 GLES2/gl2.h
  - Added include of gl2chromium.h
 GLES2/gl2ext.h
- - Chromium-specific define to account for issues in gles2_conform_test, 
+ - Chromium-specific define to account for issues in gles2_conform_test,
    see http://crbug.com/329708.
  - Commented out GL_SAMPLER, conflicts with third_party/gles2_conform
  - Drop const from last argument of GLDEBUGPROCKHR (win trybot fail)
diff --git a/third_party/khronos/noninclude/GL/glext.h b/third_party/khronos/noninclude/GL/glext.h
new file mode 100644
index 0000000..2de12b2
--- /dev/null
+++ b/third_party/khronos/noninclude/GL/glext.h
@@ -0,0 +1,11790 @@
+#ifndef __glext_h_
+#define __glext_h_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright (c) 2013-2014 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are 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 Materials.
+**
+** THE MATERIALS ARE 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
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+/*
+** This header is generated from the Khronos OpenGL / OpenGL ES XML
+** API Registry. The current version of the Registry, generator scripts
+** used to make the header, and the header can be found at
+**   http://www.opengl.org/registry/
+**
+** Khronos $Revision: 29324 $ on $Date: 2015-01-04 17:42:37 -0800 (Sun, 04 Jan 2015) $
+*/
+
+#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>
+#endif
+
+#ifndef APIENTRY
+#define APIENTRY
+#endif
+#ifndef APIENTRYP
+#define APIENTRYP APIENTRY *
+#endif
+#ifndef GLAPI
+#define GLAPI extern
+#endif
+
+#define GL_GLEXT_VERSION 20150104
+
+/* Generated C header for:
+ * API: gl
+ * Profile: compatibility
+ * Versions considered: .*
+ * Versions emitted: 1\.[2-9]|[234]\.[0-9]
+ * Default extensions included: gl
+ * Additional extensions included: _nomatch_^
+ * Extensions removed: _nomatch_^
+ */
+
+#ifndef GL_VERSION_1_2
+#define GL_VERSION_1_2 1
+#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 PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_VERSION_1_2 */
+
+#ifndef GL_VERSION_1_3
+#define GL_VERSION_1_3 1
+#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 PFNGLACTIVETEXTUREPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, void *img);
+typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m);
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glActiveTexture (GLenum texture);
+GLAPI void APIENTRY glSampleCoverage (GLfloat value, GLboolean invert);
+GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, void *img);
+GLAPI void APIENTRY glClientActiveTexture (GLenum texture);
+GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s);
+GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s);
+GLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s);
+GLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s);
+GLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t);
+GLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t);
+GLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t);
+GLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t);
+GLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+GLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+GLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r);
+GLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r);
+GLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+GLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+GLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q);
+GLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+GLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m);
+GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m);
+GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m);
+GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m);
+#endif
+#endif /* GL_VERSION_1_3 */
+
+#ifndef GL_VERSION_1_4
+#define GL_VERSION_1_4 1
+#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 PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord);
+typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord);
+typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord);
+typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord);
+typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount);
+GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount);
+GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param);
+GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params);
+GLAPI void APIENTRY glFogCoordf (GLfloat coord);
+GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord);
+GLAPI void APIENTRY glFogCoordd (GLdouble coord);
+GLAPI void APIENTRY glFogCoorddv (const GLdouble *coord);
+GLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue);
+GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v);
+GLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue);
+GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v);
+GLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue);
+GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v);
+GLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue);
+GLAPI void APIENTRY glSecondaryColor3iv (const GLint *v);
+GLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue);
+GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v);
+GLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue);
+GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v);
+GLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue);
+GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v);
+GLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue);
+GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v);
+GLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y);
+GLAPI void APIENTRY glWindowPos2dv (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y);
+GLAPI void APIENTRY glWindowPos2fv (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos2i (GLint x, GLint y);
+GLAPI void APIENTRY glWindowPos2iv (const GLint *v);
+GLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y);
+GLAPI void APIENTRY glWindowPos2sv (const GLshort *v);
+GLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glWindowPos3dv (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glWindowPos3fv (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glWindowPos3iv (const GLint *v);
+GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glWindowPos3sv (const GLshort *v);
+GLAPI void APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+GLAPI void APIENTRY glBlendEquation (GLenum mode);
+#endif
+#endif /* GL_VERSION_1_4 */
+
+#ifndef GL_VERSION_1_5
+#define GL_VERSION_1_5 1
+#include <stddef.h>
+typedef ptrdiff_t GLsizeiptr;
+typedef ptrdiff_t GLintptr;
+#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 PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
+typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers);
+typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
+typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, void *data);
+typedef void *(APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access);
+typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids);
+GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids);
+GLAPI GLboolean APIENTRY glIsQuery (GLuint id);
+GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id);
+GLAPI void APIENTRY glEndQuery (GLenum target);
+GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer);
+GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers);
+GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers);
+GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer);
+GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage);
+GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
+GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, void *data);
+GLAPI void *APIENTRY glMapBuffer (GLenum target, GLenum access);
+GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target);
+GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, void **params);
+#endif
+#endif /* GL_VERSION_1_5 */
+
+#ifndef GL_VERSION_2_0
+#define GL_VERSION_2_0 1
+typedef char GLchar;
+#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 PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);
+typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs);
+typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask);
+typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask);
+typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name);
+typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);
+typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void);
+typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);
+typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader);
+typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer);
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program);
+typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader);
+typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0);
+typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);
+typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1);
+typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha);
+GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs);
+GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask);
+GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask);
+GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader);
+GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name);
+GLAPI void APIENTRY glCompileShader (GLuint shader);
+GLAPI GLuint APIENTRY glCreateProgram (void);
+GLAPI GLuint APIENTRY glCreateShader (GLenum type);
+GLAPI void APIENTRY glDeleteProgram (GLuint program);
+GLAPI void APIENTRY glDeleteShader (GLuint shader);
+GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader);
+GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index);
+GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index);
+GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params);
+GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer);
+GLAPI GLboolean APIENTRY glIsProgram (GLuint program);
+GLAPI GLboolean APIENTRY glIsShader (GLuint shader);
+GLAPI void APIENTRY glLinkProgram (GLuint program);
+GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
+GLAPI void APIENTRY glUseProgram (GLuint program);
+GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0);
+GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1);
+GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GLAPI void APIENTRY glUniform1i (GLint location, GLint v0);
+GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1);
+GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2);
+GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glValidateProgram (GLuint program);
+GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x);
+GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x);
+GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y);
+GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y);
+GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+#endif
+#endif /* GL_VERSION_2_0 */
+
+#ifndef GL_VERSION_2_1
+#define GL_VERSION_2_1 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 PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+#endif
+#endif /* GL_VERSION_2_1 */
+
+#ifndef GL_VERSION_3_0
+#define GL_VERSION_3_0 1
+typedef unsigned short GLhalf;
+#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 PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data);
+typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index);
+typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode);
+typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void);
+typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp);
+typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode);
+typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params);
+typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0);
+typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1);
+typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value);
+typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value);
+typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value);
+typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index);
+typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer);
+typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer);
+typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers);
+typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers);
+typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void *(APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length);
+typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array);
+typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays);
+typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays);
+typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data);
+GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data);
+GLAPI void APIENTRY glEnablei (GLenum target, GLuint index);
+GLAPI void APIENTRY glDisablei (GLenum target, GLuint index);
+GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index);
+GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode);
+GLAPI void APIENTRY glEndTransformFeedback (void);
+GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer);
+GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp);
+GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode);
+GLAPI void APIENTRY glEndConditionalRender (void);
+GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x);
+GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y);
+GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x);
+GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y);
+GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z);
+GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params);
+GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name);
+GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0);
+GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1);
+GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2);
+GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params);
+GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value);
+GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value);
+GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value);
+GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+GLAPI const GLubyte *APIENTRY glGetStringi (GLenum name, GLuint index);
+GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer);
+GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer);
+GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers);
+GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers);
+GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer);
+GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer);
+GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers);
+GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers);
+GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target);
+GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGenerateMipmap (GLenum target);
+GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GLAPI void *APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length);
+GLAPI void APIENTRY glBindVertexArray (GLuint array);
+GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays);
+GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays);
+GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array);
+#endif
+#endif /* GL_VERSION_3_0 */
+
+#ifndef GL_VERSION_3_1
+#define GL_VERSION_3_1 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                  0xFFFFFFFFu
+typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
+typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName);
+typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount);
+GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer);
+GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index);
+GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices);
+GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName);
+GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName);
+GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
+#endif
+#endif /* GL_VERSION_3_1 */
+
+#ifndef GL_VERSION_3_2
+#define GL_VERSION_3_2 1
+typedef struct __GLsync *GLsync;
+#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 uint64_t GLuint64;
+typedef int64_t GLint64;
+#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                0xFFFFFFFFFFFFFFFFull
+#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 PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex);
+typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode);
+typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags);
+typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync);
+typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync);
+typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data);
+typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data);
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val);
+typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint maskNumber, GLbitfield mask);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex);
+GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex);
+GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex);
+GLAPI void APIENTRY glProvokingVertex (GLenum mode);
+GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags);
+GLAPI GLboolean APIENTRY glIsSync (GLsync sync);
+GLAPI void APIENTRY glDeleteSync (GLsync sync);
+GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
+GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
+GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *data);
+GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data);
+GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params);
+GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level);
+GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val);
+GLAPI void APIENTRY glSampleMaski (GLuint maskNumber, GLbitfield mask);
+#endif
+#endif /* GL_VERSION_3_2 */
+
+#ifndef GL_VERSION_3_3
+#define GL_VERSION_3_3 1
+#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 PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers);
+typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers);
+typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler);
+typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param);
+typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param);
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value);
+typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value);
+typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value);
+typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords);
+typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords);
+typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color);
+typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color);
+typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color);
+typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name);
+GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers);
+GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers);
+GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler);
+GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler);
+GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param);
+GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param);
+GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param);
+GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param);
+GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param);
+GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target);
+GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params);
+GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params);
+GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor);
+GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);
+GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
+GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value);
+GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value);
+GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value);
+GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value);
+GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value);
+GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value);
+GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords);
+GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords);
+GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords);
+GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords);
+GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords);
+GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords);
+GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color);
+GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color);
+GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color);
+GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color);
+GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color);
+GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color);
+#endif
+#endif /* GL_VERSION_3_3 */
+
+#ifndef GL_VERSION_4_0
+#define GL_VERSION_4_0 1
+#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 PFNGLMINSAMPLESHADINGPROC) (GLfloat value);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect);
+typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x);
+typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params);
+typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name);
+typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values);
+typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);
+typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);
+typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices);
+typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values);
+typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values);
+typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids);
+typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void);
+typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void);
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id);
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream);
+typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id);
+typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMinSampleShading (GLfloat value);
+GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode);
+GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst);
+GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const void *indirect);
+GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect);
+GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x);
+GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params);
+GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name);
+GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name);
+GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values);
+GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);
+GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);
+GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices);
+GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params);
+GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values);
+GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value);
+GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values);
+GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id);
+GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids);
+GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids);
+GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id);
+GLAPI void APIENTRY glPauseTransformFeedback (void);
+GLAPI void APIENTRY glResumeTransformFeedback (void);
+GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id);
+GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream);
+GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id);
+GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index);
+GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params);
+#endif
+#endif /* GL_VERSION_4_0 */
+
+#ifndef GL_VERSION_4_1
+#define GL_VERSION_4_1 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 PFNGLRELEASESHADERCOMPILERPROC) (void);
+typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length);
+typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f);
+typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d);
+typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program);
+typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program);
+typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar *const*strings);
+typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines);
+typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines);
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline);
+typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v);
+typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f);
+typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data);
+typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glReleaseShaderCompiler (void);
+GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length);
+GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);
+GLAPI void APIENTRY glDepthRangef (GLfloat n, GLfloat f);
+GLAPI void APIENTRY glClearDepthf (GLfloat d);
+GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value);
+GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program);
+GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program);
+GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar *const*strings);
+GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline);
+GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines);
+GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines);
+GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline);
+GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params);
+GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0);
+GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0);
+GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0);
+GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0);
+GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1);
+GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1);
+GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1);
+GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2);
+GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);
+GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline);
+GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v);
+GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v);
+GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f);
+GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data);
+GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data);
+#endif
+#endif /* GL_VERSION_4_1 */
+
+#ifndef GL_VERSION_4_2
+#define GL_VERSION_4_2 1
+#define GL_COPY_READ_BUFFER_BINDING       0x8F36
+#define GL_COPY_WRITE_BUFFER_BINDING      0x8F37
+#define GL_TRANSFORM_FEEDBACK_ACTIVE      0x8E24
+#define GL_TRANSFORM_FEEDBACK_PAUSED      0x8E23
+#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 PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance);
+typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers);
+typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount);
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance);
+GLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance);
+GLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance);
+GLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
+GLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params);
+GLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+GLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers);
+GLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+GLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+GLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount);
+GLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount);
+#endif
+#endif /* GL_VERSION_4_2 */
+
+#ifndef GL_VERSION_4_3
+#define GL_VERSION_4_3 1
+typedef void (APIENTRY  *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
+#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 PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect);
+typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (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);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params);
+typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length);
+typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params);
+typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);
+typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name);
+typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding);
+typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
+typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex);
+typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam);
+typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message);
+typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void);
+typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
+typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
+typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label);
+typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
+GLAPI void APIENTRY glDispatchComputeIndirect (GLintptr indirect);
+GLAPI void APIENTRY 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);
+GLAPI void APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params);
+GLAPI void APIENTRY glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth);
+GLAPI void APIENTRY glInvalidateTexImage (GLuint texture, GLint level);
+GLAPI void APIENTRY glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length);
+GLAPI void APIENTRY glInvalidateBufferData (GLuint buffer);
+GLAPI void APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+GLAPI void APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride);
+GLAPI void APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params);
+GLAPI GLuint APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name);
+GLAPI void APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+GLAPI void APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);
+GLAPI GLint APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name);
+GLAPI GLint APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name);
+GLAPI void APIENTRY glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding);
+GLAPI void APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
+GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex);
+GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor);
+GLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+GLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+GLAPI void APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam);
+GLAPI GLuint APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+GLAPI void APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message);
+GLAPI void APIENTRY glPopDebugGroup (void);
+GLAPI void APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
+GLAPI void APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
+GLAPI void APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label);
+GLAPI void APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
+#endif
+#endif /* GL_VERSION_4_3 */
+
+#ifndef GL_VERSION_4_4
+#define GL_VERSION_4_4 1
+#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 PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags);
+typedef void (APIENTRYP PFNGLCLEARTEXIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCLEARTEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLBINDBUFFERSBASEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers);
+typedef void (APIENTRYP PFNGLBINDBUFFERSRANGEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes);
+typedef void (APIENTRYP PFNGLBINDTEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures);
+typedef void (APIENTRYP PFNGLBINDSAMPLERSPROC) (GLuint first, GLsizei count, const GLuint *samplers);
+typedef void (APIENTRYP PFNGLBINDIMAGETEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures);
+typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERSPROC) (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBufferStorage (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags);
+GLAPI void APIENTRY glClearTexImage (GLuint texture, GLint level, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glClearTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glBindBuffersBase (GLenum target, GLuint first, GLsizei count, const GLuint *buffers);
+GLAPI void APIENTRY glBindBuffersRange (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes);
+GLAPI void APIENTRY glBindTextures (GLuint first, GLsizei count, const GLuint *textures);
+GLAPI void APIENTRY glBindSamplers (GLuint first, GLsizei count, const GLuint *samplers);
+GLAPI void APIENTRY glBindImageTextures (GLuint first, GLsizei count, const GLuint *textures);
+GLAPI void APIENTRY glBindVertexBuffers (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides);
+#endif
+#endif /* GL_VERSION_4_4 */
+
+#ifndef GL_VERSION_4_5
+#define GL_VERSION_4_5 1
+#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 PFNGLCLIPCONTROLPROC) (GLenum origin, GLenum depth);
+typedef void (APIENTRYP PFNGLCREATETRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC) (GLuint xfb, GLuint index, GLuint buffer);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC) (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizei size);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKIVPROC) (GLuint xfb, GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint *param);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI64_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint64 *param);
+typedef void (APIENTRYP PFNGLCREATEBUFFERSPROC) (GLsizei n, GLuint *buffers);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEPROC) (GLuint buffer, GLsizei size, const void *data, GLbitfield flags);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAPROC) (GLuint buffer, GLsizei size, const void *data, GLenum usage);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizei size, const void *data);
+typedef void (APIENTRYP PFNGLCOPYNAMEDBUFFERSUBDATAPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizei size);
+typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizei size, GLenum format, GLenum type, const void *data);
+typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERPROC) (GLuint buffer, GLenum access);
+typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEPROC) (GLuint buffer, GLintptr offset, GLsizei length, GLbitfield access);
+typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFERPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC) (GLuint buffer, GLintptr offset, GLsizei length);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVPROC) (GLuint buffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERI64VPROC) (GLuint buffer, GLenum pname, GLint64 *params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVPROC) (GLuint buffer, GLenum pname, void **params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizei size, void *data);
+typedef void (APIENTRYP PFNGLCREATEFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC) (GLuint framebuffer, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC) (GLuint framebuffer, GLenum buf);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC) (GLuint framebuffer, GLenum src);
+typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC) (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments);
+typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC) (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value);
+typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value);
+typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value);
+typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFIPROC) (GLuint framebuffer, GLenum buffer, const GLfloat depth, GLint stencil);
+typedef void (APIENTRYP PFNGLBLITNAMEDFRAMEBUFFERPROC) (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC) (GLuint framebuffer, GLenum target);
+typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC) (GLuint framebuffer, GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLCREATERENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC) (GLuint renderbuffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLCREATETEXTURESPROC) (GLenum target, GLsizei n, GLuint *textures);
+typedef void (APIENTRYP PFNGLTEXTUREBUFFERPROC) (GLuint texture, GLenum internalformat, GLuint buffer);
+typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEPROC) (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizei size);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC) (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC) (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFPROC) (GLuint texture, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVPROC) (GLuint texture, GLenum pname, const GLfloat *param);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIPROC) (GLuint texture, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVPROC) (GLuint texture, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVPROC) (GLuint texture, GLenum pname, const GLuint *params);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVPROC) (GLuint texture, GLenum pname, const GLint *param);
+typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPPROC) (GLuint texture);
+typedef void (APIENTRYP PFNGLBINDTEXTUREUNITPROC) (GLuint unit, GLuint texture);
+typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLsizei bufSize, void *pixels);
+typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVPROC) (GLuint texture, GLint level, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVPROC) (GLuint texture, GLint level, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVPROC) (GLuint texture, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVPROC) (GLuint texture, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVPROC) (GLuint texture, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVPROC) (GLuint texture, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLCREATEVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBPROC) (GLuint vaobj, GLuint index);
+typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBPROC) (GLuint vaobj, GLuint index);
+typedef void (APIENTRYP PFNGLVERTEXARRAYELEMENTBUFFERPROC) (GLuint vaobj, GLuint buffer);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERSPROC) (GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides);
+typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBBINDINGPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex);
+typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBIFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBLFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYBINDINGDIVISORPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor);
+typedef void (APIENTRYP PFNGLGETVERTEXARRAYIVPROC) (GLuint vaobj, GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXEDIVPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXED64IVPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint64 *param);
+typedef void (APIENTRYP PFNGLCREATESAMPLERSPROC) (GLsizei n, GLuint *samplers);
+typedef void (APIENTRYP PFNGLCREATEPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines);
+typedef void (APIENTRYP PFNGLCREATEQUERIESPROC) (GLenum target, GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTI64VPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset);
+typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTIVPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset);
+typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUI64VPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset);
+typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUIVPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset);
+typedef void (APIENTRYP PFNGLMEMORYBARRIERBYREGIONPROC) (GLbitfield barriers);
+typedef void (APIENTRYP PFNGLGETTEXTURESUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels);
+typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSPROC) (void);
+typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint lod, GLsizei bufSize, void *pixels);
+typedef void (APIENTRYP PFNGLGETNTEXIMAGEPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels);
+typedef void (APIENTRYP PFNGLGETNUNIFORMDVPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMFVPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMUIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+typedef void (APIENTRYP PFNGLREADNPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+typedef void (APIENTRYP PFNGLGETNMAPDVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v);
+typedef void (APIENTRYP PFNGLGETNMAPFVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v);
+typedef void (APIENTRYP PFNGLGETNMAPIVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v);
+typedef void (APIENTRYP PFNGLGETNPIXELMAPFVPROC) (GLenum map, GLsizei bufSize, GLfloat *values);
+typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVPROC) (GLenum map, GLsizei bufSize, GLuint *values);
+typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVPROC) (GLenum map, GLsizei bufSize, GLushort *values);
+typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEPROC) (GLsizei bufSize, GLubyte *pattern);
+typedef void (APIENTRYP PFNGLGETNCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table);
+typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image);
+typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span);
+typedef void (APIENTRYP PFNGLGETNHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+typedef void (APIENTRYP PFNGLGETNMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+typedef void (APIENTRYP PFNGLTEXTUREBARRIERPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glClipControl (GLenum origin, GLenum depth);
+GLAPI void APIENTRY glCreateTransformFeedbacks (GLsizei n, GLuint *ids);
+GLAPI void APIENTRY glTransformFeedbackBufferBase (GLuint xfb, GLuint index, GLuint buffer);
+GLAPI void APIENTRY glTransformFeedbackBufferRange (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizei size);
+GLAPI void APIENTRY glGetTransformFeedbackiv (GLuint xfb, GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetTransformFeedbacki_v (GLuint xfb, GLenum pname, GLuint index, GLint *param);
+GLAPI void APIENTRY glGetTransformFeedbacki64_v (GLuint xfb, GLenum pname, GLuint index, GLint64 *param);
+GLAPI void APIENTRY glCreateBuffers (GLsizei n, GLuint *buffers);
+GLAPI void APIENTRY glNamedBufferStorage (GLuint buffer, GLsizei size, const void *data, GLbitfield flags);
+GLAPI void APIENTRY glNamedBufferData (GLuint buffer, GLsizei size, const void *data, GLenum usage);
+GLAPI void APIENTRY glNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizei size, const void *data);
+GLAPI void APIENTRY glCopyNamedBufferSubData (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizei size);
+GLAPI void APIENTRY glClearNamedBufferData (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glClearNamedBufferSubData (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizei size, GLenum format, GLenum type, const void *data);
+GLAPI void *APIENTRY glMapNamedBuffer (GLuint buffer, GLenum access);
+GLAPI void *APIENTRY glMapNamedBufferRange (GLuint buffer, GLintptr offset, GLsizei length, GLbitfield access);
+GLAPI GLboolean APIENTRY glUnmapNamedBuffer (GLuint buffer);
+GLAPI void APIENTRY glFlushMappedNamedBufferRange (GLuint buffer, GLintptr offset, GLsizei length);
+GLAPI void APIENTRY glGetNamedBufferParameteriv (GLuint buffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetNamedBufferParameteri64v (GLuint buffer, GLenum pname, GLint64 *params);
+GLAPI void APIENTRY glGetNamedBufferPointerv (GLuint buffer, GLenum pname, void **params);
+GLAPI void APIENTRY glGetNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizei size, void *data);
+GLAPI void APIENTRY glCreateFramebuffers (GLsizei n, GLuint *framebuffers);
+GLAPI void APIENTRY glNamedFramebufferRenderbuffer (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GLAPI void APIENTRY glNamedFramebufferParameteri (GLuint framebuffer, GLenum pname, GLint param);
+GLAPI void APIENTRY glNamedFramebufferTexture (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level);
+GLAPI void APIENTRY glNamedFramebufferTextureLayer (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GLAPI void APIENTRY glNamedFramebufferDrawBuffer (GLuint framebuffer, GLenum buf);
+GLAPI void APIENTRY glNamedFramebufferDrawBuffers (GLuint framebuffer, GLsizei n, const GLenum *bufs);
+GLAPI void APIENTRY glNamedFramebufferReadBuffer (GLuint framebuffer, GLenum src);
+GLAPI void APIENTRY glInvalidateNamedFramebufferData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments);
+GLAPI void APIENTRY glInvalidateNamedFramebufferSubData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glClearNamedFramebufferiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value);
+GLAPI void APIENTRY glClearNamedFramebufferuiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value);
+GLAPI void APIENTRY glClearNamedFramebufferfv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value);
+GLAPI void APIENTRY glClearNamedFramebufferfi (GLuint framebuffer, GLenum buffer, const GLfloat depth, GLint stencil);
+GLAPI void APIENTRY 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);
+GLAPI GLenum APIENTRY glCheckNamedFramebufferStatus (GLuint framebuffer, GLenum target);
+GLAPI void APIENTRY glGetNamedFramebufferParameteriv (GLuint framebuffer, GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameteriv (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params);
+GLAPI void APIENTRY glCreateRenderbuffers (GLsizei n, GLuint *renderbuffers);
+GLAPI void APIENTRY glNamedRenderbufferStorage (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glNamedRenderbufferStorageMultisample (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetNamedRenderbufferParameteriv (GLuint renderbuffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glCreateTextures (GLenum target, GLsizei n, GLuint *textures);
+GLAPI void APIENTRY glTextureBuffer (GLuint texture, GLenum internalformat, GLuint buffer);
+GLAPI void APIENTRY glTextureBufferRange (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizei size);
+GLAPI void APIENTRY glTextureStorage1D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width);
+GLAPI void APIENTRY glTextureStorage2D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glTextureStorage3D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+GLAPI void APIENTRY glTextureStorage2DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTextureStorage3DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glCompressedTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCopyTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glCopyTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glTextureParameterf (GLuint texture, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glTextureParameterfv (GLuint texture, GLenum pname, const GLfloat *param);
+GLAPI void APIENTRY glTextureParameteri (GLuint texture, GLenum pname, GLint param);
+GLAPI void APIENTRY glTextureParameterIiv (GLuint texture, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTextureParameterIuiv (GLuint texture, GLenum pname, const GLuint *params);
+GLAPI void APIENTRY glTextureParameteriv (GLuint texture, GLenum pname, const GLint *param);
+GLAPI void APIENTRY glGenerateTextureMipmap (GLuint texture);
+GLAPI void APIENTRY glBindTextureUnit (GLuint unit, GLuint texture);
+GLAPI void APIENTRY glGetTextureImage (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels);
+GLAPI void APIENTRY glGetCompressedTextureImage (GLuint texture, GLint level, GLsizei bufSize, void *pixels);
+GLAPI void APIENTRY glGetTextureLevelParameterfv (GLuint texture, GLint level, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetTextureLevelParameteriv (GLuint texture, GLint level, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTextureParameterfv (GLuint texture, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetTextureParameterIiv (GLuint texture, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTextureParameterIuiv (GLuint texture, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glGetTextureParameteriv (GLuint texture, GLenum pname, GLint *params);
+GLAPI void APIENTRY glCreateVertexArrays (GLsizei n, GLuint *arrays);
+GLAPI void APIENTRY glDisableVertexArrayAttrib (GLuint vaobj, GLuint index);
+GLAPI void APIENTRY glEnableVertexArrayAttrib (GLuint vaobj, GLuint index);
+GLAPI void APIENTRY glVertexArrayElementBuffer (GLuint vaobj, GLuint buffer);
+GLAPI void APIENTRY glVertexArrayVertexBuffer (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+GLAPI void APIENTRY glVertexArrayVertexBuffers (GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides);
+GLAPI void APIENTRY glVertexArrayAttribBinding (GLuint vaobj, GLuint attribindex, GLuint bindingindex);
+GLAPI void APIENTRY glVertexArrayAttribFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayAttribIFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayAttribLFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayBindingDivisor (GLuint vaobj, GLuint bindingindex, GLuint divisor);
+GLAPI void APIENTRY glGetVertexArrayiv (GLuint vaobj, GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetVertexArrayIndexediv (GLuint vaobj, GLuint index, GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetVertexArrayIndexed64iv (GLuint vaobj, GLuint index, GLenum pname, GLint64 *param);
+GLAPI void APIENTRY glCreateSamplers (GLsizei n, GLuint *samplers);
+GLAPI void APIENTRY glCreateProgramPipelines (GLsizei n, GLuint *pipelines);
+GLAPI void APIENTRY glCreateQueries (GLenum target, GLsizei n, GLuint *ids);
+GLAPI void APIENTRY glGetQueryBufferObjecti64v (GLuint id, GLuint buffer, GLenum pname, GLintptr offset);
+GLAPI void APIENTRY glGetQueryBufferObjectiv (GLuint id, GLuint buffer, GLenum pname, GLintptr offset);
+GLAPI void APIENTRY glGetQueryBufferObjectui64v (GLuint id, GLuint buffer, GLenum pname, GLintptr offset);
+GLAPI void APIENTRY glGetQueryBufferObjectuiv (GLuint id, GLuint buffer, GLenum pname, GLintptr offset);
+GLAPI void APIENTRY glMemoryBarrierByRegion (GLbitfield barriers);
+GLAPI void APIENTRY 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);
+GLAPI void APIENTRY glGetCompressedTextureSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels);
+GLAPI GLenum APIENTRY glGetGraphicsResetStatus (void);
+GLAPI void APIENTRY glGetnCompressedTexImage (GLenum target, GLint lod, GLsizei bufSize, void *pixels);
+GLAPI void APIENTRY glGetnTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels);
+GLAPI void APIENTRY glGetnUniformdv (GLuint program, GLint location, GLsizei bufSize, GLdouble *params);
+GLAPI void APIENTRY glGetnUniformfv (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+GLAPI void APIENTRY glGetnUniformiv (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+GLAPI void APIENTRY glGetnUniformuiv (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+GLAPI void APIENTRY glReadnPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+GLAPI void APIENTRY glGetnMapdv (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v);
+GLAPI void APIENTRY glGetnMapfv (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v);
+GLAPI void APIENTRY glGetnMapiv (GLenum target, GLenum query, GLsizei bufSize, GLint *v);
+GLAPI void APIENTRY glGetnPixelMapfv (GLenum map, GLsizei bufSize, GLfloat *values);
+GLAPI void APIENTRY glGetnPixelMapuiv (GLenum map, GLsizei bufSize, GLuint *values);
+GLAPI void APIENTRY glGetnPixelMapusv (GLenum map, GLsizei bufSize, GLushort *values);
+GLAPI void APIENTRY glGetnPolygonStipple (GLsizei bufSize, GLubyte *pattern);
+GLAPI void APIENTRY glGetnColorTable (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table);
+GLAPI void APIENTRY glGetnConvolutionFilter (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image);
+GLAPI void APIENTRY glGetnSeparableFilter (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span);
+GLAPI void APIENTRY glGetnHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+GLAPI void APIENTRY glGetnMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+GLAPI void APIENTRY glTextureBarrier (void);
+#endif
+#endif /* GL_VERSION_4_5 */
+
+#ifndef GL_ARB_ES2_compatibility
+#define GL_ARB_ES2_compatibility 1
+#endif /* GL_ARB_ES2_compatibility */
+
+#ifndef GL_ARB_ES3_1_compatibility
+#define GL_ARB_ES3_1_compatibility 1
+#endif /* GL_ARB_ES3_1_compatibility */
+
+#ifndef GL_ARB_ES3_compatibility
+#define GL_ARB_ES3_compatibility 1
+#endif /* GL_ARB_ES3_compatibility */
+
+#ifndef GL_ARB_arrays_of_arrays
+#define GL_ARB_arrays_of_arrays 1
+#endif /* GL_ARB_arrays_of_arrays */
+
+#ifndef GL_ARB_base_instance
+#define GL_ARB_base_instance 1
+#endif /* GL_ARB_base_instance */
+
+#ifndef GL_ARB_bindless_texture
+#define GL_ARB_bindless_texture 1
+typedef uint64_t GLuint64EXT;
+#define GL_UNSIGNED_INT64_ARB             0x140F
+typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture);
+typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler);
+typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle);
+typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC) (GLuint64 handle);
+typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLEARBPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);
+typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle, GLenum access);
+typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC) (GLuint64 handle);
+typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64ARBPROC) (GLint location, GLuint64 value);
+typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC) (GLuint program, GLint location, GLuint64 value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle);
+typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64ARBPROC) (GLuint index, GLuint64EXT x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VARBPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VARBPROC) (GLuint index, GLenum pname, GLuint64EXT *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint64 APIENTRY glGetTextureHandleARB (GLuint texture);
+GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleARB (GLuint texture, GLuint sampler);
+GLAPI void APIENTRY glMakeTextureHandleResidentARB (GLuint64 handle);
+GLAPI void APIENTRY glMakeTextureHandleNonResidentARB (GLuint64 handle);
+GLAPI GLuint64 APIENTRY glGetImageHandleARB (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);
+GLAPI void APIENTRY glMakeImageHandleResidentARB (GLuint64 handle, GLenum access);
+GLAPI void APIENTRY glMakeImageHandleNonResidentARB (GLuint64 handle);
+GLAPI void APIENTRY glUniformHandleui64ARB (GLint location, GLuint64 value);
+GLAPI void APIENTRY glUniformHandleui64vARB (GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glProgramUniformHandleui64ARB (GLuint program, GLint location, GLuint64 value);
+GLAPI void APIENTRY glProgramUniformHandleui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+GLAPI GLboolean APIENTRY glIsTextureHandleResidentARB (GLuint64 handle);
+GLAPI GLboolean APIENTRY glIsImageHandleResidentARB (GLuint64 handle);
+GLAPI void APIENTRY glVertexAttribL1ui64ARB (GLuint index, GLuint64EXT x);
+GLAPI void APIENTRY glVertexAttribL1ui64vARB (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glGetVertexAttribLui64vARB (GLuint index, GLenum pname, GLuint64EXT *params);
+#endif
+#endif /* GL_ARB_bindless_texture */
+
+#ifndef GL_ARB_blend_func_extended
+#define GL_ARB_blend_func_extended 1
+#endif /* GL_ARB_blend_func_extended */
+
+#ifndef GL_ARB_buffer_storage
+#define GL_ARB_buffer_storage 1
+#endif /* GL_ARB_buffer_storage */
+
+#ifndef GL_ARB_cl_event
+#define GL_ARB_cl_event 1
+struct _cl_context;
+struct _cl_event;
+#define GL_SYNC_CL_EVENT_ARB              0x8240
+#define GL_SYNC_CL_EVENT_COMPLETE_ARB     0x8241
+typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context *context, struct _cl_event *event, GLbitfield flags);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context *context, struct _cl_event *event, GLbitfield flags);
+#endif
+#endif /* GL_ARB_cl_event */
+
+#ifndef GL_ARB_clear_buffer_object
+#define GL_ARB_clear_buffer_object 1
+#endif /* GL_ARB_clear_buffer_object */
+
+#ifndef GL_ARB_clear_texture
+#define GL_ARB_clear_texture 1
+#endif /* GL_ARB_clear_texture */
+
+#ifndef GL_ARB_clip_control
+#define GL_ARB_clip_control 1
+#endif /* GL_ARB_clip_control */
+
+#ifndef GL_ARB_color_buffer_float
+#define GL_ARB_color_buffer_float 1
+#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 PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp);
+#endif
+#endif /* GL_ARB_color_buffer_float */
+
+#ifndef GL_ARB_compatibility
+#define GL_ARB_compatibility 1
+#endif /* GL_ARB_compatibility */
+
+#ifndef GL_ARB_compressed_texture_pixel_storage
+#define GL_ARB_compressed_texture_pixel_storage 1
+#endif /* GL_ARB_compressed_texture_pixel_storage */
+
+#ifndef GL_ARB_compute_shader
+#define GL_ARB_compute_shader 1
+#endif /* GL_ARB_compute_shader */
+
+#ifndef GL_ARB_compute_variable_group_size
+#define GL_ARB_compute_variable_group_size 1
+#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 PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY 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);
+#endif
+#endif /* GL_ARB_compute_variable_group_size */
+
+#ifndef GL_ARB_conditional_render_inverted
+#define GL_ARB_conditional_render_inverted 1
+#endif /* GL_ARB_conditional_render_inverted */
+
+#ifndef GL_ARB_conservative_depth
+#define GL_ARB_conservative_depth 1
+#endif /* GL_ARB_conservative_depth */
+
+#ifndef GL_ARB_copy_buffer
+#define GL_ARB_copy_buffer 1
+#endif /* GL_ARB_copy_buffer */
+
+#ifndef GL_ARB_copy_image
+#define GL_ARB_copy_image 1
+#endif /* GL_ARB_copy_image */
+
+#ifndef GL_ARB_cull_distance
+#define GL_ARB_cull_distance 1
+#endif /* GL_ARB_cull_distance */
+
+#ifndef GL_ARB_debug_output
+#define GL_ARB_debug_output 1
+typedef void (APIENTRY  *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam);
+#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 PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const void *userParam);
+typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const void *userParam);
+GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+#endif
+#endif /* GL_ARB_debug_output */
+
+#ifndef GL_ARB_depth_buffer_float
+#define GL_ARB_depth_buffer_float 1
+#endif /* GL_ARB_depth_buffer_float */
+
+#ifndef GL_ARB_depth_clamp
+#define GL_ARB_depth_clamp 1
+#endif /* GL_ARB_depth_clamp */
+
+#ifndef GL_ARB_depth_texture
+#define GL_ARB_depth_texture 1
+#define GL_DEPTH_COMPONENT16_ARB          0x81A5
+#define GL_DEPTH_COMPONENT24_ARB          0x81A6
+#define GL_DEPTH_COMPONENT32_ARB          0x81A7
+#define GL_TEXTURE_DEPTH_SIZE_ARB         0x884A
+#define GL_DEPTH_TEXTURE_MODE_ARB         0x884B
+#endif /* GL_ARB_depth_texture */
+
+#ifndef GL_ARB_derivative_control
+#define GL_ARB_derivative_control 1
+#endif /* GL_ARB_derivative_control */
+
+#ifndef GL_ARB_direct_state_access
+#define GL_ARB_direct_state_access 1
+#endif /* GL_ARB_direct_state_access */
+
+#ifndef GL_ARB_draw_buffers
+#define GL_ARB_draw_buffers 1
+#define GL_MAX_DRAW_BUFFERS_ARB           0x8824
+#define GL_DRAW_BUFFER0_ARB               0x8825
+#define GL_DRAW_BUFFER1_ARB               0x8826
+#define GL_DRAW_BUFFER2_ARB               0x8827
+#define GL_DRAW_BUFFER3_ARB               0x8828
+#define GL_DRAW_BUFFER4_ARB               0x8829
+#define GL_DRAW_BUFFER5_ARB               0x882A
+#define GL_DRAW_BUFFER6_ARB               0x882B
+#define GL_DRAW_BUFFER7_ARB               0x882C
+#define GL_DRAW_BUFFER8_ARB               0x882D
+#define GL_DRAW_BUFFER9_ARB               0x882E
+#define GL_DRAW_BUFFER10_ARB              0x882F
+#define GL_DRAW_BUFFER11_ARB              0x8830
+#define GL_DRAW_BUFFER12_ARB              0x8831
+#define GL_DRAW_BUFFER13_ARB              0x8832
+#define GL_DRAW_BUFFER14_ARB              0x8833
+#define GL_DRAW_BUFFER15_ARB              0x8834
+typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs);
+#endif
+#endif /* GL_ARB_draw_buffers */
+
+#ifndef GL_ARB_draw_buffers_blend
+#define GL_ARB_draw_buffers_blend 1
+typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode);
+GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst);
+GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+#endif
+#endif /* GL_ARB_draw_buffers_blend */
+
+#ifndef GL_ARB_draw_elements_base_vertex
+#define GL_ARB_draw_elements_base_vertex 1
+#endif /* GL_ARB_draw_elements_base_vertex */
+
+#ifndef GL_ARB_draw_indirect
+#define GL_ARB_draw_indirect 1
+#endif /* GL_ARB_draw_indirect */
+
+#ifndef GL_ARB_draw_instanced
+#define GL_ARB_draw_instanced 1
+typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
+GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+#endif
+#endif /* GL_ARB_draw_instanced */
+
+#ifndef GL_ARB_enhanced_layouts
+#define GL_ARB_enhanced_layouts 1
+#endif /* GL_ARB_enhanced_layouts */
+
+#ifndef GL_ARB_explicit_attrib_location
+#define GL_ARB_explicit_attrib_location 1
+#endif /* GL_ARB_explicit_attrib_location */
+
+#ifndef GL_ARB_explicit_uniform_location
+#define GL_ARB_explicit_uniform_location 1
+#endif /* GL_ARB_explicit_uniform_location */
+
+#ifndef GL_ARB_fragment_coord_conventions
+#define GL_ARB_fragment_coord_conventions 1
+#endif /* GL_ARB_fragment_coord_conventions */
+
+#ifndef GL_ARB_fragment_layer_viewport
+#define GL_ARB_fragment_layer_viewport 1
+#endif /* GL_ARB_fragment_layer_viewport */
+
+#ifndef GL_ARB_fragment_program
+#define GL_ARB_fragment_program 1
+#define GL_FRAGMENT_PROGRAM_ARB           0x8804
+#define GL_PROGRAM_FORMAT_ASCII_ARB       0x8875
+#define GL_PROGRAM_LENGTH_ARB             0x8627
+#define GL_PROGRAM_FORMAT_ARB             0x8876
+#define GL_PROGRAM_BINDING_ARB            0x8677
+#define GL_PROGRAM_INSTRUCTIONS_ARB       0x88A0
+#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB   0x88A1
+#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2
+#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3
+#define GL_PROGRAM_TEMPORARIES_ARB        0x88A4
+#define GL_MAX_PROGRAM_TEMPORARIES_ARB    0x88A5
+#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6
+#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7
+#define GL_PROGRAM_PARAMETERS_ARB         0x88A8
+#define GL_MAX_PROGRAM_PARAMETERS_ARB     0x88A9
+#define GL_PROGRAM_NATIVE_PARAMETERS_ARB  0x88AA
+#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB
+#define GL_PROGRAM_ATTRIBS_ARB            0x88AC
+#define GL_MAX_PROGRAM_ATTRIBS_ARB        0x88AD
+#define GL_PROGRAM_NATIVE_ATTRIBS_ARB     0x88AE
+#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF
+#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4
+#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5
+#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6
+#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB   0x8805
+#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB   0x8806
+#define GL_PROGRAM_TEX_INDIRECTIONS_ARB   0x8807
+#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808
+#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809
+#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A
+#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B
+#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C
+#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D
+#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E
+#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F
+#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810
+#define GL_PROGRAM_STRING_ARB             0x8628
+#define GL_PROGRAM_ERROR_POSITION_ARB     0x864B
+#define GL_CURRENT_MATRIX_ARB             0x8641
+#define GL_TRANSPOSE_CURRENT_MATRIX_ARB   0x88B7
+#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640
+#define GL_MAX_PROGRAM_MATRICES_ARB       0x862F
+#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E
+#define GL_MAX_TEXTURE_COORDS_ARB         0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB    0x8872
+#define GL_PROGRAM_ERROR_STRING_ARB       0x8874
+#define GL_MATRIX0_ARB                    0x88C0
+#define GL_MATRIX1_ARB                    0x88C1
+#define GL_MATRIX2_ARB                    0x88C2
+#define GL_MATRIX3_ARB                    0x88C3
+#define GL_MATRIX4_ARB                    0x88C4
+#define GL_MATRIX5_ARB                    0x88C5
+#define GL_MATRIX6_ARB                    0x88C6
+#define GL_MATRIX7_ARB                    0x88C7
+#define GL_MATRIX8_ARB                    0x88C8
+#define GL_MATRIX9_ARB                    0x88C9
+#define GL_MATRIX10_ARB                   0x88CA
+#define GL_MATRIX11_ARB                   0x88CB
+#define GL_MATRIX12_ARB                   0x88CC
+#define GL_MATRIX13_ARB                   0x88CD
+#define GL_MATRIX14_ARB                   0x88CE
+#define GL_MATRIX15_ARB                   0x88CF
+#define GL_MATRIX16_ARB                   0x88D0
+#define GL_MATRIX17_ARB                   0x88D1
+#define GL_MATRIX18_ARB                   0x88D2
+#define GL_MATRIX19_ARB                   0x88D3
+#define GL_MATRIX20_ARB                   0x88D4
+#define GL_MATRIX21_ARB                   0x88D5
+#define GL_MATRIX22_ARB                   0x88D6
+#define GL_MATRIX23_ARB                   0x88D7
+#define GL_MATRIX24_ARB                   0x88D8
+#define GL_MATRIX25_ARB                   0x88D9
+#define GL_MATRIX26_ARB                   0x88DA
+#define GL_MATRIX27_ARB                   0x88DB
+#define GL_MATRIX28_ARB                   0x88DC
+#define GL_MATRIX29_ARB                   0x88DD
+#define GL_MATRIX30_ARB                   0x88DE
+#define GL_MATRIX31_ARB                   0x88DF
+typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const void *string);
+typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program);
+typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs);
+typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, void *string);
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const void *string);
+GLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program);
+GLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs);
+GLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs);
+GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params);
+GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params);
+GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params);
+GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params);
+GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params);
+GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params);
+GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params);
+GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params);
+GLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, void *string);
+GLAPI GLboolean APIENTRY glIsProgramARB (GLuint program);
+#endif
+#endif /* GL_ARB_fragment_program */
+
+#ifndef GL_ARB_fragment_program_shadow
+#define GL_ARB_fragment_program_shadow 1
+#endif /* GL_ARB_fragment_program_shadow */
+
+#ifndef GL_ARB_fragment_shader
+#define GL_ARB_fragment_shader 1
+#define GL_FRAGMENT_SHADER_ARB            0x8B30
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B
+#endif /* GL_ARB_fragment_shader */
+
+#ifndef GL_ARB_framebuffer_no_attachments
+#define GL_ARB_framebuffer_no_attachments 1
+#endif /* GL_ARB_framebuffer_no_attachments */
+
+#ifndef GL_ARB_framebuffer_object
+#define GL_ARB_framebuffer_object 1
+#endif /* GL_ARB_framebuffer_object */
+
+#ifndef GL_ARB_framebuffer_sRGB
+#define GL_ARB_framebuffer_sRGB 1
+#endif /* GL_ARB_framebuffer_sRGB */
+
+#ifndef GL_ARB_geometry_shader4
+#define GL_ARB_geometry_shader4 1
+#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 PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value);
+GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
+#endif
+#endif /* GL_ARB_geometry_shader4 */
+
+#ifndef GL_ARB_get_program_binary
+#define GL_ARB_get_program_binary 1
+#endif /* GL_ARB_get_program_binary */
+
+#ifndef GL_ARB_get_texture_sub_image
+#define GL_ARB_get_texture_sub_image 1
+#endif /* GL_ARB_get_texture_sub_image */
+
+#ifndef GL_ARB_gpu_shader5
+#define GL_ARB_gpu_shader5 1
+#endif /* GL_ARB_gpu_shader5 */
+
+#ifndef GL_ARB_gpu_shader_fp64
+#define GL_ARB_gpu_shader_fp64 1
+#endif /* GL_ARB_gpu_shader_fp64 */
+
+#ifndef GL_ARB_half_float_pixel
+#define GL_ARB_half_float_pixel 1
+typedef unsigned short GLhalfARB;
+#define GL_HALF_FLOAT_ARB                 0x140B
+#endif /* GL_ARB_half_float_pixel */
+
+#ifndef GL_ARB_half_float_vertex
+#define GL_ARB_half_float_vertex 1
+#endif /* GL_ARB_half_float_vertex */
+
+#ifndef GL_ARB_imaging
+#define GL_ARB_imaging 1
+#define GL_BLEND_COLOR                    0x8005
+#define GL_BLEND_EQUATION                 0x8009
+#define GL_CONVOLUTION_1D                 0x8010
+#define GL_CONVOLUTION_2D                 0x8011
+#define GL_SEPARABLE_2D                   0x8012
+#define GL_CONVOLUTION_BORDER_MODE        0x8013
+#define GL_CONVOLUTION_FILTER_SCALE       0x8014
+#define GL_CONVOLUTION_FILTER_BIAS        0x8015
+#define GL_REDUCE                         0x8016
+#define GL_CONVOLUTION_FORMAT             0x8017
+#define GL_CONVOLUTION_WIDTH              0x8018
+#define GL_CONVOLUTION_HEIGHT             0x8019
+#define GL_MAX_CONVOLUTION_WIDTH          0x801A
+#define GL_MAX_CONVOLUTION_HEIGHT         0x801B
+#define GL_POST_CONVOLUTION_RED_SCALE     0x801C
+#define GL_POST_CONVOLUTION_GREEN_SCALE   0x801D
+#define GL_POST_CONVOLUTION_BLUE_SCALE    0x801E
+#define GL_POST_CONVOLUTION_ALPHA_SCALE   0x801F
+#define GL_POST_CONVOLUTION_RED_BIAS      0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS    0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS     0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS    0x8023
+#define GL_HISTOGRAM                      0x8024
+#define GL_PROXY_HISTOGRAM                0x8025
+#define GL_HISTOGRAM_WIDTH                0x8026
+#define GL_HISTOGRAM_FORMAT               0x8027
+#define GL_HISTOGRAM_RED_SIZE             0x8028
+#define GL_HISTOGRAM_GREEN_SIZE           0x8029
+#define GL_HISTOGRAM_BLUE_SIZE            0x802A
+#define GL_HISTOGRAM_ALPHA_SIZE           0x802B
+#define GL_HISTOGRAM_LUMINANCE_SIZE       0x802C
+#define GL_HISTOGRAM_SINK                 0x802D
+#define GL_MINMAX                         0x802E
+#define GL_MINMAX_FORMAT                  0x802F
+#define GL_MINMAX_SINK                    0x8030
+#define GL_TABLE_TOO_LARGE                0x8031
+#define GL_COLOR_MATRIX                   0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH       0x80B2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH   0x80B3
+#define GL_POST_COLOR_MATRIX_RED_SCALE    0x80B4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE  0x80B5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE   0x80B6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE  0x80B7
+#define GL_POST_COLOR_MATRIX_RED_BIAS     0x80B8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS   0x80B9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS    0x80BA
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS   0x80BB
+#define GL_COLOR_TABLE                    0x80D0
+#define GL_POST_CONVOLUTION_COLOR_TABLE   0x80D1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE  0x80D2
+#define GL_PROXY_COLOR_TABLE              0x80D3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5
+#define GL_COLOR_TABLE_SCALE              0x80D6
+#define GL_COLOR_TABLE_BIAS               0x80D7
+#define GL_COLOR_TABLE_FORMAT             0x80D8
+#define GL_COLOR_TABLE_WIDTH              0x80D9
+#define GL_COLOR_TABLE_RED_SIZE           0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE         0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE          0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE         0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE     0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE     0x80DF
+#define GL_CONSTANT_BORDER                0x8151
+#define GL_REPLICATE_BORDER               0x8153
+#define GL_CONVOLUTION_BORDER_COLOR       0x8154
+typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table);
+typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, void *table);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image);
+typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, void *image);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span);
+typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table);
+GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, void *table);
+GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image);
+GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image);
+GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params);
+GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params);
+GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, void *image);
+GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span);
+GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column);
+GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink);
+GLAPI void APIENTRY glResetHistogram (GLenum target);
+GLAPI void APIENTRY glResetMinmax (GLenum target);
+#endif
+#endif /* GL_ARB_imaging */
+
+#ifndef GL_ARB_indirect_parameters
+#define GL_ARB_indirect_parameters 1
+#define GL_PARAMETER_BUFFER_ARB           0x80EE
+#define GL_PARAMETER_BUFFER_BINDING_ARB   0x80EF
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysIndirectCountARB (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride);
+#endif
+#endif /* GL_ARB_indirect_parameters */
+
+#ifndef GL_ARB_instanced_arrays
+#define GL_ARB_instanced_arrays 1
+#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE
+typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor);
+#endif
+#endif /* GL_ARB_instanced_arrays */
+
+#ifndef GL_ARB_internalformat_query
+#define GL_ARB_internalformat_query 1
+#endif /* GL_ARB_internalformat_query */
+
+#ifndef GL_ARB_internalformat_query2
+#define GL_ARB_internalformat_query2 1
+#define GL_SRGB_DECODE_ARB                0x8299
+#endif /* GL_ARB_internalformat_query2 */
+
+#ifndef GL_ARB_invalidate_subdata
+#define GL_ARB_invalidate_subdata 1
+#endif /* GL_ARB_invalidate_subdata */
+
+#ifndef GL_ARB_map_buffer_alignment
+#define GL_ARB_map_buffer_alignment 1
+#endif /* GL_ARB_map_buffer_alignment */
+
+#ifndef GL_ARB_map_buffer_range
+#define GL_ARB_map_buffer_range 1
+#endif /* GL_ARB_map_buffer_range */
+
+#ifndef GL_ARB_matrix_palette
+#define GL_ARB_matrix_palette 1
+#define GL_MATRIX_PALETTE_ARB             0x8840
+#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841
+#define GL_MAX_PALETTE_MATRICES_ARB       0x8842
+#define GL_CURRENT_PALETTE_MATRIX_ARB     0x8843
+#define GL_MATRIX_INDEX_ARRAY_ARB         0x8844
+#define GL_CURRENT_MATRIX_INDEX_ARB       0x8845
+#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB    0x8846
+#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB    0x8847
+#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB  0x8848
+#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849
+typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index);
+typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices);
+typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices);
+typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices);
+typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index);
+GLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices);
+GLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices);
+GLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices);
+GLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer);
+#endif
+#endif /* GL_ARB_matrix_palette */
+
+#ifndef GL_ARB_multi_bind
+#define GL_ARB_multi_bind 1
+#endif /* GL_ARB_multi_bind */
+
+#ifndef GL_ARB_multi_draw_indirect
+#define GL_ARB_multi_draw_indirect 1
+#endif /* GL_ARB_multi_draw_indirect */
+
+#ifndef GL_ARB_multisample
+#define GL_ARB_multisample 1
+#define GL_MULTISAMPLE_ARB                0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB   0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_ARB        0x809F
+#define GL_SAMPLE_COVERAGE_ARB            0x80A0
+#define GL_SAMPLE_BUFFERS_ARB             0x80A8
+#define GL_SAMPLES_ARB                    0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE_ARB      0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT_ARB     0x80AB
+#define GL_MULTISAMPLE_BIT_ARB            0x20000000
+typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLfloat value, GLboolean invert);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSampleCoverageARB (GLfloat value, GLboolean invert);
+#endif
+#endif /* GL_ARB_multisample */
+
+#ifndef GL_ARB_multitexture
+#define GL_ARB_multitexture 1
+#define GL_TEXTURE0_ARB                   0x84C0
+#define GL_TEXTURE1_ARB                   0x84C1
+#define GL_TEXTURE2_ARB                   0x84C2
+#define GL_TEXTURE3_ARB                   0x84C3
+#define GL_TEXTURE4_ARB                   0x84C4
+#define GL_TEXTURE5_ARB                   0x84C5
+#define GL_TEXTURE6_ARB                   0x84C6
+#define GL_TEXTURE7_ARB                   0x84C7
+#define GL_TEXTURE8_ARB                   0x84C8
+#define GL_TEXTURE9_ARB                   0x84C9
+#define GL_TEXTURE10_ARB                  0x84CA
+#define GL_TEXTURE11_ARB                  0x84CB
+#define GL_TEXTURE12_ARB                  0x84CC
+#define GL_TEXTURE13_ARB                  0x84CD
+#define GL_TEXTURE14_ARB                  0x84CE
+#define GL_TEXTURE15_ARB                  0x84CF
+#define GL_TEXTURE16_ARB                  0x84D0
+#define GL_TEXTURE17_ARB                  0x84D1
+#define GL_TEXTURE18_ARB                  0x84D2
+#define GL_TEXTURE19_ARB                  0x84D3
+#define GL_TEXTURE20_ARB                  0x84D4
+#define GL_TEXTURE21_ARB                  0x84D5
+#define GL_TEXTURE22_ARB                  0x84D6
+#define GL_TEXTURE23_ARB                  0x84D7
+#define GL_TEXTURE24_ARB                  0x84D8
+#define GL_TEXTURE25_ARB                  0x84D9
+#define GL_TEXTURE26_ARB                  0x84DA
+#define GL_TEXTURE27_ARB                  0x84DB
+#define GL_TEXTURE28_ARB                  0x84DC
+#define GL_TEXTURE29_ARB                  0x84DD
+#define GL_TEXTURE30_ARB                  0x84DE
+#define GL_TEXTURE31_ARB                  0x84DF
+#define GL_ACTIVE_TEXTURE_ARB             0x84E0
+#define GL_CLIENT_ACTIVE_TEXTURE_ARB      0x84E1
+#define GL_MAX_TEXTURE_UNITS_ARB          0x84E2
+typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glActiveTextureARB (GLenum texture);
+GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture);
+GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s);
+GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s);
+GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s);
+GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s);
+GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t);
+GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t);
+GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t);
+GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t);
+GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r);
+GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r);
+GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v);
+GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v);
+GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v);
+GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q);
+GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v);
+GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v);
+#endif
+#endif /* GL_ARB_multitexture */
+
+#ifndef GL_ARB_occlusion_query
+#define GL_ARB_occlusion_query 1
+#define GL_QUERY_COUNTER_BITS_ARB         0x8864
+#define GL_CURRENT_QUERY_ARB              0x8865
+#define GL_QUERY_RESULT_ARB               0x8866
+#define GL_QUERY_RESULT_AVAILABLE_ARB     0x8867
+#define GL_SAMPLES_PASSED_ARB             0x8914
+typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids);
+GLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids);
+GLAPI GLboolean APIENTRY glIsQueryARB (GLuint id);
+GLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id);
+GLAPI void APIENTRY glEndQueryARB (GLenum target);
+GLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params);
+#endif
+#endif /* GL_ARB_occlusion_query */
+
+#ifndef GL_ARB_occlusion_query2
+#define GL_ARB_occlusion_query2 1
+#endif /* GL_ARB_occlusion_query2 */
+
+#ifndef GL_ARB_pipeline_statistics_query
+#define GL_ARB_pipeline_statistics_query 1
+#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
+#endif /* GL_ARB_pipeline_statistics_query */
+
+#ifndef GL_ARB_pixel_buffer_object
+#define GL_ARB_pixel_buffer_object 1
+#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
+#endif /* GL_ARB_pixel_buffer_object */
+
+#ifndef GL_ARB_point_parameters
+#define GL_ARB_point_parameters 1
+#define GL_POINT_SIZE_MIN_ARB             0x8126
+#define GL_POINT_SIZE_MAX_ARB             0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_ARB  0x8128
+#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params);
+#endif
+#endif /* GL_ARB_point_parameters */
+
+#ifndef GL_ARB_point_sprite
+#define GL_ARB_point_sprite 1
+#define GL_POINT_SPRITE_ARB               0x8861
+#define GL_COORD_REPLACE_ARB              0x8862
+#endif /* GL_ARB_point_sprite */
+
+#ifndef GL_ARB_program_interface_query
+#define GL_ARB_program_interface_query 1
+#endif /* GL_ARB_program_interface_query */
+
+#ifndef GL_ARB_provoking_vertex
+#define GL_ARB_provoking_vertex 1
+#endif /* GL_ARB_provoking_vertex */
+
+#ifndef GL_ARB_query_buffer_object
+#define GL_ARB_query_buffer_object 1
+#endif /* GL_ARB_query_buffer_object */
+
+#ifndef GL_ARB_robust_buffer_access_behavior
+#define GL_ARB_robust_buffer_access_behavior 1
+#endif /* GL_ARB_robust_buffer_access_behavior */
+
+#ifndef GL_ARB_robustness
+#define GL_ARB_robustness 1
+#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 PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void);
+typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img);
+typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, void *img);
+typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v);
+typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v);
+typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v);
+typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values);
+typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values);
+typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values);
+typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern);
+typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table);
+typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image);
+typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span);
+typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void);
+GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img);
+GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, void *img);
+GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params);
+GLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v);
+GLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v);
+GLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v);
+GLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values);
+GLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values);
+GLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values);
+GLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern);
+GLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table);
+GLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image);
+GLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span);
+GLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+GLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values);
+#endif
+#endif /* GL_ARB_robustness */
+
+#ifndef GL_ARB_robustness_isolation
+#define GL_ARB_robustness_isolation 1
+#endif /* GL_ARB_robustness_isolation */
+
+#ifndef GL_ARB_sample_shading
+#define GL_ARB_sample_shading 1
+#define GL_SAMPLE_SHADING_ARB             0x8C36
+#define GL_MIN_SAMPLE_SHADING_VALUE_ARB   0x8C37
+typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLfloat value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value);
+#endif
+#endif /* GL_ARB_sample_shading */
+
+#ifndef GL_ARB_sampler_objects
+#define GL_ARB_sampler_objects 1
+#endif /* GL_ARB_sampler_objects */
+
+#ifndef GL_ARB_seamless_cube_map
+#define GL_ARB_seamless_cube_map 1
+#endif /* GL_ARB_seamless_cube_map */
+
+#ifndef GL_ARB_seamless_cubemap_per_texture
+#define GL_ARB_seamless_cubemap_per_texture 1
+#endif /* GL_ARB_seamless_cubemap_per_texture */
+
+#ifndef GL_ARB_separate_shader_objects
+#define GL_ARB_separate_shader_objects 1
+#endif /* GL_ARB_separate_shader_objects */
+
+#ifndef GL_ARB_shader_atomic_counters
+#define GL_ARB_shader_atomic_counters 1
+#endif /* GL_ARB_shader_atomic_counters */
+
+#ifndef GL_ARB_shader_bit_encoding
+#define GL_ARB_shader_bit_encoding 1
+#endif /* GL_ARB_shader_bit_encoding */
+
+#ifndef GL_ARB_shader_draw_parameters
+#define GL_ARB_shader_draw_parameters 1
+#endif /* GL_ARB_shader_draw_parameters */
+
+#ifndef GL_ARB_shader_group_vote
+#define GL_ARB_shader_group_vote 1
+#endif /* GL_ARB_shader_group_vote */
+
+#ifndef GL_ARB_shader_image_load_store
+#define GL_ARB_shader_image_load_store 1
+#endif /* GL_ARB_shader_image_load_store */
+
+#ifndef GL_ARB_shader_image_size
+#define GL_ARB_shader_image_size 1
+#endif /* GL_ARB_shader_image_size */
+
+#ifndef GL_ARB_shader_objects
+#define GL_ARB_shader_objects 1
+#ifdef __APPLE__
+typedef void *GLhandleARB;
+#else
+typedef unsigned int GLhandleARB;
+#endif
+typedef char GLcharARB;
+#define GL_PROGRAM_OBJECT_ARB             0x8B40
+#define GL_SHADER_OBJECT_ARB              0x8B48
+#define GL_OBJECT_TYPE_ARB                0x8B4E
+#define GL_OBJECT_SUBTYPE_ARB             0x8B4F
+#define GL_FLOAT_VEC2_ARB                 0x8B50
+#define GL_FLOAT_VEC3_ARB                 0x8B51
+#define GL_FLOAT_VEC4_ARB                 0x8B52
+#define GL_INT_VEC2_ARB                   0x8B53
+#define GL_INT_VEC3_ARB                   0x8B54
+#define GL_INT_VEC4_ARB                   0x8B55
+#define GL_BOOL_ARB                       0x8B56
+#define GL_BOOL_VEC2_ARB                  0x8B57
+#define GL_BOOL_VEC3_ARB                  0x8B58
+#define GL_BOOL_VEC4_ARB                  0x8B59
+#define GL_FLOAT_MAT2_ARB                 0x8B5A
+#define GL_FLOAT_MAT3_ARB                 0x8B5B
+#define GL_FLOAT_MAT4_ARB                 0x8B5C
+#define GL_SAMPLER_1D_ARB                 0x8B5D
+#define GL_SAMPLER_2D_ARB                 0x8B5E
+#define GL_SAMPLER_3D_ARB                 0x8B5F
+#define GL_SAMPLER_CUBE_ARB               0x8B60
+#define GL_SAMPLER_1D_SHADOW_ARB          0x8B61
+#define GL_SAMPLER_2D_SHADOW_ARB          0x8B62
+#define GL_SAMPLER_2D_RECT_ARB            0x8B63
+#define GL_SAMPLER_2D_RECT_SHADOW_ARB     0x8B64
+#define GL_OBJECT_DELETE_STATUS_ARB       0x8B80
+#define GL_OBJECT_COMPILE_STATUS_ARB      0x8B81
+#define GL_OBJECT_LINK_STATUS_ARB         0x8B82
+#define GL_OBJECT_VALIDATE_STATUS_ARB     0x8B83
+#define GL_OBJECT_INFO_LOG_LENGTH_ARB     0x8B84
+#define GL_OBJECT_ATTACHED_OBJECTS_ARB    0x8B85
+#define GL_OBJECT_ACTIVE_UNIFORMS_ARB     0x8B86
+#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87
+#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88
+typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj);
+typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname);
+typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj);
+typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType);
+typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length);
+typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj);
+typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void);
+typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj);
+typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj);
+typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj);
+typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj);
+typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0);
+typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1);
+typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0);
+typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1);
+typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
+typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj);
+typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name);
+typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
+typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params);
+typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj);
+GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname);
+GLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj);
+GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType);
+GLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length);
+GLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj);
+GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void);
+GLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj);
+GLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj);
+GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj);
+GLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj);
+GLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0);
+GLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1);
+GLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0);
+GLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1);
+GLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2);
+GLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
+GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj);
+GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name);
+GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
+GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params);
+GLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params);
+GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source);
+#endif
+#endif /* GL_ARB_shader_objects */
+
+#ifndef GL_ARB_shader_precision
+#define GL_ARB_shader_precision 1
+#endif /* GL_ARB_shader_precision */
+
+#ifndef GL_ARB_shader_stencil_export
+#define GL_ARB_shader_stencil_export 1
+#endif /* GL_ARB_shader_stencil_export */
+
+#ifndef GL_ARB_shader_storage_buffer_object
+#define GL_ARB_shader_storage_buffer_object 1
+#endif /* GL_ARB_shader_storage_buffer_object */
+
+#ifndef GL_ARB_shader_subroutine
+#define GL_ARB_shader_subroutine 1
+#endif /* GL_ARB_shader_subroutine */
+
+#ifndef GL_ARB_shader_texture_image_samples
+#define GL_ARB_shader_texture_image_samples 1
+#endif /* GL_ARB_shader_texture_image_samples */
+
+#ifndef GL_ARB_shader_texture_lod
+#define GL_ARB_shader_texture_lod 1
+#endif /* GL_ARB_shader_texture_lod */
+
+#ifndef GL_ARB_shading_language_100
+#define GL_ARB_shading_language_100 1
+#define GL_SHADING_LANGUAGE_VERSION_ARB   0x8B8C
+#endif /* GL_ARB_shading_language_100 */
+
+#ifndef GL_ARB_shading_language_420pack
+#define GL_ARB_shading_language_420pack 1
+#endif /* GL_ARB_shading_language_420pack */
+
+#ifndef GL_ARB_shading_language_include
+#define GL_ARB_shading_language_include 1
+#define GL_SHADER_INCLUDE_ARB             0x8DAE
+#define GL_NAMED_STRING_LENGTH_ARB        0x8DE9
+#define GL_NAMED_STRING_TYPE_ARB          0x8DEA
+typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string);
+typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name);
+typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length);
+typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string);
+typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string);
+GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name);
+GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length);
+GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name);
+GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string);
+GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params);
+#endif
+#endif /* GL_ARB_shading_language_include */
+
+#ifndef GL_ARB_shading_language_packing
+#define GL_ARB_shading_language_packing 1
+#endif /* GL_ARB_shading_language_packing */
+
+#ifndef GL_ARB_shadow
+#define GL_ARB_shadow 1
+#define GL_TEXTURE_COMPARE_MODE_ARB       0x884C
+#define GL_TEXTURE_COMPARE_FUNC_ARB       0x884D
+#define GL_COMPARE_R_TO_TEXTURE_ARB       0x884E
+#endif /* GL_ARB_shadow */
+
+#ifndef GL_ARB_shadow_ambient
+#define GL_ARB_shadow_ambient 1
+#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF
+#endif /* GL_ARB_shadow_ambient */
+
+#ifndef GL_ARB_sparse_buffer
+#define GL_ARB_sparse_buffer 1
+#define GL_SPARSE_STORAGE_BIT_ARB         0x0400
+#define GL_SPARSE_BUFFER_PAGE_SIZE_ARB    0x82F8
+typedef void (APIENTRYP PFNGLBUFFERPAGECOMMITMENTARBPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBufferPageCommitmentARB (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit);
+GLAPI void APIENTRY glNamedBufferPageCommitmentEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit);
+GLAPI void APIENTRY glNamedBufferPageCommitmentARB (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit);
+#endif
+#endif /* GL_ARB_sparse_buffer */
+
+#ifndef GL_ARB_sparse_texture
+#define GL_ARB_sparse_texture 1
+#define GL_TEXTURE_SPARSE_ARB             0x91A6
+#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB    0x91A7
+#define GL_NUM_SPARSE_LEVELS_ARB          0x91AA
+#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 PFNGLTEXPAGECOMMITMENTARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident);
+#endif
+#endif /* GL_ARB_sparse_texture */
+
+#ifndef GL_ARB_stencil_texturing
+#define GL_ARB_stencil_texturing 1
+#endif /* GL_ARB_stencil_texturing */
+
+#ifndef GL_ARB_sync
+#define GL_ARB_sync 1
+#endif /* GL_ARB_sync */
+
+#ifndef GL_ARB_tessellation_shader
+#define GL_ARB_tessellation_shader 1
+#endif /* GL_ARB_tessellation_shader */
+
+#ifndef GL_ARB_texture_barrier
+#define GL_ARB_texture_barrier 1
+#endif /* GL_ARB_texture_barrier */
+
+#ifndef GL_ARB_texture_border_clamp
+#define GL_ARB_texture_border_clamp 1
+#define GL_CLAMP_TO_BORDER_ARB            0x812D
+#endif /* GL_ARB_texture_border_clamp */
+
+#ifndef GL_ARB_texture_buffer_object
+#define GL_ARB_texture_buffer_object 1
+#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 PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer);
+#endif
+#endif /* GL_ARB_texture_buffer_object */
+
+#ifndef GL_ARB_texture_buffer_object_rgb32
+#define GL_ARB_texture_buffer_object_rgb32 1
+#endif /* GL_ARB_texture_buffer_object_rgb32 */
+
+#ifndef GL_ARB_texture_buffer_range
+#define GL_ARB_texture_buffer_range 1
+#endif /* GL_ARB_texture_buffer_range */
+
+#ifndef GL_ARB_texture_compression
+#define GL_ARB_texture_compression 1
+#define GL_COMPRESSED_ALPHA_ARB           0x84E9
+#define GL_COMPRESSED_LUMINANCE_ARB       0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB
+#define GL_COMPRESSED_INTENSITY_ARB       0x84EC
+#define GL_COMPRESSED_RGB_ARB             0x84ED
+#define GL_COMPRESSED_RGBA_ARB            0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT_ARB   0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0
+#define GL_TEXTURE_COMPRESSED_ARB         0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, void *img);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data);
+GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, void *img);
+#endif
+#endif /* GL_ARB_texture_compression */
+
+#ifndef GL_ARB_texture_compression_bptc
+#define GL_ARB_texture_compression_bptc 1
+#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
+#endif /* GL_ARB_texture_compression_bptc */
+
+#ifndef GL_ARB_texture_compression_rgtc
+#define GL_ARB_texture_compression_rgtc 1
+#endif /* GL_ARB_texture_compression_rgtc */
+
+#ifndef GL_ARB_texture_cube_map
+#define GL_ARB_texture_cube_map 1
+#define GL_NORMAL_MAP_ARB                 0x8511
+#define GL_REFLECTION_MAP_ARB             0x8512
+#define GL_TEXTURE_CUBE_MAP_ARB           0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARB   0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARB     0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB  0x851C
+#endif /* GL_ARB_texture_cube_map */
+
+#ifndef GL_ARB_texture_cube_map_array
+#define GL_ARB_texture_cube_map_array 1
+#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
+#endif /* GL_ARB_texture_cube_map_array */
+
+#ifndef GL_ARB_texture_env_add
+#define GL_ARB_texture_env_add 1
+#endif /* GL_ARB_texture_env_add */
+
+#ifndef GL_ARB_texture_env_combine
+#define GL_ARB_texture_env_combine 1
+#define GL_COMBINE_ARB                    0x8570
+#define GL_COMBINE_RGB_ARB                0x8571
+#define GL_COMBINE_ALPHA_ARB              0x8572
+#define GL_SOURCE0_RGB_ARB                0x8580
+#define GL_SOURCE1_RGB_ARB                0x8581
+#define GL_SOURCE2_RGB_ARB                0x8582
+#define GL_SOURCE0_ALPHA_ARB              0x8588
+#define GL_SOURCE1_ALPHA_ARB              0x8589
+#define GL_SOURCE2_ALPHA_ARB              0x858A
+#define GL_OPERAND0_RGB_ARB               0x8590
+#define GL_OPERAND1_RGB_ARB               0x8591
+#define GL_OPERAND2_RGB_ARB               0x8592
+#define GL_OPERAND0_ALPHA_ARB             0x8598
+#define GL_OPERAND1_ALPHA_ARB             0x8599
+#define GL_OPERAND2_ALPHA_ARB             0x859A
+#define GL_RGB_SCALE_ARB                  0x8573
+#define GL_ADD_SIGNED_ARB                 0x8574
+#define GL_INTERPOLATE_ARB                0x8575
+#define GL_SUBTRACT_ARB                   0x84E7
+#define GL_CONSTANT_ARB                   0x8576
+#define GL_PRIMARY_COLOR_ARB              0x8577
+#define GL_PREVIOUS_ARB                   0x8578
+#endif /* GL_ARB_texture_env_combine */
+
+#ifndef GL_ARB_texture_env_crossbar
+#define GL_ARB_texture_env_crossbar 1
+#endif /* GL_ARB_texture_env_crossbar */
+
+#ifndef GL_ARB_texture_env_dot3
+#define GL_ARB_texture_env_dot3 1
+#define GL_DOT3_RGB_ARB                   0x86AE
+#define GL_DOT3_RGBA_ARB                  0x86AF
+#endif /* GL_ARB_texture_env_dot3 */
+
+#ifndef GL_ARB_texture_float
+#define GL_ARB_texture_float 1
+#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
+#endif /* GL_ARB_texture_float */
+
+#ifndef GL_ARB_texture_gather
+#define GL_ARB_texture_gather 1
+#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
+#endif /* GL_ARB_texture_gather */
+
+#ifndef GL_ARB_texture_mirror_clamp_to_edge
+#define GL_ARB_texture_mirror_clamp_to_edge 1
+#endif /* GL_ARB_texture_mirror_clamp_to_edge */
+
+#ifndef GL_ARB_texture_mirrored_repeat
+#define GL_ARB_texture_mirrored_repeat 1
+#define GL_MIRRORED_REPEAT_ARB            0x8370
+#endif /* GL_ARB_texture_mirrored_repeat */
+
+#ifndef GL_ARB_texture_multisample
+#define GL_ARB_texture_multisample 1
+#endif /* GL_ARB_texture_multisample */
+
+#ifndef GL_ARB_texture_non_power_of_two
+#define GL_ARB_texture_non_power_of_two 1
+#endif /* GL_ARB_texture_non_power_of_two */
+
+#ifndef GL_ARB_texture_query_levels
+#define GL_ARB_texture_query_levels 1
+#endif /* GL_ARB_texture_query_levels */
+
+#ifndef GL_ARB_texture_query_lod
+#define GL_ARB_texture_query_lod 1
+#endif /* GL_ARB_texture_query_lod */
+
+#ifndef GL_ARB_texture_rectangle
+#define GL_ARB_texture_rectangle 1
+#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
+#endif /* GL_ARB_texture_rectangle */
+
+#ifndef GL_ARB_texture_rg
+#define GL_ARB_texture_rg 1
+#endif /* GL_ARB_texture_rg */
+
+#ifndef GL_ARB_texture_rgb10_a2ui
+#define GL_ARB_texture_rgb10_a2ui 1
+#endif /* GL_ARB_texture_rgb10_a2ui */
+
+#ifndef GL_ARB_texture_stencil8
+#define GL_ARB_texture_stencil8 1
+#endif /* GL_ARB_texture_stencil8 */
+
+#ifndef GL_ARB_texture_storage
+#define GL_ARB_texture_storage 1
+#endif /* GL_ARB_texture_storage */
+
+#ifndef GL_ARB_texture_storage_multisample
+#define GL_ARB_texture_storage_multisample 1
+#endif /* GL_ARB_texture_storage_multisample */
+
+#ifndef GL_ARB_texture_swizzle
+#define GL_ARB_texture_swizzle 1
+#endif /* GL_ARB_texture_swizzle */
+
+#ifndef GL_ARB_texture_view
+#define GL_ARB_texture_view 1
+#endif /* GL_ARB_texture_view */
+
+#ifndef GL_ARB_timer_query
+#define GL_ARB_timer_query 1
+#endif /* GL_ARB_timer_query */
+
+#ifndef GL_ARB_transform_feedback2
+#define GL_ARB_transform_feedback2 1
+#endif /* GL_ARB_transform_feedback2 */
+
+#ifndef GL_ARB_transform_feedback3
+#define GL_ARB_transform_feedback3 1
+#endif /* GL_ARB_transform_feedback3 */
+
+#ifndef GL_ARB_transform_feedback_instanced
+#define GL_ARB_transform_feedback_instanced 1
+#endif /* GL_ARB_transform_feedback_instanced */
+
+#ifndef GL_ARB_transform_feedback_overflow_query
+#define GL_ARB_transform_feedback_overflow_query 1
+#define GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB 0x82EC
+#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB 0x82ED
+#endif /* GL_ARB_transform_feedback_overflow_query */
+
+#ifndef GL_ARB_transpose_matrix
+#define GL_ARB_transpose_matrix 1
+#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB   0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX_ARB     0x84E6
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m);
+GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m);
+GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m);
+GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m);
+#endif
+#endif /* GL_ARB_transpose_matrix */
+
+#ifndef GL_ARB_uniform_buffer_object
+#define GL_ARB_uniform_buffer_object 1
+#endif /* GL_ARB_uniform_buffer_object */
+
+#ifndef GL_ARB_vertex_array_bgra
+#define GL_ARB_vertex_array_bgra 1
+#endif /* GL_ARB_vertex_array_bgra */
+
+#ifndef GL_ARB_vertex_array_object
+#define GL_ARB_vertex_array_object 1
+#endif /* GL_ARB_vertex_array_object */
+
+#ifndef GL_ARB_vertex_attrib_64bit
+#define GL_ARB_vertex_attrib_64bit 1
+#endif /* GL_ARB_vertex_attrib_64bit */
+
+#ifndef GL_ARB_vertex_attrib_binding
+#define GL_ARB_vertex_attrib_binding 1
+#endif /* GL_ARB_vertex_attrib_binding */
+
+#ifndef GL_ARB_vertex_blend
+#define GL_ARB_vertex_blend 1
+#define GL_MAX_VERTEX_UNITS_ARB           0x86A4
+#define GL_ACTIVE_VERTEX_UNITS_ARB        0x86A5
+#define GL_WEIGHT_SUM_UNITY_ARB           0x86A6
+#define GL_VERTEX_BLEND_ARB               0x86A7
+#define GL_CURRENT_WEIGHT_ARB             0x86A8
+#define GL_WEIGHT_ARRAY_TYPE_ARB          0x86A9
+#define GL_WEIGHT_ARRAY_STRIDE_ARB        0x86AA
+#define GL_WEIGHT_ARRAY_SIZE_ARB          0x86AB
+#define GL_WEIGHT_ARRAY_POINTER_ARB       0x86AC
+#define GL_WEIGHT_ARRAY_ARB               0x86AD
+#define GL_MODELVIEW0_ARB                 0x1700
+#define GL_MODELVIEW1_ARB                 0x850A
+#define GL_MODELVIEW2_ARB                 0x8722
+#define GL_MODELVIEW3_ARB                 0x8723
+#define GL_MODELVIEW4_ARB                 0x8724
+#define GL_MODELVIEW5_ARB                 0x8725
+#define GL_MODELVIEW6_ARB                 0x8726
+#define GL_MODELVIEW7_ARB                 0x8727
+#define GL_MODELVIEW8_ARB                 0x8728
+#define GL_MODELVIEW9_ARB                 0x8729
+#define GL_MODELVIEW10_ARB                0x872A
+#define GL_MODELVIEW11_ARB                0x872B
+#define GL_MODELVIEW12_ARB                0x872C
+#define GL_MODELVIEW13_ARB                0x872D
+#define GL_MODELVIEW14_ARB                0x872E
+#define GL_MODELVIEW15_ARB                0x872F
+#define GL_MODELVIEW16_ARB                0x8730
+#define GL_MODELVIEW17_ARB                0x8731
+#define GL_MODELVIEW18_ARB                0x8732
+#define GL_MODELVIEW19_ARB                0x8733
+#define GL_MODELVIEW20_ARB                0x8734
+#define GL_MODELVIEW21_ARB                0x8735
+#define GL_MODELVIEW22_ARB                0x8736
+#define GL_MODELVIEW23_ARB                0x8737
+#define GL_MODELVIEW24_ARB                0x8738
+#define GL_MODELVIEW25_ARB                0x8739
+#define GL_MODELVIEW26_ARB                0x873A
+#define GL_MODELVIEW27_ARB                0x873B
+#define GL_MODELVIEW28_ARB                0x873C
+#define GL_MODELVIEW29_ARB                0x873D
+#define GL_MODELVIEW30_ARB                0x873E
+#define GL_MODELVIEW31_ARB                0x873F
+typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights);
+typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights);
+typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights);
+typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights);
+typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights);
+typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights);
+typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights);
+typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights);
+typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights);
+GLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights);
+GLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights);
+GLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights);
+GLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights);
+GLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights);
+GLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights);
+GLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights);
+GLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glVertexBlendARB (GLint count);
+#endif
+#endif /* GL_ARB_vertex_blend */
+
+#ifndef GL_ARB_vertex_buffer_object
+#define GL_ARB_vertex_buffer_object 1
+typedef ptrdiff_t GLsizeiptrARB;
+typedef ptrdiff_t GLintptrARB;
+#define GL_BUFFER_SIZE_ARB                0x8764
+#define GL_BUFFER_USAGE_ARB               0x8765
+#define GL_ARRAY_BUFFER_ARB               0x8892
+#define GL_ELEMENT_ARRAY_BUFFER_ARB       0x8893
+#define GL_ARRAY_BUFFER_BINDING_ARB       0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895
+#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896
+#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897
+#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898
+#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F
+#define GL_READ_ONLY_ARB                  0x88B8
+#define GL_WRITE_ONLY_ARB                 0x88B9
+#define GL_READ_WRITE_ARB                 0x88BA
+#define GL_BUFFER_ACCESS_ARB              0x88BB
+#define GL_BUFFER_MAPPED_ARB              0x88BC
+#define GL_BUFFER_MAP_POINTER_ARB         0x88BD
+#define GL_STREAM_DRAW_ARB                0x88E0
+#define GL_STREAM_READ_ARB                0x88E1
+#define GL_STREAM_COPY_ARB                0x88E2
+#define GL_STATIC_DRAW_ARB                0x88E4
+#define GL_STATIC_READ_ARB                0x88E5
+#define GL_STATIC_COPY_ARB                0x88E6
+#define GL_DYNAMIC_DRAW_ARB               0x88E8
+#define GL_DYNAMIC_READ_ARB               0x88E9
+#define GL_DYNAMIC_COPY_ARB               0x88EA
+typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer);
+typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers);
+typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers);
+typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage);
+typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data);
+typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data);
+typedef void *(APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access);
+typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, void **params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer);
+GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers);
+GLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers);
+GLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer);
+GLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage);
+GLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data);
+GLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data);
+GLAPI void *APIENTRY glMapBufferARB (GLenum target, GLenum access);
+GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target);
+GLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, void **params);
+#endif
+#endif /* GL_ARB_vertex_buffer_object */
+
+#ifndef GL_ARB_vertex_program
+#define GL_ARB_vertex_program 1
+#define GL_COLOR_SUM_ARB                  0x8458
+#define GL_VERTEX_PROGRAM_ARB             0x8620
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB   0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB   0x8625
+#define GL_CURRENT_VERTEX_ATTRIB_ARB      0x8626
+#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB  0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB    0x8643
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645
+#define GL_MAX_VERTEX_ATTRIBS_ARB         0x8869
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A
+#define GL_PROGRAM_ADDRESS_REGISTERS_ARB  0x88B0
+#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1
+#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2
+#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, void **pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x);
+GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x);
+GLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y);
+GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y);
+GLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index);
+GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index);
+GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, void **pointer);
+#endif
+#endif /* GL_ARB_vertex_program */
+
+#ifndef GL_ARB_vertex_shader
+#define GL_ARB_vertex_shader 1
+#define GL_VERTEX_SHADER_ARB              0x8B31
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A
+#define GL_MAX_VARYING_FLOATS_ARB         0x8B4B
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D
+#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB   0x8B89
+#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A
+typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name);
+typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
+typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name);
+GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
+GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name);
+#endif
+#endif /* GL_ARB_vertex_shader */
+
+#ifndef GL_ARB_vertex_type_10f_11f_11f_rev
+#define GL_ARB_vertex_type_10f_11f_11f_rev 1
+#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */
+
+#ifndef GL_ARB_vertex_type_2_10_10_10_rev
+#define GL_ARB_vertex_type_2_10_10_10_rev 1
+#endif /* GL_ARB_vertex_type_2_10_10_10_rev */
+
+#ifndef GL_ARB_viewport_array
+#define GL_ARB_viewport_array 1
+#endif /* GL_ARB_viewport_array */
+
+#ifndef GL_ARB_window_pos
+#define GL_ARB_window_pos 1
+typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y);
+GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y);
+GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y);
+GLAPI void APIENTRY glWindowPos2ivARB (const GLint *v);
+GLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y);
+GLAPI void APIENTRY glWindowPos2svARB (const GLshort *v);
+GLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glWindowPos3ivARB (const GLint *v);
+GLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glWindowPos3svARB (const GLshort *v);
+#endif
+#endif /* GL_ARB_window_pos */
+
+#ifndef GL_KHR_blend_equation_advanced
+#define GL_KHR_blend_equation_advanced 1
+#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 PFNGLBLENDBARRIERKHRPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendBarrierKHR (void);
+#endif
+#endif /* GL_KHR_blend_equation_advanced */
+
+#ifndef GL_KHR_blend_equation_advanced_coherent
+#define GL_KHR_blend_equation_advanced_coherent 1
+#define GL_BLEND_ADVANCED_COHERENT_KHR    0x9285
+#endif /* GL_KHR_blend_equation_advanced_coherent */
+
+#ifndef GL_KHR_context_flush_control
+#define GL_KHR_context_flush_control 1
+#endif /* GL_KHR_context_flush_control */
+
+#ifndef GL_KHR_debug
+#define GL_KHR_debug 1
+#endif /* GL_KHR_debug */
+
+#ifndef GL_KHR_robust_buffer_access_behavior
+#define GL_KHR_robust_buffer_access_behavior 1
+#endif /* GL_KHR_robust_buffer_access_behavior */
+
+#ifndef GL_KHR_robustness
+#define GL_KHR_robustness 1
+#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 PFNGLGETGRAPHICSRESETSTATUSKHRPROC) (void);
+typedef void (APIENTRYP PFNGLREADNPIXELSKHRPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+typedef void (APIENTRYP PFNGLGETNUNIFORMFVKHRPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMIVKHRPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+typedef void (APIENTRYP PFNGLGETNUNIFORMUIVKHRPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLenum APIENTRY glGetGraphicsResetStatusKHR (void);
+GLAPI void APIENTRY glReadnPixelsKHR (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
+GLAPI void APIENTRY glGetnUniformfvKHR (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);
+GLAPI void APIENTRY glGetnUniformivKHR (GLuint program, GLint location, GLsizei bufSize, GLint *params);
+GLAPI void APIENTRY glGetnUniformuivKHR (GLuint program, GLint location, GLsizei bufSize, GLuint *params);
+#endif
+#endif /* GL_KHR_robustness */
+
+#ifndef GL_KHR_texture_compression_astc_hdr
+#define GL_KHR_texture_compression_astc_hdr 1
+#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
+#endif /* GL_KHR_texture_compression_astc_hdr */
+
+#ifndef GL_KHR_texture_compression_astc_ldr
+#define GL_KHR_texture_compression_astc_ldr 1
+#endif /* GL_KHR_texture_compression_astc_ldr */
+
+#ifndef GL_OES_byte_coordinates
+#define GL_OES_byte_coordinates 1
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1BOESPROC) (GLenum texture, GLbyte s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1BVOESPROC) (GLenum texture, const GLbyte *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2BOESPROC) (GLenum texture, GLbyte s, GLbyte t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2BVOESPROC) (GLenum texture, const GLbyte *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3BVOESPROC) (GLenum texture, const GLbyte *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4BVOESPROC) (GLenum texture, const GLbyte *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD1BOESPROC) (GLbyte s);
+typedef void (APIENTRYP PFNGLTEXCOORD1BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD2BOESPROC) (GLbyte s, GLbyte t);
+typedef void (APIENTRYP PFNGLTEXCOORD2BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD3BOESPROC) (GLbyte s, GLbyte t, GLbyte r);
+typedef void (APIENTRYP PFNGLTEXCOORD3BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD4BOESPROC) (GLbyte s, GLbyte t, GLbyte r, GLbyte q);
+typedef void (APIENTRYP PFNGLTEXCOORD4BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLVERTEX2BOESPROC) (GLbyte x, GLbyte y);
+typedef void (APIENTRYP PFNGLVERTEX2BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLVERTEX3BOESPROC) (GLbyte x, GLbyte y, GLbyte z);
+typedef void (APIENTRYP PFNGLVERTEX3BVOESPROC) (const GLbyte *coords);
+typedef void (APIENTRYP PFNGLVERTEX4BOESPROC) (GLbyte x, GLbyte y, GLbyte z, GLbyte w);
+typedef void (APIENTRYP PFNGLVERTEX4BVOESPROC) (const GLbyte *coords);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiTexCoord1bOES (GLenum texture, GLbyte s);
+GLAPI void APIENTRY glMultiTexCoord1bvOES (GLenum texture, const GLbyte *coords);
+GLAPI void APIENTRY glMultiTexCoord2bOES (GLenum texture, GLbyte s, GLbyte t);
+GLAPI void APIENTRY glMultiTexCoord2bvOES (GLenum texture, const GLbyte *coords);
+GLAPI void APIENTRY glMultiTexCoord3bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r);
+GLAPI void APIENTRY glMultiTexCoord3bvOES (GLenum texture, const GLbyte *coords);
+GLAPI void APIENTRY glMultiTexCoord4bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q);
+GLAPI void APIENTRY glMultiTexCoord4bvOES (GLenum texture, const GLbyte *coords);
+GLAPI void APIENTRY glTexCoord1bOES (GLbyte s);
+GLAPI void APIENTRY glTexCoord1bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glTexCoord2bOES (GLbyte s, GLbyte t);
+GLAPI void APIENTRY glTexCoord2bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glTexCoord3bOES (GLbyte s, GLbyte t, GLbyte r);
+GLAPI void APIENTRY glTexCoord3bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glTexCoord4bOES (GLbyte s, GLbyte t, GLbyte r, GLbyte q);
+GLAPI void APIENTRY glTexCoord4bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glVertex2bOES (GLbyte x, GLbyte y);
+GLAPI void APIENTRY glVertex2bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glVertex3bOES (GLbyte x, GLbyte y, GLbyte z);
+GLAPI void APIENTRY glVertex3bvOES (const GLbyte *coords);
+GLAPI void APIENTRY glVertex4bOES (GLbyte x, GLbyte y, GLbyte z, GLbyte w);
+GLAPI void APIENTRY glVertex4bvOES (const GLbyte *coords);
+#endif
+#endif /* GL_OES_byte_coordinates */
+
+#ifndef GL_OES_compressed_paletted_texture
+#define GL_OES_compressed_paletted_texture 1
+#define GL_PALETTE4_RGB8_OES              0x8B90
+#define GL_PALETTE4_RGBA8_OES             0x8B91
+#define GL_PALETTE4_R5_G6_B5_OES          0x8B92
+#define GL_PALETTE4_RGBA4_OES             0x8B93
+#define GL_PALETTE4_RGB5_A1_OES           0x8B94
+#define GL_PALETTE8_RGB8_OES              0x8B95
+#define GL_PALETTE8_RGBA8_OES             0x8B96
+#define GL_PALETTE8_R5_G6_B5_OES          0x8B97
+#define GL_PALETTE8_RGBA4_OES             0x8B98
+#define GL_PALETTE8_RGB5_A1_OES           0x8B99
+#endif /* GL_OES_compressed_paletted_texture */
+
+#ifndef GL_OES_fixed_point
+#define GL_OES_fixed_point 1
+typedef GLint GLfixed;
+#define GL_FIXED_OES                      0x140C
+typedef void (APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLfixed ref);
+typedef void (APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+typedef void (APIENTRYP PFNGLCLEARDEPTHXOESPROC) (GLfixed depth);
+typedef void (APIENTRYP PFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed *equation);
+typedef void (APIENTRYP PFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+typedef void (APIENTRYP PFNGLDEPTHRANGEXOESPROC) (GLfixed n, GLfixed f);
+typedef void (APIENTRYP PFNGLFOGXOESPROC) (GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLFOGXVOESPROC) (GLenum pname, const GLfixed *param);
+typedef void (APIENTRYP PFNGLFRUSTUMXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);
+typedef void (APIENTRYP PFNGLGETCLIPPLANEXOESPROC) (GLenum plane, GLfixed *equation);
+typedef void (APIENTRYP PFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETTEXENVXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed *param);
+typedef void (APIENTRYP PFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLLINEWIDTHXOESPROC) (GLfixed width);
+typedef void (APIENTRYP PFNGLLOADMATRIXXOESPROC) (const GLfixed *m);
+typedef void (APIENTRYP PFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed *param);
+typedef void (APIENTRYP PFNGLMULTMATRIXXOESPROC) (const GLfixed *m);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+typedef void (APIENTRYP PFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz);
+typedef void (APIENTRYP PFNGLORTHOXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLPOINTSIZEXOESPROC) (GLfixed size);
+typedef void (APIENTRYP PFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units);
+typedef void (APIENTRYP PFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
+typedef void (APIENTRYP PFNGLSAMPLECOVERAGEOESPROC) (GLfixed value, GLboolean invert);
+typedef void (APIENTRYP PFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z);
+typedef void (APIENTRYP PFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z);
+typedef void (APIENTRYP PFNGLACCUMXOESPROC) (GLenum op, GLfixed value);
+typedef void (APIENTRYP PFNGLBITMAPXOESPROC) (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap);
+typedef void (APIENTRYP PFNGLBLENDCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+typedef void (APIENTRYP PFNGLCLEARACCUMXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+typedef void (APIENTRYP PFNGLCOLOR3XOESPROC) (GLfixed red, GLfixed green, GLfixed blue);
+typedef void (APIENTRYP PFNGLCOLOR3XVOESPROC) (const GLfixed *components);
+typedef void (APIENTRYP PFNGLCOLOR4XVOESPROC) (const GLfixed *components);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLEVALCOORD1XOESPROC) (GLfixed u);
+typedef void (APIENTRYP PFNGLEVALCOORD1XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLEVALCOORD2XOESPROC) (GLfixed u, GLfixed v);
+typedef void (APIENTRYP PFNGLEVALCOORD2XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLFEEDBACKBUFFERXOESPROC) (GLsizei n, GLenum type, const GLfixed *buffer);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETMAPXVOESPROC) (GLenum target, GLenum query, GLfixed *v);
+typedef void (APIENTRYP PFNGLGETMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLGETPIXELMAPXVPROC) (GLenum map, GLint size, GLfixed *values);
+typedef void (APIENTRYP PFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERXVOESPROC) (GLenum target, GLint level, GLenum pname, GLfixed *params);
+typedef void (APIENTRYP PFNGLINDEXXOESPROC) (GLfixed component);
+typedef void (APIENTRYP PFNGLINDEXXVOESPROC) (const GLfixed *component);
+typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXXOESPROC) (const GLfixed *m);
+typedef void (APIENTRYP PFNGLMAP1XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points);
+typedef void (APIENTRYP PFNGLMAP2XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points);
+typedef void (APIENTRYP PFNGLMAPGRID1XOESPROC) (GLint n, GLfixed u1, GLfixed u2);
+typedef void (APIENTRYP PFNGLMAPGRID2XOESPROC) (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2);
+typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXXOESPROC) (const GLfixed *m);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1XOESPROC) (GLenum texture, GLfixed s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1XVOESPROC) (GLenum texture, const GLfixed *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2XOESPROC) (GLenum texture, GLfixed s, GLfixed t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2XVOESPROC) (GLenum texture, const GLfixed *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3XVOESPROC) (GLenum texture, const GLfixed *coords);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4XVOESPROC) (GLenum texture, const GLfixed *coords);
+typedef void (APIENTRYP PFNGLNORMAL3XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLPASSTHROUGHXOESPROC) (GLfixed token);
+typedef void (APIENTRYP PFNGLPIXELMAPXPROC) (GLenum map, GLint size, const GLfixed *values);
+typedef void (APIENTRYP PFNGLPIXELSTOREXPROC) (GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLPIXELTRANSFERXOESPROC) (GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLPIXELZOOMXOESPROC) (GLfixed xfactor, GLfixed yfactor);
+typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESXOESPROC) (GLsizei n, const GLuint *textures, const GLfixed *priorities);
+typedef void (APIENTRYP PFNGLRASTERPOS2XOESPROC) (GLfixed x, GLfixed y);
+typedef void (APIENTRYP PFNGLRASTERPOS2XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLRASTERPOS3XOESPROC) (GLfixed x, GLfixed y, GLfixed z);
+typedef void (APIENTRYP PFNGLRASTERPOS3XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLRASTERPOS4XOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed w);
+typedef void (APIENTRYP PFNGLRASTERPOS4XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLRECTXOESPROC) (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2);
+typedef void (APIENTRYP PFNGLRECTXVOESPROC) (const GLfixed *v1, const GLfixed *v2);
+typedef void (APIENTRYP PFNGLTEXCOORD1XOESPROC) (GLfixed s);
+typedef void (APIENTRYP PFNGLTEXCOORD1XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD2XOESPROC) (GLfixed s, GLfixed t);
+typedef void (APIENTRYP PFNGLTEXCOORD2XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD3XOESPROC) (GLfixed s, GLfixed t, GLfixed r);
+typedef void (APIENTRYP PFNGLTEXCOORD3XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLTEXCOORD4XOESPROC) (GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+typedef void (APIENTRYP PFNGLTEXCOORD4XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param);
+typedef void (APIENTRYP PFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed *params);
+typedef void (APIENTRYP PFNGLVERTEX2XOESPROC) (GLfixed x);
+typedef void (APIENTRYP PFNGLVERTEX2XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLVERTEX3XOESPROC) (GLfixed x, GLfixed y);
+typedef void (APIENTRYP PFNGLVERTEX3XVOESPROC) (const GLfixed *coords);
+typedef void (APIENTRYP PFNGLVERTEX4XOESPROC) (GLfixed x, GLfixed y, GLfixed z);
+typedef void (APIENTRYP PFNGLVERTEX4XVOESPROC) (const GLfixed *coords);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glAlphaFuncxOES (GLenum func, GLfixed ref);
+GLAPI void APIENTRY glClearColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+GLAPI void APIENTRY glClearDepthxOES (GLfixed depth);
+GLAPI void APIENTRY glClipPlanexOES (GLenum plane, const GLfixed *equation);
+GLAPI void APIENTRY glColor4xOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+GLAPI void APIENTRY glDepthRangexOES (GLfixed n, GLfixed f);
+GLAPI void APIENTRY glFogxOES (GLenum pname, GLfixed param);
+GLAPI void APIENTRY glFogxvOES (GLenum pname, const GLfixed *param);
+GLAPI void APIENTRY glFrustumxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);
+GLAPI void APIENTRY glGetClipPlanexOES (GLenum plane, GLfixed *equation);
+GLAPI void APIENTRY glGetFixedvOES (GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetTexEnvxvOES (GLenum target, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetTexParameterxvOES (GLenum target, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glLightModelxOES (GLenum pname, GLfixed param);
+GLAPI void APIENTRY glLightModelxvOES (GLenum pname, const GLfixed *param);
+GLAPI void APIENTRY glLightxOES (GLenum light, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glLightxvOES (GLenum light, GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glLineWidthxOES (GLfixed width);
+GLAPI void APIENTRY glLoadMatrixxOES (const GLfixed *m);
+GLAPI void APIENTRY glMaterialxOES (GLenum face, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glMaterialxvOES (GLenum face, GLenum pname, const GLfixed *param);
+GLAPI void APIENTRY glMultMatrixxOES (const GLfixed *m);
+GLAPI void APIENTRY glMultiTexCoord4xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+GLAPI void APIENTRY glNormal3xOES (GLfixed nx, GLfixed ny, GLfixed nz);
+GLAPI void APIENTRY glOrthoxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);
+GLAPI void APIENTRY glPointParameterxvOES (GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glPointSizexOES (GLfixed size);
+GLAPI void APIENTRY glPolygonOffsetxOES (GLfixed factor, GLfixed units);
+GLAPI void APIENTRY glRotatexOES (GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
+GLAPI void APIENTRY glSampleCoverageOES (GLfixed value, GLboolean invert);
+GLAPI void APIENTRY glScalexOES (GLfixed x, GLfixed y, GLfixed z);
+GLAPI void APIENTRY glTexEnvxOES (GLenum target, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glTexEnvxvOES (GLenum target, GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glTexParameterxOES (GLenum target, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glTexParameterxvOES (GLenum target, GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glTranslatexOES (GLfixed x, GLfixed y, GLfixed z);
+GLAPI void APIENTRY glAccumxOES (GLenum op, GLfixed value);
+GLAPI void APIENTRY glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap);
+GLAPI void APIENTRY glBlendColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+GLAPI void APIENTRY glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
+GLAPI void APIENTRY glColor3xOES (GLfixed red, GLfixed green, GLfixed blue);
+GLAPI void APIENTRY glColor3xvOES (const GLfixed *components);
+GLAPI void APIENTRY glColor4xvOES (const GLfixed *components);
+GLAPI void APIENTRY glConvolutionParameterxOES (GLenum target, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glConvolutionParameterxvOES (GLenum target, GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glEvalCoord1xOES (GLfixed u);
+GLAPI void APIENTRY glEvalCoord1xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glEvalCoord2xOES (GLfixed u, GLfixed v);
+GLAPI void APIENTRY glEvalCoord2xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glFeedbackBufferxOES (GLsizei n, GLenum type, const GLfixed *buffer);
+GLAPI void APIENTRY glGetConvolutionParameterxvOES (GLenum target, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetHistogramParameterxvOES (GLenum target, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetLightxOES (GLenum light, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetMapxvOES (GLenum target, GLenum query, GLfixed *v);
+GLAPI void APIENTRY glGetMaterialxOES (GLenum face, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glGetPixelMapxv (GLenum map, GLint size, GLfixed *values);
+GLAPI void APIENTRY glGetTexGenxvOES (GLenum coord, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glGetTexLevelParameterxvOES (GLenum target, GLint level, GLenum pname, GLfixed *params);
+GLAPI void APIENTRY glIndexxOES (GLfixed component);
+GLAPI void APIENTRY glIndexxvOES (const GLfixed *component);
+GLAPI void APIENTRY glLoadTransposeMatrixxOES (const GLfixed *m);
+GLAPI void APIENTRY glMap1xOES (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points);
+GLAPI void APIENTRY glMap2xOES (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points);
+GLAPI void APIENTRY glMapGrid1xOES (GLint n, GLfixed u1, GLfixed u2);
+GLAPI void APIENTRY glMapGrid2xOES (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2);
+GLAPI void APIENTRY glMultTransposeMatrixxOES (const GLfixed *m);
+GLAPI void APIENTRY glMultiTexCoord1xOES (GLenum texture, GLfixed s);
+GLAPI void APIENTRY glMultiTexCoord1xvOES (GLenum texture, const GLfixed *coords);
+GLAPI void APIENTRY glMultiTexCoord2xOES (GLenum texture, GLfixed s, GLfixed t);
+GLAPI void APIENTRY glMultiTexCoord2xvOES (GLenum texture, const GLfixed *coords);
+GLAPI void APIENTRY glMultiTexCoord3xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r);
+GLAPI void APIENTRY glMultiTexCoord3xvOES (GLenum texture, const GLfixed *coords);
+GLAPI void APIENTRY glMultiTexCoord4xvOES (GLenum texture, const GLfixed *coords);
+GLAPI void APIENTRY glNormal3xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glPassThroughxOES (GLfixed token);
+GLAPI void APIENTRY glPixelMapx (GLenum map, GLint size, const GLfixed *values);
+GLAPI void APIENTRY glPixelStorex (GLenum pname, GLfixed param);
+GLAPI void APIENTRY glPixelTransferxOES (GLenum pname, GLfixed param);
+GLAPI void APIENTRY glPixelZoomxOES (GLfixed xfactor, GLfixed yfactor);
+GLAPI void APIENTRY glPrioritizeTexturesxOES (GLsizei n, const GLuint *textures, const GLfixed *priorities);
+GLAPI void APIENTRY glRasterPos2xOES (GLfixed x, GLfixed y);
+GLAPI void APIENTRY glRasterPos2xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glRasterPos3xOES (GLfixed x, GLfixed y, GLfixed z);
+GLAPI void APIENTRY glRasterPos3xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glRasterPos4xOES (GLfixed x, GLfixed y, GLfixed z, GLfixed w);
+GLAPI void APIENTRY glRasterPos4xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glRectxOES (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2);
+GLAPI void APIENTRY glRectxvOES (const GLfixed *v1, const GLfixed *v2);
+GLAPI void APIENTRY glTexCoord1xOES (GLfixed s);
+GLAPI void APIENTRY glTexCoord1xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glTexCoord2xOES (GLfixed s, GLfixed t);
+GLAPI void APIENTRY glTexCoord2xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glTexCoord3xOES (GLfixed s, GLfixed t, GLfixed r);
+GLAPI void APIENTRY glTexCoord3xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glTexCoord4xOES (GLfixed s, GLfixed t, GLfixed r, GLfixed q);
+GLAPI void APIENTRY glTexCoord4xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glTexGenxOES (GLenum coord, GLenum pname, GLfixed param);
+GLAPI void APIENTRY glTexGenxvOES (GLenum coord, GLenum pname, const GLfixed *params);
+GLAPI void APIENTRY glVertex2xOES (GLfixed x);
+GLAPI void APIENTRY glVertex2xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glVertex3xOES (GLfixed x, GLfixed y);
+GLAPI void APIENTRY glVertex3xvOES (const GLfixed *coords);
+GLAPI void APIENTRY glVertex4xOES (GLfixed x, GLfixed y, GLfixed z);
+GLAPI void APIENTRY glVertex4xvOES (const GLfixed *coords);
+#endif
+#endif /* GL_OES_fixed_point */
+
+#ifndef GL_OES_query_matrix
+#define GL_OES_query_matrix 1
+typedef GLbitfield (APIENTRYP PFNGLQUERYMATRIXXOESPROC) (GLfixed *mantissa, GLint *exponent);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLbitfield APIENTRY glQueryMatrixxOES (GLfixed *mantissa, GLint *exponent);
+#endif
+#endif /* GL_OES_query_matrix */
+
+#ifndef GL_OES_read_format
+#define GL_OES_read_format 1
+#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A
+#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B
+#endif /* GL_OES_read_format */
+
+#ifndef GL_OES_single_precision
+#define GL_OES_single_precision 1
+typedef void (APIENTRYP PFNGLCLEARDEPTHFOESPROC) (GLclampf depth);
+typedef void (APIENTRYP PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat *equation);
+typedef void (APIENTRYP PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f);
+typedef void (APIENTRYP PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+typedef void (APIENTRYP PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat *equation);
+typedef void (APIENTRYP PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glClearDepthfOES (GLclampf depth);
+GLAPI void APIENTRY glClipPlanefOES (GLenum plane, const GLfloat *equation);
+GLAPI void APIENTRY glDepthRangefOES (GLclampf n, GLclampf f);
+GLAPI void APIENTRY glFrustumfOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+GLAPI void APIENTRY glGetClipPlanefOES (GLenum plane, GLfloat *equation);
+GLAPI void APIENTRY glOrthofOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);
+#endif
+#endif /* GL_OES_single_precision */
+
+#ifndef GL_3DFX_multisample
+#define GL_3DFX_multisample 1
+#define GL_MULTISAMPLE_3DFX               0x86B2
+#define GL_SAMPLE_BUFFERS_3DFX            0x86B3
+#define GL_SAMPLES_3DFX                   0x86B4
+#define GL_MULTISAMPLE_BIT_3DFX           0x20000000
+#endif /* GL_3DFX_multisample */
+
+#ifndef GL_3DFX_tbuffer
+#define GL_3DFX_tbuffer 1
+typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTbufferMask3DFX (GLuint mask);
+#endif
+#endif /* GL_3DFX_tbuffer */
+
+#ifndef GL_3DFX_texture_compression_FXT1
+#define GL_3DFX_texture_compression_FXT1 1
+#define GL_COMPRESSED_RGB_FXT1_3DFX       0x86B0
+#define GL_COMPRESSED_RGBA_FXT1_3DFX      0x86B1
+#endif /* GL_3DFX_texture_compression_FXT1 */
+
+#ifndef GL_AMD_blend_minmax_factor
+#define GL_AMD_blend_minmax_factor 1
+#define GL_FACTOR_MIN_AMD                 0x901C
+#define GL_FACTOR_MAX_AMD                 0x901D
+#endif /* GL_AMD_blend_minmax_factor */
+
+#ifndef GL_AMD_conservative_depth
+#define GL_AMD_conservative_depth 1
+#endif /* GL_AMD_conservative_depth */
+
+#ifndef GL_AMD_debug_output
+#define GL_AMD_debug_output 1
+typedef void (APIENTRY  *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam);
+#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 PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf);
+typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, void *userParam);
+typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
+GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf);
+GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, void *userParam);
+GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message);
+#endif
+#endif /* GL_AMD_debug_output */
+
+#ifndef GL_AMD_depth_clamp_separate
+#define GL_AMD_depth_clamp_separate 1
+#define GL_DEPTH_CLAMP_NEAR_AMD           0x901E
+#define GL_DEPTH_CLAMP_FAR_AMD            0x901F
+#endif /* GL_AMD_depth_clamp_separate */
+
+#ifndef GL_AMD_draw_buffers_blend
+#define GL_AMD_draw_buffers_blend 1
+typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst);
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode);
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst);
+GLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+GLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode);
+GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+#endif
+#endif /* GL_AMD_draw_buffers_blend */
+
+#ifndef GL_AMD_gcn_shader
+#define GL_AMD_gcn_shader 1
+#endif /* GL_AMD_gcn_shader */
+
+#ifndef GL_AMD_gpu_shader_int64
+#define GL_AMD_gpu_shader_int64 1
+typedef int64_t GLint64EXT;
+#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 PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x);
+typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y);
+typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x);
+typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y);
+typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params);
+typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x);
+GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y);
+GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x);
+GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y);
+GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params);
+GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params);
+GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x);
+GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y);
+GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);
+GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x);
+GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y);
+GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#endif
+#endif /* GL_AMD_gpu_shader_int64 */
+
+#ifndef GL_AMD_interleaved_elements
+#define GL_AMD_interleaved_elements 1
+#define GL_VERTEX_ELEMENT_SWIZZLE_AMD     0x91A4
+#define GL_VERTEX_ID_SWIZZLE_AMD          0x91A5
+typedef void (APIENTRYP PFNGLVERTEXATTRIBPARAMETERIAMDPROC) (GLuint index, GLenum pname, GLint param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribParameteriAMD (GLuint index, GLenum pname, GLint param);
+#endif
+#endif /* GL_AMD_interleaved_elements */
+
+#ifndef GL_AMD_multi_draw_indirect
+#define GL_AMD_multi_draw_indirect 1
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysIndirectAMD (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride);
+GLAPI void APIENTRY glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride);
+#endif
+#endif /* GL_AMD_multi_draw_indirect */
+
+#ifndef GL_AMD_name_gen_delete
+#define GL_AMD_name_gen_delete 1
+#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 PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names);
+typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names);
+typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names);
+GLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names);
+GLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name);
+#endif
+#endif /* GL_AMD_name_gen_delete */
+
+#ifndef GL_AMD_occlusion_query_event
+#define GL_AMD_occlusion_query_event 1
+#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 PFNGLQUERYOBJECTPARAMETERUIAMDPROC) (GLenum target, GLuint id, GLenum pname, GLuint param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glQueryObjectParameteruiAMD (GLenum target, GLuint id, GLenum pname, GLuint param);
+#endif
+#endif /* GL_AMD_occlusion_query_event */
+
+#ifndef GL_AMD_performance_monitor
+#define GL_AMD_performance_monitor 1
+#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 PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups);
+typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters);
+typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString);
+typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString);
+typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data);
+typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors);
+typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors);
+typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList);
+typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor);
+typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor);
+typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups);
+GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters);
+GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString);
+GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString);
+GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data);
+GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors);
+GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors);
+GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList);
+GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor);
+GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor);
+GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten);
+#endif
+#endif /* GL_AMD_performance_monitor */
+
+#ifndef GL_AMD_pinned_memory
+#define GL_AMD_pinned_memory 1
+#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160
+#endif /* GL_AMD_pinned_memory */
+
+#ifndef GL_AMD_query_buffer_object
+#define GL_AMD_query_buffer_object 1
+#define GL_QUERY_BUFFER_AMD               0x9192
+#define GL_QUERY_BUFFER_BINDING_AMD       0x9193
+#define GL_QUERY_RESULT_NO_WAIT_AMD       0x9194
+#endif /* GL_AMD_query_buffer_object */
+
+#ifndef GL_AMD_sample_positions
+#define GL_AMD_sample_positions 1
+#define GL_SUBSAMPLE_DISTANCE_AMD         0x883F
+typedef void (APIENTRYP PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat *val);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat *val);
+#endif
+#endif /* GL_AMD_sample_positions */
+
+#ifndef GL_AMD_seamless_cubemap_per_texture
+#define GL_AMD_seamless_cubemap_per_texture 1
+#endif /* GL_AMD_seamless_cubemap_per_texture */
+
+#ifndef GL_AMD_shader_atomic_counter_ops
+#define GL_AMD_shader_atomic_counter_ops 1
+#endif /* GL_AMD_shader_atomic_counter_ops */
+
+#ifndef GL_AMD_shader_stencil_export
+#define GL_AMD_shader_stencil_export 1
+#endif /* GL_AMD_shader_stencil_export */
+
+#ifndef GL_AMD_shader_trinary_minmax
+#define GL_AMD_shader_trinary_minmax 1
+#endif /* GL_AMD_shader_trinary_minmax */
+
+#ifndef GL_AMD_sparse_texture
+#define GL_AMD_sparse_texture 1
+#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 PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexStorageSparseAMD (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);
+GLAPI void APIENTRY glTextureStorageSparseAMD (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);
+#endif
+#endif /* GL_AMD_sparse_texture */
+
+#ifndef GL_AMD_stencil_operation_extended
+#define GL_AMD_stencil_operation_extended 1
+#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 PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glStencilOpValueAMD (GLenum face, GLuint value);
+#endif
+#endif /* GL_AMD_stencil_operation_extended */
+
+#ifndef GL_AMD_texture_texture4
+#define GL_AMD_texture_texture4 1
+#endif /* GL_AMD_texture_texture4 */
+
+#ifndef GL_AMD_transform_feedback3_lines_triangles
+#define GL_AMD_transform_feedback3_lines_triangles 1
+#endif /* GL_AMD_transform_feedback3_lines_triangles */
+
+#ifndef GL_AMD_transform_feedback4
+#define GL_AMD_transform_feedback4 1
+#define GL_STREAM_RASTERIZATION_AMD       0x91A0
+#endif /* GL_AMD_transform_feedback4 */
+
+#ifndef GL_AMD_vertex_shader_layer
+#define GL_AMD_vertex_shader_layer 1
+#endif /* GL_AMD_vertex_shader_layer */
+
+#ifndef GL_AMD_vertex_shader_tessellator
+#define GL_AMD_vertex_shader_tessellator 1
+#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 PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor);
+typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor);
+GLAPI void APIENTRY glTessellationModeAMD (GLenum mode);
+#endif
+#endif /* GL_AMD_vertex_shader_tessellator */
+
+#ifndef GL_AMD_vertex_shader_viewport_index
+#define GL_AMD_vertex_shader_viewport_index 1
+#endif /* GL_AMD_vertex_shader_viewport_index */
+
+#ifndef GL_APPLE_aux_depth_stencil
+#define GL_APPLE_aux_depth_stencil 1
+#define GL_AUX_DEPTH_STENCIL_APPLE        0x8A14
+#endif /* GL_APPLE_aux_depth_stencil */
+
+#ifndef GL_APPLE_client_storage
+#define GL_APPLE_client_storage 1
+#define GL_UNPACK_CLIENT_STORAGE_APPLE    0x85B2
+#endif /* GL_APPLE_client_storage */
+
+#ifndef GL_APPLE_element_array
+#define GL_APPLE_element_array 1
+#define GL_ELEMENT_ARRAY_APPLE            0x8A0C
+#define GL_ELEMENT_ARRAY_TYPE_APPLE       0x8A0D
+#define GL_ELEMENT_ARRAY_POINTER_APPLE    0x8A0E
+typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const void *pointer);
+typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const void *pointer);
+GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count);
+GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count);
+GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
+GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount);
+#endif
+#endif /* GL_APPLE_element_array */
+
+#ifndef GL_APPLE_fence
+#define GL_APPLE_fence 1
+#define GL_DRAW_PIXELS_APPLE              0x8A0A
+#define GL_FENCE_APPLE                    0x8A0B
+typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences);
+typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences);
+typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence);
+typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence);
+typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence);
+typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence);
+typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name);
+typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences);
+GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences);
+GLAPI void APIENTRY glSetFenceAPPLE (GLuint fence);
+GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence);
+GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence);
+GLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence);
+GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name);
+GLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name);
+#endif
+#endif /* GL_APPLE_fence */
+
+#ifndef GL_APPLE_float_pixels
+#define GL_APPLE_float_pixels 1
+#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
+#endif /* GL_APPLE_float_pixels */
+
+#ifndef GL_APPLE_flush_buffer_range
+#define GL_APPLE_flush_buffer_range 1
+#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12
+#define GL_BUFFER_FLUSHING_UNMAP_APPLE    0x8A13
+typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size);
+#endif
+#endif /* GL_APPLE_flush_buffer_range */
+
+#ifndef GL_APPLE_object_purgeable
+#define GL_APPLE_object_purgeable 1
+#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 PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option);
+typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option);
+typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option);
+GLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option);
+GLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params);
+#endif
+#endif /* GL_APPLE_object_purgeable */
+
+#ifndef GL_APPLE_rgb_422
+#define GL_APPLE_rgb_422 1
+#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
+#endif /* GL_APPLE_rgb_422 */
+
+#ifndef GL_APPLE_row_bytes
+#define GL_APPLE_row_bytes 1
+#define GL_PACK_ROW_BYTES_APPLE           0x8A15
+#define GL_UNPACK_ROW_BYTES_APPLE         0x8A16
+#endif /* GL_APPLE_row_bytes */
+
+#ifndef GL_APPLE_specular_vector
+#define GL_APPLE_specular_vector 1
+#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0
+#endif /* GL_APPLE_specular_vector */
+
+#ifndef GL_APPLE_texture_range
+#define GL_APPLE_texture_range 1
+#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 PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const void *pointer);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, void **params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const void *pointer);
+GLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, void **params);
+#endif
+#endif /* GL_APPLE_texture_range */
+
+#ifndef GL_APPLE_transform_hint
+#define GL_APPLE_transform_hint 1
+#define GL_TRANSFORM_HINT_APPLE           0x85B1
+#endif /* GL_APPLE_transform_hint */
+
+#ifndef GL_APPLE_vertex_array_object
+#define GL_APPLE_vertex_array_object 1
+#define GL_VERTEX_ARRAY_BINDING_APPLE     0x85B5
+typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array);
+typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays);
+typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays);
+typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array);
+GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays);
+GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays);
+GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array);
+#endif
+#endif /* GL_APPLE_vertex_array_object */
+
+#ifndef GL_APPLE_vertex_array_range
+#define GL_APPLE_vertex_array_range 1
+#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 PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer);
+typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer);
+typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, void *pointer);
+GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, void *pointer);
+GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param);
+#endif
+#endif /* GL_APPLE_vertex_array_range */
+
+#ifndef GL_APPLE_vertex_program_evaluators
+#define GL_APPLE_vertex_program_evaluators 1
+#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 PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname);
+typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname);
+typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);
+typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);
+typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
+typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname);
+GLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname);
+GLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname);
+GLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);
+GLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);
+GLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
+GLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);
+#endif
+#endif /* GL_APPLE_vertex_program_evaluators */
+
+#ifndef GL_APPLE_ycbcr_422
+#define GL_APPLE_ycbcr_422 1
+#define GL_YCBCR_422_APPLE                0x85B9
+#endif /* GL_APPLE_ycbcr_422 */
+
+#ifndef GL_ATI_draw_buffers
+#define GL_ATI_draw_buffers 1
+#define GL_MAX_DRAW_BUFFERS_ATI           0x8824
+#define GL_DRAW_BUFFER0_ATI               0x8825
+#define GL_DRAW_BUFFER1_ATI               0x8826
+#define GL_DRAW_BUFFER2_ATI               0x8827
+#define GL_DRAW_BUFFER3_ATI               0x8828
+#define GL_DRAW_BUFFER4_ATI               0x8829
+#define GL_DRAW_BUFFER5_ATI               0x882A
+#define GL_DRAW_BUFFER6_ATI               0x882B
+#define GL_DRAW_BUFFER7_ATI               0x882C
+#define GL_DRAW_BUFFER8_ATI               0x882D
+#define GL_DRAW_BUFFER9_ATI               0x882E
+#define GL_DRAW_BUFFER10_ATI              0x882F
+#define GL_DRAW_BUFFER11_ATI              0x8830
+#define GL_DRAW_BUFFER12_ATI              0x8831
+#define GL_DRAW_BUFFER13_ATI              0x8832
+#define GL_DRAW_BUFFER14_ATI              0x8833
+#define GL_DRAW_BUFFER15_ATI              0x8834
+typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs);
+#endif
+#endif /* GL_ATI_draw_buffers */
+
+#ifndef GL_ATI_element_array
+#define GL_ATI_element_array 1
+#define GL_ELEMENT_ARRAY_ATI              0x8768
+#define GL_ELEMENT_ARRAY_TYPE_ATI         0x8769
+#define GL_ELEMENT_ARRAY_POINTER_ATI      0x876A
+typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const void *pointer);
+typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count);
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glElementPointerATI (GLenum type, const void *pointer);
+GLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count);
+GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count);
+#endif
+#endif /* GL_ATI_element_array */
+
+#ifndef GL_ATI_envmap_bumpmap
+#define GL_ATI_envmap_bumpmap 1
+#define GL_BUMP_ROT_MATRIX_ATI            0x8775
+#define GL_BUMP_ROT_MATRIX_SIZE_ATI       0x8776
+#define GL_BUMP_NUM_TEX_UNITS_ATI         0x8777
+#define GL_BUMP_TEX_UNITS_ATI             0x8778
+#define GL_DUDV_ATI                       0x8779
+#define GL_DU8DV8_ATI                     0x877A
+#define GL_BUMP_ENVMAP_ATI                0x877B
+#define GL_BUMP_TARGET_ATI                0x877C
+typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param);
+typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param);
+typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param);
+GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param);
+GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param);
+#endif
+#endif /* GL_ATI_envmap_bumpmap */
+
+#ifndef GL_ATI_fragment_shader
+#define GL_ATI_fragment_shader 1
+#define GL_FRAGMENT_SHADER_ATI            0x8920
+#define GL_REG_0_ATI                      0x8921
+#define GL_REG_1_ATI                      0x8922
+#define GL_REG_2_ATI                      0x8923
+#define GL_REG_3_ATI                      0x8924
+#define GL_REG_4_ATI                      0x8925
+#define GL_REG_5_ATI                      0x8926
+#define GL_REG_6_ATI                      0x8927
+#define GL_REG_7_ATI                      0x8928
+#define GL_REG_8_ATI                      0x8929
+#define GL_REG_9_ATI                      0x892A
+#define GL_REG_10_ATI                     0x892B
+#define GL_REG_11_ATI                     0x892C
+#define GL_REG_12_ATI                     0x892D
+#define GL_REG_13_ATI                     0x892E
+#define GL_REG_14_ATI                     0x892F
+#define GL_REG_15_ATI                     0x8930
+#define GL_REG_16_ATI                     0x8931
+#define GL_REG_17_ATI                     0x8932
+#define GL_REG_18_ATI                     0x8933
+#define GL_REG_19_ATI                     0x8934
+#define GL_REG_20_ATI                     0x8935
+#define GL_REG_21_ATI                     0x8936
+#define GL_REG_22_ATI                     0x8937
+#define GL_REG_23_ATI                     0x8938
+#define GL_REG_24_ATI                     0x8939
+#define GL_REG_25_ATI                     0x893A
+#define GL_REG_26_ATI                     0x893B
+#define GL_REG_27_ATI                     0x893C
+#define GL_REG_28_ATI                     0x893D
+#define GL_REG_29_ATI                     0x893E
+#define GL_REG_30_ATI                     0x893F
+#define GL_REG_31_ATI                     0x8940
+#define GL_CON_0_ATI                      0x8941
+#define GL_CON_1_ATI                      0x8942
+#define GL_CON_2_ATI                      0x8943
+#define GL_CON_3_ATI                      0x8944
+#define GL_CON_4_ATI                      0x8945
+#define GL_CON_5_ATI                      0x8946
+#define GL_CON_6_ATI                      0x8947
+#define GL_CON_7_ATI                      0x8948
+#define GL_CON_8_ATI                      0x8949
+#define GL_CON_9_ATI                      0x894A
+#define GL_CON_10_ATI                     0x894B
+#define GL_CON_11_ATI                     0x894C
+#define GL_CON_12_ATI                     0x894D
+#define GL_CON_13_ATI                     0x894E
+#define GL_CON_14_ATI                     0x894F
+#define GL_CON_15_ATI                     0x8950
+#define GL_CON_16_ATI                     0x8951
+#define GL_CON_17_ATI                     0x8952
+#define GL_CON_18_ATI                     0x8953
+#define GL_CON_19_ATI                     0x8954
+#define GL_CON_20_ATI                     0x8955
+#define GL_CON_21_ATI                     0x8956
+#define GL_CON_22_ATI                     0x8957
+#define GL_CON_23_ATI                     0x8958
+#define GL_CON_24_ATI                     0x8959
+#define GL_CON_25_ATI                     0x895A
+#define GL_CON_26_ATI                     0x895B
+#define GL_CON_27_ATI                     0x895C
+#define GL_CON_28_ATI                     0x895D
+#define GL_CON_29_ATI                     0x895E
+#define GL_CON_30_ATI                     0x895F
+#define GL_CON_31_ATI                     0x8960
+#define GL_MOV_ATI                        0x8961
+#define GL_ADD_ATI                        0x8963
+#define GL_MUL_ATI                        0x8964
+#define GL_SUB_ATI                        0x8965
+#define GL_DOT3_ATI                       0x8966
+#define GL_DOT4_ATI                       0x8967
+#define GL_MAD_ATI                        0x8968
+#define GL_LERP_ATI                       0x8969
+#define GL_CND_ATI                        0x896A
+#define GL_CND0_ATI                       0x896B
+#define GL_DOT2_ADD_ATI                   0x896C
+#define GL_SECONDARY_INTERPOLATOR_ATI     0x896D
+#define GL_NUM_FRAGMENT_REGISTERS_ATI     0x896E
+#define GL_NUM_FRAGMENT_CONSTANTS_ATI     0x896F
+#define GL_NUM_PASSES_ATI                 0x8970
+#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI  0x8971
+#define GL_NUM_INSTRUCTIONS_TOTAL_ATI     0x8972
+#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973
+#define GL_NUM_LOOPBACK_COMPONENTS_ATI    0x8974
+#define GL_COLOR_ALPHA_PAIRING_ATI        0x8975
+#define GL_SWIZZLE_STR_ATI                0x8976
+#define GL_SWIZZLE_STQ_ATI                0x8977
+#define GL_SWIZZLE_STR_DR_ATI             0x8978
+#define GL_SWIZZLE_STQ_DQ_ATI             0x8979
+#define GL_SWIZZLE_STRQ_ATI               0x897A
+#define GL_SWIZZLE_STRQ_DQ_ATI            0x897B
+#define GL_RED_BIT_ATI                    0x00000001
+#define GL_GREEN_BIT_ATI                  0x00000002
+#define GL_BLUE_BIT_ATI                   0x00000004
+#define GL_2X_BIT_ATI                     0x00000001
+#define GL_4X_BIT_ATI                     0x00000002
+#define GL_8X_BIT_ATI                     0x00000004
+#define GL_HALF_BIT_ATI                   0x00000008
+#define GL_QUARTER_BIT_ATI                0x00000010
+#define GL_EIGHTH_BIT_ATI                 0x00000020
+#define GL_SATURATE_BIT_ATI               0x00000040
+#define GL_COMP_BIT_ATI                   0x00000002
+#define GL_NEGATE_BIT_ATI                 0x00000004
+#define GL_BIAS_BIT_ATI                   0x00000008
+typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range);
+typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void);
+typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void);
+typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle);
+typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle);
+typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range);
+GLAPI void APIENTRY glBindFragmentShaderATI (GLuint id);
+GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id);
+GLAPI void APIENTRY glBeginFragmentShaderATI (void);
+GLAPI void APIENTRY glEndFragmentShaderATI (void);
+GLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle);
+GLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle);
+GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value);
+#endif
+#endif /* GL_ATI_fragment_shader */
+
+#ifndef GL_ATI_map_object_buffer
+#define GL_ATI_map_object_buffer 1
+typedef void *(APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void *APIENTRY glMapObjectBufferATI (GLuint buffer);
+GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer);
+#endif
+#endif /* GL_ATI_map_object_buffer */
+
+#ifndef GL_ATI_meminfo
+#define GL_ATI_meminfo 1
+#define GL_VBO_FREE_MEMORY_ATI            0x87FB
+#define GL_TEXTURE_FREE_MEMORY_ATI        0x87FC
+#define GL_RENDERBUFFER_FREE_MEMORY_ATI   0x87FD
+#endif /* GL_ATI_meminfo */
+
+#ifndef GL_ATI_pixel_format_float
+#define GL_ATI_pixel_format_float 1
+#define GL_RGBA_FLOAT_MODE_ATI            0x8820
+#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835
+#endif /* GL_ATI_pixel_format_float */
+
+#ifndef GL_ATI_pn_triangles
+#define GL_ATI_pn_triangles 1
+#define GL_PN_TRIANGLES_ATI               0x87F0
+#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1
+#define GL_PN_TRIANGLES_POINT_MODE_ATI    0x87F2
+#define GL_PN_TRIANGLES_NORMAL_MODE_ATI   0x87F3
+#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4
+#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5
+#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6
+#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7
+#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8
+typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param);
+GLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param);
+#endif
+#endif /* GL_ATI_pn_triangles */
+
+#ifndef GL_ATI_separate_stencil
+#define GL_ATI_separate_stencil 1
+#define GL_STENCIL_BACK_FUNC_ATI          0x8800
+#define GL_STENCIL_BACK_FAIL_ATI          0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803
+typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+#endif
+#endif /* GL_ATI_separate_stencil */
+
+#ifndef GL_ATI_text_fragment_shader
+#define GL_ATI_text_fragment_shader 1
+#define GL_TEXT_FRAGMENT_SHADER_ATI       0x8200
+#endif /* GL_ATI_text_fragment_shader */
+
+#ifndef GL_ATI_texture_env_combine3
+#define GL_ATI_texture_env_combine3 1
+#define GL_MODULATE_ADD_ATI               0x8744
+#define GL_MODULATE_SIGNED_ADD_ATI        0x8745
+#define GL_MODULATE_SUBTRACT_ATI          0x8746
+#endif /* GL_ATI_texture_env_combine3 */
+
+#ifndef GL_ATI_texture_float
+#define GL_ATI_texture_float 1
+#define GL_RGBA_FLOAT32_ATI               0x8814
+#define GL_RGB_FLOAT32_ATI                0x8815
+#define GL_ALPHA_FLOAT32_ATI              0x8816
+#define GL_INTENSITY_FLOAT32_ATI          0x8817
+#define GL_LUMINANCE_FLOAT32_ATI          0x8818
+#define GL_LUMINANCE_ALPHA_FLOAT32_ATI    0x8819
+#define GL_RGBA_FLOAT16_ATI               0x881A
+#define GL_RGB_FLOAT16_ATI                0x881B
+#define GL_ALPHA_FLOAT16_ATI              0x881C
+#define GL_INTENSITY_FLOAT16_ATI          0x881D
+#define GL_LUMINANCE_FLOAT16_ATI          0x881E
+#define GL_LUMINANCE_ALPHA_FLOAT16_ATI    0x881F
+#endif /* GL_ATI_texture_float */
+
+#ifndef GL_ATI_texture_mirror_once
+#define GL_ATI_texture_mirror_once 1
+#define GL_MIRROR_CLAMP_ATI               0x8742
+#define GL_MIRROR_CLAMP_TO_EDGE_ATI       0x8743
+#endif /* GL_ATI_texture_mirror_once */
+
+#ifndef GL_ATI_vertex_array_object
+#define GL_ATI_vertex_array_object 1
+#define GL_STATIC_ATI                     0x8760
+#define GL_DYNAMIC_ATI                    0x8761
+#define GL_PRESERVE_ATI                   0x8762
+#define GL_DISCARD_ATI                    0x8763
+#define GL_OBJECT_BUFFER_SIZE_ATI         0x8764
+#define GL_OBJECT_BUFFER_USAGE_ATI        0x8765
+#define GL_ARRAY_OBJECT_BUFFER_ATI        0x8766
+#define GL_ARRAY_OBJECT_OFFSET_ATI        0x8767
+typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const void *pointer, GLenum usage);
+typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve);
+typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const void *pointer, GLenum usage);
+GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer);
+GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve);
+GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer);
+GLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params);
+GLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params);
+#endif
+#endif /* GL_ATI_vertex_array_object */
+
+#ifndef GL_ATI_vertex_attrib_array_object
+#define GL_ATI_vertex_attrib_array_object 1
+typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset);
+GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params);
+#endif
+#endif /* GL_ATI_vertex_attrib_array_object */
+
+#ifndef GL_ATI_vertex_streams
+#define GL_ATI_vertex_streams 1
+#define GL_MAX_VERTEX_STREAMS_ATI         0x876B
+#define GL_VERTEX_STREAM0_ATI             0x876C
+#define GL_VERTEX_STREAM1_ATI             0x876D
+#define GL_VERTEX_STREAM2_ATI             0x876E
+#define GL_VERTEX_STREAM3_ATI             0x876F
+#define GL_VERTEX_STREAM4_ATI             0x8770
+#define GL_VERTEX_STREAM5_ATI             0x8771
+#define GL_VERTEX_STREAM6_ATI             0x8772
+#define GL_VERTEX_STREAM7_ATI             0x8773
+#define GL_VERTEX_SOURCE_ATI              0x8774
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz);
+typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream);
+typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x);
+GLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords);
+GLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x);
+GLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords);
+GLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x);
+GLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords);
+GLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x);
+GLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords);
+GLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y);
+GLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords);
+GLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y);
+GLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords);
+GLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y);
+GLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords);
+GLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords);
+GLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords);
+GLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords);
+GLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords);
+GLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords);
+GLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords);
+GLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords);
+GLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords);
+GLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords);
+GLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz);
+GLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords);
+GLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz);
+GLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords);
+GLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz);
+GLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords);
+GLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz);
+GLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords);
+GLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz);
+GLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords);
+GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream);
+GLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param);
+GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param);
+#endif
+#endif /* GL_ATI_vertex_streams */
+
+#ifndef GL_EXT_422_pixels
+#define GL_EXT_422_pixels 1
+#define GL_422_EXT                        0x80CC
+#define GL_422_REV_EXT                    0x80CD
+#define GL_422_AVERAGE_EXT                0x80CE
+#define GL_422_REV_AVERAGE_EXT            0x80CF
+#endif /* GL_EXT_422_pixels */
+
+#ifndef GL_EXT_abgr
+#define GL_EXT_abgr 1
+#define GL_ABGR_EXT                       0x8000
+#endif /* GL_EXT_abgr */
+
+#ifndef GL_EXT_bgra
+#define GL_EXT_bgra 1
+#define GL_BGR_EXT                        0x80E0
+#define GL_BGRA_EXT                       0x80E1
+#endif /* GL_EXT_bgra */
+
+#ifndef GL_EXT_bindable_uniform
+#define GL_EXT_bindable_uniform 1
+#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 PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer);
+typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location);
+typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer);
+GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location);
+GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location);
+#endif
+#endif /* GL_EXT_bindable_uniform */
+
+#ifndef GL_EXT_blend_color
+#define GL_EXT_blend_color 1
+#define GL_CONSTANT_COLOR_EXT             0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR_EXT   0x8002
+#define GL_CONSTANT_ALPHA_EXT             0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT   0x8004
+#define GL_BLEND_COLOR_EXT                0x8005
+typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendColorEXT (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+#endif
+#endif /* GL_EXT_blend_color */
+
+#ifndef GL_EXT_blend_equation_separate
+#define GL_EXT_blend_equation_separate 1
+#define GL_BLEND_EQUATION_RGB_EXT         0x8009
+#define GL_BLEND_EQUATION_ALPHA_EXT       0x883D
+typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha);
+#endif
+#endif /* GL_EXT_blend_equation_separate */
+
+#ifndef GL_EXT_blend_func_separate
+#define GL_EXT_blend_func_separate 1
+#define GL_BLEND_DST_RGB_EXT              0x80C8
+#define GL_BLEND_SRC_RGB_EXT              0x80C9
+#define GL_BLEND_DST_ALPHA_EXT            0x80CA
+#define GL_BLEND_SRC_ALPHA_EXT            0x80CB
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+#endif
+#endif /* GL_EXT_blend_func_separate */
+
+#ifndef GL_EXT_blend_logic_op
+#define GL_EXT_blend_logic_op 1
+#endif /* GL_EXT_blend_logic_op */
+
+#ifndef GL_EXT_blend_minmax
+#define GL_EXT_blend_minmax 1
+#define GL_MIN_EXT                        0x8007
+#define GL_MAX_EXT                        0x8008
+#define GL_FUNC_ADD_EXT                   0x8006
+#define GL_BLEND_EQUATION_EXT             0x8009
+typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationEXT (GLenum mode);
+#endif
+#endif /* GL_EXT_blend_minmax */
+
+#ifndef GL_EXT_blend_subtract
+#define GL_EXT_blend_subtract 1
+#define GL_FUNC_SUBTRACT_EXT              0x800A
+#define GL_FUNC_REVERSE_SUBTRACT_EXT      0x800B
+#endif /* GL_EXT_blend_subtract */
+
+#ifndef GL_EXT_clip_volume_hint
+#define GL_EXT_clip_volume_hint 1
+#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT  0x80F0
+#endif /* GL_EXT_clip_volume_hint */
+
+#ifndef GL_EXT_cmyka
+#define GL_EXT_cmyka 1
+#define GL_CMYK_EXT                       0x800C
+#define GL_CMYKA_EXT                      0x800D
+#define GL_PACK_CMYK_HINT_EXT             0x800E
+#define GL_UNPACK_CMYK_HINT_EXT           0x800F
+#endif /* GL_EXT_cmyka */
+
+#ifndef GL_EXT_color_subtable
+#define GL_EXT_color_subtable 1
+typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+#endif
+#endif /* GL_EXT_color_subtable */
+
+#ifndef GL_EXT_compiled_vertex_array
+#define GL_EXT_compiled_vertex_array 1
+#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT   0x81A8
+#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT   0x81A9
+typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count);
+typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count);
+GLAPI void APIENTRY glUnlockArraysEXT (void);
+#endif
+#endif /* GL_EXT_compiled_vertex_array */
+
+#ifndef GL_EXT_convolution
+#define GL_EXT_convolution 1
+#define GL_CONVOLUTION_1D_EXT             0x8010
+#define GL_CONVOLUTION_2D_EXT             0x8011
+#define GL_SEPARABLE_2D_EXT               0x8012
+#define GL_CONVOLUTION_BORDER_MODE_EXT    0x8013
+#define GL_CONVOLUTION_FILTER_SCALE_EXT   0x8014
+#define GL_CONVOLUTION_FILTER_BIAS_EXT    0x8015
+#define GL_REDUCE_EXT                     0x8016
+#define GL_CONVOLUTION_FORMAT_EXT         0x8017
+#define GL_CONVOLUTION_WIDTH_EXT          0x8018
+#define GL_CONVOLUTION_HEIGHT_EXT         0x8019
+#define GL_MAX_CONVOLUTION_WIDTH_EXT      0x801A
+#define GL_MAX_CONVOLUTION_HEIGHT_EXT     0x801B
+#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C
+#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D
+#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E
+#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F
+#define GL_POST_CONVOLUTION_RED_BIAS_EXT  0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023
+typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image);
+typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params);
+typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *image);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span);
+typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image);
+GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image);
+GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params);
+GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params);
+GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, void *image);
+GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span);
+GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column);
+#endif
+#endif /* GL_EXT_convolution */
+
+#ifndef GL_EXT_coordinate_frame
+#define GL_EXT_coordinate_frame 1
+#define GL_TANGENT_ARRAY_EXT              0x8439
+#define GL_BINORMAL_ARRAY_EXT             0x843A
+#define GL_CURRENT_TANGENT_EXT            0x843B
+#define GL_CURRENT_BINORMAL_EXT           0x843C
+#define GL_TANGENT_ARRAY_TYPE_EXT         0x843E
+#define GL_TANGENT_ARRAY_STRIDE_EXT       0x843F
+#define GL_BINORMAL_ARRAY_TYPE_EXT        0x8440
+#define GL_BINORMAL_ARRAY_STRIDE_EXT      0x8441
+#define GL_TANGENT_ARRAY_POINTER_EXT      0x8442
+#define GL_BINORMAL_ARRAY_POINTER_EXT     0x8443
+#define GL_MAP1_TANGENT_EXT               0x8444
+#define GL_MAP2_TANGENT_EXT               0x8445
+#define GL_MAP1_BINORMAL_EXT              0x8446
+#define GL_MAP2_BINORMAL_EXT              0x8447
+typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz);
+typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz);
+typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz);
+typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz);
+typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz);
+typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz);
+typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz);
+typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz);
+typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz);
+typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz);
+typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz);
+GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v);
+GLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz);
+GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v);
+GLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz);
+GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v);
+GLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz);
+GLAPI void APIENTRY glTangent3ivEXT (const GLint *v);
+GLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz);
+GLAPI void APIENTRY glTangent3svEXT (const GLshort *v);
+GLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz);
+GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v);
+GLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz);
+GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v);
+GLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz);
+GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v);
+GLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz);
+GLAPI void APIENTRY glBinormal3ivEXT (const GLint *v);
+GLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz);
+GLAPI void APIENTRY glBinormal3svEXT (const GLshort *v);
+GLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const void *pointer);
+#endif
+#endif /* GL_EXT_coordinate_frame */
+
+#ifndef GL_EXT_copy_texture
+#define GL_EXT_copy_texture 1
+typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_EXT_copy_texture */
+
+#ifndef GL_EXT_cull_vertex
+#define GL_EXT_cull_vertex 1
+#define GL_CULL_VERTEX_EXT                0x81AA
+#define GL_CULL_VERTEX_EYE_POSITION_EXT   0x81AB
+#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC
+typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params);
+#endif
+#endif /* GL_EXT_cull_vertex */
+
+#ifndef GL_EXT_debug_label
+#define GL_EXT_debug_label 1
+#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 PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label);
+typedef void (APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label);
+GLAPI void APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label);
+#endif
+#endif /* GL_EXT_debug_label */
+
+#ifndef GL_EXT_debug_marker
+#define GL_EXT_debug_marker 1
+typedef void (APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker);
+typedef void (APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker);
+typedef void (APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker);
+GLAPI void APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker);
+GLAPI void APIENTRY glPopGroupMarkerEXT (void);
+#endif
+#endif /* GL_EXT_debug_marker */
+
+#ifndef GL_EXT_depth_bounds_test
+#define GL_EXT_depth_bounds_test 1
+#define GL_DEPTH_BOUNDS_TEST_EXT          0x8890
+#define GL_DEPTH_BOUNDS_EXT               0x8891
+typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax);
+#endif
+#endif /* GL_EXT_depth_bounds_test */
+
+#ifndef GL_EXT_direct_state_access
+#define GL_EXT_direct_state_access 1
+#define GL_PROGRAM_MATRIX_EXT             0x8E2D
+#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT   0x8E2E
+#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F
+typedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m);
+typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask);
+typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DEXTPROC) (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);
+typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture);
+typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param);
+typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params);
+typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels);
+typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE3DEXTPROC) (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);
+typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index);
+typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index);
+typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data);
+typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data);
+typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, void **data);
+typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index);
+typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index);
+typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data);
+typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (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);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, void *img);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (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);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits);
+typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, void *img);
+typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data);
+typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access);
+typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, void **params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer);
+typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params);
+typedef void (APIENTRYP PFNGLENABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index);
+typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index);
+typedef void (APIENTRYP PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, void **params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, void *string);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target);
+typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face);
+typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYINDEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYNORMALOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array);
+typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index);
+typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index);
+typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERVEXTPROC) (GLuint vaobj, GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERVEXTPROC) (GLuint vaobj, GLenum pname, void **param);
+typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param);
+typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, void **param);
+typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length);
+typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags);
+typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident);
+typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC) (GLuint vaobj, GLuint index, GLuint divisor);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m);
+GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m);
+GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode);
+GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
+GLAPI void APIENTRY glMatrixPopEXT (GLenum mode);
+GLAPI void APIENTRY glMatrixPushEXT (GLenum mode);
+GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask);
+GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask);
+GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels);
+GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params);
+GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY 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);
+GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture);
+GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param);
+GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params);
+GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param);
+GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params);
+GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels);
+GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params);
+GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY 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);
+GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index);
+GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index);
+GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data);
+GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data);
+GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, void **data);
+GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index);
+GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index);
+GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index);
+GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data);
+GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data);
+GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY 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);
+GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, void *img);
+GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY 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);
+GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits);
+GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, void *img);
+GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m);
+GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m);
+GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage);
+GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data);
+GLAPI void *APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access);
+GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer);
+GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, void **params);
+GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data);
+GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0);
+GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1);
+GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0);
+GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1);
+GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
+GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer);
+GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer);
+GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params);
+GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params);
+GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0);
+GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1);
+GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params);
+GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params);
+GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params);
+GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params);
+GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params);
+GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params);
+GLAPI void APIENTRY glEnableClientStateiEXT (GLenum array, GLuint index);
+GLAPI void APIENTRY glDisableClientStateiEXT (GLenum array, GLuint index);
+GLAPI void APIENTRY glGetFloati_vEXT (GLenum pname, GLuint index, GLfloat *params);
+GLAPI void APIENTRY glGetDoublei_vEXT (GLenum pname, GLuint index, GLdouble *params);
+GLAPI void APIENTRY glGetPointeri_vEXT (GLenum pname, GLuint index, void **params);
+GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string);
+GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params);
+GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params);
+GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params);
+GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params);
+GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, void *string);
+GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target);
+GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target);
+GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target);
+GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode);
+GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs);
+GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode);
+GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level);
+GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer);
+GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face);
+GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer);
+GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer);
+GLAPI void APIENTRY glVertexArrayVertexOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayEdgeFlagOffsetEXT (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayIndexOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayNormalOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayMultiTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayFogCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArraySecondaryColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayVertexAttribOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glVertexArrayVertexAttribIOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glEnableVertexArrayEXT (GLuint vaobj, GLenum array);
+GLAPI void APIENTRY glDisableVertexArrayEXT (GLuint vaobj, GLenum array);
+GLAPI void APIENTRY glEnableVertexArrayAttribEXT (GLuint vaobj, GLuint index);
+GLAPI void APIENTRY glDisableVertexArrayAttribEXT (GLuint vaobj, GLuint index);
+GLAPI void APIENTRY glGetVertexArrayIntegervEXT (GLuint vaobj, GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetVertexArrayPointervEXT (GLuint vaobj, GLenum pname, void **param);
+GLAPI void APIENTRY glGetVertexArrayIntegeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, GLint *param);
+GLAPI void APIENTRY glGetVertexArrayPointeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, void **param);
+GLAPI void *APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access);
+GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length);
+GLAPI void APIENTRY glNamedBufferStorageEXT (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags);
+GLAPI void APIENTRY glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param);
+GLAPI void APIENTRY glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params);
+GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x);
+GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
+GLAPI void APIENTRY glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
+GLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
+GLAPI void APIENTRY glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);
+GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex);
+GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor);
+GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+GLAPI void APIENTRY glTexturePageCommitmentEXT (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident);
+GLAPI void APIENTRY glVertexArrayVertexAttribDivisorEXT (GLuint vaobj, GLuint index, GLuint divisor);
+#endif
+#endif /* GL_EXT_direct_state_access */
+
+#ifndef GL_EXT_draw_buffers2
+#define GL_EXT_draw_buffers2 1
+typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
+#endif
+#endif /* GL_EXT_draw_buffers2 */
+
+#ifndef GL_EXT_draw_instanced
+#define GL_EXT_draw_instanced 1
+typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount);
+GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
+#endif
+#endif /* GL_EXT_draw_instanced */
+
+#ifndef GL_EXT_draw_range_elements
+#define GL_EXT_draw_range_elements 1
+#define GL_MAX_ELEMENTS_VERTICES_EXT      0x80E8
+#define GL_MAX_ELEMENTS_INDICES_EXT       0x80E9
+typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices);
+#endif
+#endif /* GL_EXT_draw_range_elements */
+
+#ifndef GL_EXT_fog_coord
+#define GL_EXT_fog_coord 1
+#define GL_FOG_COORDINATE_SOURCE_EXT      0x8450
+#define GL_FOG_COORDINATE_EXT             0x8451
+#define GL_FRAGMENT_DEPTH_EXT             0x8452
+#define GL_CURRENT_FOG_COORDINATE_EXT     0x8453
+#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT  0x8454
+#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455
+#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456
+#define GL_FOG_COORDINATE_ARRAY_EXT       0x8457
+typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord);
+typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord);
+typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord);
+typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord);
+typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFogCoordfEXT (GLfloat coord);
+GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord);
+GLAPI void APIENTRY glFogCoorddEXT (GLdouble coord);
+GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord);
+GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const void *pointer);
+#endif
+#endif /* GL_EXT_fog_coord */
+
+#ifndef GL_EXT_framebuffer_blit
+#define GL_EXT_framebuffer_blit 1
+#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 PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#endif
+#endif /* GL_EXT_framebuffer_blit */
+
+#ifndef GL_EXT_framebuffer_multisample
+#define GL_EXT_framebuffer_multisample 1
+#define GL_RENDERBUFFER_SAMPLES_EXT       0x8CAB
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56
+#define GL_MAX_SAMPLES_EXT                0x8D57
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_EXT_framebuffer_multisample */
+
+#ifndef GL_EXT_framebuffer_multisample_blit_scaled
+#define GL_EXT_framebuffer_multisample_blit_scaled 1
+#define GL_SCALED_RESOLVE_FASTEST_EXT     0x90BA
+#define GL_SCALED_RESOLVE_NICEST_EXT      0x90BB
+#endif /* GL_EXT_framebuffer_multisample_blit_scaled */
+
+#ifndef GL_EXT_framebuffer_object
+#define GL_EXT_framebuffer_object 1
+#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_MAX_COLOR_ATTACHMENTS_EXT      0x8CDF
+#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
+#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 PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers);
+typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer);
+typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer);
+typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers);
+typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers);
+typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer);
+GLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer);
+GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers);
+GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers);
+GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer);
+GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer);
+GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers);
+GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers);
+GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target);
+GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGenerateMipmapEXT (GLenum target);
+#endif
+#endif /* GL_EXT_framebuffer_object */
+
+#ifndef GL_EXT_framebuffer_sRGB
+#define GL_EXT_framebuffer_sRGB 1
+#define GL_FRAMEBUFFER_SRGB_EXT           0x8DB9
+#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT   0x8DBA
+#endif /* GL_EXT_framebuffer_sRGB */
+
+#ifndef GL_EXT_geometry_shader4
+#define GL_EXT_geometry_shader4 1
+#define GL_GEOMETRY_SHADER_EXT            0x8DD9
+#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_TEXTURE_IMAGE_UNITS_EXT 0x8C29
+#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_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1
+#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_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4
+#define GL_PROGRAM_POINT_SIZE_EXT         0x8642
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value);
+#endif
+#endif /* GL_EXT_geometry_shader4 */
+
+#ifndef GL_EXT_gpu_program_parameters
+#define GL_EXT_gpu_program_parameters 1
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params);
+#endif
+#endif /* GL_EXT_gpu_program_parameters */
+
+#ifndef GL_EXT_gpu_shader4
+#define GL_EXT_gpu_shader4 1
+#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 PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params);
+typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0);
+typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1);
+typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params);
+GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name);
+GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0);
+GLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1);
+GLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2);
+GLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+GLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value);
+GLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value);
+#endif
+#endif /* GL_EXT_gpu_shader4 */
+
+#ifndef GL_EXT_histogram
+#define GL_EXT_histogram 1
+#define GL_HISTOGRAM_EXT                  0x8024
+#define GL_PROXY_HISTOGRAM_EXT            0x8025
+#define GL_HISTOGRAM_WIDTH_EXT            0x8026
+#define GL_HISTOGRAM_FORMAT_EXT           0x8027
+#define GL_HISTOGRAM_RED_SIZE_EXT         0x8028
+#define GL_HISTOGRAM_GREEN_SIZE_EXT       0x8029
+#define GL_HISTOGRAM_BLUE_SIZE_EXT        0x802A
+#define GL_HISTOGRAM_ALPHA_SIZE_EXT       0x802B
+#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT   0x802C
+#define GL_HISTOGRAM_SINK_EXT             0x802D
+#define GL_MINMAX_EXT                     0x802E
+#define GL_MINMAX_FORMAT_EXT              0x802F
+#define GL_MINMAX_SINK_EXT                0x8030
+#define GL_TABLE_TOO_LARGE_EXT            0x8031
+typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values);
+GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+GLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink);
+GLAPI void APIENTRY glResetHistogramEXT (GLenum target);
+GLAPI void APIENTRY glResetMinmaxEXT (GLenum target);
+#endif
+#endif /* GL_EXT_histogram */
+
+#ifndef GL_EXT_index_array_formats
+#define GL_EXT_index_array_formats 1
+#define GL_IUI_V2F_EXT                    0x81AD
+#define GL_IUI_V3F_EXT                    0x81AE
+#define GL_IUI_N3F_V2F_EXT                0x81AF
+#define GL_IUI_N3F_V3F_EXT                0x81B0
+#define GL_T2F_IUI_V2F_EXT                0x81B1
+#define GL_T2F_IUI_V3F_EXT                0x81B2
+#define GL_T2F_IUI_N3F_V2F_EXT            0x81B3
+#define GL_T2F_IUI_N3F_V3F_EXT            0x81B4
+#endif /* GL_EXT_index_array_formats */
+
+#ifndef GL_EXT_index_func
+#define GL_EXT_index_func 1
+#define GL_INDEX_TEST_EXT                 0x81B5
+#define GL_INDEX_TEST_FUNC_EXT            0x81B6
+#define GL_INDEX_TEST_REF_EXT             0x81B7
+typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref);
+#endif
+#endif /* GL_EXT_index_func */
+
+#ifndef GL_EXT_index_material
+#define GL_EXT_index_material 1
+#define GL_INDEX_MATERIAL_EXT             0x81B8
+#define GL_INDEX_MATERIAL_PARAMETER_EXT   0x81B9
+#define GL_INDEX_MATERIAL_FACE_EXT        0x81BA
+typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode);
+#endif
+#endif /* GL_EXT_index_material */
+
+#ifndef GL_EXT_index_texture
+#define GL_EXT_index_texture 1
+#endif /* GL_EXT_index_texture */
+
+#ifndef GL_EXT_light_texture
+#define GL_EXT_light_texture 1
+#define GL_FRAGMENT_MATERIAL_EXT          0x8349
+#define GL_FRAGMENT_NORMAL_EXT            0x834A
+#define GL_FRAGMENT_COLOR_EXT             0x834C
+#define GL_ATTENUATION_EXT                0x834D
+#define GL_SHADOW_ATTENUATION_EXT         0x834E
+#define GL_TEXTURE_APPLICATION_MODE_EXT   0x834F
+#define GL_TEXTURE_LIGHT_EXT              0x8350
+#define GL_TEXTURE_MATERIAL_FACE_EXT      0x8351
+#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352
+typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode);
+typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname);
+typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glApplyTextureEXT (GLenum mode);
+GLAPI void APIENTRY glTextureLightEXT (GLenum pname);
+GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode);
+#endif
+#endif /* GL_EXT_light_texture */
+
+#ifndef GL_EXT_misc_attribute
+#define GL_EXT_misc_attribute 1
+#endif /* GL_EXT_misc_attribute */
+
+#ifndef GL_EXT_multi_draw_arrays
+#define GL_EXT_multi_draw_arrays 1
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
+GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount);
+#endif
+#endif /* GL_EXT_multi_draw_arrays */
+
+#ifndef GL_EXT_multisample
+#define GL_EXT_multisample 1
+#define GL_MULTISAMPLE_EXT                0x809D
+#define GL_SAMPLE_ALPHA_TO_MASK_EXT       0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_EXT        0x809F
+#define GL_SAMPLE_MASK_EXT                0x80A0
+#define GL_1PASS_EXT                      0x80A1
+#define GL_2PASS_0_EXT                    0x80A2
+#define GL_2PASS_1_EXT                    0x80A3
+#define GL_4PASS_0_EXT                    0x80A4
+#define GL_4PASS_1_EXT                    0x80A5
+#define GL_4PASS_2_EXT                    0x80A6
+#define GL_4PASS_3_EXT                    0x80A7
+#define GL_SAMPLE_BUFFERS_EXT             0x80A8
+#define GL_SAMPLES_EXT                    0x80A9
+#define GL_SAMPLE_MASK_VALUE_EXT          0x80AA
+#define GL_SAMPLE_MASK_INVERT_EXT         0x80AB
+#define GL_SAMPLE_PATTERN_EXT             0x80AC
+#define GL_MULTISAMPLE_BIT_EXT            0x20000000
+typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert);
+typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert);
+GLAPI void APIENTRY glSamplePatternEXT (GLenum pattern);
+#endif
+#endif /* GL_EXT_multisample */
+
+#ifndef GL_EXT_packed_depth_stencil
+#define GL_EXT_packed_depth_stencil 1
+#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
+#endif /* GL_EXT_packed_depth_stencil */
+
+#ifndef GL_EXT_packed_float
+#define GL_EXT_packed_float 1
+#define GL_R11F_G11F_B10F_EXT             0x8C3A
+#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B
+#define GL_RGBA_SIGNED_COMPONENTS_EXT     0x8C3C
+#endif /* GL_EXT_packed_float */
+
+#ifndef GL_EXT_packed_pixels
+#define GL_EXT_packed_pixels 1
+#define GL_UNSIGNED_BYTE_3_3_2_EXT        0x8032
+#define GL_UNSIGNED_SHORT_4_4_4_4_EXT     0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1_EXT     0x8034
+#define GL_UNSIGNED_INT_8_8_8_8_EXT       0x8035
+#define GL_UNSIGNED_INT_10_10_10_2_EXT    0x8036
+#endif /* GL_EXT_packed_pixels */
+
+#ifndef GL_EXT_paletted_texture
+#define GL_EXT_paletted_texture 1
+#define GL_COLOR_INDEX1_EXT               0x80E2
+#define GL_COLOR_INDEX2_EXT               0x80E3
+#define GL_COLOR_INDEX4_EXT               0x80E4
+#define GL_COLOR_INDEX8_EXT               0x80E5
+#define GL_COLOR_INDEX12_EXT              0x80E6
+#define GL_COLOR_INDEX16_EXT              0x80E7
+#define GL_TEXTURE_INDEX_SIZE_EXT         0x80ED
+typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, void *data);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table);
+GLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, void *data);
+GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);
+#endif
+#endif /* GL_EXT_paletted_texture */
+
+#ifndef GL_EXT_pixel_buffer_object
+#define GL_EXT_pixel_buffer_object 1
+#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
+#endif /* GL_EXT_pixel_buffer_object */
+
+#ifndef GL_EXT_pixel_transform
+#define GL_EXT_pixel_transform 1
+#define GL_PIXEL_TRANSFORM_2D_EXT         0x8330
+#define GL_PIXEL_MAG_FILTER_EXT           0x8331
+#define GL_PIXEL_MIN_FILTER_EXT           0x8332
+#define GL_PIXEL_CUBIC_WEIGHT_EXT         0x8333
+#define GL_CUBIC_EXT                      0x8334
+#define GL_AVERAGE_EXT                    0x8335
+#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336
+#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337
+#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT  0x8338
+typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);
+#endif
+#endif /* GL_EXT_pixel_transform */
+
+#ifndef GL_EXT_pixel_transform_color_table
+#define GL_EXT_pixel_transform_color_table 1
+#endif /* GL_EXT_pixel_transform_color_table */
+
+#ifndef GL_EXT_point_parameters
+#define GL_EXT_point_parameters 1
+#define GL_POINT_SIZE_MIN_EXT             0x8126
+#define GL_POINT_SIZE_MAX_EXT             0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_EXT  0x8128
+#define GL_DISTANCE_ATTENUATION_EXT       0x8129
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params);
+#endif
+#endif /* GL_EXT_point_parameters */
+
+#ifndef GL_EXT_polygon_offset
+#define GL_EXT_polygon_offset 1
+#define GL_POLYGON_OFFSET_EXT             0x8037
+#define GL_POLYGON_OFFSET_FACTOR_EXT      0x8038
+#define GL_POLYGON_OFFSET_BIAS_EXT        0x8039
+typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias);
+#endif
+#endif /* GL_EXT_polygon_offset */
+
+#ifndef GL_EXT_polygon_offset_clamp
+#define GL_EXT_polygon_offset_clamp 1
+#define GL_POLYGON_OFFSET_CLAMP_EXT       0x8E1B
+typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPEXTPROC) (GLfloat factor, GLfloat units, GLfloat clamp);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPolygonOffsetClampEXT (GLfloat factor, GLfloat units, GLfloat clamp);
+#endif
+#endif /* GL_EXT_polygon_offset_clamp */
+
+#ifndef GL_EXT_post_depth_coverage
+#define GL_EXT_post_depth_coverage 1
+#endif /* GL_EXT_post_depth_coverage */
+
+#ifndef GL_EXT_provoking_vertex
+#define GL_EXT_provoking_vertex 1
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C
+#define GL_FIRST_VERTEX_CONVENTION_EXT    0x8E4D
+#define GL_LAST_VERTEX_CONVENTION_EXT     0x8E4E
+#define GL_PROVOKING_VERTEX_EXT           0x8E4F
+typedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProvokingVertexEXT (GLenum mode);
+#endif
+#endif /* GL_EXT_provoking_vertex */
+
+#ifndef GL_EXT_raster_multisample
+#define GL_EXT_raster_multisample 1
+#define GL_RASTER_MULTISAMPLE_EXT         0x9327
+#define GL_RASTER_SAMPLES_EXT             0x9328
+#define GL_MAX_RASTER_SAMPLES_EXT         0x9329
+#define GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT 0x932A
+#define GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT 0x932B
+#define GL_EFFECTIVE_RASTER_SAMPLES_EXT   0x932C
+typedef void (APIENTRYP PFNGLRASTERSAMPLESEXTPROC) (GLuint samples, GLboolean fixedsamplelocations);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glRasterSamplesEXT (GLuint samples, GLboolean fixedsamplelocations);
+#endif
+#endif /* GL_EXT_raster_multisample */
+
+#ifndef GL_EXT_rescale_normal
+#define GL_EXT_rescale_normal 1
+#define GL_RESCALE_NORMAL_EXT             0x803A
+#endif /* GL_EXT_rescale_normal */
+
+#ifndef GL_EXT_secondary_color
+#define GL_EXT_secondary_color 1
+#define GL_COLOR_SUM_EXT                  0x8458
+#define GL_CURRENT_SECONDARY_COLOR_EXT    0x8459
+#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A
+#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C
+#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D
+#define GL_SECONDARY_COLOR_ARRAY_EXT      0x845E
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue);
+GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v);
+GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue);
+GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v);
+GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue);
+GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v);
+GLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue);
+GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v);
+GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue);
+GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v);
+GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue);
+GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v);
+GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue);
+GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v);
+GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue);
+GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v);
+GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer);
+#endif
+#endif /* GL_EXT_secondary_color */
+
+#ifndef GL_EXT_separate_shader_objects
+#define GL_EXT_separate_shader_objects 1
+#define GL_ACTIVE_PROGRAM_EXT             0x8B8D
+typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program);
+typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program);
+typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program);
+GLAPI void APIENTRY glActiveProgramEXT (GLuint program);
+GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string);
+#endif
+#endif /* GL_EXT_separate_shader_objects */
+
+#ifndef GL_EXT_separate_specular_color
+#define GL_EXT_separate_specular_color 1
+#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT  0x81F8
+#define GL_SINGLE_COLOR_EXT               0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR_EXT    0x81FA
+#endif /* GL_EXT_separate_specular_color */
+
+#ifndef GL_EXT_shader_image_load_formatted
+#define GL_EXT_shader_image_load_formatted 1
+#endif /* GL_EXT_shader_image_load_formatted */
+
+#ifndef GL_EXT_shader_image_load_store
+#define GL_EXT_shader_image_load_store 1
+#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 PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format);
+typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format);
+GLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers);
+#endif
+#endif /* GL_EXT_shader_image_load_store */
+
+#ifndef GL_EXT_shader_integer_mix
+#define GL_EXT_shader_integer_mix 1
+#endif /* GL_EXT_shader_integer_mix */
+
+#ifndef GL_EXT_shadow_funcs
+#define GL_EXT_shadow_funcs 1
+#endif /* GL_EXT_shadow_funcs */
+
+#ifndef GL_EXT_shared_texture_palette
+#define GL_EXT_shared_texture_palette 1
+#define GL_SHARED_TEXTURE_PALETTE_EXT     0x81FB
+#endif /* GL_EXT_shared_texture_palette */
+
+#ifndef GL_EXT_sparse_texture2
+#define GL_EXT_sparse_texture2 1
+#endif /* GL_EXT_sparse_texture2 */
+
+#ifndef GL_EXT_stencil_clear_tag
+#define GL_EXT_stencil_clear_tag 1
+#define GL_STENCIL_TAG_BITS_EXT           0x88F2
+#define GL_STENCIL_CLEAR_TAG_VALUE_EXT    0x88F3
+typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag);
+#endif
+#endif /* GL_EXT_stencil_clear_tag */
+
+#ifndef GL_EXT_stencil_two_side
+#define GL_EXT_stencil_two_side 1
+#define GL_STENCIL_TEST_TWO_SIDE_EXT      0x8910
+#define GL_ACTIVE_STENCIL_FACE_EXT        0x8911
+typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face);
+#endif
+#endif /* GL_EXT_stencil_two_side */
+
+#ifndef GL_EXT_stencil_wrap
+#define GL_EXT_stencil_wrap 1
+#define GL_INCR_WRAP_EXT                  0x8507
+#define GL_DECR_WRAP_EXT                  0x8508
+#endif /* GL_EXT_stencil_wrap */
+
+#ifndef GL_EXT_subtexture
+#define GL_EXT_subtexture 1
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
+#endif
+#endif /* GL_EXT_subtexture */
+
+#ifndef GL_EXT_texture
+#define GL_EXT_texture 1
+#define GL_ALPHA4_EXT                     0x803B
+#define GL_ALPHA8_EXT                     0x803C
+#define GL_ALPHA12_EXT                    0x803D
+#define GL_ALPHA16_EXT                    0x803E
+#define GL_LUMINANCE4_EXT                 0x803F
+#define GL_LUMINANCE8_EXT                 0x8040
+#define GL_LUMINANCE12_EXT                0x8041
+#define GL_LUMINANCE16_EXT                0x8042
+#define GL_LUMINANCE4_ALPHA4_EXT          0x8043
+#define GL_LUMINANCE6_ALPHA2_EXT          0x8044
+#define GL_LUMINANCE8_ALPHA8_EXT          0x8045
+#define GL_LUMINANCE12_ALPHA4_EXT         0x8046
+#define GL_LUMINANCE12_ALPHA12_EXT        0x8047
+#define GL_LUMINANCE16_ALPHA16_EXT        0x8048
+#define GL_INTENSITY_EXT                  0x8049
+#define GL_INTENSITY4_EXT                 0x804A
+#define GL_INTENSITY8_EXT                 0x804B
+#define GL_INTENSITY12_EXT                0x804C
+#define GL_INTENSITY16_EXT                0x804D
+#define GL_RGB2_EXT                       0x804E
+#define GL_RGB4_EXT                       0x804F
+#define GL_RGB5_EXT                       0x8050
+#define GL_RGB8_EXT                       0x8051
+#define GL_RGB10_EXT                      0x8052
+#define GL_RGB12_EXT                      0x8053
+#define GL_RGB16_EXT                      0x8054
+#define GL_RGBA2_EXT                      0x8055
+#define GL_RGBA4_EXT                      0x8056
+#define GL_RGB5_A1_EXT                    0x8057
+#define GL_RGBA8_EXT                      0x8058
+#define GL_RGB10_A2_EXT                   0x8059
+#define GL_RGBA12_EXT                     0x805A
+#define GL_RGBA16_EXT                     0x805B
+#define GL_TEXTURE_RED_SIZE_EXT           0x805C
+#define GL_TEXTURE_GREEN_SIZE_EXT         0x805D
+#define GL_TEXTURE_BLUE_SIZE_EXT          0x805E
+#define GL_TEXTURE_ALPHA_SIZE_EXT         0x805F
+#define GL_TEXTURE_LUMINANCE_SIZE_EXT     0x8060
+#define GL_TEXTURE_INTENSITY_SIZE_EXT     0x8061
+#define GL_REPLACE_EXT                    0x8062
+#define GL_PROXY_TEXTURE_1D_EXT           0x8063
+#define GL_PROXY_TEXTURE_2D_EXT           0x8064
+#define GL_TEXTURE_TOO_LARGE_EXT          0x8065
+#endif /* GL_EXT_texture */
+
+#ifndef GL_EXT_texture3D
+#define GL_EXT_texture3D 1
+#define GL_PACK_SKIP_IMAGES_EXT           0x806B
+#define GL_PACK_IMAGE_HEIGHT_EXT          0x806C
+#define GL_UNPACK_SKIP_IMAGES_EXT         0x806D
+#define GL_UNPACK_IMAGE_HEIGHT_EXT        0x806E
+#define GL_TEXTURE_3D_EXT                 0x806F
+#define GL_PROXY_TEXTURE_3D_EXT           0x8070
+#define GL_TEXTURE_DEPTH_EXT              0x8071
+#define GL_TEXTURE_WRAP_R_EXT             0x8072
+#define GL_MAX_3D_TEXTURE_SIZE_EXT        0x8073
+typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels);
+#endif
+#endif /* GL_EXT_texture3D */
+
+#ifndef GL_EXT_texture_array
+#define GL_EXT_texture_array 1
+#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 PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+#endif
+#endif /* GL_EXT_texture_array */
+
+#ifndef GL_EXT_texture_buffer_object
+#define GL_EXT_texture_buffer_object 1
+#define GL_TEXTURE_BUFFER_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_FORMAT_EXT      0x8C2E
+typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer);
+#endif
+#endif /* GL_EXT_texture_buffer_object */
+
+#ifndef GL_EXT_texture_compression_latc
+#define GL_EXT_texture_compression_latc 1
+#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
+#endif /* GL_EXT_texture_compression_latc */
+
+#ifndef GL_EXT_texture_compression_rgtc
+#define GL_EXT_texture_compression_rgtc 1
+#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
+#endif /* GL_EXT_texture_compression_rgtc */
+
+#ifndef GL_EXT_texture_compression_s3tc
+#define GL_EXT_texture_compression_s3tc 1
+#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT   0x83F0
+#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT  0x83F1
+#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT  0x83F2
+#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT  0x83F3
+#endif /* GL_EXT_texture_compression_s3tc */
+
+#ifndef GL_EXT_texture_cube_map
+#define GL_EXT_texture_cube_map 1
+#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
+#endif /* GL_EXT_texture_cube_map */
+
+#ifndef GL_EXT_texture_env_add
+#define GL_EXT_texture_env_add 1
+#endif /* GL_EXT_texture_env_add */
+
+#ifndef GL_EXT_texture_env_combine
+#define GL_EXT_texture_env_combine 1
+#define GL_COMBINE_EXT                    0x8570
+#define GL_COMBINE_RGB_EXT                0x8571
+#define GL_COMBINE_ALPHA_EXT              0x8572
+#define GL_RGB_SCALE_EXT                  0x8573
+#define GL_ADD_SIGNED_EXT                 0x8574
+#define GL_INTERPOLATE_EXT                0x8575
+#define GL_CONSTANT_EXT                   0x8576
+#define GL_PRIMARY_COLOR_EXT              0x8577
+#define GL_PREVIOUS_EXT                   0x8578
+#define GL_SOURCE0_RGB_EXT                0x8580
+#define GL_SOURCE1_RGB_EXT                0x8581
+#define GL_SOURCE2_RGB_EXT                0x8582
+#define GL_SOURCE0_ALPHA_EXT              0x8588
+#define GL_SOURCE1_ALPHA_EXT              0x8589
+#define GL_SOURCE2_ALPHA_EXT              0x858A
+#define GL_OPERAND0_RGB_EXT               0x8590
+#define GL_OPERAND1_RGB_EXT               0x8591
+#define GL_OPERAND2_RGB_EXT               0x8592
+#define GL_OPERAND0_ALPHA_EXT             0x8598
+#define GL_OPERAND1_ALPHA_EXT             0x8599
+#define GL_OPERAND2_ALPHA_EXT             0x859A
+#endif /* GL_EXT_texture_env_combine */
+
+#ifndef GL_EXT_texture_env_dot3
+#define GL_EXT_texture_env_dot3 1
+#define GL_DOT3_RGB_EXT                   0x8740
+#define GL_DOT3_RGBA_EXT                  0x8741
+#endif /* GL_EXT_texture_env_dot3 */
+
+#ifndef GL_EXT_texture_filter_anisotropic
+#define GL_EXT_texture_filter_anisotropic 1
+#define GL_TEXTURE_MAX_ANISOTROPY_EXT     0x84FE
+#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
+#endif /* GL_EXT_texture_filter_anisotropic */
+
+#ifndef GL_EXT_texture_filter_minmax
+#define GL_EXT_texture_filter_minmax 1
+#endif /* GL_EXT_texture_filter_minmax */
+
+#ifndef GL_EXT_texture_integer
+#define GL_EXT_texture_integer 1
+#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 PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha);
+typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params);
+GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha);
+GLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha);
+#endif
+#endif /* GL_EXT_texture_integer */
+
+#ifndef GL_EXT_texture_lod_bias
+#define GL_EXT_texture_lod_bias 1
+#define GL_MAX_TEXTURE_LOD_BIAS_EXT       0x84FD
+#define GL_TEXTURE_FILTER_CONTROL_EXT     0x8500
+#define GL_TEXTURE_LOD_BIAS_EXT           0x8501
+#endif /* GL_EXT_texture_lod_bias */
+
+#ifndef GL_EXT_texture_mirror_clamp
+#define GL_EXT_texture_mirror_clamp 1
+#define GL_MIRROR_CLAMP_EXT               0x8742
+#define GL_MIRROR_CLAMP_TO_EDGE_EXT       0x8743
+#define GL_MIRROR_CLAMP_TO_BORDER_EXT     0x8912
+#endif /* GL_EXT_texture_mirror_clamp */
+
+#ifndef GL_EXT_texture_object
+#define GL_EXT_texture_object 1
+#define GL_TEXTURE_PRIORITY_EXT           0x8066
+#define GL_TEXTURE_RESIDENT_EXT           0x8067
+#define GL_TEXTURE_1D_BINDING_EXT         0x8068
+#define GL_TEXTURE_2D_BINDING_EXT         0x8069
+#define GL_TEXTURE_3D_BINDING_EXT         0x806A
+typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences);
+typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture);
+typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures);
+typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures);
+typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture);
+typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences);
+GLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture);
+GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures);
+GLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures);
+GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture);
+GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities);
+#endif
+#endif /* GL_EXT_texture_object */
+
+#ifndef GL_EXT_texture_perturb_normal
+#define GL_EXT_texture_perturb_normal 1
+#define GL_PERTURB_EXT                    0x85AE
+#define GL_TEXTURE_NORMAL_EXT             0x85AF
+typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureNormalEXT (GLenum mode);
+#endif
+#endif /* GL_EXT_texture_perturb_normal */
+
+#ifndef GL_EXT_texture_sRGB
+#define GL_EXT_texture_sRGB 1
+#define GL_SRGB_EXT                       0x8C40
+#define GL_SRGB8_EXT                      0x8C41
+#define GL_SRGB_ALPHA_EXT                 0x8C42
+#define GL_SRGB8_ALPHA8_EXT               0x8C43
+#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
+#endif /* GL_EXT_texture_sRGB */
+
+#ifndef GL_EXT_texture_sRGB_decode
+#define GL_EXT_texture_sRGB_decode 1
+#define GL_TEXTURE_SRGB_DECODE_EXT        0x8A48
+#define GL_DECODE_EXT                     0x8A49
+#define GL_SKIP_DECODE_EXT                0x8A4A
+#endif /* GL_EXT_texture_sRGB_decode */
+
+#ifndef GL_EXT_texture_shared_exponent
+#define GL_EXT_texture_shared_exponent 1
+#define GL_RGB9_E5_EXT                    0x8C3D
+#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT   0x8C3E
+#define GL_TEXTURE_SHARED_SIZE_EXT        0x8C3F
+#endif /* GL_EXT_texture_shared_exponent */
+
+#ifndef GL_EXT_texture_snorm
+#define GL_EXT_texture_snorm 1
+#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
+#endif /* GL_EXT_texture_snorm */
+
+#ifndef GL_EXT_texture_swizzle
+#define GL_EXT_texture_swizzle 1
+#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
+#endif /* GL_EXT_texture_swizzle */
+
+#ifndef GL_EXT_timer_query
+#define GL_EXT_timer_query 1
+#define GL_TIME_ELAPSED_EXT               0x88BF
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params);
+typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params);
+GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params);
+#endif
+#endif /* GL_EXT_timer_query */
+
+#ifndef GL_EXT_transform_feedback
+#define GL_EXT_transform_feedback 1
+#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_PRIMITIVES_GENERATED_EXT       0x8C87
+#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 PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode);
+typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void);
+typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset);
+typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode);
+GLAPI void APIENTRY glEndTransformFeedbackEXT (void);
+GLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset);
+GLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer);
+GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode);
+GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+#endif
+#endif /* GL_EXT_transform_feedback */
+
+#ifndef GL_EXT_vertex_array
+#define GL_EXT_vertex_array 1
+#define GL_VERTEX_ARRAY_EXT               0x8074
+#define GL_NORMAL_ARRAY_EXT               0x8075
+#define GL_COLOR_ARRAY_EXT                0x8076
+#define GL_INDEX_ARRAY_EXT                0x8077
+#define GL_TEXTURE_COORD_ARRAY_EXT        0x8078
+#define GL_EDGE_FLAG_ARRAY_EXT            0x8079
+#define GL_VERTEX_ARRAY_SIZE_EXT          0x807A
+#define GL_VERTEX_ARRAY_TYPE_EXT          0x807B
+#define GL_VERTEX_ARRAY_STRIDE_EXT        0x807C
+#define GL_VERTEX_ARRAY_COUNT_EXT         0x807D
+#define GL_NORMAL_ARRAY_TYPE_EXT          0x807E
+#define GL_NORMAL_ARRAY_STRIDE_EXT        0x807F
+#define GL_NORMAL_ARRAY_COUNT_EXT         0x8080
+#define GL_COLOR_ARRAY_SIZE_EXT           0x8081
+#define GL_COLOR_ARRAY_TYPE_EXT           0x8082
+#define GL_COLOR_ARRAY_STRIDE_EXT         0x8083
+#define GL_COLOR_ARRAY_COUNT_EXT          0x8084
+#define GL_INDEX_ARRAY_TYPE_EXT           0x8085
+#define GL_INDEX_ARRAY_STRIDE_EXT         0x8086
+#define GL_INDEX_ARRAY_COUNT_EXT          0x8087
+#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT   0x8088
+#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT   0x8089
+#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A
+#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT  0x808B
+#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT     0x808C
+#define GL_EDGE_FLAG_ARRAY_COUNT_EXT      0x808D
+#define GL_VERTEX_ARRAY_POINTER_EXT       0x808E
+#define GL_NORMAL_ARRAY_POINTER_EXT       0x808F
+#define GL_COLOR_ARRAY_POINTER_EXT        0x8090
+#define GL_INDEX_ARRAY_POINTER_EXT        0x8091
+#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092
+#define GL_EDGE_FLAG_ARRAY_POINTER_EXT    0x8093
+typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i);
+typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer);
+typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, void **params);
+typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glArrayElementEXT (GLint i);
+GLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+GLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count);
+GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer);
+GLAPI void APIENTRY glGetPointervEXT (GLenum pname, void **params);
+GLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+GLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+GLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+GLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer);
+#endif
+#endif /* GL_EXT_vertex_array */
+
+#ifndef GL_EXT_vertex_array_bgra
+#define GL_EXT_vertex_array_bgra 1
+#endif /* GL_EXT_vertex_array_bgra */
+
+#ifndef GL_EXT_vertex_attrib_64bit
+#define GL_EXT_vertex_attrib_64bit 1
+#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 PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params);
+#endif
+#endif /* GL_EXT_vertex_attrib_64bit */
+
+#ifndef GL_EXT_vertex_shader
+#define GL_EXT_vertex_shader 1
+#define GL_VERTEX_SHADER_EXT              0x8780
+#define GL_VERTEX_SHADER_BINDING_EXT      0x8781
+#define GL_OP_INDEX_EXT                   0x8782
+#define GL_OP_NEGATE_EXT                  0x8783
+#define GL_OP_DOT3_EXT                    0x8784
+#define GL_OP_DOT4_EXT                    0x8785
+#define GL_OP_MUL_EXT                     0x8786
+#define GL_OP_ADD_EXT                     0x8787
+#define GL_OP_MADD_EXT                    0x8788
+#define GL_OP_FRAC_EXT                    0x8789
+#define GL_OP_MAX_EXT                     0x878A
+#define GL_OP_MIN_EXT                     0x878B
+#define GL_OP_SET_GE_EXT                  0x878C
+#define GL_OP_SET_LT_EXT                  0x878D
+#define GL_OP_CLAMP_EXT                   0x878E
+#define GL_OP_FLOOR_EXT                   0x878F
+#define GL_OP_ROUND_EXT                   0x8790
+#define GL_OP_EXP_BASE_2_EXT              0x8791
+#define GL_OP_LOG_BASE_2_EXT              0x8792
+#define GL_OP_POWER_EXT                   0x8793
+#define GL_OP_RECIP_EXT                   0x8794
+#define GL_OP_RECIP_SQRT_EXT              0x8795
+#define GL_OP_SUB_EXT                     0x8796
+#define GL_OP_CROSS_PRODUCT_EXT           0x8797
+#define GL_OP_MULTIPLY_MATRIX_EXT         0x8798
+#define GL_OP_MOV_EXT                     0x8799
+#define GL_OUTPUT_VERTEX_EXT              0x879A
+#define GL_OUTPUT_COLOR0_EXT              0x879B
+#define GL_OUTPUT_COLOR1_EXT              0x879C
+#define GL_OUTPUT_TEXTURE_COORD0_EXT      0x879D
+#define GL_OUTPUT_TEXTURE_COORD1_EXT      0x879E
+#define GL_OUTPUT_TEXTURE_COORD2_EXT      0x879F
+#define GL_OUTPUT_TEXTURE_COORD3_EXT      0x87A0
+#define GL_OUTPUT_TEXTURE_COORD4_EXT      0x87A1
+#define GL_OUTPUT_TEXTURE_COORD5_EXT      0x87A2
+#define GL_OUTPUT_TEXTURE_COORD6_EXT      0x87A3
+#define GL_OUTPUT_TEXTURE_COORD7_EXT      0x87A4
+#define GL_OUTPUT_TEXTURE_COORD8_EXT      0x87A5
+#define GL_OUTPUT_TEXTURE_COORD9_EXT      0x87A6
+#define GL_OUTPUT_TEXTURE_COORD10_EXT     0x87A7
+#define GL_OUTPUT_TEXTURE_COORD11_EXT     0x87A8
+#define GL_OUTPUT_TEXTURE_COORD12_EXT     0x87A9
+#define GL_OUTPUT_TEXTURE_COORD13_EXT     0x87AA
+#define GL_OUTPUT_TEXTURE_COORD14_EXT     0x87AB
+#define GL_OUTPUT_TEXTURE_COORD15_EXT     0x87AC
+#define GL_OUTPUT_TEXTURE_COORD16_EXT     0x87AD
+#define GL_OUTPUT_TEXTURE_COORD17_EXT     0x87AE
+#define GL_OUTPUT_TEXTURE_COORD18_EXT     0x87AF
+#define GL_OUTPUT_TEXTURE_COORD19_EXT     0x87B0
+#define GL_OUTPUT_TEXTURE_COORD20_EXT     0x87B1
+#define GL_OUTPUT_TEXTURE_COORD21_EXT     0x87B2
+#define GL_OUTPUT_TEXTURE_COORD22_EXT     0x87B3
+#define GL_OUTPUT_TEXTURE_COORD23_EXT     0x87B4
+#define GL_OUTPUT_TEXTURE_COORD24_EXT     0x87B5
+#define GL_OUTPUT_TEXTURE_COORD25_EXT     0x87B6
+#define GL_OUTPUT_TEXTURE_COORD26_EXT     0x87B7
+#define GL_OUTPUT_TEXTURE_COORD27_EXT     0x87B8
+#define GL_OUTPUT_TEXTURE_COORD28_EXT     0x87B9
+#define GL_OUTPUT_TEXTURE_COORD29_EXT     0x87BA
+#define GL_OUTPUT_TEXTURE_COORD30_EXT     0x87BB
+#define GL_OUTPUT_TEXTURE_COORD31_EXT     0x87BC
+#define GL_OUTPUT_FOG_EXT                 0x87BD
+#define GL_SCALAR_EXT                     0x87BE
+#define GL_VECTOR_EXT                     0x87BF
+#define GL_MATRIX_EXT                     0x87C0
+#define GL_VARIANT_EXT                    0x87C1
+#define GL_INVARIANT_EXT                  0x87C2
+#define GL_LOCAL_CONSTANT_EXT             0x87C3
+#define GL_LOCAL_EXT                      0x87C4
+#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5
+#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6
+#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7
+#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8
+#define GL_MAX_VERTEX_SHADER_LOCALS_EXT   0x87C9
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE
+#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF
+#define GL_VERTEX_SHADER_VARIANTS_EXT     0x87D0
+#define GL_VERTEX_SHADER_INVARIANTS_EXT   0x87D1
+#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2
+#define GL_VERTEX_SHADER_LOCALS_EXT       0x87D3
+#define GL_VERTEX_SHADER_OPTIMIZED_EXT    0x87D4
+#define GL_X_EXT                          0x87D5
+#define GL_Y_EXT                          0x87D6
+#define GL_Z_EXT                          0x87D7
+#define GL_W_EXT                          0x87D8
+#define GL_NEGATIVE_X_EXT                 0x87D9
+#define GL_NEGATIVE_Y_EXT                 0x87DA
+#define GL_NEGATIVE_Z_EXT                 0x87DB
+#define GL_NEGATIVE_W_EXT                 0x87DC
+#define GL_ZERO_EXT                       0x87DD
+#define GL_ONE_EXT                        0x87DE
+#define GL_NEGATIVE_ONE_EXT               0x87DF
+#define GL_NORMALIZED_RANGE_EXT           0x87E0
+#define GL_FULL_RANGE_EXT                 0x87E1
+#define GL_CURRENT_VERTEX_EXT             0x87E2
+#define GL_MVP_MATRIX_EXT                 0x87E3
+#define GL_VARIANT_VALUE_EXT              0x87E4
+#define GL_VARIANT_DATATYPE_EXT           0x87E5
+#define GL_VARIANT_ARRAY_STRIDE_EXT       0x87E6
+#define GL_VARIANT_ARRAY_TYPE_EXT         0x87E7
+#define GL_VARIANT_ARRAY_EXT              0x87E8
+#define GL_VARIANT_ARRAY_POINTER_EXT      0x87E9
+#define GL_INVARIANT_VALUE_EXT            0x87EA
+#define GL_INVARIANT_DATATYPE_EXT         0x87EB
+#define GL_LOCAL_CONSTANT_VALUE_EXT       0x87EC
+#define GL_LOCAL_CONSTANT_DATATYPE_EXT    0x87ED
+typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void);
+typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void);
+typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id);
+typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range);
+typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1);
+typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2);
+typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3);
+typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);
+typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);
+typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components);
+typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const void *addr);
+typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const void *addr);
+typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr);
+typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr);
+typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr);
+typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr);
+typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr);
+typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr);
+typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr);
+typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr);
+typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const void *addr);
+typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);
+typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value);
+typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value);
+typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value);
+typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value);
+typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value);
+typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap);
+typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, void **data);
+typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginVertexShaderEXT (void);
+GLAPI void APIENTRY glEndVertexShaderEXT (void);
+GLAPI void APIENTRY glBindVertexShaderEXT (GLuint id);
+GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range);
+GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id);
+GLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1);
+GLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2);
+GLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3);
+GLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+GLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+GLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num);
+GLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num);
+GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components);
+GLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const void *addr);
+GLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const void *addr);
+GLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr);
+GLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr);
+GLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr);
+GLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr);
+GLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr);
+GLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr);
+GLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr);
+GLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr);
+GLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const void *addr);
+GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id);
+GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id);
+GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value);
+GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value);
+GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value);
+GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value);
+GLAPI GLuint APIENTRY glBindParameterEXT (GLenum value);
+GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap);
+GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data);
+GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data);
+GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data);
+GLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, void **data);
+GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data);
+GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data);
+GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data);
+GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data);
+GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data);
+GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data);
+#endif
+#endif /* GL_EXT_vertex_shader */
+
+#ifndef GL_EXT_vertex_weighting
+#define GL_EXT_vertex_weighting 1
+#define GL_MODELVIEW0_STACK_DEPTH_EXT     0x0BA3
+#define GL_MODELVIEW1_STACK_DEPTH_EXT     0x8502
+#define GL_MODELVIEW0_MATRIX_EXT          0x0BA6
+#define GL_MODELVIEW1_MATRIX_EXT          0x8506
+#define GL_VERTEX_WEIGHTING_EXT           0x8509
+#define GL_MODELVIEW0_EXT                 0x1700
+#define GL_MODELVIEW1_EXT                 0x850A
+#define GL_CURRENT_VERTEX_WEIGHT_EXT      0x850B
+#define GL_VERTEX_WEIGHT_ARRAY_EXT        0x850C
+#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT   0x850D
+#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT   0x850E
+#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F
+#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight);
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight);
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight);
+GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight);
+GLAPI void APIENTRY glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer);
+#endif
+#endif /* GL_EXT_vertex_weighting */
+
+#ifndef GL_EXT_x11_sync_object
+#define GL_EXT_x11_sync_object 1
+#define GL_SYNC_X11_FENCE_EXT             0x90E1
+typedef GLsync (APIENTRYP PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLsync APIENTRY glImportSyncEXT (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags);
+#endif
+#endif /* GL_EXT_x11_sync_object */
+
+#ifndef GL_GREMEDY_frame_terminator
+#define GL_GREMEDY_frame_terminator 1
+typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFrameTerminatorGREMEDY (void);
+#endif
+#endif /* GL_GREMEDY_frame_terminator */
+
+#ifndef GL_GREMEDY_string_marker
+#define GL_GREMEDY_string_marker 1
+typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const void *string);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const void *string);
+#endif
+#endif /* GL_GREMEDY_string_marker */
+
+#ifndef GL_HP_convolution_border_modes
+#define GL_HP_convolution_border_modes 1
+#define GL_IGNORE_BORDER_HP               0x8150
+#define GL_CONSTANT_BORDER_HP             0x8151
+#define GL_REPLICATE_BORDER_HP            0x8153
+#define GL_CONVOLUTION_BORDER_COLOR_HP    0x8154
+#endif /* GL_HP_convolution_border_modes */
+
+#ifndef GL_HP_image_transform
+#define GL_HP_image_transform 1
+#define GL_IMAGE_SCALE_X_HP               0x8155
+#define GL_IMAGE_SCALE_Y_HP               0x8156
+#define GL_IMAGE_TRANSLATE_X_HP           0x8157
+#define GL_IMAGE_TRANSLATE_Y_HP           0x8158
+#define GL_IMAGE_ROTATE_ANGLE_HP          0x8159
+#define GL_IMAGE_ROTATE_ORIGIN_X_HP       0x815A
+#define GL_IMAGE_ROTATE_ORIGIN_Y_HP       0x815B
+#define GL_IMAGE_MAG_FILTER_HP            0x815C
+#define GL_IMAGE_MIN_FILTER_HP            0x815D
+#define GL_IMAGE_CUBIC_WEIGHT_HP          0x815E
+#define GL_CUBIC_HP                       0x815F
+#define GL_AVERAGE_HP                     0x8160
+#define GL_IMAGE_TRANSFORM_2D_HP          0x8161
+#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162
+#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163
+typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param);
+GLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params);
+#endif
+#endif /* GL_HP_image_transform */
+
+#ifndef GL_HP_occlusion_test
+#define GL_HP_occlusion_test 1
+#define GL_OCCLUSION_TEST_HP              0x8165
+#define GL_OCCLUSION_TEST_RESULT_HP       0x8166
+#endif /* GL_HP_occlusion_test */
+
+#ifndef GL_HP_texture_lighting
+#define GL_HP_texture_lighting 1
+#define GL_TEXTURE_LIGHTING_MODE_HP       0x8167
+#define GL_TEXTURE_POST_SPECULAR_HP       0x8168
+#define GL_TEXTURE_PRE_SPECULAR_HP        0x8169
+#endif /* GL_HP_texture_lighting */
+
+#ifndef GL_IBM_cull_vertex
+#define GL_IBM_cull_vertex 1
+#define GL_CULL_VERTEX_IBM                103050
+#endif /* GL_IBM_cull_vertex */
+
+#ifndef GL_IBM_multimode_draw_arrays
+#define GL_IBM_multimode_draw_arrays 1
+typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride);
+typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride);
+GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride);
+#endif
+#endif /* GL_IBM_multimode_draw_arrays */
+
+#ifndef GL_IBM_rasterpos_clip
+#define GL_IBM_rasterpos_clip 1
+#define GL_RASTER_POSITION_UNCLIPPED_IBM  0x19262
+#endif /* GL_IBM_rasterpos_clip */
+
+#ifndef GL_IBM_static_data
+#define GL_IBM_static_data 1
+#define GL_ALL_STATIC_DATA_IBM            103060
+#define GL_STATIC_VERTEX_ARRAY_IBM        103061
+typedef void (APIENTRYP PFNGLFLUSHSTATICDATAIBMPROC) (GLenum target);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFlushStaticDataIBM (GLenum target);
+#endif
+#endif /* GL_IBM_static_data */
+
+#ifndef GL_IBM_texture_mirrored_repeat
+#define GL_IBM_texture_mirrored_repeat 1
+#define GL_MIRRORED_REPEAT_IBM            0x8370
+#endif /* GL_IBM_texture_mirrored_repeat */
+
+#ifndef GL_IBM_vertex_array_lists
+#define GL_IBM_vertex_array_lists 1
+#define GL_VERTEX_ARRAY_LIST_IBM          103070
+#define GL_NORMAL_ARRAY_LIST_IBM          103071
+#define GL_COLOR_ARRAY_LIST_IBM           103072
+#define GL_INDEX_ARRAY_LIST_IBM           103073
+#define GL_TEXTURE_COORD_ARRAY_LIST_IBM   103074
+#define GL_EDGE_FLAG_ARRAY_LIST_IBM       103075
+#define GL_FOG_COORDINATE_ARRAY_LIST_IBM  103076
+#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077
+#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM   103080
+#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM   103081
+#define GL_COLOR_ARRAY_LIST_STRIDE_IBM    103082
+#define GL_INDEX_ARRAY_LIST_STRIDE_IBM    103083
+#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084
+#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085
+#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086
+#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087
+typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean **pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean **pointer, GLint ptrstride);
+GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+GLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+GLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+GLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+GLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride);
+#endif
+#endif /* GL_IBM_vertex_array_lists */
+
+#ifndef GL_INGR_blend_func_separate
+#define GL_INGR_blend_func_separate 1
+typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+#endif
+#endif /* GL_INGR_blend_func_separate */
+
+#ifndef GL_INGR_color_clamp
+#define GL_INGR_color_clamp 1
+#define GL_RED_MIN_CLAMP_INGR             0x8560
+#define GL_GREEN_MIN_CLAMP_INGR           0x8561
+#define GL_BLUE_MIN_CLAMP_INGR            0x8562
+#define GL_ALPHA_MIN_CLAMP_INGR           0x8563
+#define GL_RED_MAX_CLAMP_INGR             0x8564
+#define GL_GREEN_MAX_CLAMP_INGR           0x8565
+#define GL_BLUE_MAX_CLAMP_INGR            0x8566
+#define GL_ALPHA_MAX_CLAMP_INGR           0x8567
+#endif /* GL_INGR_color_clamp */
+
+#ifndef GL_INGR_interlace_read
+#define GL_INGR_interlace_read 1
+#define GL_INTERLACE_READ_INGR            0x8568
+#endif /* GL_INGR_interlace_read */
+
+#ifndef GL_INTEL_fragment_shader_ordering
+#define GL_INTEL_fragment_shader_ordering 1
+#endif /* GL_INTEL_fragment_shader_ordering */
+
+#ifndef GL_INTEL_map_texture
+#define GL_INTEL_map_texture 1
+#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 PFNGLSYNCTEXTUREINTELPROC) (GLuint texture);
+typedef void (APIENTRYP PFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level);
+typedef void *(APIENTRYP PFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSyncTextureINTEL (GLuint texture);
+GLAPI void APIENTRY glUnmapTexture2DINTEL (GLuint texture, GLint level);
+GLAPI void *APIENTRY glMapTexture2DINTEL (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout);
+#endif
+#endif /* GL_INTEL_map_texture */
+
+#ifndef GL_INTEL_parallel_arrays
+#define GL_INTEL_parallel_arrays 1
+#define GL_PARALLEL_ARRAYS_INTEL          0x83F4
+#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5
+#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6
+#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7
+#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8
+typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer);
+typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const void **pointer);
+typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer);
+typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const void **pointer);
+GLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const void **pointer);
+GLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const void **pointer);
+GLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const void **pointer);
+#endif
+#endif /* GL_INTEL_parallel_arrays */
+
+#ifndef GL_INTEL_performance_query
+#define GL_INTEL_performance_query 1
+#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 PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle);
+typedef void (APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle);
+typedef void (APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle);
+typedef void (APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle);
+typedef void (APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId);
+typedef void (APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId);
+typedef void (APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue);
+typedef void (APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten);
+typedef void (APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId);
+typedef void (APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle);
+GLAPI void APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle);
+GLAPI void APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle);
+GLAPI void APIENTRY glEndPerfQueryINTEL (GLuint queryHandle);
+GLAPI void APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId);
+GLAPI void APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId);
+GLAPI void APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue);
+GLAPI void APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten);
+GLAPI void APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId);
+GLAPI void APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask);
+#endif
+#endif /* GL_INTEL_performance_query */
+
+#ifndef GL_MESAX_texture_stack
+#define GL_MESAX_texture_stack 1
+#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
+#endif /* GL_MESAX_texture_stack */
+
+#ifndef GL_MESA_pack_invert
+#define GL_MESA_pack_invert 1
+#define GL_PACK_INVERT_MESA               0x8758
+#endif /* GL_MESA_pack_invert */
+
+#ifndef GL_MESA_resize_buffers
+#define GL_MESA_resize_buffers 1
+typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glResizeBuffersMESA (void);
+#endif
+#endif /* GL_MESA_resize_buffers */
+
+#ifndef GL_MESA_window_pos
+#define GL_MESA_window_pos 1
+typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v);
+typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y);
+GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y);
+GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y);
+GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v);
+GLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y);
+GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v);
+GLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v);
+GLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v);
+GLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v);
+GLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v);
+GLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v);
+GLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v);
+#endif
+#endif /* GL_MESA_window_pos */
+
+#ifndef GL_MESA_ycbcr_texture
+#define GL_MESA_ycbcr_texture 1
+#define GL_UNSIGNED_SHORT_8_8_MESA        0x85BA
+#define GL_UNSIGNED_SHORT_8_8_REV_MESA    0x85BB
+#define GL_YCBCR_MESA                     0x8757
+#endif /* GL_MESA_ycbcr_texture */
+
+#ifndef GL_NVX_conditional_render
+#define GL_NVX_conditional_render 1
+typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVXPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginConditionalRenderNVX (GLuint id);
+GLAPI void APIENTRY glEndConditionalRenderNVX (void);
+#endif
+#endif /* GL_NVX_conditional_render */
+
+#ifndef GL_NVX_gpu_memory_info
+#define GL_NVX_gpu_memory_info 1
+#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
+#endif /* GL_NVX_gpu_memory_info */
+
+#ifndef GL_NV_bindless_multi_draw_indirect
+#define GL_NV_bindless_multi_draw_indirect 1
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount);
+GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount);
+#endif
+#endif /* GL_NV_bindless_multi_draw_indirect */
+
+#ifndef GL_NV_bindless_multi_draw_indirect_count
+#define GL_NV_bindless_multi_draw_indirect_count 1
+typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount);
+typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessCountNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount);
+GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessCountNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount);
+#endif
+#endif /* GL_NV_bindless_multi_draw_indirect_count */
+
+#ifndef GL_NV_bindless_texture
+#define GL_NV_bindless_texture 1
+typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture);
+typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler);
+typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle);
+typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle);
+typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);
+typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access);
+typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle);
+typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value);
+typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle);
+typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint64 APIENTRY glGetTextureHandleNV (GLuint texture);
+GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler);
+GLAPI void APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle);
+GLAPI void APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle);
+GLAPI GLuint64 APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);
+GLAPI void APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access);
+GLAPI void APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle);
+GLAPI void APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value);
+GLAPI void APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value);
+GLAPI void APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value);
+GLAPI void APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values);
+GLAPI GLboolean APIENTRY glIsTextureHandleResidentNV (GLuint64 handle);
+GLAPI GLboolean APIENTRY glIsImageHandleResidentNV (GLuint64 handle);
+#endif
+#endif /* GL_NV_bindless_texture */
+
+#ifndef GL_NV_blend_equation_advanced
+#define GL_NV_blend_equation_advanced 1
+#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 PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLBLENDBARRIERNVPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendParameteriNV (GLenum pname, GLint value);
+GLAPI void APIENTRY glBlendBarrierNV (void);
+#endif
+#endif /* GL_NV_blend_equation_advanced */
+
+#ifndef GL_NV_blend_equation_advanced_coherent
+#define GL_NV_blend_equation_advanced_coherent 1
+#define GL_BLEND_ADVANCED_COHERENT_NV     0x9285
+#endif /* GL_NV_blend_equation_advanced_coherent */
+
+#ifndef GL_NV_blend_square
+#define GL_NV_blend_square 1
+#endif /* GL_NV_blend_square */
+
+#ifndef GL_NV_compute_program5
+#define GL_NV_compute_program5 1
+#define GL_COMPUTE_PROGRAM_NV             0x90FB
+#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC
+#endif /* GL_NV_compute_program5 */
+
+#ifndef GL_NV_conditional_render
+#define GL_NV_conditional_render 1
+#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 PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode);
+typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode);
+GLAPI void APIENTRY glEndConditionalRenderNV (void);
+#endif
+#endif /* GL_NV_conditional_render */
+
+#ifndef GL_NV_conservative_raster
+#define GL_NV_conservative_raster 1
+#define GL_CONSERVATIVE_RASTERIZATION_NV  0x9346
+#define GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV 0x9347
+#define GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV 0x9348
+#define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349
+typedef void (APIENTRYP PFNGLSUBPIXELPRECISIONBIASNVPROC) (GLuint xbits, GLuint ybits);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSubpixelPrecisionBiasNV (GLuint xbits, GLuint ybits);
+#endif
+#endif /* GL_NV_conservative_raster */
+
+#ifndef GL_NV_copy_depth_to_color
+#define GL_NV_copy_depth_to_color 1
+#define GL_DEPTH_STENCIL_TO_RGBA_NV       0x886E
+#define GL_DEPTH_STENCIL_TO_BGRA_NV       0x886F
+#endif /* GL_NV_copy_depth_to_color */
+
+#ifndef GL_NV_copy_image
+#define GL_NV_copy_image 1
+typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC) (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);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY 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);
+#endif
+#endif /* GL_NV_copy_image */
+
+#ifndef GL_NV_deep_texture3D
+#define GL_NV_deep_texture3D 1
+#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0
+#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV   0x90D1
+#endif /* GL_NV_deep_texture3D */
+
+#ifndef GL_NV_depth_buffer_float
+#define GL_NV_depth_buffer_float 1
+#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 PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar);
+typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth);
+typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar);
+GLAPI void APIENTRY glClearDepthdNV (GLdouble depth);
+GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax);
+#endif
+#endif /* GL_NV_depth_buffer_float */
+
+#ifndef GL_NV_depth_clamp
+#define GL_NV_depth_clamp 1
+#define GL_DEPTH_CLAMP_NV                 0x864F
+#endif /* GL_NV_depth_clamp */
+
+#ifndef GL_NV_draw_texture
+#define GL_NV_draw_texture 1
+typedef void (APIENTRYP PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawTextureNV (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);
+#endif
+#endif /* GL_NV_draw_texture */
+
+#ifndef GL_NV_evaluators
+#define GL_NV_evaluators 1
+#define GL_EVAL_2D_NV                     0x86C0
+#define GL_EVAL_TRIANGULAR_2D_NV          0x86C1
+#define GL_MAP_TESSELLATION_NV            0x86C2
+#define GL_MAP_ATTRIB_U_ORDER_NV          0x86C3
+#define GL_MAP_ATTRIB_V_ORDER_NV          0x86C4
+#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5
+#define GL_EVAL_VERTEX_ATTRIB0_NV         0x86C6
+#define GL_EVAL_VERTEX_ATTRIB1_NV         0x86C7
+#define GL_EVAL_VERTEX_ATTRIB2_NV         0x86C8
+#define GL_EVAL_VERTEX_ATTRIB3_NV         0x86C9
+#define GL_EVAL_VERTEX_ATTRIB4_NV         0x86CA
+#define GL_EVAL_VERTEX_ATTRIB5_NV         0x86CB
+#define GL_EVAL_VERTEX_ATTRIB6_NV         0x86CC
+#define GL_EVAL_VERTEX_ATTRIB7_NV         0x86CD
+#define GL_EVAL_VERTEX_ATTRIB8_NV         0x86CE
+#define GL_EVAL_VERTEX_ATTRIB9_NV         0x86CF
+#define GL_EVAL_VERTEX_ATTRIB10_NV        0x86D0
+#define GL_EVAL_VERTEX_ATTRIB11_NV        0x86D1
+#define GL_EVAL_VERTEX_ATTRIB12_NV        0x86D2
+#define GL_EVAL_VERTEX_ATTRIB13_NV        0x86D3
+#define GL_EVAL_VERTEX_ATTRIB14_NV        0x86D4
+#define GL_EVAL_VERTEX_ATTRIB15_NV        0x86D5
+#define GL_MAX_MAP_TESSELLATION_NV        0x86D6
+#define GL_MAX_RATIONAL_EVAL_ORDER_NV     0x86D7
+typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points);
+typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points);
+typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points);
+GLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points);
+GLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode);
+#endif
+#endif /* GL_NV_evaluators */
+
+#ifndef GL_NV_explicit_multisample
+#define GL_NV_explicit_multisample 1
+#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 PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val);
+typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask);
+typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val);
+GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask);
+GLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer);
+#endif
+#endif /* GL_NV_explicit_multisample */
+
+#ifndef GL_NV_fence
+#define GL_NV_fence 1
+#define GL_ALL_COMPLETED_NV               0x84F2
+#define GL_FENCE_STATUS_NV                0x84F3
+#define GL_FENCE_CONDITION_NV             0x84F4
+typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences);
+typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences);
+typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence);
+typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence);
+typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence);
+typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences);
+GLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences);
+GLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence);
+GLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence);
+GLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params);
+GLAPI void APIENTRY glFinishFenceNV (GLuint fence);
+GLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition);
+#endif
+#endif /* GL_NV_fence */
+
+#ifndef GL_NV_fill_rectangle
+#define GL_NV_fill_rectangle 1
+#define GL_FILL_RECTANGLE_NV              0x933C
+#endif /* GL_NV_fill_rectangle */
+
+#ifndef GL_NV_float_buffer
+#define GL_NV_float_buffer 1
+#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
+#endif /* GL_NV_float_buffer */
+
+#ifndef GL_NV_fog_distance
+#define GL_NV_fog_distance 1
+#define GL_FOG_DISTANCE_MODE_NV           0x855A
+#define GL_EYE_RADIAL_NV                  0x855B
+#define GL_EYE_PLANE_ABSOLUTE_NV          0x855C
+#endif /* GL_NV_fog_distance */
+
+#ifndef GL_NV_fragment_coverage_to_color
+#define GL_NV_fragment_coverage_to_color 1
+#define GL_FRAGMENT_COVERAGE_TO_COLOR_NV  0x92DD
+#define GL_FRAGMENT_COVERAGE_COLOR_NV     0x92DE
+typedef void (APIENTRYP PFNGLFRAGMENTCOVERAGECOLORNVPROC) (GLuint color);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFragmentCoverageColorNV (GLuint color);
+#endif
+#endif /* GL_NV_fragment_coverage_to_color */
+
+#ifndef GL_NV_fragment_program
+#define GL_NV_fragment_program 1
+#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868
+#define GL_FRAGMENT_PROGRAM_NV            0x8870
+#define GL_MAX_TEXTURE_COORDS_NV          0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS_NV     0x8872
+#define GL_FRAGMENT_PROGRAM_BINDING_NV    0x8873
+#define GL_PROGRAM_ERROR_STRING_NV        0x8874
+typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v);
+typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v);
+typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v);
+GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v);
+GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params);
+GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params);
+#endif
+#endif /* GL_NV_fragment_program */
+
+#ifndef GL_NV_fragment_program2
+#define GL_NV_fragment_program2 1
+#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4
+#define GL_MAX_PROGRAM_CALL_DEPTH_NV      0x88F5
+#define GL_MAX_PROGRAM_IF_DEPTH_NV        0x88F6
+#define GL_MAX_PROGRAM_LOOP_DEPTH_NV      0x88F7
+#define GL_MAX_PROGRAM_LOOP_COUNT_NV      0x88F8
+#endif /* GL_NV_fragment_program2 */
+
+#ifndef GL_NV_fragment_program4
+#define GL_NV_fragment_program4 1
+#endif /* GL_NV_fragment_program4 */
+
+#ifndef GL_NV_fragment_program_option
+#define GL_NV_fragment_program_option 1
+#endif /* GL_NV_fragment_program_option */
+
+#ifndef GL_NV_fragment_shader_interlock
+#define GL_NV_fragment_shader_interlock 1
+#endif /* GL_NV_fragment_shader_interlock */
+
+#ifndef GL_NV_framebuffer_mixed_samples
+#define GL_NV_framebuffer_mixed_samples 1
+#define GL_COVERAGE_MODULATION_TABLE_NV   0x9331
+#define GL_COLOR_SAMPLES_NV               0x8E20
+#define GL_DEPTH_SAMPLES_NV               0x932D
+#define GL_STENCIL_SAMPLES_NV             0x932E
+#define GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV 0x932F
+#define GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV 0x9330
+#define GL_COVERAGE_MODULATION_NV         0x9332
+#define GL_COVERAGE_MODULATION_TABLE_SIZE_NV 0x9333
+typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONTABLENVPROC) (GLsizei n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLGETCOVERAGEMODULATIONTABLENVPROC) (GLsizei bufsize, GLfloat *v);
+typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONNVPROC) (GLenum components);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCoverageModulationTableNV (GLsizei n, const GLfloat *v);
+GLAPI void APIENTRY glGetCoverageModulationTableNV (GLsizei bufsize, GLfloat *v);
+GLAPI void APIENTRY glCoverageModulationNV (GLenum components);
+#endif
+#endif /* GL_NV_framebuffer_mixed_samples */
+
+#ifndef GL_NV_framebuffer_multisample_coverage
+#define GL_NV_framebuffer_multisample_coverage 1
+#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 PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
+#endif
+#endif /* GL_NV_framebuffer_multisample_coverage */
+
+#ifndef GL_NV_geometry_program4
+#define GL_NV_geometry_program4 1
+#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 PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);
+typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit);
+GLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level);
+GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
+#endif
+#endif /* GL_NV_geometry_program4 */
+
+#ifndef GL_NV_geometry_shader4
+#define GL_NV_geometry_shader4 1
+#endif /* GL_NV_geometry_shader4 */
+
+#ifndef GL_NV_geometry_shader_passthrough
+#define GL_NV_geometry_shader_passthrough 1
+#endif /* GL_NV_geometry_shader_passthrough */
+
+#ifndef GL_NV_gpu_program4
+#define GL_NV_gpu_program4 1
+#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 PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params);
+typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params);
+typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params);
+GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params);
+GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params);
+GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params);
+GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params);
+GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params);
+GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params);
+GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params);
+GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params);
+GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params);
+GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params);
+GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params);
+#endif
+#endif /* GL_NV_gpu_program4 */
+
+#ifndef GL_NV_gpu_program5
+#define GL_NV_gpu_program5 1
+#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 PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params);
+GLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param);
+#endif
+#endif /* GL_NV_gpu_program5 */
+
+#ifndef GL_NV_gpu_program5_mem_extended
+#define GL_NV_gpu_program5_mem_extended 1
+#endif /* GL_NV_gpu_program5_mem_extended */
+
+#ifndef GL_NV_gpu_shader5
+#define GL_NV_gpu_shader5 1
+#endif /* GL_NV_gpu_shader5 */
+
+#ifndef GL_NV_half_float
+#define GL_NV_half_float 1
+typedef unsigned short GLhalfNV;
+#define GL_HALF_FLOAT_NV                  0x140B
+typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y);
+typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z);
+typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz);
+typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha);
+typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s);
+typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t);
+typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r);
+typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog);
+typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight);
+typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y);
+GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z);
+GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz);
+GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha);
+GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s);
+GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t);
+GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r);
+GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s);
+GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v);
+GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t);
+GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v);
+GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r);
+GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v);
+GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v);
+GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog);
+GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog);
+GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v);
+GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight);
+GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight);
+GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x);
+GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y);
+GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z);
+GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
+GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v);
+#endif
+#endif /* GL_NV_half_float */
+
+#ifndef GL_NV_internalformat_sample_query
+#define GL_NV_internalformat_sample_query 1
+#define GL_MULTISAMPLES_NV                0x9371
+#define GL_SUPERSAMPLE_SCALE_X_NV         0x9372
+#define GL_SUPERSAMPLE_SCALE_Y_NV         0x9373
+#define GL_CONFORMANT_NV                  0x9374
+typedef void (APIENTRYP PFNGLGETINTERNALFORMATSAMPLEIVNVPROC) (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetInternalformatSampleivNV (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint *params);
+#endif
+#endif /* GL_NV_internalformat_sample_query */
+
+#ifndef GL_NV_light_max_exponent
+#define GL_NV_light_max_exponent 1
+#define GL_MAX_SHININESS_NV               0x8504
+#define GL_MAX_SPOT_EXPONENT_NV           0x8505
+#endif /* GL_NV_light_max_exponent */
+
+#ifndef GL_NV_multisample_coverage
+#define GL_NV_multisample_coverage 1
+#endif /* GL_NV_multisample_coverage */
+
+#ifndef GL_NV_multisample_filter_hint
+#define GL_NV_multisample_filter_hint 1
+#define GL_MULTISAMPLE_FILTER_HINT_NV     0x8534
+#endif /* GL_NV_multisample_filter_hint */
+
+#ifndef GL_NV_occlusion_query
+#define GL_NV_occlusion_query 1
+#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 PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids);
+typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void);
+typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids);
+GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids);
+GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id);
+GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id);
+GLAPI void APIENTRY glEndOcclusionQueryNV (void);
+GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params);
+#endif
+#endif /* GL_NV_occlusion_query */
+
+#ifndef GL_NV_packed_depth_stencil
+#define GL_NV_packed_depth_stencil 1
+#define GL_DEPTH_STENCIL_NV               0x84F9
+#define GL_UNSIGNED_INT_24_8_NV           0x84FA
+#endif /* GL_NV_packed_depth_stencil */
+
+#ifndef GL_NV_parameter_buffer_object
+#define GL_NV_parameter_buffer_object 1
+#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 PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params);
+typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params);
+typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params);
+GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params);
+GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params);
+#endif
+#endif /* GL_NV_parameter_buffer_object */
+
+#ifndef GL_NV_parameter_buffer_object2
+#define GL_NV_parameter_buffer_object2 1
+#endif /* GL_NV_parameter_buffer_object2 */
+
+#ifndef GL_NV_path_rendering
+#define GL_NV_path_rendering 1
+#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_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_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_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_FOG_GEN_MODE_NV           0x90AC
+#define GL_PRIMARY_COLOR_NV               0x852C
+#define GL_SECONDARY_COLOR_NV             0x852D
+#define GL_PATH_GEN_COLOR_FORMAT_NV       0x90B2
+#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 PFNGLGENPATHSNVPROC) (GLsizei range);
+typedef void (APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range);
+typedef GLboolean (APIENTRYP PFNGLISPATHNVPROC) (GLuint path);
+typedef void (APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords);
+typedef void (APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString);
+typedef void (APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights);
+typedef void (APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath);
+typedef void (APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight);
+typedef void (APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value);
+typedef void (APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value);
+typedef void (APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value);
+typedef void (APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value);
+typedef void (APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray);
+typedef void (APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask);
+typedef void (APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units);
+typedef void (APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask);
+typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask);
+typedef void (APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func);
+typedef void (APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode);
+typedef void (APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode);
+typedef void (APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value);
+typedef void (APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value);
+typedef void (APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands);
+typedef void (APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords);
+typedef void (APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray);
+typedef void (APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics);
+typedef void (APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics);
+typedef void (APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing);
+typedef GLboolean (APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y);
+typedef GLboolean (APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y);
+typedef GLfloat (APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments);
+typedef GLboolean (APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY);
+typedef void (APIENTRYP PFNGLMATRIXLOAD3X2FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXLOAD3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULT3X2FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULT3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m);
+typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode);
+typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask, GLenum coverMode);
+typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXRANGENVPROC) (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]);
+typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef GLenum (APIENTRYP PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+typedef void (APIENTRYP PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC) (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs);
+typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEFVNVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params);
+typedef void (APIENTRYP PFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs);
+typedef void (APIENTRYP PFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs);
+typedef void (APIENTRYP PFNGLPATHFOGGENNVPROC) (GLenum genMode);
+typedef void (APIENTRYP PFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint *value);
+typedef void (APIENTRYP PFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat *value);
+typedef void (APIENTRYP PFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint *value);
+typedef void (APIENTRYP PFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint APIENTRY glGenPathsNV (GLsizei range);
+GLAPI void APIENTRY glDeletePathsNV (GLuint path, GLsizei range);
+GLAPI GLboolean APIENTRY glIsPathNV (GLuint path);
+GLAPI void APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+GLAPI void APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords);
+GLAPI void APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords);
+GLAPI void APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords);
+GLAPI void APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString);
+GLAPI void APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GLAPI void APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GLAPI void APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights);
+GLAPI void APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath);
+GLAPI void APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight);
+GLAPI void APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value);
+GLAPI void APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value);
+GLAPI void APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value);
+GLAPI void APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value);
+GLAPI void APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray);
+GLAPI void APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask);
+GLAPI void APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units);
+GLAPI void APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask);
+GLAPI void APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask);
+GLAPI void APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glPathCoverDepthFuncNV (GLenum func);
+GLAPI void APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode);
+GLAPI void APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode);
+GLAPI void APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value);
+GLAPI void APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value);
+GLAPI void APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands);
+GLAPI void APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords);
+GLAPI void APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray);
+GLAPI void APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics);
+GLAPI void APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics);
+GLAPI void APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing);
+GLAPI GLboolean APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y);
+GLAPI GLboolean APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y);
+GLAPI GLfloat APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments);
+GLAPI GLboolean APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY);
+GLAPI void APIENTRY glMatrixLoad3x2fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixLoad3x3fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixLoadTranspose3x3fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMult3x2fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMult3x3fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glMatrixMultTranspose3x3fNV (GLenum matrixMode, const GLfloat *m);
+GLAPI void APIENTRY glStencilThenCoverFillPathNV (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode);
+GLAPI void APIENTRY glStencilThenCoverStrokePathNV (GLuint path, GLint reference, GLuint mask, GLenum coverMode);
+GLAPI void APIENTRY glStencilThenCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GLAPI void APIENTRY glStencilThenCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);
+GLAPI GLenum APIENTRY glPathGlyphIndexRangeNV (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount[2]);
+GLAPI GLenum APIENTRY glPathGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GLAPI GLenum APIENTRY glPathMemoryGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale);
+GLAPI void APIENTRY glProgramPathFragmentInputGenNV (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs);
+GLAPI void APIENTRY glGetProgramResourcefvNV (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLfloat *params);
+GLAPI void APIENTRY glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs);
+GLAPI void APIENTRY glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs);
+GLAPI void APIENTRY glPathFogGenNV (GLenum genMode);
+GLAPI void APIENTRY glGetPathColorGenivNV (GLenum color, GLenum pname, GLint *value);
+GLAPI void APIENTRY glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat *value);
+GLAPI void APIENTRY glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint *value);
+GLAPI void APIENTRY glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat *value);
+#endif
+#endif /* GL_NV_path_rendering */
+
+#ifndef GL_NV_path_rendering_shared_edge
+#define GL_NV_path_rendering_shared_edge 1
+#define GL_SHARED_EDGE_NV                 0xC0
+#endif /* GL_NV_path_rendering_shared_edge */
+
+#ifndef GL_NV_pixel_data_range
+#define GL_NV_pixel_data_range 1
+#define GL_WRITE_PIXEL_DATA_RANGE_NV      0x8878
+#define GL_READ_PIXEL_DATA_RANGE_NV       0x8879
+#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A
+#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B
+#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C
+#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D
+typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, const void *pointer);
+typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, const void *pointer);
+GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target);
+#endif
+#endif /* GL_NV_pixel_data_range */
+
+#ifndef GL_NV_point_sprite
+#define GL_NV_point_sprite 1
+#define GL_POINT_SPRITE_NV                0x8861
+#define GL_COORD_REPLACE_NV               0x8862
+#define GL_POINT_SPRITE_R_MODE_NV         0x8863
+typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param);
+GLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params);
+#endif
+#endif /* GL_NV_point_sprite */
+
+#ifndef GL_NV_present_video
+#define GL_NV_present_video 1
+#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 PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1);
+typedef void (APIENTRYP PFNGLPRESENTFRAMEDUALFILLNVPROC) (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);
+typedef void (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params);
+typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params);
+typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1);
+GLAPI void APIENTRY 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);
+GLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params);
+GLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params);
+GLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params);
+#endif
+#endif /* GL_NV_present_video */
+
+#ifndef GL_NV_primitive_restart
+#define GL_NV_primitive_restart 1
+#define GL_PRIMITIVE_RESTART_NV           0x8558
+#define GL_PRIMITIVE_RESTART_INDEX_NV     0x8559
+typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void);
+typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPrimitiveRestartNV (void);
+GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index);
+#endif
+#endif /* GL_NV_primitive_restart */
+
+#ifndef GL_NV_register_combiners
+#define GL_NV_register_combiners 1
+#define GL_REGISTER_COMBINERS_NV          0x8522
+#define GL_VARIABLE_A_NV                  0x8523
+#define GL_VARIABLE_B_NV                  0x8524
+#define GL_VARIABLE_C_NV                  0x8525
+#define GL_VARIABLE_D_NV                  0x8526
+#define GL_VARIABLE_E_NV                  0x8527
+#define GL_VARIABLE_F_NV                  0x8528
+#define GL_VARIABLE_G_NV                  0x8529
+#define GL_CONSTANT_COLOR0_NV             0x852A
+#define GL_CONSTANT_COLOR1_NV             0x852B
+#define GL_SPARE0_NV                      0x852E
+#define GL_SPARE1_NV                      0x852F
+#define GL_DISCARD_NV                     0x8530
+#define GL_E_TIMES_F_NV                   0x8531
+#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532
+#define GL_UNSIGNED_IDENTITY_NV           0x8536
+#define GL_UNSIGNED_INVERT_NV             0x8537
+#define GL_EXPAND_NORMAL_NV               0x8538
+#define GL_EXPAND_NEGATE_NV               0x8539
+#define GL_HALF_BIAS_NORMAL_NV            0x853A
+#define GL_HALF_BIAS_NEGATE_NV            0x853B
+#define GL_SIGNED_IDENTITY_NV             0x853C
+#define GL_SIGNED_NEGATE_NV               0x853D
+#define GL_SCALE_BY_TWO_NV                0x853E
+#define GL_SCALE_BY_FOUR_NV               0x853F
+#define GL_SCALE_BY_ONE_HALF_NV           0x8540
+#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV   0x8541
+#define GL_COMBINER_INPUT_NV              0x8542
+#define GL_COMBINER_MAPPING_NV            0x8543
+#define GL_COMBINER_COMPONENT_USAGE_NV    0x8544
+#define GL_COMBINER_AB_DOT_PRODUCT_NV     0x8545
+#define GL_COMBINER_CD_DOT_PRODUCT_NV     0x8546
+#define GL_COMBINER_MUX_SUM_NV            0x8547
+#define GL_COMBINER_SCALE_NV              0x8548
+#define GL_COMBINER_BIAS_NV               0x8549
+#define GL_COMBINER_AB_OUTPUT_NV          0x854A
+#define GL_COMBINER_CD_OUTPUT_NV          0x854B
+#define GL_COMBINER_SUM_OUTPUT_NV         0x854C
+#define GL_MAX_GENERAL_COMBINERS_NV       0x854D
+#define GL_NUM_GENERAL_COMBINERS_NV       0x854E
+#define GL_COLOR_SUM_CLAMP_NV             0x854F
+#define GL_COMBINER0_NV                   0x8550
+#define GL_COMBINER1_NV                   0x8551
+#define GL_COMBINER2_NV                   0x8552
+#define GL_COMBINER3_NV                   0x8553
+#define GL_COMBINER4_NV                   0x8554
+#define GL_COMBINER5_NV                   0x8555
+#define GL_COMBINER6_NV                   0x8556
+#define GL_COMBINER7_NV                   0x8557
+typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);
+typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params);
+GLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param);
+GLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+GLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);
+GLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params);
+#endif
+#endif /* GL_NV_register_combiners */
+
+#ifndef GL_NV_register_combiners2
+#define GL_NV_register_combiners2 1
+#define GL_PER_STAGE_CONSTANTS_NV         0x8535
+typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params);
+#endif
+#endif /* GL_NV_register_combiners2 */
+
+#ifndef GL_NV_sample_locations
+#define GL_NV_sample_locations 1
+#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D
+#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E
+#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F
+#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340
+#define GL_SAMPLE_LOCATION_NV             0x8E50
+#define GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341
+#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342
+#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343
+typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLRESOLVEDEPTHVALUESNVPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFramebufferSampleLocationsfvNV (GLenum target, GLuint start, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glNamedFramebufferSampleLocationsfvNV (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glResolveDepthValuesNV (void);
+#endif
+#endif /* GL_NV_sample_locations */
+
+#ifndef GL_NV_sample_mask_override_coverage
+#define GL_NV_sample_mask_override_coverage 1
+#endif /* GL_NV_sample_mask_override_coverage */
+
+#ifndef GL_NV_shader_atomic_counters
+#define GL_NV_shader_atomic_counters 1
+#endif /* GL_NV_shader_atomic_counters */
+
+#ifndef GL_NV_shader_atomic_float
+#define GL_NV_shader_atomic_float 1
+#endif /* GL_NV_shader_atomic_float */
+
+#ifndef GL_NV_shader_atomic_fp16_vector
+#define GL_NV_shader_atomic_fp16_vector 1
+#endif /* GL_NV_shader_atomic_fp16_vector */
+
+#ifndef GL_NV_shader_atomic_int64
+#define GL_NV_shader_atomic_int64 1
+#endif /* GL_NV_shader_atomic_int64 */
+
+#ifndef GL_NV_shader_buffer_load
+#define GL_NV_shader_buffer_load 1
+#define GL_BUFFER_GPU_ADDRESS_NV          0x8F1D
+#define GL_GPU_ADDRESS_NV                 0x8F34
+#define GL_MAX_SHADER_BUFFER_ADDRESS_NV   0x8F35
+typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access);
+typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target);
+typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target);
+typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access);
+typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer);
+typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer);
+typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params);
+typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params);
+typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result);
+typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value);
+typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value);
+typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access);
+GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target);
+GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target);
+GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access);
+GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer);
+GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer);
+GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params);
+GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params);
+GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result);
+GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value);
+GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);
+GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value);
+GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
+#endif
+#endif /* GL_NV_shader_buffer_load */
+
+#ifndef GL_NV_shader_buffer_store
+#define GL_NV_shader_buffer_store 1
+#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010
+#endif /* GL_NV_shader_buffer_store */
+
+#ifndef GL_NV_shader_storage_buffer_object
+#define GL_NV_shader_storage_buffer_object 1
+#endif /* GL_NV_shader_storage_buffer_object */
+
+#ifndef GL_NV_shader_thread_group
+#define GL_NV_shader_thread_group 1
+#define GL_WARP_SIZE_NV                   0x9339
+#define GL_WARPS_PER_SM_NV                0x933A
+#define GL_SM_COUNT_NV                    0x933B
+#endif /* GL_NV_shader_thread_group */
+
+#ifndef GL_NV_shader_thread_shuffle
+#define GL_NV_shader_thread_shuffle 1
+#endif /* GL_NV_shader_thread_shuffle */
+
+#ifndef GL_NV_tessellation_program5
+#define GL_NV_tessellation_program5 1
+#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
+#endif /* GL_NV_tessellation_program5 */
+
+#ifndef GL_NV_texgen_emboss
+#define GL_NV_texgen_emboss 1
+#define GL_EMBOSS_LIGHT_NV                0x855D
+#define GL_EMBOSS_CONSTANT_NV             0x855E
+#define GL_EMBOSS_MAP_NV                  0x855F
+#endif /* GL_NV_texgen_emboss */
+
+#ifndef GL_NV_texgen_reflection
+#define GL_NV_texgen_reflection 1
+#define GL_NORMAL_MAP_NV                  0x8511
+#define GL_REFLECTION_MAP_NV              0x8512
+#endif /* GL_NV_texgen_reflection */
+
+#ifndef GL_NV_texture_barrier
+#define GL_NV_texture_barrier 1
+typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureBarrierNV (void);
+#endif
+#endif /* GL_NV_texture_barrier */
+
+#ifndef GL_NV_texture_compression_vtc
+#define GL_NV_texture_compression_vtc 1
+#endif /* GL_NV_texture_compression_vtc */
+
+#ifndef GL_NV_texture_env_combine4
+#define GL_NV_texture_env_combine4 1
+#define GL_COMBINE4_NV                    0x8503
+#define GL_SOURCE3_RGB_NV                 0x8583
+#define GL_SOURCE3_ALPHA_NV               0x858B
+#define GL_OPERAND3_RGB_NV                0x8593
+#define GL_OPERAND3_ALPHA_NV              0x859B
+#endif /* GL_NV_texture_env_combine4 */
+
+#ifndef GL_NV_texture_expand_normal
+#define GL_NV_texture_expand_normal 1
+#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F
+#endif /* GL_NV_texture_expand_normal */
+
+#ifndef GL_NV_texture_multisample
+#define GL_NV_texture_multisample 1
+#define GL_TEXTURE_COVERAGE_SAMPLES_NV    0x9045
+#define GL_TEXTURE_COLOR_SAMPLES_NV       0x9046
+typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+GLAPI void APIENTRY glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+GLAPI void APIENTRY glTextureImage2DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+GLAPI void APIENTRY glTextureImage3DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+GLAPI void APIENTRY glTextureImage2DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
+GLAPI void APIENTRY glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
+#endif
+#endif /* GL_NV_texture_multisample */
+
+#ifndef GL_NV_texture_rectangle
+#define GL_NV_texture_rectangle 1
+#define GL_TEXTURE_RECTANGLE_NV           0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE_NV   0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE_NV     0x84F7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV  0x84F8
+#endif /* GL_NV_texture_rectangle */
+
+#ifndef GL_NV_texture_shader
+#define GL_NV_texture_shader 1
+#define GL_OFFSET_TEXTURE_RECTANGLE_NV    0x864C
+#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D
+#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E
+#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9
+#define GL_UNSIGNED_INT_S8_S8_8_8_NV      0x86DA
+#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV  0x86DB
+#define GL_DSDT_MAG_INTENSITY_NV          0x86DC
+#define GL_SHADER_CONSISTENT_NV           0x86DD
+#define GL_TEXTURE_SHADER_NV              0x86DE
+#define GL_SHADER_OPERATION_NV            0x86DF
+#define GL_CULL_MODES_NV                  0x86E0
+#define GL_OFFSET_TEXTURE_MATRIX_NV       0x86E1
+#define GL_OFFSET_TEXTURE_SCALE_NV        0x86E2
+#define GL_OFFSET_TEXTURE_BIAS_NV         0x86E3
+#define GL_OFFSET_TEXTURE_2D_MATRIX_NV    0x86E1
+#define GL_OFFSET_TEXTURE_2D_SCALE_NV     0x86E2
+#define GL_OFFSET_TEXTURE_2D_BIAS_NV      0x86E3
+#define GL_PREVIOUS_TEXTURE_INPUT_NV      0x86E4
+#define GL_CONST_EYE_NV                   0x86E5
+#define GL_PASS_THROUGH_NV                0x86E6
+#define GL_CULL_FRAGMENT_NV               0x86E7
+#define GL_OFFSET_TEXTURE_2D_NV           0x86E8
+#define GL_DEPENDENT_AR_TEXTURE_2D_NV     0x86E9
+#define GL_DEPENDENT_GB_TEXTURE_2D_NV     0x86EA
+#define GL_DOT_PRODUCT_NV                 0x86EC
+#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV   0x86ED
+#define GL_DOT_PRODUCT_TEXTURE_2D_NV      0x86EE
+#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0
+#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1
+#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2
+#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3
+#define GL_HILO_NV                        0x86F4
+#define GL_DSDT_NV                        0x86F5
+#define GL_DSDT_MAG_NV                    0x86F6
+#define GL_DSDT_MAG_VIB_NV                0x86F7
+#define GL_HILO16_NV                      0x86F8
+#define GL_SIGNED_HILO_NV                 0x86F9
+#define GL_SIGNED_HILO16_NV               0x86FA
+#define GL_SIGNED_RGBA_NV                 0x86FB
+#define GL_SIGNED_RGBA8_NV                0x86FC
+#define GL_SIGNED_RGB_NV                  0x86FE
+#define GL_SIGNED_RGB8_NV                 0x86FF
+#define GL_SIGNED_LUMINANCE_NV            0x8701
+#define GL_SIGNED_LUMINANCE8_NV           0x8702
+#define GL_SIGNED_LUMINANCE_ALPHA_NV      0x8703
+#define GL_SIGNED_LUMINANCE8_ALPHA8_NV    0x8704
+#define GL_SIGNED_ALPHA_NV                0x8705
+#define GL_SIGNED_ALPHA8_NV               0x8706
+#define GL_SIGNED_INTENSITY_NV            0x8707
+#define GL_SIGNED_INTENSITY8_NV           0x8708
+#define GL_DSDT8_NV                       0x8709
+#define GL_DSDT8_MAG8_NV                  0x870A
+#define GL_DSDT8_MAG8_INTENSITY8_NV       0x870B
+#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV   0x870C
+#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D
+#define GL_HI_SCALE_NV                    0x870E
+#define GL_LO_SCALE_NV                    0x870F
+#define GL_DS_SCALE_NV                    0x8710
+#define GL_DT_SCALE_NV                    0x8711
+#define GL_MAGNITUDE_SCALE_NV             0x8712
+#define GL_VIBRANCE_SCALE_NV              0x8713
+#define GL_HI_BIAS_NV                     0x8714
+#define GL_LO_BIAS_NV                     0x8715
+#define GL_DS_BIAS_NV                     0x8716
+#define GL_DT_BIAS_NV                     0x8717
+#define GL_MAGNITUDE_BIAS_NV              0x8718
+#define GL_VIBRANCE_BIAS_NV               0x8719
+#define GL_TEXTURE_BORDER_VALUES_NV       0x871A
+#define GL_TEXTURE_HI_SIZE_NV             0x871B
+#define GL_TEXTURE_LO_SIZE_NV             0x871C
+#define GL_TEXTURE_DS_SIZE_NV             0x871D
+#define GL_TEXTURE_DT_SIZE_NV             0x871E
+#define GL_TEXTURE_MAG_SIZE_NV            0x871F
+#endif /* GL_NV_texture_shader */
+
+#ifndef GL_NV_texture_shader2
+#define GL_NV_texture_shader2 1
+#define GL_DOT_PRODUCT_TEXTURE_3D_NV      0x86EF
+#endif /* GL_NV_texture_shader2 */
+
+#ifndef GL_NV_texture_shader3
+#define GL_NV_texture_shader3 1
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853
+#define GL_OFFSET_HILO_TEXTURE_2D_NV      0x8854
+#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857
+#define GL_DEPENDENT_HILO_TEXTURE_2D_NV   0x8858
+#define GL_DEPENDENT_RGB_TEXTURE_3D_NV    0x8859
+#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A
+#define GL_DOT_PRODUCT_PASS_THROUGH_NV    0x885B
+#define GL_DOT_PRODUCT_TEXTURE_1D_NV      0x885C
+#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D
+#define GL_HILO8_NV                       0x885E
+#define GL_SIGNED_HILO8_NV                0x885F
+#define GL_FORCE_BLUE_TO_ONE_NV           0x8860
+#endif /* GL_NV_texture_shader3 */
+
+#ifndef GL_NV_transform_feedback
+#define GL_NV_transform_feedback 1
+#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 PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode);
+typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLenum bufferMode);
+typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset);
+typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode);
+typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name);
+typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name);
+typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location);
+typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode);
+GLAPI void APIENTRY glEndTransformFeedbackNV (void);
+GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLsizei count, const GLint *attribs, GLenum bufferMode);
+GLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+GLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset);
+GLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer);
+GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode);
+GLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name);
+GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name);
+GLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location);
+GLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode);
+#endif
+#endif /* GL_NV_transform_feedback */
+
+#ifndef GL_NV_transform_feedback2
+#define GL_NV_transform_feedback2 1
+#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 PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids);
+typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint *ids);
+typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void);
+typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void);
+typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id);
+GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids);
+GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids);
+GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id);
+GLAPI void APIENTRY glPauseTransformFeedbackNV (void);
+GLAPI void APIENTRY glResumeTransformFeedbackNV (void);
+GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id);
+#endif
+#endif /* GL_NV_transform_feedback2 */
+
+#ifndef GL_NV_uniform_buffer_unified_memory
+#define GL_NV_uniform_buffer_unified_memory 1
+#define GL_UNIFORM_BUFFER_UNIFIED_NV      0x936E
+#define GL_UNIFORM_BUFFER_ADDRESS_NV      0x936F
+#define GL_UNIFORM_BUFFER_LENGTH_NV       0x9370
+#endif /* GL_NV_uniform_buffer_unified_memory */
+
+#ifndef GL_NV_vdpau_interop
+#define GL_NV_vdpau_interop 1
+typedef GLintptr GLvdpauSurfaceNV;
+#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 PFNGLVDPAUINITNVPROC) (const void *vdpDevice, const void *getProcAddress);
+typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void);
+typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
+typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
+typedef GLboolean (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface);
+typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface);
+typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access);
+typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces);
+typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVDPAUInitNV (const void *vdpDevice, const void *getProcAddress);
+GLAPI void APIENTRY glVDPAUFiniNV (void);
+GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
+GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);
+GLAPI GLboolean APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface);
+GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface);
+GLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+GLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access);
+GLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces);
+GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces);
+#endif
+#endif /* GL_NV_vdpau_interop */
+
+#ifndef GL_NV_vertex_array_range
+#define GL_NV_vertex_array_range 1
+#define GL_VERTEX_ARRAY_RANGE_NV          0x851D
+#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV   0x851E
+#define GL_VERTEX_ARRAY_RANGE_VALID_NV    0x851F
+#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520
+#define GL_VERTEX_ARRAY_RANGE_POINTER_NV  0x8521
+typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void);
+typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const void *pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFlushVertexArrayRangeNV (void);
+GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const void *pointer);
+#endif
+#endif /* GL_NV_vertex_array_range */
+
+#ifndef GL_NV_vertex_array_range2
+#define GL_NV_vertex_array_range2 1
+#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533
+#endif /* GL_NV_vertex_array_range2 */
+
+#ifndef GL_NV_vertex_attrib_integer_64bit
+#define GL_NV_vertex_attrib_integer_64bit 1
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x);
+GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y);
+GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z);
+GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);
+GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x);
+GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y);
+GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);
+GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);
+GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v);
+GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params);
+GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params);
+GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride);
+#endif
+#endif /* GL_NV_vertex_attrib_integer_64bit */
+
+#ifndef GL_NV_vertex_buffer_unified_memory
+#define GL_NV_vertex_buffer_unified_memory 1
+#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 PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length);
+typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride);
+typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride);
+typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length);
+GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride);
+GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride);
+GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride);
+GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride);
+GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride);
+GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride);
+GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result);
+#endif
+#endif /* GL_NV_vertex_buffer_unified_memory */
+
+#ifndef GL_NV_vertex_program
+#define GL_NV_vertex_program 1
+#define GL_VERTEX_PROGRAM_NV              0x8620
+#define GL_VERTEX_STATE_PROGRAM_NV        0x8621
+#define GL_ATTRIB_ARRAY_SIZE_NV           0x8623
+#define GL_ATTRIB_ARRAY_STRIDE_NV         0x8624
+#define GL_ATTRIB_ARRAY_TYPE_NV           0x8625
+#define GL_CURRENT_ATTRIB_NV              0x8626
+#define GL_PROGRAM_LENGTH_NV              0x8627
+#define GL_PROGRAM_STRING_NV              0x8628
+#define GL_MODELVIEW_PROJECTION_NV        0x8629
+#define GL_IDENTITY_NV                    0x862A
+#define GL_INVERSE_NV                     0x862B
+#define GL_TRANSPOSE_NV                   0x862C
+#define GL_INVERSE_TRANSPOSE_NV           0x862D
+#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E
+#define GL_MAX_TRACK_MATRICES_NV          0x862F
+#define GL_MATRIX0_NV                     0x8630
+#define GL_MATRIX1_NV                     0x8631
+#define GL_MATRIX2_NV                     0x8632
+#define GL_MATRIX3_NV                     0x8633
+#define GL_MATRIX4_NV                     0x8634
+#define GL_MATRIX5_NV                     0x8635
+#define GL_MATRIX6_NV                     0x8636
+#define GL_MATRIX7_NV                     0x8637
+#define GL_CURRENT_MATRIX_STACK_DEPTH_NV  0x8640
+#define GL_CURRENT_MATRIX_NV              0x8641
+#define GL_VERTEX_PROGRAM_POINT_SIZE_NV   0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE_NV     0x8643
+#define GL_PROGRAM_PARAMETER_NV           0x8644
+#define GL_ATTRIB_ARRAY_POINTER_NV        0x8645
+#define GL_PROGRAM_TARGET_NV              0x8646
+#define GL_PROGRAM_RESIDENT_NV            0x8647
+#define GL_TRACK_MATRIX_NV                0x8648
+#define GL_TRACK_MATRIX_TRANSFORM_NV      0x8649
+#define GL_VERTEX_PROGRAM_BINDING_NV      0x864A
+#define GL_PROGRAM_ERROR_POSITION_NV      0x864B
+#define GL_VERTEX_ATTRIB_ARRAY0_NV        0x8650
+#define GL_VERTEX_ATTRIB_ARRAY1_NV        0x8651
+#define GL_VERTEX_ATTRIB_ARRAY2_NV        0x8652
+#define GL_VERTEX_ATTRIB_ARRAY3_NV        0x8653
+#define GL_VERTEX_ATTRIB_ARRAY4_NV        0x8654
+#define GL_VERTEX_ATTRIB_ARRAY5_NV        0x8655
+#define GL_VERTEX_ATTRIB_ARRAY6_NV        0x8656
+#define GL_VERTEX_ATTRIB_ARRAY7_NV        0x8657
+#define GL_VERTEX_ATTRIB_ARRAY8_NV        0x8658
+#define GL_VERTEX_ATTRIB_ARRAY9_NV        0x8659
+#define GL_VERTEX_ATTRIB_ARRAY10_NV       0x865A
+#define GL_VERTEX_ATTRIB_ARRAY11_NV       0x865B
+#define GL_VERTEX_ATTRIB_ARRAY12_NV       0x865C
+#define GL_VERTEX_ATTRIB_ARRAY13_NV       0x865D
+#define GL_VERTEX_ATTRIB_ARRAY14_NV       0x865E
+#define GL_VERTEX_ATTRIB_ARRAY15_NV       0x865F
+#define GL_MAP1_VERTEX_ATTRIB0_4_NV       0x8660
+#define GL_MAP1_VERTEX_ATTRIB1_4_NV       0x8661
+#define GL_MAP1_VERTEX_ATTRIB2_4_NV       0x8662
+#define GL_MAP1_VERTEX_ATTRIB3_4_NV       0x8663
+#define GL_MAP1_VERTEX_ATTRIB4_4_NV       0x8664
+#define GL_MAP1_VERTEX_ATTRIB5_4_NV       0x8665
+#define GL_MAP1_VERTEX_ATTRIB6_4_NV       0x8666
+#define GL_MAP1_VERTEX_ATTRIB7_4_NV       0x8667
+#define GL_MAP1_VERTEX_ATTRIB8_4_NV       0x8668
+#define GL_MAP1_VERTEX_ATTRIB9_4_NV       0x8669
+#define GL_MAP1_VERTEX_ATTRIB10_4_NV      0x866A
+#define GL_MAP1_VERTEX_ATTRIB11_4_NV      0x866B
+#define GL_MAP1_VERTEX_ATTRIB12_4_NV      0x866C
+#define GL_MAP1_VERTEX_ATTRIB13_4_NV      0x866D
+#define GL_MAP1_VERTEX_ATTRIB14_4_NV      0x866E
+#define GL_MAP1_VERTEX_ATTRIB15_4_NV      0x866F
+#define GL_MAP2_VERTEX_ATTRIB0_4_NV       0x8670
+#define GL_MAP2_VERTEX_ATTRIB1_4_NV       0x8671
+#define GL_MAP2_VERTEX_ATTRIB2_4_NV       0x8672
+#define GL_MAP2_VERTEX_ATTRIB3_4_NV       0x8673
+#define GL_MAP2_VERTEX_ATTRIB4_4_NV       0x8674
+#define GL_MAP2_VERTEX_ATTRIB5_4_NV       0x8675
+#define GL_MAP2_VERTEX_ATTRIB6_4_NV       0x8676
+#define GL_MAP2_VERTEX_ATTRIB7_4_NV       0x8677
+#define GL_MAP2_VERTEX_ATTRIB8_4_NV       0x8678
+#define GL_MAP2_VERTEX_ATTRIB9_4_NV       0x8679
+#define GL_MAP2_VERTEX_ATTRIB10_4_NV      0x867A
+#define GL_MAP2_VERTEX_ATTRIB11_4_NV      0x867B
+#define GL_MAP2_VERTEX_ATTRIB12_4_NV      0x867C
+#define GL_MAP2_VERTEX_ATTRIB13_4_NV      0x867D
+#define GL_MAP2_VERTEX_ATTRIB14_4_NV      0x867E
+#define GL_MAP2_VERTEX_ATTRIB15_4_NV      0x867F
+typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences);
+typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id);
+typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);
+typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs);
+typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program);
+typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, void **pointer);
+typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id);
+typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);
+typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences);
+GLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id);
+GLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs);
+GLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params);
+GLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs);
+GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program);
+GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params);
+GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, void **pointer);
+GLAPI GLboolean APIENTRY glIsProgramNV (GLuint id);
+GLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program);
+GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs);
+GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform);
+GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x);
+GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x);
+GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x);
+GLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y);
+GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y);
+GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y);
+GLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z);
+GLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+GLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v);
+GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v);
+GLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v);
+#endif
+#endif /* GL_NV_vertex_program */
+
+#ifndef GL_NV_vertex_program1_1
+#define GL_NV_vertex_program1_1 1
+#endif /* GL_NV_vertex_program1_1 */
+
+#ifndef GL_NV_vertex_program2
+#define GL_NV_vertex_program2 1
+#endif /* GL_NV_vertex_program2 */
+
+#ifndef GL_NV_vertex_program2_option
+#define GL_NV_vertex_program2_option 1
+#endif /* GL_NV_vertex_program2_option */
+
+#ifndef GL_NV_vertex_program3
+#define GL_NV_vertex_program3 1
+#endif /* GL_NV_vertex_program3 */
+
+#ifndef GL_NV_vertex_program4
+#define GL_NV_vertex_program4 1
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v);
+typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x);
+GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y);
+GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z);
+GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w);
+GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x);
+GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y);
+GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z);
+GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v);
+GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v);
+GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v);
+GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v);
+GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v);
+GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v);
+GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
+GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params);
+#endif
+#endif /* GL_NV_vertex_program4 */
+
+#ifndef GL_NV_video_capture
+#define GL_NV_video_capture 1
+#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 PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot);
+typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset);
+typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture);
+typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot);
+typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params);
+typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time);
+typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot);
+GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset);
+GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture);
+GLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot);
+GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params);
+GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time);
+GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params);
+#endif
+#endif /* GL_NV_video_capture */
+
+#ifndef GL_NV_viewport_array2
+#define GL_NV_viewport_array2 1
+#endif /* GL_NV_viewport_array2 */
+
+#ifndef GL_OML_interlace
+#define GL_OML_interlace 1
+#define GL_INTERLACE_OML                  0x8980
+#define GL_INTERLACE_READ_OML             0x8981
+#endif /* GL_OML_interlace */
+
+#ifndef GL_OML_resample
+#define GL_OML_resample 1
+#define GL_PACK_RESAMPLE_OML              0x8984
+#define GL_UNPACK_RESAMPLE_OML            0x8985
+#define GL_RESAMPLE_REPLICATE_OML         0x8986
+#define GL_RESAMPLE_ZERO_FILL_OML         0x8987
+#define GL_RESAMPLE_AVERAGE_OML           0x8988
+#define GL_RESAMPLE_DECIMATE_OML          0x8989
+#endif /* GL_OML_resample */
+
+#ifndef GL_OML_subsample
+#define GL_OML_subsample 1
+#define GL_FORMAT_SUBSAMPLE_24_24_OML     0x8982
+#define GL_FORMAT_SUBSAMPLE_244_244_OML   0x8983
+#endif /* GL_OML_subsample */
+
+#ifndef GL_PGI_misc_hints
+#define GL_PGI_misc_hints 1
+#define GL_PREFER_DOUBLEBUFFER_HINT_PGI   0x1A1F8
+#define GL_CONSERVE_MEMORY_HINT_PGI       0x1A1FD
+#define GL_RECLAIM_MEMORY_HINT_PGI        0x1A1FE
+#define GL_NATIVE_GRAPHICS_HANDLE_PGI     0x1A202
+#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203
+#define GL_NATIVE_GRAPHICS_END_HINT_PGI   0x1A204
+#define GL_ALWAYS_FAST_HINT_PGI           0x1A20C
+#define GL_ALWAYS_SOFT_HINT_PGI           0x1A20D
+#define GL_ALLOW_DRAW_OBJ_HINT_PGI        0x1A20E
+#define GL_ALLOW_DRAW_WIN_HINT_PGI        0x1A20F
+#define GL_ALLOW_DRAW_FRG_HINT_PGI        0x1A210
+#define GL_ALLOW_DRAW_MEM_HINT_PGI        0x1A211
+#define GL_STRICT_DEPTHFUNC_HINT_PGI      0x1A216
+#define GL_STRICT_LIGHTING_HINT_PGI       0x1A217
+#define GL_STRICT_SCISSOR_HINT_PGI        0x1A218
+#define GL_FULL_STIPPLE_HINT_PGI          0x1A219
+#define GL_CLIP_NEAR_HINT_PGI             0x1A220
+#define GL_CLIP_FAR_HINT_PGI              0x1A221
+#define GL_WIDE_LINE_HINT_PGI             0x1A222
+#define GL_BACK_NORMALS_HINT_PGI          0x1A223
+typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glHintPGI (GLenum target, GLint mode);
+#endif
+#endif /* GL_PGI_misc_hints */
+
+#ifndef GL_PGI_vertex_hints
+#define GL_PGI_vertex_hints 1
+#define GL_VERTEX_DATA_HINT_PGI           0x1A22A
+#define GL_VERTEX_CONSISTENT_HINT_PGI     0x1A22B
+#define GL_MATERIAL_SIDE_HINT_PGI         0x1A22C
+#define GL_MAX_VERTEX_HINT_PGI            0x1A22D
+#define GL_COLOR3_BIT_PGI                 0x00010000
+#define GL_COLOR4_BIT_PGI                 0x00020000
+#define GL_EDGEFLAG_BIT_PGI               0x00040000
+#define GL_INDEX_BIT_PGI                  0x00080000
+#define GL_MAT_AMBIENT_BIT_PGI            0x00100000
+#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000
+#define GL_MAT_DIFFUSE_BIT_PGI            0x00400000
+#define GL_MAT_EMISSION_BIT_PGI           0x00800000
+#define GL_MAT_COLOR_INDEXES_BIT_PGI      0x01000000
+#define GL_MAT_SHININESS_BIT_PGI          0x02000000
+#define GL_MAT_SPECULAR_BIT_PGI           0x04000000
+#define GL_NORMAL_BIT_PGI                 0x08000000
+#define GL_TEXCOORD1_BIT_PGI              0x10000000
+#define GL_TEXCOORD2_BIT_PGI              0x20000000
+#define GL_TEXCOORD3_BIT_PGI              0x40000000
+#define GL_TEXCOORD4_BIT_PGI              0x80000000
+#define GL_VERTEX23_BIT_PGI               0x00000004
+#define GL_VERTEX4_BIT_PGI                0x00000008
+#endif /* GL_PGI_vertex_hints */
+
+#ifndef GL_REND_screen_coordinates
+#define GL_REND_screen_coordinates 1
+#define GL_SCREEN_COORDINATES_REND        0x8490
+#define GL_INVERTED_SCREEN_W_REND         0x8491
+#endif /* GL_REND_screen_coordinates */
+
+#ifndef GL_S3_s3tc
+#define GL_S3_s3tc 1
+#define GL_RGB_S3TC                       0x83A0
+#define GL_RGB4_S3TC                      0x83A1
+#define GL_RGBA_S3TC                      0x83A2
+#define GL_RGBA4_S3TC                     0x83A3
+#define GL_RGBA_DXT5_S3TC                 0x83A4
+#define GL_RGBA4_DXT5_S3TC                0x83A5
+#endif /* GL_S3_s3tc */
+
+#ifndef GL_SGIS_detail_texture
+#define GL_SGIS_detail_texture 1
+#define GL_DETAIL_TEXTURE_2D_SGIS         0x8095
+#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096
+#define GL_LINEAR_DETAIL_SGIS             0x8097
+#define GL_LINEAR_DETAIL_ALPHA_SGIS       0x8098
+#define GL_LINEAR_DETAIL_COLOR_SGIS       0x8099
+#define GL_DETAIL_TEXTURE_LEVEL_SGIS      0x809A
+#define GL_DETAIL_TEXTURE_MODE_SGIS       0x809B
+#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C
+typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);
+typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points);
+GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points);
+#endif
+#endif /* GL_SGIS_detail_texture */
+
+#ifndef GL_SGIS_fog_function
+#define GL_SGIS_fog_function 1
+#define GL_FOG_FUNC_SGIS                  0x812A
+#define GL_FOG_FUNC_POINTS_SGIS           0x812B
+#define GL_MAX_FOG_FUNC_POINTS_SGIS       0x812C
+typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points);
+typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points);
+GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points);
+#endif
+#endif /* GL_SGIS_fog_function */
+
+#ifndef GL_SGIS_generate_mipmap
+#define GL_SGIS_generate_mipmap 1
+#define GL_GENERATE_MIPMAP_SGIS           0x8191
+#define GL_GENERATE_MIPMAP_HINT_SGIS      0x8192
+#endif /* GL_SGIS_generate_mipmap */
+
+#ifndef GL_SGIS_multisample
+#define GL_SGIS_multisample 1
+#define GL_MULTISAMPLE_SGIS               0x809D
+#define GL_SAMPLE_ALPHA_TO_MASK_SGIS      0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_SGIS       0x809F
+#define GL_SAMPLE_MASK_SGIS               0x80A0
+#define GL_1PASS_SGIS                     0x80A1
+#define GL_2PASS_0_SGIS                   0x80A2
+#define GL_2PASS_1_SGIS                   0x80A3
+#define GL_4PASS_0_SGIS                   0x80A4
+#define GL_4PASS_1_SGIS                   0x80A5
+#define GL_4PASS_2_SGIS                   0x80A6
+#define GL_4PASS_3_SGIS                   0x80A7
+#define GL_SAMPLE_BUFFERS_SGIS            0x80A8
+#define GL_SAMPLES_SGIS                   0x80A9
+#define GL_SAMPLE_MASK_VALUE_SGIS         0x80AA
+#define GL_SAMPLE_MASK_INVERT_SGIS        0x80AB
+#define GL_SAMPLE_PATTERN_SGIS            0x80AC
+typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert);
+typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert);
+GLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern);
+#endif
+#endif /* GL_SGIS_multisample */
+
+#ifndef GL_SGIS_pixel_texture
+#define GL_SGIS_pixel_texture 1
+#define GL_PIXEL_TEXTURE_SGIS             0x8353
+#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354
+#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355
+#define GL_PIXEL_GROUP_COLOR_SGIS         0x8356
+typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param);
+GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params);
+GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params);
+#endif
+#endif /* GL_SGIS_pixel_texture */
+
+#ifndef GL_SGIS_point_line_texgen
+#define GL_SGIS_point_line_texgen 1
+#define GL_EYE_DISTANCE_TO_POINT_SGIS     0x81F0
+#define GL_OBJECT_DISTANCE_TO_POINT_SGIS  0x81F1
+#define GL_EYE_DISTANCE_TO_LINE_SGIS      0x81F2
+#define GL_OBJECT_DISTANCE_TO_LINE_SGIS   0x81F3
+#define GL_EYE_POINT_SGIS                 0x81F4
+#define GL_OBJECT_POINT_SGIS              0x81F5
+#define GL_EYE_LINE_SGIS                  0x81F6
+#define GL_OBJECT_LINE_SGIS               0x81F7
+#endif /* GL_SGIS_point_line_texgen */
+
+#ifndef GL_SGIS_point_parameters
+#define GL_SGIS_point_parameters 1
+#define GL_POINT_SIZE_MIN_SGIS            0x8126
+#define GL_POINT_SIZE_MAX_SGIS            0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128
+#define GL_DISTANCE_ATTENUATION_SGIS      0x8129
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params);
+#endif
+#endif /* GL_SGIS_point_parameters */
+
+#ifndef GL_SGIS_sharpen_texture
+#define GL_SGIS_sharpen_texture 1
+#define GL_LINEAR_SHARPEN_SGIS            0x80AD
+#define GL_LINEAR_SHARPEN_ALPHA_SGIS      0x80AE
+#define GL_LINEAR_SHARPEN_COLOR_SGIS      0x80AF
+#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0
+typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);
+typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points);
+GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points);
+#endif
+#endif /* GL_SGIS_sharpen_texture */
+
+#ifndef GL_SGIS_texture4D
+#define GL_SGIS_texture4D 1
+#define GL_PACK_SKIP_VOLUMES_SGIS         0x8130
+#define GL_PACK_IMAGE_DEPTH_SGIS          0x8131
+#define GL_UNPACK_SKIP_VOLUMES_SGIS       0x8132
+#define GL_UNPACK_IMAGE_DEPTH_SGIS        0x8133
+#define GL_TEXTURE_4D_SGIS                0x8134
+#define GL_PROXY_TEXTURE_4D_SGIS          0x8135
+#define GL_TEXTURE_4DSIZE_SGIS            0x8136
+#define GL_TEXTURE_WRAP_Q_SGIS            0x8137
+#define GL_MAX_4D_TEXTURE_SIZE_SGIS       0x8138
+#define GL_TEXTURE_4D_BINDING_SGIS        0x814F
+typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels);
+typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels);
+GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels);
+#endif
+#endif /* GL_SGIS_texture4D */
+
+#ifndef GL_SGIS_texture_border_clamp
+#define GL_SGIS_texture_border_clamp 1
+#define GL_CLAMP_TO_BORDER_SGIS           0x812D
+#endif /* GL_SGIS_texture_border_clamp */
+
+#ifndef GL_SGIS_texture_color_mask
+#define GL_SGIS_texture_color_mask 1
+#define GL_TEXTURE_COLOR_WRITEMASK_SGIS   0x81EF
+typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+#endif
+#endif /* GL_SGIS_texture_color_mask */
+
+#ifndef GL_SGIS_texture_edge_clamp
+#define GL_SGIS_texture_edge_clamp 1
+#define GL_CLAMP_TO_EDGE_SGIS             0x812F
+#endif /* GL_SGIS_texture_edge_clamp */
+
+#ifndef GL_SGIS_texture_filter4
+#define GL_SGIS_texture_filter4 1
+#define GL_FILTER4_SGIS                   0x8146
+#define GL_TEXTURE_FILTER4_SIZE_SGIS      0x8147
+typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights);
+typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights);
+GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights);
+#endif
+#endif /* GL_SGIS_texture_filter4 */
+
+#ifndef GL_SGIS_texture_lod
+#define GL_SGIS_texture_lod 1
+#define GL_TEXTURE_MIN_LOD_SGIS           0x813A
+#define GL_TEXTURE_MAX_LOD_SGIS           0x813B
+#define GL_TEXTURE_BASE_LEVEL_SGIS        0x813C
+#define GL_TEXTURE_MAX_LEVEL_SGIS         0x813D
+#endif /* GL_SGIS_texture_lod */
+
+#ifndef GL_SGIS_texture_select
+#define GL_SGIS_texture_select 1
+#define GL_DUAL_ALPHA4_SGIS               0x8110
+#define GL_DUAL_ALPHA8_SGIS               0x8111
+#define GL_DUAL_ALPHA12_SGIS              0x8112
+#define GL_DUAL_ALPHA16_SGIS              0x8113
+#define GL_DUAL_LUMINANCE4_SGIS           0x8114
+#define GL_DUAL_LUMINANCE8_SGIS           0x8115
+#define GL_DUAL_LUMINANCE12_SGIS          0x8116
+#define GL_DUAL_LUMINANCE16_SGIS          0x8117
+#define GL_DUAL_INTENSITY4_SGIS           0x8118
+#define GL_DUAL_INTENSITY8_SGIS           0x8119
+#define GL_DUAL_INTENSITY12_SGIS          0x811A
+#define GL_DUAL_INTENSITY16_SGIS          0x811B
+#define GL_DUAL_LUMINANCE_ALPHA4_SGIS     0x811C
+#define GL_DUAL_LUMINANCE_ALPHA8_SGIS     0x811D
+#define GL_QUAD_ALPHA4_SGIS               0x811E
+#define GL_QUAD_ALPHA8_SGIS               0x811F
+#define GL_QUAD_LUMINANCE4_SGIS           0x8120
+#define GL_QUAD_LUMINANCE8_SGIS           0x8121
+#define GL_QUAD_INTENSITY4_SGIS           0x8122
+#define GL_QUAD_INTENSITY8_SGIS           0x8123
+#define GL_DUAL_TEXTURE_SELECT_SGIS       0x8124
+#define GL_QUAD_TEXTURE_SELECT_SGIS       0x8125
+#endif /* GL_SGIS_texture_select */
+
+#ifndef GL_SGIX_async
+#define GL_SGIX_async 1
+#define GL_ASYNC_MARKER_SGIX              0x8329
+typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker);
+typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp);
+typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp);
+typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range);
+typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range);
+typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker);
+GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp);
+GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp);
+GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range);
+GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range);
+GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker);
+#endif
+#endif /* GL_SGIX_async */
+
+#ifndef GL_SGIX_async_histogram
+#define GL_SGIX_async_histogram 1
+#define GL_ASYNC_HISTOGRAM_SGIX           0x832C
+#define GL_MAX_ASYNC_HISTOGRAM_SGIX       0x832D
+#endif /* GL_SGIX_async_histogram */
+
+#ifndef GL_SGIX_async_pixel
+#define GL_SGIX_async_pixel 1
+#define GL_ASYNC_TEX_IMAGE_SGIX           0x835C
+#define GL_ASYNC_DRAW_PIXELS_SGIX         0x835D
+#define GL_ASYNC_READ_PIXELS_SGIX         0x835E
+#define GL_MAX_ASYNC_TEX_IMAGE_SGIX       0x835F
+#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX     0x8360
+#define GL_MAX_ASYNC_READ_PIXELS_SGIX     0x8361
+#endif /* GL_SGIX_async_pixel */
+
+#ifndef GL_SGIX_blend_alpha_minmax
+#define GL_SGIX_blend_alpha_minmax 1
+#define GL_ALPHA_MIN_SGIX                 0x8320
+#define GL_ALPHA_MAX_SGIX                 0x8321
+#endif /* GL_SGIX_blend_alpha_minmax */
+
+#ifndef GL_SGIX_calligraphic_fragment
+#define GL_SGIX_calligraphic_fragment 1
+#define GL_CALLIGRAPHIC_FRAGMENT_SGIX     0x8183
+#endif /* GL_SGIX_calligraphic_fragment */
+
+#ifndef GL_SGIX_clipmap
+#define GL_SGIX_clipmap 1
+#define GL_LINEAR_CLIPMAP_LINEAR_SGIX     0x8170
+#define GL_TEXTURE_CLIPMAP_CENTER_SGIX    0x8171
+#define GL_TEXTURE_CLIPMAP_FRAME_SGIX     0x8172
+#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX    0x8173
+#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174
+#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175
+#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX     0x8176
+#define GL_MAX_CLIPMAP_DEPTH_SGIX         0x8177
+#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178
+#define GL_NEAREST_CLIPMAP_NEAREST_SGIX   0x844D
+#define GL_NEAREST_CLIPMAP_LINEAR_SGIX    0x844E
+#define GL_LINEAR_CLIPMAP_NEAREST_SGIX    0x844F
+#endif /* GL_SGIX_clipmap */
+
+#ifndef GL_SGIX_convolution_accuracy
+#define GL_SGIX_convolution_accuracy 1
+#define GL_CONVOLUTION_HINT_SGIX          0x8316
+#endif /* GL_SGIX_convolution_accuracy */
+
+#ifndef GL_SGIX_depth_pass_instrument
+#define GL_SGIX_depth_pass_instrument 1
+#endif /* GL_SGIX_depth_pass_instrument */
+
+#ifndef GL_SGIX_depth_texture
+#define GL_SGIX_depth_texture 1
+#define GL_DEPTH_COMPONENT16_SGIX         0x81A5
+#define GL_DEPTH_COMPONENT24_SGIX         0x81A6
+#define GL_DEPTH_COMPONENT32_SGIX         0x81A7
+#endif /* GL_SGIX_depth_texture */
+
+#ifndef GL_SGIX_flush_raster
+#define GL_SGIX_flush_raster 1
+typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFlushRasterSGIX (void);
+#endif
+#endif /* GL_SGIX_flush_raster */
+
+#ifndef GL_SGIX_fog_offset
+#define GL_SGIX_fog_offset 1
+#define GL_FOG_OFFSET_SGIX                0x8198
+#define GL_FOG_OFFSET_VALUE_SGIX          0x8199
+#endif /* GL_SGIX_fog_offset */
+
+#ifndef GL_SGIX_fragment_lighting
+#define GL_SGIX_fragment_lighting 1
+#define GL_FRAGMENT_LIGHTING_SGIX         0x8400
+#define GL_FRAGMENT_COLOR_MATERIAL_SGIX   0x8401
+#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402
+#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403
+#define GL_MAX_FRAGMENT_LIGHTS_SGIX       0x8404
+#define GL_MAX_ACTIVE_LIGHTS_SGIX         0x8405
+#define GL_CURRENT_RASTER_NORMAL_SGIX     0x8406
+#define GL_LIGHT_ENV_MODE_SGIX            0x8407
+#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408
+#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409
+#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A
+#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B
+#define GL_FRAGMENT_LIGHT0_SGIX           0x840C
+#define GL_FRAGMENT_LIGHT1_SGIX           0x840D
+#define GL_FRAGMENT_LIGHT2_SGIX           0x840E
+#define GL_FRAGMENT_LIGHT3_SGIX           0x840F
+#define GL_FRAGMENT_LIGHT4_SGIX           0x8410
+#define GL_FRAGMENT_LIGHT5_SGIX           0x8411
+#define GL_FRAGMENT_LIGHT6_SGIX           0x8412
+#define GL_FRAGMENT_LIGHT7_SGIX           0x8413
+typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode);
+GLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param);
+GLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param);
+GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params);
+GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param);
+GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params);
+GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params);
+GLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param);
+#endif
+#endif /* GL_SGIX_fragment_lighting */
+
+#ifndef GL_SGIX_framezoom
+#define GL_SGIX_framezoom 1
+#define GL_FRAMEZOOM_SGIX                 0x818B
+#define GL_FRAMEZOOM_FACTOR_SGIX          0x818C
+#define GL_MAX_FRAMEZOOM_FACTOR_SGIX      0x818D
+typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFrameZoomSGIX (GLint factor);
+#endif
+#endif /* GL_SGIX_framezoom */
+
+#ifndef GL_SGIX_igloo_interface
+#define GL_SGIX_igloo_interface 1
+typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const void *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const void *params);
+#endif
+#endif /* GL_SGIX_igloo_interface */
+
+#ifndef GL_SGIX_instruments
+#define GL_SGIX_instruments 1
+#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180
+#define GL_INSTRUMENT_MEASUREMENTS_SGIX   0x8181
+typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void);
+typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer);
+typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p);
+typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker);
+typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void);
+typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLint APIENTRY glGetInstrumentsSGIX (void);
+GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer);
+GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p);
+GLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker);
+GLAPI void APIENTRY glStartInstrumentsSGIX (void);
+GLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker);
+#endif
+#endif /* GL_SGIX_instruments */
+
+#ifndef GL_SGIX_interlace
+#define GL_SGIX_interlace 1
+#define GL_INTERLACE_SGIX                 0x8094
+#endif /* GL_SGIX_interlace */
+
+#ifndef GL_SGIX_ir_instrument1
+#define GL_SGIX_ir_instrument1 1
+#define GL_IR_INSTRUMENT1_SGIX            0x817F
+#endif /* GL_SGIX_ir_instrument1 */
+
+#ifndef GL_SGIX_list_priority
+#define GL_SGIX_list_priority 1
+#define GL_LIST_PRIORITY_SGIX             0x8182
+typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params);
+typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params);
+GLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param);
+GLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param);
+GLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params);
+#endif
+#endif /* GL_SGIX_list_priority */
+
+#ifndef GL_SGIX_pixel_texture
+#define GL_SGIX_pixel_texture 1
+#define GL_PIXEL_TEX_GEN_SGIX             0x8139
+#define GL_PIXEL_TEX_GEN_MODE_SGIX        0x832B
+typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode);
+#endif
+#endif /* GL_SGIX_pixel_texture */
+
+#ifndef GL_SGIX_pixel_tiles
+#define GL_SGIX_pixel_tiles 1
+#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
+#endif /* GL_SGIX_pixel_tiles */
+
+#ifndef GL_SGIX_polynomial_ffd
+#define GL_SGIX_polynomial_ffd 1
+#define GL_TEXTURE_DEFORMATION_BIT_SGIX   0x00000001
+#define GL_GEOMETRY_DEFORMATION_BIT_SGIX  0x00000002
+#define GL_GEOMETRY_DEFORMATION_SGIX      0x8194
+#define GL_TEXTURE_DEFORMATION_SGIX       0x8195
+#define GL_DEFORMATIONS_MASK_SGIX         0x8196
+#define GL_MAX_DEFORMATION_ORDER_SGIX     0x8197
+typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points);
+typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points);
+typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask);
+typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points);
+GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points);
+GLAPI void APIENTRY glDeformSGIX (GLbitfield mask);
+GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask);
+#endif
+#endif /* GL_SGIX_polynomial_ffd */
+
+#ifndef GL_SGIX_reference_plane
+#define GL_SGIX_reference_plane 1
+#define GL_REFERENCE_PLANE_SGIX           0x817D
+#define GL_REFERENCE_PLANE_EQUATION_SGIX  0x817E
+typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation);
+#endif
+#endif /* GL_SGIX_reference_plane */
+
+#ifndef GL_SGIX_resample
+#define GL_SGIX_resample 1
+#define GL_PACK_RESAMPLE_SGIX             0x842C
+#define GL_UNPACK_RESAMPLE_SGIX           0x842D
+#define GL_RESAMPLE_REPLICATE_SGIX        0x842E
+#define GL_RESAMPLE_ZERO_FILL_SGIX        0x842F
+#define GL_RESAMPLE_DECIMATE_SGIX         0x8430
+#endif /* GL_SGIX_resample */
+
+#ifndef GL_SGIX_scalebias_hint
+#define GL_SGIX_scalebias_hint 1
+#define GL_SCALEBIAS_HINT_SGIX            0x8322
+#endif /* GL_SGIX_scalebias_hint */
+
+#ifndef GL_SGIX_shadow
+#define GL_SGIX_shadow 1
+#define GL_TEXTURE_COMPARE_SGIX           0x819A
+#define GL_TEXTURE_COMPARE_OPERATOR_SGIX  0x819B
+#define GL_TEXTURE_LEQUAL_R_SGIX          0x819C
+#define GL_TEXTURE_GEQUAL_R_SGIX          0x819D
+#endif /* GL_SGIX_shadow */
+
+#ifndef GL_SGIX_shadow_ambient
+#define GL_SGIX_shadow_ambient 1
+#define GL_SHADOW_AMBIENT_SGIX            0x80BF
+#endif /* GL_SGIX_shadow_ambient */
+
+#ifndef GL_SGIX_sprite
+#define GL_SGIX_sprite 1
+#define GL_SPRITE_SGIX                    0x8148
+#define GL_SPRITE_MODE_SGIX               0x8149
+#define GL_SPRITE_AXIS_SGIX               0x814A
+#define GL_SPRITE_TRANSLATION_SGIX        0x814B
+#define GL_SPRITE_AXIAL_SGIX              0x814C
+#define GL_SPRITE_OBJECT_ALIGNED_SGIX     0x814D
+#define GL_SPRITE_EYE_ALIGNED_SGIX        0x814E
+typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param);
+typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param);
+GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param);
+GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params);
+#endif
+#endif /* GL_SGIX_sprite */
+
+#ifndef GL_SGIX_subsample
+#define GL_SGIX_subsample 1
+#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
+#endif /* GL_SGIX_subsample */
+
+#ifndef GL_SGIX_tag_sample_buffer
+#define GL_SGIX_tag_sample_buffer 1
+typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTagSampleBufferSGIX (void);
+#endif
+#endif /* GL_SGIX_tag_sample_buffer */
+
+#ifndef GL_SGIX_texture_add_env
+#define GL_SGIX_texture_add_env 1
+#define GL_TEXTURE_ENV_BIAS_SGIX          0x80BE
+#endif /* GL_SGIX_texture_add_env */
+
+#ifndef GL_SGIX_texture_coordinate_clamp
+#define GL_SGIX_texture_coordinate_clamp 1
+#define GL_TEXTURE_MAX_CLAMP_S_SGIX       0x8369
+#define GL_TEXTURE_MAX_CLAMP_T_SGIX       0x836A
+#define GL_TEXTURE_MAX_CLAMP_R_SGIX       0x836B
+#endif /* GL_SGIX_texture_coordinate_clamp */
+
+#ifndef GL_SGIX_texture_lod_bias
+#define GL_SGIX_texture_lod_bias 1
+#define GL_TEXTURE_LOD_BIAS_S_SGIX        0x818E
+#define GL_TEXTURE_LOD_BIAS_T_SGIX        0x818F
+#define GL_TEXTURE_LOD_BIAS_R_SGIX        0x8190
+#endif /* GL_SGIX_texture_lod_bias */
+
+#ifndef GL_SGIX_texture_multi_buffer
+#define GL_SGIX_texture_multi_buffer 1
+#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E
+#endif /* GL_SGIX_texture_multi_buffer */
+
+#ifndef GL_SGIX_texture_scale_bias
+#define GL_SGIX_texture_scale_bias 1
+#define GL_POST_TEXTURE_FILTER_BIAS_SGIX  0x8179
+#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A
+#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B
+#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C
+#endif /* GL_SGIX_texture_scale_bias */
+
+#ifndef GL_SGIX_vertex_preclip
+#define GL_SGIX_vertex_preclip 1
+#define GL_VERTEX_PRECLIP_SGIX            0x83EE
+#define GL_VERTEX_PRECLIP_HINT_SGIX       0x83EF
+#endif /* GL_SGIX_vertex_preclip */
+
+#ifndef GL_SGIX_ycrcb
+#define GL_SGIX_ycrcb 1
+#define GL_YCRCB_422_SGIX                 0x81BB
+#define GL_YCRCB_444_SGIX                 0x81BC
+#endif /* GL_SGIX_ycrcb */
+
+#ifndef GL_SGIX_ycrcb_subsample
+#define GL_SGIX_ycrcb_subsample 1
+#endif /* GL_SGIX_ycrcb_subsample */
+
+#ifndef GL_SGIX_ycrcba
+#define GL_SGIX_ycrcba 1
+#define GL_YCRCB_SGIX                     0x8318
+#define GL_YCRCBA_SGIX                    0x8319
+#endif /* GL_SGIX_ycrcba */
+
+#ifndef GL_SGI_color_matrix
+#define GL_SGI_color_matrix 1
+#define GL_COLOR_MATRIX_SGI               0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH_SGI   0x80B2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3
+#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7
+#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB
+#endif /* GL_SGI_color_matrix */
+
+#ifndef GL_SGI_color_table
+#define GL_SGI_color_table 1
+#define GL_COLOR_TABLE_SGI                0x80D0
+#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2
+#define GL_PROXY_COLOR_TABLE_SGI          0x80D3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5
+#define GL_COLOR_TABLE_SCALE_SGI          0x80D6
+#define GL_COLOR_TABLE_BIAS_SGI           0x80D7
+#define GL_COLOR_TABLE_FORMAT_SGI         0x80D8
+#define GL_COLOR_TABLE_WIDTH_SGI          0x80D9
+#define GL_COLOR_TABLE_RED_SIZE_SGI       0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE_SGI     0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE_SGI      0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE_SGI     0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF
+typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table);
+typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, void *table);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table);
+GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+GLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, void *table);
+GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params);
+#endif
+#endif /* GL_SGI_color_table */
+
+#ifndef GL_SGI_texture_color_table
+#define GL_SGI_texture_color_table 1
+#define GL_TEXTURE_COLOR_TABLE_SGI        0x80BC
+#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI  0x80BD
+#endif /* GL_SGI_texture_color_table */
+
+#ifndef GL_SUNX_constant_data
+#define GL_SUNX_constant_data 1
+#define GL_UNPACK_CONSTANT_DATA_SUNX      0x81D5
+#define GL_TEXTURE_CONSTANT_DATA_SUNX     0x81D6
+typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFinishTextureSUNX (void);
+#endif
+#endif /* GL_SUNX_constant_data */
+
+#ifndef GL_SUN_convolution_border_modes
+#define GL_SUN_convolution_border_modes 1
+#define GL_WRAP_BORDER_SUN                0x81D4
+#endif /* GL_SUN_convolution_border_modes */
+
+#ifndef GL_SUN_global_alpha
+#define GL_SUN_global_alpha 1
+#define GL_GLOBAL_ALPHA_SUN               0x81D9
+#define GL_GLOBAL_ALPHA_FACTOR_SUN        0x81DA
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor);
+typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor);
+GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor);
+GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor);
+GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor);
+GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor);
+GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor);
+GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor);
+GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor);
+#endif
+#endif /* GL_SUN_global_alpha */
+
+#ifndef GL_SUN_mesh_array
+#define GL_SUN_mesh_array 1
+#define GL_QUAD_MESH_SUN                  0x8614
+#define GL_TRIANGLE_MESH_SUN              0x8615
+typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width);
+#endif
+#endif /* GL_SUN_mesh_array */
+
+#ifndef GL_SUN_slice_accum
+#define GL_SUN_slice_accum 1
+#define GL_SLICE_ACCUM_SUN                0x85CC
+#endif /* GL_SUN_slice_accum */
+
+#ifndef GL_SUN_triangle_list
+#define GL_SUN_triangle_list 1
+#define GL_RESTART_SUN                    0x0001
+#define GL_REPLACE_MIDDLE_SUN             0x0002
+#define GL_REPLACE_OLDEST_SUN             0x0003
+#define GL_TRIANGLE_LIST_SUN              0x81D7
+#define GL_REPLACEMENT_CODE_SUN           0x81D8
+#define GL_REPLACEMENT_CODE_ARRAY_SUN     0x85C0
+#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1
+#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2
+#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3
+#define GL_R1UI_V3F_SUN                   0x85C4
+#define GL_R1UI_C4UB_V3F_SUN              0x85C5
+#define GL_R1UI_C3F_V3F_SUN               0x85C6
+#define GL_R1UI_N3F_V3F_SUN               0x85C7
+#define GL_R1UI_C4F_N3F_V3F_SUN           0x85C8
+#define GL_R1UI_T2F_V3F_SUN               0x85C9
+#define GL_R1UI_T2F_N3F_V3F_SUN           0x85CA
+#define GL_R1UI_T2F_C4F_N3F_V3F_SUN       0x85CB
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const void **pointer);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code);
+GLAPI void APIENTRY glReplacementCodeusSUN (GLushort code);
+GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code);
+GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code);
+GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code);
+GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code);
+GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const void **pointer);
+#endif
+#endif /* GL_SUN_triangle_list */
+
+#ifndef GL_SUN_vertex
+#define GL_SUN_vertex 1
+typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y);
+typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y);
+GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v);
+GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v);
+GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v);
+GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+#endif
+#endif /* GL_SUN_vertex */
+
+#ifndef GL_WIN_phong_shading
+#define GL_WIN_phong_shading 1
+#define GL_PHONG_WIN                      0x80EA
+#define GL_PHONG_HINT_WIN                 0x80EB
+#endif /* GL_WIN_phong_shading */
+
+#ifndef GL_WIN_specular_fog
+#define GL_WIN_specular_fog 1
+#define GL_FOG_SPECULAR_TEXTURE_WIN       0x80EC
+#endif /* GL_WIN_specular_fog */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/third_party/khronos/noninclude/GL/glxext.h b/third_party/khronos/noninclude/GL/glxext.h
new file mode 100644
index 0000000..e640ff7
--- /dev/null
+++ b/third_party/khronos/noninclude/GL/glxext.h
@@ -0,0 +1,1001 @@
+#ifndef __glxext_h_
+#define __glxext_h_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright (c) 2007-2012 The Khronos Group Inc.
+** 
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are 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 Materials.
+** 
+** THE MATERIALS ARE 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
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+/* Function declaration macros - to move into glplatform.h */
+
+#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
+#define WIN32_LEAN_AND_MEAN 1
+#include <windows.h>
+#endif
+
+#ifndef APIENTRY
+#define APIENTRY
+#endif
+#ifndef APIENTRYP
+#define APIENTRYP APIENTRY *
+#endif
+#ifndef GLAPI
+#define GLAPI extern
+#endif
+
+/*************************************************************/
+
+/* Header file version number, required by OpenGL ABI for Linux */
+/* glxext.h last updated 2012/02/29 */
+/* Current version at http://www.opengl.org/registry/ */
+#define GLX_GLXEXT_VERSION 33
+
+#ifndef GLX_VERSION_1_3
+#define GLX_WINDOW_BIT                     0x00000001
+#define GLX_PIXMAP_BIT                     0x00000002
+#define GLX_PBUFFER_BIT                    0x00000004
+#define GLX_RGBA_BIT                       0x00000001
+#define GLX_COLOR_INDEX_BIT                0x00000002
+#define GLX_PBUFFER_CLOBBER_MASK           0x08000000
+#define GLX_FRONT_LEFT_BUFFER_BIT          0x00000001
+#define GLX_FRONT_RIGHT_BUFFER_BIT         0x00000002
+#define GLX_BACK_LEFT_BUFFER_BIT           0x00000004
+#define GLX_BACK_RIGHT_BUFFER_BIT          0x00000008
+#define GLX_AUX_BUFFERS_BIT                0x00000010
+#define GLX_DEPTH_BUFFER_BIT               0x00000020
+#define GLX_STENCIL_BUFFER_BIT             0x00000040
+#define GLX_ACCUM_BUFFER_BIT               0x00000080
+#define GLX_CONFIG_CAVEAT                  0x20
+#define GLX_X_VISUAL_TYPE                  0x22
+#define GLX_TRANSPARENT_TYPE               0x23
+#define GLX_TRANSPARENT_INDEX_VALUE        0x24
+#define GLX_TRANSPARENT_RED_VALUE          0x25
+#define GLX_TRANSPARENT_GREEN_VALUE        0x26
+#define GLX_TRANSPARENT_BLUE_VALUE         0x27
+#define GLX_TRANSPARENT_ALPHA_VALUE        0x28
+#define GLX_DONT_CARE                      0xFFFFFFFF
+#define GLX_NONE                           0x8000
+#define GLX_SLOW_CONFIG                    0x8001
+#define GLX_TRUE_COLOR                     0x8002
+#define GLX_DIRECT_COLOR                   0x8003
+#define GLX_PSEUDO_COLOR                   0x8004
+#define GLX_STATIC_COLOR                   0x8005
+#define GLX_GRAY_SCALE                     0x8006
+#define GLX_STATIC_GRAY                    0x8007
+#define GLX_TRANSPARENT_RGB                0x8008
+#define GLX_TRANSPARENT_INDEX              0x8009
+#define GLX_VISUAL_ID                      0x800B
+#define GLX_SCREEN                         0x800C
+#define GLX_NON_CONFORMANT_CONFIG          0x800D
+#define GLX_DRAWABLE_TYPE                  0x8010
+#define GLX_RENDER_TYPE                    0x8011
+#define GLX_X_RENDERABLE                   0x8012
+#define GLX_FBCONFIG_ID                    0x8013
+#define GLX_RGBA_TYPE                      0x8014
+#define GLX_COLOR_INDEX_TYPE               0x8015
+#define GLX_MAX_PBUFFER_WIDTH              0x8016
+#define GLX_MAX_PBUFFER_HEIGHT             0x8017
+#define GLX_MAX_PBUFFER_PIXELS             0x8018
+#define GLX_PRESERVED_CONTENTS             0x801B
+#define GLX_LARGEST_PBUFFER                0x801C
+#define GLX_WIDTH                          0x801D
+#define GLX_HEIGHT                         0x801E
+#define GLX_EVENT_MASK                     0x801F
+#define GLX_DAMAGED                        0x8020
+#define GLX_SAVED                          0x8021
+#define GLX_WINDOW                         0x8022
+#define GLX_PBUFFER                        0x8023
+#define GLX_PBUFFER_HEIGHT                 0x8040
+#define GLX_PBUFFER_WIDTH                  0x8041
+#endif
+
+#ifndef GLX_VERSION_1_4
+#define GLX_SAMPLE_BUFFERS                 100000
+#define GLX_SAMPLES                        100001
+#endif
+
+#ifndef GLX_ARB_get_proc_address
+#endif
+
+#ifndef GLX_ARB_multisample
+#define GLX_SAMPLE_BUFFERS_ARB             100000
+#define GLX_SAMPLES_ARB                    100001
+#endif
+
+#ifndef GLX_ARB_vertex_buffer_object
+#define GLX_CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB 0x2095
+#endif
+
+#ifndef GLX_ARB_fbconfig_float
+#define GLX_RGBA_FLOAT_TYPE_ARB            0x20B9
+#define GLX_RGBA_FLOAT_BIT_ARB             0x00000004
+#endif
+
+#ifndef GLX_ARB_framebuffer_sRGB
+#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB   0x20B2
+#endif
+
+#ifndef GLX_ARB_create_context
+#define GLX_CONTEXT_DEBUG_BIT_ARB          0x00000001
+#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002
+#define GLX_CONTEXT_MAJOR_VERSION_ARB      0x2091
+#define GLX_CONTEXT_MINOR_VERSION_ARB      0x2092
+#define GLX_CONTEXT_FLAGS_ARB              0x2094
+#endif
+
+#ifndef GLX_ARB_create_context_profile
+#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB   0x00000001
+#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
+#define GLX_CONTEXT_PROFILE_MASK_ARB       0x9126
+#endif
+
+#ifndef GLX_ARB_create_context_robustness
+#define GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB  0x00000004
+#define GLX_LOSE_CONTEXT_ON_RESET_ARB      0x8252
+#define GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
+#define GLX_NO_RESET_NOTIFICATION_ARB      0x8261
+#endif
+
+#ifndef GLX_SGIS_multisample
+#define GLX_SAMPLE_BUFFERS_SGIS            100000
+#define GLX_SAMPLES_SGIS                   100001
+#endif
+
+#ifndef GLX_EXT_visual_info
+#define GLX_X_VISUAL_TYPE_EXT              0x22
+#define GLX_TRANSPARENT_TYPE_EXT           0x23
+#define GLX_TRANSPARENT_INDEX_VALUE_EXT    0x24
+#define GLX_TRANSPARENT_RED_VALUE_EXT      0x25
+#define GLX_TRANSPARENT_GREEN_VALUE_EXT    0x26
+#define GLX_TRANSPARENT_BLUE_VALUE_EXT     0x27
+#define GLX_TRANSPARENT_ALPHA_VALUE_EXT    0x28
+#define GLX_NONE_EXT                       0x8000
+#define GLX_TRUE_COLOR_EXT                 0x8002
+#define GLX_DIRECT_COLOR_EXT               0x8003
+#define GLX_PSEUDO_COLOR_EXT               0x8004
+#define GLX_STATIC_COLOR_EXT               0x8005
+#define GLX_GRAY_SCALE_EXT                 0x8006
+#define GLX_STATIC_GRAY_EXT                0x8007
+#define GLX_TRANSPARENT_RGB_EXT            0x8008
+#define GLX_TRANSPARENT_INDEX_EXT          0x8009
+#endif
+
+#ifndef GLX_SGI_swap_control
+#endif
+
+#ifndef GLX_SGI_video_sync
+#endif
+
+#ifndef GLX_SGI_make_current_read
+#endif
+
+#ifndef GLX_SGIX_video_source
+#endif
+
+#ifndef GLX_EXT_visual_rating
+#define GLX_VISUAL_CAVEAT_EXT              0x20
+#define GLX_SLOW_VISUAL_EXT                0x8001
+#define GLX_NON_CONFORMANT_VISUAL_EXT      0x800D
+/* reuse GLX_NONE_EXT */
+#endif
+
+#ifndef GLX_EXT_import_context
+#define GLX_SHARE_CONTEXT_EXT              0x800A
+#define GLX_VISUAL_ID_EXT                  0x800B
+#define GLX_SCREEN_EXT                     0x800C
+#endif
+
+#ifndef GLX_SGIX_fbconfig
+#define GLX_WINDOW_BIT_SGIX                0x00000001
+#define GLX_PIXMAP_BIT_SGIX                0x00000002
+#define GLX_RGBA_BIT_SGIX                  0x00000001
+#define GLX_COLOR_INDEX_BIT_SGIX           0x00000002
+#define GLX_DRAWABLE_TYPE_SGIX             0x8010
+#define GLX_RENDER_TYPE_SGIX               0x8011
+#define GLX_X_RENDERABLE_SGIX              0x8012
+#define GLX_FBCONFIG_ID_SGIX               0x8013
+#define GLX_RGBA_TYPE_SGIX                 0x8014
+#define GLX_COLOR_INDEX_TYPE_SGIX          0x8015
+/* reuse GLX_SCREEN_EXT */
+#endif
+
+#ifndef GLX_SGIX_pbuffer
+#define GLX_PBUFFER_BIT_SGIX               0x00000004
+#define GLX_BUFFER_CLOBBER_MASK_SGIX       0x08000000
+#define GLX_FRONT_LEFT_BUFFER_BIT_SGIX     0x00000001
+#define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX    0x00000002
+#define GLX_BACK_LEFT_BUFFER_BIT_SGIX      0x00000004
+#define GLX_BACK_RIGHT_BUFFER_BIT_SGIX     0x00000008
+#define GLX_AUX_BUFFERS_BIT_SGIX           0x00000010
+#define GLX_DEPTH_BUFFER_BIT_SGIX          0x00000020
+#define GLX_STENCIL_BUFFER_BIT_SGIX        0x00000040
+#define GLX_ACCUM_BUFFER_BIT_SGIX          0x00000080
+#define GLX_SAMPLE_BUFFERS_BIT_SGIX        0x00000100
+#define GLX_MAX_PBUFFER_WIDTH_SGIX         0x8016
+#define GLX_MAX_PBUFFER_HEIGHT_SGIX        0x8017
+#define GLX_MAX_PBUFFER_PIXELS_SGIX        0x8018
+#define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX     0x8019
+#define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX    0x801A
+#define GLX_PRESERVED_CONTENTS_SGIX        0x801B
+#define GLX_LARGEST_PBUFFER_SGIX           0x801C
+#define GLX_WIDTH_SGIX                     0x801D
+#define GLX_HEIGHT_SGIX                    0x801E
+#define GLX_EVENT_MASK_SGIX                0x801F
+#define GLX_DAMAGED_SGIX                   0x8020
+#define GLX_SAVED_SGIX                     0x8021
+#define GLX_WINDOW_SGIX                    0x8022
+#define GLX_PBUFFER_SGIX                   0x8023
+#endif
+
+#ifndef GLX_SGI_cushion
+#endif
+
+#ifndef GLX_SGIX_video_resize
+#define GLX_SYNC_FRAME_SGIX                0x00000000
+#define GLX_SYNC_SWAP_SGIX                 0x00000001
+#endif
+
+#ifndef GLX_SGIX_dmbuffer
+#define GLX_DIGITAL_MEDIA_PBUFFER_SGIX     0x8024
+#endif
+
+#ifndef GLX_SGIX_swap_group
+#endif
+
+#ifndef GLX_SGIX_swap_barrier
+#endif
+
+#ifndef GLX_SGIS_blended_overlay
+#define GLX_BLENDED_RGBA_SGIS              0x8025
+#endif
+
+#ifndef GLX_SGIS_shared_multisample
+#define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026
+#define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027
+#endif
+
+#ifndef GLX_SUN_get_transparent_index
+#endif
+
+#ifndef GLX_3DFX_multisample
+#define GLX_SAMPLE_BUFFERS_3DFX            0x8050
+#define GLX_SAMPLES_3DFX                   0x8051
+#endif
+
+#ifndef GLX_MESA_copy_sub_buffer
+#endif
+
+#ifndef GLX_MESA_pixmap_colormap
+#endif
+
+#ifndef GLX_MESA_release_buffers
+#endif
+
+#ifndef GLX_MESA_set_3dfx_mode
+#define GLX_3DFX_WINDOW_MODE_MESA          0x1
+#define GLX_3DFX_FULLSCREEN_MODE_MESA      0x2
+#endif
+
+#ifndef GLX_SGIX_visual_select_group
+#define GLX_VISUAL_SELECT_GROUP_SGIX       0x8028
+#endif
+
+#ifndef GLX_OML_swap_method
+#define GLX_SWAP_METHOD_OML                0x8060
+#define GLX_SWAP_EXCHANGE_OML              0x8061
+#define GLX_SWAP_COPY_OML                  0x8062
+#define GLX_SWAP_UNDEFINED_OML             0x8063
+#endif
+
+#ifndef GLX_OML_sync_control
+#endif
+
+#ifndef GLX_NV_float_buffer
+#define GLX_FLOAT_COMPONENTS_NV            0x20B0
+#endif
+
+#ifndef GLX_SGIX_hyperpipe
+#define GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80
+#define GLX_BAD_HYPERPIPE_CONFIG_SGIX      91
+#define GLX_BAD_HYPERPIPE_SGIX             92
+#define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX    0x00000001
+#define GLX_HYPERPIPE_RENDER_PIPE_SGIX     0x00000002
+#define GLX_PIPE_RECT_SGIX                 0x00000001
+#define GLX_PIPE_RECT_LIMITS_SGIX          0x00000002
+#define GLX_HYPERPIPE_STEREO_SGIX          0x00000003
+#define GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX   0x00000004
+#define GLX_HYPERPIPE_ID_SGIX              0x8030
+#endif
+
+#ifndef GLX_MESA_agp_offset
+#endif
+
+#ifndef GLX_EXT_fbconfig_packed_float
+#define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT   0x20B1
+#define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT    0x00000008
+#endif
+
+#ifndef GLX_EXT_framebuffer_sRGB
+#define GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT   0x20B2
+#endif
+
+#ifndef GLX_EXT_texture_from_pixmap
+#define GLX_TEXTURE_1D_BIT_EXT             0x00000001
+#define GLX_TEXTURE_2D_BIT_EXT             0x00000002
+#define GLX_TEXTURE_RECTANGLE_BIT_EXT      0x00000004
+#define GLX_BIND_TO_TEXTURE_RGB_EXT        0x20D0
+#define GLX_BIND_TO_TEXTURE_RGBA_EXT       0x20D1
+#define GLX_BIND_TO_MIPMAP_TEXTURE_EXT     0x20D2
+#define GLX_BIND_TO_TEXTURE_TARGETS_EXT    0x20D3
+#define GLX_Y_INVERTED_EXT                 0x20D4
+#define GLX_TEXTURE_FORMAT_EXT             0x20D5
+#define GLX_TEXTURE_TARGET_EXT             0x20D6
+#define GLX_MIPMAP_TEXTURE_EXT             0x20D7
+#define GLX_TEXTURE_FORMAT_NONE_EXT        0x20D8
+#define GLX_TEXTURE_FORMAT_RGB_EXT         0x20D9
+#define GLX_TEXTURE_FORMAT_RGBA_EXT        0x20DA
+#define GLX_TEXTURE_1D_EXT                 0x20DB
+#define GLX_TEXTURE_2D_EXT                 0x20DC
+#define GLX_TEXTURE_RECTANGLE_EXT          0x20DD
+#define GLX_FRONT_LEFT_EXT                 0x20DE
+#define GLX_FRONT_RIGHT_EXT                0x20DF
+#define GLX_BACK_LEFT_EXT                  0x20E0
+#define GLX_BACK_RIGHT_EXT                 0x20E1
+#define GLX_FRONT_EXT                      GLX_FRONT_LEFT_EXT
+#define GLX_BACK_EXT                       GLX_BACK_LEFT_EXT
+#define GLX_AUX0_EXT                       0x20E2
+#define GLX_AUX1_EXT                       0x20E3
+#define GLX_AUX2_EXT                       0x20E4
+#define GLX_AUX3_EXT                       0x20E5
+#define GLX_AUX4_EXT                       0x20E6
+#define GLX_AUX5_EXT                       0x20E7
+#define GLX_AUX6_EXT                       0x20E8
+#define GLX_AUX7_EXT                       0x20E9
+#define GLX_AUX8_EXT                       0x20EA
+#define GLX_AUX9_EXT                       0x20EB
+#endif
+
+#ifndef GLX_NV_present_video
+#define GLX_NUM_VIDEO_SLOTS_NV             0x20F0
+#endif
+
+#ifndef GLX_NV_video_out
+#define GLX_VIDEO_OUT_COLOR_NV             0x20C3
+#define GLX_VIDEO_OUT_ALPHA_NV             0x20C4
+#define GLX_VIDEO_OUT_DEPTH_NV             0x20C5
+#define GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV   0x20C6
+#define GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV   0x20C7
+#define GLX_VIDEO_OUT_FRAME_NV             0x20C8
+#define GLX_VIDEO_OUT_FIELD_1_NV           0x20C9
+#define GLX_VIDEO_OUT_FIELD_2_NV           0x20CA
+#define GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB
+#define GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC
+#endif
+
+#ifndef GLX_NV_swap_group
+#endif
+
+#ifndef GLX_NV_video_capture
+#define GLX_DEVICE_ID_NV                   0x20CD
+#define GLX_UNIQUE_ID_NV                   0x20CE
+#define GLX_NUM_VIDEO_CAPTURE_SLOTS_NV     0x20CF
+#endif
+
+#ifndef GLX_EXT_swap_control
+#define GLX_SWAP_INTERVAL_EXT              0x20F1
+#define GLX_MAX_SWAP_INTERVAL_EXT          0x20F2
+#endif
+
+#ifndef GLX_NV_copy_image
+#endif
+
+#ifndef GLX_INTEL_swap_event
+#define GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK 0x04000000
+#define GLX_EXCHANGE_COMPLETE_INTEL        0x8180
+#define GLX_COPY_COMPLETE_INTEL            0x8181
+#define GLX_FLIP_COMPLETE_INTEL            0x8182
+#endif
+
+#ifndef GLX_NV_multisample_coverage
+#define GLX_COVERAGE_SAMPLES_NV            100001
+#define GLX_COLOR_SAMPLES_NV               0x20B3
+#endif
+
+#ifndef GLX_AMD_gpu_association
+#define GLX_GPU_VENDOR_AMD                 0x1F00
+#define GLX_GPU_RENDERER_STRING_AMD        0x1F01
+#define GLX_GPU_OPENGL_VERSION_STRING_AMD  0x1F02
+#define GLX_GPU_FASTEST_TARGET_GPUS_AMD    0x21A2
+#define GLX_GPU_RAM_AMD                    0x21A3
+#define GLX_GPU_CLOCK_AMD                  0x21A4
+#define GLX_GPU_NUM_PIPES_AMD              0x21A5
+#define GLX_GPU_NUM_SIMD_AMD               0x21A6
+#define GLX_GPU_NUM_RB_AMD                 0x21A7
+#define GLX_GPU_NUM_SPI_AMD                0x21A8
+#endif
+
+#ifndef GLX_EXT_create_context_es2_profile
+#define GLX_CONTEXT_ES2_PROFILE_BIT_EXT    0x00000004
+#endif
+
+#ifndef GLX_EXT_swap_control_tear
+#define GLX_LATE_SWAPS_TEAR_EXT            0x20F3
+#endif
+
+
+/*************************************************************/
+
+#ifndef GLX_ARB_get_proc_address
+typedef void (*__GLXextFuncPtr)(void);
+#endif
+
+#ifndef GLX_SGIX_video_source
+typedef XID GLXVideoSourceSGIX;
+#endif
+
+#ifndef GLX_SGIX_fbconfig
+typedef XID GLXFBConfigIDSGIX;
+typedef struct __GLXFBConfigRec *GLXFBConfigSGIX;
+#endif
+
+#ifndef GLX_SGIX_pbuffer
+typedef XID GLXPbufferSGIX;
+typedef struct {
+    int type;
+    unsigned long serial;	  /* # of last request processed by server */
+    Bool send_event;		  /* true if this came for SendEvent request */
+    Display *display;		  /* display the event was read from */
+    GLXDrawable drawable;	  /* i.d. of Drawable */
+    int event_type;		  /* GLX_DAMAGED_SGIX or GLX_SAVED_SGIX */
+    int draw_type;		  /* GLX_WINDOW_SGIX or GLX_PBUFFER_SGIX */
+    unsigned int mask;	  /* mask indicating which buffers are affected*/
+    int x, y;
+    int width, height;
+    int count;		  /* if nonzero, at least this many more */
+} GLXBufferClobberEventSGIX;
+#endif
+
+#ifndef GLX_NV_video_output
+typedef unsigned int GLXVideoDeviceNV;
+#endif
+
+#ifndef GLX_NV_video_capture
+typedef XID GLXVideoCaptureDeviceNV;
+#endif
+
+#ifndef GLEXT_64_TYPES_DEFINED
+/* This code block is duplicated in glext.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 GLX_OML_sync_control 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
+#include <inttypes.h>     /* Fallback option */
+#endif
+#endif
+
+#ifndef GLX_VERSION_1_3
+#define GLX_VERSION_1_3 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern GLXFBConfig * glXGetFBConfigs (Display *dpy, int screen, int *nelements);
+extern GLXFBConfig * glXChooseFBConfig (Display *dpy, int screen, const int *attrib_list, int *nelements);
+extern int glXGetFBConfigAttrib (Display *dpy, GLXFBConfig config, int attribute, int *value);
+extern XVisualInfo * glXGetVisualFromFBConfig (Display *dpy, GLXFBConfig config);
+extern GLXWindow glXCreateWindow (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);
+extern void glXDestroyWindow (Display *dpy, GLXWindow win);
+extern GLXPixmap glXCreatePixmap (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list);
+extern void glXDestroyPixmap (Display *dpy, GLXPixmap pixmap);
+extern GLXPbuffer glXCreatePbuffer (Display *dpy, GLXFBConfig config, const int *attrib_list);
+extern void glXDestroyPbuffer (Display *dpy, GLXPbuffer pbuf);
+extern void glXQueryDrawable (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);
+extern GLXContext glXCreateNewContext (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);
+extern Bool glXMakeContextCurrent (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
+extern GLXDrawable glXGetCurrentReadDrawable (void);
+extern Display * glXGetCurrentDisplay (void);
+extern int glXQueryContext (Display *dpy, GLXContext ctx, int attribute, int *value);
+extern void glXSelectEvent (Display *dpy, GLXDrawable draw, unsigned long event_mask);
+extern void glXGetSelectedEvent (Display *dpy, GLXDrawable draw, unsigned long *event_mask);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef GLXFBConfig * ( * PFNGLXGETFBCONFIGSPROC) (Display *dpy, int screen, int *nelements);
+typedef GLXFBConfig * ( * PFNGLXCHOOSEFBCONFIGPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements);
+typedef int ( * PFNGLXGETFBCONFIGATTRIBPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value);
+typedef XVisualInfo * ( * PFNGLXGETVISUALFROMFBCONFIGPROC) (Display *dpy, GLXFBConfig config);
+typedef GLXWindow ( * PFNGLXCREATEWINDOWPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);
+typedef void ( * PFNGLXDESTROYWINDOWPROC) (Display *dpy, GLXWindow win);
+typedef GLXPixmap ( * PFNGLXCREATEPIXMAPPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list);
+typedef void ( * PFNGLXDESTROYPIXMAPPROC) (Display *dpy, GLXPixmap pixmap);
+typedef GLXPbuffer ( * PFNGLXCREATEPBUFFERPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list);
+typedef void ( * PFNGLXDESTROYPBUFFERPROC) (Display *dpy, GLXPbuffer pbuf);
+typedef void ( * PFNGLXQUERYDRAWABLEPROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);
+typedef GLXContext ( * PFNGLXCREATENEWCONTEXTPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);
+typedef Bool ( * PFNGLXMAKECONTEXTCURRENTPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
+typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLEPROC) (void);
+typedef Display * ( * PFNGLXGETCURRENTDISPLAYPROC) (void);
+typedef int ( * PFNGLXQUERYCONTEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value);
+typedef void ( * PFNGLXSELECTEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask);
+typedef void ( * PFNGLXGETSELECTEDEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask);
+#endif
+
+#ifndef GLX_VERSION_1_4
+#define GLX_VERSION_1_4 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern __GLXextFuncPtr glXGetProcAddress (const GLubyte *procName);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef __GLXextFuncPtr ( * PFNGLXGETPROCADDRESSPROC) (const GLubyte *procName);
+#endif
+
+#ifndef GLX_ARB_get_proc_address
+#define GLX_ARB_get_proc_address 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern __GLXextFuncPtr glXGetProcAddressARB (const GLubyte *procName);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef __GLXextFuncPtr ( * PFNGLXGETPROCADDRESSARBPROC) (const GLubyte *procName);
+#endif
+
+#ifndef GLX_ARB_multisample
+#define GLX_ARB_multisample 1
+#endif
+
+#ifndef GLX_ARB_fbconfig_float
+#define GLX_ARB_fbconfig_float 1
+#endif
+
+#ifndef GLX_ARB_framebuffer_sRGB
+#define GLX_ARB_framebuffer_sRGB 1
+#endif
+
+#ifndef GLX_ARB_create_context
+#define GLX_ARB_create_context 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern GLXContext glXCreateContextAttribsARB (Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef GLXContext ( * PFNGLXCREATECONTEXTATTRIBSARBPROC) (Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list);
+#endif
+
+#ifndef GLX_ARB_create_context_profile
+#define GLX_ARB_create_context_profile 1
+#endif
+
+#ifndef GLX_ARB_create_context_robustness
+#define GLX_ARB_create_context_robustness 1
+#endif
+
+#ifndef GLX_SGIS_multisample
+#define GLX_SGIS_multisample 1
+#endif
+
+#ifndef GLX_EXT_visual_info
+#define GLX_EXT_visual_info 1
+#endif
+
+#ifndef GLX_SGI_swap_control
+#define GLX_SGI_swap_control 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern int glXSwapIntervalSGI (int interval);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef int ( * PFNGLXSWAPINTERVALSGIPROC) (int interval);
+#endif
+
+#ifndef GLX_SGI_video_sync
+#define GLX_SGI_video_sync 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern int glXGetVideoSyncSGI (unsigned int *count);
+extern int glXWaitVideoSyncSGI (int divisor, int remainder, unsigned int *count);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef int ( * PFNGLXGETVIDEOSYNCSGIPROC) (unsigned int *count);
+typedef int ( * PFNGLXWAITVIDEOSYNCSGIPROC) (int divisor, int remainder, unsigned int *count);
+#endif
+
+#ifndef GLX_SGI_make_current_read
+#define GLX_SGI_make_current_read 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Bool glXMakeCurrentReadSGI (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
+extern GLXDrawable glXGetCurrentReadDrawableSGI (void);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Bool ( * PFNGLXMAKECURRENTREADSGIPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
+typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLESGIPROC) (void);
+#endif
+
+#ifndef GLX_SGIX_video_source
+#define GLX_SGIX_video_source 1
+#ifdef _VL_H
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern GLXVideoSourceSGIX glXCreateGLXVideoSourceSGIX (Display *display, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode);
+extern void glXDestroyGLXVideoSourceSGIX (Display *dpy, GLXVideoSourceSGIX glxvideosource);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef GLXVideoSourceSGIX ( * PFNGLXCREATEGLXVIDEOSOURCESGIXPROC) (Display *display, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode);
+typedef void ( * PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC) (Display *dpy, GLXVideoSourceSGIX glxvideosource);
+#endif /* _VL_H */
+#endif
+
+#ifndef GLX_EXT_visual_rating
+#define GLX_EXT_visual_rating 1
+#endif
+
+#ifndef GLX_EXT_import_context
+#define GLX_EXT_import_context 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Display * glXGetCurrentDisplayEXT (void);
+extern int glXQueryContextInfoEXT (Display *dpy, GLXContext context, int attribute, int *value);
+extern GLXContextID glXGetContextIDEXT (const GLXContext context);
+extern GLXContext glXImportContextEXT (Display *dpy, GLXContextID contextID);
+extern void glXFreeContextEXT (Display *dpy, GLXContext context);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Display * ( * PFNGLXGETCURRENTDISPLAYEXTPROC) (void);
+typedef int ( * PFNGLXQUERYCONTEXTINFOEXTPROC) (Display *dpy, GLXContext context, int attribute, int *value);
+typedef GLXContextID ( * PFNGLXGETCONTEXTIDEXTPROC) (const GLXContext context);
+typedef GLXContext ( * PFNGLXIMPORTCONTEXTEXTPROC) (Display *dpy, GLXContextID contextID);
+typedef void ( * PFNGLXFREECONTEXTEXTPROC) (Display *dpy, GLXContext context);
+#endif
+
+#ifndef GLX_SGIX_fbconfig
+#define GLX_SGIX_fbconfig 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern int glXGetFBConfigAttribSGIX (Display *dpy, GLXFBConfigSGIX config, int attribute, int *value);
+extern GLXFBConfigSGIX * glXChooseFBConfigSGIX (Display *dpy, int screen, int *attrib_list, int *nelements);
+extern GLXPixmap glXCreateGLXPixmapWithConfigSGIX (Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap);
+extern GLXContext glXCreateContextWithConfigSGIX (Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct);
+extern XVisualInfo * glXGetVisualFromFBConfigSGIX (Display *dpy, GLXFBConfigSGIX config);
+extern GLXFBConfigSGIX glXGetFBConfigFromVisualSGIX (Display *dpy, XVisualInfo *vis);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef int ( * PFNGLXGETFBCONFIGATTRIBSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int attribute, int *value);
+typedef GLXFBConfigSGIX * ( * PFNGLXCHOOSEFBCONFIGSGIXPROC) (Display *dpy, int screen, int *attrib_list, int *nelements);
+typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap);
+typedef GLXContext ( * PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct);
+typedef XVisualInfo * ( * PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config);
+typedef GLXFBConfigSGIX ( * PFNGLXGETFBCONFIGFROMVISUALSGIXPROC) (Display *dpy, XVisualInfo *vis);
+#endif
+
+#ifndef GLX_SGIX_pbuffer
+#define GLX_SGIX_pbuffer 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern GLXPbufferSGIX glXCreateGLXPbufferSGIX (Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list);
+extern void glXDestroyGLXPbufferSGIX (Display *dpy, GLXPbufferSGIX pbuf);
+extern int glXQueryGLXPbufferSGIX (Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value);
+extern void glXSelectEventSGIX (Display *dpy, GLXDrawable drawable, unsigned long mask);
+extern void glXGetSelectedEventSGIX (Display *dpy, GLXDrawable drawable, unsigned long *mask);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef GLXPbufferSGIX ( * PFNGLXCREATEGLXPBUFFERSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list);
+typedef void ( * PFNGLXDESTROYGLXPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuf);
+typedef int ( * PFNGLXQUERYGLXPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value);
+typedef void ( * PFNGLXSELECTEVENTSGIXPROC) (Display *dpy, GLXDrawable drawable, unsigned long mask);
+typedef void ( * PFNGLXGETSELECTEDEVENTSGIXPROC) (Display *dpy, GLXDrawable drawable, unsigned long *mask);
+#endif
+
+#ifndef GLX_SGI_cushion
+#define GLX_SGI_cushion 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern void glXCushionSGI (Display *dpy, Window window, float cushion);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef void ( * PFNGLXCUSHIONSGIPROC) (Display *dpy, Window window, float cushion);
+#endif
+
+#ifndef GLX_SGIX_video_resize
+#define GLX_SGIX_video_resize 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern int glXBindChannelToWindowSGIX (Display *display, int screen, int channel, Window window);
+extern int glXChannelRectSGIX (Display *display, int screen, int channel, int x, int y, int w, int h);
+extern int glXQueryChannelRectSGIX (Display *display, int screen, int channel, int *dx, int *dy, int *dw, int *dh);
+extern int glXQueryChannelDeltasSGIX (Display *display, int screen, int channel, int *x, int *y, int *w, int *h);
+extern int glXChannelRectSyncSGIX (Display *display, int screen, int channel, GLenum synctype);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef int ( * PFNGLXBINDCHANNELTOWINDOWSGIXPROC) (Display *display, int screen, int channel, Window window);
+typedef int ( * PFNGLXCHANNELRECTSGIXPROC) (Display *display, int screen, int channel, int x, int y, int w, int h);
+typedef int ( * PFNGLXQUERYCHANNELRECTSGIXPROC) (Display *display, int screen, int channel, int *dx, int *dy, int *dw, int *dh);
+typedef int ( * PFNGLXQUERYCHANNELDELTASSGIXPROC) (Display *display, int screen, int channel, int *x, int *y, int *w, int *h);
+typedef int ( * PFNGLXCHANNELRECTSYNCSGIXPROC) (Display *display, int screen, int channel, GLenum synctype);
+#endif
+
+#ifndef GLX_SGIX_dmbuffer
+#define GLX_SGIX_dmbuffer 1
+#ifdef _DM_BUFFER_H_
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Bool glXAssociateDMPbufferSGIX (Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Bool ( * PFNGLXASSOCIATEDMPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer);
+#endif /* _DM_BUFFER_H_ */
+#endif
+
+#ifndef GLX_SGIX_swap_group
+#define GLX_SGIX_swap_group 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern void glXJoinSwapGroupSGIX (Display *dpy, GLXDrawable drawable, GLXDrawable member);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef void ( * PFNGLXJOINSWAPGROUPSGIXPROC) (Display *dpy, GLXDrawable drawable, GLXDrawable member);
+#endif
+
+#ifndef GLX_SGIX_swap_barrier
+#define GLX_SGIX_swap_barrier 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern void glXBindSwapBarrierSGIX (Display *dpy, GLXDrawable drawable, int barrier);
+extern Bool glXQueryMaxSwapBarriersSGIX (Display *dpy, int screen, int *max);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef void ( * PFNGLXBINDSWAPBARRIERSGIXPROC) (Display *dpy, GLXDrawable drawable, int barrier);
+typedef Bool ( * PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC) (Display *dpy, int screen, int *max);
+#endif
+
+#ifndef GLX_SUN_get_transparent_index
+#define GLX_SUN_get_transparent_index 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Status glXGetTransparentIndexSUN (Display *dpy, Window overlay, Window underlay, long *pTransparentIndex);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Status ( * PFNGLXGETTRANSPARENTINDEXSUNPROC) (Display *dpy, Window overlay, Window underlay, long *pTransparentIndex);
+#endif
+
+#ifndef GLX_MESA_copy_sub_buffer
+#define GLX_MESA_copy_sub_buffer 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern void glXCopySubBufferMESA (Display *dpy, GLXDrawable drawable, int x, int y, int width, int height);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef void ( * PFNGLXCOPYSUBBUFFERMESAPROC) (Display *dpy, GLXDrawable drawable, int x, int y, int width, int height);
+#endif
+
+#ifndef GLX_MESA_pixmap_colormap
+#define GLX_MESA_pixmap_colormap 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern GLXPixmap glXCreateGLXPixmapMESA (Display *dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPMESAPROC) (Display *dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap);
+#endif
+
+#ifndef GLX_MESA_release_buffers
+#define GLX_MESA_release_buffers 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Bool glXReleaseBuffersMESA (Display *dpy, GLXDrawable drawable);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Bool ( * PFNGLXRELEASEBUFFERSMESAPROC) (Display *dpy, GLXDrawable drawable);
+#endif
+
+#ifndef GLX_MESA_set_3dfx_mode
+#define GLX_MESA_set_3dfx_mode 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Bool glXSet3DfxModeMESA (int mode);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Bool ( * PFNGLXSET3DFXMODEMESAPROC) (int mode);
+#endif
+
+#ifndef GLX_SGIX_visual_select_group
+#define GLX_SGIX_visual_select_group 1
+#endif
+
+#ifndef GLX_OML_swap_method
+#define GLX_OML_swap_method 1
+#endif
+
+#ifndef GLX_OML_sync_control
+#define GLX_OML_sync_control 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Bool glXGetSyncValuesOML (Display *dpy, GLXDrawable drawable, int64_t *ust, int64_t *msc, int64_t *sbc);
+extern Bool glXGetMscRateOML (Display *dpy, GLXDrawable drawable, int32_t *numerator, int32_t *denominator);
+extern int64_t glXSwapBuffersMscOML (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder);
+extern Bool glXWaitForMscOML (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t *ust, int64_t *msc, int64_t *sbc);
+extern Bool glXWaitForSbcOML (Display *dpy, GLXDrawable drawable, int64_t target_sbc, int64_t *ust, int64_t *msc, int64_t *sbc);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Bool ( * PFNGLXGETSYNCVALUESOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t *ust, int64_t *msc, int64_t *sbc);
+typedef Bool ( * PFNGLXGETMSCRATEOMLPROC) (Display *dpy, GLXDrawable drawable, int32_t *numerator, int32_t *denominator);
+typedef int64_t ( * PFNGLXSWAPBUFFERSMSCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder);
+typedef Bool ( * PFNGLXWAITFORMSCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t *ust, int64_t *msc, int64_t *sbc);
+typedef Bool ( * PFNGLXWAITFORSBCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_sbc, int64_t *ust, int64_t *msc, int64_t *sbc);
+#endif
+
+#ifndef GLX_NV_float_buffer
+#define GLX_NV_float_buffer 1
+#endif
+
+#ifndef GLX_SGIX_hyperpipe
+#define GLX_SGIX_hyperpipe 1
+
+typedef struct {
+    char    pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
+    int     networkId;
+} GLXHyperpipeNetworkSGIX;
+
+typedef struct {
+    char    pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
+    int     channel;
+    unsigned int
+      participationType;
+    int     timeSlice;
+} GLXHyperpipeConfigSGIX;
+
+typedef struct {
+    char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
+    int srcXOrigin, srcYOrigin, srcWidth, srcHeight;
+    int destXOrigin, destYOrigin, destWidth, destHeight;
+} GLXPipeRect;
+
+typedef struct {
+    char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
+    int XOrigin, YOrigin, maxHeight, maxWidth;
+} GLXPipeRectLimits;
+
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern GLXHyperpipeNetworkSGIX * glXQueryHyperpipeNetworkSGIX (Display *dpy, int *npipes);
+extern int glXHyperpipeConfigSGIX (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId);
+extern GLXHyperpipeConfigSGIX * glXQueryHyperpipeConfigSGIX (Display *dpy, int hpId, int *npipes);
+extern int glXDestroyHyperpipeConfigSGIX (Display *dpy, int hpId);
+extern int glXBindHyperpipeSGIX (Display *dpy, int hpId);
+extern int glXQueryHyperpipeBestAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList);
+extern int glXHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList);
+extern int glXQueryHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef GLXHyperpipeNetworkSGIX * ( * PFNGLXQUERYHYPERPIPENETWORKSGIXPROC) (Display *dpy, int *npipes);
+typedef int ( * PFNGLXHYPERPIPECONFIGSGIXPROC) (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId);
+typedef GLXHyperpipeConfigSGIX * ( * PFNGLXQUERYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId, int *npipes);
+typedef int ( * PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId);
+typedef int ( * PFNGLXBINDHYPERPIPESGIXPROC) (Display *dpy, int hpId);
+typedef int ( * PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList);
+typedef int ( * PFNGLXHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList);
+typedef int ( * PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList);
+#endif
+
+#ifndef GLX_MESA_agp_offset
+#define GLX_MESA_agp_offset 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern unsigned int glXGetAGPOffsetMESA (const void *pointer);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef unsigned int ( * PFNGLXGETAGPOFFSETMESAPROC) (const void *pointer);
+#endif
+
+#ifndef GLX_EXT_fbconfig_packed_float
+#define GLX_EXT_fbconfig_packed_float 1
+#endif
+
+#ifndef GLX_EXT_framebuffer_sRGB
+#define GLX_EXT_framebuffer_sRGB 1
+#endif
+
+#ifndef GLX_EXT_texture_from_pixmap
+#define GLX_EXT_texture_from_pixmap 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern void glXBindTexImageEXT (Display *dpy, GLXDrawable drawable, int buffer, const int *attrib_list);
+extern void glXReleaseTexImageEXT (Display *dpy, GLXDrawable drawable, int buffer);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef void ( * PFNGLXBINDTEXIMAGEEXTPROC) (Display *dpy, GLXDrawable drawable, int buffer, const int *attrib_list);
+typedef void ( * PFNGLXRELEASETEXIMAGEEXTPROC) (Display *dpy, GLXDrawable drawable, int buffer);
+#endif
+
+#ifndef GLX_NV_present_video
+#define GLX_NV_present_video 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern unsigned int * glXEnumerateVideoDevicesNV (Display *dpy, int screen, int *nelements);
+extern int glXBindVideoDeviceNV (Display *dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef unsigned int * ( * PFNGLXENUMERATEVIDEODEVICESNVPROC) (Display *dpy, int screen, int *nelements);
+typedef int ( * PFNGLXBINDVIDEODEVICENVPROC) (Display *dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list);
+#endif
+
+#ifndef GLX_NV_video_output
+#define GLX_NV_video_output 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern int glXGetVideoDeviceNV (Display *dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice);
+extern int glXReleaseVideoDeviceNV (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice);
+extern int glXBindVideoImageNV (Display *dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer);
+extern int glXReleaseVideoImageNV (Display *dpy, GLXPbuffer pbuf);
+extern int glXSendPbufferToVideoNV (Display *dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock);
+extern int glXGetVideoInfoNV (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef int ( * PFNGLXGETVIDEODEVICENVPROC) (Display *dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice);
+typedef int ( * PFNGLXRELEASEVIDEODEVICENVPROC) (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice);
+typedef int ( * PFNGLXBINDVIDEOIMAGENVPROC) (Display *dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer);
+typedef int ( * PFNGLXRELEASEVIDEOIMAGENVPROC) (Display *dpy, GLXPbuffer pbuf);
+typedef int ( * PFNGLXSENDPBUFFERTOVIDEONVPROC) (Display *dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock);
+typedef int ( * PFNGLXGETVIDEOINFONVPROC) (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
+#endif
+
+#ifndef GLX_NV_swap_group
+#define GLX_NV_swap_group 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern Bool glXJoinSwapGroupNV (Display *dpy, GLXDrawable drawable, GLuint group);
+extern Bool glXBindSwapBarrierNV (Display *dpy, GLuint group, GLuint barrier);
+extern Bool glXQuerySwapGroupNV (Display *dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier);
+extern Bool glXQueryMaxSwapGroupsNV (Display *dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers);
+extern Bool glXQueryFrameCountNV (Display *dpy, int screen, GLuint *count);
+extern Bool glXResetFrameCountNV (Display *dpy, int screen);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef Bool ( * PFNGLXJOINSWAPGROUPNVPROC) (Display *dpy, GLXDrawable drawable, GLuint group);
+typedef Bool ( * PFNGLXBINDSWAPBARRIERNVPROC) (Display *dpy, GLuint group, GLuint barrier);
+typedef Bool ( * PFNGLXQUERYSWAPGROUPNVPROC) (Display *dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier);
+typedef Bool ( * PFNGLXQUERYMAXSWAPGROUPSNVPROC) (Display *dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers);
+typedef Bool ( * PFNGLXQUERYFRAMECOUNTNVPROC) (Display *dpy, int screen, GLuint *count);
+typedef Bool ( * PFNGLXRESETFRAMECOUNTNVPROC) (Display *dpy, int screen);
+#endif
+
+#ifndef GLX_NV_video_capture
+#define GLX_NV_video_capture 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern int glXBindVideoCaptureDeviceNV (Display *dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device);
+extern GLXVideoCaptureDeviceNV * glXEnumerateVideoCaptureDevicesNV (Display *dpy, int screen, int *nelements);
+extern void glXLockVideoCaptureDeviceNV (Display *dpy, GLXVideoCaptureDeviceNV device);
+extern int glXQueryVideoCaptureDeviceNV (Display *dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value);
+extern void glXReleaseVideoCaptureDeviceNV (Display *dpy, GLXVideoCaptureDeviceNV device);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef int ( * PFNGLXBINDVIDEOCAPTUREDEVICENVPROC) (Display *dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device);
+typedef GLXVideoCaptureDeviceNV * ( * PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC) (Display *dpy, int screen, int *nelements);
+typedef void ( * PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device);
+typedef int ( * PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value);
+typedef void ( * PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device);
+#endif
+
+#ifndef GLX_EXT_swap_control
+#define GLX_EXT_swap_control 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern void glXSwapIntervalEXT (Display *dpy, GLXDrawable drawable, int interval);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef void ( * PFNGLXSWAPINTERVALEXTPROC) (Display *dpy, GLXDrawable drawable, int interval);
+#endif
+
+#ifndef GLX_NV_copy_image
+#define GLX_NV_copy_image 1
+#ifdef GLX_GLXEXT_PROTOTYPES
+extern void glXCopyImageSubDataNV (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#endif /* GLX_GLXEXT_PROTOTYPES */
+typedef void ( * PFNGLXCOPYIMAGESUBDATANVPROC) (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#endif
+
+#ifndef GLX_INTEL_swap_event
+#define GLX_INTEL_swap_event 1
+#endif
+
+#ifndef GLX_NV_multisample_coverage
+#define GLX_NV_multisample_coverage 1
+#endif
+
+#ifndef GLX_EXT_swap_control_tear
+#define GLX_EXT_swap_control_tear 1
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/third_party/khronos/noninclude/GL/wglext.h b/third_party/khronos/noninclude/GL/wglext.h
new file mode 100644
index 0000000..daba410
--- /dev/null
+++ b/third_party/khronos/noninclude/GL/wglext.h
@@ -0,0 +1,840 @@
+#ifndef __wglext_h_
+#define __wglext_h_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** Copyright (c) 2013-2014 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are 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 Materials.
+**
+** THE MATERIALS ARE 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
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+/*
+** This header is generated from the Khronos OpenGL / OpenGL ES XML
+** API Registry. The current version of the Registry, generator scripts
+** used to make the header, and the header can be found at
+**   http://www.opengl.org/registry/
+**
+** Khronos $Revision: 27684 $ on $Date: 2014-08-11 01:21:35 -0700 (Mon, 11 Aug 2014) $
+*/
+
+#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
+#define WIN32_LEAN_AND_MEAN 1
+#include <windows.h>
+#endif
+
+#define WGL_WGLEXT_VERSION 20140810
+
+/* Generated C header for:
+ * API: wgl
+ * Versions considered: .*
+ * Versions emitted: _nomatch_^
+ * Default extensions included: wgl
+ * Additional extensions included: _nomatch_^
+ * Extensions removed: _nomatch_^
+ */
+
+#ifndef WGL_ARB_buffer_region
+#define WGL_ARB_buffer_region 1
+#define WGL_FRONT_COLOR_BUFFER_BIT_ARB    0x00000001
+#define WGL_BACK_COLOR_BUFFER_BIT_ARB     0x00000002
+#define WGL_DEPTH_BUFFER_BIT_ARB          0x00000004
+#define WGL_STENCIL_BUFFER_BIT_ARB        0x00000008
+typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType);
+typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion);
+typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height);
+typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc);
+#ifdef WGL_WGLEXT_PROTOTYPES
+HANDLE WINAPI wglCreateBufferRegionARB (HDC hDC, int iLayerPlane, UINT uType);
+VOID WINAPI wglDeleteBufferRegionARB (HANDLE hRegion);
+BOOL WINAPI wglSaveBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height);
+BOOL WINAPI wglRestoreBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc);
+#endif
+#endif /* WGL_ARB_buffer_region */
+
+#ifndef WGL_ARB_context_flush_control
+#define WGL_ARB_context_flush_control 1
+#define WGL_CONTEXT_RELEASE_BEHAVIOR_ARB  0x2097
+#define WGL_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0
+#define WGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098
+#endif /* WGL_ARB_context_flush_control */
+
+#ifndef WGL_ARB_create_context
+#define WGL_ARB_create_context 1
+#define WGL_CONTEXT_DEBUG_BIT_ARB         0x00000001
+#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002
+#define WGL_CONTEXT_MAJOR_VERSION_ARB     0x2091
+#define WGL_CONTEXT_MINOR_VERSION_ARB     0x2092
+#define WGL_CONTEXT_LAYER_PLANE_ARB       0x2093
+#define WGL_CONTEXT_FLAGS_ARB             0x2094
+#define ERROR_INVALID_VERSION_ARB         0x2095
+typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int *attribList);
+#ifdef WGL_WGLEXT_PROTOTYPES
+HGLRC WINAPI wglCreateContextAttribsARB (HDC hDC, HGLRC hShareContext, const int *attribList);
+#endif
+#endif /* WGL_ARB_create_context */
+
+#ifndef WGL_ARB_create_context_profile
+#define WGL_ARB_create_context_profile 1
+#define WGL_CONTEXT_PROFILE_MASK_ARB      0x9126
+#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB  0x00000001
+#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
+#define ERROR_INVALID_PROFILE_ARB         0x2096
+#endif /* WGL_ARB_create_context_profile */
+
+#ifndef WGL_ARB_create_context_robustness
+#define WGL_ARB_create_context_robustness 1
+#define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004
+#define WGL_LOSE_CONTEXT_ON_RESET_ARB     0x8252
+#define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
+#define WGL_NO_RESET_NOTIFICATION_ARB     0x8261
+#endif /* WGL_ARB_create_context_robustness */
+
+#ifndef WGL_ARB_extensions_string
+#define WGL_ARB_extensions_string 1
+typedef const char *(WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc);
+#ifdef WGL_WGLEXT_PROTOTYPES
+const char *WINAPI wglGetExtensionsStringARB (HDC hdc);
+#endif
+#endif /* WGL_ARB_extensions_string */
+
+#ifndef WGL_ARB_framebuffer_sRGB
+#define WGL_ARB_framebuffer_sRGB 1
+#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB  0x20A9
+#endif /* WGL_ARB_framebuffer_sRGB */
+
+#ifndef WGL_ARB_make_current_read
+#define WGL_ARB_make_current_read 1
+#define ERROR_INVALID_PIXEL_TYPE_ARB      0x2043
+#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054
+typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (void);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglMakeContextCurrentARB (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+HDC WINAPI wglGetCurrentReadDCARB (void);
+#endif
+#endif /* WGL_ARB_make_current_read */
+
+#ifndef WGL_ARB_multisample
+#define WGL_ARB_multisample 1
+#define WGL_SAMPLE_BUFFERS_ARB            0x2041
+#define WGL_SAMPLES_ARB                   0x2042
+#endif /* WGL_ARB_multisample */
+
+#ifndef WGL_ARB_pbuffer
+#define WGL_ARB_pbuffer 1
+DECLARE_HANDLE(HPBUFFERARB);
+#define WGL_DRAW_TO_PBUFFER_ARB           0x202D
+#define WGL_MAX_PBUFFER_PIXELS_ARB        0x202E
+#define WGL_MAX_PBUFFER_WIDTH_ARB         0x202F
+#define WGL_MAX_PBUFFER_HEIGHT_ARB        0x2030
+#define WGL_PBUFFER_LARGEST_ARB           0x2033
+#define WGL_PBUFFER_WIDTH_ARB             0x2034
+#define WGL_PBUFFER_HEIGHT_ARB            0x2035
+#define WGL_PBUFFER_LOST_ARB              0x2036
+typedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
+typedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer);
+typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC);
+typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer);
+typedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int *piValue);
+#ifdef WGL_WGLEXT_PROTOTYPES
+HPBUFFERARB WINAPI wglCreatePbufferARB (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
+HDC WINAPI wglGetPbufferDCARB (HPBUFFERARB hPbuffer);
+int WINAPI wglReleasePbufferDCARB (HPBUFFERARB hPbuffer, HDC hDC);
+BOOL WINAPI wglDestroyPbufferARB (HPBUFFERARB hPbuffer);
+BOOL WINAPI wglQueryPbufferARB (HPBUFFERARB hPbuffer, int iAttribute, int *piValue);
+#endif
+#endif /* WGL_ARB_pbuffer */
+
+#ifndef WGL_ARB_pixel_format
+#define WGL_ARB_pixel_format 1
+#define WGL_NUMBER_PIXEL_FORMATS_ARB      0x2000
+#define WGL_DRAW_TO_WINDOW_ARB            0x2001
+#define WGL_DRAW_TO_BITMAP_ARB            0x2002
+#define WGL_ACCELERATION_ARB              0x2003
+#define WGL_NEED_PALETTE_ARB              0x2004
+#define WGL_NEED_SYSTEM_PALETTE_ARB       0x2005
+#define WGL_SWAP_LAYER_BUFFERS_ARB        0x2006
+#define WGL_SWAP_METHOD_ARB               0x2007
+#define WGL_NUMBER_OVERLAYS_ARB           0x2008
+#define WGL_NUMBER_UNDERLAYS_ARB          0x2009
+#define WGL_TRANSPARENT_ARB               0x200A
+#define WGL_TRANSPARENT_RED_VALUE_ARB     0x2037
+#define WGL_TRANSPARENT_GREEN_VALUE_ARB   0x2038
+#define WGL_TRANSPARENT_BLUE_VALUE_ARB    0x2039
+#define WGL_TRANSPARENT_ALPHA_VALUE_ARB   0x203A
+#define WGL_TRANSPARENT_INDEX_VALUE_ARB   0x203B
+#define WGL_SHARE_DEPTH_ARB               0x200C
+#define WGL_SHARE_STENCIL_ARB             0x200D
+#define WGL_SHARE_ACCUM_ARB               0x200E
+#define WGL_SUPPORT_GDI_ARB               0x200F
+#define WGL_SUPPORT_OPENGL_ARB            0x2010
+#define WGL_DOUBLE_BUFFER_ARB             0x2011
+#define WGL_STEREO_ARB                    0x2012
+#define WGL_PIXEL_TYPE_ARB                0x2013
+#define WGL_COLOR_BITS_ARB                0x2014
+#define WGL_RED_BITS_ARB                  0x2015
+#define WGL_RED_SHIFT_ARB                 0x2016
+#define WGL_GREEN_BITS_ARB                0x2017
+#define WGL_GREEN_SHIFT_ARB               0x2018
+#define WGL_BLUE_BITS_ARB                 0x2019
+#define WGL_BLUE_SHIFT_ARB                0x201A
+#define WGL_ALPHA_BITS_ARB                0x201B
+#define WGL_ALPHA_SHIFT_ARB               0x201C
+#define WGL_ACCUM_BITS_ARB                0x201D
+#define WGL_ACCUM_RED_BITS_ARB            0x201E
+#define WGL_ACCUM_GREEN_BITS_ARB          0x201F
+#define WGL_ACCUM_BLUE_BITS_ARB           0x2020
+#define WGL_ACCUM_ALPHA_BITS_ARB          0x2021
+#define WGL_DEPTH_BITS_ARB                0x2022
+#define WGL_STENCIL_BITS_ARB              0x2023
+#define WGL_AUX_BUFFERS_ARB               0x2024
+#define WGL_NO_ACCELERATION_ARB           0x2025
+#define WGL_GENERIC_ACCELERATION_ARB      0x2026
+#define WGL_FULL_ACCELERATION_ARB         0x2027
+#define WGL_SWAP_EXCHANGE_ARB             0x2028
+#define WGL_SWAP_COPY_ARB                 0x2029
+#define WGL_SWAP_UNDEFINED_ARB            0x202A
+#define WGL_TYPE_RGBA_ARB                 0x202B
+#define WGL_TYPE_COLORINDEX_ARB           0x202C
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);
+typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglGetPixelFormatAttribivARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
+BOOL WINAPI wglGetPixelFormatAttribfvARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);
+BOOL WINAPI wglChoosePixelFormatARB (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+#endif
+#endif /* WGL_ARB_pixel_format */
+
+#ifndef WGL_ARB_pixel_format_float
+#define WGL_ARB_pixel_format_float 1
+#define WGL_TYPE_RGBA_FLOAT_ARB           0x21A0
+#endif /* WGL_ARB_pixel_format_float */
+
+#ifndef WGL_ARB_render_texture
+#define WGL_ARB_render_texture 1
+#define WGL_BIND_TO_TEXTURE_RGB_ARB       0x2070
+#define WGL_BIND_TO_TEXTURE_RGBA_ARB      0x2071
+#define WGL_TEXTURE_FORMAT_ARB            0x2072
+#define WGL_TEXTURE_TARGET_ARB            0x2073
+#define WGL_MIPMAP_TEXTURE_ARB            0x2074
+#define WGL_TEXTURE_RGB_ARB               0x2075
+#define WGL_TEXTURE_RGBA_ARB              0x2076
+#define WGL_NO_TEXTURE_ARB                0x2077
+#define WGL_TEXTURE_CUBE_MAP_ARB          0x2078
+#define WGL_TEXTURE_1D_ARB                0x2079
+#define WGL_TEXTURE_2D_ARB                0x207A
+#define WGL_MIPMAP_LEVEL_ARB              0x207B
+#define WGL_CUBE_MAP_FACE_ARB             0x207C
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080
+#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081
+#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082
+#define WGL_FRONT_LEFT_ARB                0x2083
+#define WGL_FRONT_RIGHT_ARB               0x2084
+#define WGL_BACK_LEFT_ARB                 0x2085
+#define WGL_BACK_RIGHT_ARB                0x2086
+#define WGL_AUX0_ARB                      0x2087
+#define WGL_AUX1_ARB                      0x2088
+#define WGL_AUX2_ARB                      0x2089
+#define WGL_AUX3_ARB                      0x208A
+#define WGL_AUX4_ARB                      0x208B
+#define WGL_AUX5_ARB                      0x208C
+#define WGL_AUX6_ARB                      0x208D
+#define WGL_AUX7_ARB                      0x208E
+#define WGL_AUX8_ARB                      0x208F
+#define WGL_AUX9_ARB                      0x2090
+typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
+typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
+typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int *piAttribList);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglBindTexImageARB (HPBUFFERARB hPbuffer, int iBuffer);
+BOOL WINAPI wglReleaseTexImageARB (HPBUFFERARB hPbuffer, int iBuffer);
+BOOL WINAPI wglSetPbufferAttribARB (HPBUFFERARB hPbuffer, const int *piAttribList);
+#endif
+#endif /* WGL_ARB_render_texture */
+
+#ifndef WGL_ARB_robustness_application_isolation
+#define WGL_ARB_robustness_application_isolation 1
+#define WGL_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008
+#endif /* WGL_ARB_robustness_application_isolation */
+
+#ifndef WGL_ARB_robustness_share_group_isolation
+#define WGL_ARB_robustness_share_group_isolation 1
+#endif /* WGL_ARB_robustness_share_group_isolation */
+
+#ifndef WGL_3DFX_multisample
+#define WGL_3DFX_multisample 1
+#define WGL_SAMPLE_BUFFERS_3DFX           0x2060
+#define WGL_SAMPLES_3DFX                  0x2061
+#endif /* WGL_3DFX_multisample */
+
+#ifndef WGL_3DL_stereo_control
+#define WGL_3DL_stereo_control 1
+#define WGL_STEREO_EMITTER_ENABLE_3DL     0x2055
+#define WGL_STEREO_EMITTER_DISABLE_3DL    0x2056
+#define WGL_STEREO_POLARITY_NORMAL_3DL    0x2057
+#define WGL_STEREO_POLARITY_INVERT_3DL    0x2058
+typedef BOOL (WINAPI * PFNWGLSETSTEREOEMITTERSTATE3DLPROC) (HDC hDC, UINT uState);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglSetStereoEmitterState3DL (HDC hDC, UINT uState);
+#endif
+#endif /* WGL_3DL_stereo_control */
+
+#ifndef WGL_AMD_gpu_association
+#define WGL_AMD_gpu_association 1
+#define WGL_GPU_VENDOR_AMD                0x1F00
+#define WGL_GPU_RENDERER_STRING_AMD       0x1F01
+#define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02
+#define WGL_GPU_FASTEST_TARGET_GPUS_AMD   0x21A2
+#define WGL_GPU_RAM_AMD                   0x21A3
+#define WGL_GPU_CLOCK_AMD                 0x21A4
+#define WGL_GPU_NUM_PIPES_AMD             0x21A5
+#define WGL_GPU_NUM_SIMD_AMD              0x21A6
+#define WGL_GPU_NUM_RB_AMD                0x21A7
+#define WGL_GPU_NUM_SPI_AMD               0x21A8
+typedef UINT (WINAPI * PFNWGLGETGPUIDSAMDPROC) (UINT maxCount, UINT *ids);
+typedef INT (WINAPI * PFNWGLGETGPUINFOAMDPROC) (UINT id, int property, GLenum dataType, UINT size, void *data);
+typedef UINT (WINAPI * PFNWGLGETCONTEXTGPUIDAMDPROC) (HGLRC hglrc);
+typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC) (UINT id);
+typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (UINT id, HGLRC hShareContext, const int *attribList);
+typedef BOOL (WINAPI * PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC) (HGLRC hglrc);
+typedef BOOL (WINAPI * PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (HGLRC hglrc);
+typedef HGLRC (WINAPI * PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void);
+typedef VOID (WINAPI * PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC) (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#ifdef WGL_WGLEXT_PROTOTYPES
+UINT WINAPI wglGetGPUIDsAMD (UINT maxCount, UINT *ids);
+INT WINAPI wglGetGPUInfoAMD (UINT id, int property, GLenum dataType, UINT size, void *data);
+UINT WINAPI wglGetContextGPUIDAMD (HGLRC hglrc);
+HGLRC WINAPI wglCreateAssociatedContextAMD (UINT id);
+HGLRC WINAPI wglCreateAssociatedContextAttribsAMD (UINT id, HGLRC hShareContext, const int *attribList);
+BOOL WINAPI wglDeleteAssociatedContextAMD (HGLRC hglrc);
+BOOL WINAPI wglMakeAssociatedContextCurrentAMD (HGLRC hglrc);
+HGLRC WINAPI wglGetCurrentAssociatedContextAMD (void);
+VOID WINAPI wglBlitContextFramebufferAMD (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+#endif
+#endif /* WGL_AMD_gpu_association */
+
+#ifndef WGL_ATI_pixel_format_float
+#define WGL_ATI_pixel_format_float 1
+#define WGL_TYPE_RGBA_FLOAT_ATI           0x21A0
+#endif /* WGL_ATI_pixel_format_float */
+
+#ifndef WGL_EXT_create_context_es2_profile
+#define WGL_EXT_create_context_es2_profile 1
+#define WGL_CONTEXT_ES2_PROFILE_BIT_EXT   0x00000004
+#endif /* WGL_EXT_create_context_es2_profile */
+
+#ifndef WGL_EXT_create_context_es_profile
+#define WGL_EXT_create_context_es_profile 1
+#define WGL_CONTEXT_ES_PROFILE_BIT_EXT    0x00000004
+#endif /* WGL_EXT_create_context_es_profile */
+
+#ifndef WGL_EXT_depth_float
+#define WGL_EXT_depth_float 1
+#define WGL_DEPTH_FLOAT_EXT               0x2040
+#endif /* WGL_EXT_depth_float */
+
+#ifndef WGL_EXT_display_color_table
+#define WGL_EXT_display_color_table 1
+typedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id);
+typedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (const GLushort *table, GLuint length);
+typedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id);
+typedef VOID (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id);
+#ifdef WGL_WGLEXT_PROTOTYPES
+GLboolean WINAPI wglCreateDisplayColorTableEXT (GLushort id);
+GLboolean WINAPI wglLoadDisplayColorTableEXT (const GLushort *table, GLuint length);
+GLboolean WINAPI wglBindDisplayColorTableEXT (GLushort id);
+VOID WINAPI wglDestroyDisplayColorTableEXT (GLushort id);
+#endif
+#endif /* WGL_EXT_display_color_table */
+
+#ifndef WGL_EXT_extensions_string
+#define WGL_EXT_extensions_string 1
+typedef const char *(WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void);
+#ifdef WGL_WGLEXT_PROTOTYPES
+const char *WINAPI wglGetExtensionsStringEXT (void);
+#endif
+#endif /* WGL_EXT_extensions_string */
+
+#ifndef WGL_EXT_framebuffer_sRGB
+#define WGL_EXT_framebuffer_sRGB 1
+#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT  0x20A9
+#endif /* WGL_EXT_framebuffer_sRGB */
+
+#ifndef WGL_EXT_make_current_read
+#define WGL_EXT_make_current_read 1
+#define ERROR_INVALID_PIXEL_TYPE_EXT      0x2043
+typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (void);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglMakeContextCurrentEXT (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
+HDC WINAPI wglGetCurrentReadDCEXT (void);
+#endif
+#endif /* WGL_EXT_make_current_read */
+
+#ifndef WGL_EXT_multisample
+#define WGL_EXT_multisample 1
+#define WGL_SAMPLE_BUFFERS_EXT            0x2041
+#define WGL_SAMPLES_EXT                   0x2042
+#endif /* WGL_EXT_multisample */
+
+#ifndef WGL_EXT_pbuffer
+#define WGL_EXT_pbuffer 1
+DECLARE_HANDLE(HPBUFFEREXT);
+#define WGL_DRAW_TO_PBUFFER_EXT           0x202D
+#define WGL_MAX_PBUFFER_PIXELS_EXT        0x202E
+#define WGL_MAX_PBUFFER_WIDTH_EXT         0x202F
+#define WGL_MAX_PBUFFER_HEIGHT_EXT        0x2030
+#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT     0x2031
+#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT    0x2032
+#define WGL_PBUFFER_LARGEST_EXT           0x2033
+#define WGL_PBUFFER_WIDTH_EXT             0x2034
+#define WGL_PBUFFER_HEIGHT_EXT            0x2035
+typedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
+typedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer);
+typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC);
+typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer);
+typedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue);
+#ifdef WGL_WGLEXT_PROTOTYPES
+HPBUFFEREXT WINAPI wglCreatePbufferEXT (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
+HDC WINAPI wglGetPbufferDCEXT (HPBUFFEREXT hPbuffer);
+int WINAPI wglReleasePbufferDCEXT (HPBUFFEREXT hPbuffer, HDC hDC);
+BOOL WINAPI wglDestroyPbufferEXT (HPBUFFEREXT hPbuffer);
+BOOL WINAPI wglQueryPbufferEXT (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue);
+#endif
+#endif /* WGL_EXT_pbuffer */
+
+#ifndef WGL_EXT_pixel_format
+#define WGL_EXT_pixel_format 1
+#define WGL_NUMBER_PIXEL_FORMATS_EXT      0x2000
+#define WGL_DRAW_TO_WINDOW_EXT            0x2001
+#define WGL_DRAW_TO_BITMAP_EXT            0x2002
+#define WGL_ACCELERATION_EXT              0x2003
+#define WGL_NEED_PALETTE_EXT              0x2004
+#define WGL_NEED_SYSTEM_PALETTE_EXT       0x2005
+#define WGL_SWAP_LAYER_BUFFERS_EXT        0x2006
+#define WGL_SWAP_METHOD_EXT               0x2007
+#define WGL_NUMBER_OVERLAYS_EXT           0x2008
+#define WGL_NUMBER_UNDERLAYS_EXT          0x2009
+#define WGL_TRANSPARENT_EXT               0x200A
+#define WGL_TRANSPARENT_VALUE_EXT         0x200B
+#define WGL_SHARE_DEPTH_EXT               0x200C
+#define WGL_SHARE_STENCIL_EXT             0x200D
+#define WGL_SHARE_ACCUM_EXT               0x200E
+#define WGL_SUPPORT_GDI_EXT               0x200F
+#define WGL_SUPPORT_OPENGL_EXT            0x2010
+#define WGL_DOUBLE_BUFFER_EXT             0x2011
+#define WGL_STEREO_EXT                    0x2012
+#define WGL_PIXEL_TYPE_EXT                0x2013
+#define WGL_COLOR_BITS_EXT                0x2014
+#define WGL_RED_BITS_EXT                  0x2015
+#define WGL_RED_SHIFT_EXT                 0x2016
+#define WGL_GREEN_BITS_EXT                0x2017
+#define WGL_GREEN_SHIFT_EXT               0x2018
+#define WGL_BLUE_BITS_EXT                 0x2019
+#define WGL_BLUE_SHIFT_EXT                0x201A
+#define WGL_ALPHA_BITS_EXT                0x201B
+#define WGL_ALPHA_SHIFT_EXT               0x201C
+#define WGL_ACCUM_BITS_EXT                0x201D
+#define WGL_ACCUM_RED_BITS_EXT            0x201E
+#define WGL_ACCUM_GREEN_BITS_EXT          0x201F
+#define WGL_ACCUM_BLUE_BITS_EXT           0x2020
+#define WGL_ACCUM_ALPHA_BITS_EXT          0x2021
+#define WGL_DEPTH_BITS_EXT                0x2022
+#define WGL_STENCIL_BITS_EXT              0x2023
+#define WGL_AUX_BUFFERS_EXT               0x2024
+#define WGL_NO_ACCELERATION_EXT           0x2025
+#define WGL_GENERIC_ACCELERATION_EXT      0x2026
+#define WGL_FULL_ACCELERATION_EXT         0x2027
+#define WGL_SWAP_EXCHANGE_EXT             0x2028
+#define WGL_SWAP_COPY_EXT                 0x2029
+#define WGL_SWAP_UNDEFINED_EXT            0x202A
+#define WGL_TYPE_RGBA_EXT                 0x202B
+#define WGL_TYPE_COLORINDEX_EXT           0x202C
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues);
+typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues);
+typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglGetPixelFormatAttribivEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues);
+BOOL WINAPI wglGetPixelFormatAttribfvEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues);
+BOOL WINAPI wglChoosePixelFormatEXT (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+#endif
+#endif /* WGL_EXT_pixel_format */
+
+#ifndef WGL_EXT_pixel_format_packed_float
+#define WGL_EXT_pixel_format_packed_float 1
+#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT  0x20A8
+#endif /* WGL_EXT_pixel_format_packed_float */
+
+#ifndef WGL_EXT_swap_control
+#define WGL_EXT_swap_control 1
+typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval);
+typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglSwapIntervalEXT (int interval);
+int WINAPI wglGetSwapIntervalEXT (void);
+#endif
+#endif /* WGL_EXT_swap_control */
+
+#ifndef WGL_EXT_swap_control_tear
+#define WGL_EXT_swap_control_tear 1
+#endif /* WGL_EXT_swap_control_tear */
+
+#ifndef WGL_I3D_digital_video_control
+#define WGL_I3D_digital_video_control 1
+#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050
+#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051
+#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052
+#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053
+typedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue);
+typedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglGetDigitalVideoParametersI3D (HDC hDC, int iAttribute, int *piValue);
+BOOL WINAPI wglSetDigitalVideoParametersI3D (HDC hDC, int iAttribute, const int *piValue);
+#endif
+#endif /* WGL_I3D_digital_video_control */
+
+#ifndef WGL_I3D_gamma
+#define WGL_I3D_gamma 1
+#define WGL_GAMMA_TABLE_SIZE_I3D          0x204E
+#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D     0x204F
+typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue);
+typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue);
+typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue);
+typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglGetGammaTableParametersI3D (HDC hDC, int iAttribute, int *piValue);
+BOOL WINAPI wglSetGammaTableParametersI3D (HDC hDC, int iAttribute, const int *piValue);
+BOOL WINAPI wglGetGammaTableI3D (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue);
+BOOL WINAPI wglSetGammaTableI3D (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue);
+#endif
+#endif /* WGL_I3D_gamma */
+
+#ifndef WGL_I3D_genlock
+#define WGL_I3D_genlock 1
+#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D  0x2044
+#define WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D 0x2045
+#define WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D 0x2046
+#define WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D 0x2047
+#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048
+#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049
+#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A
+#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B
+#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D  0x204C
+typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC);
+typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC);
+typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL *pFlag);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT *uSource);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT *uEdge);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT *uRate);
+typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay);
+typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT *uDelay);
+typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglEnableGenlockI3D (HDC hDC);
+BOOL WINAPI wglDisableGenlockI3D (HDC hDC);
+BOOL WINAPI wglIsEnabledGenlockI3D (HDC hDC, BOOL *pFlag);
+BOOL WINAPI wglGenlockSourceI3D (HDC hDC, UINT uSource);
+BOOL WINAPI wglGetGenlockSourceI3D (HDC hDC, UINT *uSource);
+BOOL WINAPI wglGenlockSourceEdgeI3D (HDC hDC, UINT uEdge);
+BOOL WINAPI wglGetGenlockSourceEdgeI3D (HDC hDC, UINT *uEdge);
+BOOL WINAPI wglGenlockSampleRateI3D (HDC hDC, UINT uRate);
+BOOL WINAPI wglGetGenlockSampleRateI3D (HDC hDC, UINT *uRate);
+BOOL WINAPI wglGenlockSourceDelayI3D (HDC hDC, UINT uDelay);
+BOOL WINAPI wglGetGenlockSourceDelayI3D (HDC hDC, UINT *uDelay);
+BOOL WINAPI wglQueryGenlockMaxSourceDelayI3D (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay);
+#endif
+#endif /* WGL_I3D_genlock */
+
+#ifndef WGL_I3D_image_buffer
+#define WGL_I3D_image_buffer 1
+#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D   0x00000001
+#define WGL_IMAGE_BUFFER_LOCK_I3D         0x00000002
+typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags);
+typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress);
+typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count);
+typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const LPVOID *pAddress, UINT count);
+#ifdef WGL_WGLEXT_PROTOTYPES
+LPVOID WINAPI wglCreateImageBufferI3D (HDC hDC, DWORD dwSize, UINT uFlags);
+BOOL WINAPI wglDestroyImageBufferI3D (HDC hDC, LPVOID pAddress);
+BOOL WINAPI wglAssociateImageBufferEventsI3D (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count);
+BOOL WINAPI wglReleaseImageBufferEventsI3D (HDC hDC, const LPVOID *pAddress, UINT count);
+#endif
+#endif /* WGL_I3D_image_buffer */
+
+#ifndef WGL_I3D_swap_frame_lock
+#define WGL_I3D_swap_frame_lock 1
+typedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL *pFlag);
+typedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL *pFlag);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglEnableFrameLockI3D (void);
+BOOL WINAPI wglDisableFrameLockI3D (void);
+BOOL WINAPI wglIsEnabledFrameLockI3D (BOOL *pFlag);
+BOOL WINAPI wglQueryFrameLockMasterI3D (BOOL *pFlag);
+#endif
+#endif /* WGL_I3D_swap_frame_lock */
+
+#ifndef WGL_I3D_swap_frame_usage
+#define WGL_I3D_swap_frame_usage 1
+typedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float *pUsage);
+typedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void);
+typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglGetFrameUsageI3D (float *pUsage);
+BOOL WINAPI wglBeginFrameTrackingI3D (void);
+BOOL WINAPI wglEndFrameTrackingI3D (void);
+BOOL WINAPI wglQueryFrameTrackingI3D (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage);
+#endif
+#endif /* WGL_I3D_swap_frame_usage */
+
+#ifndef WGL_NV_DX_interop
+#define WGL_NV_DX_interop 1
+#define WGL_ACCESS_READ_ONLY_NV           0x00000000
+#define WGL_ACCESS_READ_WRITE_NV          0x00000001
+#define WGL_ACCESS_WRITE_DISCARD_NV       0x00000002
+typedef BOOL (WINAPI * PFNWGLDXSETRESOURCESHAREHANDLENVPROC) (void *dxObject, HANDLE shareHandle);
+typedef HANDLE (WINAPI * PFNWGLDXOPENDEVICENVPROC) (void *dxDevice);
+typedef BOOL (WINAPI * PFNWGLDXCLOSEDEVICENVPROC) (HANDLE hDevice);
+typedef HANDLE (WINAPI * PFNWGLDXREGISTEROBJECTNVPROC) (HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access);
+typedef BOOL (WINAPI * PFNWGLDXUNREGISTEROBJECTNVPROC) (HANDLE hDevice, HANDLE hObject);
+typedef BOOL (WINAPI * PFNWGLDXOBJECTACCESSNVPROC) (HANDLE hObject, GLenum access);
+typedef BOOL (WINAPI * PFNWGLDXLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects);
+typedef BOOL (WINAPI * PFNWGLDXUNLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglDXSetResourceShareHandleNV (void *dxObject, HANDLE shareHandle);
+HANDLE WINAPI wglDXOpenDeviceNV (void *dxDevice);
+BOOL WINAPI wglDXCloseDeviceNV (HANDLE hDevice);
+HANDLE WINAPI wglDXRegisterObjectNV (HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access);
+BOOL WINAPI wglDXUnregisterObjectNV (HANDLE hDevice, HANDLE hObject);
+BOOL WINAPI wglDXObjectAccessNV (HANDLE hObject, GLenum access);
+BOOL WINAPI wglDXLockObjectsNV (HANDLE hDevice, GLint count, HANDLE *hObjects);
+BOOL WINAPI wglDXUnlockObjectsNV (HANDLE hDevice, GLint count, HANDLE *hObjects);
+#endif
+#endif /* WGL_NV_DX_interop */
+
+#ifndef WGL_NV_DX_interop2
+#define WGL_NV_DX_interop2 1
+#endif /* WGL_NV_DX_interop2 */
+
+#ifndef WGL_NV_copy_image
+#define WGL_NV_copy_image 1
+typedef BOOL (WINAPI * PFNWGLCOPYIMAGESUBDATANVPROC) (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglCopyImageSubDataNV (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
+#endif
+#endif /* WGL_NV_copy_image */
+
+#ifndef WGL_NV_delay_before_swap
+#define WGL_NV_delay_before_swap 1
+typedef BOOL (WINAPI * PFNWGLDELAYBEFORESWAPNVPROC) (HDC hDC, GLfloat seconds);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglDelayBeforeSwapNV (HDC hDC, GLfloat seconds);
+#endif
+#endif /* WGL_NV_delay_before_swap */
+
+#ifndef WGL_NV_float_buffer
+#define WGL_NV_float_buffer 1
+#define WGL_FLOAT_COMPONENTS_NV           0x20B0
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4
+#define WGL_TEXTURE_FLOAT_R_NV            0x20B5
+#define WGL_TEXTURE_FLOAT_RG_NV           0x20B6
+#define WGL_TEXTURE_FLOAT_RGB_NV          0x20B7
+#define WGL_TEXTURE_FLOAT_RGBA_NV         0x20B8
+#endif /* WGL_NV_float_buffer */
+
+#ifndef WGL_NV_gpu_affinity
+#define WGL_NV_gpu_affinity 1
+DECLARE_HANDLE(HGPUNV);
+struct _GPU_DEVICE {
+    DWORD  cb;
+    CHAR   DeviceName[32];
+    CHAR   DeviceString[128];
+    DWORD  Flags;
+    RECT   rcVirtualScreen;
+};
+typedef struct _GPU_DEVICE *PGPU_DEVICE;
+#define ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0
+#define ERROR_MISSING_AFFINITY_MASK_NV    0x20D1
+typedef BOOL (WINAPI * PFNWGLENUMGPUSNVPROC) (UINT iGpuIndex, HGPUNV *phGpu);
+typedef BOOL (WINAPI * PFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice);
+typedef HDC (WINAPI * PFNWGLCREATEAFFINITYDCNVPROC) (const HGPUNV *phGpuList);
+typedef BOOL (WINAPI * PFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu);
+typedef BOOL (WINAPI * PFNWGLDELETEDCNVPROC) (HDC hdc);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglEnumGpusNV (UINT iGpuIndex, HGPUNV *phGpu);
+BOOL WINAPI wglEnumGpuDevicesNV (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice);
+HDC WINAPI wglCreateAffinityDCNV (const HGPUNV *phGpuList);
+BOOL WINAPI wglEnumGpusFromAffinityDCNV (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu);
+BOOL WINAPI wglDeleteDCNV (HDC hdc);
+#endif
+#endif /* WGL_NV_gpu_affinity */
+
+#ifndef WGL_NV_multisample_coverage
+#define WGL_NV_multisample_coverage 1
+#define WGL_COVERAGE_SAMPLES_NV           0x2042
+#define WGL_COLOR_SAMPLES_NV              0x20B9
+#endif /* WGL_NV_multisample_coverage */
+
+#ifndef WGL_NV_present_video
+#define WGL_NV_present_video 1
+DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV);
+#define WGL_NUM_VIDEO_SLOTS_NV            0x20F0
+typedef int (WINAPI * PFNWGLENUMERATEVIDEODEVICESNVPROC) (HDC hDC, HVIDEOOUTPUTDEVICENV *phDeviceList);
+typedef BOOL (WINAPI * PFNWGLBINDVIDEODEVICENVPROC) (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList);
+typedef BOOL (WINAPI * PFNWGLQUERYCURRENTCONTEXTNVPROC) (int iAttribute, int *piValue);
+#ifdef WGL_WGLEXT_PROTOTYPES
+int WINAPI wglEnumerateVideoDevicesNV (HDC hDC, HVIDEOOUTPUTDEVICENV *phDeviceList);
+BOOL WINAPI wglBindVideoDeviceNV (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList);
+BOOL WINAPI wglQueryCurrentContextNV (int iAttribute, int *piValue);
+#endif
+#endif /* WGL_NV_present_video */
+
+#ifndef WGL_NV_render_depth_texture
+#define WGL_NV_render_depth_texture 1
+#define WGL_BIND_TO_TEXTURE_DEPTH_NV      0x20A3
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4
+#define WGL_DEPTH_TEXTURE_FORMAT_NV       0x20A5
+#define WGL_TEXTURE_DEPTH_COMPONENT_NV    0x20A6
+#define WGL_DEPTH_COMPONENT_NV            0x20A7
+#endif /* WGL_NV_render_depth_texture */
+
+#ifndef WGL_NV_render_texture_rectangle
+#define WGL_NV_render_texture_rectangle 1
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0
+#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1
+#define WGL_TEXTURE_RECTANGLE_NV          0x20A2
+#endif /* WGL_NV_render_texture_rectangle */
+
+#ifndef WGL_NV_swap_group
+#define WGL_NV_swap_group 1
+typedef BOOL (WINAPI * PFNWGLJOINSWAPGROUPNVPROC) (HDC hDC, GLuint group);
+typedef BOOL (WINAPI * PFNWGLBINDSWAPBARRIERNVPROC) (GLuint group, GLuint barrier);
+typedef BOOL (WINAPI * PFNWGLQUERYSWAPGROUPNVPROC) (HDC hDC, GLuint *group, GLuint *barrier);
+typedef BOOL (WINAPI * PFNWGLQUERYMAXSWAPGROUPSNVPROC) (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers);
+typedef BOOL (WINAPI * PFNWGLQUERYFRAMECOUNTNVPROC) (HDC hDC, GLuint *count);
+typedef BOOL (WINAPI * PFNWGLRESETFRAMECOUNTNVPROC) (HDC hDC);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglJoinSwapGroupNV (HDC hDC, GLuint group);
+BOOL WINAPI wglBindSwapBarrierNV (GLuint group, GLuint barrier);
+BOOL WINAPI wglQuerySwapGroupNV (HDC hDC, GLuint *group, GLuint *barrier);
+BOOL WINAPI wglQueryMaxSwapGroupsNV (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers);
+BOOL WINAPI wglQueryFrameCountNV (HDC hDC, GLuint *count);
+BOOL WINAPI wglResetFrameCountNV (HDC hDC);
+#endif
+#endif /* WGL_NV_swap_group */
+
+#ifndef WGL_NV_vertex_array_range
+#define WGL_NV_vertex_array_range 1
+typedef void *(WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
+typedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer);
+#ifdef WGL_WGLEXT_PROTOTYPES
+void *WINAPI wglAllocateMemoryNV (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
+void WINAPI wglFreeMemoryNV (void *pointer);
+#endif
+#endif /* WGL_NV_vertex_array_range */
+
+#ifndef WGL_NV_video_capture
+#define WGL_NV_video_capture 1
+DECLARE_HANDLE(HVIDEOINPUTDEVICENV);
+#define WGL_UNIQUE_ID_NV                  0x20CE
+#define WGL_NUM_VIDEO_CAPTURE_SLOTS_NV    0x20CF
+typedef BOOL (WINAPI * PFNWGLBINDVIDEOCAPTUREDEVICENVPROC) (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice);
+typedef UINT (WINAPI * PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC) (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList);
+typedef BOOL (WINAPI * PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+typedef BOOL (WINAPI * PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue);
+typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglBindVideoCaptureDeviceNV (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice);
+UINT WINAPI wglEnumerateVideoCaptureDevicesNV (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList);
+BOOL WINAPI wglLockVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+BOOL WINAPI wglQueryVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue);
+BOOL WINAPI wglReleaseVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice);
+#endif
+#endif /* WGL_NV_video_capture */
+
+#ifndef WGL_NV_video_output
+#define WGL_NV_video_output 1
+DECLARE_HANDLE(HPVIDEODEV);
+#define WGL_BIND_TO_VIDEO_RGB_NV          0x20C0
+#define WGL_BIND_TO_VIDEO_RGBA_NV         0x20C1
+#define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2
+#define WGL_VIDEO_OUT_COLOR_NV            0x20C3
+#define WGL_VIDEO_OUT_ALPHA_NV            0x20C4
+#define WGL_VIDEO_OUT_DEPTH_NV            0x20C5
+#define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV  0x20C6
+#define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV  0x20C7
+#define WGL_VIDEO_OUT_FRAME               0x20C8
+#define WGL_VIDEO_OUT_FIELD_1             0x20C9
+#define WGL_VIDEO_OUT_FIELD_2             0x20CA
+#define WGL_VIDEO_OUT_STACKED_FIELDS_1_2  0x20CB
+#define WGL_VIDEO_OUT_STACKED_FIELDS_2_1  0x20CC
+typedef BOOL (WINAPI * PFNWGLGETVIDEODEVICENVPROC) (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice);
+typedef BOOL (WINAPI * PFNWGLRELEASEVIDEODEVICENVPROC) (HPVIDEODEV hVideoDevice);
+typedef BOOL (WINAPI * PFNWGLBINDVIDEOIMAGENVPROC) (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer);
+typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOIMAGENVPROC) (HPBUFFERARB hPbuffer, int iVideoBuffer);
+typedef BOOL (WINAPI * PFNWGLSENDPBUFFERTOVIDEONVPROC) (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock);
+typedef BOOL (WINAPI * PFNWGLGETVIDEOINFONVPROC) (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglGetVideoDeviceNV (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice);
+BOOL WINAPI wglReleaseVideoDeviceNV (HPVIDEODEV hVideoDevice);
+BOOL WINAPI wglBindVideoImageNV (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer);
+BOOL WINAPI wglReleaseVideoImageNV (HPBUFFERARB hPbuffer, int iVideoBuffer);
+BOOL WINAPI wglSendPbufferToVideoNV (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock);
+BOOL WINAPI wglGetVideoInfoNV (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
+#endif
+#endif /* WGL_NV_video_output */
+
+#ifndef WGL_OML_sync_control
+#define WGL_OML_sync_control 1
+typedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc);
+typedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32 *numerator, INT32 *denominator);
+typedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder);
+typedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder);
+typedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc);
+typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc);
+#ifdef WGL_WGLEXT_PROTOTYPES
+BOOL WINAPI wglGetSyncValuesOML (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc);
+BOOL WINAPI wglGetMscRateOML (HDC hdc, INT32 *numerator, INT32 *denominator);
+INT64 WINAPI wglSwapBuffersMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder);
+INT64 WINAPI wglSwapLayerBuffersMscOML (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder);
+BOOL WINAPI wglWaitForMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc);
+BOOL WINAPI wglWaitForSbcOML (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc);
+#endif
+#endif /* WGL_OML_sync_control */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/tools/android/forwarder2/host_forwarder_main.cc b/tools/android/forwarder2/host_forwarder_main.cc
index 47f2252..a94a97b 100644
--- a/tools/android/forwarder2/host_forwarder_main.cc
+++ b/tools/android/forwarder2/host_forwarder_main.cc
@@ -98,7 +98,8 @@
         FROM_HERE, controllers_.release());
   }
 
-  void HandleRequest(const std::string& device_serial,
+  void HandleRequest(const std::string& adb_path,
+                     const std::string& device_serial,
                      int device_port,
                      int host_port,
                      scoped_ptr<Socket> client_socket) {
@@ -106,10 +107,9 @@
     InitOnce();
     thread_->message_loop_proxy()->PostTask(
         FROM_HERE,
-        base::Bind(
-            &HostControllersManager::HandleRequestOnInternalThread,
-            base::Unretained(this), device_serial, device_port, host_port,
-            base::Passed(&client_socket)));
+        base::Bind(&HostControllersManager::HandleRequestOnInternalThread,
+                   base::Unretained(this), adb_path, device_serial, device_port,
+                   host_port, base::Passed(&client_socket)));
   }
 
   bool has_failed() const { return has_failed_; }
@@ -152,11 +152,12 @@
         manager->controllers_.get());
   }
 
-  void HandleRequestOnInternalThread(const std::string& device_serial,
+  void HandleRequestOnInternalThread(const std::string& adb_path,
+                                     const std::string& device_serial,
                                      int device_port,
                                      int host_port,
                                      scoped_ptr<Socket> client_socket) {
-    const int adb_port = GetAdbPortForDevice(device_serial);
+    const int adb_port = GetAdbPortForDevice(adb_path, device_serial);
     if (adb_port < 0) {
       SendMessage(
           "ERROR: could not get adb port for device. You might need to add "
@@ -174,7 +175,7 @@
           !controller_did_exist ? "ERROR: could not unmap port" : "OK",
           client_socket.get());
 
-      RemoveAdbPortForDeviceIfNeeded(device_serial);
+      RemoveAdbPortForDeviceIfNeeded(adb_path, device_serial);
       return;
     }
     if (host_port < 0) {
@@ -217,7 +218,8 @@
                        linked_ptr<HostController>(host_controller.release())));
   }
 
-  void RemoveAdbPortForDeviceIfNeeded(const std::string& device_serial) {
+  void RemoveAdbPortForDeviceIfNeeded(const std::string& adb_path,
+                                      const std::string& device_serial) {
     base::hash_map<std::string, int>::const_iterator it =
         device_serial_to_adb_port_map_.find(device_serial);
     if (it == device_serial_to_adb_port_map_.end())
@@ -238,7 +240,8 @@
     const std::string serial_part = device_serial.empty() ?
         std::string() : std::string("-s ") + device_serial;
     const std::string command = base::StringPrintf(
-        "adb %s forward --remove tcp:%d",
+        "%s %s forward --remove tcp:%d",
+        adb_path.c_str(),
         serial_part.c_str(),
         port);
     const int ret = system(command.c_str());
@@ -260,7 +263,8 @@
     }
   }
 
-  int GetAdbPortForDevice(const std::string& device_serial) {
+  int GetAdbPortForDevice(const std::string adb_path,
+                          const std::string& device_serial) {
     base::hash_map<std::string, int>::const_iterator it =
         device_serial_to_adb_port_map_.find(device_serial);
     if (it != device_serial_to_adb_port_map_.end())
@@ -272,7 +276,8 @@
     const std::string serial_part = device_serial.empty() ?
         std::string() : std::string("-s ") + device_serial;
     const std::string command = base::StringPrintf(
-        "adb %s forward tcp:%d localabstract:chrome_device_forwarder",
+        "%s %s forward tcp:%d localabstract:chrome_device_forwarder",
+        adb_path.c_str(),
         serial_part.c_str(),
         port);
     LOG(INFO) << command;
@@ -301,7 +306,8 @@
 
 class ServerDelegate : public Daemon::ServerDelegate {
  public:
-  ServerDelegate() : has_failed_(false) {}
+  ServerDelegate(const std::string& adb_path)
+      : adb_path_(adb_path), has_failed_(false) {}
 
   bool has_failed() const {
     return has_failed_ || controllers_manager_.has_failed();
@@ -338,11 +344,12 @@
     int host_port;
     if (!pickle_it.ReadInt(&host_port))
       host_port = -1;
-    controllers_manager_.HandleRequest(
-        device_serial, device_port, host_port, client_socket.Pass());
+    controllers_manager_.HandleRequest(adb_path_, device_serial, device_port,
+                                       host_port, client_socket.Pass());
   }
 
  private:
+  std::string adb_path_;
   bool has_failed_;
   HostControllersManager controllers_manager_;
 
@@ -390,6 +397,7 @@
                "  --serial-id=[0-9A-Z]{16}]\n"
                "  --map DEVICE_PORT HOST_PORT\n"
                "  --unmap DEVICE_PORT\n"
+               "  --adb PATH_TO_ADB\n"
                "  --kill-server\n";
   exit(1);
 }
@@ -408,6 +416,7 @@
 int RunHostForwarder(int argc, char** argv) {
   base::CommandLine::Init(argc, argv);
   const base::CommandLine& cmd_line = *base::CommandLine::ForCurrentProcess();
+  std::string adb_path = "adb";
   bool kill_server = false;
 
   Pickle pickle;
@@ -432,11 +441,15 @@
     ExitWithUsage();
   }
 
+  if (cmd_line.HasSwitch("adb")) {
+    adb_path = cmd_line.GetSwitchValueASCII("adb");
+  }
+
   if (kill_server && args.size() > 0)
     ExitWithUsage();
 
   ClientDelegate client_delegate(pickle);
-  ServerDelegate daemon_delegate;
+  ServerDelegate daemon_delegate(adb_path);
   Daemon daemon(
       kLogFilePath, kDaemonIdentifier, &client_delegate, &daemon_delegate,
       &GetExitNotifierFD);
diff --git a/tools/linux/PRESUBMIT.py b/tools/linux/PRESUBMIT.py
index d4d8601..b29a8c4 100644
--- a/tools/linux/PRESUBMIT.py
+++ b/tools/linux/PRESUBMIT.py
@@ -4,8 +4,8 @@
 
 """Top-level presubmit script for linux.
 
-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
-details on the presubmit API built into gcl.
+See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
+for more details on the presubmit API built into depot_tools.
 """
 
 
diff --git a/tools/lsan/PRESUBMIT.py b/tools/lsan/PRESUBMIT.py
index 94b455a..1b7e971 100644
--- a/tools/lsan/PRESUBMIT.py
+++ b/tools/lsan/PRESUBMIT.py
@@ -4,7 +4,7 @@
 
 """
 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
-for more details on the presubmit API built into gcl.
+for more details on the presubmit API built into depot_tools.
 """
 
 import re
diff --git a/tools/valgrind/asan/third_party/README.chromium b/tools/valgrind/asan/third_party/README.chromium
index 37d03b5..5c363ea 100644
--- a/tools/valgrind/asan/third_party/README.chromium
+++ b/tools/valgrind/asan/third_party/README.chromium
@@ -1,6 +1,6 @@
 Name: asan_symbolize.py
 License: University of Illinois Open Source License.
-Version: 224710
+Version: r227327
 URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/scripts/asan_symbolize.py?view=co&content-type=text%2Fplain
 Security Critical: no
 
diff --git a/tools/valgrind/asan/third_party/asan_symbolize.py b/tools/valgrind/asan/third_party/asan_symbolize.py
index ffa57ee..59fceaa 100755
--- a/tools/valgrind/asan/third_party/asan_symbolize.py
+++ b/tools/valgrind/asan/third_party/asan_symbolize.py
@@ -11,11 +11,9 @@
 import bisect
 import getopt
 import os
-import pty
 import re
 import subprocess
 import sys
-import termios
 
 symbolizers = {}
 DEBUG = False
@@ -171,6 +169,9 @@
   output.  Uses pty to trick the child into providing unbuffered output.
   """
   def __init__(self, args, close_stderr=False):
+    # Local imports so that the script can start on Windows.
+    import pty
+    import termios
     pid, fd = pty.fork()
     if pid == 0:
       # We're the child. Transfer control to command.
@@ -341,17 +342,23 @@
 
 class SymbolizationLoop(object):
   def __init__(self, binary_name_filter=None, dsym_hint_producer=None):
-    # Used by clients who may want to supply a different binary name.
-    # E.g. in Chrome several binaries may share a single .dSYM.
-    self.binary_name_filter = binary_name_filter
-    self.dsym_hint_producer = dsym_hint_producer
-    self.system = os.uname()[0]
-    if self.system not in ['Linux', 'Darwin', 'FreeBSD']:
-      raise Exception('Unknown system')
-    self.llvm_symbolizers = {}
-    self.last_llvm_symbolizer = None
-    self.dsym_hints = set([])
-    self.frame_no = 0
+    if sys.platform == 'win32':
+      # ASan on Windows uses dbghelp.dll to symbolize in-process, which works
+      # even in sandboxed processes.  Nothing needs to be done here.
+      self.process_line = self.process_line_echo
+    else:
+      # Used by clients who may want to supply a different binary name.
+      # E.g. in Chrome several binaries may share a single .dSYM.
+      self.binary_name_filter = binary_name_filter
+      self.dsym_hint_producer = dsym_hint_producer
+      self.system = os.uname()[0]
+      if self.system not in ['Linux', 'Darwin', 'FreeBSD']:
+        raise Exception('Unknown system')
+      self.llvm_symbolizers = {}
+      self.last_llvm_symbolizer = None
+      self.dsym_hints = set([])
+      self.frame_no = 0
+      self.process_line = self.process_line_posix
 
   def symbolize_address(self, addr, binary, offset):
     # On non-Darwin (i.e. on platforms without .dSYM debug info) always use
@@ -405,14 +412,14 @@
 
   def process_logfile(self):
     self.frame_no = 0
-    while True:
-      line = logfile.readline()
-      if not line:
-        break
+    for line in logfile:
       processed = self.process_line(line)
       print '\n'.join(processed)
 
-  def process_line(self, line):
+  def process_line_echo(self, line):
+    return [line.rstrip()]
+
+  def process_line_posix(self, line):
     self.current_line = line.rstrip()
     #0 0x7f6e35cf2e45  (/blah/foo.so+0x11fe45)
     stack_trace_line_format = (
@@ -437,20 +444,23 @@
 
 
 if __name__ == '__main__':
-  parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter,
-  description='ASan symbolization script',
-  epilog='''Example of use:
-  asan_symbolize.py -c "$HOME/opt/cross/bin/arm-linux-gnueabi-" -s "$HOME/SymbolFiles" < asan.log''')
+  parser = argparse.ArgumentParser(
+      formatter_class=argparse.RawDescriptionHelpFormatter,
+      description='ASan symbolization script',
+      epilog='Example of use:\n'
+             'asan_symbolize.py -c "$HOME/opt/cross/bin/arm-linux-gnueabi-" '
+             '-s "$HOME/SymbolFiles" < asan.log')
   parser.add_argument('path_to_cut', nargs='*',
-    help='pattern to be cut from the result file path ')
+                      help='pattern to be cut from the result file path ')
   parser.add_argument('-d','--demangle', action='store_true',
-    help='demangle function names')
+                      help='demangle function names')
   parser.add_argument('-s', metavar='SYSROOT',
-    help='set path to sysroot for sanitized binaries')
+                      help='set path to sysroot for sanitized binaries')
   parser.add_argument('-c', metavar='CROSS_COMPILE',
-    help='set prefix for binutils')
-  parser.add_argument('-l','--logfile', default=sys.stdin, type=argparse.FileType('r'),
-    help='set log file name to parse, default is stdin')
+                      help='set prefix for binutils')
+  parser.add_argument('-l','--logfile', default=sys.stdin,
+                      type=argparse.FileType('r'),
+                      help='set log file name to parse, default is stdin')
   args = parser.parse_args()
   if args.path_to_cut:
     fix_filename_patterns = args.path_to_cut
diff --git a/tools/valgrind/drmemory/PRESUBMIT.py b/tools/valgrind/drmemory/PRESUBMIT.py
index 0ff7618..2e56b63 100644
--- a/tools/valgrind/drmemory/PRESUBMIT.py
+++ b/tools/valgrind/drmemory/PRESUBMIT.py
@@ -3,7 +3,7 @@
 # found in the LICENSE file.
 """
 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
-for more details on the presubmit API built into gcl.
+for more details on the presubmit API built into depot_tools.
 """
 
 
diff --git a/tools/valgrind/drmemory/suppressions.txt b/tools/valgrind/drmemory/suppressions.txt
index f9a0d36..876d6f7 100644
--- a/tools/valgrind/drmemory/suppressions.txt
+++ b/tools/valgrind/drmemory/suppressions.txt
@@ -711,8 +711,3 @@
 KERNELBASE.dll!OpenProcess
 base.dll!base::Process::OpenWithExtraPriviles
 content.dll!content::BrowserMessageFilter::Internal::OnChannelConnected
-...
-ipc.dll!IPC::ChannelWin::HandleInternalMessage
-ipc.dll!IPC::internal::ChannelReader::DispatchInputData
-ipc.dll!IPC::internal::ChannelReader::AsyncReadComplete
-ipc.dll!IPC::ChannelWin::OnIOCompleted
diff --git a/tools/valgrind/drmemory/suppressions_full.txt b/tools/valgrind/drmemory/suppressions_full.txt
index 144e5b5..2036d21 100644
--- a/tools/valgrind/drmemory/suppressions_full.txt
+++ b/tools/valgrind/drmemory/suppressions_full.txt
@@ -1893,3 +1893,7 @@
 name=bug_446256
 *!`anonymous namespace'::GraphicsContextTest_trackDisplayListRecording_Test::TestBody
 *!testing::internal::HandleExceptionsInMethodIfSupported<>
+
+UNINITIALIZED READ
+name=bug_399842
+skia.dll!S32A_Opaque_BlitRow32_SSE4
diff --git a/tools/valgrind/drmemory_analyze.py b/tools/valgrind/drmemory_analyze.py
index 915c601..29fc0ed 100755
--- a/tools/valgrind/drmemory_analyze.py
+++ b/tools/valgrind/drmemory_analyze.py
@@ -40,13 +40,18 @@
     self._suppression = "\n".join(supp_lines)
 
   def __str__(self):
-    output = self._report + "\n"
+    output = ""
+    output += "### BEGIN MEMORY TOOL REPORT (error hash=#%016X#)\n" % \
+        self.ErrorHash()
+    output += self._report + "\n"
     if self._testcase:
       output += "The report came from the `%s` test.\n" % self._testcase
     output += "Suppression (error hash=#%016X#):\n" % self.ErrorHash()
     output += ("  For more info on using suppressions see "
         "http://dev.chromium.org/developers/how-tos/using-drmemory#TOC-Suppressing-error-reports-from-the-\n")
     output += "{\n%s\n}\n" % self._suppression
+    output += "### END MEMORY TOOL REPORT (error hash=#%016X#)\n" % \
+        self.ErrorHash()
     return output
 
   # This is a device-independent hash identifying the suppression.
diff --git a/tools/valgrind/gtest_exclude/cc_unittests.gtest-drmemory.txt b/tools/valgrind/gtest_exclude/cc_unittests.gtest-drmemory.txt
deleted file mode 100644
index 8fd7cbd..0000000
--- a/tools/valgrind/gtest_exclude/cc_unittests.gtest-drmemory.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# http://crbug.com/451988
-LayerTreeHostPictureTestTwinLayer.RunSingleThread_DirectRenderer_ImplSidePaint
diff --git a/tools/valgrind/gtest_exclude/content_browsertests.gtest-drmemory.txt b/tools/valgrind/gtest_exclude/content_browsertests.gtest-drmemory.txt
index 0942883..d283375 100644
--- a/tools/valgrind/gtest_exclude/content_browsertests.gtest-drmemory.txt
+++ b/tools/valgrind/gtest_exclude/content_browsertests.gtest-drmemory.txt
@@ -22,6 +22,3 @@
 
 # http://crbug.com/293125
 WebRtcBrowserTest.CanMakeEmptyCallThenAddStreamsAndRenegotiate
-
-# http://crbug.com/451983
-DumpAccessibilityEventsTest.AccessibilityEventsTextChanged
diff --git a/tools/valgrind/gtest_exclude/net_unittests.gtest-drmemory.txt b/tools/valgrind/gtest_exclude/net_unittests.gtest-drmemory.txt
deleted file mode 100644
index 9bbc7d1..0000000
--- a/tools/valgrind/gtest_exclude/net_unittests.gtest-drmemory.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-# Flaky. crbug.com/451999
-WebSocketEndpointLockManagerTest.UnlockEndpointIsDelayed
diff --git a/tools/valgrind/gtest_exclude/net_unittests.gtest.txt b/tools/valgrind/gtest_exclude/net_unittests.gtest.txt
index 85dbc32..03c0fed 100644
--- a/tools/valgrind/gtest_exclude/net_unittests.gtest.txt
+++ b/tools/valgrind/gtest_exclude/net_unittests.gtest.txt
@@ -15,6 +15,3 @@
 # Flaky. http://crbug.com/237450
 DiskCacheBackendTest.SimpleCacheAppCacheOnlyDoomAll
 DiskCacheBackendTest.SimpleCacheDoomAll
-
-# Flaky. crbug.com/451999
-WebSocketEndpointLockManagerTest.UnlockEndpointIsDelayed
diff --git a/tools/valgrind/memcheck/PRESUBMIT.py b/tools/valgrind/memcheck/PRESUBMIT.py
index 64683d5..99be834 100644
--- a/tools/valgrind/memcheck/PRESUBMIT.py
+++ b/tools/valgrind/memcheck/PRESUBMIT.py
@@ -4,7 +4,7 @@
 
 """
 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
-for more details on the presubmit API built into gcl.
+for more details on the presubmit API built into depot_tools.
 """
 
 import re
diff --git a/tools/valgrind/memcheck/suppressions.txt b/tools/valgrind/memcheck/suppressions.txt
index e73272c..579b481 100644
--- a/tools/valgrind/memcheck/suppressions.txt
+++ b/tools/valgrind/memcheck/suppressions.txt
@@ -1324,17 +1324,14 @@
    Memcheck:Leak
    fun:_Znw*
    ...
-   fun:_ZN15tracked_objects10ThreadData19TallyABirthIfActiveERKNS_8LocationE
-   fun:_ZN4base12TrackingInfoC?ERKN15tracked_objects8LocationENS_9TimeTicksE
+   fun:*tracked_objects*ThreadData*TallyABirth*
 }
 {
    bug_104806_b
    Memcheck:Leak
    fun:_Znw*
    ...
-   fun:_ZNSt3mapIPKN15tracked_objects6BirthsENS0_9DeathDataESt4lessIS3_ESaISt4pairIKS3_S4_EEEixERS8_
-   fun:_ZN15tracked_objects10ThreadData11TallyADeathERKNS_6BirthsEii
-   fun:_ZN15tracked_objects10ThreadData32TallyRunOnWorkerThreadIfTrackingEPKNS_6BirthsERKNS_11TrackedTimeES6_S6_
+   fun:*tracked_objects*ThreadData*TallyADeath*
 }
 {
    bug_105744b
@@ -1364,8 +1361,8 @@
    bug_106912
    Memcheck:Leak
    ...
-   fun:_ZN15tracked_objects10ThreadData23InitializeThreadContextERKSs
-   fun:_ZN4base14PlatformThread7SetNameEPKc
+   fun:*tracked_objects*ThreadData*InitializeThreadContext*
+   fun:*base*PlatformThread*SetName*
 }
 {
    bug_111669
@@ -3585,17 +3582,6 @@
    fun:_ZN8app_list4test17SearchHistoryTest5SetUpEv
 }
 {
-   bug_450226
-   Memcheck:Leak
-   fun:_Znw*
-   ...
-   fun:_ZN7content19VideoCaptureManager16QueueStartDeviceEiPNS0_11DeviceEntryERKN5media18VideoCaptureParamsE
-   fun:_ZN7content19VideoCaptureManager21StartCaptureForClientEiRKN5media18VideoCaptureParamsEiNS_24VideoCaptureControllerIDEPNS_34VideoCaptureControllerEventHandlerERKN4base8CallbackIFvRKNS8_7WeakPtrINS_22VideoCaptureControllerEEEEEE
-   fun:_ZN7content16VideoCaptureHost14OnStartCaptureEiiRKN5media18VideoCaptureParamsE
-   fun:_ZN7content20VideoCaptureHostTest16StartStopCaptureEv
-   fun:_ZN7content47VideoCaptureHostTest_StopWhileStartPending_Test8TestBodyEv
-}
-{
    bug_450228
    Memcheck:Leak
    fun:_Znw*
diff --git a/tools/valgrind/memcheck/suppressions_mac.txt b/tools/valgrind/memcheck/suppressions_mac.txt
index 2d484d0..c817091 100644
--- a/tools/valgrind/memcheck/suppressions_mac.txt
+++ b/tools/valgrind/memcheck/suppressions_mac.txt
@@ -244,20 +244,6 @@
    fun:_ZN3gfx41RenderTextTest_HarfBuzz_RunDirection_Test8TestBodyEv
 }
 {
-   bug_416957
-   Memcheck:Leak
-   fun:_Znw*
-   fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKPKN15tracked_objects6BirthsENS3_9DeathDataEEEE8allocateEmPKv
-   fun:_ZNSt8_Rb_treeIPKN15tracked_objects6BirthsESt4pairIKS3_NS0_9DeathDataEESt10_Select1stIS7_ESt4lessIS3_ESaIS7_EE11_M_get_nodeEv
-   fun:_ZNSt8_Rb_treeIPKN15tracked_objects6BirthsESt4pairIKS3_NS0_9DeathDataEESt10_Select1stIS7_ESt4lessIS3_ESaIS7_EE14_M_create_nodeERKS7_
-   fun:_ZNSt8_Rb_treeIPKN15tracked_objects6BirthsESt4pairIKS3_NS0_9DeathDataEESt10_Select1stIS7_ESt4lessIS3_ESaIS7_EE9_M_insertEPSt18_Rb_tree_node_baseSF_RKS7_
-   fun:_ZNSt8_Rb_treeIPKN15tracked_objects6BirthsESt4pairIKS3_NS0_9DeathDataEESt10_Select1stIS7_ESt4lessIS3_ESaIS7_EE16_M_insert_uniqueESt17_Rb_tree_iteratorIS7_ERKS7_
-   fun:_ZNSt3mapIPKN15tracked_objects6BirthsENS0_9DeathDataESt4lessIS3_ESaISt4pairIKS3_S4_EEE6insertESt17_Rb_tree_iteratorIS9_ERKS9_
-   fun:_ZNSt3mapIPKN15tracked_objects6BirthsENS0_9DeathDataESt4lessIS3_ESaISt4pairIKS3_S4_EEEixERS8_
-   fun:_ZN15tracked_objects10ThreadData11TallyADeathERKNS_6BirthsEiRKNS_13TaskStopwatchE
-   fun:_ZN15tracked_objects10ThreadData31TallyRunOnNamedThreadIfTrackingERKN4base12TrackingInfoERKNS_13TaskStopwatchE
-}
-{
    bug_431906
    Memcheck:Leak
    fun:_Znw*
diff --git a/tools/valgrind/memcheck_analyze.py b/tools/valgrind/memcheck_analyze.py
index ceeedef..a5c78c1 100755
--- a/tools/valgrind/memcheck_analyze.py
+++ b/tools/valgrind/memcheck_analyze.py
@@ -231,6 +231,9 @@
     ''' Pretty print the type and backtrace(s) of this specific error,
         including suppression (which is just a mangled backtrace).'''
     output = ""
+    output += "\n" # Make sure the ### is at the beginning of line.
+    output += "### BEGIN MEMORY TOOL REPORT (error hash=#%016X#)\n" % \
+        self.ErrorHash()
     if (self._commandline):
       output += self._commandline + "\n"
 
@@ -327,6 +330,8 @@
         supplines[frame] = "*".join(m.groups())
 
     output += "\n".join(supplines) + "\n"
+    output += "### END MEMORY TOOL REPORT (error hash=#%016X#)\n" % \
+        self.ErrorHash()
 
     return output
 
diff --git a/tools/valgrind/valgrind_test.py b/tools/valgrind/valgrind_test.py
index 5576ed3..9f132c8 100644
--- a/tools/valgrind/valgrind_test.py
+++ b/tools/valgrind/valgrind_test.py
@@ -380,12 +380,6 @@
 
     # The Valgrind command is constructed.
 
-    # Valgrind doesn't play nice with the Chrome sandbox.  Empty this env var
-    # set by runtest.py to disable the sandbox.
-    if os.environ.get("CHROME_DEVEL_SANDBOX", None):
-      logging.info("Removing CHROME_DEVEL_SANDBOX from environment")
-      os.environ["CHROME_DEVEL_SANDBOX"] = ''
-
     # Handle --indirect_webkit_layout separately.
     if self._options.indirect_webkit_layout:
       # Need to create the wrapper before modifying |proc|.
@@ -718,6 +712,9 @@
     # disable leak scan for now
     proc += ["-no_count_leaks", "-no_leak_scan"]
 
+    # disable warnings about unaddressable prefetches
+    proc += ["-no_check_prefetch"]
+
     # crbug.com/413215, no heap mismatch check for Windows release build binary
     if common.IsWindows() and "Release" in self._options.build_dir:
         proc += ["-no_check_delete_mismatch"]
diff --git a/ui/gl/BUILD.gn b/ui/gl/BUILD.gn
index bdd7c98..bbd9363 100644
--- a/ui/gl/BUILD.gn
+++ b/ui/gl/BUILD.gn
@@ -26,6 +26,7 @@
     "android/surface_texture.h",
     "android/surface_texture_listener.cc",
     "android/surface_texture_listener.h",
+    "gl_bindings.cc",
     "gl_bindings.h",
     "gl_bindings_autogen_gl.cc",
     "gl_bindings_autogen_gl.h",
diff --git a/ui/gl/android/surface_texture.cc b/ui/gl/android/surface_texture.cc
index 3f55cbd..bf9012a 100644
--- a/ui/gl/android/surface_texture.cc
+++ b/ui/gl/android/surface_texture.cc
@@ -15,8 +15,7 @@
 #include "ui/gl/android/surface_texture_listener.h"
 #include "ui/gl/gl_bindings.h"
 
-// TODO(boliu): Remove this method when when we move off ICS. See
-// http://crbug.com/161864.
+// TODO(boliu): Remove this method when Chromium stops supporting ICS.
 bool GlContextMethodsAvailable() {
   bool available = base::android::BuildInfo::GetInstance()->sdk_int() >= 16;
   if (!available)
diff --git a/ui/gl/generate_bindings.py b/ui/gl/generate_bindings.py
index 7a339b6..5943bb6 100755
--- a/ui/gl/generate_bindings.py
+++ b/ui/gl/generate_bindings.py
@@ -12,6 +12,7 @@
 import platform
 import sys
 from subprocess import call
+from collections import namedtuple
 
 HEADER_PATHS = [
   '../../third_party/khronos',
@@ -20,22 +21,19 @@
   '../../gpu',
 ]
 
-"""In case there are multiple versions of the same function, one that's listed
-first takes priority if its conditions are met. If the function is an extension
-function, finding the extension from the extension string is a condition for
-binding it. The last version of the function is treated as a fallback option in
-case no other versions were bound, so a non-null function pointer in the
-bindings does not guarantee that the function is supported.
+UNCONDITIONALLY_BOUND_EXTENSIONS = set([
+  'WGL_ARB_extensions_string',
+  'WGL_EXT_extensions_string',
+  'GL_CHROMIUM_gles_depth_binding_hack', # crbug.com/448206
+])
 
-Function binding conditions can be specified manually by supplying a versions
+"""Function binding conditions can be specified manually by supplying a versions
 array instead of the names array. Each version has the following keys:
    name: Mandatory. Name of the function. Multiple versions can have the same
          name but different conditions.
-   gl_versions: List of GL versions where the function is found.
-   extensions: Extensions where the function is found. If not specified, the
-               extensions are determined based on GL header files.
-               If the function exists in an extension header, you may specify
-               an empty array to prevent making that a condition for binding.
+   extensions: Extra Extensions for which the function is bound. Only needed
+               in some cases where the extension cannot be parsed from the
+               headers.
 
 By default, the function gets its name from the first name in its names or
 versions array. This can be overridden by supplying a 'known_as' key.
@@ -48,15 +46,15 @@
   'names': ['glAttachShader'],
   'arguments': 'GLuint program, GLuint shader', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glBeginQuery',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glBeginQuery' }],
   'arguments': 'GLenum target, GLuint id', },
 { 'return_type': 'void',
-  'names': ['glBeginQueryARB', 'glBeginQueryEXT'],
+  'versions': [{ 'name': 'glBeginQueryARB' },
+               { 'name': 'glBeginQueryEXT',
+                 'extensions': ['GL_EXT_occlusion_query_boolean'] }],
   'arguments': 'GLenum target, GLuint id', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glBeginTransformFeedback',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glBeginTransformFeedback' }],
   'arguments': 'GLenum primitiveMode', },
 { 'return_type': 'void',
   'names': ['glBindAttribLocation'],
@@ -65,12 +63,10 @@
   'names': ['glBindBuffer'],
   'arguments': 'GLenum target, GLuint buffer', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glBindBufferBase',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glBindBufferBase' }],
   'arguments': 'GLenum target, GLuint index, GLuint buffer', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glBindBufferRange',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glBindBufferRange' }],
   'arguments': 'GLenum target, GLuint index, GLuint buffer, GLintptr offset, '
                'GLsizeiptr size', },
 { 'return_type': 'void',
@@ -87,22 +83,18 @@
   'names': ['glBindRenderbufferEXT', 'glBindRenderbuffer'],
   'arguments': 'GLenum target, GLuint renderbuffer', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glBindSampler',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],  # GL 3.2 or higher.
+  'versions': [{ 'name': 'glBindSampler' }],
   'arguments': 'GLuint unit, GLuint sampler', },
 { 'return_type': 'void',
   'names': ['glBindTexture'],
   'arguments': 'GLenum target, GLuint texture', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glBindTransformFeedback',
-                 'gl_versions': ['gl4', 'es3'] }],
+  'versions': [{ 'name': 'glBindTransformFeedback' }],
   'arguments': 'GLenum target, GLuint id', },
 { 'return_type': 'void',
   'known_as': 'glBindVertexArrayOES',
   'versions': [{ 'name': 'glBindVertexArray',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] },
-               { 'name': 'glBindVertexArray',
-                 'extensions': ['GL_ARB_vertex_array_object'] },
+                 'extensions': ['GL_ARB_vertex_array_object'], },
                { 'name': 'glBindVertexArrayOES' },
                { 'name': 'glBindVertexArrayAPPLE',
                  'extensions': ['GL_APPLE_vertex_array_object'] }],
@@ -164,27 +156,24 @@
   'names': ['glClear'],
   'arguments': 'GLbitfield mask', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glClearBufferfi',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glClearBufferfi' }],
   'arguments': 'GLenum buffer, GLint drawbuffer, const GLfloat depth, '
                'GLint stencil', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glClearBufferfv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glClearBufferfv' }],
   'arguments': 'GLenum buffer, GLint drawbuffer, const GLfloat* value', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glClearBufferiv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glClearBufferiv' }],
   'arguments': 'GLenum buffer, GLint drawbuffer, const GLint* value', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glClearBufferuiv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glClearBufferuiv' }],
   'arguments': 'GLenum buffer, GLint drawbuffer, const GLuint* value', },
 { 'return_type': 'void',
   'names': ['glClearColor'],
   'arguments': 'GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha', },
 { 'return_type': 'void',
-  'names': ['glClearDepth'],
+  'versions': [{ 'name': 'glClearDepth',
+                 'extensions': ['GL_CHROMIUM_gles_depth_binding_hack'] }],
   'arguments': 'GLclampd depth', },
 { 'return_type': 'void',
   'names': ['glClearDepthf'],
@@ -193,7 +182,8 @@
   'names': ['glClearStencil'],
   'arguments': 'GLint s', },
 { 'return_type': 'GLenum',
-  'names': ['glClientWaitSync'],
+  'versions': [{ 'name': 'glClientWaitSync',
+                 'extensions': ['GL_ARB_sync'] }],
   'arguments': 'GLsync sync, GLbitfield flags, GLuint64 timeout', },
 { 'return_type': 'void',
   'names': ['glColorMask'],
@@ -208,8 +198,7 @@
       'GLenum target, GLint level, GLenum internalformat, GLsizei width, '
       'GLsizei height, GLint border, GLsizei imageSize, const void* data', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glCompressedTexImage3D',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glCompressedTexImage3D' }],
   'arguments':
       'GLenum target, GLint level, GLenum internalformat, GLsizei width, '
       'GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, '
@@ -222,15 +211,13 @@
       'const void* data', },
 # TODO(zmo): wait for MOCK_METHOD11.
 # { 'return_type': 'void',
-#   'versions': [{ 'name': 'glCompressedTexSubImage3D',
-#                  'gl_versions': ['gl3', 'gl4', 'es3'] }],
+#   'versions': [{ 'name': 'glCompressedTexSubImage3D' }],
 #   'arguments':
 #       'GLenum target, GLint level, GLint xoffset, GLint yoffset, '
 #       'GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, '
 #       'GLenum format, GLsizei imageSize, const void* data', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glCopyBufferSubData',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],  # GL 3.1 or higher.
+  'versions': [{ 'name': 'glCopyBufferSubData' }],
   'arguments':
       'GLenum readTarget, GLenum writeTarget, GLintptr readOffset, '
       'GLintptr writeOffset, GLsizeiptr size', },
@@ -245,8 +232,7 @@
       'GLenum target, GLint level, GLint xoffset, '
       'GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glCopyTexSubImage3D',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glCopyTexSubImage3D' }],
   'arguments':
       'GLenum target, GLint level, GLint xoffset, GLint yoffset, '
       'GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height', },
@@ -260,7 +246,8 @@
   'names': ['glCullFace'],
   'arguments': 'GLenum mode', },
 { 'return_type': 'void',
-  'names': ['glDeleteBuffersARB', 'glDeleteBuffers'],
+  'names': ['glDeleteBuffers'],
+  'known_as': 'glDeleteBuffersARB',
   'arguments': 'GLsizei n, const GLuint* buffers', },
 { 'return_type': 'void',
   'known_as': 'glDeleteFencesAPPLE',
@@ -277,38 +264,36 @@
   'names': ['glDeleteProgram'],
   'arguments': 'GLuint program', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glDeleteQueries',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glDeleteQueries' }],
   'arguments': 'GLsizei n, const GLuint* ids', },
 { 'return_type': 'void',
-  'names': ['glDeleteQueriesARB', 'glDeleteQueriesEXT'],
+  'versions': [{ 'name': 'glDeleteQueriesARB'},
+               { 'name': 'glDeleteQueriesEXT',
+                 'extensions': ['GL_EXT_occlusion_query_boolean'] }],
   'arguments': 'GLsizei n, const GLuint* ids', },
 { 'return_type': 'void',
   'names': ['glDeleteRenderbuffersEXT', 'glDeleteRenderbuffers'],
   'arguments': 'GLsizei n, const GLuint* renderbuffers', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glDeleteSamplers',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],  # GL 3.2 or higher.
+  'versions': [{ 'name': 'glDeleteSamplers' }],
   'arguments': 'GLsizei n, const GLuint* samplers', },
 { 'return_type': 'void',
   'names': ['glDeleteShader'],
   'arguments': 'GLuint shader', },
 { 'return_type': 'void',
-  'names': ['glDeleteSync'],
+  'versions': [{ 'name': 'glDeleteSync',
+                 'extensions': ['GL_ARB_sync'] }],
   'arguments': 'GLsync sync', },
 { 'return_type': 'void',
   'names': ['glDeleteTextures'],
   'arguments': 'GLsizei n, const GLuint* textures', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glDeleteTransformFeedbacks',
-                 'gl_versions': ['gl4', 'es3'] }],
+  'versions': [{ 'name': 'glDeleteTransformFeedbacks' }],
   'arguments': 'GLsizei n, const GLuint* ids', },
 { 'return_type': 'void',
   'known_as': 'glDeleteVertexArraysOES',
   'versions': [{ 'name': 'glDeleteVertexArrays',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] },
-               { 'name': 'glDeleteVertexArrays',
-                 'extensions': ['GL_ARB_vertex_array_object'] },
+                 'extensions': ['GL_ARB_vertex_array_object'], },
                { 'name': 'glDeleteVertexArraysOES' },
                { 'name': 'glDeleteVertexArraysAPPLE',
                  'extensions': ['GL_APPLE_vertex_array_object'] }],
@@ -320,7 +305,8 @@
   'names': ['glDepthMask'],
   'arguments': 'GLboolean flag', },
 { 'return_type': 'void',
-  'names': ['glDepthRange'],
+ 'versions': [{ 'name': 'glDepthRange',
+                'extensions': ['GL_CHROMIUM_gles_depth_binding_hack'] }],
   'arguments': 'GLclampd zNear, GLclampd zFar', },
 { 'return_type': 'void',
   'names': ['glDepthRangef'],
@@ -365,8 +351,7 @@
       'GLenum mode, GLsizei count, GLenum type, const void* indices, '
       'GLsizei primcount', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glDrawRangeElements',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glDrawRangeElements' }],
   'arguments': 'GLenum mode, GLuint start, GLuint end, GLsizei count, '
                'GLenum type, const void* indices', },
 { 'return_type': 'void',
@@ -382,18 +367,19 @@
   'names': ['glEnableVertexAttribArray'],
   'arguments': 'GLuint index', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glEndQuery',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glEndQuery' }],
   'arguments': 'GLenum target', },
 { 'return_type': 'void',
-  'names': ['glEndQueryARB', 'glEndQueryEXT'],
+  'versions': [{ 'name': 'glEndQueryARB' },
+               { 'name': 'glEndQueryEXT',
+                 'extensions': ['GL_EXT_occlusion_query_boolean'] }],
   'arguments': 'GLenum target', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glEndTransformFeedback',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glEndTransformFeedback' }],
   'arguments': 'void', },
 { 'return_type': 'GLsync',
-  'names': ['glFenceSync'],
+  'versions': [{ 'name': 'glFenceSync',
+                 'extensions': ['GL_ARB_sync'] }],
   'arguments': 'GLenum condition, GLbitfield flags', },
 { 'return_type': 'void',
   'names': ['glFinish'],
@@ -433,15 +419,15 @@
       'GLenum target, GLenum attachment, GLenum textarget, GLuint texture, '
       'GLint level, GLsizei samples', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glFramebufferTextureLayer',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glFramebufferTextureLayer' }],
   'arguments': 'GLenum target, GLenum attachment, GLuint texture, GLint level, '
                'GLint layer', },
 { 'return_type': 'void',
   'names': ['glFrontFace'],
   'arguments': 'GLenum mode', },
 { 'return_type': 'void',
-  'names': ['glGenBuffersARB', 'glGenBuffers'],
+  'names': ['glGenBuffers'],
+  'known_as': 'glGenBuffersARB',
   'arguments': 'GLsizei n, GLuint* buffers', },
 { 'return_type': 'void',
   'names': ['glGenerateMipmapEXT', 'glGenerateMipmap'],
@@ -458,32 +444,29 @@
   'names': ['glGenFramebuffersEXT', 'glGenFramebuffers'],
   'arguments': 'GLsizei n, GLuint* framebuffers', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glGenQueries',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glGenQueries' }],
   'arguments': 'GLsizei n, GLuint* ids', },
 { 'return_type': 'void',
-  'names': ['glGenQueriesARB', 'glGenQueriesEXT'],
+  'versions': [{ 'name': 'glGenQueriesARB', },
+               { 'name' : 'glGenQueriesEXT',
+                 'extensions': ['GL_EXT_occlusion_query_boolean'] }],
   'arguments': 'GLsizei n, GLuint* ids', },
 { 'return_type': 'void',
   'names': ['glGenRenderbuffersEXT', 'glGenRenderbuffers'],
   'arguments': 'GLsizei n, GLuint* renderbuffers', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glGenSamplers',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],  # GL 3.2 or higher.
+  'versions': [{ 'name': 'glGenSamplers' }],
   'arguments': 'GLsizei n, GLuint* samplers', },
 { 'return_type': 'void',
   'names': ['glGenTextures'],
   'arguments': 'GLsizei n, GLuint* textures', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glGenTransformFeedbacks',
-                 'gl_versions': ['gl4', 'es3'] }],
+  'versions': [{ 'name': 'glGenTransformFeedbacks' }],
   'arguments': 'GLsizei n, GLuint* ids', },
 { 'return_type': 'void',
   'known_as': 'glGenVertexArraysOES',
   'versions': [{ 'name': 'glGenVertexArrays',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] },
-               { 'name': 'glGenVertexArrays',
-                 'extensions': ['GL_ARB_vertex_array_object'] },
+                 'extensions': ['GL_ARB_vertex_array_object'], },
                { 'name': 'glGenVertexArraysOES' },
                { 'name': 'glGenVertexArraysAPPLE',
                  'extensions': ['GL_APPLE_vertex_array_object'] }],
@@ -499,18 +482,15 @@
       'GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, '
       'GLint* size, GLenum* type, char* name', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glGetActiveUniformBlockiv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],  # GL 3.1 or higher.
+  'versions': [{ 'name': 'glGetActiveUniformBlockiv' }],
   'arguments': 'GLuint program, GLuint uniformBlockIndex, GLenum pname, '
                'GLint* params', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glGetActiveUniformBlockName',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],  # GL 3.1 or higher.
+  'versions': [{ 'name': 'glGetActiveUniformBlockName' }],
   'arguments': 'GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, '
                'GLsizei* length, char* uniformBlockName', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glGetActiveUniformsiv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],  # GL 3.1 or higher.
+  'versions': [{ 'name': 'glGetActiveUniformsiv' }],
   'arguments': 'GLuint program, GLsizei uniformCount, '
                'const GLuint* uniformIndices, GLenum pname, GLint* params', },
 { 'return_type': 'void',
@@ -539,8 +519,7 @@
   'names': ['glGetFloatv'],
   'arguments': 'GLenum pname, GLfloat* params', },
 { 'return_type': 'GLint',
-  'versions': [{ 'name': 'glGetFragDataLocation',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glGetFragDataLocation' }],
   'arguments': 'GLuint program, const char* name', },
 { 'return_type': 'void',
   'names': ['glGetFramebufferAttachmentParameterivEXT',
@@ -554,30 +533,26 @@
             'glGetGraphicsResetStatus'],
   'arguments': 'void', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glGetInteger64i_v',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],  # GL 3.2 or higher.
+  'versions': [{ 'name': 'glGetInteger64i_v' }],
   'arguments': 'GLenum target, GLuint index, GLint64* data', },
 { 'return_type': 'void',
   'names': ['glGetInteger64v'],
   'arguments': 'GLenum pname, GLint64* params', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glGetIntegeri_v',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glGetIntegeri_v' }],
   'arguments': 'GLenum target, GLuint index, GLint* data', },
 { 'return_type': 'void',
   'names': ['glGetIntegerv'],
   'arguments': 'GLenum pname, GLint* params', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glGetInternalformativ',
-                 'gl_versions': ['gl4', 'es3'] }],  # GL 4.2 or higher.
+  'versions': [{ 'name': 'glGetInternalformativ' }],
   'arguments': 'GLenum target, GLenum internalformat, GLenum pname, '
                'GLsizei bufSize, GLint* params', },
 { 'return_type': 'void',
   'known_as': 'glGetProgramBinary',
   'versions': [{ 'name': 'glGetProgramBinaryOES' },
                { 'name': 'glGetProgramBinary',
-                 'extensions': ['GL_ARB_get_program_binary'] },
-               { 'name': 'glGetProgramBinary' }],
+                 'extensions': ['GL_ARB_get_program_binary'] }],
   'arguments': 'GLuint program, GLsizei bufSize, GLsizei* length, '
                'GLenum* binaryFormat, GLvoid* binary' },
 { 'return_type': 'void',
@@ -588,42 +563,45 @@
   'names': ['glGetProgramiv'],
   'arguments': 'GLuint program, GLenum pname, GLint* params', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glGetQueryiv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glGetQueryiv' }],
   'arguments': 'GLenum target, GLenum pname, GLint* params', },
 { 'return_type': 'void',
-  'names': ['glGetQueryivARB', 'glGetQueryivEXT'],
+  'versions': [{ 'name': 'glGetQueryivARB' },
+               { 'name': 'glGetQueryivEXT',
+                 'extensions': ['GL_EXT_occlusion_query_boolean'] }],
   'arguments': 'GLenum target, GLenum pname, GLint* params', },
 { 'return_type': 'void',
-  'names': ['glGetQueryObjecti64v'],
+  'versions': [{ 'name': 'glGetQueryObjecti64v',
+                 'extensions': ['GL_ARB_timer_query'] },
+               { 'name': 'glGetQueryObjecti64vEXT' }],
   'arguments': 'GLuint id, GLenum pname, GLint64* params', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glGetQueryObjectiv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'names': ['glGetQueryObjectiv'],
   'arguments': 'GLuint id, GLenum pname, GLint* params', },
 { 'return_type': 'void',
   'names': ['glGetQueryObjectivARB', 'glGetQueryObjectivEXT'],
   'arguments': 'GLuint id, GLenum pname, GLint* params', },
 { 'return_type': 'void',
-  'names': ['glGetQueryObjectui64v', 'glGetQueryObjectui64vEXT'],
+  'versions': [{ 'name': 'glGetQueryObjectui64v',
+                 'extensions': ['GL_ARB_timer_query'] },
+               { 'name': 'glGetQueryObjectui64vEXT' }],
   'arguments': 'GLuint id, GLenum pname, GLuint64* params', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glGetQueryObjectuiv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glGetQueryObjectuiv' }],
   'arguments': 'GLuint id, GLenum pname, GLuint* params', },
 { 'return_type': 'void',
-  'names': ['glGetQueryObjectuivARB', 'glGetQueryObjectuivEXT'],
+  'versions': [{ 'name': 'glGetQueryObjectuivARB' },
+               { 'name': 'glGetQueryObjectuivEXT',
+                 'extensions': ['GL_EXT_occlusion_query_boolean'] }],
   'arguments': 'GLuint id, GLenum pname, GLuint* params', },
 { 'return_type': 'void',
   'names': ['glGetRenderbufferParameterivEXT', 'glGetRenderbufferParameteriv'],
   'arguments': 'GLenum target, GLenum pname, GLint* params', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glGetSamplerParameterfv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],  # GL 3.2 or higher.
+  'versions': [{ 'name': 'glGetSamplerParameterfv' }],
   'arguments': 'GLuint sampler, GLenum pname, GLfloat* params', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glGetSamplerParameteriv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],  # GL 3.2 or higher.
+  'versions': [{ 'name': 'glGetSamplerParameteriv' }],
   'arguments': 'GLuint sampler, GLenum pname, GLint* params', },
 { 'return_type': 'void',
   'names': ['glGetShaderInfoLog'],
@@ -644,7 +622,8 @@
   'names': ['glGetString'],
   'arguments': 'GLenum name', },
 { 'return_type': 'void',
-  'names': ['glGetSynciv'],
+  'versions': [{ 'name': 'glGetSynciv',
+                 'extensions': ['GL_ARB_sync'] }],
   'arguments':
     'GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length,'
     'GLint* values', },
@@ -661,8 +640,7 @@
   'names': ['glGetTexParameteriv'],
   'arguments': 'GLenum target, GLenum pname, GLint* params', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glGetTransformFeedbackVarying',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glGetTransformFeedbackVarying' }],
   'arguments': 'GLuint program, GLuint index, GLsizei bufSize, '
                'GLsizei* length, GLenum* type, char* name', },
 { 'return_type': 'void',
@@ -670,15 +648,13 @@
   'arguments':
       'GLuint shader, GLsizei bufsize, GLsizei* length, char* source', },
 { 'return_type': 'GLuint',
-  'versions': [{ 'name': 'glGetUniformBlockIndex',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],  # GL 3.1 or higher.
+  'versions': [{ 'name': 'glGetUniformBlockIndex' }],
   'arguments': 'GLuint program, const char* uniformBlockName', },
 { 'return_type': 'void',
   'names': ['glGetUniformfv'],
   'arguments': 'GLuint program, GLint location, GLfloat* params', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glGetUniformIndices',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],  # GL 3.1 or higher.
+  'versions': [{ 'name': 'glGetUniformIndices' }],
   'arguments': 'GLuint program, GLsizei uniformCount, '
                'const char* const* uniformNames, GLuint* uniformIndices', },
 { 'return_type': 'void',
@@ -703,13 +679,11 @@
   'names': ['glInsertEventMarkerEXT'],
   'arguments': 'GLsizei length, const char* marker', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glInvalidateFramebuffer',
-                 'gl_versions': ['gl4', 'es3'] }],  # GL 4.3 or higher.
+  'versions': [{ 'name': 'glInvalidateFramebuffer' }],
   'arguments': 'GLenum target, GLsizei numAttachments, '
       'const GLenum* attachments' },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glInvalidateSubFramebuffer',
-                 'gl_versions': ['gl4', 'es3'] }],  # GL 4.3 or higher.
+  'versions': [{ 'name': 'glInvalidateSubFramebuffer' }],
   'arguments':
       'GLenum target, GLsizei numAttachments, const GLenum* attachments, '
       'GLint x, GLint y, GLint width, GLint height', },
@@ -734,38 +708,36 @@
   'names': ['glIsProgram'],
   'arguments': 'GLuint program', },
 { 'return_type': 'GLboolean',
-  'versions': [{ 'name': 'glIsQuery',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glIsQuery' }],
   'arguments': 'GLuint query', },
 { 'return_type': 'GLboolean',
-  'names': ['glIsQueryARB', 'glIsQueryEXT'],
+  'versions': [{ 'name': 'glIsQueryARB' },
+               { 'name': 'glIsQueryEXT',
+                 'extensions': ['GL_EXT_occlusion_query_boolean'] }],
   'arguments': 'GLuint query', },
 { 'return_type': 'GLboolean',
   'names': ['glIsRenderbufferEXT', 'glIsRenderbuffer'],
   'arguments': 'GLuint renderbuffer', },
 { 'return_type': 'GLboolean',
-  'versions': [{ 'name': 'glIsSampler',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],  # GL 3.2 or higher.
+  'versions': [{ 'name': 'glIsSampler' }],
   'arguments': 'GLuint sampler', },
 { 'return_type': 'GLboolean',
   'names': ['glIsShader'],
   'arguments': 'GLuint shader', },
 { 'return_type': 'GLboolean',
-  'names': ['glIsSync'],
+  'versions': [{ 'name': 'glIsSync',
+                 'extensions': ['GL_ARB_sync'] }],
   'arguments': 'GLsync sync', },
 { 'return_type': 'GLboolean',
   'names': ['glIsTexture'],
   'arguments': 'GLuint texture', },
 { 'return_type': 'GLboolean',
-  'versions': [{ 'name': 'glIsTransformFeedback',
-                 'gl_versions': ['gl4', 'es3'] }],
+  'versions': [{ 'name': 'glIsTransformFeedback' }],
   'arguments': 'GLuint id', },
 { 'return_type': 'GLboolean',
   'known_as': 'glIsVertexArrayOES',
   'versions': [{ 'name': 'glIsVertexArray',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] },
-               { 'name': 'glIsVertexArray',
-                 'extensions': ['GL_ARB_vertex_array_object'] },
+                 'extensions': ['GL_ARB_vertex_array_object'], },
                { 'name': 'glIsVertexArrayOES' },
                { 'name': 'glIsVertexArrayAPPLE',
                  'extensions': ['GL_APPLE_vertex_array_object'] }],
@@ -783,8 +755,6 @@
 { 'return_type': 'void*',
   'known_as': 'glMapBufferRange',
   'versions': [{ 'name': 'glMapBufferRange',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] },
-               { 'name': 'glMapBufferRange',
                  'extensions': ['GL_ARB_map_buffer_range'] },
                { 'name': 'glMapBufferRangeEXT',
                  'extensions': ['GL_EXT_map_buffer_range'] }],
@@ -793,24 +763,17 @@
 { 'return_type': 'void',
   'known_as': 'glMatrixLoadfEXT',
   'versions': [{ 'name': 'glMatrixLoadfEXT',
-                 'gl_versions': ['gl4'],
-                 'extensions': ['GL_EXT_direct_state_access'] },
-               { 'name': 'glMatrixLoadfEXT',
-                 'gl_versions': ['es3'],
-                 'extensions': ['GL_NV_path_rendering'] }],
+                 'extensions': ['GL_EXT_direct_state_access',
+                                'GL_NV_path_rendering'] }],
   'arguments': 'GLenum matrixMode, const GLfloat* m' },
 { 'return_type': 'void',
   'known_as': 'glMatrixLoadIdentityEXT',
   'versions': [{ 'name': 'glMatrixLoadIdentityEXT',
-                 'gl_versions': ['gl4'],
-                 'extensions': ['GL_EXT_direct_state_access'] },
-               { 'name': 'glMatrixLoadIdentityEXT',
-                 'gl_versions': ['es3'],
-                 'extensions': ['GL_NV_path_rendering'] }],
+                 'extensions': ['GL_EXT_direct_state_access',
+                                'GL_NV_path_rendering'] },],
   'arguments': 'GLenum matrixMode' },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glPauseTransformFeedback',
-                 'gl_versions': ['gl4', 'es3'] }],
+  'versions': [{ 'name': 'glPauseTransformFeedback' }],
   'arguments': 'void', },
 { 'return_type': 'void',
   'names': ['glPixelStorei'],
@@ -828,20 +791,20 @@
   'known_as': 'glProgramBinary',
   'versions': [{ 'name': 'glProgramBinaryOES' },
                { 'name': 'glProgramBinary',
-                 'extensions': ['GL_ARB_get_program_binary'] },
-               { 'name': 'glProgramBinary' }],
+                 'extensions': ['GL_ARB_get_program_binary'] }],
   'arguments': 'GLuint program, GLenum binaryFormat, '
                'const GLvoid* binary, GLsizei length' },
 { 'return_type': 'void',
   'versions': [{ 'name': 'glProgramParameteri',
-                 'extensions': ['GL_ARB_get_program_binary'] },
-               { 'name': 'glProgramParameteri' }],
+                 'extensions': ['GL_ARB_get_program_binary'] }],
   'arguments': 'GLuint program, GLenum pname, GLint value' },
 { 'return_type': 'void',
   'names': ['glPushGroupMarkerEXT'],
   'arguments': 'GLsizei length, const char* marker', },
 { 'return_type': 'void',
-  'names': ['glQueryCounter', 'glQueryCounterEXT'],
+  'versions': [{ 'name': 'glQueryCounter',
+                 'extensions': ['GL_ARB_timer_query'] },
+               { 'name': 'glQueryCounterEXT' }],
   'arguments': 'GLuint id, GLenum target', },
 { 'return_type': 'void',
   'names': ['glReadBuffer'],
@@ -894,27 +857,22 @@
   'arguments': 'GLenum target, GLsizei samples, GLenum internalformat, '
                'GLsizei width, GLsizei height', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glResumeTransformFeedback',
-                 'gl_versions': ['gl4', 'es3'] }],
+  'versions': [{ 'name': 'glResumeTransformFeedback' }],
   'arguments': 'void', },
 { 'return_type': 'void',
   'names': ['glSampleCoverage'],
   'arguments': 'GLclampf value, GLboolean invert', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glSamplerParameterf',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],  # GL 3.2 or higher.
+  'versions': [{ 'name': 'glSamplerParameterf' }],
   'arguments': 'GLuint sampler, GLenum pname, GLfloat param', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glSamplerParameterfv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],  # GL 3.2 or higher.
+  'versions': [{ 'name': 'glSamplerParameterfv' }],
   'arguments': 'GLuint sampler, GLenum pname, const GLfloat* params', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glSamplerParameteri',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],  # GL 3.2 or higher.
+  'versions': [{ 'name': 'glSamplerParameteri' }],
   'arguments': 'GLuint sampler, GLenum pname, GLint param', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glSamplerParameteriv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],  # GL 3.2 or higher.
+  'versions': [{ 'name': 'glSamplerParameteriv' }],
   'arguments': 'GLuint sampler, GLenum pname, const GLint* params', },
 { 'return_type': 'void',
   'names': ['glScissor'],
@@ -984,8 +942,7 @@
       'GLsizei height, GLint border, GLenum format, GLenum type, '
       'const void* pixels', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glTexImage3D',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glTexImage3D' }],
   'arguments':
       'GLenum target, GLint level, GLint internalformat, GLsizei width, '
       'GLsizei height, GLsizei depth, GLint border, GLenum format, '
@@ -1005,16 +962,13 @@
 { 'return_type': 'void',
   'known_as': 'glTexStorage2DEXT',
   'versions': [{ 'name': 'glTexStorage2D',
-                 'gl_versions': ['es3'] },
-               { 'name': 'glTexStorage2D',
                  'extensions': ['GL_ARB_texture_storage'] },
                { 'name': 'glTexStorage2DEXT',
                  'extensions': ['GL_EXT_texture_storage'] }],
   'arguments': 'GLenum target, GLsizei levels, GLenum internalformat, '
                'GLsizei width, GLsizei height', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glTexStorage3D',
-                 'gl_versions': ['gl4', 'es3'] }],  # GL 4.2 or higher.
+  'versions': [{ 'name': 'glTexStorage3D' }],
   'arguments': 'GLenum target, GLsizei levels, GLenum internalformat, '
                'GLsizei width, GLsizei height, GLsizei depth', },
 { 'return_type': 'void',
@@ -1025,15 +979,13 @@
      'const void* pixels', },
 # TODO(zmo): wait for MOCK_METHOD11.
 # { 'return_type': 'void',
-#   'versions': [{ 'name': 'glTexSubImage3D',
-#                  'gl_versions': ['gl3', 'gl4', 'es3'] }],
+#   'versions': [{ 'name': 'glTexSubImage3D' }],
 #   'arguments':
 #       'GLenum target, GLint level, GLint xoffset, GLint yoffset, '
 #       'GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, '
 #       'GLenum format, GLenum type, const void* pixels', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glTransformFeedbackVaryings',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glTransformFeedbackVaryings' }],
   'arguments': 'GLuint program, GLsizei count, const char* const* varyings, '
                'GLenum bufferMode', },
 { 'return_type': 'void',
@@ -1049,12 +1001,10 @@
   'names': ['glUniform1iv'],
   'arguments': 'GLint location, GLsizei count, const GLint* v', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glUniform1ui',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glUniform1ui' }],
   'arguments': 'GLint location, GLuint v0', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glUniform1uiv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glUniform1uiv' }],
   'arguments': 'GLint location, GLsizei count, const GLuint* v', },
 { 'return_type': 'void',
   'names': ['glUniform2f'],
@@ -1069,12 +1019,10 @@
   'names': ['glUniform2iv'],
   'arguments': 'GLint location, GLsizei count, const GLint* v', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glUniform2ui',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glUniform2ui' }],
   'arguments': 'GLint location, GLuint v0, GLuint v1', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glUniform2uiv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glUniform2uiv' }],
   'arguments': 'GLint location, GLsizei count, const GLuint* v', },
 { 'return_type': 'void',
   'names': ['glUniform3f'],
@@ -1089,12 +1037,10 @@
   'names': ['glUniform3iv'],
   'arguments': 'GLint location, GLsizei count, const GLint* v', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glUniform3ui',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glUniform3ui' }],
   'arguments': 'GLint location, GLuint v0, GLuint v1, GLuint v2', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glUniform3uiv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glUniform3uiv' }],
   'arguments': 'GLint location, GLsizei count, const GLuint* v', },
 { 'return_type': 'void',
   'names': ['glUniform4f'],
@@ -1109,16 +1055,13 @@
   'names': ['glUniform4iv'],
   'arguments': 'GLint location, GLsizei count, const GLint* v', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glUniform4ui',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glUniform4ui' }],
   'arguments': 'GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glUniform4uiv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glUniform4uiv' }],
   'arguments': 'GLint location, GLsizei count, const GLuint* v', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glUniformBlockBinding',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],  # GL 3.1 or higher.
+  'versions': [{ 'name': 'glUniformBlockBinding' }],
   'arguments': 'GLuint program, GLuint uniformBlockIndex, '
                'GLuint uniformBlockBinding', },
 { 'return_type': 'void',
@@ -1126,13 +1069,11 @@
   'arguments': 'GLint location, GLsizei count, '
                'GLboolean transpose, const GLfloat* value', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glUniformMatrix2x3fv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glUniformMatrix2x3fv' }],
   'arguments': 'GLint location, GLsizei count, '
                'GLboolean transpose, const GLfloat* value', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glUniformMatrix2x4fv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glUniformMatrix2x4fv' }],
   'arguments': 'GLint location, GLsizei count, '
                'GLboolean transpose, const GLfloat* value', },
 { 'return_type': 'void',
@@ -1140,13 +1081,11 @@
   'arguments': 'GLint location, GLsizei count, '
                'GLboolean transpose, const GLfloat* value', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glUniformMatrix3x2fv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glUniformMatrix3x2fv' }],
   'arguments': 'GLint location, GLsizei count, '
                'GLboolean transpose, const GLfloat* value', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glUniformMatrix3x4fv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glUniformMatrix3x4fv' }],
   'arguments': 'GLint location, GLsizei count, '
                'GLboolean transpose, const GLfloat* value', },
 { 'return_type': 'void',
@@ -1154,13 +1093,11 @@
   'arguments': 'GLint location, GLsizei count, '
                'GLboolean transpose, const GLfloat* value', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glUniformMatrix4x2fv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glUniformMatrix4x2fv' }],
   'arguments': 'GLint location, GLsizei count, '
                'GLboolean transpose, const GLfloat* value', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glUniformMatrix4x3fv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glUniformMatrix4x3fv' }],
   'arguments': 'GLint location, GLsizei count, '
                'GLboolean transpose, const GLfloat* value', },
 { 'return_type': 'GLboolean',
@@ -1204,24 +1141,19 @@
   'arguments':
       'GLuint index, GLuint divisor', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glVertexAttribI4i',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glVertexAttribI4i' }],
   'arguments': 'GLuint indx, GLint x, GLint y, GLint z, GLint w', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glVertexAttribI4iv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glVertexAttribI4iv' }],
   'arguments': 'GLuint indx, const GLint* values', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glVertexAttribI4ui',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glVertexAttribI4ui' }],
   'arguments': 'GLuint indx, GLuint x, GLuint y, GLuint z, GLuint w', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glVertexAttribI4uiv',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glVertexAttribI4uiv' }],
   'arguments': 'GLuint indx, const GLuint* values', },
 { 'return_type': 'void',
-  'versions': [{ 'name': 'glVertexAttribIPointer',
-                 'gl_versions': ['gl3', 'gl4', 'es3'] }],
+  'versions': [{ 'name': 'glVertexAttribIPointer' }],
   'arguments': 'GLuint indx, GLint size, GLenum type, GLsizei stride, '
                'const void* ptr', },
 { 'return_type': 'void',
@@ -1232,7 +1164,8 @@
   'names': ['glViewport'],
   'arguments': 'GLint x, GLint y, GLsizei width, GLsizei height', },
 { 'return_type': 'GLenum',
-  'names': ['glWaitSync'],
+  'versions': [{ 'name': 'glWaitSync',
+                 'extensions': ['GL_ARB_sync'] }],
   'arguments':
     'GLsync sync, GLbitfield flags, GLuint64 timeout', },
 ]
@@ -1675,8 +1608,11 @@
 
 FUNCTION_SETS = [
   [GL_FUNCTIONS, 'gl', [
-      'GL/glext.h',
+      'GL/gl.h',
+      'noninclude/GL/glext.h',
       'GLES2/gl2ext.h',
+      'GLES3/gl3.h',
+      'GLES3/gl31.h',
       # Files below are Chromium-specific and shipped with Chromium sources.
       'GL/glextchromium.h',
       'GLES2/gl2chromium.h',
@@ -1693,8 +1629,8 @@
       'EGL_ANGLE_surface_d3d_texture_2d_share_handle',
     ],
   ],
-  [WGL_FUNCTIONS, 'wgl', ['GL/wglext.h'], []],
-  [GLX_FUNCTIONS, 'glx', ['GL/glx.h', 'GL/glxext.h'], []],
+  [WGL_FUNCTIONS, 'wgl', ['noninclude/GL/wglext.h'], []],
+  [GLX_FUNCTIONS, 'glx', ['GL/glx.h', 'noninclude/GL/glxext.h'], []],
 ]
 
 GLES2_HEADERS_WITH_ENUMS = [
@@ -1720,6 +1656,53 @@
 
 """
 
+GLVersion = namedtuple('GLVersion', 'is_es major_version minor_version')
+
+def GLVersionBindAlways(version):
+  return version.major_version <= 2
+
+
+def GetStaticBinding(func):
+  """If this function has a name assigned to it that should  be bound always,
+  then return this name.
+
+  This will be the case if either a function name is specified
+  that depends on an extension from UNCONDITIONALLY_BOUND_EXTENSIONS,
+  or if the GL version it depends on is assumed to be available (e.g. <=2.1).
+  There can only be one name that satisfies this condition (or the bindings
+  would be ambiguous)."""
+
+  static_bindings = set([])
+
+  for version in func['versions']:
+    if 'extensions' in version:
+      extensions = version['extensions']
+      num_unconditional_extensions = len(
+          extensions & UNCONDITIONALLY_BOUND_EXTENSIONS)
+      if num_unconditional_extensions:
+        static_bindings.add(version['name'])
+    elif 'gl_versions' in version:
+      versions = [v for v in version['gl_versions'] if GLVersionBindAlways(v)]
+      # It's only unconditional if it exists in GL and GLES
+      if len(versions) == 2:
+        assert versions[0].is_es != versions[1].is_es
+        static_bindings.add(version['name'])
+    else:
+        static_bindings.add(version['name'])
+
+  # Avoid ambiguous bindings (static binding with different names)
+  assert len(static_bindings) <= 1
+  if len(static_bindings):
+    static_name = static_bindings.pop()
+    # Avoid ambiguous bindings (static and dynamic bindings with
+    # different names)
+    assert len([v['name'] for v in func['versions']
+               if v['name'] != static_name]) == 0, func
+    return static_name
+  else:
+    return None
+
+
 def GenerateHeader(file, functions, set_name, used_extensions):
   """Generates gl_bindings_autogen_x.h"""
 
@@ -1824,13 +1807,14 @@
   """Generates gl_bindings_autogen_x.cc"""
 
   set_header_name = "ui/gl/gl_" + set_name.lower() + "_api_implementation.h"
-  include_list = [ 'base/debug/trace_event.h',
+  include_list = [ 'base/trace_event/trace_event.h',
                    'ui/gl/gl_enums.h',
                    'ui/gl/gl_bindings.h',
                    'ui/gl/gl_context.h',
                    'ui/gl/gl_implementation.h',
                    'ui/gl/gl_version_info.h',
                    set_header_name ]
+
   includes_string = "\n".join(["#include \"{0}\"".format(h)
                                for h in sorted(include_list)])
 
@@ -1854,17 +1838,16 @@
   # is initialized. This is done to provide clear asserts on debug build and to
   # avoid crashing in case of a bug on release build.
   file.write('\n')
+  num_dynamic = 0
   for func in functions:
-    unique_names = set([version['name'] for version in func['versions']])
-    if len(unique_names) > 1:
-      file.write('%s %sNotBound(%s) {\n' %
-          (func['return_type'], func['known_as'], func['arguments']))
-      file.write('  NOTREACHED();\n')
-      return_type = func['return_type'].lower()
-      # Returning 0 works for booleans, integers and pointers.
-      if return_type != 'void':
-        file.write('  return 0;\n')
-      file.write('}\n')
+    static_binding = GetStaticBinding(func)
+    if static_binding:
+      func['static_binding'] = static_binding
+    else:
+      num_dynamic = num_dynamic + 1
+
+  print "[%s] %d static bindings, %d dynamic bindings" % (
+      set_name, len(functions) - num_dynamic, num_dynamic)
 
   # Write function to initialize the function pointers that are always the same
   # and to initialize bindings where choice of the function depends on the
@@ -1879,100 +1862,81 @@
         (known_as, known_as, version_name))
 
   for func in functions:
-    unique_names = set([version['name'] for version in func['versions']])
-    if len(unique_names) == 1:
-      WriteFuncBinding(file, func['known_as'], func['known_as'])
+    if 'static_binding' in func:
+      WriteFuncBinding(file, func['known_as'], func['static_binding'])
     else:
-      file.write('  fn.%sFn = reinterpret_cast<%sProc>(%sNotBound);\n' %
-          (func['known_as'], func['known_as'], func['known_as']))
+      file.write('  fn.%sFn = 0;\n' % func['known_as'])
 
-  file.write('}\n')
-  file.write('\n')
-
-  # Write function to initialize bindings where choice of the function depends
-  # on the extension string or the GL version.
-  file.write("""void Driver%s::InitializeDynamicBindings(GLContext* context) {
+  if set_name == 'gl':
+    # Write the deferred bindings for GL that need a current context and depend
+    # on GL_VERSION and GL_EXTENSIONS.
+    file.write('}\n\n')
+    file.write("""void DriverGL::InitializeDynamicBindings(GLContext* context) {
   DCHECK(context && context->IsCurrent(NULL));
   const GLVersionInfo* ver = context->GetVersionInfo();
   ALLOW_UNUSED_LOCAL(ver);
   std::string extensions = context->GetExtensions() + " ";
   ALLOW_UNUSED_LOCAL(extensions);
 
-""" % set_name.upper())
+""")
+  else:
+    file.write("""std::string extensions(GetPlatformExtensions());
+  extensions += " ";
+  ALLOW_UNUSED_LOCAL(extensions);
+
+""")
+
   for extension in sorted(used_extensions):
     # Extra space at the end of the extension name is intentional, it is used
     # as a separator
     file.write('  ext.b_%s = extensions.find("%s ") != std::string::npos;\n' %
         (extension, extension))
 
-  def WrapOr(cond):
-    if ' || ' in cond:
-      return '(%s)' % cond
-    return cond
+  def GetGLVersionCondition(gl_version):
+    if GLVersionBindAlways(gl_version):
+      if gl_version.is_es:
+        return 'ver->is_es'
+      else:
+        return '!ver->is_es'
+    elif gl_version.is_es:
+      return 'ver->IsAtLeastGLES(%du, %du)' % (
+          gl_version.major_version, gl_version.minor_version)
+    else:
+      return 'ver->IsAtLeastGL(%du, %du)' % (
+          gl_version.major_version, gl_version.minor_version)
 
-  def WrapAnd(cond):
-    if ' && ' in cond:
-      return '(%s)' % cond
-    return cond
-
-  def VersionCondition(version):
+  def GetBindingCondition(version):
     conditions = []
     if 'gl_versions' in version:
-      gl_versions = version['gl_versions']
-      version_cond = ' || '.join(['ver->is_%s' % gl for gl in gl_versions])
-      conditions.append(WrapOr(version_cond))
+      conditions.extend(
+          [GetGLVersionCondition(v) for v in version['gl_versions']])
     if 'extensions' in version and version['extensions']:
-      ext_cond = ' || '.join(['ext.b_%s' % e for e in version['extensions']])
-      conditions.append(WrapOr(ext_cond))
-    return ' && '.join(conditions)
+      conditions.extend(
+          ['ext.b_%s' % e for e in version['extensions']])
+    return ' || '.join(conditions)
 
   def WriteConditionalFuncBinding(file, func):
-    # Functions with only one version are always bound unconditionally
-    assert len(func['versions']) > 1
+    assert len(func['versions']) > 0
     known_as = func['known_as']
     i = 0
     first_version = True
     while i < len(func['versions']):
       version = func['versions'][i]
-      cond = VersionCondition(version)
-      combined_conditions = [WrapAnd(cond)]
-      last_version = i + 1 == len(func['versions'])
-      while not last_version and \
-          func['versions'][i + 1]['name'] == version['name']:
-        i += 1
-        combinable_cond = VersionCondition(func['versions'][i])
-        combined_conditions.append(WrapAnd(combinable_cond))
-        last_version = i + 1 == len(func['versions'])
-      if len(combined_conditions) > 1:
-        if [1 for cond in combined_conditions if cond == '']:
-          cond = ''
-        else:
-          cond = ' || '.join(combined_conditions)
-      # Don't make the last possible binding conditional on anything else but
-      # that the function isn't already bound to avoid verbose specification
-      # of functions which have both ARB and core versions with the same name,
-      # and to be able to bind to mock extension functions in unit tests which
-      # call InitializeDynamicGLBindings with a stub context that doesn't have
-      # extensions in its extension string.
-      # TODO(oetuaho@nvidia.com): Get rid of the fallback.
-      # http://crbug.com/325668
-      if cond != '' and not last_version:
-        if not first_version:
-          file.write('  if (!fn.%sFn && (%s)) {\n  ' % (known_as, cond))
-        else:
-          file.write('  if (%s) {\n  ' % cond)
-      elif not first_version:
-        file.write('  if (!fn.%sFn) {\n  ' % known_as)
+      cond = GetBindingCondition(version)
+      if first_version:
+        file.write('  if (%s) {\n  ' % cond)
+      else:
+        file.write('  else if (%s) {\n  ' % (cond))
+
       WriteFuncBinding(file, known_as, version['name'])
+      file.write('DCHECK(fn.%sFn);\n' % known_as)
       file.write('}\n')
       i += 1
       first_version = False
 
   for func in functions:
-    unique_names = set([version['name'] for version in func['versions']])
-    if len(unique_names) > 1:
+    if not 'static_binding' in func:
       file.write('\n')
-      file.write('  fn.%sFn = 0;\n' % func['known_as'])
       file.write('  debug_fn.%sFn = 0;\n' % func['known_as'])
       WriteConditionalFuncBinding(file, func)
 
@@ -2275,15 +2239,18 @@
 """)
 
 
-def ParseExtensionFunctionsFromHeader(header_file):
+def ParseFunctionsFromHeader(header_file, extensions, versions):
   """Parse a C extension header file and return a map from extension names to
   a list of functions.
 
   Args:
     header_file: Line-iterable C header file.
   Returns:
-    Map of extension name => functions.
+    Map of extension name => functions, Map of gl version => functions.
+    Functions will only be in either one of the two maps.
   """
+  version_start = re.compile(
+      r'#ifndef GL_(ES_|)VERSION((?:_[0-9])+)$')
   extension_start = re.compile(
       r'#ifndef ((?:GL|EGL|WGL|GLX)_[A-Z]+_[a-zA-Z]\w+)')
   extension_function = re.compile(r'.+\s+([a-z]+\w+)\s*\(')
@@ -2291,59 +2258,109 @@
   macro_start = re.compile(r'^#(if|ifdef|ifndef).*')
   macro_end = re.compile(r'^#endif.*')
   macro_depth = 0
+  current_version = None
+  current_version_depth = 0
   current_extension = None
   current_extension_depth = 0
-  extensions = collections.defaultdict(lambda: [])
+
+  # Pick up all core functions here, since some of them are missing in the
+  # Khronos headers.
+  hdr = os.path.basename(header_file.name)
+  if hdr == "gl.h":
+    current_version = GLVersion(False, 1, 0)
+
+  line_num = 1
   for line in header_file:
+    version_match = version_start.match(line)
     if macro_start.match(line):
       macro_depth += 1
+      if version_match:
+        if current_version:
+          raise RuntimeError('Nested GL version macro in %s at line %d' % (
+              header_file.name, line_num))
+        current_version_depth = macro_depth
+        es = version_match.group(1)
+        major_version, minor_version =\
+            version_match.group(2).lstrip('_').split('_')
+        is_es = len(es) > 0
+        if (not is_es) and (major_version == '1'):
+          minor_version = 0
+        current_version = GLVersion(
+            is_es, int(major_version), int(minor_version))
     elif macro_end.match(line):
       macro_depth -= 1
       if macro_depth < current_extension_depth:
         current_extension = None
+      if macro_depth < current_version_depth:
+        current_version = None
+
     match = extension_start.match(line)
-    if match:
+    if match and not version_match:
+      if current_version and hdr != "gl.h":
+        raise RuntimeError('Nested GL version macro in %s at line %d' % (
+            header_file.name, line_num))
       current_extension = match.group(1)
       current_extension_depth = macro_depth
-      assert current_extension not in extensions, \
-          "Duplicate extension: " + current_extension
+
     match = extension_function.match(line)
-    if match and current_extension and not typedef.match(line):
-      extensions[current_extension].append(match.group(1))
-  return extensions
+    if match and not typedef.match(line):
+      if current_extension:
+        extensions[current_extension].add(match.group(1))
+      elif current_version:
+        versions[current_version].add(match.group(1))
+    line_num = line_num + 1
 
 
-def GetExtensionFunctions(extension_headers):
-  """Parse extension functions from a list of header files.
+def GetDynamicFunctions(extension_headers):
+  """Parse all optional functions from a list of header files.
 
   Args:
     extension_headers: List of header file names.
   Returns:
-    Map of extension name => list of functions.
+    Map of extension name => list of functions,
+    Map of gl version => list of functions.
   """
-  extensions = {}
+  extensions = collections.defaultdict(lambda: set([]))
+  gl_versions = collections.defaultdict(lambda: set([]))
   for header in extension_headers:
-    extensions.update(ParseExtensionFunctionsFromHeader(open(header)))
-  return extensions
+    ParseFunctionsFromHeader(open(header), extensions, gl_versions)
+  return extensions, gl_versions
 
 
-def GetFunctionToExtensionMap(extensions):
+def GetFunctionToExtensionsMap(extensions):
   """Construct map from a function names to extensions which define the
   function.
 
   Args:
     extensions: Map of extension name => functions.
   Returns:
-    Map of function name => extension name.
+    Map of function name => extension names.
   """
   function_to_extensions = {}
   for extension, functions in extensions.items():
     for function in functions:
       if not function in function_to_extensions:
-        function_to_extensions[function] = []
-      function_to_extensions[function].append(extension)
+        function_to_extensions[function] = set([])
+      function_to_extensions[function].add(extension)
   return function_to_extensions
 
+def GetFunctionToGLVersionsMap(gl_versions):
+  """Construct map from a function names to GL versions which define the
+  function.
+
+  Args:
+    extensions: Map of gl versions => functions.
+  Returns:
+    Map of function name => gl versions.
+  """
+  function_to_gl_versions = {}
+  for gl_version, functions in gl_versions.items():
+    for function in functions:
+      if not function in function_to_gl_versions:
+        function_to_gl_versions[function] = set([])
+      function_to_gl_versions[function].add(gl_version)
+  return function_to_gl_versions
+
 
 def LooksLikeExtensionFunction(function):
   """Heuristic to see if a function name is consistent with extension function
@@ -2352,6 +2369,13 @@
   return vendor is not None and not vendor.group(1) in ['GL', 'API', 'DC']
 
 
+def SortVersions(key):
+   # Prefer functions from the core for binding
+  if 'gl_versions' in key:
+    return 0
+  else:
+    return 1
+
 def FillExtensionsFromHeaders(functions, extension_headers, extra_extensions):
   """Determine which functions belong to extensions based on extension headers,
   and fill in this information to the functions table for functions that don't
@@ -2365,31 +2389,71 @@
     Set of used extensions.
   """
   # Parse known extensions.
-  extensions = GetExtensionFunctions(extension_headers)
-  functions_to_extensions = GetFunctionToExtensionMap(extensions)
+  extensions, gl_versions = GetDynamicFunctions(extension_headers)
+  functions_to_extensions = GetFunctionToExtensionsMap(extensions)
+  functions_to_gl_versions = GetFunctionToGLVersionsMap(gl_versions)
 
   # Fill in the extension information.
   used_extensions = set()
+  used_functions_by_version = collections.defaultdict(lambda: set([]))
   for func in functions:
     for version in func['versions']:
       name = version['name']
+
+      # There should only be one version entry per name string.
+      if len([v for v in func['versions'] if v['name'] == name]) > 1:
+        raise RuntimeError(
+            'Duplicate version entries with same name for %s' % name)
+
       # Make sure we know about all extensions and extension functions.
+      extensions_from_headers = set([])
+      if name in functions_to_extensions:
+        extensions_from_headers = set(functions_to_extensions[name])
+
+      explicit_extensions = set([])
       if 'extensions' in version:
+        explicit_extensions = set(version['extensions'])
+
+      in_both = explicit_extensions.intersection(extensions_from_headers)
+      if len(in_both):
+        print "[%s] Specified redundant extensions for binding: %s" % (
+            name, ', '.join(in_both))
+      diff = explicit_extensions - extensions_from_headers
+      if len(diff):
+        print "[%s] Specified extra extensions for binding: %s" % (
+            name, ', '.join(diff))
+
+      all_extensions = extensions_from_headers.union(explicit_extensions)
+      if len(all_extensions):
+        version['extensions'] = all_extensions
+
+      if 'extensions' in version:
+        assert len(version['extensions'])
         used_extensions.update(version['extensions'])
-      elif name in functions_to_extensions:
-        # If there are multiple versions with the same name, assume that they
-        # already have all the correct conditions, we can't just blindly add
-        # the same extension conditions to all of them
-        if len([v for v in func['versions'] if v['name'] == name]) == 1:
-          version['extensions'] = functions_to_extensions[name]
-          used_extensions.update(version['extensions'])
-      elif LooksLikeExtensionFunction(name):
+
+      if not 'extensions' in version and LooksLikeExtensionFunction(name):
         raise RuntimeError('%s looks like an extension function but does not '
             'belong to any of the known extensions.' % name)
 
+      if name in functions_to_gl_versions:
+        assert not 'gl_versions' in version
+        version['gl_versions'] = functions_to_gl_versions[name]
+        for v in version['gl_versions']:
+          used_functions_by_version[v].add(name)
+
+    func['versions'] = sorted(func['versions'], key=SortVersions)
+
   # Add extensions that do not have any functions.
   used_extensions.update(extra_extensions)
 
+  # Print out used function count by GL(ES) version.
+  for v in sorted([v for v in used_functions_by_version if v.is_es]):
+    print "OpenGL ES %d.%d: %d used functions" % (
+        v.major_version, v.minor_version, len(used_functions_by_version[v]))
+  for v in sorted([v for v in used_functions_by_version if not v.is_es]):
+    print "OpenGL %d.%d: %d used functions" % (
+        v.major_version, v.minor_version, len(used_functions_by_version[v]))
+
   return used_extensions
 
 
diff --git a/ui/gl/gl.gyp b/ui/gl/gl.gyp
index 93c4d2b..7d97c66 100644
--- a/ui/gl/gl.gyp
+++ b/ui/gl/gl.gyp
@@ -40,6 +40,7 @@
         'android/surface_texture.h',
         'android/surface_texture_listener.cc',
         'android/surface_texture_listener.h',
+        'gl_bindings.cc',
         'gl_bindings.h',
         'gl_bindings_autogen_gl.cc',
         'gl_bindings_autogen_gl.h',
diff --git a/ui/gl/gl_bindings.cc b/ui/gl/gl_bindings.cc
new file mode 100644
index 0000000..43c84e2
--- /dev/null
+++ b/ui/gl/gl_bindings.cc
@@ -0,0 +1,68 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#if defined(OS_WIN) || defined(USE_X11) || defined(OS_ANDROID) || defined(USE_OZONE)
+#include <EGL/egl.h>
+#endif
+
+#include "ui/gl/gl_bindings.h"
+
+#if defined(USE_X11)
+#include "ui/gfx/x/x11_types.h"
+#endif
+
+#if defined(OS_WIN)
+#include "ui/gl/gl_surface_wgl.h"
+#endif
+
+#if defined(OS_WIN) || defined(USE_X11) || defined(OS_ANDROID) || defined(USE_OZONE)
+#include "ui/gl/gl_surface_egl.h"
+#endif
+
+namespace gfx {
+
+std::string DriverOSMESA::GetPlatformExtensions() {
+  return "";
+}
+
+#if defined(OS_WIN)
+std::string DriverWGL::GetPlatformExtensions() {
+  const char* str = nullptr;
+  if (g_driver_wgl.fn.wglGetExtensionsStringARBFn) {
+    str = g_driver_wgl.fn.wglGetExtensionsStringARBFn(
+        GLSurfaceWGL::GetDisplayDC());
+  } else if (g_driver_wgl.fn.wglGetExtensionsStringEXTFn) {
+    str = g_driver_wgl.fn.wglGetExtensionsStringEXTFn();
+  }
+  return str ? std::string(str) : "";
+}
+#endif
+
+#if defined(OS_WIN) || defined(USE_X11) || defined(OS_ANDROID) || defined(USE_OZONE)
+std::string DriverEGL::GetPlatformExtensions() {
+  EGLDisplay display =
+#if defined(OS_WIN)
+    GLSurfaceEGL::GetPlatformDisplay(GetPlatformDefaultEGLNativeDisplay());
+#else
+    g_driver_egl.fn.eglGetDisplayFn(GetPlatformDefaultEGLNativeDisplay());
+#endif
+
+  DCHECK(g_driver_egl.fn.eglInitializeFn);
+  g_driver_egl.fn.eglInitializeFn(display, NULL, NULL);
+  DCHECK(g_driver_egl.fn.eglQueryStringFn);
+  const char* str = g_driver_egl.fn.eglQueryStringFn(display, EGL_EXTENSIONS);
+  return str ? std::string(str) : "";
+}
+#endif
+
+#if defined(USE_X11)
+std::string DriverGLX::GetPlatformExtensions() {
+  DCHECK(g_driver_glx.fn.glXQueryExtensionsStringFn);
+  const char* str =
+      g_driver_glx.fn.glXQueryExtensionsStringFn(gfx::GetXDisplay(), 0);
+  return str ? std::string(str) : "";
+}
+#endif
+
+}  // namespace gfx
diff --git a/ui/gl/gl_bindings.h b/ui/gl/gl_bindings.h
index 86f921b..0ddde77 100644
--- a/ui/gl/gl_bindings.h
+++ b/ui/gl/gl_bindings.h
@@ -5,6 +5,8 @@
 #ifndef UI_GL_GL_BINDINGS_H_
 #define UI_GL_GL_BINDINGS_H_
 
+#include <string>
+
 // Includes the platform independent and platform dependent GL headers.
 // Only include this in cc files. It pulls in system headers, including
 // the X11 headers on linux, which define all kinds of macros that are
@@ -345,51 +347,59 @@
 
 struct GL_EXPORT DriverOSMESA {
   void InitializeStaticBindings();
-  void InitializeDynamicBindings(GLContext* context);
   void InitializeDebugBindings();
   void ClearBindings();
 
   ProcsOSMESA fn;
   ProcsOSMESA debug_fn;
   ExtensionsOSMESA ext;
+
+ private:
+  static std::string GetPlatformExtensions();
 };
 
 #if defined(OS_WIN)
 struct GL_EXPORT DriverWGL {
   void InitializeStaticBindings();
-  void InitializeDynamicBindings(GLContext* context);
   void InitializeDebugBindings();
   void ClearBindings();
 
   ProcsWGL fn;
   ProcsWGL debug_fn;
   ExtensionsWGL ext;
+
+ private:
+  static std::string GetPlatformExtensions();
 };
 #endif
 
 #if defined(OS_WIN) || defined(USE_X11) || defined(OS_ANDROID) || defined(USE_OZONE)
 struct GL_EXPORT DriverEGL {
   void InitializeStaticBindings();
-  void InitializeDynamicBindings(GLContext* context);
   void InitializeDebugBindings();
   void ClearBindings();
 
   ProcsEGL fn;
   ProcsEGL debug_fn;
   ExtensionsEGL ext;
+
+ private:
+  static std::string GetPlatformExtensions();
 };
 #endif
 
 #if defined(USE_X11)
 struct GL_EXPORT DriverGLX {
   void InitializeStaticBindings();
-  void InitializeDynamicBindings(GLContext* context);
   void InitializeDebugBindings();
   void ClearBindings();
 
   ProcsGLX fn;
   ProcsGLX debug_fn;
   ExtensionsGLX ext;
+
+ private:
+  static std::string GetPlatformExtensions();
 };
 #endif
 
diff --git a/ui/gl/gl_bindings_autogen_egl.cc b/ui/gl/gl_bindings_autogen_egl.cc
index 051e1b3..e0de7f2 100644
--- a/ui/gl/gl_bindings_autogen_egl.cc
+++ b/ui/gl/gl_bindings_autogen_egl.cc
@@ -10,7 +10,7 @@
 
 #include <string>
 
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_egl_api_implementation.h"
@@ -30,14 +30,12 @@
       GetGLProcAddress("eglBindTexImage"));
   fn.eglChooseConfigFn = reinterpret_cast<eglChooseConfigProc>(
       GetGLProcAddress("eglChooseConfig"));
-  fn.eglClientWaitSyncKHRFn = reinterpret_cast<eglClientWaitSyncKHRProc>(
-      GetGLProcAddress("eglClientWaitSyncKHR"));
+  fn.eglClientWaitSyncKHRFn = 0;
   fn.eglCopyBuffersFn =
       reinterpret_cast<eglCopyBuffersProc>(GetGLProcAddress("eglCopyBuffers"));
   fn.eglCreateContextFn = reinterpret_cast<eglCreateContextProc>(
       GetGLProcAddress("eglCreateContext"));
-  fn.eglCreateImageKHRFn = reinterpret_cast<eglCreateImageKHRProc>(
-      GetGLProcAddress("eglCreateImageKHR"));
+  fn.eglCreateImageKHRFn = 0;
   fn.eglCreatePbufferFromClientBufferFn =
       reinterpret_cast<eglCreatePbufferFromClientBufferProc>(
           GetGLProcAddress("eglCreatePbufferFromClientBuffer"));
@@ -45,18 +43,15 @@
       GetGLProcAddress("eglCreatePbufferSurface"));
   fn.eglCreatePixmapSurfaceFn = reinterpret_cast<eglCreatePixmapSurfaceProc>(
       GetGLProcAddress("eglCreatePixmapSurface"));
-  fn.eglCreateSyncKHRFn = reinterpret_cast<eglCreateSyncKHRProc>(
-      GetGLProcAddress("eglCreateSyncKHR"));
+  fn.eglCreateSyncKHRFn = 0;
   fn.eglCreateWindowSurfaceFn = reinterpret_cast<eglCreateWindowSurfaceProc>(
       GetGLProcAddress("eglCreateWindowSurface"));
   fn.eglDestroyContextFn = reinterpret_cast<eglDestroyContextProc>(
       GetGLProcAddress("eglDestroyContext"));
-  fn.eglDestroyImageKHRFn = reinterpret_cast<eglDestroyImageKHRProc>(
-      GetGLProcAddress("eglDestroyImageKHR"));
+  fn.eglDestroyImageKHRFn = 0;
   fn.eglDestroySurfaceFn = reinterpret_cast<eglDestroySurfaceProc>(
       GetGLProcAddress("eglDestroySurface"));
-  fn.eglDestroySyncKHRFn = reinterpret_cast<eglDestroySyncKHRProc>(
-      GetGLProcAddress("eglDestroySyncKHR"));
+  fn.eglDestroySyncKHRFn = 0;
   fn.eglGetConfigAttribFn = reinterpret_cast<eglGetConfigAttribProc>(
       GetGLProcAddress("eglGetConfigAttrib"));
   fn.eglGetConfigsFn =
@@ -71,22 +66,16 @@
       reinterpret_cast<eglGetDisplayProc>(GetGLProcAddress("eglGetDisplay"));
   fn.eglGetErrorFn =
       reinterpret_cast<eglGetErrorProc>(GetGLProcAddress("eglGetError"));
-  fn.eglGetPlatformDisplayEXTFn =
-      reinterpret_cast<eglGetPlatformDisplayEXTProc>(
-          GetGLProcAddress("eglGetPlatformDisplayEXT"));
+  fn.eglGetPlatformDisplayEXTFn = 0;
   fn.eglGetProcAddressFn = reinterpret_cast<eglGetProcAddressProc>(
       GetGLProcAddress("eglGetProcAddress"));
-  fn.eglGetSyncAttribKHRFn = reinterpret_cast<eglGetSyncAttribKHRProc>(
-      GetGLProcAddress("eglGetSyncAttribKHR"));
-  fn.eglGetSyncValuesCHROMIUMFn =
-      reinterpret_cast<eglGetSyncValuesCHROMIUMProc>(
-          GetGLProcAddress("eglGetSyncValuesCHROMIUM"));
+  fn.eglGetSyncAttribKHRFn = 0;
+  fn.eglGetSyncValuesCHROMIUMFn = 0;
   fn.eglInitializeFn =
       reinterpret_cast<eglInitializeProc>(GetGLProcAddress("eglInitialize"));
   fn.eglMakeCurrentFn =
       reinterpret_cast<eglMakeCurrentProc>(GetGLProcAddress("eglMakeCurrent"));
-  fn.eglPostSubBufferNVFn = reinterpret_cast<eglPostSubBufferNVProc>(
-      GetGLProcAddress("eglPostSubBufferNV"));
+  fn.eglPostSubBufferNVFn = 0;
   fn.eglQueryAPIFn =
       reinterpret_cast<eglQueryAPIProc>(GetGLProcAddress("eglQueryAPI"));
   fn.eglQueryContextFn = reinterpret_cast<eglQueryContextProc>(
@@ -95,9 +84,7 @@
       reinterpret_cast<eglQueryStringProc>(GetGLProcAddress("eglQueryString"));
   fn.eglQuerySurfaceFn = reinterpret_cast<eglQuerySurfaceProc>(
       GetGLProcAddress("eglQuerySurface"));
-  fn.eglQuerySurfacePointerANGLEFn =
-      reinterpret_cast<eglQuerySurfacePointerANGLEProc>(
-          GetGLProcAddress("eglQuerySurfacePointerANGLE"));
+  fn.eglQuerySurfacePointerANGLEFn = 0;
   fn.eglReleaseTexImageFn = reinterpret_cast<eglReleaseTexImageProc>(
       GetGLProcAddress("eglReleaseTexImage"));
   fn.eglReleaseThreadFn = reinterpret_cast<eglReleaseThreadProc>(
@@ -116,15 +103,9 @@
       reinterpret_cast<eglWaitGLProc>(GetGLProcAddress("eglWaitGL"));
   fn.eglWaitNativeFn =
       reinterpret_cast<eglWaitNativeProc>(GetGLProcAddress("eglWaitNative"));
-  fn.eglWaitSyncKHRFn =
-      reinterpret_cast<eglWaitSyncKHRProc>(GetGLProcAddress("eglWaitSyncKHR"));
-}
-
-void DriverEGL::InitializeDynamicBindings(GLContext* context) {
-  DCHECK(context && context->IsCurrent(NULL));
-  const GLVersionInfo* ver = context->GetVersionInfo();
-  ALLOW_UNUSED_LOCAL(ver);
-  std::string extensions = context->GetExtensions() + " ";
+  fn.eglWaitSyncKHRFn = 0;
+  std::string extensions(GetPlatformExtensions());
+  extensions += " ";
   ALLOW_UNUSED_LOCAL(extensions);
 
   ext.b_EGL_ANGLE_d3d_share_handle_client_buffer =
@@ -143,13 +124,97 @@
       extensions.find("EGL_KHR_fence_sync ") != std::string::npos;
   ext.b_EGL_KHR_gl_texture_2D_image =
       extensions.find("EGL_KHR_gl_texture_2D_image ") != std::string::npos;
+  ext.b_EGL_KHR_image = extensions.find("EGL_KHR_image ") != std::string::npos;
   ext.b_EGL_KHR_image_base =
       extensions.find("EGL_KHR_image_base ") != std::string::npos;
+  ext.b_EGL_KHR_reusable_sync =
+      extensions.find("EGL_KHR_reusable_sync ") != std::string::npos;
   ext.b_EGL_KHR_wait_sync =
       extensions.find("EGL_KHR_wait_sync ") != std::string::npos;
   ext.b_EGL_NV_post_sub_buffer =
       extensions.find("EGL_NV_post_sub_buffer ") != std::string::npos;
 
+  debug_fn.eglClientWaitSyncKHRFn = 0;
+  if (ext.b_EGL_KHR_fence_sync || ext.b_EGL_KHR_reusable_sync) {
+    fn.eglClientWaitSyncKHRFn = reinterpret_cast<eglClientWaitSyncKHRProc>(
+        GetGLProcAddress("eglClientWaitSyncKHR"));
+    DCHECK(fn.eglClientWaitSyncKHRFn);
+  }
+
+  debug_fn.eglCreateImageKHRFn = 0;
+  if (ext.b_EGL_KHR_image || ext.b_EGL_KHR_image_base ||
+      ext.b_EGL_KHR_gl_texture_2D_image) {
+    fn.eglCreateImageKHRFn = reinterpret_cast<eglCreateImageKHRProc>(
+        GetGLProcAddress("eglCreateImageKHR"));
+    DCHECK(fn.eglCreateImageKHRFn);
+  }
+
+  debug_fn.eglCreateSyncKHRFn = 0;
+  if (ext.b_EGL_KHR_fence_sync || ext.b_EGL_KHR_reusable_sync) {
+    fn.eglCreateSyncKHRFn = reinterpret_cast<eglCreateSyncKHRProc>(
+        GetGLProcAddress("eglCreateSyncKHR"));
+    DCHECK(fn.eglCreateSyncKHRFn);
+  }
+
+  debug_fn.eglDestroyImageKHRFn = 0;
+  if (ext.b_EGL_KHR_image || ext.b_EGL_KHR_image_base) {
+    fn.eglDestroyImageKHRFn = reinterpret_cast<eglDestroyImageKHRProc>(
+        GetGLProcAddress("eglDestroyImageKHR"));
+    DCHECK(fn.eglDestroyImageKHRFn);
+  }
+
+  debug_fn.eglDestroySyncKHRFn = 0;
+  if (ext.b_EGL_KHR_fence_sync || ext.b_EGL_KHR_reusable_sync) {
+    fn.eglDestroySyncKHRFn = reinterpret_cast<eglDestroySyncKHRProc>(
+        GetGLProcAddress("eglDestroySyncKHR"));
+    DCHECK(fn.eglDestroySyncKHRFn);
+  }
+
+  debug_fn.eglGetPlatformDisplayEXTFn = 0;
+  if (ext.b_EGL_ANGLE_platform_angle) {
+    fn.eglGetPlatformDisplayEXTFn =
+        reinterpret_cast<eglGetPlatformDisplayEXTProc>(
+            GetGLProcAddress("eglGetPlatformDisplayEXT"));
+    DCHECK(fn.eglGetPlatformDisplayEXTFn);
+  }
+
+  debug_fn.eglGetSyncAttribKHRFn = 0;
+  if (ext.b_EGL_KHR_fence_sync || ext.b_EGL_KHR_reusable_sync) {
+    fn.eglGetSyncAttribKHRFn = reinterpret_cast<eglGetSyncAttribKHRProc>(
+        GetGLProcAddress("eglGetSyncAttribKHR"));
+    DCHECK(fn.eglGetSyncAttribKHRFn);
+  }
+
+  debug_fn.eglGetSyncValuesCHROMIUMFn = 0;
+  if (ext.b_EGL_CHROMIUM_sync_control) {
+    fn.eglGetSyncValuesCHROMIUMFn =
+        reinterpret_cast<eglGetSyncValuesCHROMIUMProc>(
+            GetGLProcAddress("eglGetSyncValuesCHROMIUM"));
+    DCHECK(fn.eglGetSyncValuesCHROMIUMFn);
+  }
+
+  debug_fn.eglPostSubBufferNVFn = 0;
+  if (ext.b_EGL_NV_post_sub_buffer) {
+    fn.eglPostSubBufferNVFn = reinterpret_cast<eglPostSubBufferNVProc>(
+        GetGLProcAddress("eglPostSubBufferNV"));
+    DCHECK(fn.eglPostSubBufferNVFn);
+  }
+
+  debug_fn.eglQuerySurfacePointerANGLEFn = 0;
+  if (ext.b_EGL_ANGLE_query_surface_pointer) {
+    fn.eglQuerySurfacePointerANGLEFn =
+        reinterpret_cast<eglQuerySurfacePointerANGLEProc>(
+            GetGLProcAddress("eglQuerySurfacePointerANGLE"));
+    DCHECK(fn.eglQuerySurfacePointerANGLEFn);
+  }
+
+  debug_fn.eglWaitSyncKHRFn = 0;
+  if (ext.b_EGL_KHR_fence_sync || ext.b_EGL_KHR_wait_sync) {
+    fn.eglWaitSyncKHRFn = reinterpret_cast<eglWaitSyncKHRProc>(
+        GetGLProcAddress("eglWaitSyncKHR"));
+    DCHECK(fn.eglWaitSyncKHRFn);
+  }
+
   if (g_debugBindingsInitialized)
     InitializeDebugBindings();
 }
diff --git a/ui/gl/gl_bindings_autogen_egl.h b/ui/gl/gl_bindings_autogen_egl.h
index a49935e..f184b6a 100644
--- a/ui/gl/gl_bindings_autogen_egl.h
+++ b/ui/gl/gl_bindings_autogen_egl.h
@@ -163,7 +163,9 @@
   bool b_EGL_CHROMIUM_sync_control;
   bool b_EGL_KHR_fence_sync;
   bool b_EGL_KHR_gl_texture_2D_image;
+  bool b_EGL_KHR_image;
   bool b_EGL_KHR_image_base;
+  bool b_EGL_KHR_reusable_sync;
   bool b_EGL_KHR_wait_sync;
   bool b_EGL_NV_post_sub_buffer;
 };
diff --git a/ui/gl/gl_bindings_autogen_gl.cc b/ui/gl/gl_bindings_autogen_gl.cc
index 435758d..642190c 100644
--- a/ui/gl/gl_bindings_autogen_gl.cc
+++ b/ui/gl/gl_bindings_autogen_gl.cc
@@ -10,7 +10,7 @@
 
 #include <string>
 
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_enums.h"
@@ -23,258 +23,30 @@
 static bool g_debugBindingsInitialized;
 DriverGL g_driver_gl;
 
-void glBeginQueryARBNotBound(GLenum target, GLuint id) {
-  NOTREACHED();
-}
-void glBindFramebufferEXTNotBound(GLenum target, GLuint framebuffer) {
-  NOTREACHED();
-}
-void glBindRenderbufferEXTNotBound(GLenum target, GLuint renderbuffer) {
-  NOTREACHED();
-}
-void glBindVertexArrayOESNotBound(GLuint array) {
-  NOTREACHED();
-}
-void glBlendBarrierKHRNotBound(void) {
-  NOTREACHED();
-}
-void glBlitFramebufferANGLENotBound(GLint srcX0,
-                                    GLint srcY0,
-                                    GLint srcX1,
-                                    GLint srcY1,
-                                    GLint dstX0,
-                                    GLint dstY0,
-                                    GLint dstX1,
-                                    GLint dstY1,
-                                    GLbitfield mask,
-                                    GLenum filter) {
-  NOTREACHED();
-}
-void glBlitFramebufferEXTNotBound(GLint srcX0,
-                                  GLint srcY0,
-                                  GLint srcX1,
-                                  GLint srcY1,
-                                  GLint dstX0,
-                                  GLint dstY0,
-                                  GLint dstX1,
-                                  GLint dstY1,
-                                  GLbitfield mask,
-                                  GLenum filter) {
-  NOTREACHED();
-}
-GLenum glCheckFramebufferStatusEXTNotBound(GLenum target) {
-  NOTREACHED();
-  return 0;
-}
-void glDeleteBuffersARBNotBound(GLsizei n, const GLuint* buffers) {
-  NOTREACHED();
-}
-void glDeleteFramebuffersEXTNotBound(GLsizei n, const GLuint* framebuffers) {
-  NOTREACHED();
-}
-void glDeleteQueriesARBNotBound(GLsizei n, const GLuint* ids) {
-  NOTREACHED();
-}
-void glDeleteRenderbuffersEXTNotBound(GLsizei n, const GLuint* renderbuffers) {
-  NOTREACHED();
-}
-void glDeleteVertexArraysOESNotBound(GLsizei n, const GLuint* arrays) {
-  NOTREACHED();
-}
-void glDrawArraysInstancedANGLENotBound(GLenum mode,
-                                        GLint first,
-                                        GLsizei count,
-                                        GLsizei primcount) {
-  NOTREACHED();
-}
-void glDrawBuffersARBNotBound(GLsizei n, const GLenum* bufs) {
-  NOTREACHED();
-}
-void glDrawElementsInstancedANGLENotBound(GLenum mode,
-                                          GLsizei count,
-                                          GLenum type,
-                                          const void* indices,
-                                          GLsizei primcount) {
-  NOTREACHED();
-}
-void glEndQueryARBNotBound(GLenum target) {
-  NOTREACHED();
-}
-void glFramebufferRenderbufferEXTNotBound(GLenum target,
-                                          GLenum attachment,
-                                          GLenum renderbuffertarget,
-                                          GLuint renderbuffer) {
-  NOTREACHED();
-}
-void glFramebufferTexture2DEXTNotBound(GLenum target,
-                                       GLenum attachment,
-                                       GLenum textarget,
-                                       GLuint texture,
-                                       GLint level) {
-  NOTREACHED();
-}
-void glGenBuffersARBNotBound(GLsizei n, GLuint* buffers) {
-  NOTREACHED();
-}
-void glGenerateMipmapEXTNotBound(GLenum target) {
-  NOTREACHED();
-}
-void glGenFramebuffersEXTNotBound(GLsizei n, GLuint* framebuffers) {
-  NOTREACHED();
-}
-void glGenQueriesARBNotBound(GLsizei n, GLuint* ids) {
-  NOTREACHED();
-}
-void glGenRenderbuffersEXTNotBound(GLsizei n, GLuint* renderbuffers) {
-  NOTREACHED();
-}
-void glGenVertexArraysOESNotBound(GLsizei n, GLuint* arrays) {
-  NOTREACHED();
-}
-void glGetFramebufferAttachmentParameterivEXTNotBound(GLenum target,
-                                                      GLenum attachment,
-                                                      GLenum pname,
-                                                      GLint* params) {
-  NOTREACHED();
-}
-GLenum glGetGraphicsResetStatusARBNotBound(void) {
-  NOTREACHED();
-  return 0;
-}
-void glGetProgramBinaryNotBound(GLuint program,
-                                GLsizei bufSize,
-                                GLsizei* length,
-                                GLenum* binaryFormat,
-                                GLvoid* binary) {
-  NOTREACHED();
-}
-void glGetQueryivARBNotBound(GLenum target, GLenum pname, GLint* params) {
-  NOTREACHED();
-}
-void glGetQueryObjectivARBNotBound(GLuint id, GLenum pname, GLint* params) {
-  NOTREACHED();
-}
-void glGetQueryObjectui64vNotBound(GLuint id, GLenum pname, GLuint64* params) {
-  NOTREACHED();
-}
-void glGetQueryObjectuivARBNotBound(GLuint id, GLenum pname, GLuint* params) {
-  NOTREACHED();
-}
-void glGetRenderbufferParameterivEXTNotBound(GLenum target,
-                                             GLenum pname,
-                                             GLint* params) {
-  NOTREACHED();
-}
-GLboolean glIsFramebufferEXTNotBound(GLuint framebuffer) {
-  NOTREACHED();
-  return 0;
-}
-GLboolean glIsQueryARBNotBound(GLuint query) {
-  NOTREACHED();
-  return 0;
-}
-GLboolean glIsRenderbufferEXTNotBound(GLuint renderbuffer) {
-  NOTREACHED();
-  return 0;
-}
-GLboolean glIsVertexArrayOESNotBound(GLuint array) {
-  NOTREACHED();
-  return 0;
-}
-void* glMapBufferNotBound(GLenum target, GLenum access) {
-  NOTREACHED();
-  return 0;
-}
-void* glMapBufferRangeNotBound(GLenum target,
-                               GLintptr offset,
-                               GLsizeiptr length,
-                               GLbitfield access) {
-  NOTREACHED();
-  return 0;
-}
-void glProgramBinaryNotBound(GLuint program,
-                             GLenum binaryFormat,
-                             const GLvoid* binary,
-                             GLsizei length) {
-  NOTREACHED();
-}
-void glQueryCounterNotBound(GLuint id, GLenum target) {
-  NOTREACHED();
-}
-void glRenderbufferStorageEXTNotBound(GLenum target,
-                                      GLenum internalformat,
-                                      GLsizei width,
-                                      GLsizei height) {
-  NOTREACHED();
-}
-void glRenderbufferStorageMultisampleANGLENotBound(GLenum target,
-                                                   GLsizei samples,
-                                                   GLenum internalformat,
-                                                   GLsizei width,
-                                                   GLsizei height) {
-  NOTREACHED();
-}
-void glRenderbufferStorageMultisampleEXTNotBound(GLenum target,
-                                                 GLsizei samples,
-                                                 GLenum internalformat,
-                                                 GLsizei width,
-                                                 GLsizei height) {
-  NOTREACHED();
-}
-void glTexStorage2DEXTNotBound(GLenum target,
-                               GLsizei levels,
-                               GLenum internalformat,
-                               GLsizei width,
-                               GLsizei height) {
-  NOTREACHED();
-}
-GLboolean glUnmapBufferNotBound(GLenum target) {
-  NOTREACHED();
-  return 0;
-}
-void glVertexAttribDivisorANGLENotBound(GLuint index, GLuint divisor) {
-  NOTREACHED();
-}
-
 void DriverGL::InitializeStaticBindings() {
   fn.glActiveTextureFn = reinterpret_cast<glActiveTextureProc>(
       GetGLProcAddress("glActiveTexture"));
   fn.glAttachShaderFn =
       reinterpret_cast<glAttachShaderProc>(GetGLProcAddress("glAttachShader"));
-  fn.glBeginQueryFn =
-      reinterpret_cast<glBeginQueryProc>(GetGLProcAddress("glBeginQuery"));
-  fn.glBeginQueryARBFn =
-      reinterpret_cast<glBeginQueryARBProc>(glBeginQueryARBNotBound);
-  fn.glBeginTransformFeedbackFn =
-      reinterpret_cast<glBeginTransformFeedbackProc>(
-          GetGLProcAddress("glBeginTransformFeedback"));
+  fn.glBeginQueryFn = 0;
+  fn.glBeginQueryARBFn = 0;
+  fn.glBeginTransformFeedbackFn = 0;
   fn.glBindAttribLocationFn = reinterpret_cast<glBindAttribLocationProc>(
       GetGLProcAddress("glBindAttribLocation"));
   fn.glBindBufferFn =
       reinterpret_cast<glBindBufferProc>(GetGLProcAddress("glBindBuffer"));
-  fn.glBindBufferBaseFn = reinterpret_cast<glBindBufferBaseProc>(
-      GetGLProcAddress("glBindBufferBase"));
-  fn.glBindBufferRangeFn = reinterpret_cast<glBindBufferRangeProc>(
-      GetGLProcAddress("glBindBufferRange"));
-  fn.glBindFragDataLocationFn = reinterpret_cast<glBindFragDataLocationProc>(
-      GetGLProcAddress("glBindFragDataLocation"));
-  fn.glBindFragDataLocationIndexedFn =
-      reinterpret_cast<glBindFragDataLocationIndexedProc>(
-          GetGLProcAddress("glBindFragDataLocationIndexed"));
-  fn.glBindFramebufferEXTFn =
-      reinterpret_cast<glBindFramebufferEXTProc>(glBindFramebufferEXTNotBound);
-  fn.glBindRenderbufferEXTFn = reinterpret_cast<glBindRenderbufferEXTProc>(
-      glBindRenderbufferEXTNotBound);
-  fn.glBindSamplerFn =
-      reinterpret_cast<glBindSamplerProc>(GetGLProcAddress("glBindSampler"));
+  fn.glBindBufferBaseFn = 0;
+  fn.glBindBufferRangeFn = 0;
+  fn.glBindFragDataLocationFn = 0;
+  fn.glBindFragDataLocationIndexedFn = 0;
+  fn.glBindFramebufferEXTFn = 0;
+  fn.glBindRenderbufferEXTFn = 0;
+  fn.glBindSamplerFn = 0;
   fn.glBindTextureFn =
       reinterpret_cast<glBindTextureProc>(GetGLProcAddress("glBindTexture"));
-  fn.glBindTransformFeedbackFn = reinterpret_cast<glBindTransformFeedbackProc>(
-      GetGLProcAddress("glBindTransformFeedback"));
-  fn.glBindVertexArrayOESFn =
-      reinterpret_cast<glBindVertexArrayOESProc>(glBindVertexArrayOESNotBound);
-  fn.glBlendBarrierKHRFn =
-      reinterpret_cast<glBlendBarrierKHRProc>(glBlendBarrierKHRNotBound);
+  fn.glBindTransformFeedbackFn = 0;
+  fn.glBindVertexArrayOESFn = 0;
+  fn.glBlendBarrierKHRFn = 0;
   fn.glBlendColorFn =
       reinterpret_cast<glBlendColorProc>(GetGLProcAddress("glBlendColor"));
   fn.glBlendEquationFn = reinterpret_cast<glBlendEquationProc>(
@@ -285,101 +57,74 @@
       reinterpret_cast<glBlendFuncProc>(GetGLProcAddress("glBlendFunc"));
   fn.glBlendFuncSeparateFn = reinterpret_cast<glBlendFuncSeparateProc>(
       GetGLProcAddress("glBlendFuncSeparate"));
-  fn.glBlitFramebufferFn = reinterpret_cast<glBlitFramebufferProc>(
-      GetGLProcAddress("glBlitFramebuffer"));
-  fn.glBlitFramebufferANGLEFn = reinterpret_cast<glBlitFramebufferANGLEProc>(
-      glBlitFramebufferANGLENotBound);
-  fn.glBlitFramebufferEXTFn =
-      reinterpret_cast<glBlitFramebufferEXTProc>(glBlitFramebufferEXTNotBound);
+  fn.glBlitFramebufferFn = 0;
+  fn.glBlitFramebufferANGLEFn = 0;
+  fn.glBlitFramebufferEXTFn = 0;
   fn.glBufferDataFn =
       reinterpret_cast<glBufferDataProc>(GetGLProcAddress("glBufferData"));
   fn.glBufferSubDataFn = reinterpret_cast<glBufferSubDataProc>(
       GetGLProcAddress("glBufferSubData"));
-  fn.glCheckFramebufferStatusEXTFn =
-      reinterpret_cast<glCheckFramebufferStatusEXTProc>(
-          glCheckFramebufferStatusEXTNotBound);
+  fn.glCheckFramebufferStatusEXTFn = 0;
   fn.glClearFn = reinterpret_cast<glClearProc>(GetGLProcAddress("glClear"));
-  fn.glClearBufferfiFn = reinterpret_cast<glClearBufferfiProc>(
-      GetGLProcAddress("glClearBufferfi"));
-  fn.glClearBufferfvFn = reinterpret_cast<glClearBufferfvProc>(
-      GetGLProcAddress("glClearBufferfv"));
-  fn.glClearBufferivFn = reinterpret_cast<glClearBufferivProc>(
-      GetGLProcAddress("glClearBufferiv"));
-  fn.glClearBufferuivFn = reinterpret_cast<glClearBufferuivProc>(
-      GetGLProcAddress("glClearBufferuiv"));
+  fn.glClearBufferfiFn = 0;
+  fn.glClearBufferfvFn = 0;
+  fn.glClearBufferivFn = 0;
+  fn.glClearBufferuivFn = 0;
   fn.glClearColorFn =
       reinterpret_cast<glClearColorProc>(GetGLProcAddress("glClearColor"));
   fn.glClearDepthFn =
       reinterpret_cast<glClearDepthProc>(GetGLProcAddress("glClearDepth"));
-  fn.glClearDepthfFn =
-      reinterpret_cast<glClearDepthfProc>(GetGLProcAddress("glClearDepthf"));
+  fn.glClearDepthfFn = 0;
   fn.glClearStencilFn =
       reinterpret_cast<glClearStencilProc>(GetGLProcAddress("glClearStencil"));
-  fn.glClientWaitSyncFn = reinterpret_cast<glClientWaitSyncProc>(
-      GetGLProcAddress("glClientWaitSync"));
+  fn.glClientWaitSyncFn = 0;
   fn.glColorMaskFn =
       reinterpret_cast<glColorMaskProc>(GetGLProcAddress("glColorMask"));
   fn.glCompileShaderFn = reinterpret_cast<glCompileShaderProc>(
       GetGLProcAddress("glCompileShader"));
   fn.glCompressedTexImage2DFn = reinterpret_cast<glCompressedTexImage2DProc>(
       GetGLProcAddress("glCompressedTexImage2D"));
-  fn.glCompressedTexImage3DFn = reinterpret_cast<glCompressedTexImage3DProc>(
-      GetGLProcAddress("glCompressedTexImage3D"));
+  fn.glCompressedTexImage3DFn = 0;
   fn.glCompressedTexSubImage2DFn =
       reinterpret_cast<glCompressedTexSubImage2DProc>(
           GetGLProcAddress("glCompressedTexSubImage2D"));
-  fn.glCopyBufferSubDataFn = reinterpret_cast<glCopyBufferSubDataProc>(
-      GetGLProcAddress("glCopyBufferSubData"));
+  fn.glCopyBufferSubDataFn = 0;
   fn.glCopyTexImage2DFn = reinterpret_cast<glCopyTexImage2DProc>(
       GetGLProcAddress("glCopyTexImage2D"));
   fn.glCopyTexSubImage2DFn = reinterpret_cast<glCopyTexSubImage2DProc>(
       GetGLProcAddress("glCopyTexSubImage2D"));
-  fn.glCopyTexSubImage3DFn = reinterpret_cast<glCopyTexSubImage3DProc>(
-      GetGLProcAddress("glCopyTexSubImage3D"));
+  fn.glCopyTexSubImage3DFn = 0;
   fn.glCreateProgramFn = reinterpret_cast<glCreateProgramProc>(
       GetGLProcAddress("glCreateProgram"));
   fn.glCreateShaderFn =
       reinterpret_cast<glCreateShaderProc>(GetGLProcAddress("glCreateShader"));
   fn.glCullFaceFn =
       reinterpret_cast<glCullFaceProc>(GetGLProcAddress("glCullFace"));
-  fn.glDeleteBuffersARBFn =
-      reinterpret_cast<glDeleteBuffersARBProc>(glDeleteBuffersARBNotBound);
-  fn.glDeleteFencesAPPLEFn = reinterpret_cast<glDeleteFencesAPPLEProc>(
-      GetGLProcAddress("glDeleteFencesAPPLE"));
-  fn.glDeleteFencesNVFn = reinterpret_cast<glDeleteFencesNVProc>(
-      GetGLProcAddress("glDeleteFencesNV"));
-  fn.glDeleteFramebuffersEXTFn = reinterpret_cast<glDeleteFramebuffersEXTProc>(
-      glDeleteFramebuffersEXTNotBound);
+  fn.glDeleteBuffersARBFn = reinterpret_cast<glDeleteBuffersARBProc>(
+      GetGLProcAddress("glDeleteBuffers"));
+  fn.glDeleteFencesAPPLEFn = 0;
+  fn.glDeleteFencesNVFn = 0;
+  fn.glDeleteFramebuffersEXTFn = 0;
   fn.glDeleteProgramFn = reinterpret_cast<glDeleteProgramProc>(
       GetGLProcAddress("glDeleteProgram"));
-  fn.glDeleteQueriesFn = reinterpret_cast<glDeleteQueriesProc>(
-      GetGLProcAddress("glDeleteQueries"));
-  fn.glDeleteQueriesARBFn =
-      reinterpret_cast<glDeleteQueriesARBProc>(glDeleteQueriesARBNotBound);
-  fn.glDeleteRenderbuffersEXTFn =
-      reinterpret_cast<glDeleteRenderbuffersEXTProc>(
-          glDeleteRenderbuffersEXTNotBound);
-  fn.glDeleteSamplersFn = reinterpret_cast<glDeleteSamplersProc>(
-      GetGLProcAddress("glDeleteSamplers"));
+  fn.glDeleteQueriesFn = 0;
+  fn.glDeleteQueriesARBFn = 0;
+  fn.glDeleteRenderbuffersEXTFn = 0;
+  fn.glDeleteSamplersFn = 0;
   fn.glDeleteShaderFn =
       reinterpret_cast<glDeleteShaderProc>(GetGLProcAddress("glDeleteShader"));
-  fn.glDeleteSyncFn =
-      reinterpret_cast<glDeleteSyncProc>(GetGLProcAddress("glDeleteSync"));
+  fn.glDeleteSyncFn = 0;
   fn.glDeleteTexturesFn = reinterpret_cast<glDeleteTexturesProc>(
       GetGLProcAddress("glDeleteTextures"));
-  fn.glDeleteTransformFeedbacksFn =
-      reinterpret_cast<glDeleteTransformFeedbacksProc>(
-          GetGLProcAddress("glDeleteTransformFeedbacks"));
-  fn.glDeleteVertexArraysOESFn = reinterpret_cast<glDeleteVertexArraysOESProc>(
-      glDeleteVertexArraysOESNotBound);
+  fn.glDeleteTransformFeedbacksFn = 0;
+  fn.glDeleteVertexArraysOESFn = 0;
   fn.glDepthFuncFn =
       reinterpret_cast<glDepthFuncProc>(GetGLProcAddress("glDepthFunc"));
   fn.glDepthMaskFn =
       reinterpret_cast<glDepthMaskProc>(GetGLProcAddress("glDepthMask"));
   fn.glDepthRangeFn =
       reinterpret_cast<glDepthRangeProc>(GetGLProcAddress("glDepthRange"));
-  fn.glDepthRangefFn =
-      reinterpret_cast<glDepthRangefProc>(GetGLProcAddress("glDepthRangef"));
+  fn.glDepthRangefFn = 0;
   fn.glDetachShaderFn =
       reinterpret_cast<glDetachShaderProc>(GetGLProcAddress("glDetachShader"));
   fn.glDisableFn =
@@ -387,104 +132,59 @@
   fn.glDisableVertexAttribArrayFn =
       reinterpret_cast<glDisableVertexAttribArrayProc>(
           GetGLProcAddress("glDisableVertexAttribArray"));
-  fn.glDiscardFramebufferEXTFn = reinterpret_cast<glDiscardFramebufferEXTProc>(
-      GetGLProcAddress("glDiscardFramebufferEXT"));
+  fn.glDiscardFramebufferEXTFn = 0;
   fn.glDrawArraysFn =
       reinterpret_cast<glDrawArraysProc>(GetGLProcAddress("glDrawArrays"));
-  fn.glDrawArraysInstancedANGLEFn =
-      reinterpret_cast<glDrawArraysInstancedANGLEProc>(
-          glDrawArraysInstancedANGLENotBound);
-  fn.glDrawBufferFn =
-      reinterpret_cast<glDrawBufferProc>(GetGLProcAddress("glDrawBuffer"));
-  fn.glDrawBuffersARBFn =
-      reinterpret_cast<glDrawBuffersARBProc>(glDrawBuffersARBNotBound);
+  fn.glDrawArraysInstancedANGLEFn = 0;
+  fn.glDrawBufferFn = 0;
+  fn.glDrawBuffersARBFn = 0;
   fn.glDrawElementsFn =
       reinterpret_cast<glDrawElementsProc>(GetGLProcAddress("glDrawElements"));
-  fn.glDrawElementsInstancedANGLEFn =
-      reinterpret_cast<glDrawElementsInstancedANGLEProc>(
-          glDrawElementsInstancedANGLENotBound);
-  fn.glDrawRangeElementsFn = reinterpret_cast<glDrawRangeElementsProc>(
-      GetGLProcAddress("glDrawRangeElements"));
-  fn.glEGLImageTargetRenderbufferStorageOESFn =
-      reinterpret_cast<glEGLImageTargetRenderbufferStorageOESProc>(
-          GetGLProcAddress("glEGLImageTargetRenderbufferStorageOES"));
-  fn.glEGLImageTargetTexture2DOESFn =
-      reinterpret_cast<glEGLImageTargetTexture2DOESProc>(
-          GetGLProcAddress("glEGLImageTargetTexture2DOES"));
+  fn.glDrawElementsInstancedANGLEFn = 0;
+  fn.glDrawRangeElementsFn = 0;
+  fn.glEGLImageTargetRenderbufferStorageOESFn = 0;
+  fn.glEGLImageTargetTexture2DOESFn = 0;
   fn.glEnableFn = reinterpret_cast<glEnableProc>(GetGLProcAddress("glEnable"));
   fn.glEnableVertexAttribArrayFn =
       reinterpret_cast<glEnableVertexAttribArrayProc>(
           GetGLProcAddress("glEnableVertexAttribArray"));
-  fn.glEndQueryFn =
-      reinterpret_cast<glEndQueryProc>(GetGLProcAddress("glEndQuery"));
-  fn.glEndQueryARBFn =
-      reinterpret_cast<glEndQueryARBProc>(glEndQueryARBNotBound);
-  fn.glEndTransformFeedbackFn = reinterpret_cast<glEndTransformFeedbackProc>(
-      GetGLProcAddress("glEndTransformFeedback"));
-  fn.glFenceSyncFn =
-      reinterpret_cast<glFenceSyncProc>(GetGLProcAddress("glFenceSync"));
+  fn.glEndQueryFn = 0;
+  fn.glEndQueryARBFn = 0;
+  fn.glEndTransformFeedbackFn = 0;
+  fn.glFenceSyncFn = 0;
   fn.glFinishFn = reinterpret_cast<glFinishProc>(GetGLProcAddress("glFinish"));
-  fn.glFinishFenceAPPLEFn = reinterpret_cast<glFinishFenceAPPLEProc>(
-      GetGLProcAddress("glFinishFenceAPPLE"));
-  fn.glFinishFenceNVFn = reinterpret_cast<glFinishFenceNVProc>(
-      GetGLProcAddress("glFinishFenceNV"));
+  fn.glFinishFenceAPPLEFn = 0;
+  fn.glFinishFenceNVFn = 0;
   fn.glFlushFn = reinterpret_cast<glFlushProc>(GetGLProcAddress("glFlush"));
-  fn.glFlushMappedBufferRangeFn =
-      reinterpret_cast<glFlushMappedBufferRangeProc>(
-          GetGLProcAddress("glFlushMappedBufferRange"));
-  fn.glFramebufferRenderbufferEXTFn =
-      reinterpret_cast<glFramebufferRenderbufferEXTProc>(
-          glFramebufferRenderbufferEXTNotBound);
-  fn.glFramebufferTexture2DEXTFn =
-      reinterpret_cast<glFramebufferTexture2DEXTProc>(
-          glFramebufferTexture2DEXTNotBound);
-  fn.glFramebufferTexture2DMultisampleEXTFn =
-      reinterpret_cast<glFramebufferTexture2DMultisampleEXTProc>(
-          GetGLProcAddress("glFramebufferTexture2DMultisampleEXT"));
-  fn.glFramebufferTexture2DMultisampleIMGFn =
-      reinterpret_cast<glFramebufferTexture2DMultisampleIMGProc>(
-          GetGLProcAddress("glFramebufferTexture2DMultisampleIMG"));
-  fn.glFramebufferTextureLayerFn =
-      reinterpret_cast<glFramebufferTextureLayerProc>(
-          GetGLProcAddress("glFramebufferTextureLayer"));
+  fn.glFlushMappedBufferRangeFn = 0;
+  fn.glFramebufferRenderbufferEXTFn = 0;
+  fn.glFramebufferTexture2DEXTFn = 0;
+  fn.glFramebufferTexture2DMultisampleEXTFn = 0;
+  fn.glFramebufferTexture2DMultisampleIMGFn = 0;
+  fn.glFramebufferTextureLayerFn = 0;
   fn.glFrontFaceFn =
       reinterpret_cast<glFrontFaceProc>(GetGLProcAddress("glFrontFace"));
   fn.glGenBuffersARBFn =
-      reinterpret_cast<glGenBuffersARBProc>(glGenBuffersARBNotBound);
-  fn.glGenerateMipmapEXTFn =
-      reinterpret_cast<glGenerateMipmapEXTProc>(glGenerateMipmapEXTNotBound);
-  fn.glGenFencesAPPLEFn = reinterpret_cast<glGenFencesAPPLEProc>(
-      GetGLProcAddress("glGenFencesAPPLE"));
-  fn.glGenFencesNVFn =
-      reinterpret_cast<glGenFencesNVProc>(GetGLProcAddress("glGenFencesNV"));
-  fn.glGenFramebuffersEXTFn =
-      reinterpret_cast<glGenFramebuffersEXTProc>(glGenFramebuffersEXTNotBound);
-  fn.glGenQueriesFn =
-      reinterpret_cast<glGenQueriesProc>(GetGLProcAddress("glGenQueries"));
-  fn.glGenQueriesARBFn =
-      reinterpret_cast<glGenQueriesARBProc>(glGenQueriesARBNotBound);
-  fn.glGenRenderbuffersEXTFn = reinterpret_cast<glGenRenderbuffersEXTProc>(
-      glGenRenderbuffersEXTNotBound);
-  fn.glGenSamplersFn =
-      reinterpret_cast<glGenSamplersProc>(GetGLProcAddress("glGenSamplers"));
+      reinterpret_cast<glGenBuffersARBProc>(GetGLProcAddress("glGenBuffers"));
+  fn.glGenerateMipmapEXTFn = 0;
+  fn.glGenFencesAPPLEFn = 0;
+  fn.glGenFencesNVFn = 0;
+  fn.glGenFramebuffersEXTFn = 0;
+  fn.glGenQueriesFn = 0;
+  fn.glGenQueriesARBFn = 0;
+  fn.glGenRenderbuffersEXTFn = 0;
+  fn.glGenSamplersFn = 0;
   fn.glGenTexturesFn =
       reinterpret_cast<glGenTexturesProc>(GetGLProcAddress("glGenTextures"));
-  fn.glGenTransformFeedbacksFn = reinterpret_cast<glGenTransformFeedbacksProc>(
-      GetGLProcAddress("glGenTransformFeedbacks"));
-  fn.glGenVertexArraysOESFn =
-      reinterpret_cast<glGenVertexArraysOESProc>(glGenVertexArraysOESNotBound);
+  fn.glGenTransformFeedbacksFn = 0;
+  fn.glGenVertexArraysOESFn = 0;
   fn.glGetActiveAttribFn = reinterpret_cast<glGetActiveAttribProc>(
       GetGLProcAddress("glGetActiveAttrib"));
   fn.glGetActiveUniformFn = reinterpret_cast<glGetActiveUniformProc>(
       GetGLProcAddress("glGetActiveUniform"));
-  fn.glGetActiveUniformBlockivFn =
-      reinterpret_cast<glGetActiveUniformBlockivProc>(
-          GetGLProcAddress("glGetActiveUniformBlockiv"));
-  fn.glGetActiveUniformBlockNameFn =
-      reinterpret_cast<glGetActiveUniformBlockNameProc>(
-          GetGLProcAddress("glGetActiveUniformBlockName"));
-  fn.glGetActiveUniformsivFn = reinterpret_cast<glGetActiveUniformsivProc>(
-      GetGLProcAddress("glGetActiveUniformsiv"));
+  fn.glGetActiveUniformBlockivFn = 0;
+  fn.glGetActiveUniformBlockNameFn = 0;
+  fn.glGetActiveUniformsivFn = 0;
   fn.glGetAttachedShadersFn = reinterpret_cast<glGetAttachedShadersProc>(
       GetGLProcAddress("glGetAttachedShaders"));
   fn.glGetAttribLocationFn = reinterpret_cast<glGetAttribLocationProc>(
@@ -495,92 +195,56 @@
       GetGLProcAddress("glGetBufferParameteriv"));
   fn.glGetErrorFn =
       reinterpret_cast<glGetErrorProc>(GetGLProcAddress("glGetError"));
-  fn.glGetFenceivNVFn =
-      reinterpret_cast<glGetFenceivNVProc>(GetGLProcAddress("glGetFenceivNV"));
+  fn.glGetFenceivNVFn = 0;
   fn.glGetFloatvFn =
       reinterpret_cast<glGetFloatvProc>(GetGLProcAddress("glGetFloatv"));
-  fn.glGetFragDataLocationFn = reinterpret_cast<glGetFragDataLocationProc>(
-      GetGLProcAddress("glGetFragDataLocation"));
-  fn.glGetFramebufferAttachmentParameterivEXTFn =
-      reinterpret_cast<glGetFramebufferAttachmentParameterivEXTProc>(
-          glGetFramebufferAttachmentParameterivEXTNotBound);
-  fn.glGetGraphicsResetStatusARBFn =
-      reinterpret_cast<glGetGraphicsResetStatusARBProc>(
-          glGetGraphicsResetStatusARBNotBound);
-  fn.glGetInteger64i_vFn = reinterpret_cast<glGetInteger64i_vProc>(
-      GetGLProcAddress("glGetInteger64i_v"));
-  fn.glGetInteger64vFn = reinterpret_cast<glGetInteger64vProc>(
-      GetGLProcAddress("glGetInteger64v"));
-  fn.glGetIntegeri_vFn = reinterpret_cast<glGetIntegeri_vProc>(
-      GetGLProcAddress("glGetIntegeri_v"));
+  fn.glGetFragDataLocationFn = 0;
+  fn.glGetFramebufferAttachmentParameterivEXTFn = 0;
+  fn.glGetGraphicsResetStatusARBFn = 0;
+  fn.glGetInteger64i_vFn = 0;
+  fn.glGetInteger64vFn = 0;
+  fn.glGetIntegeri_vFn = 0;
   fn.glGetIntegervFn =
       reinterpret_cast<glGetIntegervProc>(GetGLProcAddress("glGetIntegerv"));
-  fn.glGetInternalformativFn = reinterpret_cast<glGetInternalformativProc>(
-      GetGLProcAddress("glGetInternalformativ"));
-  fn.glGetProgramBinaryFn =
-      reinterpret_cast<glGetProgramBinaryProc>(glGetProgramBinaryNotBound);
+  fn.glGetInternalformativFn = 0;
+  fn.glGetProgramBinaryFn = 0;
   fn.glGetProgramInfoLogFn = reinterpret_cast<glGetProgramInfoLogProc>(
       GetGLProcAddress("glGetProgramInfoLog"));
   fn.glGetProgramivFn =
       reinterpret_cast<glGetProgramivProc>(GetGLProcAddress("glGetProgramiv"));
-  fn.glGetQueryivFn =
-      reinterpret_cast<glGetQueryivProc>(GetGLProcAddress("glGetQueryiv"));
-  fn.glGetQueryivARBFn =
-      reinterpret_cast<glGetQueryivARBProc>(glGetQueryivARBNotBound);
-  fn.glGetQueryObjecti64vFn = reinterpret_cast<glGetQueryObjecti64vProc>(
-      GetGLProcAddress("glGetQueryObjecti64v"));
-  fn.glGetQueryObjectivFn = reinterpret_cast<glGetQueryObjectivProc>(
-      GetGLProcAddress("glGetQueryObjectiv"));
-  fn.glGetQueryObjectivARBFn = reinterpret_cast<glGetQueryObjectivARBProc>(
-      glGetQueryObjectivARBNotBound);
-  fn.glGetQueryObjectui64vFn = reinterpret_cast<glGetQueryObjectui64vProc>(
-      glGetQueryObjectui64vNotBound);
-  fn.glGetQueryObjectuivFn = reinterpret_cast<glGetQueryObjectuivProc>(
-      GetGLProcAddress("glGetQueryObjectuiv"));
-  fn.glGetQueryObjectuivARBFn = reinterpret_cast<glGetQueryObjectuivARBProc>(
-      glGetQueryObjectuivARBNotBound);
-  fn.glGetRenderbufferParameterivEXTFn =
-      reinterpret_cast<glGetRenderbufferParameterivEXTProc>(
-          glGetRenderbufferParameterivEXTNotBound);
-  fn.glGetSamplerParameterfvFn = reinterpret_cast<glGetSamplerParameterfvProc>(
-      GetGLProcAddress("glGetSamplerParameterfv"));
-  fn.glGetSamplerParameterivFn = reinterpret_cast<glGetSamplerParameterivProc>(
-      GetGLProcAddress("glGetSamplerParameteriv"));
+  fn.glGetQueryivFn = 0;
+  fn.glGetQueryivARBFn = 0;
+  fn.glGetQueryObjecti64vFn = 0;
+  fn.glGetQueryObjectivFn = 0;
+  fn.glGetQueryObjectivARBFn = 0;
+  fn.glGetQueryObjectui64vFn = 0;
+  fn.glGetQueryObjectuivFn = 0;
+  fn.glGetQueryObjectuivARBFn = 0;
+  fn.glGetRenderbufferParameterivEXTFn = 0;
+  fn.glGetSamplerParameterfvFn = 0;
+  fn.glGetSamplerParameterivFn = 0;
   fn.glGetShaderInfoLogFn = reinterpret_cast<glGetShaderInfoLogProc>(
       GetGLProcAddress("glGetShaderInfoLog"));
   fn.glGetShaderivFn =
       reinterpret_cast<glGetShaderivProc>(GetGLProcAddress("glGetShaderiv"));
-  fn.glGetShaderPrecisionFormatFn =
-      reinterpret_cast<glGetShaderPrecisionFormatProc>(
-          GetGLProcAddress("glGetShaderPrecisionFormat"));
+  fn.glGetShaderPrecisionFormatFn = 0;
   fn.glGetShaderSourceFn = reinterpret_cast<glGetShaderSourceProc>(
       GetGLProcAddress("glGetShaderSource"));
   fn.glGetStringFn =
       reinterpret_cast<glGetStringProc>(GetGLProcAddress("glGetString"));
-  fn.glGetSyncivFn =
-      reinterpret_cast<glGetSyncivProc>(GetGLProcAddress("glGetSynciv"));
-  fn.glGetTexLevelParameterfvFn =
-      reinterpret_cast<glGetTexLevelParameterfvProc>(
-          GetGLProcAddress("glGetTexLevelParameterfv"));
-  fn.glGetTexLevelParameterivFn =
-      reinterpret_cast<glGetTexLevelParameterivProc>(
-          GetGLProcAddress("glGetTexLevelParameteriv"));
+  fn.glGetSyncivFn = 0;
+  fn.glGetTexLevelParameterfvFn = 0;
+  fn.glGetTexLevelParameterivFn = 0;
   fn.glGetTexParameterfvFn = reinterpret_cast<glGetTexParameterfvProc>(
       GetGLProcAddress("glGetTexParameterfv"));
   fn.glGetTexParameterivFn = reinterpret_cast<glGetTexParameterivProc>(
       GetGLProcAddress("glGetTexParameteriv"));
-  fn.glGetTransformFeedbackVaryingFn =
-      reinterpret_cast<glGetTransformFeedbackVaryingProc>(
-          GetGLProcAddress("glGetTransformFeedbackVarying"));
-  fn.glGetTranslatedShaderSourceANGLEFn =
-      reinterpret_cast<glGetTranslatedShaderSourceANGLEProc>(
-          GetGLProcAddress("glGetTranslatedShaderSourceANGLE"));
-  fn.glGetUniformBlockIndexFn = reinterpret_cast<glGetUniformBlockIndexProc>(
-      GetGLProcAddress("glGetUniformBlockIndex"));
+  fn.glGetTransformFeedbackVaryingFn = 0;
+  fn.glGetTranslatedShaderSourceANGLEFn = 0;
+  fn.glGetUniformBlockIndexFn = 0;
   fn.glGetUniformfvFn =
       reinterpret_cast<glGetUniformfvProc>(GetGLProcAddress("glGetUniformfv"));
-  fn.glGetUniformIndicesFn = reinterpret_cast<glGetUniformIndicesProc>(
-      GetGLProcAddress("glGetUniformIndices"));
+  fn.glGetUniformIndicesFn = 0;
   fn.glGetUniformivFn =
       reinterpret_cast<glGetUniformivProc>(GetGLProcAddress("glGetUniformiv"));
   fn.glGetUniformLocationFn = reinterpret_cast<glGetUniformLocationProc>(
@@ -593,113 +257,69 @@
       reinterpret_cast<glGetVertexAttribPointervProc>(
           GetGLProcAddress("glGetVertexAttribPointerv"));
   fn.glHintFn = reinterpret_cast<glHintProc>(GetGLProcAddress("glHint"));
-  fn.glInsertEventMarkerEXTFn = reinterpret_cast<glInsertEventMarkerEXTProc>(
-      GetGLProcAddress("glInsertEventMarkerEXT"));
-  fn.glInvalidateFramebufferFn = reinterpret_cast<glInvalidateFramebufferProc>(
-      GetGLProcAddress("glInvalidateFramebuffer"));
-  fn.glInvalidateSubFramebufferFn =
-      reinterpret_cast<glInvalidateSubFramebufferProc>(
-          GetGLProcAddress("glInvalidateSubFramebuffer"));
+  fn.glInsertEventMarkerEXTFn = 0;
+  fn.glInvalidateFramebufferFn = 0;
+  fn.glInvalidateSubFramebufferFn = 0;
   fn.glIsBufferFn =
       reinterpret_cast<glIsBufferProc>(GetGLProcAddress("glIsBuffer"));
   fn.glIsEnabledFn =
       reinterpret_cast<glIsEnabledProc>(GetGLProcAddress("glIsEnabled"));
-  fn.glIsFenceAPPLEFn =
-      reinterpret_cast<glIsFenceAPPLEProc>(GetGLProcAddress("glIsFenceAPPLE"));
-  fn.glIsFenceNVFn =
-      reinterpret_cast<glIsFenceNVProc>(GetGLProcAddress("glIsFenceNV"));
-  fn.glIsFramebufferEXTFn =
-      reinterpret_cast<glIsFramebufferEXTProc>(glIsFramebufferEXTNotBound);
+  fn.glIsFenceAPPLEFn = 0;
+  fn.glIsFenceNVFn = 0;
+  fn.glIsFramebufferEXTFn = 0;
   fn.glIsProgramFn =
       reinterpret_cast<glIsProgramProc>(GetGLProcAddress("glIsProgram"));
-  fn.glIsQueryFn =
-      reinterpret_cast<glIsQueryProc>(GetGLProcAddress("glIsQuery"));
-  fn.glIsQueryARBFn = reinterpret_cast<glIsQueryARBProc>(glIsQueryARBNotBound);
-  fn.glIsRenderbufferEXTFn =
-      reinterpret_cast<glIsRenderbufferEXTProc>(glIsRenderbufferEXTNotBound);
-  fn.glIsSamplerFn =
-      reinterpret_cast<glIsSamplerProc>(GetGLProcAddress("glIsSampler"));
+  fn.glIsQueryFn = 0;
+  fn.glIsQueryARBFn = 0;
+  fn.glIsRenderbufferEXTFn = 0;
+  fn.glIsSamplerFn = 0;
   fn.glIsShaderFn =
       reinterpret_cast<glIsShaderProc>(GetGLProcAddress("glIsShader"));
-  fn.glIsSyncFn = reinterpret_cast<glIsSyncProc>(GetGLProcAddress("glIsSync"));
+  fn.glIsSyncFn = 0;
   fn.glIsTextureFn =
       reinterpret_cast<glIsTextureProc>(GetGLProcAddress("glIsTexture"));
-  fn.glIsTransformFeedbackFn = reinterpret_cast<glIsTransformFeedbackProc>(
-      GetGLProcAddress("glIsTransformFeedback"));
-  fn.glIsVertexArrayOESFn =
-      reinterpret_cast<glIsVertexArrayOESProc>(glIsVertexArrayOESNotBound);
+  fn.glIsTransformFeedbackFn = 0;
+  fn.glIsVertexArrayOESFn = 0;
   fn.glLineWidthFn =
       reinterpret_cast<glLineWidthProc>(GetGLProcAddress("glLineWidth"));
   fn.glLinkProgramFn =
       reinterpret_cast<glLinkProgramProc>(GetGLProcAddress("glLinkProgram"));
-  fn.glMapBufferFn = reinterpret_cast<glMapBufferProc>(glMapBufferNotBound);
-  fn.glMapBufferRangeFn =
-      reinterpret_cast<glMapBufferRangeProc>(glMapBufferRangeNotBound);
-  fn.glMatrixLoadfEXTFn = reinterpret_cast<glMatrixLoadfEXTProc>(
-      GetGLProcAddress("glMatrixLoadfEXT"));
-  fn.glMatrixLoadIdentityEXTFn = reinterpret_cast<glMatrixLoadIdentityEXTProc>(
-      GetGLProcAddress("glMatrixLoadIdentityEXT"));
-  fn.glPauseTransformFeedbackFn =
-      reinterpret_cast<glPauseTransformFeedbackProc>(
-          GetGLProcAddress("glPauseTransformFeedback"));
+  fn.glMapBufferFn = 0;
+  fn.glMapBufferRangeFn = 0;
+  fn.glMatrixLoadfEXTFn = 0;
+  fn.glMatrixLoadIdentityEXTFn = 0;
+  fn.glPauseTransformFeedbackFn = 0;
   fn.glPixelStoreiFn =
       reinterpret_cast<glPixelStoreiProc>(GetGLProcAddress("glPixelStorei"));
-  fn.glPointParameteriFn = reinterpret_cast<glPointParameteriProc>(
-      GetGLProcAddress("glPointParameteri"));
+  fn.glPointParameteriFn = 0;
   fn.glPolygonOffsetFn = reinterpret_cast<glPolygonOffsetProc>(
       GetGLProcAddress("glPolygonOffset"));
-  fn.glPopGroupMarkerEXTFn = reinterpret_cast<glPopGroupMarkerEXTProc>(
-      GetGLProcAddress("glPopGroupMarkerEXT"));
-  fn.glProgramBinaryFn =
-      reinterpret_cast<glProgramBinaryProc>(glProgramBinaryNotBound);
-  fn.glProgramParameteriFn = reinterpret_cast<glProgramParameteriProc>(
-      GetGLProcAddress("glProgramParameteri"));
-  fn.glPushGroupMarkerEXTFn = reinterpret_cast<glPushGroupMarkerEXTProc>(
-      GetGLProcAddress("glPushGroupMarkerEXT"));
-  fn.glQueryCounterFn =
-      reinterpret_cast<glQueryCounterProc>(glQueryCounterNotBound);
-  fn.glReadBufferFn =
-      reinterpret_cast<glReadBufferProc>(GetGLProcAddress("glReadBuffer"));
+  fn.glPopGroupMarkerEXTFn = 0;
+  fn.glProgramBinaryFn = 0;
+  fn.glProgramParameteriFn = 0;
+  fn.glPushGroupMarkerEXTFn = 0;
+  fn.glQueryCounterFn = 0;
+  fn.glReadBufferFn = 0;
   fn.glReadPixelsFn =
       reinterpret_cast<glReadPixelsProc>(GetGLProcAddress("glReadPixels"));
-  fn.glReleaseShaderCompilerFn = reinterpret_cast<glReleaseShaderCompilerProc>(
-      GetGLProcAddress("glReleaseShaderCompiler"));
-  fn.glRenderbufferStorageEXTFn =
-      reinterpret_cast<glRenderbufferStorageEXTProc>(
-          glRenderbufferStorageEXTNotBound);
-  fn.glRenderbufferStorageMultisampleFn =
-      reinterpret_cast<glRenderbufferStorageMultisampleProc>(
-          GetGLProcAddress("glRenderbufferStorageMultisample"));
-  fn.glRenderbufferStorageMultisampleANGLEFn =
-      reinterpret_cast<glRenderbufferStorageMultisampleANGLEProc>(
-          glRenderbufferStorageMultisampleANGLENotBound);
-  fn.glRenderbufferStorageMultisampleEXTFn =
-      reinterpret_cast<glRenderbufferStorageMultisampleEXTProc>(
-          glRenderbufferStorageMultisampleEXTNotBound);
-  fn.glRenderbufferStorageMultisampleIMGFn =
-      reinterpret_cast<glRenderbufferStorageMultisampleIMGProc>(
-          GetGLProcAddress("glRenderbufferStorageMultisampleIMG"));
-  fn.glResumeTransformFeedbackFn =
-      reinterpret_cast<glResumeTransformFeedbackProc>(
-          GetGLProcAddress("glResumeTransformFeedback"));
+  fn.glReleaseShaderCompilerFn = 0;
+  fn.glRenderbufferStorageEXTFn = 0;
+  fn.glRenderbufferStorageMultisampleFn = 0;
+  fn.glRenderbufferStorageMultisampleANGLEFn = 0;
+  fn.glRenderbufferStorageMultisampleEXTFn = 0;
+  fn.glRenderbufferStorageMultisampleIMGFn = 0;
+  fn.glResumeTransformFeedbackFn = 0;
   fn.glSampleCoverageFn = reinterpret_cast<glSampleCoverageProc>(
       GetGLProcAddress("glSampleCoverage"));
-  fn.glSamplerParameterfFn = reinterpret_cast<glSamplerParameterfProc>(
-      GetGLProcAddress("glSamplerParameterf"));
-  fn.glSamplerParameterfvFn = reinterpret_cast<glSamplerParameterfvProc>(
-      GetGLProcAddress("glSamplerParameterfv"));
-  fn.glSamplerParameteriFn = reinterpret_cast<glSamplerParameteriProc>(
-      GetGLProcAddress("glSamplerParameteri"));
-  fn.glSamplerParameterivFn = reinterpret_cast<glSamplerParameterivProc>(
-      GetGLProcAddress("glSamplerParameteriv"));
+  fn.glSamplerParameterfFn = 0;
+  fn.glSamplerParameterfvFn = 0;
+  fn.glSamplerParameteriFn = 0;
+  fn.glSamplerParameterivFn = 0;
   fn.glScissorFn =
       reinterpret_cast<glScissorProc>(GetGLProcAddress("glScissor"));
-  fn.glSetFenceAPPLEFn = reinterpret_cast<glSetFenceAPPLEProc>(
-      GetGLProcAddress("glSetFenceAPPLE"));
-  fn.glSetFenceNVFn =
-      reinterpret_cast<glSetFenceNVProc>(GetGLProcAddress("glSetFenceNV"));
-  fn.glShaderBinaryFn =
-      reinterpret_cast<glShaderBinaryProc>(GetGLProcAddress("glShaderBinary"));
+  fn.glSetFenceAPPLEFn = 0;
+  fn.glSetFenceNVFn = 0;
+  fn.glShaderBinaryFn = 0;
   fn.glShaderSourceFn =
       reinterpret_cast<glShaderSourceProc>(GetGLProcAddress("glShaderSource"));
   fn.glStencilFuncFn =
@@ -714,14 +334,11 @@
       reinterpret_cast<glStencilOpProc>(GetGLProcAddress("glStencilOp"));
   fn.glStencilOpSeparateFn = reinterpret_cast<glStencilOpSeparateProc>(
       GetGLProcAddress("glStencilOpSeparate"));
-  fn.glTestFenceAPPLEFn = reinterpret_cast<glTestFenceAPPLEProc>(
-      GetGLProcAddress("glTestFenceAPPLE"));
-  fn.glTestFenceNVFn =
-      reinterpret_cast<glTestFenceNVProc>(GetGLProcAddress("glTestFenceNV"));
+  fn.glTestFenceAPPLEFn = 0;
+  fn.glTestFenceNVFn = 0;
   fn.glTexImage2DFn =
       reinterpret_cast<glTexImage2DProc>(GetGLProcAddress("glTexImage2D"));
-  fn.glTexImage3DFn =
-      reinterpret_cast<glTexImage3DProc>(GetGLProcAddress("glTexImage3D"));
+  fn.glTexImage3DFn = 0;
   fn.glTexParameterfFn = reinterpret_cast<glTexParameterfProc>(
       GetGLProcAddress("glTexParameterf"));
   fn.glTexParameterfvFn = reinterpret_cast<glTexParameterfvProc>(
@@ -730,15 +347,11 @@
       GetGLProcAddress("glTexParameteri"));
   fn.glTexParameterivFn = reinterpret_cast<glTexParameterivProc>(
       GetGLProcAddress("glTexParameteriv"));
-  fn.glTexStorage2DEXTFn =
-      reinterpret_cast<glTexStorage2DEXTProc>(glTexStorage2DEXTNotBound);
-  fn.glTexStorage3DFn =
-      reinterpret_cast<glTexStorage3DProc>(GetGLProcAddress("glTexStorage3D"));
+  fn.glTexStorage2DEXTFn = 0;
+  fn.glTexStorage3DFn = 0;
   fn.glTexSubImage2DFn = reinterpret_cast<glTexSubImage2DProc>(
       GetGLProcAddress("glTexSubImage2D"));
-  fn.glTransformFeedbackVaryingsFn =
-      reinterpret_cast<glTransformFeedbackVaryingsProc>(
-          GetGLProcAddress("glTransformFeedbackVaryings"));
+  fn.glTransformFeedbackVaryingsFn = 0;
   fn.glUniform1fFn =
       reinterpret_cast<glUniform1fProc>(GetGLProcAddress("glUniform1f"));
   fn.glUniform1fvFn =
@@ -747,10 +360,8 @@
       reinterpret_cast<glUniform1iProc>(GetGLProcAddress("glUniform1i"));
   fn.glUniform1ivFn =
       reinterpret_cast<glUniform1ivProc>(GetGLProcAddress("glUniform1iv"));
-  fn.glUniform1uiFn =
-      reinterpret_cast<glUniform1uiProc>(GetGLProcAddress("glUniform1ui"));
-  fn.glUniform1uivFn =
-      reinterpret_cast<glUniform1uivProc>(GetGLProcAddress("glUniform1uiv"));
+  fn.glUniform1uiFn = 0;
+  fn.glUniform1uivFn = 0;
   fn.glUniform2fFn =
       reinterpret_cast<glUniform2fProc>(GetGLProcAddress("glUniform2f"));
   fn.glUniform2fvFn =
@@ -759,10 +370,8 @@
       reinterpret_cast<glUniform2iProc>(GetGLProcAddress("glUniform2i"));
   fn.glUniform2ivFn =
       reinterpret_cast<glUniform2ivProc>(GetGLProcAddress("glUniform2iv"));
-  fn.glUniform2uiFn =
-      reinterpret_cast<glUniform2uiProc>(GetGLProcAddress("glUniform2ui"));
-  fn.glUniform2uivFn =
-      reinterpret_cast<glUniform2uivProc>(GetGLProcAddress("glUniform2uiv"));
+  fn.glUniform2uiFn = 0;
+  fn.glUniform2uivFn = 0;
   fn.glUniform3fFn =
       reinterpret_cast<glUniform3fProc>(GetGLProcAddress("glUniform3f"));
   fn.glUniform3fvFn =
@@ -771,10 +380,8 @@
       reinterpret_cast<glUniform3iProc>(GetGLProcAddress("glUniform3i"));
   fn.glUniform3ivFn =
       reinterpret_cast<glUniform3ivProc>(GetGLProcAddress("glUniform3iv"));
-  fn.glUniform3uiFn =
-      reinterpret_cast<glUniform3uiProc>(GetGLProcAddress("glUniform3ui"));
-  fn.glUniform3uivFn =
-      reinterpret_cast<glUniform3uivProc>(GetGLProcAddress("glUniform3uiv"));
+  fn.glUniform3uiFn = 0;
+  fn.glUniform3uivFn = 0;
   fn.glUniform4fFn =
       reinterpret_cast<glUniform4fProc>(GetGLProcAddress("glUniform4f"));
   fn.glUniform4fvFn =
@@ -783,32 +390,22 @@
       reinterpret_cast<glUniform4iProc>(GetGLProcAddress("glUniform4i"));
   fn.glUniform4ivFn =
       reinterpret_cast<glUniform4ivProc>(GetGLProcAddress("glUniform4iv"));
-  fn.glUniform4uiFn =
-      reinterpret_cast<glUniform4uiProc>(GetGLProcAddress("glUniform4ui"));
-  fn.glUniform4uivFn =
-      reinterpret_cast<glUniform4uivProc>(GetGLProcAddress("glUniform4uiv"));
-  fn.glUniformBlockBindingFn = reinterpret_cast<glUniformBlockBindingProc>(
-      GetGLProcAddress("glUniformBlockBinding"));
+  fn.glUniform4uiFn = 0;
+  fn.glUniform4uivFn = 0;
+  fn.glUniformBlockBindingFn = 0;
   fn.glUniformMatrix2fvFn = reinterpret_cast<glUniformMatrix2fvProc>(
       GetGLProcAddress("glUniformMatrix2fv"));
-  fn.glUniformMatrix2x3fvFn = reinterpret_cast<glUniformMatrix2x3fvProc>(
-      GetGLProcAddress("glUniformMatrix2x3fv"));
-  fn.glUniformMatrix2x4fvFn = reinterpret_cast<glUniformMatrix2x4fvProc>(
-      GetGLProcAddress("glUniformMatrix2x4fv"));
+  fn.glUniformMatrix2x3fvFn = 0;
+  fn.glUniformMatrix2x4fvFn = 0;
   fn.glUniformMatrix3fvFn = reinterpret_cast<glUniformMatrix3fvProc>(
       GetGLProcAddress("glUniformMatrix3fv"));
-  fn.glUniformMatrix3x2fvFn = reinterpret_cast<glUniformMatrix3x2fvProc>(
-      GetGLProcAddress("glUniformMatrix3x2fv"));
-  fn.glUniformMatrix3x4fvFn = reinterpret_cast<glUniformMatrix3x4fvProc>(
-      GetGLProcAddress("glUniformMatrix3x4fv"));
+  fn.glUniformMatrix3x2fvFn = 0;
+  fn.glUniformMatrix3x4fvFn = 0;
   fn.glUniformMatrix4fvFn = reinterpret_cast<glUniformMatrix4fvProc>(
       GetGLProcAddress("glUniformMatrix4fv"));
-  fn.glUniformMatrix4x2fvFn = reinterpret_cast<glUniformMatrix4x2fvProc>(
-      GetGLProcAddress("glUniformMatrix4x2fv"));
-  fn.glUniformMatrix4x3fvFn = reinterpret_cast<glUniformMatrix4x3fvProc>(
-      GetGLProcAddress("glUniformMatrix4x3fv"));
-  fn.glUnmapBufferFn =
-      reinterpret_cast<glUnmapBufferProc>(glUnmapBufferNotBound);
+  fn.glUniformMatrix4x2fvFn = 0;
+  fn.glUniformMatrix4x3fvFn = 0;
+  fn.glUnmapBufferFn = 0;
   fn.glUseProgramFn =
       reinterpret_cast<glUseProgramProc>(GetGLProcAddress("glUseProgram"));
   fn.glValidateProgramFn = reinterpret_cast<glValidateProgramProc>(
@@ -829,25 +426,17 @@
       GetGLProcAddress("glVertexAttrib4f"));
   fn.glVertexAttrib4fvFn = reinterpret_cast<glVertexAttrib4fvProc>(
       GetGLProcAddress("glVertexAttrib4fv"));
-  fn.glVertexAttribDivisorANGLEFn =
-      reinterpret_cast<glVertexAttribDivisorANGLEProc>(
-          glVertexAttribDivisorANGLENotBound);
-  fn.glVertexAttribI4iFn = reinterpret_cast<glVertexAttribI4iProc>(
-      GetGLProcAddress("glVertexAttribI4i"));
-  fn.glVertexAttribI4ivFn = reinterpret_cast<glVertexAttribI4ivProc>(
-      GetGLProcAddress("glVertexAttribI4iv"));
-  fn.glVertexAttribI4uiFn = reinterpret_cast<glVertexAttribI4uiProc>(
-      GetGLProcAddress("glVertexAttribI4ui"));
-  fn.glVertexAttribI4uivFn = reinterpret_cast<glVertexAttribI4uivProc>(
-      GetGLProcAddress("glVertexAttribI4uiv"));
-  fn.glVertexAttribIPointerFn = reinterpret_cast<glVertexAttribIPointerProc>(
-      GetGLProcAddress("glVertexAttribIPointer"));
+  fn.glVertexAttribDivisorANGLEFn = 0;
+  fn.glVertexAttribI4iFn = 0;
+  fn.glVertexAttribI4ivFn = 0;
+  fn.glVertexAttribI4uiFn = 0;
+  fn.glVertexAttribI4uivFn = 0;
+  fn.glVertexAttribIPointerFn = 0;
   fn.glVertexAttribPointerFn = reinterpret_cast<glVertexAttribPointerProc>(
       GetGLProcAddress("glVertexAttribPointer"));
   fn.glViewportFn =
       reinterpret_cast<glViewportProc>(GetGLProcAddress("glViewport"));
-  fn.glWaitSyncFn =
-      reinterpret_cast<glWaitSyncProc>(GetGLProcAddress("glWaitSync"));
+  fn.glWaitSyncFn = 0;
 }
 
 void DriverGL::InitializeDynamicBindings(GLContext* context) {
@@ -870,47 +459,30 @@
       extensions.find("GL_APPLE_fence ") != std::string::npos;
   ext.b_GL_APPLE_vertex_array_object =
       extensions.find("GL_APPLE_vertex_array_object ") != std::string::npos;
-  ext.b_GL_ARB_ES2_compatibility =
-      extensions.find("GL_ARB_ES2_compatibility ") != std::string::npos;
-  ext.b_GL_ARB_blend_func_extended =
-      extensions.find("GL_ARB_blend_func_extended ") != std::string::npos;
-  ext.b_GL_ARB_copy_buffer =
-      extensions.find("GL_ARB_copy_buffer ") != std::string::npos;
   ext.b_GL_ARB_draw_buffers =
       extensions.find("GL_ARB_draw_buffers ") != std::string::npos;
   ext.b_GL_ARB_draw_instanced =
       extensions.find("GL_ARB_draw_instanced ") != std::string::npos;
-  ext.b_GL_ARB_framebuffer_object =
-      extensions.find("GL_ARB_framebuffer_object ") != std::string::npos;
   ext.b_GL_ARB_get_program_binary =
       extensions.find("GL_ARB_get_program_binary ") != std::string::npos;
   ext.b_GL_ARB_instanced_arrays =
       extensions.find("GL_ARB_instanced_arrays ") != std::string::npos;
-  ext.b_GL_ARB_internalformat_query =
-      extensions.find("GL_ARB_internalformat_query ") != std::string::npos;
-  ext.b_GL_ARB_invalidate_subdata =
-      extensions.find("GL_ARB_invalidate_subdata ") != std::string::npos;
   ext.b_GL_ARB_map_buffer_range =
       extensions.find("GL_ARB_map_buffer_range ") != std::string::npos;
   ext.b_GL_ARB_occlusion_query =
       extensions.find("GL_ARB_occlusion_query ") != std::string::npos;
   ext.b_GL_ARB_robustness =
       extensions.find("GL_ARB_robustness ") != std::string::npos;
-  ext.b_GL_ARB_sampler_objects =
-      extensions.find("GL_ARB_sampler_objects ") != std::string::npos;
   ext.b_GL_ARB_sync = extensions.find("GL_ARB_sync ") != std::string::npos;
   ext.b_GL_ARB_texture_storage =
       extensions.find("GL_ARB_texture_storage ") != std::string::npos;
   ext.b_GL_ARB_timer_query =
       extensions.find("GL_ARB_timer_query ") != std::string::npos;
-  ext.b_GL_ARB_transform_feedback2 =
-      extensions.find("GL_ARB_transform_feedback2 ") != std::string::npos;
-  ext.b_GL_ARB_uniform_buffer_object =
-      extensions.find("GL_ARB_uniform_buffer_object ") != std::string::npos;
   ext.b_GL_ARB_vertex_array_object =
       extensions.find("GL_ARB_vertex_array_object ") != std::string::npos;
-  ext.b_GL_ARB_vertex_buffer_object =
-      extensions.find("GL_ARB_vertex_buffer_object ") != std::string::npos;
+  ext.b_GL_CHROMIUM_gles_depth_binding_hack =
+      extensions.find("GL_CHROMIUM_gles_depth_binding_hack ") !=
+      std::string::npos;
   ext.b_GL_EXT_debug_marker =
       extensions.find("GL_EXT_debug_marker ") != std::string::npos;
   ext.b_GL_EXT_direct_state_access =
@@ -932,6 +504,8 @@
   ext.b_GL_EXT_multisampled_render_to_texture =
       extensions.find("GL_EXT_multisampled_render_to_texture ") !=
       std::string::npos;
+  ext.b_GL_EXT_occlusion_query_boolean =
+      extensions.find("GL_EXT_occlusion_query_boolean ") != std::string::npos;
   ext.b_GL_EXT_robustness =
       extensions.find("GL_EXT_robustness ") != std::string::npos;
   ext.b_GL_EXT_texture_storage =
@@ -959,603 +533,1479 @@
   ext.b_GL_OES_vertex_array_object =
       extensions.find("GL_OES_vertex_array_object ") != std::string::npos;
 
-  fn.glBeginQueryARBFn = 0;
+  debug_fn.glBeginQueryFn = 0;
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glBeginQueryFn =
+        reinterpret_cast<glBeginQueryProc>(GetGLProcAddress("glBeginQuery"));
+    DCHECK(fn.glBeginQueryFn);
+  }
+
   debug_fn.glBeginQueryARBFn = 0;
   if (ext.b_GL_ARB_occlusion_query) {
     fn.glBeginQueryARBFn = reinterpret_cast<glBeginQueryARBProc>(
         GetGLProcAddress("glBeginQueryARB"));
-  }
-  if (!fn.glBeginQueryARBFn) {
+    DCHECK(fn.glBeginQueryARBFn);
+  } else if (ext.b_GL_EXT_disjoint_timer_query ||
+             ext.b_GL_EXT_occlusion_query_boolean) {
     fn.glBeginQueryARBFn = reinterpret_cast<glBeginQueryARBProc>(
         GetGLProcAddress("glBeginQueryEXT"));
+    DCHECK(fn.glBeginQueryARBFn);
   }
 
-  fn.glBindFramebufferEXTFn = 0;
-  debug_fn.glBindFramebufferEXTFn = 0;
-  if (ext.b_GL_EXT_framebuffer_object) {
-    fn.glBindFramebufferEXTFn = reinterpret_cast<glBindFramebufferEXTProc>(
-        GetGLProcAddress("glBindFramebufferEXT"));
+  debug_fn.glBeginTransformFeedbackFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glBeginTransformFeedbackFn =
+        reinterpret_cast<glBeginTransformFeedbackProc>(
+            GetGLProcAddress("glBeginTransformFeedback"));
+    DCHECK(fn.glBeginTransformFeedbackFn);
   }
-  if (!fn.glBindFramebufferEXTFn) {
+
+  debug_fn.glBindBufferBaseFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glBindBufferBaseFn = reinterpret_cast<glBindBufferBaseProc>(
+        GetGLProcAddress("glBindBufferBase"));
+    DCHECK(fn.glBindBufferBaseFn);
+  }
+
+  debug_fn.glBindBufferRangeFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glBindBufferRangeFn = reinterpret_cast<glBindBufferRangeProc>(
+        GetGLProcAddress("glBindBufferRange"));
+    DCHECK(fn.glBindBufferRangeFn);
+  }
+
+  debug_fn.glBindFragDataLocationFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u)) {
+    fn.glBindFragDataLocationFn = reinterpret_cast<glBindFragDataLocationProc>(
+        GetGLProcAddress("glBindFragDataLocation"));
+    DCHECK(fn.glBindFragDataLocationFn);
+  }
+
+  debug_fn.glBindFragDataLocationIndexedFn = 0;
+  if (ver->IsAtLeastGL(3u, 3u)) {
+    fn.glBindFragDataLocationIndexedFn =
+        reinterpret_cast<glBindFragDataLocationIndexedProc>(
+            GetGLProcAddress("glBindFragDataLocationIndexed"));
+    DCHECK(fn.glBindFragDataLocationIndexedFn);
+  }
+
+  debug_fn.glBindFramebufferEXTFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
     fn.glBindFramebufferEXTFn = reinterpret_cast<glBindFramebufferEXTProc>(
         GetGLProcAddress("glBindFramebuffer"));
+    DCHECK(fn.glBindFramebufferEXTFn);
+  } else if (ext.b_GL_EXT_framebuffer_object) {
+    fn.glBindFramebufferEXTFn = reinterpret_cast<glBindFramebufferEXTProc>(
+        GetGLProcAddress("glBindFramebufferEXT"));
+    DCHECK(fn.glBindFramebufferEXTFn);
   }
 
-  fn.glBindRenderbufferEXTFn = 0;
   debug_fn.glBindRenderbufferEXTFn = 0;
-  if (ext.b_GL_EXT_framebuffer_object) {
-    fn.glBindRenderbufferEXTFn = reinterpret_cast<glBindRenderbufferEXTProc>(
-        GetGLProcAddress("glBindRenderbufferEXT"));
-  }
-  if (!fn.glBindRenderbufferEXTFn) {
+  if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
     fn.glBindRenderbufferEXTFn = reinterpret_cast<glBindRenderbufferEXTProc>(
         GetGLProcAddress("glBindRenderbuffer"));
+    DCHECK(fn.glBindRenderbufferEXTFn);
+  } else if (ext.b_GL_EXT_framebuffer_object) {
+    fn.glBindRenderbufferEXTFn = reinterpret_cast<glBindRenderbufferEXTProc>(
+        GetGLProcAddress("glBindRenderbufferEXT"));
+    DCHECK(fn.glBindRenderbufferEXTFn);
   }
 
-  fn.glBindVertexArrayOESFn = 0;
+  debug_fn.glBindSamplerFn = 0;
+  if (ver->IsAtLeastGL(3u, 3u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glBindSamplerFn =
+        reinterpret_cast<glBindSamplerProc>(GetGLProcAddress("glBindSampler"));
+    DCHECK(fn.glBindSamplerFn);
+  }
+
+  debug_fn.glBindTransformFeedbackFn = 0;
+  if (ver->IsAtLeastGLES(3u, 0u) || ver->IsAtLeastGL(4u, 0u)) {
+    fn.glBindTransformFeedbackFn =
+        reinterpret_cast<glBindTransformFeedbackProc>(
+            GetGLProcAddress("glBindTransformFeedback"));
+    DCHECK(fn.glBindTransformFeedbackFn);
+  }
+
   debug_fn.glBindVertexArrayOESFn = 0;
-  if ((ver->is_gl3 || ver->is_gl4 || ver->is_es3) ||
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u) ||
       ext.b_GL_ARB_vertex_array_object) {
     fn.glBindVertexArrayOESFn = reinterpret_cast<glBindVertexArrayOESProc>(
         GetGLProcAddress("glBindVertexArray"));
-  }
-  if (!fn.glBindVertexArrayOESFn && (ext.b_GL_OES_vertex_array_object)) {
+    DCHECK(fn.glBindVertexArrayOESFn);
+  } else if (ext.b_GL_OES_vertex_array_object) {
     fn.glBindVertexArrayOESFn = reinterpret_cast<glBindVertexArrayOESProc>(
         GetGLProcAddress("glBindVertexArrayOES"));
-  }
-  if (!fn.glBindVertexArrayOESFn) {
+    DCHECK(fn.glBindVertexArrayOESFn);
+  } else if (ext.b_GL_APPLE_vertex_array_object) {
     fn.glBindVertexArrayOESFn = reinterpret_cast<glBindVertexArrayOESProc>(
         GetGLProcAddress("glBindVertexArrayAPPLE"));
+    DCHECK(fn.glBindVertexArrayOESFn);
   }
 
-  fn.glBlendBarrierKHRFn = 0;
   debug_fn.glBlendBarrierKHRFn = 0;
   if (ext.b_GL_NV_blend_equation_advanced) {
     fn.glBlendBarrierKHRFn = reinterpret_cast<glBlendBarrierKHRProc>(
         GetGLProcAddress("glBlendBarrierNV"));
-  }
-  if (!fn.glBlendBarrierKHRFn) {
+    DCHECK(fn.glBlendBarrierKHRFn);
+  } else if (ext.b_GL_KHR_blend_equation_advanced) {
     fn.glBlendBarrierKHRFn = reinterpret_cast<glBlendBarrierKHRProc>(
         GetGLProcAddress("glBlendBarrierKHR"));
+    DCHECK(fn.glBlendBarrierKHRFn);
   }
 
-  fn.glBlitFramebufferANGLEFn = 0;
+  debug_fn.glBlitFramebufferFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glBlitFramebufferFn = reinterpret_cast<glBlitFramebufferProc>(
+        GetGLProcAddress("glBlitFramebuffer"));
+    DCHECK(fn.glBlitFramebufferFn);
+  }
+
   debug_fn.glBlitFramebufferANGLEFn = 0;
-  if (ext.b_GL_ANGLE_framebuffer_blit) {
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glBlitFramebufferANGLEFn = reinterpret_cast<glBlitFramebufferANGLEProc>(
+        GetGLProcAddress("glBlitFramebuffer"));
+    DCHECK(fn.glBlitFramebufferANGLEFn);
+  } else if (ext.b_GL_ANGLE_framebuffer_blit) {
     fn.glBlitFramebufferANGLEFn = reinterpret_cast<glBlitFramebufferANGLEProc>(
         GetGLProcAddress("glBlitFramebufferANGLE"));
-  }
-  if (!fn.glBlitFramebufferANGLEFn) {
-    fn.glBlitFramebufferANGLEFn = reinterpret_cast<glBlitFramebufferANGLEProc>(
-        GetGLProcAddress("glBlitFramebuffer"));
+    DCHECK(fn.glBlitFramebufferANGLEFn);
   }
 
-  fn.glBlitFramebufferEXTFn = 0;
   debug_fn.glBlitFramebufferEXTFn = 0;
-  if (ext.b_GL_EXT_framebuffer_blit) {
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glBlitFramebufferEXTFn = reinterpret_cast<glBlitFramebufferEXTProc>(
+        GetGLProcAddress("glBlitFramebuffer"));
+    DCHECK(fn.glBlitFramebufferEXTFn);
+  } else if (ext.b_GL_EXT_framebuffer_blit) {
     fn.glBlitFramebufferEXTFn = reinterpret_cast<glBlitFramebufferEXTProc>(
         GetGLProcAddress("glBlitFramebufferEXT"));
-  }
-  if (!fn.glBlitFramebufferEXTFn) {
-    fn.glBlitFramebufferEXTFn = reinterpret_cast<glBlitFramebufferEXTProc>(
-        GetGLProcAddress("glBlitFramebuffer"));
+    DCHECK(fn.glBlitFramebufferEXTFn);
   }
 
-  fn.glCheckFramebufferStatusEXTFn = 0;
   debug_fn.glCheckFramebufferStatusEXTFn = 0;
-  if (ext.b_GL_EXT_framebuffer_object) {
-    fn.glCheckFramebufferStatusEXTFn =
-        reinterpret_cast<glCheckFramebufferStatusEXTProc>(
-            GetGLProcAddress("glCheckFramebufferStatusEXT"));
-  }
-  if (!fn.glCheckFramebufferStatusEXTFn) {
+  if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
     fn.glCheckFramebufferStatusEXTFn =
         reinterpret_cast<glCheckFramebufferStatusEXTProc>(
             GetGLProcAddress("glCheckFramebufferStatus"));
+    DCHECK(fn.glCheckFramebufferStatusEXTFn);
+  } else if (ext.b_GL_EXT_framebuffer_object) {
+    fn.glCheckFramebufferStatusEXTFn =
+        reinterpret_cast<glCheckFramebufferStatusEXTProc>(
+            GetGLProcAddress("glCheckFramebufferStatusEXT"));
+    DCHECK(fn.glCheckFramebufferStatusEXTFn);
   }
 
-  fn.glDeleteBuffersARBFn = 0;
-  debug_fn.glDeleteBuffersARBFn = 0;
-  if (ext.b_GL_ARB_vertex_buffer_object) {
-    fn.glDeleteBuffersARBFn = reinterpret_cast<glDeleteBuffersARBProc>(
-        GetGLProcAddress("glDeleteBuffersARB"));
-  }
-  if (!fn.glDeleteBuffersARBFn) {
-    fn.glDeleteBuffersARBFn = reinterpret_cast<glDeleteBuffersARBProc>(
-        GetGLProcAddress("glDeleteBuffers"));
+  debug_fn.glClearBufferfiFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glClearBufferfiFn = reinterpret_cast<glClearBufferfiProc>(
+        GetGLProcAddress("glClearBufferfi"));
+    DCHECK(fn.glClearBufferfiFn);
   }
 
-  fn.glDeleteFramebuffersEXTFn = 0;
+  debug_fn.glClearBufferfvFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glClearBufferfvFn = reinterpret_cast<glClearBufferfvProc>(
+        GetGLProcAddress("glClearBufferfv"));
+    DCHECK(fn.glClearBufferfvFn);
+  }
+
+  debug_fn.glClearBufferivFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glClearBufferivFn = reinterpret_cast<glClearBufferivProc>(
+        GetGLProcAddress("glClearBufferiv"));
+    DCHECK(fn.glClearBufferivFn);
+  }
+
+  debug_fn.glClearBufferuivFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glClearBufferuivFn = reinterpret_cast<glClearBufferuivProc>(
+        GetGLProcAddress("glClearBufferuiv"));
+    DCHECK(fn.glClearBufferuivFn);
+  }
+
+  debug_fn.glClearDepthfFn = 0;
+  if (ver->IsAtLeastGL(4u, 1u) || ver->is_es) {
+    fn.glClearDepthfFn =
+        reinterpret_cast<glClearDepthfProc>(GetGLProcAddress("glClearDepthf"));
+    DCHECK(fn.glClearDepthfFn);
+  }
+
+  debug_fn.glClientWaitSyncFn = 0;
+  if (ver->IsAtLeastGL(3u, 2u) || ver->IsAtLeastGLES(3u, 0u) ||
+      ext.b_GL_ARB_sync) {
+    fn.glClientWaitSyncFn = reinterpret_cast<glClientWaitSyncProc>(
+        GetGLProcAddress("glClientWaitSync"));
+    DCHECK(fn.glClientWaitSyncFn);
+  }
+
+  debug_fn.glCompressedTexImage3DFn = 0;
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glCompressedTexImage3DFn = reinterpret_cast<glCompressedTexImage3DProc>(
+        GetGLProcAddress("glCompressedTexImage3D"));
+    DCHECK(fn.glCompressedTexImage3DFn);
+  }
+
+  debug_fn.glCopyBufferSubDataFn = 0;
+  if (ver->IsAtLeastGLES(3u, 0u) || ver->IsAtLeastGL(3u, 1u)) {
+    fn.glCopyBufferSubDataFn = reinterpret_cast<glCopyBufferSubDataProc>(
+        GetGLProcAddress("glCopyBufferSubData"));
+    DCHECK(fn.glCopyBufferSubDataFn);
+  }
+
+  debug_fn.glCopyTexSubImage3DFn = 0;
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glCopyTexSubImage3DFn = reinterpret_cast<glCopyTexSubImage3DProc>(
+        GetGLProcAddress("glCopyTexSubImage3D"));
+    DCHECK(fn.glCopyTexSubImage3DFn);
+  }
+
+  debug_fn.glDeleteFencesAPPLEFn = 0;
+  if (ext.b_GL_APPLE_fence) {
+    fn.glDeleteFencesAPPLEFn = reinterpret_cast<glDeleteFencesAPPLEProc>(
+        GetGLProcAddress("glDeleteFencesAPPLE"));
+    DCHECK(fn.glDeleteFencesAPPLEFn);
+  }
+
+  debug_fn.glDeleteFencesNVFn = 0;
+  if (ext.b_GL_NV_fence) {
+    fn.glDeleteFencesNVFn = reinterpret_cast<glDeleteFencesNVProc>(
+        GetGLProcAddress("glDeleteFencesNV"));
+    DCHECK(fn.glDeleteFencesNVFn);
+  }
+
   debug_fn.glDeleteFramebuffersEXTFn = 0;
-  if (ext.b_GL_EXT_framebuffer_object) {
-    fn.glDeleteFramebuffersEXTFn =
-        reinterpret_cast<glDeleteFramebuffersEXTProc>(
-            GetGLProcAddress("glDeleteFramebuffersEXT"));
-  }
-  if (!fn.glDeleteFramebuffersEXTFn) {
+  if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
     fn.glDeleteFramebuffersEXTFn =
         reinterpret_cast<glDeleteFramebuffersEXTProc>(
             GetGLProcAddress("glDeleteFramebuffers"));
+    DCHECK(fn.glDeleteFramebuffersEXTFn);
+  } else if (ext.b_GL_EXT_framebuffer_object) {
+    fn.glDeleteFramebuffersEXTFn =
+        reinterpret_cast<glDeleteFramebuffersEXTProc>(
+            GetGLProcAddress("glDeleteFramebuffersEXT"));
+    DCHECK(fn.glDeleteFramebuffersEXTFn);
   }
 
-  fn.glDeleteQueriesARBFn = 0;
+  debug_fn.glDeleteQueriesFn = 0;
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glDeleteQueriesFn = reinterpret_cast<glDeleteQueriesProc>(
+        GetGLProcAddress("glDeleteQueries"));
+    DCHECK(fn.glDeleteQueriesFn);
+  }
+
   debug_fn.glDeleteQueriesARBFn = 0;
   if (ext.b_GL_ARB_occlusion_query) {
     fn.glDeleteQueriesARBFn = reinterpret_cast<glDeleteQueriesARBProc>(
         GetGLProcAddress("glDeleteQueriesARB"));
-  }
-  if (!fn.glDeleteQueriesARBFn) {
+    DCHECK(fn.glDeleteQueriesARBFn);
+  } else if (ext.b_GL_EXT_disjoint_timer_query ||
+             ext.b_GL_EXT_occlusion_query_boolean) {
     fn.glDeleteQueriesARBFn = reinterpret_cast<glDeleteQueriesARBProc>(
         GetGLProcAddress("glDeleteQueriesEXT"));
+    DCHECK(fn.glDeleteQueriesARBFn);
   }
 
-  fn.glDeleteRenderbuffersEXTFn = 0;
   debug_fn.glDeleteRenderbuffersEXTFn = 0;
-  if (ext.b_GL_EXT_framebuffer_object) {
-    fn.glDeleteRenderbuffersEXTFn =
-        reinterpret_cast<glDeleteRenderbuffersEXTProc>(
-            GetGLProcAddress("glDeleteRenderbuffersEXT"));
-  }
-  if (!fn.glDeleteRenderbuffersEXTFn) {
+  if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
     fn.glDeleteRenderbuffersEXTFn =
         reinterpret_cast<glDeleteRenderbuffersEXTProc>(
             GetGLProcAddress("glDeleteRenderbuffers"));
+    DCHECK(fn.glDeleteRenderbuffersEXTFn);
+  } else if (ext.b_GL_EXT_framebuffer_object) {
+    fn.glDeleteRenderbuffersEXTFn =
+        reinterpret_cast<glDeleteRenderbuffersEXTProc>(
+            GetGLProcAddress("glDeleteRenderbuffersEXT"));
+    DCHECK(fn.glDeleteRenderbuffersEXTFn);
   }
 
-  fn.glDeleteVertexArraysOESFn = 0;
+  debug_fn.glDeleteSamplersFn = 0;
+  if (ver->IsAtLeastGL(3u, 3u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glDeleteSamplersFn = reinterpret_cast<glDeleteSamplersProc>(
+        GetGLProcAddress("glDeleteSamplers"));
+    DCHECK(fn.glDeleteSamplersFn);
+  }
+
+  debug_fn.glDeleteSyncFn = 0;
+  if (ver->IsAtLeastGL(3u, 2u) || ver->IsAtLeastGLES(3u, 0u) ||
+      ext.b_GL_ARB_sync) {
+    fn.glDeleteSyncFn =
+        reinterpret_cast<glDeleteSyncProc>(GetGLProcAddress("glDeleteSync"));
+    DCHECK(fn.glDeleteSyncFn);
+  }
+
+  debug_fn.glDeleteTransformFeedbacksFn = 0;
+  if (ver->IsAtLeastGLES(3u, 0u) || ver->IsAtLeastGL(4u, 0u)) {
+    fn.glDeleteTransformFeedbacksFn =
+        reinterpret_cast<glDeleteTransformFeedbacksProc>(
+            GetGLProcAddress("glDeleteTransformFeedbacks"));
+    DCHECK(fn.glDeleteTransformFeedbacksFn);
+  }
+
   debug_fn.glDeleteVertexArraysOESFn = 0;
-  if ((ver->is_gl3 || ver->is_gl4 || ver->is_es3) ||
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u) ||
       ext.b_GL_ARB_vertex_array_object) {
     fn.glDeleteVertexArraysOESFn =
         reinterpret_cast<glDeleteVertexArraysOESProc>(
             GetGLProcAddress("glDeleteVertexArrays"));
-  }
-  if (!fn.glDeleteVertexArraysOESFn && (ext.b_GL_OES_vertex_array_object)) {
+    DCHECK(fn.glDeleteVertexArraysOESFn);
+  } else if (ext.b_GL_OES_vertex_array_object) {
     fn.glDeleteVertexArraysOESFn =
         reinterpret_cast<glDeleteVertexArraysOESProc>(
             GetGLProcAddress("glDeleteVertexArraysOES"));
-  }
-  if (!fn.glDeleteVertexArraysOESFn) {
+    DCHECK(fn.glDeleteVertexArraysOESFn);
+  } else if (ext.b_GL_APPLE_vertex_array_object) {
     fn.glDeleteVertexArraysOESFn =
         reinterpret_cast<glDeleteVertexArraysOESProc>(
             GetGLProcAddress("glDeleteVertexArraysAPPLE"));
+    DCHECK(fn.glDeleteVertexArraysOESFn);
   }
 
-  fn.glDrawArraysInstancedANGLEFn = 0;
+  debug_fn.glDepthRangefFn = 0;
+  if (ver->IsAtLeastGL(4u, 1u) || ver->is_es) {
+    fn.glDepthRangefFn =
+        reinterpret_cast<glDepthRangefProc>(GetGLProcAddress("glDepthRangef"));
+    DCHECK(fn.glDepthRangefFn);
+  }
+
+  debug_fn.glDiscardFramebufferEXTFn = 0;
+  if (ext.b_GL_EXT_discard_framebuffer) {
+    fn.glDiscardFramebufferEXTFn =
+        reinterpret_cast<glDiscardFramebufferEXTProc>(
+            GetGLProcAddress("glDiscardFramebufferEXT"));
+    DCHECK(fn.glDiscardFramebufferEXTFn);
+  }
+
   debug_fn.glDrawArraysInstancedANGLEFn = 0;
-  if (ext.b_GL_ARB_draw_instanced) {
-    fn.glDrawArraysInstancedANGLEFn =
-        reinterpret_cast<glDrawArraysInstancedANGLEProc>(
-            GetGLProcAddress("glDrawArraysInstancedARB"));
-  }
-  if (!fn.glDrawArraysInstancedANGLEFn && (ext.b_GL_ANGLE_instanced_arrays)) {
-    fn.glDrawArraysInstancedANGLEFn =
-        reinterpret_cast<glDrawArraysInstancedANGLEProc>(
-            GetGLProcAddress("glDrawArraysInstancedANGLE"));
-  }
-  if (!fn.glDrawArraysInstancedANGLEFn) {
+  if (ver->IsAtLeastGLES(3u, 0u) || ver->IsAtLeastGL(3u, 1u)) {
     fn.glDrawArraysInstancedANGLEFn =
         reinterpret_cast<glDrawArraysInstancedANGLEProc>(
             GetGLProcAddress("glDrawArraysInstanced"));
+    DCHECK(fn.glDrawArraysInstancedANGLEFn);
+  } else if (ext.b_GL_ARB_draw_instanced) {
+    fn.glDrawArraysInstancedANGLEFn =
+        reinterpret_cast<glDrawArraysInstancedANGLEProc>(
+            GetGLProcAddress("glDrawArraysInstancedARB"));
+    DCHECK(fn.glDrawArraysInstancedANGLEFn);
+  } else if (ext.b_GL_ANGLE_instanced_arrays) {
+    fn.glDrawArraysInstancedANGLEFn =
+        reinterpret_cast<glDrawArraysInstancedANGLEProc>(
+            GetGLProcAddress("glDrawArraysInstancedANGLE"));
+    DCHECK(fn.glDrawArraysInstancedANGLEFn);
   }
 
-  fn.glDrawBuffersARBFn = 0;
+  debug_fn.glDrawBufferFn = 0;
+  if (!ver->is_es) {
+    fn.glDrawBufferFn =
+        reinterpret_cast<glDrawBufferProc>(GetGLProcAddress("glDrawBuffer"));
+    DCHECK(fn.glDrawBufferFn);
+  }
+
   debug_fn.glDrawBuffersARBFn = 0;
-  if (ext.b_GL_ARB_draw_buffers) {
-    fn.glDrawBuffersARBFn = reinterpret_cast<glDrawBuffersARBProc>(
-        GetGLProcAddress("glDrawBuffersARB"));
-  }
-  if (!fn.glDrawBuffersARBFn && (ext.b_GL_EXT_draw_buffers)) {
-    fn.glDrawBuffersARBFn = reinterpret_cast<glDrawBuffersARBProc>(
-        GetGLProcAddress("glDrawBuffersEXT"));
-  }
-  if (!fn.glDrawBuffersARBFn) {
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
     fn.glDrawBuffersARBFn = reinterpret_cast<glDrawBuffersARBProc>(
         GetGLProcAddress("glDrawBuffers"));
+    DCHECK(fn.glDrawBuffersARBFn);
+  } else if (ext.b_GL_ARB_draw_buffers) {
+    fn.glDrawBuffersARBFn = reinterpret_cast<glDrawBuffersARBProc>(
+        GetGLProcAddress("glDrawBuffersARB"));
+    DCHECK(fn.glDrawBuffersARBFn);
+  } else if (ext.b_GL_EXT_draw_buffers) {
+    fn.glDrawBuffersARBFn = reinterpret_cast<glDrawBuffersARBProc>(
+        GetGLProcAddress("glDrawBuffersEXT"));
+    DCHECK(fn.glDrawBuffersARBFn);
   }
 
-  fn.glDrawElementsInstancedANGLEFn = 0;
   debug_fn.glDrawElementsInstancedANGLEFn = 0;
-  if (ext.b_GL_ARB_draw_instanced) {
-    fn.glDrawElementsInstancedANGLEFn =
-        reinterpret_cast<glDrawElementsInstancedANGLEProc>(
-            GetGLProcAddress("glDrawElementsInstancedARB"));
-  }
-  if (!fn.glDrawElementsInstancedANGLEFn && (ext.b_GL_ANGLE_instanced_arrays)) {
-    fn.glDrawElementsInstancedANGLEFn =
-        reinterpret_cast<glDrawElementsInstancedANGLEProc>(
-            GetGLProcAddress("glDrawElementsInstancedANGLE"));
-  }
-  if (!fn.glDrawElementsInstancedANGLEFn) {
+  if (ver->IsAtLeastGLES(3u, 0u) || ver->IsAtLeastGL(3u, 1u)) {
     fn.glDrawElementsInstancedANGLEFn =
         reinterpret_cast<glDrawElementsInstancedANGLEProc>(
             GetGLProcAddress("glDrawElementsInstanced"));
+    DCHECK(fn.glDrawElementsInstancedANGLEFn);
+  } else if (ext.b_GL_ARB_draw_instanced) {
+    fn.glDrawElementsInstancedANGLEFn =
+        reinterpret_cast<glDrawElementsInstancedANGLEProc>(
+            GetGLProcAddress("glDrawElementsInstancedARB"));
+    DCHECK(fn.glDrawElementsInstancedANGLEFn);
+  } else if (ext.b_GL_ANGLE_instanced_arrays) {
+    fn.glDrawElementsInstancedANGLEFn =
+        reinterpret_cast<glDrawElementsInstancedANGLEProc>(
+            GetGLProcAddress("glDrawElementsInstancedANGLE"));
+    DCHECK(fn.glDrawElementsInstancedANGLEFn);
   }
 
-  fn.glEndQueryARBFn = 0;
+  debug_fn.glDrawRangeElementsFn = 0;
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glDrawRangeElementsFn = reinterpret_cast<glDrawRangeElementsProc>(
+        GetGLProcAddress("glDrawRangeElements"));
+    DCHECK(fn.glDrawRangeElementsFn);
+  }
+
+  debug_fn.glEGLImageTargetRenderbufferStorageOESFn = 0;
+  if (ext.b_GL_OES_EGL_image) {
+    fn.glEGLImageTargetRenderbufferStorageOESFn =
+        reinterpret_cast<glEGLImageTargetRenderbufferStorageOESProc>(
+            GetGLProcAddress("glEGLImageTargetRenderbufferStorageOES"));
+    DCHECK(fn.glEGLImageTargetRenderbufferStorageOESFn);
+  }
+
+  debug_fn.glEGLImageTargetTexture2DOESFn = 0;
+  if (ext.b_GL_OES_EGL_image) {
+    fn.glEGLImageTargetTexture2DOESFn =
+        reinterpret_cast<glEGLImageTargetTexture2DOESProc>(
+            GetGLProcAddress("glEGLImageTargetTexture2DOES"));
+    DCHECK(fn.glEGLImageTargetTexture2DOESFn);
+  }
+
+  debug_fn.glEndQueryFn = 0;
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glEndQueryFn =
+        reinterpret_cast<glEndQueryProc>(GetGLProcAddress("glEndQuery"));
+    DCHECK(fn.glEndQueryFn);
+  }
+
   debug_fn.glEndQueryARBFn = 0;
   if (ext.b_GL_ARB_occlusion_query) {
     fn.glEndQueryARBFn =
         reinterpret_cast<glEndQueryARBProc>(GetGLProcAddress("glEndQueryARB"));
-  }
-  if (!fn.glEndQueryARBFn) {
+    DCHECK(fn.glEndQueryARBFn);
+  } else if (ext.b_GL_EXT_disjoint_timer_query ||
+             ext.b_GL_EXT_occlusion_query_boolean) {
     fn.glEndQueryARBFn =
         reinterpret_cast<glEndQueryARBProc>(GetGLProcAddress("glEndQueryEXT"));
+    DCHECK(fn.glEndQueryARBFn);
   }
 
-  fn.glFramebufferRenderbufferEXTFn = 0;
-  debug_fn.glFramebufferRenderbufferEXTFn = 0;
-  if (ext.b_GL_EXT_framebuffer_object) {
-    fn.glFramebufferRenderbufferEXTFn =
-        reinterpret_cast<glFramebufferRenderbufferEXTProc>(
-            GetGLProcAddress("glFramebufferRenderbufferEXT"));
+  debug_fn.glEndTransformFeedbackFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glEndTransformFeedbackFn = reinterpret_cast<glEndTransformFeedbackProc>(
+        GetGLProcAddress("glEndTransformFeedback"));
+    DCHECK(fn.glEndTransformFeedbackFn);
   }
-  if (!fn.glFramebufferRenderbufferEXTFn) {
+
+  debug_fn.glFenceSyncFn = 0;
+  if (ver->IsAtLeastGL(3u, 2u) || ver->IsAtLeastGLES(3u, 0u) ||
+      ext.b_GL_ARB_sync) {
+    fn.glFenceSyncFn =
+        reinterpret_cast<glFenceSyncProc>(GetGLProcAddress("glFenceSync"));
+    DCHECK(fn.glFenceSyncFn);
+  }
+
+  debug_fn.glFinishFenceAPPLEFn = 0;
+  if (ext.b_GL_APPLE_fence) {
+    fn.glFinishFenceAPPLEFn = reinterpret_cast<glFinishFenceAPPLEProc>(
+        GetGLProcAddress("glFinishFenceAPPLE"));
+    DCHECK(fn.glFinishFenceAPPLEFn);
+  }
+
+  debug_fn.glFinishFenceNVFn = 0;
+  if (ext.b_GL_NV_fence) {
+    fn.glFinishFenceNVFn = reinterpret_cast<glFinishFenceNVProc>(
+        GetGLProcAddress("glFinishFenceNV"));
+    DCHECK(fn.glFinishFenceNVFn);
+  }
+
+  debug_fn.glFlushMappedBufferRangeFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glFlushMappedBufferRangeFn =
+        reinterpret_cast<glFlushMappedBufferRangeProc>(
+            GetGLProcAddress("glFlushMappedBufferRange"));
+    DCHECK(fn.glFlushMappedBufferRangeFn);
+  }
+
+  debug_fn.glFramebufferRenderbufferEXTFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
     fn.glFramebufferRenderbufferEXTFn =
         reinterpret_cast<glFramebufferRenderbufferEXTProc>(
             GetGLProcAddress("glFramebufferRenderbuffer"));
+    DCHECK(fn.glFramebufferRenderbufferEXTFn);
+  } else if (ext.b_GL_EXT_framebuffer_object) {
+    fn.glFramebufferRenderbufferEXTFn =
+        reinterpret_cast<glFramebufferRenderbufferEXTProc>(
+            GetGLProcAddress("glFramebufferRenderbufferEXT"));
+    DCHECK(fn.glFramebufferRenderbufferEXTFn);
   }
 
-  fn.glFramebufferTexture2DEXTFn = 0;
   debug_fn.glFramebufferTexture2DEXTFn = 0;
-  if (ext.b_GL_EXT_framebuffer_object) {
-    fn.glFramebufferTexture2DEXTFn =
-        reinterpret_cast<glFramebufferTexture2DEXTProc>(
-            GetGLProcAddress("glFramebufferTexture2DEXT"));
-  }
-  if (!fn.glFramebufferTexture2DEXTFn) {
+  if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
     fn.glFramebufferTexture2DEXTFn =
         reinterpret_cast<glFramebufferTexture2DEXTProc>(
             GetGLProcAddress("glFramebufferTexture2D"));
+    DCHECK(fn.glFramebufferTexture2DEXTFn);
+  } else if (ext.b_GL_EXT_framebuffer_object) {
+    fn.glFramebufferTexture2DEXTFn =
+        reinterpret_cast<glFramebufferTexture2DEXTProc>(
+            GetGLProcAddress("glFramebufferTexture2DEXT"));
+    DCHECK(fn.glFramebufferTexture2DEXTFn);
   }
 
-  fn.glGenBuffersARBFn = 0;
-  debug_fn.glGenBuffersARBFn = 0;
-  if (ext.b_GL_ARB_vertex_buffer_object) {
-    fn.glGenBuffersARBFn = reinterpret_cast<glGenBuffersARBProc>(
-        GetGLProcAddress("glGenBuffersARB"));
-  }
-  if (!fn.glGenBuffersARBFn) {
-    fn.glGenBuffersARBFn =
-        reinterpret_cast<glGenBuffersARBProc>(GetGLProcAddress("glGenBuffers"));
+  debug_fn.glFramebufferTexture2DMultisampleEXTFn = 0;
+  if (ext.b_GL_EXT_multisampled_render_to_texture) {
+    fn.glFramebufferTexture2DMultisampleEXTFn =
+        reinterpret_cast<glFramebufferTexture2DMultisampleEXTProc>(
+            GetGLProcAddress("glFramebufferTexture2DMultisampleEXT"));
+    DCHECK(fn.glFramebufferTexture2DMultisampleEXTFn);
   }
 
-  fn.glGenerateMipmapEXTFn = 0;
+  debug_fn.glFramebufferTexture2DMultisampleIMGFn = 0;
+  if (ext.b_GL_IMG_multisampled_render_to_texture) {
+    fn.glFramebufferTexture2DMultisampleIMGFn =
+        reinterpret_cast<glFramebufferTexture2DMultisampleIMGProc>(
+            GetGLProcAddress("glFramebufferTexture2DMultisampleIMG"));
+    DCHECK(fn.glFramebufferTexture2DMultisampleIMGFn);
+  }
+
+  debug_fn.glFramebufferTextureLayerFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glFramebufferTextureLayerFn =
+        reinterpret_cast<glFramebufferTextureLayerProc>(
+            GetGLProcAddress("glFramebufferTextureLayer"));
+    DCHECK(fn.glFramebufferTextureLayerFn);
+  }
+
   debug_fn.glGenerateMipmapEXTFn = 0;
-  if (ext.b_GL_EXT_framebuffer_object) {
-    fn.glGenerateMipmapEXTFn = reinterpret_cast<glGenerateMipmapEXTProc>(
-        GetGLProcAddress("glGenerateMipmapEXT"));
-  }
-  if (!fn.glGenerateMipmapEXTFn) {
+  if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
     fn.glGenerateMipmapEXTFn = reinterpret_cast<glGenerateMipmapEXTProc>(
         GetGLProcAddress("glGenerateMipmap"));
+    DCHECK(fn.glGenerateMipmapEXTFn);
+  } else if (ext.b_GL_EXT_framebuffer_object) {
+    fn.glGenerateMipmapEXTFn = reinterpret_cast<glGenerateMipmapEXTProc>(
+        GetGLProcAddress("glGenerateMipmapEXT"));
+    DCHECK(fn.glGenerateMipmapEXTFn);
   }
 
-  fn.glGenFramebuffersEXTFn = 0;
-  debug_fn.glGenFramebuffersEXTFn = 0;
-  if (ext.b_GL_EXT_framebuffer_object) {
-    fn.glGenFramebuffersEXTFn = reinterpret_cast<glGenFramebuffersEXTProc>(
-        GetGLProcAddress("glGenFramebuffersEXT"));
+  debug_fn.glGenFencesAPPLEFn = 0;
+  if (ext.b_GL_APPLE_fence) {
+    fn.glGenFencesAPPLEFn = reinterpret_cast<glGenFencesAPPLEProc>(
+        GetGLProcAddress("glGenFencesAPPLE"));
+    DCHECK(fn.glGenFencesAPPLEFn);
   }
-  if (!fn.glGenFramebuffersEXTFn) {
+
+  debug_fn.glGenFencesNVFn = 0;
+  if (ext.b_GL_NV_fence) {
+    fn.glGenFencesNVFn =
+        reinterpret_cast<glGenFencesNVProc>(GetGLProcAddress("glGenFencesNV"));
+    DCHECK(fn.glGenFencesNVFn);
+  }
+
+  debug_fn.glGenFramebuffersEXTFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
     fn.glGenFramebuffersEXTFn = reinterpret_cast<glGenFramebuffersEXTProc>(
         GetGLProcAddress("glGenFramebuffers"));
+    DCHECK(fn.glGenFramebuffersEXTFn);
+  } else if (ext.b_GL_EXT_framebuffer_object) {
+    fn.glGenFramebuffersEXTFn = reinterpret_cast<glGenFramebuffersEXTProc>(
+        GetGLProcAddress("glGenFramebuffersEXT"));
+    DCHECK(fn.glGenFramebuffersEXTFn);
   }
 
-  fn.glGenQueriesARBFn = 0;
+  debug_fn.glGenQueriesFn = 0;
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glGenQueriesFn =
+        reinterpret_cast<glGenQueriesProc>(GetGLProcAddress("glGenQueries"));
+    DCHECK(fn.glGenQueriesFn);
+  }
+
   debug_fn.glGenQueriesARBFn = 0;
   if (ext.b_GL_ARB_occlusion_query) {
     fn.glGenQueriesARBFn = reinterpret_cast<glGenQueriesARBProc>(
         GetGLProcAddress("glGenQueriesARB"));
-  }
-  if (!fn.glGenQueriesARBFn) {
+    DCHECK(fn.glGenQueriesARBFn);
+  } else if (ext.b_GL_EXT_disjoint_timer_query ||
+             ext.b_GL_EXT_occlusion_query_boolean) {
     fn.glGenQueriesARBFn = reinterpret_cast<glGenQueriesARBProc>(
         GetGLProcAddress("glGenQueriesEXT"));
+    DCHECK(fn.glGenQueriesARBFn);
   }
 
-  fn.glGenRenderbuffersEXTFn = 0;
   debug_fn.glGenRenderbuffersEXTFn = 0;
-  if (ext.b_GL_EXT_framebuffer_object) {
-    fn.glGenRenderbuffersEXTFn = reinterpret_cast<glGenRenderbuffersEXTProc>(
-        GetGLProcAddress("glGenRenderbuffersEXT"));
-  }
-  if (!fn.glGenRenderbuffersEXTFn) {
+  if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
     fn.glGenRenderbuffersEXTFn = reinterpret_cast<glGenRenderbuffersEXTProc>(
         GetGLProcAddress("glGenRenderbuffers"));
+    DCHECK(fn.glGenRenderbuffersEXTFn);
+  } else if (ext.b_GL_EXT_framebuffer_object) {
+    fn.glGenRenderbuffersEXTFn = reinterpret_cast<glGenRenderbuffersEXTProc>(
+        GetGLProcAddress("glGenRenderbuffersEXT"));
+    DCHECK(fn.glGenRenderbuffersEXTFn);
   }
 
-  fn.glGenVertexArraysOESFn = 0;
+  debug_fn.glGenSamplersFn = 0;
+  if (ver->IsAtLeastGL(3u, 3u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glGenSamplersFn =
+        reinterpret_cast<glGenSamplersProc>(GetGLProcAddress("glGenSamplers"));
+    DCHECK(fn.glGenSamplersFn);
+  }
+
+  debug_fn.glGenTransformFeedbacksFn = 0;
+  if (ver->IsAtLeastGLES(3u, 0u) || ver->IsAtLeastGL(4u, 0u)) {
+    fn.glGenTransformFeedbacksFn =
+        reinterpret_cast<glGenTransformFeedbacksProc>(
+            GetGLProcAddress("glGenTransformFeedbacks"));
+    DCHECK(fn.glGenTransformFeedbacksFn);
+  }
+
   debug_fn.glGenVertexArraysOESFn = 0;
-  if ((ver->is_gl3 || ver->is_gl4 || ver->is_es3) ||
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u) ||
       ext.b_GL_ARB_vertex_array_object) {
     fn.glGenVertexArraysOESFn = reinterpret_cast<glGenVertexArraysOESProc>(
         GetGLProcAddress("glGenVertexArrays"));
-  }
-  if (!fn.glGenVertexArraysOESFn && (ext.b_GL_OES_vertex_array_object)) {
+    DCHECK(fn.glGenVertexArraysOESFn);
+  } else if (ext.b_GL_OES_vertex_array_object) {
     fn.glGenVertexArraysOESFn = reinterpret_cast<glGenVertexArraysOESProc>(
         GetGLProcAddress("glGenVertexArraysOES"));
-  }
-  if (!fn.glGenVertexArraysOESFn) {
+    DCHECK(fn.glGenVertexArraysOESFn);
+  } else if (ext.b_GL_APPLE_vertex_array_object) {
     fn.glGenVertexArraysOESFn = reinterpret_cast<glGenVertexArraysOESProc>(
         GetGLProcAddress("glGenVertexArraysAPPLE"));
+    DCHECK(fn.glGenVertexArraysOESFn);
   }
 
-  fn.glGetFramebufferAttachmentParameterivEXTFn = 0;
-  debug_fn.glGetFramebufferAttachmentParameterivEXTFn = 0;
-  if (ext.b_GL_EXT_framebuffer_object) {
-    fn.glGetFramebufferAttachmentParameterivEXTFn =
-        reinterpret_cast<glGetFramebufferAttachmentParameterivEXTProc>(
-            GetGLProcAddress("glGetFramebufferAttachmentParameterivEXT"));
+  debug_fn.glGetActiveUniformBlockivFn = 0;
+  if (ver->IsAtLeastGLES(3u, 0u) || ver->IsAtLeastGL(3u, 1u)) {
+    fn.glGetActiveUniformBlockivFn =
+        reinterpret_cast<glGetActiveUniformBlockivProc>(
+            GetGLProcAddress("glGetActiveUniformBlockiv"));
+    DCHECK(fn.glGetActiveUniformBlockivFn);
   }
-  if (!fn.glGetFramebufferAttachmentParameterivEXTFn) {
+
+  debug_fn.glGetActiveUniformBlockNameFn = 0;
+  if (ver->IsAtLeastGLES(3u, 0u) || ver->IsAtLeastGL(3u, 1u)) {
+    fn.glGetActiveUniformBlockNameFn =
+        reinterpret_cast<glGetActiveUniformBlockNameProc>(
+            GetGLProcAddress("glGetActiveUniformBlockName"));
+    DCHECK(fn.glGetActiveUniformBlockNameFn);
+  }
+
+  debug_fn.glGetActiveUniformsivFn = 0;
+  if (ver->IsAtLeastGLES(3u, 0u) || ver->IsAtLeastGL(3u, 1u)) {
+    fn.glGetActiveUniformsivFn = reinterpret_cast<glGetActiveUniformsivProc>(
+        GetGLProcAddress("glGetActiveUniformsiv"));
+    DCHECK(fn.glGetActiveUniformsivFn);
+  }
+
+  debug_fn.glGetFenceivNVFn = 0;
+  if (ext.b_GL_NV_fence) {
+    fn.glGetFenceivNVFn = reinterpret_cast<glGetFenceivNVProc>(
+        GetGLProcAddress("glGetFenceivNV"));
+    DCHECK(fn.glGetFenceivNVFn);
+  }
+
+  debug_fn.glGetFragDataLocationFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glGetFragDataLocationFn = reinterpret_cast<glGetFragDataLocationProc>(
+        GetGLProcAddress("glGetFragDataLocation"));
+    DCHECK(fn.glGetFragDataLocationFn);
+  }
+
+  debug_fn.glGetFramebufferAttachmentParameterivEXTFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
     fn.glGetFramebufferAttachmentParameterivEXTFn =
         reinterpret_cast<glGetFramebufferAttachmentParameterivEXTProc>(
             GetGLProcAddress("glGetFramebufferAttachmentParameteriv"));
+    DCHECK(fn.glGetFramebufferAttachmentParameterivEXTFn);
+  } else if (ext.b_GL_EXT_framebuffer_object) {
+    fn.glGetFramebufferAttachmentParameterivEXTFn =
+        reinterpret_cast<glGetFramebufferAttachmentParameterivEXTProc>(
+            GetGLProcAddress("glGetFramebufferAttachmentParameterivEXT"));
+    DCHECK(fn.glGetFramebufferAttachmentParameterivEXTFn);
   }
 
-  fn.glGetGraphicsResetStatusARBFn = 0;
   debug_fn.glGetGraphicsResetStatusARBFn = 0;
-  if (ext.b_GL_ARB_robustness) {
-    fn.glGetGraphicsResetStatusARBFn =
-        reinterpret_cast<glGetGraphicsResetStatusARBProc>(
-            GetGLProcAddress("glGetGraphicsResetStatusARB"));
-  }
-  if (!fn.glGetGraphicsResetStatusARBFn && (ext.b_GL_KHR_robustness)) {
-    fn.glGetGraphicsResetStatusARBFn =
-        reinterpret_cast<glGetGraphicsResetStatusARBProc>(
-            GetGLProcAddress("glGetGraphicsResetStatusKHR"));
-  }
-  if (!fn.glGetGraphicsResetStatusARBFn && (ext.b_GL_EXT_robustness)) {
-    fn.glGetGraphicsResetStatusARBFn =
-        reinterpret_cast<glGetGraphicsResetStatusARBProc>(
-            GetGLProcAddress("glGetGraphicsResetStatusEXT"));
-  }
-  if (!fn.glGetGraphicsResetStatusARBFn) {
+  if (ver->IsAtLeastGL(4u, 5u)) {
     fn.glGetGraphicsResetStatusARBFn =
         reinterpret_cast<glGetGraphicsResetStatusARBProc>(
             GetGLProcAddress("glGetGraphicsResetStatus"));
+    DCHECK(fn.glGetGraphicsResetStatusARBFn);
+  } else if (ext.b_GL_ARB_robustness) {
+    fn.glGetGraphicsResetStatusARBFn =
+        reinterpret_cast<glGetGraphicsResetStatusARBProc>(
+            GetGLProcAddress("glGetGraphicsResetStatusARB"));
+    DCHECK(fn.glGetGraphicsResetStatusARBFn);
+  } else if (ext.b_GL_KHR_robustness) {
+    fn.glGetGraphicsResetStatusARBFn =
+        reinterpret_cast<glGetGraphicsResetStatusARBProc>(
+            GetGLProcAddress("glGetGraphicsResetStatusKHR"));
+    DCHECK(fn.glGetGraphicsResetStatusARBFn);
+  } else if (ext.b_GL_EXT_robustness) {
+    fn.glGetGraphicsResetStatusARBFn =
+        reinterpret_cast<glGetGraphicsResetStatusARBProc>(
+            GetGLProcAddress("glGetGraphicsResetStatusEXT"));
+    DCHECK(fn.glGetGraphicsResetStatusARBFn);
   }
 
-  fn.glGetProgramBinaryFn = 0;
-  debug_fn.glGetProgramBinaryFn = 0;
-  if (ext.b_GL_OES_get_program_binary) {
-    fn.glGetProgramBinaryFn = reinterpret_cast<glGetProgramBinaryProc>(
-        GetGLProcAddress("glGetProgramBinaryOES"));
+  debug_fn.glGetInteger64i_vFn = 0;
+  if (ver->IsAtLeastGL(3u, 2u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glGetInteger64i_vFn = reinterpret_cast<glGetInteger64i_vProc>(
+        GetGLProcAddress("glGetInteger64i_v"));
+    DCHECK(fn.glGetInteger64i_vFn);
   }
-  if (!fn.glGetProgramBinaryFn) {
+
+  debug_fn.glGetInteger64vFn = 0;
+  if (ver->IsAtLeastGL(3u, 2u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glGetInteger64vFn = reinterpret_cast<glGetInteger64vProc>(
+        GetGLProcAddress("glGetInteger64v"));
+    DCHECK(fn.glGetInteger64vFn);
+  }
+
+  debug_fn.glGetIntegeri_vFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glGetIntegeri_vFn = reinterpret_cast<glGetIntegeri_vProc>(
+        GetGLProcAddress("glGetIntegeri_v"));
+    DCHECK(fn.glGetIntegeri_vFn);
+  }
+
+  debug_fn.glGetInternalformativFn = 0;
+  if (ver->IsAtLeastGL(4u, 2u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glGetInternalformativFn = reinterpret_cast<glGetInternalformativProc>(
+        GetGLProcAddress("glGetInternalformativ"));
+    DCHECK(fn.glGetInternalformativFn);
+  }
+
+  debug_fn.glGetProgramBinaryFn = 0;
+  if (ver->IsAtLeastGL(4u, 1u) || ver->IsAtLeastGLES(3u, 0u) ||
+      ext.b_GL_ARB_get_program_binary) {
     fn.glGetProgramBinaryFn = reinterpret_cast<glGetProgramBinaryProc>(
         GetGLProcAddress("glGetProgramBinary"));
+    DCHECK(fn.glGetProgramBinaryFn);
+  } else if (ext.b_GL_OES_get_program_binary) {
+    fn.glGetProgramBinaryFn = reinterpret_cast<glGetProgramBinaryProc>(
+        GetGLProcAddress("glGetProgramBinaryOES"));
+    DCHECK(fn.glGetProgramBinaryFn);
   }
 
-  fn.glGetQueryivARBFn = 0;
+  debug_fn.glGetQueryivFn = 0;
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glGetQueryivFn =
+        reinterpret_cast<glGetQueryivProc>(GetGLProcAddress("glGetQueryiv"));
+    DCHECK(fn.glGetQueryivFn);
+  }
+
   debug_fn.glGetQueryivARBFn = 0;
   if (ext.b_GL_ARB_occlusion_query) {
     fn.glGetQueryivARBFn = reinterpret_cast<glGetQueryivARBProc>(
         GetGLProcAddress("glGetQueryivARB"));
-  }
-  if (!fn.glGetQueryivARBFn) {
+    DCHECK(fn.glGetQueryivARBFn);
+  } else if (ext.b_GL_EXT_disjoint_timer_query ||
+             ext.b_GL_EXT_occlusion_query_boolean) {
     fn.glGetQueryivARBFn = reinterpret_cast<glGetQueryivARBProc>(
         GetGLProcAddress("glGetQueryivEXT"));
+    DCHECK(fn.glGetQueryivARBFn);
   }
 
-  fn.glGetQueryObjectivARBFn = 0;
+  debug_fn.glGetQueryObjecti64vFn = 0;
+  if (ver->IsAtLeastGL(3u, 3u) || ext.b_GL_ARB_timer_query) {
+    fn.glGetQueryObjecti64vFn = reinterpret_cast<glGetQueryObjecti64vProc>(
+        GetGLProcAddress("glGetQueryObjecti64v"));
+    DCHECK(fn.glGetQueryObjecti64vFn);
+  } else if (ext.b_GL_EXT_timer_query || ext.b_GL_EXT_disjoint_timer_query) {
+    fn.glGetQueryObjecti64vFn = reinterpret_cast<glGetQueryObjecti64vProc>(
+        GetGLProcAddress("glGetQueryObjecti64vEXT"));
+    DCHECK(fn.glGetQueryObjecti64vFn);
+  }
+
+  debug_fn.glGetQueryObjectivFn = 0;
+  if (!ver->is_es) {
+    fn.glGetQueryObjectivFn = reinterpret_cast<glGetQueryObjectivProc>(
+        GetGLProcAddress("glGetQueryObjectiv"));
+    DCHECK(fn.glGetQueryObjectivFn);
+  }
+
   debug_fn.glGetQueryObjectivARBFn = 0;
   if (ext.b_GL_ARB_occlusion_query) {
     fn.glGetQueryObjectivARBFn = reinterpret_cast<glGetQueryObjectivARBProc>(
         GetGLProcAddress("glGetQueryObjectivARB"));
-  }
-  if (!fn.glGetQueryObjectivARBFn) {
+    DCHECK(fn.glGetQueryObjectivARBFn);
+  } else if (ext.b_GL_EXT_disjoint_timer_query) {
     fn.glGetQueryObjectivARBFn = reinterpret_cast<glGetQueryObjectivARBProc>(
         GetGLProcAddress("glGetQueryObjectivEXT"));
+    DCHECK(fn.glGetQueryObjectivARBFn);
   }
 
-  fn.glGetQueryObjectui64vFn = 0;
   debug_fn.glGetQueryObjectui64vFn = 0;
-  if (ext.b_GL_ARB_timer_query) {
+  if (ver->IsAtLeastGL(3u, 3u) || ext.b_GL_ARB_timer_query) {
     fn.glGetQueryObjectui64vFn = reinterpret_cast<glGetQueryObjectui64vProc>(
         GetGLProcAddress("glGetQueryObjectui64v"));
-  }
-  if (!fn.glGetQueryObjectui64vFn) {
+    DCHECK(fn.glGetQueryObjectui64vFn);
+  } else if (ext.b_GL_EXT_timer_query || ext.b_GL_EXT_disjoint_timer_query) {
     fn.glGetQueryObjectui64vFn = reinterpret_cast<glGetQueryObjectui64vProc>(
         GetGLProcAddress("glGetQueryObjectui64vEXT"));
+    DCHECK(fn.glGetQueryObjectui64vFn);
   }
 
-  fn.glGetQueryObjectuivARBFn = 0;
+  debug_fn.glGetQueryObjectuivFn = 0;
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glGetQueryObjectuivFn = reinterpret_cast<glGetQueryObjectuivProc>(
+        GetGLProcAddress("glGetQueryObjectuiv"));
+    DCHECK(fn.glGetQueryObjectuivFn);
+  }
+
   debug_fn.glGetQueryObjectuivARBFn = 0;
   if (ext.b_GL_ARB_occlusion_query) {
     fn.glGetQueryObjectuivARBFn = reinterpret_cast<glGetQueryObjectuivARBProc>(
         GetGLProcAddress("glGetQueryObjectuivARB"));
-  }
-  if (!fn.glGetQueryObjectuivARBFn) {
+    DCHECK(fn.glGetQueryObjectuivARBFn);
+  } else if (ext.b_GL_EXT_disjoint_timer_query ||
+             ext.b_GL_EXT_occlusion_query_boolean) {
     fn.glGetQueryObjectuivARBFn = reinterpret_cast<glGetQueryObjectuivARBProc>(
         GetGLProcAddress("glGetQueryObjectuivEXT"));
+    DCHECK(fn.glGetQueryObjectuivARBFn);
   }
 
-  fn.glGetRenderbufferParameterivEXTFn = 0;
   debug_fn.glGetRenderbufferParameterivEXTFn = 0;
-  if (ext.b_GL_EXT_framebuffer_object) {
-    fn.glGetRenderbufferParameterivEXTFn =
-        reinterpret_cast<glGetRenderbufferParameterivEXTProc>(
-            GetGLProcAddress("glGetRenderbufferParameterivEXT"));
-  }
-  if (!fn.glGetRenderbufferParameterivEXTFn) {
+  if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
     fn.glGetRenderbufferParameterivEXTFn =
         reinterpret_cast<glGetRenderbufferParameterivEXTProc>(
             GetGLProcAddress("glGetRenderbufferParameteriv"));
+    DCHECK(fn.glGetRenderbufferParameterivEXTFn);
+  } else if (ext.b_GL_EXT_framebuffer_object) {
+    fn.glGetRenderbufferParameterivEXTFn =
+        reinterpret_cast<glGetRenderbufferParameterivEXTProc>(
+            GetGLProcAddress("glGetRenderbufferParameterivEXT"));
+    DCHECK(fn.glGetRenderbufferParameterivEXTFn);
   }
 
-  fn.glIsFramebufferEXTFn = 0;
-  debug_fn.glIsFramebufferEXTFn = 0;
-  if (ext.b_GL_EXT_framebuffer_object) {
-    fn.glIsFramebufferEXTFn = reinterpret_cast<glIsFramebufferEXTProc>(
-        GetGLProcAddress("glIsFramebufferEXT"));
+  debug_fn.glGetSamplerParameterfvFn = 0;
+  if (ver->IsAtLeastGL(3u, 3u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glGetSamplerParameterfvFn =
+        reinterpret_cast<glGetSamplerParameterfvProc>(
+            GetGLProcAddress("glGetSamplerParameterfv"));
+    DCHECK(fn.glGetSamplerParameterfvFn);
   }
-  if (!fn.glIsFramebufferEXTFn) {
+
+  debug_fn.glGetSamplerParameterivFn = 0;
+  if (ver->IsAtLeastGL(3u, 3u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glGetSamplerParameterivFn =
+        reinterpret_cast<glGetSamplerParameterivProc>(
+            GetGLProcAddress("glGetSamplerParameteriv"));
+    DCHECK(fn.glGetSamplerParameterivFn);
+  }
+
+  debug_fn.glGetShaderPrecisionFormatFn = 0;
+  if (ver->IsAtLeastGL(4u, 1u) || ver->is_es) {
+    fn.glGetShaderPrecisionFormatFn =
+        reinterpret_cast<glGetShaderPrecisionFormatProc>(
+            GetGLProcAddress("glGetShaderPrecisionFormat"));
+    DCHECK(fn.glGetShaderPrecisionFormatFn);
+  }
+
+  debug_fn.glGetSyncivFn = 0;
+  if (ver->IsAtLeastGL(3u, 2u) || ver->IsAtLeastGLES(3u, 0u) ||
+      ext.b_GL_ARB_sync) {
+    fn.glGetSyncivFn =
+        reinterpret_cast<glGetSyncivProc>(GetGLProcAddress("glGetSynciv"));
+    DCHECK(fn.glGetSyncivFn);
+  }
+
+  debug_fn.glGetTexLevelParameterfvFn = 0;
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 1u)) {
+    fn.glGetTexLevelParameterfvFn =
+        reinterpret_cast<glGetTexLevelParameterfvProc>(
+            GetGLProcAddress("glGetTexLevelParameterfv"));
+    DCHECK(fn.glGetTexLevelParameterfvFn);
+  }
+
+  debug_fn.glGetTexLevelParameterivFn = 0;
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 1u)) {
+    fn.glGetTexLevelParameterivFn =
+        reinterpret_cast<glGetTexLevelParameterivProc>(
+            GetGLProcAddress("glGetTexLevelParameteriv"));
+    DCHECK(fn.glGetTexLevelParameterivFn);
+  }
+
+  debug_fn.glGetTransformFeedbackVaryingFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glGetTransformFeedbackVaryingFn =
+        reinterpret_cast<glGetTransformFeedbackVaryingProc>(
+            GetGLProcAddress("glGetTransformFeedbackVarying"));
+    DCHECK(fn.glGetTransformFeedbackVaryingFn);
+  }
+
+  debug_fn.glGetTranslatedShaderSourceANGLEFn = 0;
+  if (ext.b_GL_ANGLE_translated_shader_source) {
+    fn.glGetTranslatedShaderSourceANGLEFn =
+        reinterpret_cast<glGetTranslatedShaderSourceANGLEProc>(
+            GetGLProcAddress("glGetTranslatedShaderSourceANGLE"));
+    DCHECK(fn.glGetTranslatedShaderSourceANGLEFn);
+  }
+
+  debug_fn.glGetUniformBlockIndexFn = 0;
+  if (ver->IsAtLeastGLES(3u, 0u) || ver->IsAtLeastGL(3u, 1u)) {
+    fn.glGetUniformBlockIndexFn = reinterpret_cast<glGetUniformBlockIndexProc>(
+        GetGLProcAddress("glGetUniformBlockIndex"));
+    DCHECK(fn.glGetUniformBlockIndexFn);
+  }
+
+  debug_fn.glGetUniformIndicesFn = 0;
+  if (ver->IsAtLeastGLES(3u, 0u) || ver->IsAtLeastGL(3u, 1u)) {
+    fn.glGetUniformIndicesFn = reinterpret_cast<glGetUniformIndicesProc>(
+        GetGLProcAddress("glGetUniformIndices"));
+    DCHECK(fn.glGetUniformIndicesFn);
+  }
+
+  debug_fn.glInsertEventMarkerEXTFn = 0;
+  if (ext.b_GL_EXT_debug_marker) {
+    fn.glInsertEventMarkerEXTFn = reinterpret_cast<glInsertEventMarkerEXTProc>(
+        GetGLProcAddress("glInsertEventMarkerEXT"));
+    DCHECK(fn.glInsertEventMarkerEXTFn);
+  }
+
+  debug_fn.glInvalidateFramebufferFn = 0;
+  if (ver->IsAtLeastGL(4u, 3u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glInvalidateFramebufferFn =
+        reinterpret_cast<glInvalidateFramebufferProc>(
+            GetGLProcAddress("glInvalidateFramebuffer"));
+    DCHECK(fn.glInvalidateFramebufferFn);
+  }
+
+  debug_fn.glInvalidateSubFramebufferFn = 0;
+  if (ver->IsAtLeastGL(4u, 3u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glInvalidateSubFramebufferFn =
+        reinterpret_cast<glInvalidateSubFramebufferProc>(
+            GetGLProcAddress("glInvalidateSubFramebuffer"));
+    DCHECK(fn.glInvalidateSubFramebufferFn);
+  }
+
+  debug_fn.glIsFenceAPPLEFn = 0;
+  if (ext.b_GL_APPLE_fence) {
+    fn.glIsFenceAPPLEFn = reinterpret_cast<glIsFenceAPPLEProc>(
+        GetGLProcAddress("glIsFenceAPPLE"));
+    DCHECK(fn.glIsFenceAPPLEFn);
+  }
+
+  debug_fn.glIsFenceNVFn = 0;
+  if (ext.b_GL_NV_fence) {
+    fn.glIsFenceNVFn =
+        reinterpret_cast<glIsFenceNVProc>(GetGLProcAddress("glIsFenceNV"));
+    DCHECK(fn.glIsFenceNVFn);
+  }
+
+  debug_fn.glIsFramebufferEXTFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
     fn.glIsFramebufferEXTFn = reinterpret_cast<glIsFramebufferEXTProc>(
         GetGLProcAddress("glIsFramebuffer"));
+    DCHECK(fn.glIsFramebufferEXTFn);
+  } else if (ext.b_GL_EXT_framebuffer_object) {
+    fn.glIsFramebufferEXTFn = reinterpret_cast<glIsFramebufferEXTProc>(
+        GetGLProcAddress("glIsFramebufferEXT"));
+    DCHECK(fn.glIsFramebufferEXTFn);
   }
 
-  fn.glIsQueryARBFn = 0;
+  debug_fn.glIsQueryFn = 0;
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glIsQueryFn =
+        reinterpret_cast<glIsQueryProc>(GetGLProcAddress("glIsQuery"));
+    DCHECK(fn.glIsQueryFn);
+  }
+
   debug_fn.glIsQueryARBFn = 0;
   if (ext.b_GL_ARB_occlusion_query) {
     fn.glIsQueryARBFn =
         reinterpret_cast<glIsQueryARBProc>(GetGLProcAddress("glIsQueryARB"));
-  }
-  if (!fn.glIsQueryARBFn) {
+    DCHECK(fn.glIsQueryARBFn);
+  } else if (ext.b_GL_EXT_disjoint_timer_query ||
+             ext.b_GL_EXT_occlusion_query_boolean) {
     fn.glIsQueryARBFn =
         reinterpret_cast<glIsQueryARBProc>(GetGLProcAddress("glIsQueryEXT"));
+    DCHECK(fn.glIsQueryARBFn);
   }
 
-  fn.glIsRenderbufferEXTFn = 0;
   debug_fn.glIsRenderbufferEXTFn = 0;
-  if (ext.b_GL_EXT_framebuffer_object) {
-    fn.glIsRenderbufferEXTFn = reinterpret_cast<glIsRenderbufferEXTProc>(
-        GetGLProcAddress("glIsRenderbufferEXT"));
-  }
-  if (!fn.glIsRenderbufferEXTFn) {
+  if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
     fn.glIsRenderbufferEXTFn = reinterpret_cast<glIsRenderbufferEXTProc>(
         GetGLProcAddress("glIsRenderbuffer"));
+    DCHECK(fn.glIsRenderbufferEXTFn);
+  } else if (ext.b_GL_EXT_framebuffer_object) {
+    fn.glIsRenderbufferEXTFn = reinterpret_cast<glIsRenderbufferEXTProc>(
+        GetGLProcAddress("glIsRenderbufferEXT"));
+    DCHECK(fn.glIsRenderbufferEXTFn);
   }
 
-  fn.glIsVertexArrayOESFn = 0;
+  debug_fn.glIsSamplerFn = 0;
+  if (ver->IsAtLeastGL(3u, 3u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glIsSamplerFn =
+        reinterpret_cast<glIsSamplerProc>(GetGLProcAddress("glIsSampler"));
+    DCHECK(fn.glIsSamplerFn);
+  }
+
+  debug_fn.glIsSyncFn = 0;
+  if (ver->IsAtLeastGL(3u, 2u) || ver->IsAtLeastGLES(3u, 0u) ||
+      ext.b_GL_ARB_sync) {
+    fn.glIsSyncFn =
+        reinterpret_cast<glIsSyncProc>(GetGLProcAddress("glIsSync"));
+    DCHECK(fn.glIsSyncFn);
+  }
+
+  debug_fn.glIsTransformFeedbackFn = 0;
+  if (ver->IsAtLeastGLES(3u, 0u) || ver->IsAtLeastGL(4u, 0u)) {
+    fn.glIsTransformFeedbackFn = reinterpret_cast<glIsTransformFeedbackProc>(
+        GetGLProcAddress("glIsTransformFeedback"));
+    DCHECK(fn.glIsTransformFeedbackFn);
+  }
+
   debug_fn.glIsVertexArrayOESFn = 0;
-  if ((ver->is_gl3 || ver->is_gl4 || ver->is_es3) ||
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u) ||
       ext.b_GL_ARB_vertex_array_object) {
     fn.glIsVertexArrayOESFn = reinterpret_cast<glIsVertexArrayOESProc>(
         GetGLProcAddress("glIsVertexArray"));
-  }
-  if (!fn.glIsVertexArrayOESFn && (ext.b_GL_OES_vertex_array_object)) {
+    DCHECK(fn.glIsVertexArrayOESFn);
+  } else if (ext.b_GL_OES_vertex_array_object) {
     fn.glIsVertexArrayOESFn = reinterpret_cast<glIsVertexArrayOESProc>(
         GetGLProcAddress("glIsVertexArrayOES"));
-  }
-  if (!fn.glIsVertexArrayOESFn) {
+    DCHECK(fn.glIsVertexArrayOESFn);
+  } else if (ext.b_GL_APPLE_vertex_array_object) {
     fn.glIsVertexArrayOESFn = reinterpret_cast<glIsVertexArrayOESProc>(
         GetGLProcAddress("glIsVertexArrayAPPLE"));
+    DCHECK(fn.glIsVertexArrayOESFn);
   }
 
-  fn.glMapBufferFn = 0;
   debug_fn.glMapBufferFn = 0;
-  if (ext.b_GL_OES_mapbuffer) {
-    fn.glMapBufferFn =
-        reinterpret_cast<glMapBufferProc>(GetGLProcAddress("glMapBufferOES"));
-  }
-  if (!fn.glMapBufferFn) {
+  if (!ver->is_es) {
     fn.glMapBufferFn =
         reinterpret_cast<glMapBufferProc>(GetGLProcAddress("glMapBuffer"));
+    DCHECK(fn.glMapBufferFn);
+  } else if (ext.b_GL_OES_mapbuffer) {
+    fn.glMapBufferFn =
+        reinterpret_cast<glMapBufferProc>(GetGLProcAddress("glMapBufferOES"));
+    DCHECK(fn.glMapBufferFn);
   }
 
-  fn.glMapBufferRangeFn = 0;
   debug_fn.glMapBufferRangeFn = 0;
-  if ((ver->is_gl3 || ver->is_gl4 || ver->is_es3) ||
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u) ||
       ext.b_GL_ARB_map_buffer_range) {
     fn.glMapBufferRangeFn = reinterpret_cast<glMapBufferRangeProc>(
         GetGLProcAddress("glMapBufferRange"));
-  }
-  if (!fn.glMapBufferRangeFn) {
+    DCHECK(fn.glMapBufferRangeFn);
+  } else if (ext.b_GL_EXT_map_buffer_range) {
     fn.glMapBufferRangeFn = reinterpret_cast<glMapBufferRangeProc>(
         GetGLProcAddress("glMapBufferRangeEXT"));
+    DCHECK(fn.glMapBufferRangeFn);
   }
 
-  fn.glProgramBinaryFn = 0;
-  debug_fn.glProgramBinaryFn = 0;
-  if (ext.b_GL_OES_get_program_binary) {
-    fn.glProgramBinaryFn = reinterpret_cast<glProgramBinaryProc>(
-        GetGLProcAddress("glProgramBinaryOES"));
+  debug_fn.glMatrixLoadfEXTFn = 0;
+  if (ext.b_GL_EXT_direct_state_access || ext.b_GL_NV_path_rendering) {
+    fn.glMatrixLoadfEXTFn = reinterpret_cast<glMatrixLoadfEXTProc>(
+        GetGLProcAddress("glMatrixLoadfEXT"));
+    DCHECK(fn.glMatrixLoadfEXTFn);
   }
-  if (!fn.glProgramBinaryFn) {
+
+  debug_fn.glMatrixLoadIdentityEXTFn = 0;
+  if (ext.b_GL_EXT_direct_state_access || ext.b_GL_NV_path_rendering) {
+    fn.glMatrixLoadIdentityEXTFn =
+        reinterpret_cast<glMatrixLoadIdentityEXTProc>(
+            GetGLProcAddress("glMatrixLoadIdentityEXT"));
+    DCHECK(fn.glMatrixLoadIdentityEXTFn);
+  }
+
+  debug_fn.glPauseTransformFeedbackFn = 0;
+  if (ver->IsAtLeastGLES(3u, 0u) || ver->IsAtLeastGL(4u, 0u)) {
+    fn.glPauseTransformFeedbackFn =
+        reinterpret_cast<glPauseTransformFeedbackProc>(
+            GetGLProcAddress("glPauseTransformFeedback"));
+    DCHECK(fn.glPauseTransformFeedbackFn);
+  }
+
+  debug_fn.glPointParameteriFn = 0;
+  if (!ver->is_es) {
+    fn.glPointParameteriFn = reinterpret_cast<glPointParameteriProc>(
+        GetGLProcAddress("glPointParameteri"));
+    DCHECK(fn.glPointParameteriFn);
+  }
+
+  debug_fn.glPopGroupMarkerEXTFn = 0;
+  if (ext.b_GL_EXT_debug_marker) {
+    fn.glPopGroupMarkerEXTFn = reinterpret_cast<glPopGroupMarkerEXTProc>(
+        GetGLProcAddress("glPopGroupMarkerEXT"));
+    DCHECK(fn.glPopGroupMarkerEXTFn);
+  }
+
+  debug_fn.glProgramBinaryFn = 0;
+  if (ver->IsAtLeastGL(4u, 1u) || ver->IsAtLeastGLES(3u, 0u) ||
+      ext.b_GL_ARB_get_program_binary) {
     fn.glProgramBinaryFn = reinterpret_cast<glProgramBinaryProc>(
         GetGLProcAddress("glProgramBinary"));
+    DCHECK(fn.glProgramBinaryFn);
+  } else if (ext.b_GL_OES_get_program_binary) {
+    fn.glProgramBinaryFn = reinterpret_cast<glProgramBinaryProc>(
+        GetGLProcAddress("glProgramBinaryOES"));
+    DCHECK(fn.glProgramBinaryFn);
   }
 
-  fn.glQueryCounterFn = 0;
+  debug_fn.glProgramParameteriFn = 0;
+  if (ver->IsAtLeastGL(4u, 1u) || ver->IsAtLeastGLES(3u, 0u) ||
+      ext.b_GL_ARB_get_program_binary) {
+    fn.glProgramParameteriFn = reinterpret_cast<glProgramParameteriProc>(
+        GetGLProcAddress("glProgramParameteri"));
+    DCHECK(fn.glProgramParameteriFn);
+  }
+
+  debug_fn.glPushGroupMarkerEXTFn = 0;
+  if (ext.b_GL_EXT_debug_marker) {
+    fn.glPushGroupMarkerEXTFn = reinterpret_cast<glPushGroupMarkerEXTProc>(
+        GetGLProcAddress("glPushGroupMarkerEXT"));
+    DCHECK(fn.glPushGroupMarkerEXTFn);
+  }
+
   debug_fn.glQueryCounterFn = 0;
-  if (ext.b_GL_ARB_timer_query) {
+  if (ver->IsAtLeastGL(3u, 3u) || ext.b_GL_ARB_timer_query) {
     fn.glQueryCounterFn = reinterpret_cast<glQueryCounterProc>(
         GetGLProcAddress("glQueryCounter"));
-  }
-  if (!fn.glQueryCounterFn) {
+    DCHECK(fn.glQueryCounterFn);
+  } else if (ext.b_GL_EXT_disjoint_timer_query) {
     fn.glQueryCounterFn = reinterpret_cast<glQueryCounterProc>(
         GetGLProcAddress("glQueryCounterEXT"));
+    DCHECK(fn.glQueryCounterFn);
   }
 
-  fn.glRenderbufferStorageEXTFn = 0;
-  debug_fn.glRenderbufferStorageEXTFn = 0;
-  if (ext.b_GL_EXT_framebuffer_object) {
-    fn.glRenderbufferStorageEXTFn =
-        reinterpret_cast<glRenderbufferStorageEXTProc>(
-            GetGLProcAddress("glRenderbufferStorageEXT"));
+  debug_fn.glReadBufferFn = 0;
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glReadBufferFn =
+        reinterpret_cast<glReadBufferProc>(GetGLProcAddress("glReadBuffer"));
+    DCHECK(fn.glReadBufferFn);
   }
-  if (!fn.glRenderbufferStorageEXTFn) {
+
+  debug_fn.glReleaseShaderCompilerFn = 0;
+  if (ver->IsAtLeastGL(4u, 1u) || ver->is_es) {
+    fn.glReleaseShaderCompilerFn =
+        reinterpret_cast<glReleaseShaderCompilerProc>(
+            GetGLProcAddress("glReleaseShaderCompiler"));
+    DCHECK(fn.glReleaseShaderCompilerFn);
+  }
+
+  debug_fn.glRenderbufferStorageEXTFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
     fn.glRenderbufferStorageEXTFn =
         reinterpret_cast<glRenderbufferStorageEXTProc>(
             GetGLProcAddress("glRenderbufferStorage"));
+    DCHECK(fn.glRenderbufferStorageEXTFn);
+  } else if (ext.b_GL_EXT_framebuffer_object) {
+    fn.glRenderbufferStorageEXTFn =
+        reinterpret_cast<glRenderbufferStorageEXTProc>(
+            GetGLProcAddress("glRenderbufferStorageEXT"));
+    DCHECK(fn.glRenderbufferStorageEXTFn);
   }
 
-  fn.glRenderbufferStorageMultisampleANGLEFn = 0;
+  debug_fn.glRenderbufferStorageMultisampleFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glRenderbufferStorageMultisampleFn =
+        reinterpret_cast<glRenderbufferStorageMultisampleProc>(
+            GetGLProcAddress("glRenderbufferStorageMultisample"));
+    DCHECK(fn.glRenderbufferStorageMultisampleFn);
+  }
+
   debug_fn.glRenderbufferStorageMultisampleANGLEFn = 0;
-  if (ext.b_GL_ANGLE_framebuffer_multisample) {
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glRenderbufferStorageMultisampleANGLEFn =
+        reinterpret_cast<glRenderbufferStorageMultisampleANGLEProc>(
+            GetGLProcAddress("glRenderbufferStorageMultisample"));
+    DCHECK(fn.glRenderbufferStorageMultisampleANGLEFn);
+  } else if (ext.b_GL_ANGLE_framebuffer_multisample) {
     fn.glRenderbufferStorageMultisampleANGLEFn =
         reinterpret_cast<glRenderbufferStorageMultisampleANGLEProc>(
             GetGLProcAddress("glRenderbufferStorageMultisampleANGLE"));
-  }
-  if (!fn.glRenderbufferStorageMultisampleANGLEFn) {
-    fn.glRenderbufferStorageMultisampleANGLEFn =
-        reinterpret_cast<glRenderbufferStorageMultisampleANGLEProc>(
-            GetGLProcAddress("glRenderbufferStorageMultisample"));
+    DCHECK(fn.glRenderbufferStorageMultisampleANGLEFn);
   }
 
-  fn.glRenderbufferStorageMultisampleEXTFn = 0;
   debug_fn.glRenderbufferStorageMultisampleEXTFn = 0;
-  if ((ext.b_GL_EXT_framebuffer_multisample ||
-       ext.b_GL_EXT_multisampled_render_to_texture)) {
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glRenderbufferStorageMultisampleEXTFn =
+        reinterpret_cast<glRenderbufferStorageMultisampleEXTProc>(
+            GetGLProcAddress("glRenderbufferStorageMultisample"));
+    DCHECK(fn.glRenderbufferStorageMultisampleEXTFn);
+  } else if (ext.b_GL_EXT_multisampled_render_to_texture ||
+             ext.b_GL_EXT_framebuffer_multisample) {
     fn.glRenderbufferStorageMultisampleEXTFn =
         reinterpret_cast<glRenderbufferStorageMultisampleEXTProc>(
             GetGLProcAddress("glRenderbufferStorageMultisampleEXT"));
-  }
-  if (!fn.glRenderbufferStorageMultisampleEXTFn) {
-    fn.glRenderbufferStorageMultisampleEXTFn =
-        reinterpret_cast<glRenderbufferStorageMultisampleEXTProc>(
-            GetGLProcAddress("glRenderbufferStorageMultisample"));
+    DCHECK(fn.glRenderbufferStorageMultisampleEXTFn);
   }
 
-  fn.glTexStorage2DEXTFn = 0;
+  debug_fn.glRenderbufferStorageMultisampleIMGFn = 0;
+  if (ext.b_GL_IMG_multisampled_render_to_texture) {
+    fn.glRenderbufferStorageMultisampleIMGFn =
+        reinterpret_cast<glRenderbufferStorageMultisampleIMGProc>(
+            GetGLProcAddress("glRenderbufferStorageMultisampleIMG"));
+    DCHECK(fn.glRenderbufferStorageMultisampleIMGFn);
+  }
+
+  debug_fn.glResumeTransformFeedbackFn = 0;
+  if (ver->IsAtLeastGLES(3u, 0u) || ver->IsAtLeastGL(4u, 0u)) {
+    fn.glResumeTransformFeedbackFn =
+        reinterpret_cast<glResumeTransformFeedbackProc>(
+            GetGLProcAddress("glResumeTransformFeedback"));
+    DCHECK(fn.glResumeTransformFeedbackFn);
+  }
+
+  debug_fn.glSamplerParameterfFn = 0;
+  if (ver->IsAtLeastGL(3u, 3u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glSamplerParameterfFn = reinterpret_cast<glSamplerParameterfProc>(
+        GetGLProcAddress("glSamplerParameterf"));
+    DCHECK(fn.glSamplerParameterfFn);
+  }
+
+  debug_fn.glSamplerParameterfvFn = 0;
+  if (ver->IsAtLeastGL(3u, 3u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glSamplerParameterfvFn = reinterpret_cast<glSamplerParameterfvProc>(
+        GetGLProcAddress("glSamplerParameterfv"));
+    DCHECK(fn.glSamplerParameterfvFn);
+  }
+
+  debug_fn.glSamplerParameteriFn = 0;
+  if (ver->IsAtLeastGL(3u, 3u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glSamplerParameteriFn = reinterpret_cast<glSamplerParameteriProc>(
+        GetGLProcAddress("glSamplerParameteri"));
+    DCHECK(fn.glSamplerParameteriFn);
+  }
+
+  debug_fn.glSamplerParameterivFn = 0;
+  if (ver->IsAtLeastGL(3u, 3u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glSamplerParameterivFn = reinterpret_cast<glSamplerParameterivProc>(
+        GetGLProcAddress("glSamplerParameteriv"));
+    DCHECK(fn.glSamplerParameterivFn);
+  }
+
+  debug_fn.glSetFenceAPPLEFn = 0;
+  if (ext.b_GL_APPLE_fence) {
+    fn.glSetFenceAPPLEFn = reinterpret_cast<glSetFenceAPPLEProc>(
+        GetGLProcAddress("glSetFenceAPPLE"));
+    DCHECK(fn.glSetFenceAPPLEFn);
+  }
+
+  debug_fn.glSetFenceNVFn = 0;
+  if (ext.b_GL_NV_fence) {
+    fn.glSetFenceNVFn =
+        reinterpret_cast<glSetFenceNVProc>(GetGLProcAddress("glSetFenceNV"));
+    DCHECK(fn.glSetFenceNVFn);
+  }
+
+  debug_fn.glShaderBinaryFn = 0;
+  if (ver->IsAtLeastGL(4u, 1u) || ver->is_es) {
+    fn.glShaderBinaryFn = reinterpret_cast<glShaderBinaryProc>(
+        GetGLProcAddress("glShaderBinary"));
+    DCHECK(fn.glShaderBinaryFn);
+  }
+
+  debug_fn.glTestFenceAPPLEFn = 0;
+  if (ext.b_GL_APPLE_fence) {
+    fn.glTestFenceAPPLEFn = reinterpret_cast<glTestFenceAPPLEProc>(
+        GetGLProcAddress("glTestFenceAPPLE"));
+    DCHECK(fn.glTestFenceAPPLEFn);
+  }
+
+  debug_fn.glTestFenceNVFn = 0;
+  if (ext.b_GL_NV_fence) {
+    fn.glTestFenceNVFn =
+        reinterpret_cast<glTestFenceNVProc>(GetGLProcAddress("glTestFenceNV"));
+    DCHECK(fn.glTestFenceNVFn);
+  }
+
+  debug_fn.glTexImage3DFn = 0;
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glTexImage3DFn =
+        reinterpret_cast<glTexImage3DProc>(GetGLProcAddress("glTexImage3D"));
+    DCHECK(fn.glTexImage3DFn);
+  }
+
   debug_fn.glTexStorage2DEXTFn = 0;
-  if (ver->is_es3 || ext.b_GL_ARB_texture_storage) {
+  if (ver->IsAtLeastGL(4u, 2u) || ver->IsAtLeastGLES(3u, 0u) ||
+      ext.b_GL_ARB_texture_storage) {
     fn.glTexStorage2DEXTFn = reinterpret_cast<glTexStorage2DEXTProc>(
         GetGLProcAddress("glTexStorage2D"));
-  }
-  if (!fn.glTexStorage2DEXTFn) {
+    DCHECK(fn.glTexStorage2DEXTFn);
+  } else if (ext.b_GL_EXT_texture_storage) {
     fn.glTexStorage2DEXTFn = reinterpret_cast<glTexStorage2DEXTProc>(
         GetGLProcAddress("glTexStorage2DEXT"));
+    DCHECK(fn.glTexStorage2DEXTFn);
   }
 
-  fn.glUnmapBufferFn = 0;
-  debug_fn.glUnmapBufferFn = 0;
-  if (ext.b_GL_OES_mapbuffer) {
-    fn.glUnmapBufferFn = reinterpret_cast<glUnmapBufferProc>(
-        GetGLProcAddress("glUnmapBufferOES"));
+  debug_fn.glTexStorage3DFn = 0;
+  if (ver->IsAtLeastGL(4u, 2u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glTexStorage3DFn = reinterpret_cast<glTexStorage3DProc>(
+        GetGLProcAddress("glTexStorage3D"));
+    DCHECK(fn.glTexStorage3DFn);
   }
-  if (!fn.glUnmapBufferFn) {
+
+  debug_fn.glTransformFeedbackVaryingsFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glTransformFeedbackVaryingsFn =
+        reinterpret_cast<glTransformFeedbackVaryingsProc>(
+            GetGLProcAddress("glTransformFeedbackVaryings"));
+    DCHECK(fn.glTransformFeedbackVaryingsFn);
+  }
+
+  debug_fn.glUniform1uiFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glUniform1uiFn =
+        reinterpret_cast<glUniform1uiProc>(GetGLProcAddress("glUniform1ui"));
+    DCHECK(fn.glUniform1uiFn);
+  }
+
+  debug_fn.glUniform1uivFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glUniform1uivFn =
+        reinterpret_cast<glUniform1uivProc>(GetGLProcAddress("glUniform1uiv"));
+    DCHECK(fn.glUniform1uivFn);
+  }
+
+  debug_fn.glUniform2uiFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glUniform2uiFn =
+        reinterpret_cast<glUniform2uiProc>(GetGLProcAddress("glUniform2ui"));
+    DCHECK(fn.glUniform2uiFn);
+  }
+
+  debug_fn.glUniform2uivFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glUniform2uivFn =
+        reinterpret_cast<glUniform2uivProc>(GetGLProcAddress("glUniform2uiv"));
+    DCHECK(fn.glUniform2uivFn);
+  }
+
+  debug_fn.glUniform3uiFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glUniform3uiFn =
+        reinterpret_cast<glUniform3uiProc>(GetGLProcAddress("glUniform3ui"));
+    DCHECK(fn.glUniform3uiFn);
+  }
+
+  debug_fn.glUniform3uivFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glUniform3uivFn =
+        reinterpret_cast<glUniform3uivProc>(GetGLProcAddress("glUniform3uiv"));
+    DCHECK(fn.glUniform3uivFn);
+  }
+
+  debug_fn.glUniform4uiFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glUniform4uiFn =
+        reinterpret_cast<glUniform4uiProc>(GetGLProcAddress("glUniform4ui"));
+    DCHECK(fn.glUniform4uiFn);
+  }
+
+  debug_fn.glUniform4uivFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glUniform4uivFn =
+        reinterpret_cast<glUniform4uivProc>(GetGLProcAddress("glUniform4uiv"));
+    DCHECK(fn.glUniform4uivFn);
+  }
+
+  debug_fn.glUniformBlockBindingFn = 0;
+  if (ver->IsAtLeastGLES(3u, 0u) || ver->IsAtLeastGL(3u, 1u)) {
+    fn.glUniformBlockBindingFn = reinterpret_cast<glUniformBlockBindingProc>(
+        GetGLProcAddress("glUniformBlockBinding"));
+    DCHECK(fn.glUniformBlockBindingFn);
+  }
+
+  debug_fn.glUniformMatrix2x3fvFn = 0;
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glUniformMatrix2x3fvFn = reinterpret_cast<glUniformMatrix2x3fvProc>(
+        GetGLProcAddress("glUniformMatrix2x3fv"));
+    DCHECK(fn.glUniformMatrix2x3fvFn);
+  }
+
+  debug_fn.glUniformMatrix2x4fvFn = 0;
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glUniformMatrix2x4fvFn = reinterpret_cast<glUniformMatrix2x4fvProc>(
+        GetGLProcAddress("glUniformMatrix2x4fv"));
+    DCHECK(fn.glUniformMatrix2x4fvFn);
+  }
+
+  debug_fn.glUniformMatrix3x2fvFn = 0;
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glUniformMatrix3x2fvFn = reinterpret_cast<glUniformMatrix3x2fvProc>(
+        GetGLProcAddress("glUniformMatrix3x2fv"));
+    DCHECK(fn.glUniformMatrix3x2fvFn);
+  }
+
+  debug_fn.glUniformMatrix3x4fvFn = 0;
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glUniformMatrix3x4fvFn = reinterpret_cast<glUniformMatrix3x4fvProc>(
+        GetGLProcAddress("glUniformMatrix3x4fv"));
+    DCHECK(fn.glUniformMatrix3x4fvFn);
+  }
+
+  debug_fn.glUniformMatrix4x2fvFn = 0;
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glUniformMatrix4x2fvFn = reinterpret_cast<glUniformMatrix4x2fvProc>(
+        GetGLProcAddress("glUniformMatrix4x2fv"));
+    DCHECK(fn.glUniformMatrix4x2fvFn);
+  }
+
+  debug_fn.glUniformMatrix4x3fvFn = 0;
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glUniformMatrix4x3fvFn = reinterpret_cast<glUniformMatrix4x3fvProc>(
+        GetGLProcAddress("glUniformMatrix4x3fv"));
+    DCHECK(fn.glUniformMatrix4x3fvFn);
+  }
+
+  debug_fn.glUnmapBufferFn = 0;
+  if (!ver->is_es || ver->IsAtLeastGLES(3u, 0u)) {
     fn.glUnmapBufferFn =
         reinterpret_cast<glUnmapBufferProc>(GetGLProcAddress("glUnmapBuffer"));
+    DCHECK(fn.glUnmapBufferFn);
+  } else if (ext.b_GL_OES_mapbuffer) {
+    fn.glUnmapBufferFn = reinterpret_cast<glUnmapBufferProc>(
+        GetGLProcAddress("glUnmapBufferOES"));
+    DCHECK(fn.glUnmapBufferFn);
   }
 
-  fn.glVertexAttribDivisorANGLEFn = 0;
   debug_fn.glVertexAttribDivisorANGLEFn = 0;
-  if (ext.b_GL_ARB_instanced_arrays) {
-    fn.glVertexAttribDivisorANGLEFn =
-        reinterpret_cast<glVertexAttribDivisorANGLEProc>(
-            GetGLProcAddress("glVertexAttribDivisorARB"));
-  }
-  if (!fn.glVertexAttribDivisorANGLEFn && (ext.b_GL_ANGLE_instanced_arrays)) {
-    fn.glVertexAttribDivisorANGLEFn =
-        reinterpret_cast<glVertexAttribDivisorANGLEProc>(
-            GetGLProcAddress("glVertexAttribDivisorANGLE"));
-  }
-  if (!fn.glVertexAttribDivisorANGLEFn) {
+  if (ver->IsAtLeastGL(3u, 3u) || ver->IsAtLeastGLES(3u, 0u)) {
     fn.glVertexAttribDivisorANGLEFn =
         reinterpret_cast<glVertexAttribDivisorANGLEProc>(
             GetGLProcAddress("glVertexAttribDivisor"));
+    DCHECK(fn.glVertexAttribDivisorANGLEFn);
+  } else if (ext.b_GL_ARB_instanced_arrays) {
+    fn.glVertexAttribDivisorANGLEFn =
+        reinterpret_cast<glVertexAttribDivisorANGLEProc>(
+            GetGLProcAddress("glVertexAttribDivisorARB"));
+    DCHECK(fn.glVertexAttribDivisorANGLEFn);
+  } else if (ext.b_GL_ANGLE_instanced_arrays) {
+    fn.glVertexAttribDivisorANGLEFn =
+        reinterpret_cast<glVertexAttribDivisorANGLEProc>(
+            GetGLProcAddress("glVertexAttribDivisorANGLE"));
+    DCHECK(fn.glVertexAttribDivisorANGLEFn);
+  }
+
+  debug_fn.glVertexAttribI4iFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glVertexAttribI4iFn = reinterpret_cast<glVertexAttribI4iProc>(
+        GetGLProcAddress("glVertexAttribI4i"));
+    DCHECK(fn.glVertexAttribI4iFn);
+  }
+
+  debug_fn.glVertexAttribI4ivFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glVertexAttribI4ivFn = reinterpret_cast<glVertexAttribI4ivProc>(
+        GetGLProcAddress("glVertexAttribI4iv"));
+    DCHECK(fn.glVertexAttribI4ivFn);
+  }
+
+  debug_fn.glVertexAttribI4uiFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glVertexAttribI4uiFn = reinterpret_cast<glVertexAttribI4uiProc>(
+        GetGLProcAddress("glVertexAttribI4ui"));
+    DCHECK(fn.glVertexAttribI4uiFn);
+  }
+
+  debug_fn.glVertexAttribI4uivFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glVertexAttribI4uivFn = reinterpret_cast<glVertexAttribI4uivProc>(
+        GetGLProcAddress("glVertexAttribI4uiv"));
+    DCHECK(fn.glVertexAttribI4uivFn);
+  }
+
+  debug_fn.glVertexAttribIPointerFn = 0;
+  if (ver->IsAtLeastGL(3u, 0u) || ver->IsAtLeastGLES(3u, 0u)) {
+    fn.glVertexAttribIPointerFn = reinterpret_cast<glVertexAttribIPointerProc>(
+        GetGLProcAddress("glVertexAttribIPointer"));
+    DCHECK(fn.glVertexAttribIPointerFn);
+  }
+
+  debug_fn.glWaitSyncFn = 0;
+  if (ver->IsAtLeastGL(3u, 2u) || ver->IsAtLeastGLES(3u, 0u) ||
+      ext.b_GL_ARB_sync) {
+    fn.glWaitSyncFn =
+        reinterpret_cast<glWaitSyncProc>(GetGLProcAddress("glWaitSync"));
+    DCHECK(fn.glWaitSyncFn);
   }
 
   if (g_debugBindingsInitialized)
diff --git a/ui/gl/gl_bindings_autogen_gl.h b/ui/gl/gl_bindings_autogen_gl.h
index eb66b4a..b38ba3f 100644
--- a/ui/gl/gl_bindings_autogen_gl.h
+++ b/ui/gl/gl_bindings_autogen_gl.h
@@ -894,27 +894,18 @@
   bool b_GL_ANGLE_translated_shader_source;
   bool b_GL_APPLE_fence;
   bool b_GL_APPLE_vertex_array_object;
-  bool b_GL_ARB_ES2_compatibility;
-  bool b_GL_ARB_blend_func_extended;
-  bool b_GL_ARB_copy_buffer;
   bool b_GL_ARB_draw_buffers;
   bool b_GL_ARB_draw_instanced;
-  bool b_GL_ARB_framebuffer_object;
   bool b_GL_ARB_get_program_binary;
   bool b_GL_ARB_instanced_arrays;
-  bool b_GL_ARB_internalformat_query;
-  bool b_GL_ARB_invalidate_subdata;
   bool b_GL_ARB_map_buffer_range;
   bool b_GL_ARB_occlusion_query;
   bool b_GL_ARB_robustness;
-  bool b_GL_ARB_sampler_objects;
   bool b_GL_ARB_sync;
   bool b_GL_ARB_texture_storage;
   bool b_GL_ARB_timer_query;
-  bool b_GL_ARB_transform_feedback2;
-  bool b_GL_ARB_uniform_buffer_object;
   bool b_GL_ARB_vertex_array_object;
-  bool b_GL_ARB_vertex_buffer_object;
+  bool b_GL_CHROMIUM_gles_depth_binding_hack;
   bool b_GL_EXT_debug_marker;
   bool b_GL_EXT_direct_state_access;
   bool b_GL_EXT_discard_framebuffer;
@@ -925,6 +916,7 @@
   bool b_GL_EXT_framebuffer_object;
   bool b_GL_EXT_map_buffer_range;
   bool b_GL_EXT_multisampled_render_to_texture;
+  bool b_GL_EXT_occlusion_query_boolean;
   bool b_GL_EXT_robustness;
   bool b_GL_EXT_texture_storage;
   bool b_GL_EXT_timer_query;
diff --git a/ui/gl/gl_bindings_autogen_glx.cc b/ui/gl/gl_bindings_autogen_glx.cc
index 617ff5f..ca36b7a 100644
--- a/ui/gl/gl_bindings_autogen_glx.cc
+++ b/ui/gl/gl_bindings_autogen_glx.cc
@@ -10,7 +10,7 @@
 
 #include <string>
 
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_enums.h"
@@ -24,21 +24,17 @@
 DriverGLX g_driver_glx;
 
 void DriverGLX::InitializeStaticBindings() {
-  fn.glXBindTexImageEXTFn = reinterpret_cast<glXBindTexImageEXTProc>(
-      GetGLProcAddress("glXBindTexImageEXT"));
+  fn.glXBindTexImageEXTFn = 0;
   fn.glXChooseFBConfigFn = reinterpret_cast<glXChooseFBConfigProc>(
       GetGLProcAddress("glXChooseFBConfig"));
   fn.glXChooseVisualFn = reinterpret_cast<glXChooseVisualProc>(
       GetGLProcAddress("glXChooseVisual"));
   fn.glXCopyContextFn =
       reinterpret_cast<glXCopyContextProc>(GetGLProcAddress("glXCopyContext"));
-  fn.glXCopySubBufferMESAFn = reinterpret_cast<glXCopySubBufferMESAProc>(
-      GetGLProcAddress("glXCopySubBufferMESA"));
+  fn.glXCopySubBufferMESAFn = 0;
   fn.glXCreateContextFn = reinterpret_cast<glXCreateContextProc>(
       GetGLProcAddress("glXCreateContext"));
-  fn.glXCreateContextAttribsARBFn =
-      reinterpret_cast<glXCreateContextAttribsARBProc>(
-          GetGLProcAddress("glXCreateContextAttribsARB"));
+  fn.glXCreateContextAttribsARBFn = 0;
   fn.glXCreateGLXPixmapFn = reinterpret_cast<glXCreateGLXPixmapProc>(
       GetGLProcAddress("glXCreateGLXPixmap"));
   fn.glXCreateNewContextFn = reinterpret_cast<glXCreateNewContextProc>(
@@ -74,17 +70,13 @@
           GetGLProcAddress("glXGetCurrentReadDrawable"));
   fn.glXGetFBConfigAttribFn = reinterpret_cast<glXGetFBConfigAttribProc>(
       GetGLProcAddress("glXGetFBConfigAttrib"));
-  fn.glXGetFBConfigFromVisualSGIXFn =
-      reinterpret_cast<glXGetFBConfigFromVisualSGIXProc>(
-          GetGLProcAddress("glXGetFBConfigFromVisualSGIX"));
+  fn.glXGetFBConfigFromVisualSGIXFn = 0;
   fn.glXGetFBConfigsFn = reinterpret_cast<glXGetFBConfigsProc>(
       GetGLProcAddress("glXGetFBConfigs"));
-  fn.glXGetMscRateOMLFn = reinterpret_cast<glXGetMscRateOMLProc>(
-      GetGLProcAddress("glXGetMscRateOML"));
+  fn.glXGetMscRateOMLFn = 0;
   fn.glXGetSelectedEventFn = reinterpret_cast<glXGetSelectedEventProc>(
       GetGLProcAddress("glXGetSelectedEvent"));
-  fn.glXGetSyncValuesOMLFn = reinterpret_cast<glXGetSyncValuesOMLProc>(
-      GetGLProcAddress("glXGetSyncValuesOML"));
+  fn.glXGetSyncValuesOMLFn = 0;
   fn.glXGetVisualFromFBConfigFn =
       reinterpret_cast<glXGetVisualFromFBConfigProc>(
           GetGLProcAddress("glXGetVisualFromFBConfig"));
@@ -107,30 +99,21 @@
       GetGLProcAddress("glXQueryServerString"));
   fn.glXQueryVersionFn = reinterpret_cast<glXQueryVersionProc>(
       GetGLProcAddress("glXQueryVersion"));
-  fn.glXReleaseTexImageEXTFn = reinterpret_cast<glXReleaseTexImageEXTProc>(
-      GetGLProcAddress("glXReleaseTexImageEXT"));
+  fn.glXReleaseTexImageEXTFn = 0;
   fn.glXSelectEventFn =
       reinterpret_cast<glXSelectEventProc>(GetGLProcAddress("glXSelectEvent"));
   fn.glXSwapBuffersFn =
       reinterpret_cast<glXSwapBuffersProc>(GetGLProcAddress("glXSwapBuffers"));
-  fn.glXSwapIntervalEXTFn = reinterpret_cast<glXSwapIntervalEXTProc>(
-      GetGLProcAddress("glXSwapIntervalEXT"));
-  fn.glXSwapIntervalMESAFn = reinterpret_cast<glXSwapIntervalMESAProc>(
-      GetGLProcAddress("glXSwapIntervalMESA"));
+  fn.glXSwapIntervalEXTFn = 0;
+  fn.glXSwapIntervalMESAFn = 0;
   fn.glXUseXFontFn =
       reinterpret_cast<glXUseXFontProc>(GetGLProcAddress("glXUseXFont"));
   fn.glXWaitGLFn =
       reinterpret_cast<glXWaitGLProc>(GetGLProcAddress("glXWaitGL"));
-  fn.glXWaitVideoSyncSGIFn = reinterpret_cast<glXWaitVideoSyncSGIProc>(
-      GetGLProcAddress("glXWaitVideoSyncSGI"));
+  fn.glXWaitVideoSyncSGIFn = 0;
   fn.glXWaitXFn = reinterpret_cast<glXWaitXProc>(GetGLProcAddress("glXWaitX"));
-}
-
-void DriverGLX::InitializeDynamicBindings(GLContext* context) {
-  DCHECK(context && context->IsCurrent(NULL));
-  const GLVersionInfo* ver = context->GetVersionInfo();
-  ALLOW_UNUSED_LOCAL(ver);
-  std::string extensions = context->GetExtensions() + " ";
+  std::string extensions(GetPlatformExtensions());
+  extensions += " ";
   ALLOW_UNUSED_LOCAL(extensions);
 
   ext.b_GLX_ARB_create_context =
@@ -150,6 +133,78 @@
   ext.b_GLX_SGI_video_sync =
       extensions.find("GLX_SGI_video_sync ") != std::string::npos;
 
+  debug_fn.glXBindTexImageEXTFn = 0;
+  if (ext.b_GLX_EXT_texture_from_pixmap) {
+    fn.glXBindTexImageEXTFn = reinterpret_cast<glXBindTexImageEXTProc>(
+        GetGLProcAddress("glXBindTexImageEXT"));
+    DCHECK(fn.glXBindTexImageEXTFn);
+  }
+
+  debug_fn.glXCopySubBufferMESAFn = 0;
+  if (ext.b_GLX_MESA_copy_sub_buffer) {
+    fn.glXCopySubBufferMESAFn = reinterpret_cast<glXCopySubBufferMESAProc>(
+        GetGLProcAddress("glXCopySubBufferMESA"));
+    DCHECK(fn.glXCopySubBufferMESAFn);
+  }
+
+  debug_fn.glXCreateContextAttribsARBFn = 0;
+  if (ext.b_GLX_ARB_create_context) {
+    fn.glXCreateContextAttribsARBFn =
+        reinterpret_cast<glXCreateContextAttribsARBProc>(
+            GetGLProcAddress("glXCreateContextAttribsARB"));
+    DCHECK(fn.glXCreateContextAttribsARBFn);
+  }
+
+  debug_fn.glXGetFBConfigFromVisualSGIXFn = 0;
+  if (ext.b_GLX_SGIX_fbconfig) {
+    fn.glXGetFBConfigFromVisualSGIXFn =
+        reinterpret_cast<glXGetFBConfigFromVisualSGIXProc>(
+            GetGLProcAddress("glXGetFBConfigFromVisualSGIX"));
+    DCHECK(fn.glXGetFBConfigFromVisualSGIXFn);
+  }
+
+  debug_fn.glXGetMscRateOMLFn = 0;
+  if (ext.b_GLX_OML_sync_control) {
+    fn.glXGetMscRateOMLFn = reinterpret_cast<glXGetMscRateOMLProc>(
+        GetGLProcAddress("glXGetMscRateOML"));
+    DCHECK(fn.glXGetMscRateOMLFn);
+  }
+
+  debug_fn.glXGetSyncValuesOMLFn = 0;
+  if (ext.b_GLX_OML_sync_control) {
+    fn.glXGetSyncValuesOMLFn = reinterpret_cast<glXGetSyncValuesOMLProc>(
+        GetGLProcAddress("glXGetSyncValuesOML"));
+    DCHECK(fn.glXGetSyncValuesOMLFn);
+  }
+
+  debug_fn.glXReleaseTexImageEXTFn = 0;
+  if (ext.b_GLX_EXT_texture_from_pixmap) {
+    fn.glXReleaseTexImageEXTFn = reinterpret_cast<glXReleaseTexImageEXTProc>(
+        GetGLProcAddress("glXReleaseTexImageEXT"));
+    DCHECK(fn.glXReleaseTexImageEXTFn);
+  }
+
+  debug_fn.glXSwapIntervalEXTFn = 0;
+  if (ext.b_GLX_EXT_swap_control) {
+    fn.glXSwapIntervalEXTFn = reinterpret_cast<glXSwapIntervalEXTProc>(
+        GetGLProcAddress("glXSwapIntervalEXT"));
+    DCHECK(fn.glXSwapIntervalEXTFn);
+  }
+
+  debug_fn.glXSwapIntervalMESAFn = 0;
+  if (ext.b_GLX_MESA_swap_control) {
+    fn.glXSwapIntervalMESAFn = reinterpret_cast<glXSwapIntervalMESAProc>(
+        GetGLProcAddress("glXSwapIntervalMESA"));
+    DCHECK(fn.glXSwapIntervalMESAFn);
+  }
+
+  debug_fn.glXWaitVideoSyncSGIFn = 0;
+  if (ext.b_GLX_SGI_video_sync) {
+    fn.glXWaitVideoSyncSGIFn = reinterpret_cast<glXWaitVideoSyncSGIProc>(
+        GetGLProcAddress("glXWaitVideoSyncSGI"));
+    DCHECK(fn.glXWaitVideoSyncSGIFn);
+  }
+
   if (g_debugBindingsInitialized)
     InitializeDebugBindings();
 }
diff --git a/ui/gl/gl_bindings_autogen_mock.cc b/ui/gl/gl_bindings_autogen_mock.cc
index f424696..185d809 100644
--- a/ui/gl/gl_bindings_autogen_mock.cc
+++ b/ui/gl/gl_bindings_autogen_mock.cc
@@ -479,12 +479,6 @@
 }
 
 void GL_BINDING_CALL
-MockGLInterface::Mock_glDeleteBuffersARB(GLsizei n, const GLuint* buffers) {
-  MakeFunctionUnique("glDeleteBuffersARB");
-  interface_->DeleteBuffersARB(n, buffers);
-}
-
-void GL_BINDING_CALL
 MockGLInterface::Mock_glDeleteFencesAPPLE(GLsizei n, const GLuint* fences) {
   MakeFunctionUnique("glDeleteFencesAPPLE");
   interface_->DeleteFencesAPPLE(n, fences);
@@ -915,12 +909,6 @@
 }
 
 void GL_BINDING_CALL
-MockGLInterface::Mock_glGenBuffersARB(GLsizei n, GLuint* buffers) {
-  MakeFunctionUnique("glGenBuffersARB");
-  interface_->GenBuffersARB(n, buffers);
-}
-
-void GL_BINDING_CALL
 MockGLInterface::Mock_glGenFencesAPPLE(GLsizei n, GLuint* fences) {
   MakeFunctionUnique("glGenFencesAPPLE");
   interface_->GenFencesAPPLE(n, fences);
@@ -1250,6 +1238,14 @@
   interface_->GetQueryObjecti64v(id, pname, params);
 }
 
+void GL_BINDING_CALL
+MockGLInterface::Mock_glGetQueryObjecti64vEXT(GLuint id,
+                                              GLenum pname,
+                                              GLint64* params) {
+  MakeFunctionUnique("glGetQueryObjecti64vEXT");
+  interface_->GetQueryObjecti64v(id, pname, params);
+}
+
 void GL_BINDING_CALL MockGLInterface::Mock_glGetQueryObjectiv(GLuint id,
                                                               GLenum pname,
                                                               GLint* params) {
@@ -2650,8 +2646,6 @@
     return reinterpret_cast<void*>(Mock_glCullFace);
   if (strcmp(name, "glDeleteBuffers") == 0)
     return reinterpret_cast<void*>(Mock_glDeleteBuffers);
-  if (strcmp(name, "glDeleteBuffersARB") == 0)
-    return reinterpret_cast<void*>(Mock_glDeleteBuffersARB);
   if (strcmp(name, "glDeleteFencesAPPLE") == 0)
     return reinterpret_cast<void*>(Mock_glDeleteFencesAPPLE);
   if (strcmp(name, "glDeleteFencesNV") == 0)
@@ -2776,8 +2770,6 @@
     return reinterpret_cast<void*>(Mock_glFrontFace);
   if (strcmp(name, "glGenBuffers") == 0)
     return reinterpret_cast<void*>(Mock_glGenBuffers);
-  if (strcmp(name, "glGenBuffersARB") == 0)
-    return reinterpret_cast<void*>(Mock_glGenBuffersARB);
   if (strcmp(name, "glGenFencesAPPLE") == 0)
     return reinterpret_cast<void*>(Mock_glGenFencesAPPLE);
   if (strcmp(name, "glGenFencesNV") == 0)
@@ -2871,6 +2863,8 @@
     return reinterpret_cast<void*>(Mock_glGetProgramiv);
   if (strcmp(name, "glGetQueryObjecti64v") == 0)
     return reinterpret_cast<void*>(Mock_glGetQueryObjecti64v);
+  if (strcmp(name, "glGetQueryObjecti64vEXT") == 0)
+    return reinterpret_cast<void*>(Mock_glGetQueryObjecti64vEXT);
   if (strcmp(name, "glGetQueryObjectiv") == 0)
     return reinterpret_cast<void*>(Mock_glGetQueryObjectiv);
   if (strcmp(name, "glGetQueryObjectivARB") == 0)
diff --git a/ui/gl/gl_bindings_autogen_mock.h b/ui/gl/gl_bindings_autogen_mock.h
index 2ed1095..4b1ff4b 100644
--- a/ui/gl/gl_bindings_autogen_mock.h
+++ b/ui/gl/gl_bindings_autogen_mock.h
@@ -184,8 +184,6 @@
 static void GL_BINDING_CALL
 Mock_glDeleteBuffers(GLsizei n, const GLuint* buffers);
 static void GL_BINDING_CALL
-Mock_glDeleteBuffersARB(GLsizei n, const GLuint* buffers);
-static void GL_BINDING_CALL
 Mock_glDeleteFencesAPPLE(GLsizei n, const GLuint* fences);
 static void GL_BINDING_CALL
 Mock_glDeleteFencesNV(GLsizei n, const GLuint* fences);
@@ -334,7 +332,6 @@
                                                            GLint layer);
 static void GL_BINDING_CALL Mock_glFrontFace(GLenum mode);
 static void GL_BINDING_CALL Mock_glGenBuffers(GLsizei n, GLuint* buffers);
-static void GL_BINDING_CALL Mock_glGenBuffersARB(GLsizei n, GLuint* buffers);
 static void GL_BINDING_CALL Mock_glGenFencesAPPLE(GLsizei n, GLuint* fences);
 static void GL_BINDING_CALL Mock_glGenFencesNV(GLsizei n, GLuint* fences);
 static void GL_BINDING_CALL
@@ -449,6 +446,8 @@
 static void GL_BINDING_CALL
 Mock_glGetQueryObjecti64v(GLuint id, GLenum pname, GLint64* params);
 static void GL_BINDING_CALL
+Mock_glGetQueryObjecti64vEXT(GLuint id, GLenum pname, GLint64* params);
+static void GL_BINDING_CALL
 Mock_glGetQueryObjectiv(GLuint id, GLenum pname, GLint* params);
 static void GL_BINDING_CALL
 Mock_glGetQueryObjectivARB(GLuint id, GLenum pname, GLint* params);
diff --git a/ui/gl/gl_bindings_autogen_osmesa.cc b/ui/gl/gl_bindings_autogen_osmesa.cc
index c0c3ed2..299f9f2 100644
--- a/ui/gl/gl_bindings_autogen_osmesa.cc
+++ b/ui/gl/gl_bindings_autogen_osmesa.cc
@@ -10,7 +10,7 @@
 
 #include <string>
 
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_enums.h"
@@ -46,13 +46,8 @@
       GetGLProcAddress("OSMesaMakeCurrent"));
   fn.OSMesaPixelStoreFn = reinterpret_cast<OSMesaPixelStoreProc>(
       GetGLProcAddress("OSMesaPixelStore"));
-}
-
-void DriverOSMESA::InitializeDynamicBindings(GLContext* context) {
-  DCHECK(context && context->IsCurrent(NULL));
-  const GLVersionInfo* ver = context->GetVersionInfo();
-  ALLOW_UNUSED_LOCAL(ver);
-  std::string extensions = context->GetExtensions() + " ";
+  std::string extensions(GetPlatformExtensions());
+  extensions += " ";
   ALLOW_UNUSED_LOCAL(extensions);
 
   if (g_debugBindingsInitialized)
diff --git a/ui/gl/gl_bindings_autogen_wgl.cc b/ui/gl/gl_bindings_autogen_wgl.cc
index a28aaf6..b70f929 100644
--- a/ui/gl/gl_bindings_autogen_wgl.cc
+++ b/ui/gl/gl_bindings_autogen_wgl.cc
@@ -10,7 +10,7 @@
 
 #include <string>
 
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_enums.h"
@@ -24,20 +24,17 @@
 DriverWGL g_driver_wgl;
 
 void DriverWGL::InitializeStaticBindings() {
-  fn.wglChoosePixelFormatARBFn = reinterpret_cast<wglChoosePixelFormatARBProc>(
-      GetGLProcAddress("wglChoosePixelFormatARB"));
+  fn.wglChoosePixelFormatARBFn = 0;
   fn.wglCopyContextFn =
       reinterpret_cast<wglCopyContextProc>(GetGLProcAddress("wglCopyContext"));
   fn.wglCreateContextFn = reinterpret_cast<wglCreateContextProc>(
       GetGLProcAddress("wglCreateContext"));
   fn.wglCreateLayerContextFn = reinterpret_cast<wglCreateLayerContextProc>(
       GetGLProcAddress("wglCreateLayerContext"));
-  fn.wglCreatePbufferARBFn = reinterpret_cast<wglCreatePbufferARBProc>(
-      GetGLProcAddress("wglCreatePbufferARB"));
+  fn.wglCreatePbufferARBFn = 0;
   fn.wglDeleteContextFn = reinterpret_cast<wglDeleteContextProc>(
       GetGLProcAddress("wglDeleteContext"));
-  fn.wglDestroyPbufferARBFn = reinterpret_cast<wglDestroyPbufferARBProc>(
-      GetGLProcAddress("wglDestroyPbufferARB"));
+  fn.wglDestroyPbufferARBFn = 0;
   fn.wglGetCurrentContextFn = reinterpret_cast<wglGetCurrentContextProc>(
       GetGLProcAddress("wglGetCurrentContext"));
   fn.wglGetCurrentDCFn = reinterpret_cast<wglGetCurrentDCProc>(
@@ -48,27 +45,18 @@
   fn.wglGetExtensionsStringEXTFn =
       reinterpret_cast<wglGetExtensionsStringEXTProc>(
           GetGLProcAddress("wglGetExtensionsStringEXT"));
-  fn.wglGetPbufferDCARBFn = reinterpret_cast<wglGetPbufferDCARBProc>(
-      GetGLProcAddress("wglGetPbufferDCARB"));
+  fn.wglGetPbufferDCARBFn = 0;
   fn.wglMakeCurrentFn =
       reinterpret_cast<wglMakeCurrentProc>(GetGLProcAddress("wglMakeCurrent"));
-  fn.wglQueryPbufferARBFn = reinterpret_cast<wglQueryPbufferARBProc>(
-      GetGLProcAddress("wglQueryPbufferARB"));
-  fn.wglReleasePbufferDCARBFn = reinterpret_cast<wglReleasePbufferDCARBProc>(
-      GetGLProcAddress("wglReleasePbufferDCARB"));
+  fn.wglQueryPbufferARBFn = 0;
+  fn.wglReleasePbufferDCARBFn = 0;
   fn.wglShareListsFn =
       reinterpret_cast<wglShareListsProc>(GetGLProcAddress("wglShareLists"));
-  fn.wglSwapIntervalEXTFn = reinterpret_cast<wglSwapIntervalEXTProc>(
-      GetGLProcAddress("wglSwapIntervalEXT"));
+  fn.wglSwapIntervalEXTFn = 0;
   fn.wglSwapLayerBuffersFn = reinterpret_cast<wglSwapLayerBuffersProc>(
       GetGLProcAddress("wglSwapLayerBuffers"));
-}
-
-void DriverWGL::InitializeDynamicBindings(GLContext* context) {
-  DCHECK(context && context->IsCurrent(NULL));
-  const GLVersionInfo* ver = context->GetVersionInfo();
-  ALLOW_UNUSED_LOCAL(ver);
-  std::string extensions = context->GetExtensions() + " ";
+  std::string extensions(GetPlatformExtensions());
+  extensions += " ";
   ALLOW_UNUSED_LOCAL(extensions);
 
   ext.b_WGL_ARB_extensions_string =
@@ -82,6 +70,56 @@
   ext.b_WGL_EXT_swap_control =
       extensions.find("WGL_EXT_swap_control ") != std::string::npos;
 
+  debug_fn.wglChoosePixelFormatARBFn = 0;
+  if (ext.b_WGL_ARB_pixel_format) {
+    fn.wglChoosePixelFormatARBFn =
+        reinterpret_cast<wglChoosePixelFormatARBProc>(
+            GetGLProcAddress("wglChoosePixelFormatARB"));
+    DCHECK(fn.wglChoosePixelFormatARBFn);
+  }
+
+  debug_fn.wglCreatePbufferARBFn = 0;
+  if (ext.b_WGL_ARB_pbuffer) {
+    fn.wglCreatePbufferARBFn = reinterpret_cast<wglCreatePbufferARBProc>(
+        GetGLProcAddress("wglCreatePbufferARB"));
+    DCHECK(fn.wglCreatePbufferARBFn);
+  }
+
+  debug_fn.wglDestroyPbufferARBFn = 0;
+  if (ext.b_WGL_ARB_pbuffer) {
+    fn.wglDestroyPbufferARBFn = reinterpret_cast<wglDestroyPbufferARBProc>(
+        GetGLProcAddress("wglDestroyPbufferARB"));
+    DCHECK(fn.wglDestroyPbufferARBFn);
+  }
+
+  debug_fn.wglGetPbufferDCARBFn = 0;
+  if (ext.b_WGL_ARB_pbuffer) {
+    fn.wglGetPbufferDCARBFn = reinterpret_cast<wglGetPbufferDCARBProc>(
+        GetGLProcAddress("wglGetPbufferDCARB"));
+    DCHECK(fn.wglGetPbufferDCARBFn);
+  }
+
+  debug_fn.wglQueryPbufferARBFn = 0;
+  if (ext.b_WGL_ARB_pbuffer) {
+    fn.wglQueryPbufferARBFn = reinterpret_cast<wglQueryPbufferARBProc>(
+        GetGLProcAddress("wglQueryPbufferARB"));
+    DCHECK(fn.wglQueryPbufferARBFn);
+  }
+
+  debug_fn.wglReleasePbufferDCARBFn = 0;
+  if (ext.b_WGL_ARB_pbuffer) {
+    fn.wglReleasePbufferDCARBFn = reinterpret_cast<wglReleasePbufferDCARBProc>(
+        GetGLProcAddress("wglReleasePbufferDCARB"));
+    DCHECK(fn.wglReleasePbufferDCARBFn);
+  }
+
+  debug_fn.wglSwapIntervalEXTFn = 0;
+  if (ext.b_WGL_EXT_swap_control) {
+    fn.wglSwapIntervalEXTFn = reinterpret_cast<wglSwapIntervalEXTProc>(
+        GetGLProcAddress("wglSwapIntervalEXT"));
+    DCHECK(fn.wglSwapIntervalEXTFn);
+  }
+
   if (g_debugBindingsInitialized)
     InitializeDebugBindings();
 }
diff --git a/ui/gl/gl_context_cgl.cc b/ui/gl/gl_context_cgl.cc
index 723e97e..d4bc780 100644
--- a/ui/gl/gl_context_cgl.cc
+++ b/ui/gl/gl_context_cgl.cc
@@ -8,9 +8,9 @@
 #include <OpenGL/CGLTypes.h>
 #include <vector>
 
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_implementation.h"
 #include "ui/gl/gl_surface.h"
diff --git a/ui/gl/gl_context_egl.cc b/ui/gl/gl_context_egl.cc
index 076de98..5fa2c44 100644
--- a/ui/gl/gl_context_egl.cc
+++ b/ui/gl/gl_context_egl.cc
@@ -4,9 +4,9 @@
 
 #include "ui/gl/gl_context_egl.h"
 
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "third_party/khronos/EGL/egl.h"
 #include "third_party/khronos/EGL/eglext.h"
diff --git a/ui/gl/gl_context_glx.cc b/ui/gl/gl_context_glx.cc
index a16daf3..e5b1cc1 100644
--- a/ui/gl/gl_context_glx.cc
+++ b/ui/gl/gl_context_glx.cc
@@ -8,9 +8,9 @@
 
 #include "ui/gl/gl_context_glx.h"
 
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/trace_event/trace_event.h"
 #include "ui/gl/GL/glextchromium.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_implementation.h"
diff --git a/ui/gl/gl_context_mac.mm b/ui/gl/gl_context_mac.mm
index 8cd58b1..aa5516f 100644
--- a/ui/gl/gl_context_mac.mm
+++ b/ui/gl/gl_context_mac.mm
@@ -3,9 +3,9 @@
 // found in the LICENSE file.
 
 #include "base/basictypes.h"
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_context_cgl.h"
 #include "ui/gl/gl_context_osmesa.h"
 #include "ui/gl/gl_context_stub.h"
diff --git a/ui/gl/gl_context_wgl.cc b/ui/gl/gl_context_wgl.cc
index 2f34cd3..fa7f706 100644
--- a/ui/gl/gl_context_wgl.cc
+++ b/ui/gl/gl_context_wgl.cc
@@ -6,8 +6,8 @@
 
 #include "ui/gl/gl_context_wgl.h"
 
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
+#include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_implementation.h"
 #include "ui/gl/gl_surface_wgl.h"
diff --git a/ui/gl/gl_context_win.cc b/ui/gl/gl_context_win.cc
index a69fcd2..dc2e20c 100644
--- a/ui/gl/gl_context_win.cc
+++ b/ui/gl/gl_context_win.cc
@@ -4,9 +4,9 @@
 
 #include "ui/gl/gl_context.h"
 
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context_egl.h"
 #include "ui/gl/gl_context_osmesa.h"
diff --git a/ui/gl/gl_context_x11.cc b/ui/gl/gl_context_x11.cc
index 7aff48c..b17364d 100644
--- a/ui/gl/gl_context_x11.cc
+++ b/ui/gl/gl_context_x11.cc
@@ -4,9 +4,9 @@
 
 #include "ui/gl/gl_context.h"
 
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context_egl.h"
 #include "ui/gl/gl_context_glx.h"
diff --git a/ui/gl/gl_egl_api_implementation.cc b/ui/gl/gl_egl_api_implementation.cc
index b3b55b8..53a1bf6 100644
--- a/ui/gl/gl_egl_api_implementation.cc
+++ b/ui/gl/gl_egl_api_implementation.cc
@@ -10,16 +10,12 @@
 RealEGLApi* g_real_egl;
 
 void InitializeStaticGLBindingsEGL() {
-  g_driver_egl.InitializeStaticBindings();
   if (!g_real_egl) {
     g_real_egl = new RealEGLApi();
   }
   g_real_egl->Initialize(&g_driver_egl);
   g_current_egl_context = g_real_egl;
-}
-
-void InitializeDynamicGLBindingsEGL(GLContext* context) {
-  g_driver_egl.InitializeDynamicBindings(context);
+  g_driver_egl.InitializeStaticBindings();
 }
 
 void InitializeDebugGLBindingsEGL() {
diff --git a/ui/gl/gl_egl_api_implementation.h b/ui/gl/gl_egl_api_implementation.h
index e58860c..a2ff28d 100644
--- a/ui/gl/gl_egl_api_implementation.h
+++ b/ui/gl/gl_egl_api_implementation.h
@@ -15,7 +15,6 @@
 struct GLWindowSystemBindingInfo;
 
 void InitializeStaticGLBindingsEGL();
-void InitializeDynamicGLBindingsEGL(GLContext* context);
 void InitializeDebugGLBindingsEGL();
 void ClearGLBindingsEGL();
 bool GetGLWindowSystemBindingInfoEGL(GLWindowSystemBindingInfo* info);
diff --git a/ui/gl/gl_gl_api_implementation.cc b/ui/gl/gl_gl_api_implementation.cc
index 3b8c534..fada5e3 100644
--- a/ui/gl/gl_gl_api_implementation.cc
+++ b/ui/gl/gl_gl_api_implementation.cc
@@ -85,7 +85,7 @@
   }
 
   if (type == GL_FLOAT && gfx::g_version_info->is_angle &&
-      gfx::g_version_info->is_es2) {
+      gfx::g_version_info->is_es && gfx::g_version_info->major_version == 2) {
     // It's possible that the texture is using a sized internal format, and
     // ANGLE exposing GLES2 API doesn't support those.
     // TODO(oetuaho@nvidia.com): Remove these conversions once ANGLE has the
diff --git a/ui/gl/gl_glx_api_implementation.cc b/ui/gl/gl_glx_api_implementation.cc
index 0392c39..cd38fd8 100644
--- a/ui/gl/gl_glx_api_implementation.cc
+++ b/ui/gl/gl_glx_api_implementation.cc
@@ -18,10 +18,6 @@
   g_current_glx_context = g_real_glx;
 }
 
-void InitializeDynamicGLBindingsGLX(GLContext* context) {
-  g_driver_glx.InitializeDynamicBindings(context);
-}
-
 void InitializeDebugGLBindingsGLX() {
   g_driver_glx.InitializeDebugBindings();
 }
diff --git a/ui/gl/gl_glx_api_implementation.h b/ui/gl/gl_glx_api_implementation.h
index 30a70cf..c83f478 100644
--- a/ui/gl/gl_glx_api_implementation.h
+++ b/ui/gl/gl_glx_api_implementation.h
@@ -15,7 +15,6 @@
 struct GLWindowSystemBindingInfo;
 
 void InitializeStaticGLBindingsGLX();
-void InitializeDynamicGLBindingsGLX(GLContext* context);
 void InitializeDebugGLBindingsGLX();
 void ClearGLBindingsGLX();
 bool GetGLWindowSystemBindingInfoGLX(GLWindowSystemBindingInfo* info);
diff --git a/ui/gl/gl_image_memory.cc b/ui/gl/gl_image_memory.cc
index 5e23d30..e92cc1f 100644
--- a/ui/gl/gl_image_memory.cc
+++ b/ui/gl/gl_image_memory.cc
@@ -4,8 +4,8 @@
 
 #include "ui/gl/gl_image_memory.h"
 
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
+#include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/scoped_binders.h"
 
diff --git a/ui/gl/gl_image_surface_texture.cc b/ui/gl/gl_image_surface_texture.cc
index 27c9f64..a321c4d 100644
--- a/ui/gl/gl_image_surface_texture.cc
+++ b/ui/gl/gl_image_surface_texture.cc
@@ -4,7 +4,7 @@
 
 #include "ui/gl/gl_image_surface_texture.h"
 
-#include "base/debug/trace_event.h"
+#include "base/trace_event/trace_event.h"
 #include "ui/gl/android/surface_texture.h"
 
 namespace gfx {
diff --git a/ui/gl/gl_implementation_android.cc b/ui/gl/gl_implementation_android.cc
index 1486a6d..176cf28 100644
--- a/ui/gl/gl_implementation_android.cc
+++ b/ui/gl/gl_implementation_android.cc
@@ -99,11 +99,6 @@
   switch (implementation) {
     case kGLImplementationEGLGLES2:
       InitializeDynamicGLBindingsGL(context);
-      InitializeDynamicGLBindingsEGL(context);
-      break;
-    case kGLImplementationOSMesaGL:
-      InitializeDynamicGLBindingsGL(context);
-      InitializeDynamicGLBindingsOSMESA(context);
       break;
     case kGLImplementationMockGL:
       if (!context) {
diff --git a/ui/gl/gl_implementation_mac.cc b/ui/gl/gl_implementation_mac.cc
index 1011406..d818f05 100644
--- a/ui/gl/gl_implementation_mac.cc
+++ b/ui/gl/gl_implementation_mac.cc
@@ -112,9 +112,6 @@
     GLContext* context) {
   switch (implementation) {
     case kGLImplementationOSMesaGL:
-      InitializeDynamicGLBindingsGL(context);
-      InitializeDynamicGLBindingsOSMESA(context);
-      break;
     case kGLImplementationDesktopGL:
     case kGLImplementationAppleGL:
       InitializeDynamicGLBindingsGL(context);
diff --git a/ui/gl/gl_implementation_ozone.cc b/ui/gl/gl_implementation_ozone.cc
index 43b3b04..2a85720 100644
--- a/ui/gl/gl_implementation_ozone.cc
+++ b/ui/gl/gl_implementation_ozone.cc
@@ -75,12 +75,8 @@
                                  GLContext* context) {
   switch (implementation) {
     case kGLImplementationOSMesaGL:
-      InitializeDynamicGLBindingsGL(context);
-      InitializeDynamicGLBindingsOSMESA(context);
-      break;
     case kGLImplementationEGLGLES2:
       InitializeDynamicGLBindingsGL(context);
-      InitializeDynamicGLBindingsEGL(context);
       break;
     case kGLImplementationMockGL:
       if (!context) {
diff --git a/ui/gl/gl_implementation_win.cc b/ui/gl/gl_implementation_win.cc
index ff7d1d1..477f5a5 100644
--- a/ui/gl/gl_implementation_win.cc
+++ b/ui/gl/gl_implementation_win.cc
@@ -8,13 +8,13 @@
 #include "base/base_paths.h"
 #include "base/bind.h"
 #include "base/command_line.h"
-#include "base/debug/trace_event.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
 #include "base/native_library.h"
 #include "base/path_service.h"
 #include "base/strings/stringprintf.h"
 #include "base/threading/thread_restrictions.h"
+#include "base/trace_event/trace_event.h"
 #include "base/win/windows_version.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context_stub_with_extensions.h"
@@ -320,16 +320,9 @@
     GLContext* context) {
   switch (implementation) {
     case kGLImplementationOSMesaGL:
-      InitializeDynamicGLBindingsGL(context);
-      InitializeDynamicGLBindingsOSMESA(context);
-      break;
     case kGLImplementationEGLGLES2:
-      InitializeDynamicGLBindingsGL(context);
-      InitializeDynamicGLBindingsEGL(context);
-      break;
     case kGLImplementationDesktopGL:
       InitializeDynamicGLBindingsGL(context);
-      InitializeDynamicGLBindingsWGL(context);
       break;
     case kGLImplementationMockGL:
       if (!context) {
diff --git a/ui/gl/gl_implementation_x11.cc b/ui/gl/gl_implementation_x11.cc
index 28c1a3e..b8a7246 100644
--- a/ui/gl/gl_implementation_x11.cc
+++ b/ui/gl/gl_implementation_x11.cc
@@ -151,16 +151,9 @@
     GLContext* context) {
   switch (implementation) {
     case kGLImplementationOSMesaGL:
-      InitializeDynamicGLBindingsGL(context);
-      InitializeDynamicGLBindingsOSMESA(context);
-      break;
-    case kGLImplementationDesktopGL:
-      InitializeDynamicGLBindingsGL(context);
-      InitializeDynamicGLBindingsGLX(context);
-      break;
+   case kGLImplementationDesktopGL:
     case kGLImplementationEGLGLES2:
       InitializeDynamicGLBindingsGL(context);
-      InitializeDynamicGLBindingsEGL(context);
       break;
     case kGLImplementationMockGL:
       if (!context) {
diff --git a/ui/gl/gl_osmesa_api_implementation.cc b/ui/gl/gl_osmesa_api_implementation.cc
index f23c299..4fa33c6 100644
--- a/ui/gl/gl_osmesa_api_implementation.cc
+++ b/ui/gl/gl_osmesa_api_implementation.cc
@@ -17,10 +17,6 @@
   g_current_osmesa_context = g_real_osmesa;
 }
 
-void InitializeDynamicGLBindingsOSMESA(GLContext* context) {
-  g_driver_osmesa.InitializeDynamicBindings(context);
-}
-
 void InitializeDebugGLBindingsOSMESA() {
   g_driver_osmesa.InitializeDebugBindings();
 }
diff --git a/ui/gl/gl_osmesa_api_implementation.h b/ui/gl/gl_osmesa_api_implementation.h
index 9d4dbe1..c740e1a 100644
--- a/ui/gl/gl_osmesa_api_implementation.h
+++ b/ui/gl/gl_osmesa_api_implementation.h
@@ -14,7 +14,6 @@
 class GLContext;
 
 void InitializeStaticGLBindingsOSMESA();
-void InitializeDynamicGLBindingsOSMESA(GLContext* context);
 void InitializeDebugGLBindingsOSMESA();
 void ClearGLBindingsOSMESA();
 
diff --git a/ui/gl/gl_surface.cc b/ui/gl/gl_surface.cc
index 1ae458a..a827503 100644
--- a/ui/gl/gl_surface.cc
+++ b/ui/gl/gl_surface.cc
@@ -8,10 +8,10 @@
 #include <vector>
 
 #include "base/command_line.h"
-#include "base/debug/trace_event.h"
 #include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/threading/thread_local.h"
+#include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_implementation.h"
 #include "ui/gl/gl_switches.h"
diff --git a/ui/gl/gl_surface_egl.cc b/ui/gl/gl_surface_egl.cc
index 02c19e8..98a3a23 100644
--- a/ui/gl/gl_surface_egl.cc
+++ b/ui/gl/gl_surface_egl.cc
@@ -9,10 +9,10 @@
 #endif
 
 #include "base/command_line.h"
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop.h"
+#include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gl/egl_util.h"
diff --git a/ui/gl/gl_surface_egl.h b/ui/gl/gl_surface_egl.h
index b05f9bf..21669d7 100644
--- a/ui/gl/gl_surface_egl.h
+++ b/ui/gl/gl_surface_egl.h
@@ -49,6 +49,7 @@
 
  private:
 #if defined(OS_WIN)
+  friend struct DriverEGL;
   static EGLDisplay GetPlatformDisplay(EGLNativeDisplayType native_display);
 #endif
 
diff --git a/ui/gl/gl_surface_glx.cc b/ui/gl/gl_surface_glx.cc
index de888e5..5a3eafd 100644
--- a/ui/gl/gl_surface_glx.cc
+++ b/ui/gl/gl_surface_glx.cc
@@ -9,7 +9,6 @@
 #include "ui/gl/gl_surface_glx.h"
 
 #include "base/basictypes.h"
-#include "base/debug/trace_event.h"
 #include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
@@ -22,6 +21,7 @@
 #include "base/threading/non_thread_safe.h"
 #include "base/threading/thread.h"
 #include "base/time/time.h"
+#include "base/trace_event/trace_event.h"
 #include "ui/events/platform/platform_event_source.h"
 #include "ui/gfx/x/x11_connection.h"
 #include "ui/gfx/x/x11_types.h"
diff --git a/ui/gl/gl_surface_mac.cc b/ui/gl/gl_surface_mac.cc
index 4b46244..4ba560d 100644
--- a/ui/gl/gl_surface_mac.cc
+++ b/ui/gl/gl_surface_mac.cc
@@ -7,9 +7,9 @@
 #include <OpenGL/CGLRenderers.h>
 
 #include "base/basictypes.h"
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_implementation.h"
diff --git a/ui/gl/gl_surface_wgl.cc b/ui/gl/gl_surface_wgl.cc
index 66cef26..698539f 100644
--- a/ui/gl/gl_surface_wgl.cc
+++ b/ui/gl/gl_surface_wgl.cc
@@ -4,9 +4,9 @@
 
 #include "ui/gl/gl_surface_wgl.h"
 
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_gl_api_implementation.h"
 #include "ui/gl/gl_wgl_api_implementation.h"
diff --git a/ui/gl/gl_surface_win.cc b/ui/gl/gl_surface_win.cc
index 0e10bac..1e509c9 100644
--- a/ui/gl/gl_surface_win.cc
+++ b/ui/gl/gl_surface_win.cc
@@ -7,9 +7,9 @@
 #include <dwmapi.h>
 
 #include "base/command_line.h"
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/trace_event/trace_event.h"
 #include "base/win/windows_version.h"
 #include "ui/gfx/frame_time.h"
 #include "ui/gfx/native_widget_types.h"
diff --git a/ui/gl/gl_surface_x11.cc b/ui/gl/gl_surface_x11.cc
index 895eb93..a384147 100644
--- a/ui/gl/gl_surface_x11.cc
+++ b/ui/gl/gl_surface_x11.cc
@@ -4,10 +4,10 @@
 
 #include "ui/gl/gl_surface.h"
 
-#include "base/debug/trace_event.h"
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/message_loop/message_loop.h"
+#include "base/trace_event/trace_event.h"
 #include "ui/gfx/native_widget_types.h"
 #include "ui/gfx/x/x11_types.h"
 #include "ui/gl/gl_bindings.h"
diff --git a/ui/gl/gl_version_info.cc b/ui/gl/gl_version_info.cc
index 0d052b5..e2aa0de 100644
--- a/ui/gl/gl_version_info.cc
+++ b/ui/gl/gl_version_info.cc
@@ -4,35 +4,35 @@
 
 #include "ui/gl/gl_version_info.h"
 
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_tokenizer.h"
 #include "base/strings/string_util.h"
 
 namespace gfx {
 
 GLVersionInfo::GLVersionInfo(const char* version_str, const char* renderer_str)
     : is_es(false),
-      is_es1(false),
-      is_es2(false),
-      is_es3(false),
-      is_gl1(false),
-      is_gl2(false),
-      is_gl3(false),
-      is_gl4(false),
-      is_angle(false) {
+      is_angle(false),
+      major_version(0),
+      minor_version(0),
+      is_es3(false) {
   if (version_str) {
     std::string lstr(base::StringToLowerASCII(std::string(version_str)));
-    is_es = (lstr.substr(0, 9) == "opengl es");
-    if (is_es) {
-      is_es1 = (lstr.substr(9, 2) == "-c" && lstr.substr(13, 2) == "1.");
-      is_es2 = (lstr.substr(9, 3) == " 2.");
-      is_es3 = (lstr.substr(9, 3) == " 3.");
-    } else {
-      is_gl2 = (lstr.substr(0, 2) == "2.");
-      is_gl3 = (lstr.substr(0, 2) == "3.");
-      is_gl4 = (lstr.substr(0, 2) == "4.");
-      // In early GL versions, GetString output format is implementation
-      // dependent.
-      is_gl1 = !is_gl2 && !is_gl3 && !is_gl4;
+    is_es = (lstr.length() > 12) && (lstr.substr(0, 9) == "opengl es");
+    if (is_es)
+      lstr = lstr.substr(10, 3);
+    base::StringTokenizer tokenizer(lstr.begin(), lstr.end(), ".");
+    unsigned major, minor;
+    if (tokenizer.GetNext() &&
+        base::StringToUint(tokenizer.token_piece(), &major)) {
+      major_version = major;
+      if (tokenizer.GetNext() &&
+          base::StringToUint(tokenizer.token_piece(), &minor)) {
+        minor_version = minor;
+      }
     }
+    if (is_es && major_version == 3)
+      is_es3 = true;
   }
   if (renderer_str) {
     is_angle = StartsWithASCII(renderer_str, "ANGLE", true);
diff --git a/ui/gl/gl_version_info.h b/ui/gl/gl_version_info.h
index 21ca07a..d8f2730 100644
--- a/ui/gl/gl_version_info.h
+++ b/ui/gl/gl_version_info.h
@@ -14,19 +14,21 @@
 struct GL_EXPORT GLVersionInfo {
   GLVersionInfo(const char* version_str, const char* renderer_str);
 
-  // New flags, such as is_gl4_4 could be introduced as needed.
-  // For now, this level of granularity is enough.
+  bool IsAtLeastGL(unsigned major, unsigned minor) const {
+    return !is_es && (major_version > major ||
+                      (major_version == major && minor_version >= minor));
+  }
+
+  bool IsAtLeastGLES(unsigned major, unsigned minor) const {
+    return is_es && (major_version > major ||
+                     (major_version == major && minor_version >= minor));
+  }
+
   bool is_es;
-  bool is_es1;
-  bool is_es2;
-  bool is_es3;
-
-  bool is_gl1;
-  bool is_gl2;
-  bool is_gl3;
-  bool is_gl4;
-
   bool is_angle;
+  unsigned major_version;
+  unsigned minor_version;
+  bool is_es3;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(GLVersionInfo);
diff --git a/ui/gl/gl_wgl_api_implementation.cc b/ui/gl/gl_wgl_api_implementation.cc
index 889a53f..3b92d98 100644
--- a/ui/gl/gl_wgl_api_implementation.cc
+++ b/ui/gl/gl_wgl_api_implementation.cc
@@ -18,10 +18,6 @@
   g_current_wgl_context = g_real_wgl;
 }
 
-void InitializeDynamicGLBindingsWGL(GLContext* context) {
-  g_driver_wgl.InitializeDynamicBindings(context);
-}
-
 void InitializeDebugGLBindingsWGL() {
   g_driver_wgl.InitializeDebugBindings();
 }
diff --git a/ui/gl/gl_wgl_api_implementation.h b/ui/gl/gl_wgl_api_implementation.h
index 07a5275..dbef51a 100644
--- a/ui/gl/gl_wgl_api_implementation.h
+++ b/ui/gl/gl_wgl_api_implementation.h
@@ -15,7 +15,6 @@
 struct GLWindowSystemBindingInfo;
 
 void InitializeStaticGLBindingsWGL();
-void InitializeDynamicGLBindingsWGL(GLContext* context);
 void InitializeDebugGLBindingsWGL();
 void ClearGLBindingsWGL();
 bool GetGLWindowSystemBindingInfoWGL(GLWindowSystemBindingInfo* info);
