am 97f6618f: am 11e71558: Merge "Fixed data offset at parsing IPMP Descriptors"

* commit '97f6618fb3eae850945decda725151baa9388aca':
  Fixed data offset at parsing IPMP Descriptors
diff --git a/cmds/screenrecord/Android.mk b/cmds/screenrecord/Android.mk
index b4a5947..d77fdb6 100644
--- a/cmds/screenrecord/Android.mk
+++ b/cmds/screenrecord/Android.mk
@@ -18,10 +18,14 @@
 
 LOCAL_SRC_FILES := \
 	screenrecord.cpp \
+	EglWindow.cpp \
+	TextRenderer.cpp \
+	Overlay.cpp \
+	Program.cpp
 
 LOCAL_SHARED_LIBRARIES := \
 	libstagefright libmedia libutils libbinder libstagefright_foundation \
-	libjpeg libgui libcutils liblog
+	libjpeg libgui libcutils liblog libEGL libGLESv2
 
 LOCAL_C_INCLUDES := \
 	frameworks/av/media/libstagefright \
@@ -30,6 +34,7 @@
 	external/jpeg
 
 LOCAL_CFLAGS += -Wno-multichar
+#LOCAL_CFLAGS += -UNDEBUG
 
 LOCAL_MODULE_TAGS := optional
 
diff --git a/cmds/screenrecord/EglWindow.cpp b/cmds/screenrecord/EglWindow.cpp
new file mode 100644
index 0000000..aa0517f
--- /dev/null
+++ b/cmds/screenrecord/EglWindow.cpp
@@ -0,0 +1,146 @@
+/*
+ * Copyright 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "ScreenRecord"
+//#define LOG_NDEBUG 0
+#include <utils/Log.h>
+
+#define EGL_EGLEXT_PROTOTYPES
+
+#include <gui/BufferQueue.h>
+#include <gui/GraphicBufferAlloc.h>
+#include <gui/Surface.h>
+
+#include "EglWindow.h"
+
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+
+#include <assert.h>
+
+using namespace android;
+
+
+status_t EglWindow::createWindow(const sp<IGraphicBufferProducer>& surface) {
+    status_t err = eglSetupContext();
+    if (err != NO_ERROR) {
+        return err;
+    }
+
+    surface->query(NATIVE_WINDOW_WIDTH, &mWidth);
+    surface->query(NATIVE_WINDOW_HEIGHT, &mHeight);
+
+    // Output side (EGL surface to draw on).
+    sp<ANativeWindow> anw = new Surface(surface);
+    mEglSurface = eglCreateWindowSurface(mEglDisplay, mEglConfig, anw.get(),
+            NULL);
+    if (mEglSurface == EGL_NO_SURFACE) {
+        ALOGE("eglCreateWindowSurface error: %#x", eglGetError());
+        eglRelease();
+        return UNKNOWN_ERROR;
+    }
+
+    return NO_ERROR;
+}
+
+status_t EglWindow::makeCurrent() const {
+    if (!eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface, mEglContext)) {
+        ALOGE("eglMakeCurrent failed: %#x", eglGetError());
+        return UNKNOWN_ERROR;
+    }
+    return NO_ERROR;
+}
+
+status_t EglWindow::eglSetupContext() {
+    EGLBoolean result;
+
+    mEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
+    if (mEglDisplay == EGL_NO_DISPLAY) {
+        ALOGE("eglGetDisplay failed: %#x", eglGetError());
+        return UNKNOWN_ERROR;
+    }
+
+    EGLint majorVersion, minorVersion;
+    result = eglInitialize(mEglDisplay, &majorVersion, &minorVersion);
+    if (result != EGL_TRUE) {
+        ALOGE("eglInitialize failed: %#x", eglGetError());
+        return UNKNOWN_ERROR;
+    }
+    ALOGV("Initialized EGL v%d.%d", majorVersion, minorVersion);
+
+    EGLint numConfigs = 0;
+    EGLint configAttribs[] = {
+        EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
+        EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
+        EGL_RECORDABLE_ANDROID, 1,
+        EGL_RED_SIZE, 8,
+        EGL_GREEN_SIZE, 8,
+        EGL_BLUE_SIZE, 8,
+        EGL_NONE
+    };
+    result = eglChooseConfig(mEglDisplay, configAttribs, &mEglConfig, 1,
+            &numConfigs);
+    if (result != EGL_TRUE) {
+        ALOGE("eglChooseConfig error: %#x", eglGetError());
+        return UNKNOWN_ERROR;
+    }
+
+    EGLint contextAttribs[] = {
+        EGL_CONTEXT_CLIENT_VERSION, 2,
+        EGL_NONE
+    };
+    mEglContext = eglCreateContext(mEglDisplay, mEglConfig, EGL_NO_CONTEXT,
+            contextAttribs);
+    if (mEglContext == EGL_NO_CONTEXT) {
+        ALOGE("eglCreateContext error: %#x", eglGetError());
+        return UNKNOWN_ERROR;
+    }
+
+    return NO_ERROR;
+}
+
+void EglWindow::eglRelease() {
+    ALOGV("EglWindow::eglRelease");
+    if (mEglDisplay != EGL_NO_DISPLAY) {
+        eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE,
+                EGL_NO_CONTEXT);
+
+        if (mEglContext != EGL_NO_CONTEXT) {
+            eglDestroyContext(mEglDisplay, mEglContext);
+        }
+
+        if (mEglSurface != EGL_NO_SURFACE) {
+            eglDestroySurface(mEglDisplay, mEglSurface);
+        }
+    }
+
+    mEglDisplay = EGL_NO_DISPLAY;
+    mEglContext = EGL_NO_CONTEXT;
+    mEglSurface = EGL_NO_SURFACE;
+    mEglConfig = NULL;
+
+    eglReleaseThread();
+}
+
+// Sets the presentation time on the current EGL buffer.
+void EglWindow::presentationTime(nsecs_t whenNsec) const {
+    eglPresentationTimeANDROID(mEglDisplay, mEglSurface, whenNsec);
+}
+
+// Swaps the EGL buffer.
+void EglWindow::swapBuffers() const {
+    eglSwapBuffers(mEglDisplay, mEglSurface);
+}
diff --git a/cmds/screenrecord/EglWindow.h b/cmds/screenrecord/EglWindow.h
new file mode 100644
index 0000000..02a2efc
--- /dev/null
+++ b/cmds/screenrecord/EglWindow.h
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SCREENRECORD_EGL_WINDOW_H
+#define SCREENRECORD_EGL_WINDOW_H
+
+#include <gui/BufferQueue.h>
+#include <utils/Errors.h>
+
+#include <EGL/egl.h>
+
+namespace android {
+
+/*
+ * Wraps EGL display, context, surface, config for a window surface.
+ *
+ * Not thread safe.
+ */
+class EglWindow {
+public:
+    EglWindow() :
+        mEglDisplay(EGL_NO_DISPLAY),
+        mEglContext(EGL_NO_CONTEXT),
+        mEglSurface(EGL_NO_SURFACE),
+        mEglConfig(NULL),
+        mWidth(0),
+        mHeight(0)
+        {}
+    ~EglWindow() { eglRelease(); }
+
+    // Creates an EGL window for the supplied surface.
+    status_t createWindow(const sp<IGraphicBufferProducer>& surface);
+
+    // Return width and height values (obtained from IGBP).
+    int getWidth() const { return mWidth; }
+    int getHeight() const { return mHeight; }
+
+    // Release anything we created.
+    void release() { eglRelease(); }
+
+    // Make this context current.
+    status_t makeCurrent() const;
+
+    // Sets the presentation time on the current EGL buffer.
+    void presentationTime(nsecs_t whenNsec) const;
+
+    // Swaps the EGL buffer.
+    void swapBuffers() const;
+
+private:
+    EglWindow(const EglWindow&);
+    EglWindow& operator=(const EglWindow&);
+
+    // Init display, create config and context.
+    status_t eglSetupContext();
+    void eglRelease();
+
+    // Basic EGL goodies.
+    EGLDisplay mEglDisplay;
+    EGLContext mEglContext;
+    EGLSurface mEglSurface;
+    EGLConfig mEglConfig;
+
+    // Surface dimensions.
+    int mWidth;
+    int mHeight;
+};
+
+}; // namespace android
+
+#endif /*SCREENRECORD_EGL_WINDOW_H*/
diff --git a/cmds/screenrecord/FontBitmap.h b/cmds/screenrecord/FontBitmap.h
new file mode 100644
index 0000000..2b94f35
--- /dev/null
+++ b/cmds/screenrecord/FontBitmap.h
@@ -0,0 +1,6571 @@
+// auto-generated from Android default system font at 24pts
+class FontBitmap {
+public:
+    static const uint32_t width = 256;
+    static const uint32_t height = 204;
+    static const uint32_t numGlyphs = 95;
+    static const uint32_t firstGlyphChar = 32;
+    static const uint32_t maxGlyphHeight = 34;
+    static const uint32_t outlineWidth = 1;
+    static const uint8_t pixels[];
+    static const uint16_t yoffset[];
+    static const uint16_t glyphWidth[];
+};
+const uint8_t FontBitmap::pixels[] = {
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x64, 0xca, 0xd2,
+    0xb4, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0xe, 0x40, 0x68, 0x62, 0x4a,
+    0x4a, 0x6a, 0x5c, 0x30, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xb4, 0x9b, 0xd7,
+    0x4b, 0x48, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xe, 0x40, 0x68, 0x66, 0x3e, 0xa, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x2, 0x66, 0x9a, 0x98,
+    0x56, 0x0, 0x1c, 0xa0, 0xa8, 0x9c, 0x16, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x4, 0xe, 0x1a, 0x20, 0x16, 0xc,
+    0x0, 0x0, 0x0, 0x3e, 0x27, 0x67, 0x67, 0x13,
+    0x39, 0x67, 0x61, 0xde, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x6, 0x12, 0x16, 0x10, 0x6,
+    0xc, 0x16, 0x14, 0xa, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x14, 0xe4, 0xbb, 0xff,
+    0x5b, 0x78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x10, 0x3e, 0x5a, 0x54, 0x2c,
+    0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x1a, 0x4a, 0x6c, 0x62, 0x38, 0xa,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x3e, 0x27, 0x67, 0x67, 0x21, 0x32, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x6, 0x9c, 0xd, 0x9d, 0x8d,
+    0xcc, 0x0, 0x74, 0x43, 0xc7, 0x39, 0xdc, 0x24,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x8, 0x14, 0x18, 0x10, 0x4, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xa, 0x14, 0x1a, 0x12, 0x6, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x1c, 0x4a, 0x6c, 0x68, 0x40,
+    0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x4, 0x2a, 0x58, 0x76,
+    0x68, 0x3e, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x54, 0x11, 0x23, 0x23, 0x23, 0xfe,
+    0x0, 0x0, 0x0, 0x64, 0x63, 0xff, 0xff, 0x35,
+    0x8d, 0xff, 0xf1, 0xf8, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x9c, 0x19, 0x23, 0x15, 0x7e,
+    0xb, 0x23, 0x21, 0xb8, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x2e, 0xba, 0xfe, 0x35, 0xcb, 0xff,
+    0x77, 0x5, 0xd8, 0x4a, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x2, 0x78, 0xfc, 0x2f, 0x5f, 0x51, 0x19,
+    0xe0, 0x3c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x20, 0xba, 0xfe, 0x41, 0x67, 0x5f, 0x21, 0xf2,
+    0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x64, 0x63, 0xff, 0xff, 0x57, 0x4e, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x88, 0x15, 0xcb, 0xff, 0xdb,
+    0xd4, 0x0, 0x7a, 0x9b, 0xff, 0xef, 0x4f, 0xd8,
+    0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x9c, 0x1d, 0x23, 0x13, 0x56, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12,
+    0xfa, 0x21, 0x23, 0x17, 0x5a, 0x0, 0x0, 0x0,
+    0x0, 0x3e, 0xd0, 0xfe, 0x43, 0x67, 0x61, 0x33,
+    0xfe, 0xae, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x16, 0x4e, 0x98, 0xd4, 0xf8,
+    0x5, 0xde, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x6, 0x70, 0xf0, 0x11, 0x53, 0x69,
+    0x5f, 0x2f, 0xfe, 0xb2, 0x26, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x8c, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0x7a, 0x63, 0xff, 0xff, 0x27,
+    0x8d, 0xff, 0xeb, 0xfc, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0xec, 0xcb, 0xff, 0x89, 0xbe,
+    0x71, 0xff, 0xdf, 0xdc, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x38, 0xf6, 0x5d, 0xd9, 0xff, 0xff, 0xff,
+    0xff, 0xe9, 0x7f, 0xfe, 0x5e, 0x0, 0x0, 0x0,
+    0x0, 0x58, 0xb, 0xaf, 0xff, 0xff, 0xff, 0xf1,
+    0x71, 0xec, 0x16, 0x4, 0x38, 0x38, 0x36, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12,
+    0xde, 0x49, 0xdb, 0xff, 0xff, 0xff, 0xf9, 0x97,
+    0xfe, 0x52, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x7a, 0x63, 0xff, 0xff, 0x4d, 0x4c, 0x0, 0x0,
+    0x0, 0x0, 0x42, 0xfe, 0xbb, 0xff, 0xfb, 0x5f,
+    0xc0, 0x0, 0x6a, 0x25, 0xdf, 0xff, 0xed, 0x33,
+    0x9e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xd2, 0xcb, 0xff, 0x89, 0x84, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x62,
+    0x31, 0xff, 0xff, 0x8d, 0x66, 0x0, 0x0, 0x0,
+    0x4e, 0xfe, 0x71, 0xe5, 0xff, 0xff, 0xff, 0xff,
+    0xd1, 0x4b, 0xe8, 0x24, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x78, 0xe8, 0xfe, 0x37, 0x73, 0xa3, 0xcf,
+    0xf5, 0x15, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x4, 0xa6, 0x15, 0xa5, 0xf7, 0xff, 0xff,
+    0xff, 0xff, 0xd3, 0x53, 0xf2, 0x2e, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0x7a, 0x63, 0xff, 0xf5, 0xfe,
+    0x8d, 0xff, 0xd1, 0xf6, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xe, 0xfe, 0xef, 0xff, 0x5b, 0xe2,
+    0x9b, 0xff, 0xbb, 0xe8, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xd4, 0x6b, 0xfd, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0x95, 0xf6, 0x16, 0x0, 0x0,
+    0x0, 0xc4, 0x8f, 0xff, 0xff, 0xbf, 0xdb, 0xff,
+    0xf9, 0x39, 0x5e, 0x68, 0x13, 0x67, 0xfe, 0x6c,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x72,
+    0x31, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0x89, 0xda, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x7a, 0x63, 0xff, 0xff, 0x19, 0x2a, 0x0, 0x0,
+    0x0, 0x4, 0xda, 0x77, 0xff, 0xff, 0x89, 0xf4,
+    0x30, 0x0, 0xc, 0xc0, 0x41, 0xf9, 0xff, 0xc9,
+    0xfe, 0x3c, 0x0, 0x0, 0x0, 0x6, 0x2e, 0x2e,
+    0x2a, 0xe8, 0xbf, 0xff, 0x7b, 0x9e, 0x1a, 0x1a,
+    0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
+    0x1a, 0x32, 0x46, 0x34, 0x1c, 0x4, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc8,
+    0x8d, 0xff, 0xff, 0x31, 0x62, 0x0, 0x0, 0x12,
+    0xf0, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xf7, 0x4f, 0xbc, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xd6, 0xaf, 0xef, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x64, 0x11, 0xd1, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xfb, 0x5d, 0xc8, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0x7a, 0x63, 0xff, 0xdb, 0xfe,
+    0x8d, 0xff, 0xb5, 0xe2, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x3c, 0x29, 0xff, 0xff, 0x23, 0xf2,
+    0xc3, 0xff, 0x93, 0xc2, 0x0, 0x0, 0x0, 0x0,
+    0x22, 0x9, 0xe9, 0xff, 0xff, 0xef, 0x93, 0x89,
+    0xe5, 0xff, 0xff, 0xfd, 0x39, 0x68, 0x0, 0x0,
+    0x0, 0xf2, 0xd5, 0xff, 0xa7, 0xfe, 0xf, 0xeb,
+    0xff, 0x87, 0xac, 0xf4, 0x9b, 0xff, 0xa3, 0x7a,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc8,
+    0x9f, 0xff, 0xff, 0xed, 0x85, 0x9d, 0xfd, 0xff,
+    0xeb, 0xfe, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x7a, 0x63, 0xff, 0xe7, 0xfe, 0x6, 0x0, 0x0,
+    0x0, 0x4c, 0x11, 0xed, 0xff, 0xdf, 0x9, 0x52,
+    0x0, 0x0, 0x0, 0x1a, 0xf4, 0xa3, 0xff, 0xff,
+    0x6f, 0xc0, 0x0, 0x0, 0x0, 0x42, 0x17, 0x57,
+    0xfe, 0xf8, 0xb5, 0xff, 0x6d, 0xec, 0x5, 0x41,
+    0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12,
+    0xb, 0x3f, 0x3f, 0x3f, 0xf, 0x1c, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16, 0xfe,
+    0xd5, 0xff, 0xd1, 0xfc, 0x12, 0x0, 0x0, 0x68,
+    0x31, 0xf9, 0xff, 0xff, 0xdf, 0x89, 0x95, 0xf3,
+    0xff, 0xff, 0xdd, 0xfe, 0x2a, 0x0, 0x0, 0x0,
+    0x0, 0xe4, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xe0, 0x9b, 0xff, 0xff, 0xff, 0xbd, 0x7f,
+    0x9f, 0xf9, 0xff, 0xff, 0xe3, 0xfe, 0x20, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0x7a, 0x63, 0xff, 0xbf, 0xf8,
+    0x8d, 0xff, 0x95, 0xc2, 0x0, 0x0, 0x0, 0x14,
+    0x34, 0x50, 0xaa, 0x5f, 0xff, 0xeb, 0xfe, 0xfe,
+    0xe5, 0xff, 0x69, 0xb0, 0x36, 0x16, 0x0, 0x0,
+    0x4e, 0x4d, 0xff, 0xff, 0xff, 0x73, 0xf2, 0xe6,
+    0x3b, 0xfd, 0xff, 0xff, 0x93, 0xb4, 0x0, 0x0,
+    0x0, 0xfa, 0xeb, 0xff, 0x83, 0xbe, 0xf8, 0xcd,
+    0xff, 0xa1, 0xea, 0x43, 0xfb, 0xf9, 0x3d, 0x7a,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe8,
+    0xcd, 0xff, 0xff, 0x83, 0xf4, 0xfe, 0xc1, 0xff,
+    0xff, 0x15, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x7a, 0x63, 0xff, 0xc7, 0xf0, 0x0, 0x0, 0x0,
+    0x0, 0xbc, 0x7f, 0xff, 0xff, 0x7f, 0xcc, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x74, 0x2d, 0xfd, 0xff,
+    0xd9, 0xfe, 0x22, 0x0, 0x0, 0x82, 0x71, 0xff,
+    0xdb, 0x85, 0xb1, 0xff, 0x71, 0x8f, 0xe5, 0xeb,
+    0x5, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20,
+    0x2f, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x66, 0x37,
+    0xff, 0xff, 0x89, 0xc4, 0x0, 0x0, 0x0, 0xbe,
+    0x93, 0xff, 0xff, 0xf5, 0x27, 0xe0, 0xf2, 0x61,
+    0xff, 0xff, 0xff, 0x57, 0x76, 0x0, 0x0, 0x0,
+    0x0, 0xcc, 0x8f, 0xa7, 0xa7, 0xc9, 0xff, 0xff,
+    0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x14, 0xfe, 0xed, 0xff, 0xff, 0xbf, 0xfe, 0xcc,
+    0xfa, 0x89, 0xff, 0xff, 0xff, 0x47, 0x4e, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0x60, 0x63, 0xff, 0xa1, 0xe4,
+    0x8d, 0xff, 0x75, 0x8a, 0x0, 0x0, 0x0, 0x7e,
+    0x33, 0x4d, 0x4d, 0xa1, 0xff, 0xd5, 0x4d, 0x55,
+    0xff, 0xff, 0x6b, 0x4d, 0x37, 0x8e, 0x0, 0x0,
+    0x64, 0x63, 0xff, 0xff, 0xff, 0x49, 0x8a, 0x18,
+    0xfc, 0xe1, 0xff, 0xff, 0xb7, 0xb6, 0x0, 0x0,
+    0x0, 0xf8, 0xdf, 0xff, 0x91, 0xf4, 0xfe, 0xdb,
+    0xff, 0x93, 0xfe, 0xcf, 0xff, 0x97, 0xf2, 0x1a,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xea,
+    0xcf, 0xff, 0xff, 0x7d, 0xe0, 0xfe, 0xd3, 0xff,
+    0xf5, 0xfe, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x60, 0x63, 0xff, 0xa3, 0xc4, 0x0, 0x0, 0x0,
+    0x8, 0xfa, 0xcf, 0xff, 0xfb, 0x21, 0x50, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x10, 0xfc, 0xcb, 0xff,
+    0xff, 0x4d, 0x78, 0x0, 0x0, 0x80, 0x8f, 0xf9,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
+    0x43, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e,
+    0x2f, 0xff, 0xff, 0xff, 0x3f, 0x46, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcc, 0x91,
+    0xff, 0xff, 0x2f, 0x5e, 0x0, 0x0, 0x0, 0xec,
+    0xc7, 0xff, 0xff, 0xc3, 0xf8, 0xc, 0x30, 0xfe,
+    0xef, 0xff, 0xff, 0x93, 0xb6, 0x0, 0x0, 0x0,
+    0x0, 0x58, 0xa0, 0xc8, 0xee, 0x7f, 0xff, 0xff,
+    0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x1a, 0x33, 0xff, 0xff, 0xff, 0x77, 0xac, 0x0,
+    0x80, 0x43, 0xff, 0xff, 0xff, 0x67, 0x68, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0x3a, 0x1f, 0x51, 0x2d, 0xa8,
+    0x2d, 0x51, 0x1d, 0x46, 0x0, 0x0, 0x0, 0xac,
+    0xa9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xbb, 0xbc, 0x0, 0x0,
+    0x4c, 0x49, 0xff, 0xff, 0xff, 0x85, 0xf6, 0x60,
+    0xc2, 0x47, 0x57, 0x57, 0x41, 0x8e, 0x0, 0x0,
+    0x0, 0xdc, 0xb1, 0xff, 0xeb, 0x7b, 0x99, 0xff,
+    0xff, 0x5d, 0x7d, 0xff, 0xdf, 0xf, 0x60, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xce,
+    0xa7, 0xff, 0xff, 0xcb, 0xb, 0x9b, 0xff, 0xff,
+    0xaf, 0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x3a, 0x1d, 0x4d, 0x29, 0x74, 0x0, 0x0, 0x0,
+    0x32, 0x1f, 0xfb, 0xff, 0xd5, 0xfc, 0xa, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xcc, 0x95, 0xff,
+    0xff, 0x9b, 0xc6, 0x0, 0x0, 0x58, 0xee, 0x13,
+    0x67, 0xbd, 0xff, 0xff, 0xf7, 0xaf, 0x6b, 0x19,
+    0xee, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e,
+    0x2f, 0xff, 0xff, 0xff, 0x3f, 0x46, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0xfe, 0xd9,
+    0xff, 0xcf, 0xfc, 0x10, 0x0, 0x0, 0x0, 0xf8,
+    0xdf, 0xff, 0xff, 0xa9, 0xda, 0x0, 0x0, 0xfa,
+    0xd7, 0xff, 0xff, 0xaf, 0xd6, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff,
+    0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x1a, 0x1b, 0x63, 0x63, 0x63, 0x27, 0x4a, 0x0,
+    0xa2, 0x5b, 0xff, 0xff, 0xff, 0x51, 0x58, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0x8, 0x2e, 0x3a, 0x34, 0x1e,
+    0x34, 0x3a, 0x2e, 0x8, 0x0, 0x0, 0x0, 0xa4,
+    0x93, 0xdd, 0xdd, 0xfb, 0xff, 0xe7, 0xdd, 0xed,
+    0xff, 0xf5, 0xdd, 0xdd, 0xa1, 0xb6, 0x0, 0x0,
+    0x20, 0x9, 0xe9, 0xff, 0xff, 0xf9, 0x93, 0x1b,
+    0xee, 0x9a, 0x6c, 0x5e, 0x40, 0x1a, 0x0, 0x0,
+    0x0, 0x82, 0x2d, 0xe7, 0xff, 0xff, 0xff, 0xff,
+    0xb5, 0x27, 0xf1, 0xff, 0x59, 0xc4, 0x4, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7c,
+    0x3d, 0xfb, 0xff, 0xff, 0xe9, 0xff, 0xff, 0xdf,
+    0x21, 0x7c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x8, 0x2a, 0x36, 0x30, 0xe, 0x0, 0x0, 0x0,
+    0x6e, 0x59, 0xff, 0xff, 0xaf, 0xe2, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x65, 0xff,
+    0xff, 0xc9, 0xf0, 0x0, 0x0, 0x0, 0x4, 0x8e,
+    0xd, 0xd1, 0xff, 0xfb, 0xfd, 0x5b, 0xee, 0x48,
+    0x6, 0x0, 0x0, 0x20, 0x7a, 0xb0, 0xc8, 0xd4,
+    0x2f, 0xff, 0xff, 0xff, 0x3f, 0xd8, 0xc8, 0xb0,
+    0x7c, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x6c, 0x3b, 0xff,
+    0xff, 0x87, 0xc2, 0x0, 0x0, 0x0, 0x0, 0xfc,
+    0xe9, 0xff, 0xff, 0xa3, 0xd0, 0x0, 0x0, 0xf4,
+    0xd1, 0xff, 0xff, 0xbb, 0xe0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff,
+    0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x8, 0x38, 0x60, 0x7a, 0x62, 0x3c, 0xc, 0x30,
+    0xfc, 0xb7, 0xff, 0xff, 0xf3, 0x17, 0x2c, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a,
+    0xce, 0xf0, 0x5, 0xf9, 0xff, 0x4f, 0xfe, 0xa9,
+    0xff, 0xb1, 0xfe, 0xf2, 0xd2, 0x68, 0x0, 0x0,
+    0x0, 0xd2, 0x67, 0xfb, 0xff, 0xff, 0xff, 0xf3,
+    0xa5, 0x2f, 0xf0, 0x5a, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x10, 0xc8, 0x19, 0x85, 0xab, 0xa1, 0x69,
+    0xfe, 0xb7, 0xff, 0xb1, 0xfc, 0x2c, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e,
+    0xfc, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xc5, 0x23,
+    0xbc, 0x46, 0x6a, 0x7a, 0x52, 0x1c, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xa0, 0x81, 0xff, 0xff, 0x95, 0xc2, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x54, 0x43, 0xff,
+    0xff, 0xe9, 0xfe, 0x0, 0x0, 0x0, 0x38, 0xfe,
+    0xa7, 0xff, 0xd9, 0x7d, 0xff, 0xeb, 0x29, 0x9e,
+    0x0, 0x0, 0x0, 0x5a, 0x49, 0x9f, 0x9f, 0x9f,
+    0xa9, 0xff, 0xff, 0xff, 0xad, 0x9f, 0x9f, 0x9f,
+    0x4d, 0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x50, 0xa6, 0xd0,
+    0xdc, 0xdc, 0xdc, 0xda, 0xb8, 0x74, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xd0, 0x93, 0xff,
+    0xfd, 0x2d, 0x5a, 0x0, 0x0, 0x0, 0x0, 0xfc,
+    0xeb, 0xff, 0xff, 0xa3, 0xce, 0x0, 0x0, 0xf2,
+    0xd1, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff,
+    0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16, 0xe0,
+    0x5f, 0xff, 0xff, 0xff, 0x99, 0xe8, 0x6, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x4e, 0x3d, 0xff, 0xfd, 0x15, 0xf8, 0xcf,
+    0xff, 0x89, 0xb4, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x36, 0xf2, 0x53, 0xdb, 0xff, 0xff, 0xff,
+    0xff, 0xf9, 0x93, 0x5, 0x84, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x6, 0x52, 0xa0, 0xc6, 0xc0, 0xe6,
+    0x5d, 0xff, 0xef, 0x25, 0xd6, 0xd4, 0xd4, 0xaa,
+    0x54, 0x4, 0x0, 0x0, 0x0, 0x0, 0x1c, 0xda,
+    0x3b, 0xdb, 0xff, 0xff, 0xff, 0xfb, 0x47, 0xec,
+    0x36, 0xf, 0x6f, 0x6f, 0x43, 0x6e, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xbc, 0x95, 0xff, 0xff, 0x83, 0xac, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x2c, 0x27, 0xff,
+    0xff, 0xfb, 0xfe, 0x6, 0x0, 0x0, 0x40, 0x6b,
+    0xff, 0xff, 0x51, 0xfe, 0xd1, 0xff, 0xcb, 0xb4,
+    0x0, 0x0, 0x0, 0x86, 0x77, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0x7b, 0x8a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xb0, 0x87, 0xb3,
+    0xb3, 0xb3, 0xb3, 0xb3, 0xab, 0xec, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x1a, 0xfe, 0xdb, 0xff,
+    0xcd, 0xfc, 0x10, 0x0, 0x0, 0x0, 0x0, 0xfc,
+    0xeb, 0xff, 0xff, 0xa3, 0xce, 0x0, 0x0, 0xf2,
+    0xd1, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff,
+    0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xc6, 0x37,
+    0xf1, 0xff, 0xff, 0xd5, 0xf, 0x64, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x42, 0xc0,
+    0xea, 0xfa, 0x6f, 0xff, 0xe3, 0xfe, 0xfe, 0xf1,
+    0xff, 0x5b, 0xf6, 0xd2, 0x78, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x26, 0xbc, 0x5, 0x6d, 0xc9, 0xff,
+    0xff, 0xff, 0xff, 0xb9, 0xfe, 0x34, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x64, 0x11,
+    0xe3, 0xff, 0x79, 0x13, 0x8b, 0xb7, 0xb7, 0x89,
+    0x11, 0xb0, 0x4, 0x0, 0x0, 0x0, 0xb6, 0x41,
+    0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x2d,
+    0xca, 0x43, 0xff, 0xff, 0x93, 0x96, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xc8, 0xa1, 0xff, 0xff, 0x7b, 0xa0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x16, 0x17, 0xff,
+    0xff, 0xff, 0x15, 0xe, 0x0, 0x0, 0x40, 0x21,
+    0xb7, 0xad, 0xfa, 0xbc, 0x4b, 0xf1, 0x71, 0xb0,
+    0x0, 0x0, 0x0, 0x82, 0x77, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0x7b, 0x88, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xdc, 0xc1, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xf5, 0xfc, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x6e, 0x3f, 0xff, 0xff,
+    0x85, 0xbe, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc,
+    0xeb, 0xff, 0xff, 0xa3, 0xce, 0x0, 0x0, 0xf2,
+    0xd1, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff,
+    0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xa, 0xb6, 0x2b, 0xe3,
+    0xff, 0xff, 0xeb, 0x31, 0xb0, 0x4, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x8e, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x82, 0x77,
+    0xd7, 0xd7, 0xe9, 0xff, 0xf5, 0xd7, 0xd7, 0xff,
+    0xff, 0xdb, 0xd7, 0xaf, 0xce, 0x0, 0x0, 0x0,
+    0x3a, 0x6a, 0x90, 0x80, 0x7c, 0xb8, 0xfc, 0x47,
+    0xd3, 0xff, 0xff, 0xff, 0x65, 0x8e, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x1a, 0xf4, 0x9b,
+    0xff, 0xcb, 0x17, 0xdd, 0xff, 0xff, 0xff, 0xff,
+    0xd9, 0x11, 0x56, 0x0, 0x0, 0x1c, 0xfe, 0xd9,
+    0xff, 0xff, 0xd3, 0x4f, 0xf3, 0xff, 0xff, 0xd7,
+    0x15, 0x77, 0xff, 0xff, 0x7b, 0x96, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xca, 0xa3, 0xff, 0xff, 0x79, 0x9e, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0xf, 0xff,
+    0xff, 0xff, 0x1d, 0xe, 0x0, 0x0, 0xa, 0x86,
+    0xbe, 0xd, 0x76, 0x22, 0xda, 0x1f, 0xe0, 0x3e,
+    0x0, 0x0, 0x0, 0x56, 0x41, 0x8d, 0x8d, 0x8d,
+    0x99, 0xff, 0xff, 0xff, 0x9f, 0x8d, 0x8d, 0x8d,
+    0x43, 0x5a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xcc, 0xc1, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xf5, 0xfa, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xd4, 0x97, 0xff, 0xfd,
+    0x29, 0x58, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc,
+    0xe9, 0xff, 0xff, 0xa3, 0xd0, 0x0, 0x0, 0xf4,
+    0xd1, 0xff, 0xff, 0xbb, 0xe0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff,
+    0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x6, 0xa8, 0x21, 0xdb, 0xff,
+    0xff, 0xf3, 0x49, 0xd4, 0x12, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x58, 0x1b, 0x35, 0x35, 0x35, 0xfe,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x88, 0x8d,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xd1, 0xd2, 0x0, 0x0, 0x0,
+    0xd4, 0x6d, 0x73, 0x73, 0x47, 0x88, 0x1e, 0xb2,
+    0x21, 0xf3, 0xff, 0xff, 0xa7, 0xc8, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xa8, 0x41, 0xfb,
+    0xf9, 0x3d, 0x93, 0xff, 0xf3, 0x73, 0x79, 0xf7,
+    0xff, 0x8b, 0xae, 0x0, 0x0, 0x48, 0x43, 0xff,
+    0xff, 0xff, 0x67, 0xf8, 0x61, 0xfb, 0xff, 0xff,
+    0xbf, 0xcf, 0xff, 0xff, 0x41, 0x5a, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xc2, 0x9b, 0xff, 0xff, 0x7f, 0xa6, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x21, 0xff,
+    0xff, 0xff, 0x5, 0x8, 0x0, 0x0, 0x0, 0x0,
+    0x2, 0x2, 0x2, 0x0, 0x8, 0x8, 0x8, 0x0,
+    0x0, 0x0, 0x0, 0x1c, 0x68, 0x9c, 0xb6, 0xc2,
+    0x2f, 0xff, 0xff, 0xff, 0x3f, 0xc8, 0xb6, 0x9c,
+    0x6a, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x9, 0xd,
+    0xd, 0xd, 0xd, 0xd, 0xb, 0xde, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x1c, 0xfe, 0xdd, 0xff, 0xcb,
+    0xfc, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8,
+    0xdf, 0xff, 0xff, 0xa9, 0xdc, 0x0, 0x0, 0xfa,
+    0xd7, 0xff, 0xff, 0xaf, 0xd4, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff,
+    0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x4, 0x9a, 0x17, 0xd1, 0xff, 0xff,
+    0xf9, 0x5b, 0xe4, 0x20, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x8, 0x1a, 0x2c, 0x36, 0x26, 0x14,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x60, 0x2b,
+    0x4d, 0x4d, 0xe9, 0xff, 0x8b, 0x4d, 0xa7, 0xff,
+    0xd3, 0x4d, 0x4d, 0x3f, 0xaa, 0x0, 0x0, 0x0,
+    0xee, 0xe9, 0xff, 0xff, 0xaf, 0xe6, 0x6, 0x14,
+    0xfe, 0xd9, 0xff, 0xff, 0xb9, 0xd8, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x48, 0xfe, 0xcf, 0xff,
+    0x97, 0xfe, 0xc1, 0xff, 0xb1, 0xfa, 0xfa, 0xb9,
+    0xff, 0xbb, 0xdc, 0x0, 0x0, 0x5c, 0x5f, 0xff,
+    0xff, 0xff, 0x4f, 0xa8, 0xf6, 0x7f, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xd9, 0xfe, 0x1c, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xac, 0x8b, 0xff, 0xff, 0x8b, 0xb8, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x35, 0xff,
+    0xff, 0xf3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e,
+    0x2f, 0xff, 0xff, 0xff, 0x3f, 0x46, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x4,
+    0x6, 0x6, 0x6, 0x6, 0x4, 0x2, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x74, 0x43, 0xff, 0xff, 0x81,
+    0xba, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xea,
+    0xc5, 0xff, 0xff, 0xc5, 0xf8, 0x10, 0x32, 0xfe,
+    0xf1, 0xff, 0xff, 0x91, 0xb4, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff,
+    0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x88, 0xf, 0xc7, 0xff, 0xff, 0xfd,
+    0x6b, 0xf0, 0x2c, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x52, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0x30,
+    0x68, 0x13, 0xfd, 0xff, 0x3f, 0xf2, 0xb3, 0xff,
+    0xa7, 0xe4, 0x54, 0x3a, 0x1a, 0x0, 0x0, 0x0,
+    0xee, 0xc9, 0xff, 0xff, 0xeb, 0x19, 0xe2, 0xe0,
+    0x21, 0xf3, 0xff, 0xff, 0xa7, 0xc6, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x8, 0xe0, 0x7d, 0xff, 0xdf,
+    0xf, 0xf0, 0xcb, 0xff, 0xa7, 0xe4, 0xe6, 0xad,
+    0xff, 0xc5, 0xe2, 0x0, 0x0, 0x48, 0x43, 0xff,
+    0xff, 0xff, 0x99, 0xfc, 0xd8, 0xfe, 0x9f, 0xff,
+    0xff, 0xff, 0xff, 0x63, 0xca, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x84, 0x69, 0xff, 0xff, 0xa5, 0xd4, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x72, 0x57, 0xff,
+    0xff, 0xd5, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2e,
+    0x2f, 0xff, 0xff, 0xff, 0x3f, 0x46, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x3c, 0xcc, 0xf2, 0xf6,
+    0xdc, 0x78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x3c, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x14,
+    0x0, 0x0, 0x0, 0xd8, 0x9b, 0xff, 0xfb, 0x27,
+    0x54, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xba,
+    0x8f, 0xff, 0xff, 0xf7, 0x2d, 0xe8, 0xf4, 0x63,
+    0xff, 0xff, 0xff, 0x53, 0x72, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff,
+    0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x74, 0x9, 0xbd, 0xff, 0xff, 0xff, 0x7d,
+    0xfe, 0xe6, 0xe0, 0xe0, 0xda, 0xb4, 0x66, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x8a, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x64, 0x4d, 0xff, 0xf9, 0x9, 0xfa, 0xd7, 0xff,
+    0x7d, 0xa6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xb2, 0x77, 0xff, 0xff, 0xff, 0xe1, 0x95, 0x91,
+    0xdd, 0xff, 0xff, 0xff, 0x5f, 0x8a, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x8, 0x1f, 0xf1, 0xff, 0x59,
+    0xc4, 0xd4, 0xb1, 0xff, 0xd1, 0x5, 0xfe, 0xcd,
+    0xff, 0xab, 0xce, 0x0, 0x0, 0x1c, 0xfe, 0xdf,
+    0xff, 0xff, 0xff, 0xb1, 0x87, 0x9f, 0xe3, 0xff,
+    0xff, 0xff, 0xfd, 0x63, 0xea, 0x1e, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x48, 0x39, 0xff, 0xff, 0xc5, 0xf4, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xb0, 0x7f, 0xff,
+    0xff, 0xb1, 0xdc, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22,
+    0x2f, 0xff, 0xff, 0xff, 0x3f, 0x36, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x74, 0x71, 0xe3, 0xe3,
+    0xaf, 0xc4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x68, 0x6f, 0xff, 0xff, 0xff, 0x35, 0x26,
+    0x0, 0x0, 0x20, 0xfe, 0xe1, 0xff, 0xc9, 0xfa,
+    0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x60,
+    0x2b, 0xf7, 0xff, 0xff, 0xe5, 0x93, 0x9d, 0xf5,
+    0xff, 0xff, 0xd9, 0xfe, 0x26, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff,
+    0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xda, 0xab, 0xff, 0xff, 0xff, 0xed, 0xb7,
+    0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0x9d, 0xd0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xa4, 0x7b, 0xff, 0xd9, 0xfc, 0x5, 0xf7, 0xff,
+    0x4f, 0x66, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x42, 0x5, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xb5, 0xfe, 0x30, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x8, 0xdc, 0x55, 0x8d, 0xfc,
+    0x2c, 0x94, 0x5f, 0xff, 0xff, 0xdb, 0xd5, 0xff,
+    0xff, 0x59, 0x8a, 0x0, 0x0, 0x0, 0xc2, 0x55,
+    0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xf5, 0x45, 0xce, 0x10, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x16, 0xfe, 0xe5, 0xff, 0xef, 0x5, 0x2a, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x2, 0xee, 0xb3, 0xff,
+    0xff, 0x6d, 0x9a, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14,
+    0x11, 0x67, 0x67, 0x67, 0x19, 0x20, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x9c, 0x7f, 0xff, 0xff,
+    0xc5, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x8c, 0x6f, 0xff, 0xff, 0xff, 0x35, 0x36,
+    0x0, 0x0, 0x78, 0x47, 0xff, 0xff, 0x7f, 0xb8,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe,
+    0xea, 0x79, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xf3, 0x47, 0xb6, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xa2, 0x7f, 0xff, 0xff,
+    0xff, 0x15, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xf6, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xdd, 0xf0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x8a, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x94, 0xa5, 0xff, 0xb5, 0xda, 0x3d, 0xff, 0xff,
+    0x15, 0x2a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x84, 0xfe, 0x7f, 0xe1, 0xff, 0xff, 0xff,
+    0xff, 0xdf, 0x7b, 0xfe, 0x80, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x28, 0x72, 0x72, 0x56,
+    0x0, 0x30, 0xfe, 0x83, 0xf5, 0xff, 0xff, 0xf5,
+    0x81, 0xfc, 0x2a, 0x0, 0x0, 0x0, 0x28, 0xec,
+    0x47, 0xc9, 0xfd, 0xff, 0xff, 0xff, 0xf3, 0xa7,
+    0x41, 0xe3, 0xff, 0xff, 0xe9, 0x35, 0x10, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xde, 0xa5, 0xff, 0xff, 0x59, 0x98, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x44, 0xb, 0xef, 0xff,
+    0xf3, 0x17, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
+    0x38, 0x62, 0x80, 0x64, 0x3a, 0x6, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xa6, 0x7f, 0xff, 0xff,
+    0xc1, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x68, 0x6f, 0xff, 0xff, 0xff, 0x35, 0x26,
+    0x0, 0x0, 0xdc, 0x9d, 0xff, 0xfb, 0x23, 0x50,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x44, 0xf8, 0x63, 0xd9, 0xff, 0xff, 0xff, 0xfd,
+    0xc7, 0x41, 0xe2, 0x20, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x7c, 0x7f, 0xff, 0xff,
+    0xff, 0x15, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xee, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xdd, 0xe8, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x52, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x6c, 0xfe, 0xfe, 0xfe, 0x8c, 0xfe, 0xfe, 0xfe,
+    0xf6, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x4a, 0xcc, 0xfe, 0x2f, 0xed, 0xff,
+    0x27, 0xfe, 0xca, 0x46, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x4c, 0xe8, 0xf, 0x43, 0x43, 0xf,
+    0xe8, 0x4c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20,
+    0xa4, 0xfa, 0x1f, 0x4f, 0x59, 0x41, 0x9, 0xec,
+    0xde, 0xfe, 0xfe, 0xfe, 0xfe, 0xc8, 0x10, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x7a, 0x39, 0xfd, 0xff, 0xbb, 0xfa, 0x24,
+    0x0, 0x0, 0x0, 0x4, 0xce, 0x77, 0xff, 0xff,
+    0x9f, 0xea, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xbe, 0x89, 0xff, 0xff,
+    0xa7, 0xca, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x3c, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x14,
+    0x0, 0x8, 0xe6, 0xe3, 0xff, 0xc7, 0xf8, 0xc,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x32, 0xbe, 0xfe, 0x31, 0x55, 0x51, 0x23,
+    0xfc, 0xa0, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x48, 0xfe, 0xfe, 0xfe,
+    0xfe, 0xfe, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xbc, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
+    0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xb2, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x10, 0xf8, 0xe9, 0xff,
+    0xfe, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x4, 0x20, 0x38, 0x38, 0x20,
+    0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x8, 0x2c, 0x50, 0x5e, 0x42, 0x1c, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x16, 0xf8, 0xad, 0xff, 0xfd, 0x4d, 0xc2,
+    0x8, 0x0, 0x0, 0x74, 0x11, 0xe3, 0xff, 0xef,
+    0x25, 0x6e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x6, 0xf0, 0xaf, 0xff, 0xff,
+    0x5d, 0x88, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x8, 0x21, 0x95, 0x95, 0x55, 0xa4, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x12, 0x38, 0x54, 0x52, 0x30,
+    0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xda, 0x91, 0x9f,
+    0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x7c, 0x21, 0xe9, 0xff, 0xdf, 0x1d,
+    0x9e, 0x0, 0x52, 0xfe, 0xa9, 0xff, 0xff, 0x71,
+    0xde, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x18, 0x17, 0xf1, 0xff, 0xd1,
+    0xfe, 0x2e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x8, 0x62, 0x9c, 0xa8, 0x76, 0x28, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x58, 0x9c, 0x9c,
+    0x68, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xa, 0xd0, 0x4b, 0xf5, 0xff, 0xcb,
+    0xce, 0x0, 0x78, 0x89, 0xff, 0xff, 0x9b, 0xfe,
+    0x3c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x18, 0x37, 0xd9, 0xf1, 0x41,
+    0xae, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x22, 0xe6, 0x4b, 0xe7, 0xb5,
+    0xd0, 0x0, 0x78, 0x6b, 0xfb, 0x8d, 0xfe, 0x64,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x14, 0xb4, 0x5, 0x31, 0xde,
+    0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x22, 0xcc, 0x17, 0x39,
+    0x88, 0x0, 0x3a, 0xb, 0x3b, 0xf2, 0x56, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x10, 0x10,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x18, 0x18,
+    0x14, 0x0, 0x2, 0x18, 0x18, 0x16, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x8, 0x30, 0x5c, 0x76,
+    0x66, 0x3c, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x2, 0xe, 0x18, 0x20, 0x18, 0xc, 0x2, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x4, 0xe, 0x1a, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x16, 0xc,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x1c, 0x48, 0x6c, 0x6a, 0x46, 0x1c, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x2, 0xe, 0x18, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x1e, 0x14, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x2, 0x22, 0x52, 0x74, 0x6e, 0x46, 0x18,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x22, 0x50, 0x70, 0x60, 0x36,
+    0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x28, 0x56,
+    0x76, 0x6e, 0x46, 0x18, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc,
+    0x16, 0x20, 0x1c, 0x10, 0x6, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xe, 0x86, 0xf6, 0x1b, 0x57, 0x6b,
+    0x5f, 0x2f, 0xfe, 0xba, 0x30, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x7e, 0xd, 0x23, 0x23, 0x23, 0xb, 0x24, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x62, 0x11, 0x23, 0x23,
+    0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x5,
+    0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x52,
+    0xda, 0xfe, 0x41, 0x63, 0x61, 0x41, 0x5, 0xd4,
+    0x2c, 0x0, 0x0, 0x0, 0x3a, 0xd, 0x23, 0x23,
+    0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
+    0x23, 0x1d, 0xa8, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x5a, 0xe4, 0xb, 0x4b, 0x69, 0x63, 0x3d, 0xfe,
+    0xc8, 0x38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x44, 0xd8, 0x5, 0x4b, 0x69, 0x5b, 0x21,
+    0xf8, 0x8c, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x6, 0x70, 0xec, 0x11, 0x51,
+    0x69, 0x63, 0x3d, 0xfe, 0xcc, 0x3e, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xa, 0x46, 0x8c, 0xbe, 0xd2, 0xd2, 0xc4, 0x9a,
+    0x56, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0xfe,
+    0x23, 0x23, 0x23, 0x15, 0x94, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x12, 0xca, 0x29, 0xb5, 0xfb, 0xff, 0xff,
+    0xff, 0xff, 0xd7, 0x5f, 0xfa, 0x40, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2c,
+    0xfc, 0xb3, 0xff, 0xff, 0xff, 0x4d, 0x42, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xac, 0x97, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f,
+    0x20, 0x0, 0x0, 0x0, 0x0, 0x4, 0x98, 0x9,
+    0x89, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x5b,
+    0x44, 0x0, 0x0, 0x0, 0x66, 0x6b, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xd3, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x78,
+    0x9, 0x93, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xe1,
+    0x6b, 0xfc, 0x44, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x5c, 0xfe, 0x79, 0xeb, 0xff, 0xff, 0xff, 0xfd,
+    0xbb, 0x2b, 0xc8, 0xe, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0xa4, 0x19, 0xa5, 0xf5, 0xff,
+    0xff, 0xff, 0xff, 0xe3, 0x71, 0xfe, 0x4c, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0x92,
+    0xf8, 0x21, 0x73, 0x99, 0xab, 0xaf, 0x9d, 0x7f,
+    0x35, 0xfe, 0xac, 0x26, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x82, 0x4f,
+    0xff, 0xff, 0xff, 0xc5, 0xf8, 0xa, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x8a, 0x31, 0xe7, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0x75, 0xe0, 0x4, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xc6,
+    0x5b, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x5c, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xda, 0xaf, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f,
+    0x2a, 0x0, 0x0, 0x0, 0x0, 0x7c, 0x13, 0xc7,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x43,
+    0x44, 0x0, 0x0, 0x0, 0x76, 0x6b, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xd3, 0xf2, 0x0, 0x0, 0x0, 0x20, 0xfe,
+    0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0x79, 0xe0, 0x4, 0x0, 0x0, 0x0, 0x26,
+    0xfa, 0x93, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xe5, 0x2b, 0x8e, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x42, 0x9, 0xd1, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0xe8, 0x8,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x42, 0xf2, 0x3d,
+    0xbb, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xcf, 0x51, 0xf8, 0x48, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe2, 0xa5,
+    0xff, 0xff, 0xff, 0xfb, 0x21, 0x50, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xf0, 0xb7, 0xff, 0xff, 0xff, 0xb7, 0x7d,
+    0x99, 0xf3, 0xff, 0xff, 0xf1, 0x13, 0x32, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x62, 0xf,
+    0xe1, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x5c, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xec, 0xc3, 0xff, 0xff,
+    0xd7, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0x23,
+    0x1c, 0x0, 0x0, 0x0, 0x1e, 0xfc, 0xb1, 0xff,
+    0xff, 0xff, 0xd1, 0x8d, 0x89, 0xa7, 0xcf, 0xfe,
+    0x1c, 0x0, 0x0, 0x0, 0x50, 0x47, 0xad, 0xad,
+    0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xe9, 0xff,
+    0xff, 0xc5, 0xdc, 0x0, 0x0, 0x0, 0x6c, 0x49,
+    0xff, 0xff, 0xff, 0xe1, 0x85, 0x93, 0xf3, 0xff,
+    0xff, 0xf1, 0xf, 0x2a, 0x0, 0x0, 0x0, 0x9a,
+    0x53, 0xff, 0xff, 0xff, 0xdb, 0x85, 0xa5, 0xfd,
+    0xff, 0xff, 0xbd, 0xfa, 0x14, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xa0, 0x77, 0xff, 0xff, 0xff, 0xd7,
+    0x8b, 0x9b, 0xf3, 0xff, 0xff, 0xf5, 0x1f, 0x3e,
+    0x0, 0x0, 0x0, 0x0, 0x4a, 0xfc, 0x77, 0xfb,
+    0xff, 0xf3, 0xb5, 0x7b, 0x5f, 0x5b, 0x73, 0xa3,
+    0xe5, 0xff, 0xfd, 0x7f, 0xfc, 0x3c, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x2a, 0x5, 0xe9,
+    0xff, 0xff, 0xff, 0xff, 0x7f, 0xba, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xf4, 0xf7, 0xff, 0xff, 0xb5, 0xfe, 0xc8,
+    0xf4, 0x73, 0xff, 0xff, 0xff, 0x5d, 0x64, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x1a, 0xf2, 0x97,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x5c, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xf8, 0xd9, 0xff, 0xff,
+    0x65, 0xf2, 0xe8, 0xe8, 0xe8, 0xe8, 0xce, 0x92,
+    0xc, 0x0, 0x0, 0x0, 0x78, 0x45, 0xff, 0xff,
+    0xff, 0xaf, 0xfe, 0xd6, 0xbe, 0xda, 0xc8, 0x9e,
+    0x0, 0x0, 0x0, 0x0, 0x20, 0x86, 0xbe, 0xd6,
+    0xd6, 0xd6, 0xd6, 0xda, 0xfa, 0x67, 0xff, 0xff,
+    0xef, 0x35, 0x9a, 0x0, 0x0, 0x0, 0xa4, 0x8d,
+    0xff, 0xff, 0xff, 0x39, 0xe2, 0xf4, 0x7b, 0xff,
+    0xff, 0xff, 0x55, 0x56, 0x0, 0x0, 0x0, 0xec,
+    0xbd, 0xff, 0xff, 0xef, 0x21, 0xe0, 0xfa, 0x8d,
+    0xff, 0xff, 0xfd, 0x33, 0x52, 0x0, 0x0, 0x0,
+    0x3c, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x14, 0x0,
+    0x0, 0x0, 0x3c, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
+    0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x6, 0x52, 0x9e, 0x9c, 0x72,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x60, 0x98, 0x9c, 0x62,
+    0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xb2, 0xb3, 0xff, 0xff, 0xef, 0x19,
+    0xdc, 0xf2, 0x67, 0xff, 0xff, 0xff, 0x6b, 0x78,
+    0x0, 0x0, 0x0, 0x20, 0xf2, 0x7f, 0xff, 0xff,
+    0xb7, 0x27, 0xf2, 0xb2, 0x82, 0x7e, 0xa4, 0xe4,
+    0xd, 0x91, 0xff, 0xff, 0x6f, 0xdc, 0xa, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x59, 0xff,
+    0xff, 0xf9, 0xff, 0xff, 0xcb, 0xfa, 0xe, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x9, 0x7b, 0x7b, 0x7b, 0x41, 0x8c, 0x0,
+    0x6a, 0x31, 0xff, 0xff, 0xff, 0x73, 0x78, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xa6, 0x3d, 0xf9,
+    0xff, 0xeb, 0xff, 0xff, 0xff, 0x4d, 0x5c, 0x0,
+    0x0, 0x0, 0x0, 0x2, 0xfe, 0xed, 0xff, 0xff,
+    0x43, 0x6a, 0x3a, 0x34, 0x16, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xc8, 0x9d, 0xff, 0xff,
+    0xf5, 0x19, 0xb0, 0x98, 0x9c, 0x74, 0x34, 0x2,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x92, 0x2d, 0xf1, 0xff, 0xff,
+    0x63, 0xde, 0x14, 0x0, 0x0, 0x0, 0xb6, 0x9d,
+    0xff, 0xff, 0xf1, 0xfe, 0x1e, 0x78, 0x41, 0xff,
+    0xff, 0xff, 0x67, 0x68, 0x0, 0x0, 0x2, 0xfe,
+    0xef, 0xff, 0xff, 0xa7, 0xee, 0xa, 0x5c, 0x21,
+    0xff, 0xff, 0xff, 0x79, 0x94, 0x0, 0x0, 0x0,
+    0x68, 0x6f, 0xff, 0xff, 0xff, 0x35, 0x26, 0x0,
+    0x0, 0x0, 0x68, 0x6f, 0xff, 0xff, 0xff, 0x35,
+    0x26, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x18, 0x7a, 0xec, 0x19, 0x83, 0xa9, 0xc8,
+    0x0, 0x0, 0x0, 0x26, 0x7e, 0xb2, 0xc8, 0xc8,
+    0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xa8, 0x6c,
+    0x8, 0x0, 0x0, 0x0, 0xae, 0x97, 0x91, 0x27,
+    0xf6, 0x90, 0x24, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x98, 0x67, 0x87, 0x87, 0x6f, 0xde,
+    0x6, 0x4e, 0x19, 0xff, 0xff, 0xff, 0x83, 0x92,
+    0x0, 0x0, 0x0, 0xac, 0x49, 0xf9, 0xff, 0xa5,
+    0xfe, 0x88, 0x2c, 0x64, 0x92, 0x9c, 0x74, 0x38,
+    0x5e, 0xfc, 0x89, 0xff, 0xef, 0x21, 0x5a, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xea, 0xad, 0xff,
+    0xff, 0x9d, 0xf9, 0xff, 0xfd, 0x2b, 0x5a, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x46, 0x78, 0x9c, 0x86, 0x58, 0x1a, 0x1c,
+    0xc2, 0x57, 0xff, 0xff, 0xff, 0x4d, 0x5a, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x46, 0xfe, 0xcd, 0xff,
+    0xf9, 0x79, 0xff, 0xff, 0xff, 0x4d, 0x5c, 0x0,
+    0x0, 0x0, 0x0, 0x14, 0xb, 0xfd, 0xff, 0xff,
+    0x19, 0x1b, 0x49, 0x39, 0xfe, 0xde, 0x52, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xec, 0xcb, 0xff, 0xff,
+    0xc7, 0xfe, 0x53, 0x85, 0x89, 0x63, 0xd, 0xc4,
+    0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x2e, 0xfe, 0xbf, 0xff, 0xff, 0xab,
+    0xfc, 0x32, 0x0, 0x0, 0x0, 0x0, 0x94, 0x7f,
+    0xff, 0xff, 0xfd, 0x1f, 0xa4, 0xd0, 0x63, 0xff,
+    0xff, 0xff, 0x41, 0x4c, 0x0, 0x0, 0x2, 0xb,
+    0xff, 0xff, 0xff, 0x87, 0xbe, 0x0, 0xa, 0xfe,
+    0xf1, 0xff, 0xff, 0x9b, 0xbe, 0x0, 0x0, 0x0,
+    0x8c, 0x6f, 0xff, 0xff, 0xff, 0x35, 0x36, 0x0,
+    0x0, 0x0, 0x8c, 0x6f, 0xff, 0xff, 0xff, 0x35,
+    0x36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x32,
+    0xa6, 0xfc, 0x3b, 0xa5, 0xf3, 0xff, 0xcd, 0xea,
+    0x0, 0x0, 0x0, 0x6a, 0x53, 0x9f, 0x9f, 0x9f,
+    0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x1d,
+    0x18, 0x0, 0x0, 0x0, 0xd6, 0xb3, 0xff, 0xf9,
+    0xb5, 0x4f, 0xfe, 0xbe, 0x46, 0x4, 0x0, 0x0,
+    0x0, 0x0, 0x34, 0x74, 0xa0, 0xa2, 0x78, 0x3c,
+    0x0, 0x88, 0x3d, 0xff, 0xff, 0xff, 0x69, 0x7a,
+    0x0, 0x0, 0x28, 0xfe, 0xcf, 0xff, 0xd3, 0x9,
+    0x70, 0x86, 0xfe, 0x49, 0x83, 0x83, 0x63, 0x13,
+    0xe0, 0x84, 0x5, 0xd5, 0xff, 0x8b, 0xca, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x32, 0x9, 0xef, 0xff,
+    0xff, 0x45, 0xc3, 0xff, 0xff, 0x87, 0xc2, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x48, 0xf8, 0xfe, 0x9,
+    0x43, 0xd5, 0xff, 0xff, 0xcd, 0xfe, 0x24, 0x0,
+    0x0, 0x0, 0x0, 0xc, 0xe0, 0x7b, 0xff, 0xff,
+    0x95, 0x57, 0xff, 0xff, 0xff, 0x4d, 0x5c, 0x0,
+    0x0, 0x0, 0x0, 0x38, 0x31, 0xff, 0xff, 0xf9,
+    0xc3, 0xff, 0xff, 0xff, 0xed, 0x89, 0xfe, 0x64,
+    0x0, 0x0, 0x0, 0x0, 0xf6, 0xdb, 0xff, 0xff,
+    0xcb, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xe3, 0x47,
+    0xd4, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xb2, 0x5d, 0xff, 0xff, 0xef, 0x21,
+    0x78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0x1f,
+    0xf1, 0xff, 0xff, 0xbb, 0x3d, 0x4d, 0xd9, 0xff,
+    0xff, 0xcd, 0xfe, 0x1c, 0x0, 0x0, 0x2, 0xfe,
+    0xfd, 0xff, 0xff, 0x8f, 0xc8, 0x0, 0x0, 0xfc,
+    0xe5, 0xff, 0xff, 0xa7, 0xce, 0x0, 0x0, 0x0,
+    0x68, 0x6f, 0xff, 0xff, 0xff, 0x35, 0x26, 0x0,
+    0x0, 0x0, 0x68, 0x6f, 0xff, 0xff, 0xff, 0x35,
+    0x26, 0x0, 0x0, 0x0, 0x8, 0x58, 0xd0, 0xfe,
+    0x63, 0xc5, 0xff, 0xff, 0xff, 0xff, 0xcd, 0xe0,
+    0x0, 0x0, 0x0, 0x98, 0x87, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f,
+    0x26, 0x0, 0x0, 0x0, 0xc6, 0xb3, 0xff, 0xff,
+    0xff, 0xff, 0xd5, 0x79, 0x11, 0xe6, 0x72, 0x14,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x52, 0xfe, 0xaf, 0xff, 0xff, 0xf5, 0x21, 0x40,
+    0x0, 0x0, 0x86, 0x55, 0xff, 0xff, 0x53, 0xb2,
+    0x82, 0x11, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xef,
+    0x81, 0xc8, 0xc4, 0x7d, 0xff, 0xd9, 0xfa, 0x4,
+    0x0, 0x0, 0x0, 0x0, 0x96, 0x63, 0xff, 0xff,
+    0xe5, 0xfe, 0x7d, 0xff, 0xff, 0xd1, 0xfc, 0x12,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x7c, 0x7d, 0xfd, 0xff,
+    0xff, 0xff, 0xff, 0xd1, 0x25, 0xa0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x84, 0x25, 0xef, 0xff, 0xdf,
+    0xd, 0x57, 0xff, 0xff, 0xff, 0x4d, 0x5c, 0x0,
+    0x0, 0x0, 0x0, 0x64, 0x53, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9d, 0xf8,
+    0x16, 0x0, 0x0, 0x0, 0xfa, 0xe3, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb,
+    0x21, 0x68, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x22, 0xfe, 0xd1, 0xff, 0xff, 0x8f, 0xe4,
+    0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xdc,
+    0x53, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xd7, 0x2b, 0xa2, 0x0, 0x0, 0x0, 0x0, 0xfe,
+    0xe7, 0xff, 0xff, 0xbb, 0xfa, 0x32, 0x5e, 0xfe,
+    0xe5, 0xff, 0xff, 0xa9, 0xd4, 0x0, 0x0, 0x0,
+    0x3c, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x14, 0x0,
+    0x0, 0x0, 0x3c, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
+    0x14, 0x0, 0x0, 0x30, 0xe6, 0x1d, 0x89, 0xe1,
+    0xff, 0xff, 0xff, 0xff, 0xfd, 0xc7, 0x69, 0xb2,
+    0x0, 0x0, 0x0, 0x8c, 0x87, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f,
+    0x22, 0x0, 0x0, 0x0, 0x90, 0x53, 0xb7, 0xf5,
+    0xff, 0xff, 0xff, 0xff, 0xef, 0x9d, 0x33, 0xf6,
+    0x5a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6c,
+    0xfe, 0x89, 0xff, 0xff, 0xff, 0x8f, 0xea, 0xa,
+    0x0, 0x0, 0xdc, 0xa7, 0xff, 0xd7, 0xfe, 0x4c,
+    0xfe, 0xb7, 0xff, 0xff, 0xcd, 0xb1, 0xe9, 0xff,
+    0xdd, 0xea, 0x52, 0x29, 0xff, 0xfb, 0x11, 0x24,
+    0x0, 0x0, 0x0, 0x4, 0xee, 0xb3, 0xff, 0xff,
+    0xa5, 0xea, 0x27, 0xfd, 0xff, 0xff, 0x31, 0x62,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x90, 0x7f, 0xff, 0xff,
+    0xff, 0xff, 0xf7, 0x79, 0xfe, 0x7c, 0x0, 0x0,
+    0x0, 0x0, 0x2e, 0xfc, 0xb3, 0xff, 0xff, 0x55,
+    0xda, 0x57, 0xff, 0xff, 0xff, 0x4d, 0x5c, 0x0,
+    0x0, 0x0, 0x0, 0x6e, 0x6f, 0xff, 0xff, 0xff,
+    0xb5, 0x75, 0x8b, 0xed, 0xff, 0xff, 0xfd, 0x39,
+    0x66, 0x0, 0x0, 0x0, 0xfa, 0xe3, 0xff, 0xff,
+    0xfd, 0xa1, 0x55, 0x53, 0xb5, 0xff, 0xff, 0xff,
+    0x9b, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x7c, 0x4d, 0xff, 0xff, 0xf9, 0x21, 0x5e,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xb0,
+    0x11, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
+    0x77, 0xfe, 0x74, 0x0, 0x0, 0x0, 0x0, 0xe2,
+    0xb1, 0xff, 0xff, 0xf9, 0x5f, 0xfe, 0xd, 0x95,
+    0xff, 0xff, 0xff, 0xa9, 0xd4, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x68, 0x5f, 0xf5, 0xff, 0xff,
+    0xff, 0xff, 0xd7, 0x8b, 0x2b, 0xfa, 0xac, 0x38,
+    0x0, 0x0, 0x0, 0x58, 0x25, 0x49, 0x49, 0x49,
+    0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0xd,
+    0x12, 0x0, 0x0, 0x0, 0x26, 0x94, 0xf2, 0x15,
+    0x75, 0xc3, 0xfb, 0xff, 0xff, 0xff, 0xfd, 0x93,
+    0xac, 0x0, 0x0, 0x0, 0x0, 0x0, 0x68, 0x5,
+    0xa5, 0xff, 0xff, 0xff, 0xad, 0xfe, 0x58, 0x0,
+    0x0, 0x4, 0xfe, 0xdf, 0xff, 0x9d, 0xd6, 0x9c,
+    0x5b, 0xff, 0xff, 0x97, 0xfe, 0xfc, 0xbf, 0xff,
+    0xcb, 0xf0, 0xe, 0xfe, 0xf1, 0xff, 0x4b, 0x4a,
+    0x0, 0x0, 0x0, 0x3a, 0xf, 0xf3, 0xff, 0xff,
+    0x59, 0x8a, 0xfc, 0xcf, 0xff, 0xff, 0x8d, 0xca,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x66, 0x55, 0xad, 0xaf,
+    0xcb, 0xff, 0xff, 0xff, 0xad, 0xfe, 0x2c, 0x0,
+    0x0, 0x4, 0xc6, 0x5b, 0xff, 0xff, 0xad, 0xfe,
+    0xce, 0x57, 0xff, 0xff, 0xff, 0x4d, 0xaa, 0x4a,
+    0x8, 0x0, 0x0, 0x54, 0x49, 0x9b, 0xab, 0x99,
+    0xfe, 0xbe, 0xea, 0x4f, 0xff, 0xff, 0xff, 0x8f,
+    0xb2, 0x0, 0x0, 0x0, 0xfa, 0xe3, 0xff, 0xff,
+    0xb5, 0xfe, 0x94, 0xa4, 0xfe, 0xdb, 0xff, 0xff,
+    0xdb, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xdc, 0xa1, 0xff, 0xff, 0xc3, 0xf8, 0xa,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x64, 0x17,
+    0xcf, 0xff, 0xff, 0xf1, 0xb7, 0xc1, 0xfb, 0xff,
+    0xff, 0xa3, 0xfe, 0x2c, 0x0, 0x0, 0x0, 0x8a,
+    0x43, 0xfb, 0xff, 0xff, 0xff, 0xeb, 0xf7, 0xff,
+    0xff, 0xff, 0xff, 0xa9, 0xd4, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x90, 0x7b, 0xff, 0xff, 0xff,
+    0xaf, 0x41, 0xfe, 0xd8, 0x62, 0xe, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x2c, 0x88, 0xba, 0xce, 0xce,
+    0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xae, 0x72,
+    0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x46,
+    0xbe, 0xfc, 0x23, 0x8d, 0xf7, 0xff, 0xff, 0xb3,
+    0xd4, 0x0, 0x0, 0x0, 0x0, 0x6, 0xf0, 0x9f,
+    0xff, 0xff, 0xfd, 0x89, 0xfe, 0x76, 0x0, 0x0,
+    0x0, 0x1a, 0xf, 0xff, 0xff, 0x67, 0x94, 0xf0,
+    0xbb, 0xff, 0xf3, 0x13, 0x62, 0xf4, 0xd1, 0xff,
+    0xb9, 0xe2, 0x0, 0xfc, 0xe3, 0xff, 0x5b, 0x6c,
+    0x0, 0x0, 0x0, 0xa0, 0x6b, 0xff, 0xff, 0xef,
+    0x9, 0xac, 0xea, 0x8d, 0xff, 0xff, 0xd7, 0xfe,
+    0x16, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x28, 0x8c, 0xc2, 0xe2,
+    0xfe, 0x6d, 0xff, 0xff, 0xff, 0x5b, 0x84, 0x0,
+    0x0, 0x3a, 0x11, 0xe1, 0xff, 0xfd, 0x89, 0x7b,
+    0x7b, 0x9b, 0xff, 0xff, 0xff, 0x97, 0x7b, 0x1b,
+    0x1e, 0x0, 0x0, 0x20, 0x78, 0xb4, 0xca, 0xa8,
+    0x60, 0x0, 0x24, 0xfe, 0xe5, 0xff, 0xff, 0xb5,
+    0xd8, 0x0, 0x0, 0x0, 0xf8, 0xdf, 0xff, 0xff,
+    0xb1, 0xe2, 0x0, 0x0, 0xe0, 0x9d, 0xff, 0xff,
+    0xf9, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x1c, 0xfe, 0xe3, 0xff, 0xff, 0x85, 0xba, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd2, 0x99,
+    0xff, 0xff, 0xf1, 0x2f, 0xf6, 0xfc, 0x5f, 0xff,
+    0xff, 0xff, 0x5b, 0x8e, 0x0, 0x0, 0x0, 0x1c,
+    0xf2, 0x73, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xd5,
+    0xed, 0xff, 0xff, 0xa7, 0xce, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x7c, 0x7b, 0xff, 0xff, 0xff,
+    0xfd, 0xc9, 0x7b, 0x1b, 0xf6, 0xa2, 0x3a, 0x4,
+    0x0, 0x0, 0x0, 0x68, 0x4d, 0x91, 0x91, 0x91,
+    0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x19,
+    0x16, 0x0, 0x0, 0x0, 0x0, 0x2a, 0x8c, 0xec,
+    0xd, 0x6b, 0xbb, 0xf9, 0xff, 0xff, 0xff, 0xb3,
+    0xc2, 0x0, 0x0, 0x0, 0x0, 0x22, 0x17, 0xf9,
+    0xff, 0xff, 0x9f, 0xfc, 0x52, 0x0, 0x0, 0x0,
+    0x0, 0x3c, 0x39, 0xff, 0xff, 0x47, 0x66, 0x5,
+    0xf3, 0xff, 0xc3, 0xf6, 0x4, 0xfa, 0xe3, 0xff,
+    0xa7, 0xd2, 0x0, 0xfc, 0xe1, 0xff, 0x63, 0x72,
+    0x0, 0x0, 0x6, 0xf4, 0xb9, 0xff, 0xff, 0xd7,
+    0x7b, 0x7b, 0x7b, 0x95, 0xff, 0xff, 0xff, 0x39,
+    0x6c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x1c, 0x92, 0xca, 0xe2, 0xca, 0x90, 0x1a, 0x0,
+    0x3a, 0xfe, 0xed, 0xff, 0xff, 0xa1, 0xbe, 0x0,
+    0x0, 0x5c, 0x69, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x39,
+    0x30, 0x0, 0x0, 0x60, 0xba, 0xe4, 0xe6, 0xc6,
+    0x6a, 0x0, 0x0, 0xfa, 0xd3, 0xff, 0xff, 0xbf,
+    0xe0, 0x0, 0x0, 0x0, 0xf2, 0xd3, 0xff, 0xff,
+    0xc3, 0xf0, 0x0, 0x0, 0xc8, 0x8f, 0xff, 0xff,
+    0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x5a, 0x43, 0xff, 0xff, 0xff, 0x47, 0x64, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf6, 0xdd,
+    0xff, 0xff, 0xaf, 0xf4, 0x10, 0x30, 0xfe, 0xdd,
+    0xff, 0xff, 0xad, 0xcc, 0x0, 0x0, 0x0, 0x0,
+    0x40, 0xec, 0x31, 0x93, 0xb7, 0xb7, 0x83, 0xf,
+    0xf7, 0xff, 0xff, 0x99, 0xbe, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x4a, 0x19, 0x85, 0xdf, 0xff,
+    0xff, 0xff, 0xff, 0xf9, 0xbb, 0x6b, 0xf, 0x96,
+    0x0, 0x0, 0x0, 0x96, 0x87, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f,
+    0x26, 0x0, 0x0, 0x0, 0x74, 0xfe, 0x57, 0xad,
+    0xf1, 0xff, 0xff, 0xff, 0xff, 0xed, 0x9b, 0x2f,
+    0x86, 0x0, 0x0, 0x0, 0x0, 0x26, 0x41, 0xff,
+    0xff, 0xff, 0x5d, 0x84, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x54, 0x51, 0xff, 0xff, 0x2d, 0x66, 0x35,
+    0xff, 0xff, 0x9f, 0xd2, 0x4, 0xfe, 0xf3, 0xff,
+    0x93, 0xbc, 0xa, 0xfe, 0xef, 0xff, 0x57, 0x5e,
+    0x0, 0x0, 0x44, 0x17, 0xf7, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x95,
+    0xd2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x30, 0x41, 0xbb, 0xbb, 0xbb, 0x3d, 0x74, 0x0,
+    0x20, 0xfe, 0xe5, 0xff, 0xff, 0xaf, 0xcc, 0x0,
+    0x0, 0x5e, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x39,
+    0x30, 0x0, 0x0, 0xb4, 0x99, 0xc3, 0xcf, 0xa1,
+    0xe2, 0x8, 0x24, 0xfe, 0xe3, 0xff, 0xff, 0xb1,
+    0xd6, 0x0, 0x0, 0x0, 0xdc, 0xb1, 0xff, 0xff,
+    0xe7, 0x5, 0x3c, 0xc, 0xf0, 0xad, 0xff, 0xff,
+    0xed, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xa0, 0x7b, 0xff, 0xff, 0xf9, 0xb, 0x20, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfa, 0xef,
+    0xff, 0xff, 0xa9, 0xec, 0x4, 0x16, 0xfc, 0xd7,
+    0xff, 0xff, 0xc1, 0xde, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x12, 0x66, 0xb4, 0xd6, 0xd4, 0xdc, 0x41,
+    0xff, 0xff, 0xff, 0x75, 0x90, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x6, 0x52, 0xcc, 0xfe, 0x5f,
+    0xc1, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xd6,
+    0x0, 0x0, 0x0, 0x8e, 0x87, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f,
+    0x22, 0x0, 0x0, 0x0, 0xb8, 0xab, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xd3, 0x77, 0xf, 0xe4, 0x6e,
+    0x10, 0x0, 0x0, 0x0, 0x0, 0x20, 0x13, 0x3f,
+    0x3f, 0x3f, 0x13, 0x32, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x5a, 0x4f, 0xff, 0xff, 0x2f, 0x7c, 0x57,
+    0xff, 0xff, 0x8d, 0xc0, 0x1a, 0xf, 0xff, 0xff,
+    0x7d, 0xa4, 0x54, 0x21, 0xff, 0xff, 0x29, 0x36,
+    0x0, 0x0, 0xaa, 0x73, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdd,
+    0xfe, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x30, 0x3b, 0xff, 0xff, 0xff, 0x9d, 0xfe, 0xce,
+    0xf0, 0x49, 0xff, 0xff, 0xff, 0x91, 0xae, 0x0,
+    0x0, 0x34, 0x1f, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b,
+    0x6b, 0x91, 0xff, 0xff, 0xff, 0x8b, 0x6b, 0x17,
+    0x1c, 0x0, 0x0, 0xc4, 0xbb, 0xff, 0xff, 0xed,
+    0x1b, 0xe0, 0xee, 0x4f, 0xff, 0xff, 0xff, 0x83,
+    0xa6, 0x0, 0x0, 0x0, 0x9a, 0x71, 0xff, 0xff,
+    0xff, 0x6f, 0xf8, 0xe4, 0x25, 0xf1, 0xff, 0xff,
+    0xbf, 0xec, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xd2, 0xa3, 0xff, 0xff, 0xdb, 0xfc, 0x2, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf6, 0xdb,
+    0xff, 0xff, 0xe3, 0xf, 0xdc, 0xec, 0x39, 0xf9,
+    0xff, 0xff, 0xab, 0xcc, 0x0, 0x0, 0x0, 0x0,
+    0x1c, 0xb0, 0xd0, 0xdc, 0xbc, 0xd8, 0x9, 0xbf,
+    0xff, 0xff, 0xf9, 0x27, 0x4a, 0x0, 0x0, 0x0,
+    0x3c, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x14, 0x0,
+    0x0, 0x0, 0x3c, 0xcc, 0xf2, 0xf6, 0xdc, 0x78,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30, 0xa2,
+    0xfa, 0x35, 0xa1, 0xf1, 0xff, 0xff, 0xcd, 0xee,
+    0x0, 0x0, 0x0, 0x5a, 0x2d, 0x57, 0x57, 0x57,
+    0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0xf,
+    0x14, 0x0, 0x0, 0x0, 0xda, 0xb3, 0xff, 0xff,
+    0xf9, 0xb1, 0x4b, 0xfe, 0xbc, 0x44, 0x4, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x2a, 0xe4, 0xfa,
+    0xfe, 0xfc, 0xe6, 0x2e, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x42, 0x45, 0xff, 0xff, 0x3f, 0x90, 0x59,
+    0xff, 0xff, 0x95, 0xda, 0x9e, 0x39, 0xff, 0xff,
+    0x6b, 0x96, 0xd8, 0x85, 0xff, 0xd9, 0xfe, 0xe,
+    0x0, 0x8, 0xf6, 0xc1, 0xff, 0xff, 0xcd, 0x63,
+    0x63, 0x63, 0x63, 0x63, 0x7f, 0xff, 0xff, 0xff,
+    0x43, 0x76, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x18, 0xfe, 0xd9, 0xff, 0xff, 0xff, 0xbb, 0x89,
+    0x9f, 0xf1, 0xff, 0xff, 0xf9, 0x39, 0x68, 0x0,
+    0x0, 0x8, 0x3e, 0x6a, 0x86, 0x86, 0x86, 0x86,
+    0xb8, 0x57, 0xff, 0xff, 0xff, 0x4d, 0x9e, 0x3e,
+    0x6, 0x0, 0x0, 0xa0, 0x6d, 0xff, 0xff, 0xff,
+    0xdd, 0x8f, 0x99, 0xef, 0xff, 0xff, 0xf3, 0x21,
+    0x54, 0x0, 0x0, 0x0, 0x3e, 0xb, 0xdf, 0xff,
+    0xff, 0xf9, 0xa1, 0x8f, 0xdf, 0xff, 0xff, 0xff,
+    0x57, 0x9c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xf0, 0xc9, 0xff, 0xff, 0xc1, 0xec, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd0, 0x99,
+    0xff, 0xff, 0xff, 0xd9, 0x8f, 0x97, 0xeb, 0xff,
+    0xff, 0xff, 0x5f, 0x8e, 0x0, 0x0, 0x0, 0x0,
+    0x52, 0x43, 0xd5, 0xa1, 0x89, 0x91, 0xd5, 0xff,
+    0xff, 0xff, 0xa1, 0xf2, 0xe, 0x0, 0x0, 0x0,
+    0x68, 0x6f, 0xff, 0xff, 0xff, 0x35, 0x26, 0x0,
+    0x0, 0x0, 0x74, 0x71, 0xe3, 0xe3, 0xaf, 0xc4,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x14, 0x76, 0xe8, 0x15, 0x7f, 0xdb, 0xcd, 0xdc,
+    0x0, 0x0, 0x0, 0x10, 0x36, 0x58, 0x6a, 0x6a,
+    0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x4e, 0x2c,
+    0x4, 0x0, 0x0, 0x0, 0xc2, 0xb3, 0xe5, 0x8f,
+    0x23, 0xf4, 0x8c, 0x22, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x4a, 0x51, 0xf5,
+    0xf5, 0xf5, 0x57, 0x4e, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x24, 0x1b, 0xff, 0xff, 0x6b, 0xac, 0x2d,
+    0xff, 0xff, 0xd5, 0xb, 0x1b, 0xc3, 0xff, 0xff,
+    0x6d, 0xfa, 0x27, 0xe7, 0xff, 0x7b, 0xc4, 0x0,
+    0x0, 0x4c, 0x1f, 0xf9, 0xff, 0xff, 0x7b, 0xd2,
+    0x7a, 0x7a, 0x7a, 0x8a, 0xfe, 0xe9, 0xff, 0xff,
+    0x9b, 0xda, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xb6, 0x49, 0xf1, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0x7f, 0xf0, 0x16, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x6a, 0x57, 0xff, 0xff, 0xff, 0x4d, 0x5c, 0x0,
+    0x0, 0x0, 0x0, 0x3a, 0xfe, 0xb3, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x71, 0xe4,
+    0xa, 0x0, 0x0, 0x0, 0x2, 0xc0, 0x47, 0xef,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97,
+    0xfc, 0x2a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xfc, 0xe5, 0xff, 0xff, 0xa7, 0xd6, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x64, 0x19,
+    0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xb1, 0xfe, 0x30, 0x0, 0x0, 0x0, 0x0,
+    0x76, 0x71, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xc5, 0xd, 0x6c, 0x0, 0x0, 0x0, 0x0,
+    0x8c, 0x6f, 0xff, 0xff, 0xff, 0x35, 0x36, 0x0,
+    0x0, 0x0, 0x9c, 0x7f, 0xff, 0xff, 0xc5, 0xe4,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x6, 0x4e, 0xc8, 0xec, 0x3f, 0xa4,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x88, 0x3f, 0x5, 0xd6,
+    0x5e, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x68, 0x57, 0xff,
+    0xff, 0xff, 0x5b, 0x6e, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x8, 0xfe, 0xe3, 0xff, 0xa1, 0xe6, 0xfe,
+    0xcf, 0xff, 0xff, 0xf3, 0xf9, 0xe9, 0xe1, 0xff,
+    0xdb, 0xa7, 0xeb, 0xff, 0xc3, 0xfe, 0x44, 0x0,
+    0x0, 0xb4, 0x7b, 0xff, 0xff, 0xfd, 0x27, 0x50,
+    0x0, 0x0, 0x0, 0x0, 0xe6, 0xad, 0xff, 0xff,
+    0xe3, 0xfe, 0x24, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x20, 0xdc, 0x31, 0xb3, 0xf7, 0xff, 0xff,
+    0xff, 0xfd, 0xcb, 0x57, 0xfa, 0x4a, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x4c, 0x57, 0xff, 0xff, 0xff, 0x4d, 0x42, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x7c, 0xfe, 0x7f, 0xe1,
+    0xff, 0xff, 0xff, 0xff, 0xd9, 0x61, 0xf8, 0x3e,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x1e, 0xda, 0x37,
+    0xbb, 0xfb, 0xff, 0xff, 0xff, 0xe3, 0x75, 0xfe,
+    0x5e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xf8, 0xf7, 0xff, 0xff, 0x93, 0xa4, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xae,
+    0x17, 0x9d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xe3,
+    0x83, 0x5, 0x7a, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x64, 0x65, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xe5,
+    0x87, 0x5, 0x92, 0x2, 0x0, 0x0, 0x0, 0x0,
+    0x68, 0x6f, 0xff, 0xff, 0xff, 0x35, 0x26, 0x0,
+    0x0, 0x0, 0xa6, 0x7f, 0xff, 0xff, 0xc1, 0xe4,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x16, 0x16, 0x16,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x16, 0x16, 0x16, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x4c, 0x57, 0xff,
+    0xff, 0xff, 0x5b, 0x52, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xde, 0xa7, 0xff, 0xe9, 0xd, 0xc6,
+    0x39, 0xdf, 0xff, 0xff, 0xe5, 0x4b, 0x5b, 0xf3,
+    0xff, 0xff, 0xf5, 0xa3, 0x13, 0x92, 0x0, 0x0,
+    0x0, 0xb2, 0xc7, 0xff, 0xff, 0xcf, 0xfc, 0xc,
+    0x0, 0x0, 0x0, 0x0, 0x90, 0x63, 0xff, 0xff,
+    0xff, 0x4d, 0x24, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x12, 0x86, 0xf2, 0xd, 0x47, 0x59,
+    0x4d, 0x1b, 0xfc, 0xaa, 0x2a, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x2a, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x24, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x48, 0xcc, 0xfe,
+    0x31, 0x57, 0x55, 0x2d, 0xfe, 0xbc, 0x30, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16, 0x90,
+    0xf6, 0x19, 0x4d, 0x57, 0x39, 0xfe, 0xce, 0x40,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xe4, 0xfe, 0xfe, 0xfe, 0xfe, 0x5c, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6,
+    0x68, 0xe4, 0xfe, 0x3d, 0x57, 0x55, 0x31, 0xfe,
+    0xd0, 0x4c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x34, 0xca, 0xfe, 0x2f, 0x4f, 0x55, 0x35, 0xfe,
+    0xd4, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x3c, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x14, 0x0,
+    0x0, 0x0, 0xbe, 0x89, 0xff, 0xff, 0xa7, 0xca,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x2a, 0xfe, 0xfe,
+    0xfe, 0xfe, 0xfe, 0x2c, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x82, 0x47, 0xff, 0xff, 0x91, 0xf4,
+    0xca, 0x5, 0x45, 0x43, 0x9, 0xd2, 0xe6, 0x1f,
+    0x55, 0x49, 0xf, 0xec, 0x6e, 0x4, 0x0, 0x0,
+    0x0, 0x94, 0xfe, 0xfe, 0xfe, 0xfe, 0xa0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x32, 0xfe, 0xfe, 0xfe,
+    0xfe, 0xfe, 0x24, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x2, 0x22, 0x48, 0x5e,
+    0x4e, 0x2a, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12,
+    0x38, 0x58, 0x56, 0x34, 0x10, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x6, 0x2a, 0x4c, 0x58, 0x3c, 0x16, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x18, 0x3e, 0x5c, 0x58, 0x38, 0x12,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x10, 0x32, 0x54, 0x54, 0x38, 0x14,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x6, 0xf0, 0xaf, 0xff, 0xff, 0x5d, 0x88,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x1e, 0xfe, 0xaf, 0xff, 0xfb, 0x6b,
+    0xfa, 0x8c, 0x46, 0x36, 0x1c, 0x0, 0x2c, 0x58,
+    0x6e, 0x52, 0x22, 0x4, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x18, 0x17, 0xf1, 0xff, 0xd1, 0xfe, 0x2e,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x7c, 0x1b, 0xd9, 0xff, 0xfd,
+    0xab, 0x35, 0xfe, 0xf2, 0xee, 0xf8, 0xfe, 0x4f,
+    0x2f, 0x5c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x18, 0x37, 0xd9, 0xf1, 0x41, 0xae, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x8, 0xb4, 0x1f, 0xc7, 0xff,
+    0xff, 0xff, 0xdf, 0xc7, 0xbf, 0xd3, 0xef, 0xff,
+    0x87, 0x78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x14, 0xb4, 0x5, 0x31, 0xde, 0x1c, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x8, 0x98, 0xfe, 0x67,
+    0xc7, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd3,
+    0x5d, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x10, 0x10, 0x10, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x36, 0xac,
+    0xf6, 0x13, 0x49, 0x5f, 0x6b, 0x57, 0x23, 0xfc,
+    0xb6, 0x2e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x4, 0x24, 0x4c, 0x72, 0x78, 0x60, 0x34, 0xc,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x4, 0xe, 0x1a, 0x20, 0x20, 0x20, 0x1e,
+    0x14, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x20, 0x4e, 0x72, 0x72, 0x4e, 0x20, 0x2, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xe, 0x1a,
+    0x20, 0x20, 0x20, 0x1c, 0x10, 0x6, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x4, 0xe, 0x1a, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x18, 0xe, 0x2, 0x0,
+    0x0, 0x4, 0xe, 0x1a, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0xe, 0x2,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e,
+    0x4a, 0x70, 0x74, 0x54, 0x28, 0x4, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xe, 0x1a,
+    0x20, 0x16, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xc, 0x16, 0x20, 0x1a, 0xe, 0x4, 0x0, 0x0,
+    0x0, 0x2, 0xc, 0x18, 0x20, 0x18, 0xc, 0x2,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x2, 0xe, 0x18, 0x20, 0x16, 0xc,
+    0x0, 0x0, 0x0, 0x0, 0x4, 0xe, 0x1a, 0x20,
+    0x16, 0xc, 0x0, 0x0, 0x0, 0x0, 0xa, 0x16,
+    0x20, 0x20, 0x18, 0xc, 0x2, 0x0, 0x0, 0x4,
+    0xe, 0x1a, 0x20, 0x16, 0xc, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
+    0xe, 0x1a, 0x20, 0x20, 0x16, 0xc, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x16, 0x20,
+    0x20, 0x1a, 0xe, 0x4, 0x0, 0x0, 0x0, 0x4,
+    0xe, 0x1a, 0x20, 0x16, 0xc, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xc, 0x16, 0x20, 0x1a, 0xe, 0x4,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x14, 0x3e, 0x66, 0x72, 0x56, 0x28, 0x4, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x52, 0x11, 0x23, 0x23, 0x23, 0x23, 0x23,
+    0x1f, 0x9, 0xfe, 0xea, 0x9e, 0x30, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x60, 0xe2,
+    0x5, 0x49, 0x65, 0x65, 0x49, 0xb, 0xec, 0x76,
+    0x8, 0x0, 0x0, 0x0, 0x0, 0x52, 0x11, 0x23,
+    0x23, 0x23, 0x23, 0x23, 0x15, 0xfe, 0xf8, 0xc2,
+    0x5c, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x52, 0x11, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
+    0x23, 0x23, 0x23, 0x23, 0x23, 0xd, 0x32, 0x0,
+    0x0, 0x52, 0x11, 0x23, 0x23, 0x23, 0x23, 0x23,
+    0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0xd, 0x34,
+    0x0, 0x0, 0x0, 0x0, 0x4, 0x5c, 0xe0, 0x5,
+    0x45, 0x65, 0x67, 0x4f, 0x13, 0xf6, 0x8e, 0x14,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x52, 0x11, 0x23,
+    0x23, 0x23, 0xfe, 0x2, 0x0, 0x0, 0x0, 0x2,
+    0xfe, 0x23, 0x23, 0x23, 0x11, 0x4e, 0x0, 0x0,
+    0x0, 0x24, 0xb, 0x23, 0x23, 0x23, 0xb, 0x2e,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x32, 0xd, 0x23, 0x23, 0x23, 0x9,
+    0x1c, 0x0, 0x0, 0x0, 0x52, 0x11, 0x23, 0x23,
+    0x23, 0xfe, 0x2, 0x0, 0x0, 0x40, 0xfe, 0x21,
+    0x23, 0x23, 0x23, 0xf, 0x4, 0x0, 0x0, 0x52,
+    0x11, 0x23, 0x23, 0x23, 0xfe, 0x2, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x52,
+    0x11, 0x23, 0x23, 0x23, 0x23, 0x5, 0x30, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x40, 0x9, 0x23, 0x23,
+    0x23, 0x23, 0xf, 0x44, 0x0, 0x0, 0x0, 0x52,
+    0x11, 0x23, 0x23, 0x23, 0xfe, 0x42, 0x0, 0x0,
+    0x0, 0x2, 0xfe, 0x23, 0x23, 0x23, 0x11, 0x4e,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0xc8,
+    0xfe, 0x35, 0x5d, 0x67, 0x51, 0x11, 0xf2, 0x8a,
+    0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x88, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xeb, 0xbd, 0x5f, 0xfe, 0x70, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x8, 0xa6, 0x11, 0x97,
+    0xef, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xa7, 0x1f,
+    0xc2, 0xe, 0x0, 0x0, 0x0, 0x88, 0x87, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xd1, 0x8d,
+    0x1b, 0xd6, 0x2c, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x88, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x58, 0x0,
+    0x0, 0x88, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x63, 0x5c,
+    0x0, 0x0, 0x0, 0x6, 0xa4, 0xf, 0x91, 0xed,
+    0xff, 0xff, 0xff, 0xff, 0xfb, 0xbb, 0x35, 0xdc,
+    0x1c, 0x0, 0x0, 0x0, 0x0, 0x88, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0x4, 0x0, 0x0, 0x0, 0x4,
+    0xd, 0xff, 0xff, 0xff, 0x83, 0x82, 0x0, 0x0,
+    0x0, 0x42, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x52,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x58, 0x5f, 0xff, 0xff, 0xff, 0x43,
+    0x36, 0x0, 0x0, 0x0, 0x88, 0x87, 0xff, 0xff,
+    0xff, 0xd, 0x4, 0x0, 0xe, 0xe0, 0x75, 0xff,
+    0xff, 0xff, 0xd9, 0x15, 0x4, 0x0, 0x0, 0x88,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x4, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x88,
+    0x87, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x94, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xac, 0x75, 0xff, 0xff,
+    0xff, 0xff, 0x77, 0x76, 0x0, 0x0, 0x0, 0x88,
+    0x87, 0xff, 0xff, 0xff, 0x77, 0xda, 0x8, 0x0,
+    0x0, 0x4, 0xd, 0xff, 0xff, 0xff, 0x83, 0x82,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x7a, 0xfe, 0x75,
+    0xdf, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xb5, 0x35,
+    0xde, 0x2a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xa7, 0xfe, 0x36,
+    0x0, 0x0, 0x0, 0x0, 0x86, 0x1b, 0xd1, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3,
+    0x29, 0x94, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xed, 0x59, 0xee, 0x26, 0x0, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x68, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x63, 0x6e,
+    0x0, 0x0, 0x0, 0x86, 0x19, 0xcf, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x43,
+    0xb8, 0x0, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0x6,
+    0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0,
+    0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x43,
+    0x4c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff,
+    0xff, 0xd, 0x6, 0x0, 0x8a, 0x27, 0xef, 0xff,
+    0xff, 0xf9, 0x43, 0xb8, 0x4, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xff, 0xb1, 0xee, 0x4,
+    0x0, 0x0, 0x0, 0xa, 0xf8, 0xc3, 0xff, 0xff,
+    0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xeb, 0x1b, 0x6e, 0x0,
+    0x0, 0x6, 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6,
+    0x0, 0x0, 0x0, 0x0, 0x60, 0x5, 0xb1, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1,
+    0x57, 0xde, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xad, 0xad,
+    0xb1, 0xc7, 0xfb, 0xff, 0xff, 0xff, 0x67, 0x9a,
+    0x0, 0x0, 0x0, 0x20, 0xfe, 0xb7, 0xff, 0xff,
+    0xff, 0xbf, 0x7d, 0x89, 0xbd, 0xff, 0xff, 0xff,
+    0xc3, 0xfe, 0x1c, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xad, 0xad, 0xb7, 0xd7, 0xff, 0xff,
+    0xff, 0xf9, 0x51, 0xc6, 0x2, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xad, 0xad, 0xad,
+    0xad, 0xad, 0xad, 0xad, 0xad, 0x41, 0x44, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xad, 0xad,
+    0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0x43, 0x4a,
+    0x0, 0x0, 0x24, 0xfe, 0xb9, 0xff, 0xff, 0xff,
+    0xcd, 0x85, 0x81, 0xb1, 0xfd, 0xff, 0xff, 0xdb,
+    0x9, 0x32, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0x6,
+    0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0,
+    0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x43,
+    0x4c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff,
+    0xff, 0xd, 0x6, 0x36, 0xfe, 0xb9, 0xff, 0xff,
+    0xff, 0x87, 0xf0, 0x1c, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf, 0x3a,
+    0x0, 0x0, 0x0, 0x50, 0x21, 0xfb, 0xff, 0xff,
+    0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xff, 0xa1, 0xf6, 0x1a,
+    0x0, 0x6, 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6,
+    0x0, 0x0, 0x0, 0x12, 0xf4, 0x97, 0xff, 0xff,
+    0xff, 0xd9, 0x91, 0x83, 0xad, 0xf9, 0xff, 0xff,
+    0xf1, 0x35, 0x8e, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xd8,
+    0xe0, 0xfa, 0x43, 0xf7, 0xff, 0xff, 0xb5, 0xd6,
+    0x0, 0x0, 0x0, 0x7c, 0x49, 0xff, 0xff, 0xff,
+    0xa3, 0xfe, 0xc6, 0xc6, 0xfe, 0x95, 0xff, 0xff,
+    0xff, 0x43, 0x6a, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0xda, 0xe8, 0xfe, 0x53, 0xed,
+    0xff, 0xff, 0xe3, 0xb, 0x40, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xd8, 0xd6,
+    0xd6, 0xd6, 0xd6, 0xd6, 0xbc, 0x84, 0x1a, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xd8,
+    0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xbc, 0x84, 0x1c,
+    0x0, 0x0, 0x80, 0x4f, 0xff, 0xff, 0xff, 0xb1,
+    0xfe, 0xce, 0xbe, 0xfa, 0x77, 0xff, 0xff, 0xff,
+    0x63, 0x8c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0x6,
+    0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0,
+    0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x43,
+    0x4c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff,
+    0xff, 0xd, 0xe, 0xd6, 0x69, 0xff, 0xff, 0xff,
+    0xc7, 0xfe, 0x50, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6b, 0xa0,
+    0x0, 0x0, 0x0, 0xba, 0x7f, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x41, 0xa2,
+    0x0, 0x6, 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6,
+    0x0, 0x0, 0x0, 0x68, 0x31, 0xfb, 0xff, 0xff,
+    0xc1, 0x9, 0xda, 0xc0, 0xf8, 0x51, 0xf9, 0xff,
+    0xff, 0xb9, 0xf8, 0x8, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6,
+    0x0, 0x1c, 0xfc, 0xcf, 0xff, 0xff, 0xcb, 0xe6,
+    0x0, 0x0, 0x0, 0xca, 0xa1, 0xff, 0xff, 0xf7,
+    0x21, 0x72, 0x0, 0x0, 0x60, 0x13, 0xfb, 0xff,
+    0xff, 0x91, 0x98, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0x6, 0x0, 0x26, 0xde, 0x67,
+    0xff, 0xff, 0xff, 0x73, 0x9c, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xce, 0xa3, 0xff, 0xff, 0xf7, 0x27,
+    0x80, 0x0, 0x0, 0x42, 0xfe, 0xe3, 0xff, 0xff,
+    0xa7, 0x9a, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0x6,
+    0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0,
+    0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x43,
+    0x4c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff,
+    0xff, 0xd, 0x7e, 0x1f, 0xeb, 0xff, 0xff, 0xef,
+    0x2d, 0x9a, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xeb, 0xff, 0xff, 0xbb, 0xf4,
+    0x6, 0x0, 0x10, 0xfc, 0xcb, 0xff, 0xff, 0xeb,
+    0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc9, 0xfe,
+    0x3a, 0x6, 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6,
+    0x0, 0x0, 0x0, 0xbe, 0x93, 0xff, 0xff, 0xfb,
+    0x37, 0x96, 0x0, 0x0, 0x26, 0xf6, 0xa9, 0xff,
+    0xff, 0xfd, 0x1f, 0x3a, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6,
+    0x6, 0x5e, 0xfe, 0xd9, 0xff, 0xff, 0xb5, 0xd4,
+    0x0, 0x0, 0x0, 0xec, 0xcb, 0xff, 0xff, 0xcb,
+    0xf8, 0xa, 0x0, 0x0, 0x4, 0xf4, 0xa3, 0xbd,
+    0xbd, 0x83, 0x8a, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x34, 0xfe,
+    0xe7, 0xff, 0xff, 0xb1, 0xd8, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x4c, 0x46,
+    0x46, 0x46, 0x46, 0x30, 0x1a, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xee, 0xcd, 0xff, 0xff, 0xcd, 0xfa,
+    0xc, 0x0, 0x0, 0x0, 0xc4, 0x49, 0x63, 0x63,
+    0x49, 0x82, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0x6,
+    0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0,
+    0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x43,
+    0x4c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff,
+    0xff, 0xd, 0xfc, 0xaf, 0xff, 0xff, 0xff, 0x6b,
+    0xde, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xcb, 0xe3, 0xff, 0xf7, 0x17,
+    0x44, 0x0, 0x5e, 0x2d, 0xfd, 0xff, 0xd3, 0xdb,
+    0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x6d,
+    0xd0, 0xa, 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6,
+    0x0, 0x0, 0x0, 0xe8, 0xc5, 0xff, 0xff, 0xd3,
+    0xfc, 0x16, 0x0, 0x0, 0x0, 0x8e, 0x53, 0xff,
+    0xff, 0xff, 0x65, 0x72, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xfe,
+    0xfe, 0x17, 0x91, 0xff, 0xff, 0xff, 0x5b, 0x96,
+    0x0, 0x0, 0x0, 0xf6, 0xdb, 0xff, 0xff, 0xb3,
+    0xe2, 0x0, 0x0, 0x0, 0x0, 0x6c, 0xba, 0xde,
+    0xd8, 0xac, 0x4c, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0xf2,
+    0xc3, 0xff, 0xff, 0xcf, 0xf0, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0x43, 0x3f, 0x3f,
+    0x3f, 0x3f, 0x3f, 0x3f, 0x9, 0xe, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xf0,
+    0xf0, 0xf0, 0xf0, 0xf0, 0xda, 0xa0, 0xa, 0x0,
+    0x0, 0x0, 0xf6, 0xdb, 0xff, 0xff, 0xb3, 0xe4,
+    0x0, 0x0, 0x0, 0x0, 0x20, 0x4c, 0x70, 0x70,
+    0x4c, 0x20, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
+    0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0,
+    0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x43,
+    0x4c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff,
+    0xff, 0x33, 0x69, 0xff, 0xff, 0xff, 0xb1, 0xfe,
+    0x38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xd5, 0x99, 0xff, 0xff, 0x75,
+    0xac, 0x0, 0xc6, 0x89, 0xff, 0xff, 0x85, 0xe3,
+    0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xe5,
+    0x13, 0x66, 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6,
+    0x0, 0x0, 0x0, 0xf4, 0xd9, 0xff, 0xff, 0xb7,
+    0xe6, 0x0, 0x0, 0x0, 0x0, 0x32, 0x27, 0xff,
+    0xff, 0xff, 0x7d, 0x9a, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xf1, 0xf1,
+    0xf3, 0xff, 0xff, 0xff, 0xf5, 0x81, 0xfc, 0x2c,
+    0x0, 0x0, 0x0, 0xf8, 0xdf, 0xff, 0xff, 0xad,
+    0xd8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0xe4,
+    0xb7, 0xff, 0xff, 0xdb, 0xf6, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0x29, 0x1c, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xcf, 0xcd,
+    0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0x21, 0x18, 0x0,
+    0x0, 0x0, 0xf8, 0xdf, 0xff, 0xff, 0xad, 0xd8,
+    0x0, 0x68, 0xc0, 0xe4, 0xec, 0xec, 0xec, 0xe4,
+    0xbe, 0x62, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xcf, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
+    0xcf, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0,
+    0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x43,
+    0x4c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xe5, 0x19, 0x82,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xdd, 0x3b, 0xff, 0xff, 0xc3,
+    0xf8, 0x20, 0xfe, 0xd5, 0xff, 0xfb, 0x25, 0xeb,
+    0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0xbb, 0xff, 0xff,
+    0x99, 0xf0, 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6,
+    0x0, 0x0, 0x0, 0xf8, 0xdf, 0xff, 0xff, 0xad,
+    0xda, 0x0, 0x0, 0x0, 0x0, 0x10, 0xd, 0xff,
+    0xff, 0xff, 0x87, 0xa8, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xe3, 0x81, 0xfe, 0x6a,
+    0x0, 0x0, 0x0, 0xfa, 0xdf, 0xff, 0xff, 0xad,
+    0xd6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0xe0,
+    0xb7, 0xff, 0xff, 0xdd, 0xf8, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0x29, 0x22, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x22, 0x0,
+    0x0, 0x0, 0xfa, 0xdf, 0xff, 0xff, 0xad, 0xd6,
+    0x0, 0xc4, 0x9f, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
+    0x9b, 0xbe, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0,
+    0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x43,
+    0x4c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0x27, 0x90,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xe5, 0xfe, 0xd3, 0xff, 0xfb,
+    0x21, 0x98, 0x39, 0xff, 0xff, 0xc3, 0xfe, 0xf3,
+    0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x31, 0xf7, 0xff,
+    0xf9, 0x37, 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6,
+    0x0, 0x0, 0x0, 0xfa, 0xdf, 0xff, 0xff, 0xad,
+    0xd6, 0x0, 0x0, 0x0, 0x0, 0x6, 0xd, 0xff,
+    0xff, 0xff, 0x87, 0xac, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0x93, 0x91,
+    0x91, 0x95, 0xbb, 0xff, 0xff, 0xff, 0xa1, 0xf6,
+    0x12, 0x0, 0x0, 0xf8, 0xdf, 0xff, 0xff, 0xad,
+    0xda, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0xe4,
+    0xb7, 0xff, 0xff, 0xdb, 0xf6, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0x9d, 0x9b, 0x9b,
+    0x9b, 0x9b, 0x9b, 0x9b, 0x19, 0x14, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xef, 0xef,
+    0xef, 0xef, 0xef, 0xef, 0xef, 0x27, 0x1a, 0x0,
+    0x0, 0x0, 0xf8, 0xdf, 0xff, 0xff, 0xad, 0xda,
+    0x0, 0xda, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xc7, 0xe4, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef,
+    0xef, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0,
+    0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x43,
+    0x4c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff,
+    0xff, 0xe9, 0xe9, 0xff, 0xff, 0xff, 0xbb, 0xfe,
+    0x3c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xef, 0xfe, 0x85, 0xff, 0xff,
+    0x7d, 0xf2, 0x93, 0xff, 0xff, 0x71, 0xfe, 0xfb,
+    0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0xec, 0x93, 0xff,
+    0xff, 0xbf, 0xd, 0xff, 0xff, 0xff, 0x83, 0xa6,
+    0x0, 0x0, 0x0, 0xf8, 0xdf, 0xff, 0xff, 0xad,
+    0xda, 0x0, 0x0, 0x0, 0x0, 0x12, 0xd, 0xff,
+    0xff, 0xff, 0x87, 0xa8, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xba,
+    0xba, 0xcc, 0xfe, 0x8b, 0xff, 0xff, 0xfb, 0x31,
+    0x46, 0x0, 0x0, 0xf6, 0xdb, 0xff, 0xff, 0xb5,
+    0xe4, 0x0, 0x0, 0x0, 0x0, 0x6c, 0xb8, 0xdc,
+    0xd6, 0xa8, 0x4c, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0xf4,
+    0xc5, 0xff, 0xff, 0xcd, 0xee, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xc8, 0xc6,
+    0xc6, 0xc6, 0xc6, 0xa4, 0x68, 0x6, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xfe,
+    0xfe, 0xfe, 0xfe, 0xfe, 0xf8, 0xd4, 0xc, 0x0,
+    0x0, 0x0, 0xf6, 0xdb, 0xff, 0xff, 0xb5, 0xe6,
+    0x0, 0xc2, 0x9b, 0xc1, 0xc1, 0xef, 0xff, 0xff,
+    0xc7, 0xec, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
+    0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0,
+    0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x43,
+    0x4c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff,
+    0xff, 0xd, 0xfe, 0xc1, 0xff, 0xff, 0xff, 0x71,
+    0xde, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xf7, 0xfe, 0x25, 0xfb, 0xff,
+    0xcb, 0xfe, 0xdd, 0xff, 0xf3, 0x11, 0xf, 0xff,
+    0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x60, 0xf, 0xe3,
+    0xff, 0xff, 0x67, 0xff, 0xff, 0xff, 0x83, 0xa6,
+    0x0, 0x0, 0x0, 0xf4, 0xd9, 0xff, 0xff, 0xbb,
+    0xe8, 0x0, 0x0, 0x0, 0x0, 0x36, 0x2b, 0xff,
+    0xff, 0xff, 0x7b, 0x98, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6,
+    0x0, 0x0, 0x70, 0x35, 0xff, 0xff, 0xff, 0x6b,
+    0x74, 0x0, 0x0, 0xec, 0xcb, 0xff, 0xff, 0xcd,
+    0xfa, 0xc, 0x0, 0x0, 0x6, 0xf6, 0xa3, 0xbb,
+    0xbb, 0x81, 0x8e, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x3c, 0x5,
+    0xeb, 0xff, 0xff, 0xaf, 0xd6, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xec, 0xcb, 0xff, 0xff, 0xcf, 0xfa,
+    0x12, 0x62, 0xb8, 0xe0, 0xfe, 0xcb, 0xff, 0xff,
+    0xc7, 0xec, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0x6,
+    0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0,
+    0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70,
+    0x0, 0x0, 0x34, 0xe8, 0xfc, 0xfe, 0xfc, 0xe6,
+    0x1a, 0x0, 0x80, 0x5f, 0xff, 0xff, 0xff, 0x43,
+    0x44, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff,
+    0xff, 0xd, 0x98, 0x31, 0xf3, 0xff, 0xff, 0xef,
+    0x27, 0x8e, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0x5, 0xfa, 0xc1, 0xff,
+    0xfd, 0x5d, 0xff, 0xff, 0xb1, 0xf0, 0x21, 0xff,
+    0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0xa, 0xca, 0x65,
+    0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0x83, 0xa6,
+    0x0, 0x0, 0x0, 0xe8, 0xc3, 0xff, 0xff, 0xd5,
+    0xfe, 0x1a, 0x0, 0x0, 0x0, 0x92, 0x55, 0xff,
+    0xff, 0xff, 0x61, 0x6e, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6,
+    0x0, 0x0, 0x8c, 0x3b, 0xff, 0xff, 0xff, 0x75,
+    0x7e, 0x0, 0x0, 0xca, 0xa1, 0xff, 0xff, 0xf7,
+    0x23, 0x72, 0x0, 0x0, 0x6a, 0x17, 0xfb, 0xff,
+    0xff, 0x95, 0x9c, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0x6, 0x0, 0x32, 0xe6, 0x71,
+    0xff, 0xff, 0xff, 0x6d, 0x98, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xc8, 0x9d, 0xff, 0xff, 0xf9, 0x31,
+    0x92, 0x0, 0x0, 0x0, 0xf0, 0xcb, 0xff, 0xff,
+    0xc7, 0xec, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0x6,
+    0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0,
+    0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70,
+    0x0, 0x0, 0x4c, 0x67, 0xf7, 0xf7, 0xf7, 0x3f,
+    0x5e, 0x0, 0xb2, 0x75, 0xff, 0xff, 0xff, 0x31,
+    0x2c, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff,
+    0xff, 0xd, 0x18, 0xe8, 0x83, 0xff, 0xff, 0xff,
+    0xbd, 0xfe, 0x3e, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0xac, 0x71, 0xff,
+    0xff, 0xe9, 0xff, 0xff, 0x5b, 0xa0, 0x29, 0xff,
+    0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x34, 0xfe,
+    0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xa6,
+    0x0, 0x0, 0x0, 0xba, 0x8f, 0xff, 0xff, 0xfd,
+    0x3f, 0xa2, 0x4, 0x0, 0x2a, 0xf8, 0xad, 0xff,
+    0xff, 0xfb, 0x1b, 0x36, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xe0,
+    0xe2, 0xf0, 0x9, 0xad, 0xff, 0xff, 0xff, 0x4d,
+    0x5a, 0x0, 0x0, 0x7c, 0x49, 0xff, 0xff, 0xff,
+    0xa5, 0xfe, 0xd0, 0xd0, 0xfe, 0x9f, 0xff, 0xff,
+    0xff, 0x4b, 0x72, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0xe4, 0xf0, 0xfe, 0x63, 0xf1,
+    0xff, 0xff, 0xdf, 0x9, 0x3a, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xe0, 0xe0,
+    0xe0, 0xe0, 0xe0, 0xe0, 0xc8, 0x92, 0x20, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x74, 0x41, 0xfd, 0xff, 0xff, 0xbf,
+    0x9, 0xdc, 0xb6, 0xd6, 0xfe, 0xd1, 0xff, 0xff,
+    0xc7, 0xec, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0x6,
+    0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0,
+    0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70,
+    0x0, 0x0, 0x4c, 0x47, 0xff, 0xff, 0xff, 0x81,
+    0xf6, 0xd0, 0xfe, 0xb7, 0xff, 0xff, 0xf1, 0x9,
+    0x12, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff,
+    0xff, 0xd, 0x6, 0x4c, 0x5, 0xcf, 0xff, 0xff,
+    0xff, 0x73, 0xe0, 0xe, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0xe0, 0xe0, 0xe0,
+    0xe0, 0xe0, 0xd2, 0xa6, 0x4a, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x44, 0x11, 0xf3,
+    0xff, 0xff, 0xff, 0xe7, 0x5, 0x4e, 0x29, 0xff,
+    0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x98,
+    0x39, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x83, 0xa6,
+    0x0, 0x0, 0x0, 0x62, 0x2d, 0xf9, 0xff, 0xff,
+    0xc9, 0x11, 0xe6, 0xce, 0xfa, 0x57, 0xfb, 0xff,
+    0xff, 0xb5, 0xf6, 0x8, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xb7, 0xb7,
+    0xb7, 0xbf, 0xe3, 0xff, 0xff, 0xff, 0xdb, 0xfe,
+    0x22, 0x0, 0x0, 0x20, 0xfe, 0xb9, 0xff, 0xff,
+    0xff, 0xc7, 0x89, 0x93, 0xc9, 0xff, 0xff, 0xff,
+    0xc5, 0xfe, 0x22, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xb7, 0xb7, 0xbf, 0xe1, 0xff, 0xff,
+    0xff, 0xf7, 0x49, 0xc0, 0x0, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xb7, 0xb7, 0xb7,
+    0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0x49, 0x50, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x1c, 0xfa, 0xa7, 0xff, 0xff, 0xff,
+    0xdb, 0x93, 0x83, 0x95, 0xd1, 0xff, 0xff, 0xff,
+    0xc3, 0xd4, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0x6,
+    0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0,
+    0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70,
+    0x0, 0x0, 0x1e, 0xfe, 0xe3, 0xff, 0xff, 0xf7,
+    0xa5, 0x89, 0xbb, 0xff, 0xff, 0xff, 0xa7, 0xea,
+    0x0, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff,
+    0xff, 0xd, 0x6, 0x0, 0xaa, 0x3f, 0xf9, 0xff,
+    0xff, 0xef, 0x29, 0x90, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xb7, 0xb7, 0xb7, 0xb7,
+    0xb7, 0xb7, 0xb7, 0x7f, 0xa2, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0xa, 0xee, 0xb1,
+    0xff, 0xff, 0xff, 0x9f, 0xde, 0x2a, 0x29, 0xff,
+    0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x16,
+    0xf2, 0x9b, 0xff, 0xff, 0xff, 0xff, 0x83, 0xa6,
+    0x0, 0x0, 0x0, 0x10, 0xee, 0x8f, 0xff, 0xff,
+    0xff, 0xe3, 0x9f, 0x91, 0xb7, 0xfb, 0xff, 0xff,
+    0xef, 0x31, 0x88, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xed, 0x45, 0xba,
+    0x0, 0x0, 0x0, 0x0, 0x88, 0x1d, 0xcf, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+    0x27, 0x98, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xe5, 0x4d, 0xe8, 0x20, 0x0, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0x67, 0x74, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x70, 0xb, 0xb7, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf,
+    0x37, 0x98, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0x6, 0x0, 0x0, 0x0, 0x6,
+    0xd, 0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0,
+    0x0, 0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70,
+    0x0, 0x0, 0x0, 0xc8, 0x5d, 0xfb, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xd9, 0x1d, 0x74,
+    0x0, 0x0, 0x0, 0x0, 0xac, 0x87, 0xff, 0xff,
+    0xff, 0xd, 0x6, 0x0, 0x1a, 0xf2, 0x93, 0xff,
+    0xff, 0xff, 0xbf, 0xfe, 0x40, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xb3, 0xd0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x90, 0x59,
+    0xff, 0xff, 0xff, 0x41, 0x76, 0x2a, 0x29, 0xff,
+    0xff, 0xff, 0x77, 0x98, 0x0, 0x0, 0x0, 0xac,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0, 0x0,
+    0x66, 0x15, 0xe9, 0xff, 0xff, 0xff, 0x83, 0xa6,
+    0x0, 0x0, 0x0, 0x0, 0x58, 0xfe, 0xa7, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef,
+    0x51, 0xda, 0x12, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x86, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xfd, 0xf3, 0xd3, 0x95, 0x21, 0xd4, 0x1e,
+    0x0, 0x0, 0x0, 0x0, 0x8, 0xa4, 0x11, 0x91,
+    0xe9, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x9b, 0x17,
+    0xba, 0xe, 0x0, 0x0, 0x0, 0x86, 0x87, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xf9, 0xeb, 0xc3, 0x7f,
+    0xf, 0xca, 0x24, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x86, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0x67, 0x60, 0x0,
+    0x0, 0x86, 0x87, 0xff, 0xff, 0xff, 0xd, 0x4,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x2, 0x82, 0xfe, 0x73, 0xd7,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x89, 0xd,
+    0xbc, 0x16, 0x0, 0x0, 0x0, 0x86, 0x87, 0xff,
+    0xff, 0xff, 0xd, 0x4, 0x0, 0x0, 0x0, 0x4,
+    0xd, 0xff, 0xff, 0xff, 0x83, 0x82, 0x0, 0x0,
+    0x0, 0x42, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x52,
+    0x0, 0x0, 0x0, 0x2e, 0xf0, 0x4d, 0xc9, 0xfd,
+    0xff, 0xff, 0xff, 0xf3, 0xa5, 0x19, 0xb2, 0x8,
+    0x0, 0x0, 0x0, 0x0, 0x86, 0x87, 0xff, 0xff,
+    0xff, 0xd, 0x4, 0x0, 0x0, 0x5e, 0xd, 0xdb,
+    0xff, 0xff, 0xff, 0x75, 0x40, 0x0, 0x0, 0x86,
+    0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xb3, 0xbc, 0x0, 0x0, 0x86,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x4, 0x2c, 0xfe,
+    0xe7, 0xff, 0xd9, 0xfe, 0x1c, 0x1c, 0x29, 0xff,
+    0xff, 0xff, 0x77, 0x74, 0x0, 0x0, 0x0, 0x86,
+    0x87, 0xff, 0xff, 0xff, 0xd, 0x4, 0x0, 0x0,
+    0x6, 0xd4, 0x6f, 0xff, 0xff, 0xff, 0x83, 0x82,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x6e, 0xfe, 0x69,
+    0xd3, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xab, 0x2d,
+    0xd8, 0x26, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x50, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
+    0xfe, 0xfe, 0xfe, 0xf6, 0xc8, 0x64, 0xa, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x5a, 0xda,
+    0xfe, 0x39, 0x55, 0x55, 0x35, 0xfe, 0xe0, 0x68,
+    0x6, 0x0, 0x0, 0x0, 0x0, 0x50, 0xfe, 0xfe,
+    0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xee, 0xb0,
+    0x4a, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x50, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
+    0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x36, 0x0,
+    0x0, 0x50, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x2,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0xbe, 0xfe,
+    0x25, 0x4f, 0x57, 0x43, 0x21, 0xfc, 0xc4, 0x54,
+    0x2, 0x0, 0x0, 0x0, 0x0, 0x50, 0xfe, 0xfe,
+    0xfe, 0xfe, 0xfe, 0x2, 0x0, 0x0, 0x0, 0x2,
+    0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x4c, 0x0, 0x0,
+    0x0, 0x24, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x2c,
+    0x0, 0x0, 0x0, 0x0, 0x24, 0xa6, 0xfa, 0x1b,
+    0x4d, 0x59, 0x47, 0xb, 0xea, 0x70, 0x6, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x50, 0xfe, 0xfe, 0xfe,
+    0xfe, 0xfe, 0x2, 0x0, 0x0, 0x2, 0xb0, 0xfe,
+    0xfe, 0xfe, 0xfe, 0xfe, 0x40, 0x0, 0x0, 0x50,
+    0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
+    0xfe, 0xfe, 0xfe, 0xfe, 0x7e, 0x0, 0x0, 0x50,
+    0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x2, 0x0, 0xc2,
+    0xfe, 0xfe, 0xfe, 0xac, 0x0, 0xe, 0xfe, 0xfe,
+    0xfe, 0xfe, 0xfe, 0x42, 0x0, 0x0, 0x0, 0x50,
+    0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x2, 0x0, 0x0,
+    0x0, 0x3c, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x4c,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x36, 0xb8,
+    0xfc, 0x23, 0x4d, 0x57, 0x41, 0x9, 0xea, 0x7e,
+    0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x16, 0x3c, 0x5a, 0x58, 0x38, 0x14, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc,
+    0x2e, 0x50, 0x5c, 0x48, 0x24, 0xa, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x2a,
+    0x4e, 0x5e, 0x46, 0x20, 0x2, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xc, 0x2e, 0x50, 0x5a, 0x40, 0x1a, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x62, 0xd0, 0xf0, 0xf8, 0xf8, 0xee, 0xca,
+    0x4c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x90,
+    0xde, 0xf4, 0xf8, 0xf8, 0xea, 0xbc, 0x24, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xb0, 0x9b, 0xdd, 0xdd, 0xdd, 0xdd, 0x83,
+    0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe2,
+    0xc3, 0xdd, 0xdd, 0xdd, 0xdd, 0x4d, 0x4a, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x4, 0xe, 0x1a, 0x20, 0x20, 0x20, 0x20,
+    0x1e, 0x14, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x14, 0x3e, 0x66, 0x72, 0x56, 0x28, 0x4,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x4, 0xe, 0x1a, 0x20, 0x20, 0x20, 0x20, 0x1e,
+    0x14, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa,
+    0x32, 0x5e, 0x78, 0x6c, 0x44, 0x18, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x4, 0x10, 0x1a, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x1e, 0x12, 0x8, 0x0, 0x0, 0x6,
+    0x12, 0x1c, 0x1e, 0x14, 0x8, 0x0, 0x0, 0x0,
+    0x0, 0x4, 0xe, 0x1a, 0x20, 0x16, 0xc, 0x0,
+    0x0, 0x8, 0x14, 0x1e, 0x1e, 0x14, 0x8, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x4, 0xe, 0x1a, 0x20,
+    0x18, 0xc, 0x2, 0x2, 0xe, 0x18, 0x20, 0x16,
+    0xc, 0x0, 0x0, 0x0, 0x8, 0x14, 0x1a, 0x12,
+    0x8, 0x0, 0x0, 0x0, 0xc, 0x16, 0x20, 0x18,
+    0xc, 0x2, 0x0, 0x6, 0x12, 0x1c, 0x20, 0x1a,
+    0xe, 0x4, 0x0, 0x0, 0x0, 0x2, 0xe, 0x18,
+    0x20, 0x1c, 0x12, 0x6, 0x0, 0xa, 0x14, 0x20,
+    0x1e, 0x14, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x6, 0x12, 0x1c, 0x20, 0x16, 0xc, 0x0, 0x0,
+    0xc, 0x16, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+    0x20, 0x20, 0x20, 0x20, 0x18, 0xc, 0x2, 0x0,
+    0x0, 0xd6, 0xb3, 0xff, 0xff, 0xff, 0xff, 0x99,
+    0xae, 0x0, 0xa, 0x16, 0x20, 0x1a, 0xe, 0x4,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0,
+    0xe3, 0xff, 0xff, 0xff, 0xff, 0x5b, 0x6a, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0x16, 0x1a,
+    0x10, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x52, 0x11, 0x23, 0x23, 0x23, 0x23, 0x23,
+    0x23, 0x1d, 0xfe, 0xfc, 0xd2, 0x6a, 0xc, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40,
+    0xc8, 0xfe, 0x35, 0x5d, 0x67, 0x51, 0x11, 0xf2,
+    0x8a, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x52, 0x11, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
+    0x1d, 0xfe, 0xfc, 0xd4, 0x6a, 0xa, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x28, 0xa8, 0xfc,
+    0x21, 0x57, 0x69, 0x61, 0x3b, 0xfe, 0xd4, 0x4e,
+    0x0, 0x0, 0x0, 0x0, 0x60, 0x13, 0x23, 0x23,
+    0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
+    0x23, 0x23, 0x23, 0x1b, 0x98, 0x0, 0x0, 0x7c,
+    0x17, 0x23, 0x23, 0x1f, 0xbe, 0x0, 0x0, 0x0,
+    0x0, 0x44, 0xf, 0x23, 0x23, 0x23, 0x5, 0x10,
+    0x0, 0x92, 0x1f, 0x23, 0x23, 0x1d, 0xd2, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x6c, 0xf, 0x23, 0x23,
+    0x23, 0xb, 0xe, 0x1c, 0xd, 0x23, 0x23, 0x23,
+    0xfe, 0x1c, 0x0, 0x0, 0xd6, 0x1d, 0x23, 0x1b,
+    0xbe, 0x0, 0x0, 0x26, 0x5, 0x23, 0x23, 0x23,
+    0xb, 0x10, 0x0, 0x36, 0x17, 0x23, 0x23, 0x23,
+    0x11, 0x8c, 0x0, 0x0, 0x0, 0x76, 0xd, 0x23,
+    0x23, 0x23, 0x19, 0x4c, 0x0, 0x86, 0x21, 0x23,
+    0x23, 0x1f, 0xf0, 0x14, 0x0, 0x0, 0x0, 0x4,
+    0xcc, 0x19, 0x23, 0x23, 0x23, 0x7, 0x0, 0xe,
+    0x5, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
+    0x23, 0x23, 0x23, 0x23, 0x23, 0xb, 0x24, 0x0,
+    0x0, 0xdc, 0xb3, 0xff, 0xff, 0xf7, 0xcb, 0x79,
+    0x8a, 0x0, 0xa6, 0x21, 0x23, 0x23, 0x11, 0x82,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdc,
+    0xb3, 0xd5, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x28, 0xfe, 0x21, 0x23,
+    0x15, 0x9e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x88, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xfd, 0xdd, 0x9b, 0x25, 0xd4, 0x20,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7a, 0xfe,
+    0x75, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xb5,
+    0x35, 0xde, 0x2a, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x88, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xfd, 0xdd, 0x9b, 0x21, 0xce, 0x16, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x4a, 0xfa, 0x55, 0xcb,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xe5, 0x85, 0x5,
+    0x8c, 0x2, 0x0, 0x0, 0x9a, 0x95, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xc7, 0xd4, 0x0, 0x0, 0xba,
+    0xb1, 0xff, 0xff, 0xe3, 0xee, 0x0, 0x0, 0x0,
+    0x0, 0x76, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x20,
+    0x0, 0xae, 0xc3, 0xff, 0xff, 0xef, 0x5, 0x26,
+    0x0, 0x0, 0x0, 0x0, 0xd4, 0xa1, 0xff, 0xff,
+    0xfd, 0x29, 0xe, 0x1c, 0x41, 0xff, 0xff, 0xff,
+    0x41, 0x54, 0x0, 0x20, 0x5, 0xf1, 0xff, 0xe3,
+    0xfe, 0x12, 0x0, 0x66, 0x51, 0xff, 0xff, 0xff,
+    0x2b, 0x10, 0x0, 0x36, 0x63, 0xff, 0xff, 0xff,
+    0xbf, 0xfc, 0x24, 0x0, 0x18, 0xf8, 0xad, 0xff,
+    0xff, 0xff, 0x7b, 0x4c, 0x0, 0x90, 0xb7, 0xff,
+    0xff, 0xfb, 0x35, 0x7e, 0x0, 0x0, 0x0, 0x4c,
+    0xf, 0xeb, 0xff, 0xff, 0xdb, 0x7, 0x0, 0x1c,
+    0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x3c, 0x0,
+    0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfe, 0xb4,
+    0x44, 0x0, 0xbe, 0xd1, 0xff, 0xff, 0xb7, 0xf2,
+    0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7c,
+    0xdc, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x96, 0x55, 0xff, 0xff,
+    0xcd, 0xfc, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x49, 0xce,
+    0x6, 0x0, 0x0, 0x0, 0x0, 0x60, 0x5, 0xb1,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xf1, 0x57, 0xde, 0x14, 0x0, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xe9, 0x37, 0x9e, 0x0,
+    0x0, 0x0, 0x0, 0x1a, 0xf4, 0x7f, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf,
+    0xd, 0x5e, 0x0, 0x0, 0xac, 0x95, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xc7, 0xe0, 0x0, 0x0, 0xda,
+    0xb1, 0xff, 0xff, 0xe3, 0xfa, 0x0, 0x0, 0x0,
+    0x0, 0x98, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x2e,
+    0x0, 0xae, 0x77, 0xff, 0xff, 0xff, 0x53, 0x7c,
+    0x0, 0x0, 0x0, 0x16, 0xfe, 0xdf, 0xff, 0xff,
+    0xc9, 0xfc, 0xe, 0x1a, 0xfe, 0xf3, 0xff, 0xff,
+    0x75, 0x9a, 0x0, 0x6a, 0x49, 0xff, 0xff, 0xff,
+    0x31, 0x52, 0x0, 0xac, 0x81, 0xff, 0xff, 0xe7,
+    0xfe, 0xe, 0x0, 0x32, 0xfe, 0xbf, 0xff, 0xff,
+    0xff, 0x4f, 0xa4, 0x0, 0x8e, 0x3b, 0xfb, 0xff,
+    0xff, 0xd3, 0xfe, 0x46, 0x0, 0x8c, 0x39, 0xfb,
+    0xff, 0xff, 0xab, 0xf2, 0xe, 0x0, 0x0, 0xd0,
+    0x81, 0xff, 0xff, 0xff, 0x67, 0xc0, 0x0, 0x22,
+    0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0x41, 0x3a, 0x0,
+    0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0,
+    0x0, 0x0, 0xbe, 0x7d, 0xff, 0xff, 0xf7, 0x1f,
+    0x52, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0,
+    0x0, 0x0, 0x0, 0xc, 0xf6, 0xb7, 0xff, 0xff,
+    0xff, 0x41, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xad, 0xad,
+    0xad, 0xb3, 0xd5, 0xff, 0xff, 0xff, 0xe9, 0x17,
+    0x50, 0x0, 0x0, 0x0, 0x12, 0xf4, 0x97, 0xff,
+    0xff, 0xff, 0xd9, 0x91, 0x83, 0xad, 0xf9, 0xff,
+    0xff, 0xf1, 0x35, 0x8e, 0x0, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xad, 0xad, 0xad,
+    0xb9, 0xe5, 0xff, 0xff, 0xff, 0xc7, 0xfc, 0xc,
+    0x0, 0x0, 0x0, 0x70, 0x3f, 0xfb, 0xff, 0xff,
+    0xef, 0x99, 0x75, 0x87, 0xd5, 0xff, 0xff, 0xff,
+    0x95, 0xde, 0x0, 0x0, 0x7e, 0x65, 0xad, 0xad,
+    0xad, 0xad, 0xb7, 0xff, 0xff, 0xff, 0xc7, 0xad,
+    0xad, 0xad, 0xad, 0x87, 0xb6, 0x0, 0x0, 0xda,
+    0xb1, 0xff, 0xff, 0xe3, 0xfa, 0x0, 0x0, 0x0,
+    0x0, 0x98, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x2e,
+    0x0, 0x48, 0x1b, 0xf9, 0xff, 0xff, 0x9b, 0xd4,
+    0x0, 0x0, 0x0, 0x62, 0x39, 0xff, 0xff, 0xff,
+    0x7f, 0xb8, 0x0, 0x0, 0xf6, 0xc9, 0xff, 0xff,
+    0xa1, 0xd0, 0x0, 0xbe, 0x8b, 0xff, 0xff, 0xff,
+    0x79, 0xa6, 0x0, 0xdc, 0xad, 0xff, 0xff, 0xbd,
+    0xec, 0x0, 0x0, 0x0, 0x92, 0x33, 0xf7, 0xff,
+    0xff, 0xc9, 0xfe, 0x46, 0xfc, 0xb9, 0xff, 0xff,
+    0xfd, 0x4b, 0xb0, 0x0, 0x0, 0x16, 0xf6, 0xab,
+    0xff, 0xff, 0xf9, 0x29, 0x70, 0x0, 0x40, 0x9,
+    0xe3, 0xff, 0xff, 0xd1, 0xfe, 0x36, 0x0, 0x16,
+    0x1b, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
+    0xb7, 0xff, 0xff, 0xff, 0xb9, 0xfe, 0x1a, 0x0,
+    0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0,
+    0x0, 0x0, 0x4c, 0x19, 0xf5, 0xff, 0xff, 0x83,
+    0xc4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0,
+    0x0, 0x0, 0x0, 0x60, 0x27, 0xf9, 0xff, 0xff,
+    0xff, 0xa7, 0xec, 0x6, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xd8,
+    0xd8, 0xe6, 0xfe, 0x87, 0xff, 0xff, 0xff, 0x81,
+    0xa8, 0x0, 0x0, 0x0, 0x68, 0x31, 0xfb, 0xff,
+    0xff, 0xc1, 0x9, 0xda, 0xc0, 0xf8, 0x51, 0xf9,
+    0xff, 0xff, 0xb9, 0xf8, 0x8, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xd8, 0xda,
+    0xee, 0xd, 0xc3, 0xff, 0xff, 0xff, 0x25, 0x2e,
+    0x0, 0x0, 0x0, 0xb2, 0x97, 0xff, 0xff, 0xfb,
+    0x3d, 0xea, 0xae, 0xd0, 0x5, 0xcf, 0xff, 0xff,
+    0xeb, 0x5, 0xc, 0x0, 0x34, 0x92, 0xc4, 0xd6,
+    0xd6, 0xe0, 0x35, 0xff, 0xff, 0xff, 0x6f, 0xec,
+    0xd6, 0xd6, 0xcc, 0xa0, 0x50, 0x0, 0x0, 0xda,
+    0xb1, 0xff, 0xff, 0xe3, 0xfa, 0x0, 0x0, 0x0,
+    0x0, 0x98, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x2e,
+    0x0, 0x8, 0xf6, 0xbf, 0xff, 0xff, 0xd9, 0xfe,
+    0x10, 0x0, 0x0, 0xbe, 0x89, 0xff, 0xff, 0xfb,
+    0x23, 0x50, 0x0, 0x0, 0xce, 0x9d, 0xff, 0xff,
+    0xc7, 0xf2, 0x0, 0xf2, 0xc3, 0xff, 0xff, 0xff,
+    0xb3, 0xe8, 0x0, 0xf8, 0xd3, 0xff, 0xff, 0x8d,
+    0xbc, 0x0, 0x0, 0x0, 0x14, 0xee, 0x93, 0xff,
+    0xff, 0xff, 0x59, 0xe2, 0x47, 0xff, 0xff, 0xff,
+    0xab, 0xfa, 0x22, 0x0, 0x0, 0x0, 0x7c, 0x2d,
+    0xf7, 0xff, 0xff, 0x9f, 0xec, 0x8, 0xc4, 0x75,
+    0xff, 0xff, 0xff, 0x59, 0xb2, 0x0, 0x0, 0x8,
+    0x7a, 0xb6, 0xd6, 0xd6, 0xd6, 0xd6, 0xde, 0xfe,
+    0xad, 0xff, 0xff, 0xf1, 0x29, 0x8a, 0x0, 0x0,
+    0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0,
+    0x0, 0x0, 0x6, 0xf0, 0xb1, 0xff, 0xff, 0xd5,
+    0xfe, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0,
+    0x0, 0x0, 0x0, 0xd8, 0x91, 0xff, 0xff, 0xd5,
+    0xff, 0xf3, 0x17, 0x4e, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6,
+    0x0, 0x0, 0x50, 0xfe, 0xe5, 0xff, 0xff, 0xb5,
+    0xd6, 0x0, 0x0, 0x0, 0xbe, 0x93, 0xff, 0xff,
+    0xfb, 0x37, 0x96, 0x0, 0x0, 0x26, 0xf6, 0xa9,
+    0xff, 0xff, 0xfd, 0x1f, 0x3a, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0,
+    0x2, 0xb6, 0x63, 0xff, 0xff, 0xff, 0x4f, 0x44,
+    0x0, 0x0, 0x0, 0xc8, 0xad, 0xff, 0xff, 0xe7,
+    0xfe, 0x46, 0x0, 0x0, 0xb8, 0x7b, 0xf5, 0xf5,
+    0xf5, 0x27, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xda,
+    0xb1, 0xff, 0xff, 0xe3, 0xfa, 0x0, 0x0, 0x0,
+    0x0, 0x98, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x2e,
+    0x0, 0x0, 0xa8, 0x71, 0xff, 0xff, 0xff, 0x2f,
+    0x56, 0x0, 0x6, 0xf8, 0xc9, 0xff, 0xff, 0xc5,
+    0xfa, 0xc, 0x0, 0x0, 0x8c, 0x69, 0xff, 0xff,
+    0xeb, 0xfe, 0x30, 0x5, 0xf3, 0xff, 0xff, 0xff,
+    0xe7, 0xfe, 0x2c, 0x5, 0xf5, 0xff, 0xff, 0x57,
+    0x76, 0x0, 0x0, 0x0, 0x0, 0x5e, 0xf, 0xe3,
+    0xff, 0xff, 0xd1, 0xfe, 0xc3, 0xff, 0xff, 0xef,
+    0x21, 0x7a, 0x0, 0x0, 0x0, 0x0, 0x10, 0xf0,
+    0x9d, 0xff, 0xff, 0xf3, 0x1f, 0x82, 0xfe, 0xdb,
+    0xff, 0xff, 0xc5, 0xfe, 0x2a, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xc4, 0x57,
+    0xff, 0xff, 0xff, 0x7b, 0xe2, 0xe, 0x0, 0x0,
+    0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0,
+    0x0, 0x0, 0x0, 0x90, 0x55, 0xff, 0xff, 0xff,
+    0x43, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0,
+    0x0, 0x0, 0x34, 0x5, 0xe5, 0xff, 0xd5, 0x65,
+    0xff, 0xff, 0x81, 0xc6, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6,
+    0x0, 0x0, 0x4, 0xfa, 0xcf, 0xff, 0xff, 0xc1,
+    0xe0, 0x0, 0x0, 0x0, 0xe8, 0xc5, 0xff, 0xff,
+    0xd3, 0xfc, 0x16, 0x0, 0x0, 0x0, 0x8e, 0x53,
+    0xff, 0xff, 0xff, 0x65, 0x72, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0,
+    0x0, 0xa2, 0x5b, 0xff, 0xff, 0xff, 0x41, 0x3e,
+    0x0, 0x0, 0x0, 0xb2, 0x97, 0xff, 0xff, 0xff,
+    0x63, 0xfc, 0x9a, 0x2e, 0x44, 0xe6, 0xfc, 0xfe,
+    0xfa, 0xde, 0xc, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xda,
+    0xb1, 0xff, 0xff, 0xe3, 0xfa, 0x0, 0x0, 0x0,
+    0x0, 0x98, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x2e,
+    0x0, 0x0, 0x42, 0x15, 0xf7, 0xff, 0xff, 0x81,
+    0xb4, 0x0, 0x40, 0x19, 0xf9, 0xff, 0xff, 0x7b,
+    0xb2, 0x0, 0x0, 0x0, 0x42, 0x29, 0xff, 0xff,
+    0xff, 0x29, 0x90, 0x4d, 0xff, 0xff, 0xfb, 0xff,
+    0xff, 0x37, 0x8c, 0x3d, 0xff, 0xff, 0xfb, 0x15,
+    0x2e, 0x0, 0x0, 0x0, 0x0, 0x4, 0xca, 0x63,
+    0xff, 0xff, 0xff, 0x9b, 0xff, 0xff, 0xff, 0x7d,
+    0xe0, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6c,
+    0x21, 0xf1, 0xff, 0xff, 0x93, 0xf6, 0x67, 0xff,
+    0xff, 0xff, 0x49, 0xa0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x66, 0x11, 0xe1,
+    0xff, 0xff, 0xc9, 0xfe, 0x44, 0x0, 0x0, 0x0,
+    0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0,
+    0x0, 0x0, 0x0, 0x28, 0xfe, 0xdf, 0xff, 0xff,
+    0xa5, 0xe8, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0,
+    0x0, 0x0, 0xa6, 0x65, 0xff, 0xff, 0x7f, 0x5,
+    0xe7, 0xff, 0xd9, 0xfe, 0x26, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6,
+    0x0, 0x6, 0x82, 0x11, 0xef, 0xff, 0xff, 0xad,
+    0xd0, 0x0, 0x0, 0x0, 0xf4, 0xd9, 0xff, 0xff,
+    0xb7, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x32, 0x27,
+    0xff, 0xff, 0xff, 0x7d, 0x9a, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xba, 0xbe,
+    0xda, 0xfe, 0xab, 0xff, 0xff, 0xe7, 0xd, 0x1e,
+    0x0, 0x0, 0x0, 0x6e, 0x3d, 0xfb, 0xff, 0xff,
+    0xfd, 0xbb, 0x5d, 0x5, 0xe8, 0x88, 0x22, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xda,
+    0xb1, 0xff, 0xff, 0xe3, 0xfa, 0x0, 0x0, 0x0,
+    0x0, 0x98, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x2e,
+    0x0, 0x0, 0x6, 0xf4, 0xbb, 0xff, 0xff, 0xc3,
+    0xf6, 0x4, 0x9c, 0x6d, 0xff, 0xff, 0xf9, 0x1f,
+    0x4a, 0x0, 0x0, 0x0, 0xe, 0xfe, 0xe5, 0xff,
+    0xff, 0x63, 0xde, 0x8f, 0xff, 0xff, 0xad, 0xff,
+    0xff, 0x7f, 0xdc, 0x71, 0xff, 0xff, 0xd9, 0xfc,
+    0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x32, 0xfe,
+    0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd3, 0x5,
+    0x48, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa,
+    0xe6, 0x91, 0xff, 0xff, 0xef, 0x15, 0xd1, 0xff,
+    0xff, 0xbb, 0xfc, 0x20, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x1e, 0xf6, 0x9b, 0xff,
+    0xff, 0xf7, 0x39, 0xa0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xd2, 0x8f, 0xff, 0xff,
+    0xef, 0xd, 0x3e, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0,
+    0x0, 0x14, 0xfc, 0xc3, 0xff, 0xf5, 0x1b, 0xe6,
+    0x97, 0xff, 0xff, 0x53, 0x94, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xfa,
+    0xfa, 0xfe, 0x19, 0xb3, 0xff, 0xff, 0xff, 0x6d,
+    0x96, 0x0, 0x0, 0x0, 0xf8, 0xdf, 0xff, 0xff,
+    0xad, 0xda, 0x0, 0x0, 0x0, 0x0, 0x10, 0xd,
+    0xff, 0xff, 0xff, 0x87, 0xa8, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0x93, 0x91, 0x91,
+    0x9f, 0xcf, 0xff, 0xff, 0xf7, 0x5f, 0xce, 0x2,
+    0x0, 0x0, 0x0, 0x1a, 0xf4, 0x7b, 0xfb, 0xff,
+    0xff, 0xff, 0xff, 0xed, 0xad, 0x4b, 0xfe, 0x96,
+    0x12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xda,
+    0xb1, 0xff, 0xff, 0xe3, 0xfa, 0x0, 0x0, 0x0,
+    0x0, 0x98, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x2e,
+    0x0, 0x0, 0x0, 0xa2, 0x6d, 0xff, 0xff, 0xf7,
+    0x11, 0x36, 0xea, 0xb1, 0xff, 0xff, 0xc1, 0xf8,
+    0x8, 0x0, 0x0, 0x0, 0x0, 0xec, 0xbb, 0xff,
+    0xff, 0x91, 0xfc, 0xc5, 0xff, 0xf9, 0x31, 0xff,
+    0xff, 0xb7, 0xfa, 0x9d, 0xff, 0xff, 0xad, 0xde,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x94,
+    0x35, 0xf7, 0xff, 0xff, 0xff, 0xfd, 0x4d, 0xb2,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x5c, 0x15, 0xeb, 0xff, 0xff, 0xb9, 0xff, 0xff,
+    0xfb, 0x3d, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xb2, 0x47, 0xfb, 0xff,
+    0xff, 0x8d, 0xee, 0x16, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x60, 0x2b, 0xfb, 0xff,
+    0xff, 0x6f, 0xac, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0,
+    0x0, 0x32, 0x35, 0xfd, 0xff, 0xaf, 0xf0, 0x6e,
+    0x31, 0xfd, 0xff, 0xb7, 0xb6, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xdf, 0xdf,
+    0xdf, 0xe5, 0xfb, 0xff, 0xff, 0xff, 0xd1, 0x5,
+    0x3a, 0x0, 0x0, 0x0, 0xfa, 0xdf, 0xff, 0xff,
+    0xad, 0xd6, 0x0, 0x0, 0x0, 0x0, 0x6, 0xd,
+    0xff, 0xff, 0xff, 0x87, 0xac, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xd1, 0x3d, 0xf4, 0x32, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x46, 0xf4, 0x49, 0xc7,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x31,
+    0xd4, 0x16, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xda,
+    0xb1, 0xff, 0xff, 0xe3, 0xfa, 0x0, 0x0, 0x0,
+    0x0, 0x98, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x2e,
+    0x0, 0x0, 0x0, 0x3c, 0x11, 0xf3, 0xff, 0xff,
+    0x63, 0xa0, 0xfe, 0xed, 0xff, 0xff, 0x75, 0xac,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xba, 0x8b, 0xff,
+    0xff, 0xb9, 0x9, 0xf3, 0xff, 0xcb, 0xfe, 0xdb,
+    0xff, 0xeb, 0xfe, 0xc5, 0xff, 0xff, 0x7b, 0xa6,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x36,
+    0xfe, 0xc3, 0xff, 0xff, 0xff, 0xd9, 0xfe, 0x58,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x6, 0xda, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xad, 0xf8, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x54, 0x9, 0xd5, 0xff, 0xff,
+    0xd9, 0x9, 0x56, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xe, 0xfa, 0xc1, 0xff,
+    0xff, 0xc5, 0xfa, 0x10, 0x0, 0x0, 0x0, 0x0,
+    0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0,
+    0x0, 0x32, 0x4b, 0x91, 0x91, 0x3d, 0x86, 0x12,
+    0xf6, 0x7b, 0x91, 0x89, 0xa8, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xcb, 0x25, 0xa6,
+    0x0, 0x0, 0x0, 0x0, 0xf8, 0xdf, 0xff, 0xff,
+    0xad, 0xda, 0x0, 0x0, 0x0, 0x0, 0x12, 0xd,
+    0xff, 0xff, 0xff, 0x87, 0xa6, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xb9, 0xf, 0x6e, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0xa2, 0xfc,
+    0x41, 0x9d, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xed,
+    0x39, 0x9a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xda,
+    0xb1, 0xff, 0xff, 0xe3, 0xfa, 0x0, 0x0, 0x0,
+    0x0, 0x98, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x2e,
+    0x0, 0x0, 0x0, 0x4, 0xf0, 0xb5, 0xff, 0xff,
+    0xa9, 0xf0, 0x4f, 0xff, 0xff, 0xf7, 0x19, 0x46,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x72, 0x55, 0xff,
+    0xff, 0xdf, 0x51, 0xff, 0xff, 0x95, 0xf8, 0xa7,
+    0xff, 0xff, 0x3d, 0xeb, 0xff, 0xff, 0x43, 0x5a,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xba,
+    0x53, 0xff, 0xff, 0xff, 0xff, 0xff, 0x73, 0xda,
+    0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x4e, 0xb, 0xe3, 0xff, 0xff, 0xff, 0xf9,
+    0x2f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x16, 0xee, 0x8b, 0xff, 0xff, 0xfb,
+    0x4b, 0xb8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xa6, 0x6b, 0xff,
+    0xff, 0xfd, 0x2f, 0x66, 0x0, 0x0, 0x0, 0x0,
+    0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0,
+    0x0, 0x20, 0x6e, 0xa0, 0x9e, 0x6a, 0x1a, 0x0,
+    0x46, 0x86, 0xac, 0x8e, 0x52, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xdd, 0xdd,
+    0xdd, 0xdb, 0xcf, 0xab, 0x5f, 0xfe, 0x9e, 0xc,
+    0x0, 0x0, 0x0, 0x0, 0xf4, 0xd9, 0xff, 0xff,
+    0xbb, 0xe8, 0x0, 0x0, 0x0, 0x0, 0x36, 0x2b,
+    0xff, 0xff, 0xff, 0x7b, 0x96, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x49,
+    0x5b, 0xa5, 0xff, 0xff, 0xff, 0xa3, 0xe4, 0x0,
+    0x0, 0x0, 0x6, 0x3a, 0x62, 0x80, 0x6a, 0x56,
+    0x7e, 0xd8, 0xfe, 0x47, 0xb7, 0xff, 0xff, 0xff,
+    0xc3, 0xf8, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd8,
+    0xb1, 0xff, 0xff, 0xe3, 0xfc, 0x0, 0x0, 0x0,
+    0x0, 0x9c, 0x77, 0xff, 0xff, 0xff, 0x2f, 0x2a,
+    0x0, 0x0, 0x0, 0x0, 0x9a, 0x67, 0xff, 0xff,
+    0xe5, 0xfe, 0x9b, 0xff, 0xff, 0xbd, 0xf6, 0x6,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x2c, 0x13, 0xfb,
+    0xff, 0xfb, 0x97, 0xff, 0xff, 0x55, 0xc4, 0x6b,
+    0xff, 0xff, 0x93, 0xff, 0xff, 0xf3, 0x5, 0x1c,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x50, 0x9,
+    0xd9, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xeb, 0x1f,
+    0x78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x2, 0xd2, 0x75, 0xff, 0xff, 0xff, 0xa1,
+    0xf4, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x9e, 0x37, 0xf7, 0xff, 0xff, 0xa1,
+    0xf8, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0xb, 0xed,
+    0xff, 0xff, 0x93, 0xd6, 0x0, 0x0, 0x0, 0x0,
+    0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0xf8,
+    0xf8, 0xf6, 0xee, 0xd4, 0x8e, 0x30, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xe8, 0xc3, 0xff, 0xff,
+    0xd5, 0xfe, 0x1a, 0x0, 0x0, 0x0, 0x92, 0x55,
+    0xff, 0xff, 0xff, 0x5f, 0x6a, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x58, 0x5e,
+    0x94, 0xfe, 0xb7, 0xff, 0xff, 0xef, 0xfe, 0x6,
+    0x0, 0x0, 0xe, 0x15, 0x67, 0x67, 0x67, 0x2d,
+    0x5e, 0x0, 0x1e, 0x90, 0xfe, 0xb3, 0xff, 0xff,
+    0xfb, 0x13, 0x16, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd0,
+    0xab, 0xff, 0xff, 0xeb, 0xfe, 0x8, 0x0, 0x0,
+    0x0, 0xb2, 0x81, 0xff, 0xff, 0xff, 0x25, 0x1c,
+    0x0, 0x0, 0x0, 0x0, 0x36, 0xd, 0xf1, 0xff,
+    0xff, 0x41, 0xd9, 0xff, 0xff, 0x71, 0xa6, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xfc, 0xd9,
+    0xff, 0xff, 0xeb, 0xff, 0xf5, 0xb, 0x5c, 0x1f,
+    0xfd, 0xff, 0xeb, 0xff, 0xff, 0xcb, 0xf6, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xe6, 0x87,
+    0xff, 0xff, 0xff, 0x75, 0xf9, 0xff, 0xff, 0xab,
+    0xfa, 0x26, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x68, 0x43, 0xff, 0xff, 0xff, 0x63,
+    0x9e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x44, 0xfe, 0xc7, 0xff, 0xff, 0xe3, 0x15,
+    0x6c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xe4, 0xa1,
+    0xff, 0xff, 0xe3, 0xfe, 0x2c, 0x0, 0x0, 0x0,
+    0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xba, 0x8f, 0xff, 0xff,
+    0xfd, 0x3f, 0xa2, 0x4, 0x0, 0x2a, 0xf8, 0xad,
+    0xff, 0xff, 0xf7, 0x15, 0x34, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0,
+    0x0, 0xbc, 0x81, 0xff, 0xff, 0xff, 0x19, 0x14,
+    0x0, 0x0, 0xe, 0x1d, 0xff, 0xff, 0xff, 0x8b,
+    0xd0, 0x6, 0x0, 0x0, 0xcc, 0x77, 0xff, 0xff,
+    0xff, 0x31, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb6,
+    0x97, 0xff, 0xff, 0xff, 0x1d, 0x74, 0x0, 0x0,
+    0x16, 0xf2, 0xa5, 0xff, 0xff, 0xf9, 0x5, 0xc,
+    0x0, 0x0, 0x0, 0x0, 0x2, 0xee, 0xb1, 0xff,
+    0xff, 0x9f, 0xff, 0xff, 0xf7, 0x15, 0x40, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xde, 0xad,
+    0xff, 0xff, 0xff, 0xff, 0xc5, 0xf6, 0xa, 0xfc,
+    0xd5, 0xff, 0xff, 0xff, 0xff, 0x9d, 0xce, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x84, 0x29, 0xf3,
+    0xff, 0xff, 0xc3, 0xfe, 0xa5, 0xff, 0xff, 0xfd,
+    0x51, 0xba, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x4c, 0x43, 0xff, 0xff, 0xff, 0x63,
+    0x7a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xe, 0xe2, 0x79, 0xff, 0xff, 0xff, 0x5d, 0xca,
+    0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x78, 0x41,
+    0xff, 0xff, 0xff, 0x5b, 0x96, 0x0, 0x0, 0x0,
+    0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x62, 0x2d, 0xf9, 0xff,
+    0xff, 0xc9, 0x11, 0xe6, 0xce, 0xfa, 0x57, 0xfb,
+    0xff, 0xff, 0xad, 0xf2, 0x6, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0,
+    0x0, 0x94, 0x73, 0xff, 0xff, 0xff, 0x29, 0x2a,
+    0x0, 0x0, 0x8, 0xfe, 0xdf, 0xff, 0xff, 0xdd,
+    0x15, 0xe8, 0xb4, 0xc8, 0xfe, 0xb1, 0xff, 0xff,
+    0xfb, 0x11, 0x14, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7a,
+    0x59, 0xff, 0xff, 0xff, 0xa7, 0xfe, 0xd8, 0xc4,
+    0xf4, 0x37, 0xf5, 0xff, 0xff, 0xcb, 0xf8, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x94, 0x5f, 0xff,
+    0xff, 0xf3, 0xff, 0xff, 0xb9, 0xf4, 0x6, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa4, 0x7b,
+    0xff, 0xff, 0xff, 0xff, 0x8d, 0xbe, 0x0, 0xd4,
+    0x9f, 0xff, 0xff, 0xff, 0xff, 0x6b, 0x8e, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x2a, 0xfc, 0xb3, 0xff,
+    0xff, 0xfd, 0x47, 0xca, 0x27, 0xf5, 0xff, 0xff,
+    0xd9, 0x9, 0x54, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x4c, 0x43, 0xff, 0xff, 0xff, 0x63,
+    0x7a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x8a, 0x27, 0xf1, 0xff, 0xff, 0xb3, 0xfe, 0xe4,
+    0xe0, 0xe0, 0xe0, 0xe0, 0xcc, 0x98, 0x2e, 0x0,
+    0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1a, 0xfe,
+    0xd1, 0xff, 0xff, 0xb5, 0xf4, 0x8, 0x0, 0x0,
+    0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x10, 0xee, 0x8f, 0xff,
+    0xff, 0xff, 0xe3, 0x9f, 0x91, 0xb7, 0xfb, 0xff,
+    0xff, 0xeb, 0x27, 0x7e, 0x0, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0,
+    0x0, 0x7e, 0x69, 0xff, 0xff, 0xff, 0x39, 0x52,
+    0x0, 0x0, 0x0, 0xc8, 0x75, 0xff, 0xff, 0xff,
+    0xe9, 0x9f, 0x81, 0x89, 0xc3, 0xff, 0xff, 0xff,
+    0xbf, 0xf8, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2a,
+    0xfe, 0xd1, 0xff, 0xff, 0xff, 0xd1, 0x97, 0x89,
+    0xab, 0xf7, 0xff, 0xff, 0xff, 0x5f, 0xac, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x30, 0x9, 0xef,
+    0xff, 0xff, 0xff, 0xff, 0x6b, 0xa0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x58, 0x41,
+    0xff, 0xff, 0xff, 0xff, 0x49, 0x6a, 0x0, 0x86,
+    0x61, 0xff, 0xff, 0xff, 0xff, 0x2b, 0x42, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xbc, 0x57, 0xff, 0xff,
+    0xff, 0xb5, 0xfa, 0x2a, 0xec, 0x95, 0xff, 0xff,
+    0xff, 0x8b, 0xec, 0x14, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x4c, 0x43, 0xff, 0xff, 0xff, 0x63,
+    0x7a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe,
+    0xfe, 0xb9, 0xff, 0xff, 0xff, 0xc3, 0xb7, 0xb7,
+    0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0x5d, 0x6c, 0x0,
+    0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbe,
+    0x7d, 0xff, 0xff, 0xf7, 0x1d, 0x52, 0x0, 0x0,
+    0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x58, 0xfe, 0xa7,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0x4f, 0xf2, 0x20, 0x0, 0x0, 0x0, 0x0,
+    0xac, 0x87, 0xff, 0xff, 0xff, 0xd, 0x6, 0x0,
+    0x0, 0x58, 0x51, 0xff, 0xff, 0xff, 0x67, 0xba,
+    0x0, 0x0, 0x0, 0x40, 0xfe, 0x91, 0xfd, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe5,
+    0x31, 0x92, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x36, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x8c,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xaa, 0x31, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xfd, 0x8b, 0xfe, 0x30, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xea, 0xad,
+    0xff, 0xff, 0xff, 0xf3, 0x11, 0x3c, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1a, 0xfe,
+    0xf3, 0xff, 0xff, 0xef, 0x5, 0x20, 0x0, 0x34,
+    0x15, 0xf9, 0xff, 0xff, 0xe7, 0xfe, 0xe, 0x0,
+    0x0, 0x0, 0x0, 0x52, 0x9, 0xdb, 0xff, 0xff,
+    0xfb, 0x35, 0x8a, 0x0, 0x62, 0x19, 0xed, 0xff,
+    0xff, 0xf7, 0x33, 0x94, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x4c, 0x43, 0xff, 0xff, 0xff, 0x63,
+    0x7a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e,
+    0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0x98, 0x0,
+    0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e,
+    0x19, 0xf5, 0xff, 0xff, 0x81, 0xc4, 0x0, 0x0,
+    0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x86, 0x87, 0xff, 0xff, 0xff, 0xd, 0x4,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6e, 0xfe,
+    0x69, 0xd3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xdb, 0x33, 0xd6, 0x22, 0x0, 0x0, 0x0,
+    0x86, 0x87, 0xff, 0xff, 0xff, 0xd, 0x4, 0x0,
+    0x0, 0x28, 0xf, 0xe9, 0xff, 0xff, 0xcf, 0xb4,
+    0x0, 0x0, 0x0, 0x0, 0x5a, 0xf8, 0x49, 0xbb,
+    0xf7, 0xff, 0xff, 0xff, 0xff, 0xed, 0xa1, 0x21,
+    0xc6, 0x12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x26, 0x35, 0xff, 0xff, 0xff, 0x6f, 0x68,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x12, 0xc0, 0x17, 0x97, 0xe7, 0xff, 0xff, 0xff,
+    0xff, 0xf9, 0xc3, 0x55, 0xf8, 0x54, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8e, 0x5b,
+    0xff, 0xff, 0xff, 0xb7, 0xee, 0x4, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0,
+    0xc9, 0xff, 0xff, 0xbf, 0xea, 0x0, 0x0, 0x6,
+    0xf6, 0xcf, 0xff, 0xff, 0xbd, 0xe2, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x52, 0x89, 0xff, 0xff, 0xff,
+    0xa7, 0xf4, 0x14, 0x0, 0x6, 0xde, 0x87, 0xff,
+    0xff, 0xff, 0xc1, 0x94, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x36, 0x43, 0xff, 0xff, 0xff, 0x63,
+    0x5a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1e,
+    0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0x82, 0x0,
+    0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfa, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6,
+    0xf2, 0xb1, 0xff, 0xff, 0xd5, 0xfe, 0x1c, 0x0,
+    0x5c, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x50, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x2,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x36,
+    0xb8, 0xfc, 0x23, 0x4d, 0x59, 0x3d, 0x63, 0xf5,
+    0xff, 0xff, 0xeb, 0x4d, 0x50, 0x0, 0x0, 0x0,
+    0x50, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x2, 0x0,
+    0x0, 0x4, 0xc8, 0xfe, 0xfe, 0xfe, 0xfe, 0xa0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x94, 0xf2,
+    0x9, 0x43, 0x59, 0x55, 0x35, 0xfe, 0xe4, 0x70,
+    0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x14, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x3c,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x6, 0x64, 0xda, 0xfe, 0x31, 0x53, 0x59,
+    0x47, 0xf, 0xf6, 0xa0, 0x28, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2c, 0xfe,
+    0xfe, 0xfe, 0xfe, 0xfe, 0x80, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x98,
+    0xfe, 0xfe, 0xfe, 0xfe, 0x8a, 0x0, 0x0, 0x0,
+    0x9e, 0xfe, 0xfe, 0xfe, 0xfe, 0x88, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x52, 0xfe, 0xfe, 0xfe, 0xfe,
+    0xfe, 0x6e, 0x0, 0x0, 0x0, 0x50, 0xfe, 0xfe,
+    0xfe, 0xfe, 0xfe, 0x8c, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x1c, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
+    0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10,
+    0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
+    0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x4c, 0x0,
+    0x0, 0xdc, 0xb3, 0xff, 0xff, 0xdf, 0xfe, 0x96,
+    0x36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x90, 0x57, 0xff, 0xff, 0xff, 0x43, 0x3e, 0x64,
+    0xca, 0x4d, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xc, 0x2e, 0x50, 0x5a, 0x66, 0xea, 0x4b,
+    0xed, 0xff, 0xf5, 0x67, 0x50, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x1c, 0x42, 0x60, 0x5a, 0x3a, 0x14, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x12, 0x36, 0x58, 0x60,
+    0x48, 0x22, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xdc, 0xb3, 0xff, 0xff, 0xf3, 0xb1, 0x69,
+    0x82, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x2a, 0xfe, 0x8d, 0x95, 0x95, 0x51, 0x3e, 0xd6,
+    0x9b, 0xbf, 0xff, 0xff, 0xff, 0x5b, 0x70, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0xd8,
+    0x35, 0xc9, 0x49, 0xe8, 0x34, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xda, 0xb3, 0xff, 0xff, 0xff, 0xff, 0x99,
+    0xae, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x56, 0x94, 0xbc, 0xa8, 0x76, 0x26, 0xf2,
+    0xe3, 0xff, 0xff, 0xff, 0xff, 0x5b, 0x6e, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14,
+    0xa0, 0xac, 0xa4, 0x20, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xb8, 0xab, 0xf5, 0xf5, 0xf5, 0xf5, 0x91,
+    0x98, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xea,
+    0xd9, 0xf5, 0xf5, 0xf5, 0xf5, 0x57, 0x4e, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x74, 0xec, 0xfc, 0xfe, 0xfe, 0xfc, 0xe8,
+    0x5a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xac,
+    0xf4, 0xfe, 0xfe, 0xfe, 0xfc, 0xe2, 0x2a, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x24, 0x52, 0x76, 0x76, 0x52, 0x26,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xa, 0x3e, 0x66, 0x80, 0x66, 0x3e, 0xa,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x54,
+    0x98, 0xba, 0xb2, 0x80, 0x34, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x28, 0x56, 0x78, 0x74, 0x50, 0x22, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x1a, 0x4a, 0x70, 0x7e, 0x5c, 0x30, 0x0,
+    0x0, 0x0, 0x1a, 0x4a, 0x70, 0x7e, 0x5c, 0x32,
+    0x0, 0x0, 0x0, 0x24, 0x52, 0x76, 0x78, 0x54,
+    0x26, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x1a, 0x4a, 0x70, 0x7e, 0x5c,
+    0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x3c,
+    0x6e, 0x90, 0x86, 0x5e, 0x2a, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xa0, 0x4f, 0x67, 0x67, 0x51, 0xa8,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x32, 0x21, 0x67, 0x67, 0x67, 0x21, 0x32,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0xf2, 0x2d,
+    0x7f, 0x9b, 0x99, 0x67, 0xaa, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xb4, 0x55, 0x67, 0x67, 0x4d, 0x98, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x78, 0x41, 0x67, 0x67, 0x5f, 0xda, 0x0,
+    0x0, 0x0, 0x74, 0x3f, 0x67, 0x67, 0x63, 0xe4,
+    0x0, 0x0, 0x0, 0xa0, 0x4f, 0x67, 0x67, 0x51,
+    0xac, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x78, 0x41, 0x67, 0x67, 0x5f,
+    0xda, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x17,
+    0x71, 0x73, 0x73, 0x57, 0xf0, 0x22, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xd4, 0xc3, 0xff, 0xff, 0xcb, 0xdc,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x54, 0x57, 0xff, 0xff, 0xff, 0x57, 0x54,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x28, 0xfc, 0x85, 0xfb,
+    0xff, 0xff, 0xff, 0xc7, 0xd2, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xe4, 0xd3, 0xff, 0xff, 0xbd, 0xce, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xae, 0x9f, 0xff, 0xff, 0xef, 0xf8, 0x0,
+    0x0, 0x0, 0xaa, 0x9b, 0xff, 0xff, 0xf5, 0xfa,
+    0x0, 0x0, 0x0, 0xd4, 0xc3, 0xff, 0xff, 0xcd,
+    0xde, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0xae, 0x9f, 0xff, 0xff, 0xef,
+    0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x6c,
+    0x77, 0xfb, 0xff, 0xfb, 0x4d, 0xc8, 0x8, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x6a, 0x57, 0xff, 0xff, 0xff, 0x57, 0x6a,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x8e, 0x55, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xb1, 0xcc, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xae, 0x9f, 0xff, 0xff, 0xef, 0xf8, 0x0,
+    0x0, 0x0, 0xaa, 0x9b, 0xff, 0xff, 0xf5, 0xfc,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd,
+    0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef,
+    0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40,
+    0xf6, 0x6d, 0xfb, 0xff, 0xe3, 0x1d, 0x5e, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x6a, 0x57, 0xff, 0xff, 0xff, 0x57, 0x6a,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xd2, 0xaf, 0xff, 0xff,
+    0xfb, 0x7b, 0x45, 0x37, 0x86, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x78, 0x41, 0x67, 0x67, 0x5f, 0xda, 0x0,
+    0x0, 0x0, 0x74, 0x3d, 0x63, 0x63, 0x5d, 0xe4,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd,
+    0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef,
+    0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x3a, 0xf2, 0x65, 0xd9, 0xd9, 0x95, 0x5e, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x6a, 0x57, 0xff, 0xff, 0xff, 0x57, 0x6a,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xec, 0xcd, 0xff, 0xff,
+    0xc9, 0xfe, 0x6a, 0x30, 0x16, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x1a, 0x4a, 0x70, 0x7e, 0x5c, 0x30, 0x0,
+    0x0, 0x0, 0x18, 0x46, 0x6a, 0x78, 0x58, 0x2e,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd,
+    0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef,
+    0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x34, 0xbe, 0xea, 0xee, 0xca, 0x58, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x3c, 0xa6, 0xe8, 0xfa,
+    0xfc, 0xf8, 0xe4, 0x98, 0x2a, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xf8,
+    0xea, 0xf8, 0xf8, 0xe2, 0x8e, 0x1c, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x8e, 0xde,
+    0xf8, 0xfc, 0xf8, 0xe4, 0x98, 0x2a, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x48, 0xbc, 0xf0, 0xfa,
+    0xf4, 0xe2, 0x57, 0xff, 0xff, 0xff, 0x57, 0x6a,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x74, 0xd4,
+    0xf6, 0xfa, 0xf8, 0xe6, 0x9e, 0x2e, 0x0, 0x0,
+    0x0, 0x0, 0x56, 0xb6, 0xfe, 0xd3, 0xff, 0xff,
+    0xbd, 0xfc, 0xd4, 0x9a, 0x18, 0x0, 0x0, 0x0,
+    0x0, 0x46, 0xba, 0xf0, 0xfa, 0xf6, 0xd2, 0xa4,
+    0xc0, 0xe2, 0xd4, 0x9e, 0x1e, 0x0, 0x0, 0x0,
+    0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xf2, 0xe0, 0xf8,
+    0xf8, 0xea, 0xa2, 0x28, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x44, 0xae, 0xdc, 0xe6, 0xc8, 0x80, 0x0,
+    0x0, 0x0, 0x38, 0xa8, 0xd8, 0xea, 0xce, 0x90,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd,
+    0xf0, 0x0, 0x5c, 0xb8, 0xe0, 0xea, 0xd4, 0x9e,
+    0x20, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef,
+    0xfe, 0x0, 0x0, 0x0, 0x5e, 0xb8, 0xe0, 0xdc,
+    0xb2, 0x9c, 0xda, 0xf6, 0xf8, 0xee, 0xae, 0x34,
+    0x60, 0xce, 0xf4, 0xfa, 0xf2, 0xc0, 0x48, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x68, 0xbe, 0xe2, 0xda,
+    0xae, 0x92, 0xd6, 0xf6, 0xfa, 0xf0, 0xb6, 0x3c,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x14,
+    0x78, 0xd4, 0xf6, 0xfa, 0xfa, 0xec, 0xb0, 0x44,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x4, 0x8e, 0xfe, 0x6f, 0xbf, 0xe3,
+    0xef, 0xe3, 0xb9, 0x57, 0xfc, 0x5c, 0x0, 0x0,
+    0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0x49,
+    0xc3, 0xeb, 0xe5, 0xb7, 0x41, 0xea, 0x26, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x52, 0xfa, 0x4d, 0xb3,
+    0xdf, 0xed, 0xe3, 0xb9, 0x57, 0xfc, 0x5c, 0x0,
+    0x0, 0x0, 0x0, 0x7a, 0xfe, 0x7d, 0xd1, 0xeb,
+    0xdd, 0x8f, 0x59, 0xff, 0xff, 0xff, 0x57, 0x6a,
+    0x0, 0x0, 0x0, 0x0, 0x2a, 0xe2, 0x2f, 0xa3,
+    0xdb, 0xed, 0xe3, 0xbd, 0x5d, 0xfe, 0x60, 0x0,
+    0x0, 0x0, 0xae, 0x8d, 0xc3, 0xf3, 0xff, 0xff,
+    0xeb, 0xc3, 0xc3, 0x3b, 0x38, 0x0, 0x0, 0x0,
+    0x76, 0xfe, 0x7b, 0xcf, 0xeb, 0xdf, 0x97, 0xd,
+    0xa5, 0xc3, 0xc3, 0x45, 0x44, 0x0, 0x0, 0x0,
+    0xf4, 0xd3, 0xff, 0xff, 0xbd, 0x2d, 0xb1, 0xe5,
+    0xe9, 0xc3, 0x55, 0xf2, 0x2e, 0x0, 0x0, 0x0,
+    0x0, 0x90, 0x79, 0xc3, 0xc3, 0xb7, 0xe8, 0x0,
+    0x0, 0x0, 0x78, 0x69, 0xc3, 0xc3, 0xc3, 0xfe,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd,
+    0xf0, 0x24, 0xfa, 0x93, 0xc3, 0xc3, 0xc3, 0x53,
+    0x20, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef,
+    0xfe, 0x0, 0x0, 0x0, 0xb8, 0x95, 0xc3, 0xc3,
+    0x79, 0x27, 0xa9, 0xe1, 0xeb, 0xcb, 0x61, 0xfc,
+    0x11, 0x95, 0xdb, 0xed, 0xd5, 0x7d, 0xfe, 0x5c,
+    0x0, 0x0, 0x0, 0x0, 0xc8, 0x9f, 0xc3, 0xc3,
+    0x71, 0x1d, 0xa1, 0xdf, 0xeb, 0xcf, 0x71, 0xfe,
+    0x4c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0xec,
+    0x35, 0xa5, 0xd9, 0xeb, 0xe5, 0xc5, 0x79, 0x5,
+    0x9e, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x62, 0x11, 0xc1, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0x93, 0xfa, 0x22, 0x0,
+    0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xe5, 0xf5,
+    0xff, 0xff, 0xff, 0xff, 0xf7, 0x53, 0xc4, 0x2,
+    0x0, 0x0, 0x0, 0x2c, 0xfa, 0x89, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0x93, 0xfe, 0x2e,
+    0x0, 0x0, 0x38, 0xfe, 0xb1, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xd9, 0xff, 0xff, 0xff, 0x57, 0x6a,
+    0x0, 0x0, 0x0, 0xe, 0xdc, 0x57, 0xf3, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xfc, 0x2e,
+    0x0, 0x0, 0xca, 0xbb, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0x4d, 0x4a, 0x0, 0x0, 0x36,
+    0xfe, 0xad, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1,
+    0xf1, 0xff, 0xff, 0x5b, 0x66, 0x0, 0x0, 0x0,
+    0xf4, 0xd3, 0xff, 0xff, 0xd1, 0xeb, 0xff, 0xff,
+    0xff, 0xff, 0xfb, 0x5d, 0xbc, 0x0, 0x0, 0x0,
+    0x0, 0xbc, 0x9f, 0xff, 0xff, 0xef, 0xfa, 0x0,
+    0x0, 0x0, 0xa4, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd,
+    0xf0, 0xb4, 0x4f, 0xff, 0xff, 0xff, 0xbf, 0xd4,
+    0x20, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef,
+    0xfe, 0x0, 0x0, 0x0, 0xe0, 0xc3, 0xff, 0xff,
+    0xbf, 0xe5, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x61,
+    0xcb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x93, 0xee,
+    0x8, 0x0, 0x0, 0x0, 0xea, 0xd1, 0xff, 0xff,
+    0xb1, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83,
+    0xe0, 0x2, 0x0, 0x0, 0x0, 0x1c, 0xec, 0x6b,
+    0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcd,
+    0x1d, 0x88, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xd2, 0x99, 0xff, 0xff, 0xff, 0xcb,
+    0xb7, 0xed, 0xff, 0xff, 0xff, 0x4b, 0x76, 0x0,
+    0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xff, 0xff,
+    0xdb, 0xe1, 0xff, 0xff, 0xff, 0xe1, 0xb, 0x34,
+    0x0, 0x0, 0x0, 0xac, 0x59, 0xff, 0xff, 0xff,
+    0xef, 0xd1, 0xf3, 0xff, 0xff, 0xff, 0x5d, 0x9c,
+    0x0, 0x0, 0xb0, 0x6b, 0xff, 0xff, 0xff, 0xf9,
+    0xd5, 0xef, 0xff, 0xff, 0xff, 0xff, 0x57, 0x6a,
+    0x0, 0x0, 0x0, 0x70, 0x29, 0xef, 0xff, 0xff,
+    0xf9, 0xd5, 0xed, 0xff, 0xff, 0xff, 0x5d, 0xa2,
+    0x0, 0x0, 0xb0, 0x93, 0xcb, 0xf3, 0xff, 0xff,
+    0xef, 0xcb, 0xcb, 0x3d, 0x38, 0x0, 0x0, 0xae,
+    0x67, 0xff, 0xff, 0xff, 0xf9, 0xd5, 0xed, 0xff,
+    0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, 0x0, 0x0,
+    0xf4, 0xd3, 0xff, 0xff, 0xff, 0xf9, 0xd7, 0xeb,
+    0xff, 0xff, 0xff, 0xd9, 0xfe, 0x10, 0x0, 0x0,
+    0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, 0xfe, 0x0,
+    0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd,
+    0xf4, 0x5, 0xd5, 0xff, 0xff, 0xed, 0x27, 0x8e,
+    0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef,
+    0xfe, 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff,
+    0xff, 0xfb, 0xd7, 0xeb, 0xff, 0xff, 0xff, 0xf9,
+    0xff, 0xe5, 0xdb, 0xff, 0xff, 0xff, 0xf9, 0x1f,
+    0x3c, 0x0, 0x0, 0x0, 0xf2, 0xd1, 0xff, 0xff,
+    0xff, 0xfb, 0xd9, 0xe7, 0xff, 0xff, 0xff, 0xef,
+    0xb, 0x22, 0x0, 0x0, 0x0, 0x92, 0x41, 0xf9,
+    0xff, 0xff, 0xf9, 0xd1, 0xe3, 0xff, 0xff, 0xff,
+    0xb9, 0xfe, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xd4, 0xdf, 0xff, 0xff, 0xbd, 0xfe,
+    0xf6, 0x31, 0xf9, 0xff, 0xff, 0x9b, 0xb8, 0x0,
+    0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xf7, 0x4f,
+    0xfe, 0xfe, 0x8f, 0xff, 0xff, 0xff, 0x63, 0x88,
+    0x0, 0x0, 0x8, 0xfa, 0xcb, 0xff, 0xff, 0xdb,
+    0x19, 0xfc, 0x23, 0xdf, 0xff, 0xff, 0xbb, 0xe2,
+    0x0, 0x4, 0xf8, 0xcb, 0xff, 0xff, 0xf1, 0x39,
+    0xfe, 0x11, 0xbb, 0xff, 0xff, 0xff, 0x57, 0x6a,
+    0x0, 0x0, 0x0, 0xda, 0xa1, 0xff, 0xff, 0xf9,
+    0x49, 0xfe, 0x15, 0xd5, 0xff, 0xff, 0xc3, 0xf0,
+    0x0, 0x0, 0x5a, 0xbc, 0xfe, 0xd3, 0xff, 0xff,
+    0xbd, 0xfe, 0xda, 0xa2, 0x18, 0x0, 0x2, 0xf8,
+    0xcb, 0xff, 0xff, 0xf1, 0x39, 0xfe, 0xb, 0xad,
+    0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, 0x0, 0x0,
+    0xf4, 0xd3, 0xff, 0xff, 0xe3, 0x35, 0xfe, 0x9,
+    0xbb, 0xff, 0xff, 0xff, 0x2d, 0x36, 0x0, 0x0,
+    0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, 0xfe, 0x0,
+    0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd,
+    0xfe, 0x81, 0xff, 0xff, 0xff, 0x67, 0xda, 0xc,
+    0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef,
+    0xfe, 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff,
+    0xed, 0x43, 0xfe, 0xd, 0xcf, 0xff, 0xff, 0xff,
+    0x8f, 0xfe, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0x67,
+    0x78, 0x0, 0x0, 0x0, 0xf2, 0xd1, 0xff, 0xff,
+    0xeb, 0x43, 0xfe, 0xfe, 0xa7, 0xff, 0xff, 0xff,
+    0x49, 0x50, 0x0, 0x0, 0x2, 0xf2, 0xbb, 0xff,
+    0xff, 0xf1, 0x39, 0xfc, 0xfe, 0xa1, 0xff, 0xff,
+    0xff, 0x49, 0x76, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xbc, 0x2b, 0x2f, 0x2f, 0x1d, 0xda,
+    0xc0, 0xfe, 0xdf, 0xff, 0xff, 0xb1, 0xd4, 0x0,
+    0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xfa,
+    0x24, 0x5a, 0x11, 0xf7, 0xff, 0xff, 0xa1, 0xca,
+    0x0, 0x0, 0x2a, 0x1b, 0xfd, 0xff, 0xff, 0x87,
+    0xd4, 0x12, 0xd0, 0x89, 0xff, 0xff, 0xdd, 0xdc,
+    0x0, 0x1e, 0xf, 0xfb, 0xff, 0xff, 0xa7, 0xee,
+    0x1a, 0xaa, 0x57, 0xff, 0xff, 0xff, 0x57, 0x6a,
+    0x0, 0x0, 0x4, 0xfe, 0xe3, 0xff, 0xff, 0xb5,
+    0xfe, 0xdc, 0xf8, 0x87, 0xff, 0xff, 0xf1, 0xfe,
+    0x2, 0x0, 0x0, 0x0, 0xf4, 0xd3, 0xff, 0xff,
+    0xbd, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x1c, 0xd,
+    0xfb, 0xff, 0xff, 0xa7, 0xee, 0x18, 0x9c, 0x51,
+    0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, 0x0, 0x0,
+    0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xf2, 0x14, 0xa4,
+    0x5d, 0xff, 0xff, 0xff, 0x57, 0x60, 0x0, 0x0,
+    0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, 0xfe, 0x0,
+    0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd,
+    0x25, 0xf1, 0xff, 0xff, 0xaf, 0xfe, 0x36, 0x0,
+    0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef,
+    0xfe, 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff,
+    0xcb, 0xf8, 0x1e, 0xce, 0x87, 0xff, 0xff, 0xff,
+    0x25, 0x68, 0x4e, 0x1b, 0xff, 0xff, 0xff, 0x87,
+    0xa4, 0x0, 0x0, 0x0, 0xf2, 0xd1, 0xff, 0xff,
+    0xc1, 0xf6, 0x1c, 0x8e, 0x4f, 0xff, 0xff, 0xff,
+    0x67, 0x78, 0x0, 0x0, 0x1a, 0xb, 0xf7, 0xff,
+    0xff, 0xa3, 0xee, 0x16, 0x6e, 0x1d, 0xf7, 0xff,
+    0xff, 0x9b, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x14, 0x90, 0xfa, 0x2d, 0x6f, 0x8d,
+    0x97, 0x99, 0xef, 0xff, 0xff, 0xb3, 0xdc, 0x0,
+    0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee,
+    0x0, 0x4, 0xfa, 0xd1, 0xff, 0xff, 0xc1, 0xe4,
+    0x0, 0x0, 0x52, 0x4f, 0xff, 0xff, 0xff, 0x59,
+    0x80, 0x0, 0x52, 0xfe, 0xfe, 0xfe, 0xfe, 0xb4,
+    0x0, 0x40, 0x41, 0xff, 0xff, 0xff, 0x6f, 0xa2,
+    0x0, 0x6a, 0x57, 0xff, 0xff, 0xff, 0x57, 0x6a,
+    0x0, 0x0, 0x12, 0x11, 0xff, 0xff, 0xff, 0xd3,
+    0xad, 0xad, 0xad, 0xc9, 0xff, 0xff, 0xff, 0xb,
+    0x6, 0x0, 0x0, 0x0, 0xf4, 0xd3, 0xff, 0xff,
+    0xbd, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x3e, 0x41,
+    0xff, 0xff, 0xff, 0x6f, 0xa2, 0x0, 0x64, 0x51,
+    0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, 0x0, 0x0,
+    0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x56,
+    0x41, 0xff, 0xff, 0xff, 0x65, 0x78, 0x0, 0x0,
+    0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, 0xfe, 0x0,
+    0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xfb,
+    0xf3, 0xff, 0xff, 0xe5, 0x19, 0x7a, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef,
+    0xfe, 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff,
+    0xcb, 0xee, 0x0, 0x9c, 0x75, 0xff, 0xff, 0xff,
+    0x29, 0x26, 0x8, 0xfe, 0xfb, 0xff, 0xff, 0x91,
+    0xb4, 0x0, 0x0, 0x0, 0xf2, 0xd1, 0xff, 0xff,
+    0xc1, 0xe8, 0x0, 0x48, 0x39, 0xff, 0xff, 0xff,
+    0x6f, 0x88, 0x0, 0x0, 0x3e, 0x3f, 0xff, 0xff,
+    0xff, 0x6d, 0xa0, 0x0, 0x8, 0xfa, 0xd5, 0xff,
+    0xff, 0xc1, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x8c, 0x19, 0xb5, 0xfd, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xb3, 0xdc, 0x0,
+    0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee,
+    0x0, 0x0, 0xee, 0xc3, 0xff, 0xff, 0xcd, 0xec,
+    0x0, 0x0, 0x6a, 0x5f, 0xff, 0xff, 0xff, 0x47,
+    0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x58, 0x51, 0xff, 0xff, 0xff, 0x59, 0x7a,
+    0x0, 0x6a, 0x57, 0xff, 0xff, 0xff, 0x57, 0x6a,
+    0x0, 0x0, 0x1c, 0x2b, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x15,
+    0xa, 0x0, 0x0, 0x0, 0xf4, 0xd3, 0xff, 0xff,
+    0xbd, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x58, 0x51,
+    0xff, 0xff, 0xff, 0x59, 0x7a, 0x0, 0x64, 0x51,
+    0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, 0x0, 0x0,
+    0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x46,
+    0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0, 0x0,
+    0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, 0xfe, 0x0,
+    0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xd3, 0x5, 0x54, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef,
+    0xfe, 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff,
+    0xcb, 0xee, 0x0, 0x94, 0x73, 0xff, 0xff, 0xff,
+    0x29, 0x2a, 0x0, 0xfe, 0xfb, 0xff, 0xff, 0x91,
+    0xb8, 0x0, 0x0, 0x0, 0xf2, 0xd1, 0xff, 0xff,
+    0xc1, 0xe8, 0x0, 0x3e, 0x39, 0xff, 0xff, 0xff,
+    0x6f, 0x8c, 0x0, 0x0, 0x54, 0x53, 0xff, 0xff,
+    0xff, 0x57, 0x7a, 0x0, 0x0, 0xf0, 0xc3, 0xff,
+    0xff, 0xcd, 0xec, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xc, 0xfc, 0xbd, 0xff, 0xff, 0xfb, 0xb5,
+    0x91, 0x8d, 0xed, 0xff, 0xff, 0xb3, 0xdc, 0x0,
+    0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee,
+    0x0, 0x0, 0xf0, 0xc5, 0xff, 0xff, 0xcb, 0xec,
+    0x0, 0x0, 0x5e, 0x57, 0xff, 0xff, 0xff, 0x51,
+    0x6e, 0x0, 0x18, 0x54, 0x80, 0x92, 0x6c, 0x38,
+    0x0, 0x52, 0x4f, 0xff, 0xff, 0xff, 0x5d, 0x82,
+    0x0, 0x6a, 0x57, 0xff, 0xff, 0xff, 0x57, 0x6a,
+    0x0, 0x0, 0x18, 0x21, 0xff, 0xff, 0xff, 0xdb,
+    0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xf,
+    0x8, 0x0, 0x0, 0x0, 0xf4, 0xd3, 0xff, 0xff,
+    0xbd, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x52, 0x4f,
+    0xff, 0xff, 0xff, 0x5d, 0x82, 0x0, 0x64, 0x51,
+    0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, 0x0, 0x0,
+    0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x46,
+    0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0, 0x0,
+    0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, 0xfe, 0x0,
+    0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xf1,
+    0xcd, 0xff, 0xff, 0xff, 0x87, 0xea, 0x12, 0x0,
+    0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef,
+    0xfe, 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff,
+    0xcb, 0xee, 0x0, 0x94, 0x73, 0xff, 0xff, 0xff,
+    0x29, 0x2a, 0x0, 0xfe, 0xfb, 0xff, 0xff, 0x91,
+    0xb8, 0x0, 0x0, 0x0, 0xf2, 0xd1, 0xff, 0xff,
+    0xc1, 0xe8, 0x0, 0x3e, 0x39, 0xff, 0xff, 0xff,
+    0x6f, 0x8c, 0x0, 0x0, 0x48, 0x49, 0xff, 0xff,
+    0xff, 0x65, 0x8a, 0x0, 0x0, 0xf6, 0xcf, 0xff,
+    0xff, 0xc7, 0xe8, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x2a, 0x27, 0xff, 0xff, 0xff, 0x91, 0xfc,
+    0xc8, 0xfe, 0xdd, 0xff, 0xff, 0xb3, 0xdc, 0x0,
+    0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xf4,
+    0x4, 0x1c, 0xfe, 0xdb, 0xff, 0xff, 0xb9, 0xde,
+    0x0, 0x0, 0x3a, 0x33, 0xff, 0xff, 0xff, 0x71,
+    0xb2, 0x0, 0x82, 0x3b, 0x77, 0x77, 0x69, 0xb6,
+    0x0, 0x34, 0x33, 0xff, 0xff, 0xff, 0x7d, 0xc4,
+    0x0, 0x7c, 0x57, 0xff, 0xff, 0xff, 0x57, 0x6a,
+    0x0, 0x0, 0xa, 0xfe, 0xf5, 0xff, 0xff, 0xab,
+    0xfe, 0xea, 0xe8, 0xe8, 0xea, 0xea, 0xd0, 0x8e,
+    0x4, 0x0, 0x0, 0x0, 0xf4, 0xd3, 0xff, 0xff,
+    0xbd, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x34, 0x33,
+    0xff, 0xff, 0xff, 0x7d, 0xc4, 0x0, 0x74, 0x51,
+    0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, 0x0, 0x0,
+    0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x46,
+    0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0, 0x0,
+    0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, 0xfe, 0x0,
+    0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd,
+    0xfe, 0xd1, 0xff, 0xff, 0xf5, 0x31, 0x96, 0x0,
+    0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef,
+    0xfe, 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff,
+    0xcb, 0xee, 0x0, 0x94, 0x73, 0xff, 0xff, 0xff,
+    0x29, 0x2a, 0x0, 0xfe, 0xfb, 0xff, 0xff, 0x91,
+    0xb8, 0x0, 0x0, 0x0, 0xf2, 0xd1, 0xff, 0xff,
+    0xc1, 0xe8, 0x0, 0x3e, 0x39, 0xff, 0xff, 0xff,
+    0x6f, 0x8c, 0x0, 0x0, 0x26, 0x1f, 0xff, 0xff,
+    0xff, 0x89, 0xd0, 0x0, 0x36, 0x5, 0xeb, 0xff,
+    0xff, 0xab, 0xd2, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x32, 0x47, 0xff, 0xff, 0xff, 0x65, 0xe8,
+    0xd4, 0x13, 0xe9, 0xff, 0xff, 0xb3, 0xe2, 0x0,
+    0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xe1, 0xf,
+    0xe2, 0xee, 0x43, 0xff, 0xff, 0xff, 0x8f, 0xb4,
+    0x0, 0x0, 0x14, 0xfe, 0xe5, 0xff, 0xff, 0xbd,
+    0xfe, 0xd8, 0xfe, 0xad, 0xff, 0xff, 0xd1, 0xce,
+    0x0, 0x14, 0xfe, 0xef, 0xff, 0xff, 0xcd, 0x5,
+    0xde, 0xfa, 0x7b, 0xff, 0xff, 0xff, 0x57, 0x6a,
+    0x0, 0x0, 0x0, 0xf2, 0xc1, 0xff, 0xff, 0xf5,
+    0x39, 0xf0, 0xbe, 0xd4, 0xfc, 0x3b, 0xf4, 0x10,
+    0x0, 0x0, 0x0, 0x0, 0xf4, 0xd3, 0xff, 0xff,
+    0xbd, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x14, 0xfe,
+    0xed, 0xff, 0xff, 0xcd, 0x5, 0xdc, 0xf8, 0x71,
+    0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, 0x0, 0x0,
+    0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x46,
+    0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0, 0x0,
+    0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, 0xfe, 0x0,
+    0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd,
+    0xfa, 0x47, 0xfb, 0xff, 0xff, 0xc3, 0xfe, 0x3e,
+    0x0, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef,
+    0xfe, 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff,
+    0xcb, 0xee, 0x0, 0x94, 0x73, 0xff, 0xff, 0xff,
+    0x29, 0x2a, 0x0, 0xfe, 0xfb, 0xff, 0xff, 0x91,
+    0xb8, 0x0, 0x0, 0x0, 0xf2, 0xd1, 0xff, 0xff,
+    0xc1, 0xe8, 0x0, 0x3e, 0x39, 0xff, 0xff, 0xff,
+    0x6f, 0x8c, 0x0, 0x0, 0x8, 0xfc, 0xd5, 0xff,
+    0xff, 0xd7, 0x5, 0xd6, 0xf2, 0x69, 0xff, 0xff,
+    0xff, 0x6d, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x28, 0x21, 0xff, 0xff, 0xff, 0xd9, 0x73,
+    0x81, 0xd9, 0xff, 0xff, 0xff, 0xbf, 0xec, 0x0,
+    0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xff, 0xd9,
+    0x95, 0xa1, 0xed, 0xff, 0xff, 0xfb, 0x35, 0x64,
+    0x0, 0x0, 0x0, 0xd4, 0x8b, 0xff, 0xff, 0xff,
+    0xbf, 0x8d, 0xb5, 0xff, 0xff, 0xff, 0x8d, 0xc2,
+    0x0, 0x0, 0xe6, 0xa7, 0xff, 0xff, 0xff, 0xcd,
+    0x93, 0xaf, 0xfb, 0xff, 0xff, 0xff, 0x57, 0x6a,
+    0x0, 0x0, 0x0, 0x9e, 0x55, 0xff, 0xff, 0xff,
+    0xf1, 0xa1, 0x87, 0x97, 0xcd, 0xfd, 0x2f, 0x5c,
+    0x0, 0x0, 0x0, 0x0, 0xf4, 0xd3, 0xff, 0xff,
+    0xbd, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe4,
+    0xa5, 0xff, 0xff, 0xff, 0xcd, 0x93, 0xab, 0xf9,
+    0xff, 0xff, 0xff, 0x5b, 0x70, 0x0, 0x0, 0x0,
+    0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x46,
+    0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0, 0x0,
+    0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, 0xfe, 0x0,
+    0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd,
+    0xf2, 0xf8, 0xa3, 0xff, 0xff, 0xff, 0x71, 0xdc,
+    0xa, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef,
+    0xfe, 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff,
+    0xcb, 0xee, 0x0, 0x94, 0x73, 0xff, 0xff, 0xff,
+    0x29, 0x2a, 0x0, 0xfe, 0xfb, 0xff, 0xff, 0x91,
+    0xb8, 0x0, 0x0, 0x0, 0xf2, 0xd1, 0xff, 0xff,
+    0xc1, 0xe8, 0x0, 0x3e, 0x39, 0xff, 0xff, 0xff,
+    0x6f, 0x8c, 0x0, 0x0, 0x0, 0xba, 0x6f, 0xff,
+    0xff, 0xff, 0xcd, 0x89, 0x9d, 0xf3, 0xff, 0xff,
+    0xe1, 0x9, 0x3a, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xa, 0xfc, 0xbb, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xfb, 0xe5, 0xff, 0xff, 0xd7, 0xfc, 0x8,
+    0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xe3, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xf6, 0x14,
+    0x0, 0x0, 0x0, 0x54, 0xb, 0xcb, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xf, 0x58,
+    0x0, 0x0, 0x76, 0x27, 0xeb, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xe9, 0xfd, 0xff, 0xff, 0x57, 0x6a,
+    0x0, 0x0, 0x0, 0x28, 0xfa, 0x91, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x64,
+    0x0, 0x0, 0x0, 0x0, 0xf4, 0xd3, 0xff, 0xff,
+    0xbd, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x72,
+    0x23, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb,
+    0xff, 0xff, 0xff, 0x5b, 0x6e, 0x0, 0x0, 0x0,
+    0xf4, 0xd3, 0xff, 0xff, 0xbd, 0xe4, 0x0, 0x46,
+    0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0, 0x0,
+    0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef, 0xfe, 0x0,
+    0x0, 0x0, 0xb0, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcd,
+    0xf0, 0x70, 0x19, 0xe9, 0xff, 0xff, 0xed, 0x21,
+    0x80, 0x0, 0x0, 0xc8, 0x9f, 0xff, 0xff, 0xef,
+    0xfe, 0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff,
+    0xcb, 0xee, 0x0, 0x94, 0x73, 0xff, 0xff, 0xff,
+    0x29, 0x2a, 0x0, 0xfe, 0xfb, 0xff, 0xff, 0x91,
+    0xb8, 0x0, 0x0, 0x0, 0xf2, 0xd1, 0xff, 0xff,
+    0xc1, 0xe8, 0x0, 0x3e, 0x39, 0xff, 0xff, 0xff,
+    0x6f, 0x8c, 0x0, 0x0, 0x0, 0x3c, 0xfe, 0xad,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3,
+    0x4b, 0xc2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xf4, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
+    0xfe, 0xfe, 0xfe, 0xfe, 0x8c, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x8a, 0x1d, 0xb9, 0xff, 0xff, 0xff,
+    0xe9, 0x67, 0x8b, 0xff, 0xff, 0xfd, 0x1f, 0x8,
+    0x0, 0x0, 0xce, 0xc3, 0xff, 0xff, 0x77, 0x97,
+    0xf9, 0xff, 0xff, 0xf5, 0x99, 0x5, 0x66, 0x0,
+    0x0, 0x0, 0x0, 0x2, 0x9a, 0x11, 0x9d, 0xf1,
+    0xff, 0xff, 0xff, 0xf3, 0x9d, 0x13, 0xa2, 0x4,
+    0x0, 0x0, 0xc, 0xd0, 0x3d, 0xcd, 0xff, 0xff,
+    0xff, 0xd9, 0x3f, 0xe3, 0xff, 0xff, 0x57, 0x4c,
+    0x0, 0x0, 0x0, 0x0, 0x58, 0xfe, 0x6d, 0xdb,
+    0xff, 0xff, 0xff, 0xff, 0xeb, 0xa1, 0x23, 0x58,
+    0x0, 0x0, 0x0, 0x0, 0xe0, 0xd3, 0xff, 0xff,
+    0xbd, 0xc8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc,
+    0xce, 0x39, 0xcb, 0xff, 0xff, 0xff, 0xdf, 0x81,
+    0xff, 0xff, 0xff, 0x59, 0x64, 0x0, 0x0, 0x0,
+    0xe0, 0xd3, 0xff, 0xff, 0xbd, 0xc8, 0x0, 0x30,
+    0x3f, 0xff, 0xff, 0xff, 0x67, 0x60, 0x0, 0x0,
+    0x0, 0xa4, 0x9f, 0xff, 0xff, 0xef, 0xf6, 0x0,
+    0x0, 0x0, 0xb2, 0x89, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0xce, 0xc3, 0xff, 0xff, 0xcd,
+    0xd8, 0x6, 0xd4, 0x6d, 0xff, 0xff, 0xff, 0xb1,
+    0x80, 0x0, 0x0, 0xa4, 0x9f, 0xff, 0xff, 0xef,
+    0xf6, 0x0, 0x0, 0x0, 0xce, 0xc3, 0xff, 0xff,
+    0xcb, 0xd6, 0x0, 0x70, 0x73, 0xff, 0xff, 0xff,
+    0x29, 0x1c, 0x0, 0xfe, 0xfb, 0xff, 0xff, 0x91,
+    0x94, 0x0, 0x0, 0x0, 0xdc, 0xd1, 0xff, 0xff,
+    0xc1, 0xcc, 0x0, 0x2a, 0x39, 0xff, 0xff, 0xff,
+    0x6f, 0x68, 0x0, 0x0, 0x0, 0x0, 0x76, 0xfe,
+    0x83, 0xe5, 0xff, 0xff, 0xff, 0xfb, 0xc1, 0x3f,
+    0xe0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xfe, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xc1, 0xcc, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x8, 0x88, 0xfa, 0x25, 0x53, 0x45,
+    0x9, 0xe0, 0xfe, 0xfe, 0xfe, 0xfe, 0xf2, 0x8,
+    0x0, 0x0, 0x90, 0xfe, 0xfe, 0xfe, 0xfe, 0xf4,
+    0x1d, 0x4f, 0x49, 0x11, 0xea, 0x60, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x4, 0x66, 0xe4, 0x5,
+    0x3f, 0x55, 0x45, 0xb, 0xe8, 0x68, 0x4, 0x0,
+    0x0, 0x0, 0x0, 0x18, 0xa4, 0xfc, 0x2d, 0x53,
+    0x3d, 0xfe, 0xec, 0xfe, 0xfe, 0xfe, 0xfe, 0x2a,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x3a, 0xc2, 0xfe,
+    0x2d, 0x51, 0x51, 0x31, 0xfe, 0xe2, 0x70, 0xc,
+    0x0, 0x0, 0x0, 0x0, 0xa6, 0xfe, 0xfe, 0xfe,
+    0xfe, 0x88, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x1e, 0xa6, 0xfc, 0x2d, 0x53, 0x41, 0xfe, 0x73,
+    0xff, 0xff, 0xff, 0x43, 0x42, 0x0, 0x0, 0x0,
+    0xa6, 0xfe, 0xfe, 0xfe, 0xfe, 0x88, 0x0, 0x1a,
+    0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x36, 0x0, 0x0,
+    0x0, 0x68, 0xfe, 0xfe, 0xfe, 0xfe, 0xd2, 0x0,
+    0x0, 0x0, 0xc2, 0x8d, 0xff, 0xff, 0xff, 0xfe,
+    0x0, 0x0, 0x0, 0x90, 0xfe, 0xfe, 0xfe, 0xfe,
+    0x9c, 0x0, 0x3a, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
+    0x7c, 0x0, 0x0, 0x68, 0xfe, 0xfe, 0xfe, 0xfe,
+    0xd2, 0x0, 0x0, 0x0, 0x90, 0xfe, 0xfe, 0xfe,
+    0xfe, 0x98, 0x0, 0x40, 0xfe, 0xfe, 0xfe, 0xfe,
+    0xfe, 0xe, 0x0, 0xec, 0xfe, 0xfe, 0xfe, 0xfe,
+    0x5a, 0x0, 0x0, 0x0, 0xa2, 0xfe, 0xfe, 0xfe,
+    0xfe, 0x8c, 0x0, 0x16, 0xfe, 0xfe, 0xfe, 0xfe,
+    0xfe, 0x3c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4c,
+    0xd4, 0xfe, 0x35, 0x53, 0x49, 0x1b, 0xf8, 0x98,
+    0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xfe, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xc1, 0xda, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xc, 0x30, 0x48, 0x40,
+    0x1e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8,
+    0x2c, 0x46, 0x42, 0x24, 0x4, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1a,
+    0x3e, 0x54, 0x42, 0x1e, 0x2, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x34, 0x48,
+    0x3c, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10,
+    0x32, 0x50, 0x52, 0x36, 0x12, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x5a, 0x21, 0x15, 0xf6, 0xde, 0xe8, 0xb, 0xcf,
+    0xff, 0xff, 0xf3, 0xb, 0x1e, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x7a, 0xbe, 0xfe, 0xb1, 0xff, 0xff, 0xef, 0xfe,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x14, 0x38, 0x50, 0x48, 0x26, 0x8, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xf8, 0xa7, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
+    0xa9, 0xa9, 0xa9, 0x7f, 0xac, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xba, 0x8d, 0xf3, 0xb9, 0x9b, 0x9d, 0xdb, 0xff,
+    0xff, 0xff, 0xa1, 0xea, 0x2, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc,
+    0x5, 0xb1, 0xb9, 0xfd, 0xff, 0xff, 0xbf, 0xee,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x70, 0xb0, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
+    0xd4, 0xd4, 0xc8, 0x9a, 0x48, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xc2, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xcd, 0x13, 0x6c, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20,
+    0x23, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x4d, 0x9a,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xa4, 0x55, 0xb1, 0xef, 0xff, 0xff, 0xfd, 0xdb,
+    0x89, 0xb, 0x9e, 0x4, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20,
+    0x37, 0xff, 0xff, 0xff, 0xd5, 0x57, 0xf0, 0x22,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x28, 0x90, 0xea, 0xfe, 0x21, 0x2d, 0x11, 0xfc,
+    0xc8, 0x52, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x16,
+    0xfa, 0x1b, 0x35, 0x1b, 0xfc, 0xb4, 0x2a, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0xa, 0x1a, 0x1c, 0x14, 0x4,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x8, 0x1a, 0x22, 0x1a, 0x8, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x26,
+    0x86, 0x86, 0x72, 0x2, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x76,
+    0x84, 0x80, 0x1e, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x7a, 0xfe,
+    0x51, 0xa9, 0xd, 0x3a, 0x0, 0x0, 0x0, 0xa,
+    0x16, 0x16, 0xc, 0x0, 0x0, 0x0, 0x4e, 0x1f,
+    0xa7, 0x45, 0xfa, 0x68, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x62, 0xb, 0xb1,
+    0xff, 0xff, 0x69, 0x4e, 0x0, 0x0, 0x0, 0xec,
+    0x21, 0x23, 0x5, 0x10, 0x0, 0x0, 0x64, 0x7d,
+    0xff, 0xff, 0x9f, 0xfe, 0x4c, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xaa,
+    0xe2, 0xf6, 0xe8, 0xbc, 0x3a, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x6, 0xe6, 0x99, 0xff,
+    0xff, 0xd9, 0x3f, 0x4c, 0x0, 0x0, 0x0, 0xfe,
+    0xfb, 0xff, 0x2f, 0x20, 0x0, 0x0, 0x60, 0x49,
+    0xe1, 0xff, 0xff, 0x83, 0xd4, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xb,
+    0xd7, 0xd7, 0xd7, 0x6d, 0x76, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x2c, 0x17, 0xf1, 0xff,
+    0xff, 0x37, 0xba, 0x1a, 0x0, 0x0, 0x0, 0xfe,
+    0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x20, 0xca,
+    0x4f, 0xff, 0xff, 0xe7, 0x9, 0x16, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xd,
+    0xff, 0xff, 0xff, 0x83, 0x9e, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x60, 0x53, 0xff, 0xff,
+    0xdd, 0xfe, 0x16, 0x0, 0x0, 0x0, 0x0, 0xfe,
+    0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x24,
+    0xfe, 0xed, 0xff, 0xff, 0x39, 0x40, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x5e, 0xb8, 0xe0, 0xdc, 0xb6, 0xb6, 0xea,
+    0xf8, 0xf8, 0xe0, 0x88, 0x16, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x48, 0xbc, 0xf0, 0xfa,
+    0xf6, 0xd0, 0xa6, 0xc4, 0xe4, 0xd2, 0x9a, 0x16,
+    0x0, 0x0, 0x0, 0x5e, 0xb8, 0xe0, 0xdc, 0xb8,
+    0xbc, 0xec, 0xf0, 0xda, 0x46, 0x0, 0x0, 0x0,
+    0x4, 0x54, 0xbe, 0xf0, 0xfa, 0xfc, 0xf6, 0xd6,
+    0x80, 0x1a, 0x0, 0x0, 0x0, 0x64, 0xbc, 0xd,
+    0xff, 0xff, 0xff, 0x83, 0xf4, 0xb2, 0x4e, 0x0,
+    0x0, 0x6a, 0xbe, 0xe2, 0xde, 0xb6, 0x56, 0x0,
+    0x10, 0x98, 0xd2, 0xea, 0xd6, 0xa0, 0x24, 0x0,
+    0x0, 0x5e, 0xba, 0xe0, 0xe6, 0xc4, 0x78, 0x0,
+    0x0, 0x4e, 0xb2, 0xdc, 0xe8, 0xca, 0x86, 0x0,
+    0x4c, 0xb2, 0xdc, 0xde, 0xb4, 0x52, 0x0, 0x38,
+    0xa8, 0xd8, 0xd0, 0x92, 0x6, 0x2, 0x8e, 0xce,
+    0xea, 0xd4, 0x9a, 0x18, 0x0, 0x3a, 0xaa, 0xda,
+    0xea, 0xd8, 0xa4, 0x2e, 0xa, 0x92, 0xd0, 0xea,
+    0xe2, 0xbe, 0x68, 0x0, 0x72, 0xc2, 0xe4, 0xe4,
+    0xc2, 0x74, 0x0, 0x0, 0x4e, 0xb2, 0xde, 0xea,
+    0xd0, 0x94, 0xa, 0x0, 0x86, 0xca, 0xe8, 0xea,
+    0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xd4, 0x9c,
+    0x1c, 0x0, 0x0, 0x0, 0x88, 0x73, 0xff, 0xff,
+    0xcb, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe,
+    0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0,
+    0xfa, 0xdb, 0xff, 0xff, 0x5d, 0x68, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xb8, 0x95, 0xc3, 0xc3, 0x75, 0x49, 0xc3,
+    0xeb, 0xe3, 0xb3, 0x39, 0xe2, 0x20, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x7a, 0xfe, 0x7d, 0xd1, 0xeb,
+    0xdf, 0x93, 0xb, 0xad, 0xc3, 0xc3, 0x37, 0x32,
+    0x0, 0x0, 0x0, 0xb8, 0x95, 0xc3, 0xc3, 0x79,
+    0x43, 0xc9, 0xeb, 0x7b, 0x74, 0x0, 0x0, 0xc,
+    0xb2, 0x11, 0x89, 0xcf, 0xe9, 0xed, 0xd9, 0xa9,
+    0x3f, 0xf2, 0x40, 0x0, 0x0, 0xc4, 0x9d, 0xc5,
+    0xff, 0xff, 0xff, 0xdb, 0xc3, 0x83, 0xa0, 0x0,
+    0x0, 0xca, 0xa1, 0xc3, 0xc3, 0x8d, 0xae, 0x0,
+    0x28, 0x2f, 0xc3, 0xc3, 0xc3, 0x4f, 0x52, 0x0,
+    0x0, 0x90, 0x97, 0xc3, 0xc3, 0xaf, 0xfc, 0xe,
+    0x0, 0xc6, 0x83, 0xc3, 0xc3, 0xbb, 0xb, 0x0,
+    0x7c, 0x83, 0xc3, 0xc3, 0x89, 0xc6, 0x0, 0xa6,
+    0x6b, 0xc3, 0xc3, 0x17, 0x3c, 0x22, 0xb, 0xc1,
+    0xc3, 0xc3, 0x3f, 0x1c, 0x0, 0x40, 0x73, 0xc3,
+    0xc3, 0xc3, 0x5b, 0xb0, 0x64, 0x21, 0xc1, 0xc3,
+    0xc3, 0xa1, 0x84, 0x0, 0xaa, 0xa9, 0xc3, 0xc3,
+    0xab, 0xfc, 0x10, 0x0, 0xd0, 0x85, 0xc3, 0xc3,
+    0xc3, 0x27, 0xa, 0x0, 0xee, 0xbb, 0xc3, 0xc3,
+    0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x41,
+    0x40, 0x0, 0x0, 0x0, 0x98, 0x7b, 0xff, 0xff,
+    0xc7, 0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe,
+    0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0,
+    0xf6, 0xd7, 0xff, 0xff, 0x67, 0x7c, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xe0, 0xc3, 0xff, 0xff, 0xcf, 0xf7, 0xff,
+    0xff, 0xff, 0xff, 0xf3, 0x49, 0xba, 0x0, 0x0,
+    0x0, 0x0, 0x38, 0xfe, 0xb1, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xbb, 0xfb, 0xff, 0xff, 0x49, 0x4c,
+    0x0, 0x0, 0x0, 0xe0, 0xc3, 0xff, 0xff, 0xb9,
+    0xeb, 0xff, 0xff, 0x75, 0x8c, 0x0, 0x0, 0x7c,
+    0x23, 0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xfb, 0x73, 0xec, 0x10, 0x0, 0xdc, 0xcd, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xad, 0xbe, 0x0,
+    0x0, 0xec, 0xd3, 0xff, 0xff, 0xbb, 0xd8, 0x0,
+    0x3e, 0x3f, 0xff, 0xff, 0xff, 0x67, 0x76, 0x0,
+    0x0, 0x98, 0x87, 0xff, 0xff, 0xff, 0x2b, 0x4e,
+    0xc, 0xfc, 0xd9, 0xff, 0xff, 0xc1, 0xd6, 0x0,
+    0x86, 0x7b, 0xff, 0xff, 0xd7, 0xfa, 0x6, 0xf4,
+    0xc1, 0xff, 0xff, 0x69, 0x96, 0x64, 0x4b, 0xff,
+    0xff, 0xf7, 0xf, 0x1c, 0x0, 0x40, 0x1d, 0xeb,
+    0xff, 0xff, 0xcf, 0xfe, 0xe8, 0x97, 0xff, 0xff,
+    0xff, 0x5d, 0x84, 0x0, 0xb4, 0x9f, 0xff, 0xff,
+    0xff, 0x2d, 0x54, 0x1a, 0xfe, 0xe3, 0xff, 0xff,
+    0xd7, 0xe6, 0xa, 0x0, 0xfc, 0xf5, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x57,
+    0x4c, 0x0, 0x0, 0x0, 0xa2, 0x7b, 0xff, 0xff,
+    0xc7, 0xea, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe,
+    0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0,
+    0xf4, 0xd7, 0xff, 0xff, 0x67, 0x86, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xea, 0xc3, 0xff, 0xff, 0xff, 0xfd, 0xd9,
+    0xe5, 0xff, 0xff, 0xff, 0xdb, 0x5, 0x2e, 0x0,
+    0x0, 0x0, 0xb0, 0x6b, 0xff, 0xff, 0xff, 0xf7,
+    0xcf, 0xe9, 0xff, 0xff, 0xff, 0xff, 0x49, 0x54,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0x57, 0x64, 0x0, 0x0, 0xe2,
+    0xad, 0xff, 0xff, 0xf7, 0xa7, 0x9b, 0xe5, 0xff,
+    0xff, 0xf7, 0x2f, 0x54, 0x0, 0xc6, 0xa1, 0xcb,
+    0xff, 0xff, 0xff, 0xdf, 0xcb, 0x89, 0xa2, 0x0,
+    0x0, 0xf4, 0xd3, 0xff, 0xff, 0xbb, 0xe2, 0x0,
+    0x46, 0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0,
+    0x0, 0x5a, 0x2d, 0xfd, 0xff, 0xff, 0x79, 0xa6,
+    0x48, 0x25, 0xff, 0xff, 0xff, 0x75, 0xaa, 0x0,
+    0x52, 0x31, 0xff, 0xff, 0xf9, 0xf, 0x50, 0xd,
+    0xf5, 0xff, 0xff, 0xad, 0xe6, 0xaa, 0x81, 0xff,
+    0xff, 0xcb, 0xf8, 0x4, 0x0, 0x8, 0xd8, 0x73,
+    0xff, 0xff, 0xff, 0x55, 0x19, 0xf1, 0xff, 0xff,
+    0xb9, 0xfe, 0x2e, 0x0, 0x78, 0x45, 0xff, 0xff,
+    0xff, 0x7d, 0xb0, 0x68, 0x3f, 0xff, 0xff, 0xff,
+    0x8b, 0xca, 0x0, 0x0, 0xf8, 0xef, 0xfb, 0xfb,
+    0xfb, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xf3, 0x2d,
+    0x38, 0x0, 0x0, 0x0, 0xc2, 0x87, 0xff, 0xff,
+    0xbd, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe,
+    0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0,
+    0xec, 0xcd, 0xff, 0xff, 0x73, 0xaa, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x48, 0xa6, 0xd0, 0xd0,
+    0x9e, 0x42, 0x2, 0x0, 0x2, 0x18, 0x1a, 0x18,
+    0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xea, 0xc3, 0xff, 0xff, 0xf3, 0x49, 0xfe,
+    0xfe, 0xa5, 0xff, 0xff, 0xff, 0x5d, 0x82, 0x0,
+    0x0, 0x4, 0xf8, 0xcb, 0xff, 0xff, 0xef, 0x33,
+    0xfc, 0x9, 0xaf, 0xff, 0xff, 0xff, 0x49, 0x54,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xff,
+    0xbb, 0x77, 0x75, 0x1d, 0x30, 0x0, 0x0, 0xf8,
+    0xe9, 0xff, 0xff, 0x8f, 0xfc, 0xea, 0x39, 0xff,
+    0xff, 0xff, 0x7d, 0x5c, 0x0, 0x6a, 0xc4, 0xd,
+    0xff, 0xff, 0xff, 0x83, 0xf4, 0xb8, 0x52, 0x0,
+    0x0, 0xf4, 0xd3, 0xff, 0xff, 0xbb, 0xe2, 0x0,
+    0x46, 0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0,
+    0x0, 0x10, 0xfc, 0xcd, 0xff, 0xff, 0xb5, 0xea,
+    0x9c, 0x73, 0xff, 0xff, 0xf7, 0x19, 0x44, 0x0,
+    0x12, 0xfe, 0xe3, 0xff, 0xff, 0x4d, 0xb8, 0x5f,
+    0xff, 0xff, 0xff, 0xe7, 0xfe, 0xe2, 0xad, 0xff,
+    0xff, 0x93, 0xc8, 0x0, 0x0, 0x0, 0x3e, 0xfe,
+    0xc9, 0xff, 0xff, 0xc3, 0x8d, 0xff, 0xff, 0xf3,
+    0x2d, 0x8a, 0x0, 0x0, 0x1e, 0xfe, 0xdb, 0xff,
+    0xff, 0xbf, 0xf4, 0xc6, 0x8f, 0xff, 0xff, 0xfd,
+    0x2d, 0x60, 0x0, 0x0, 0xd2, 0xfc, 0xfe, 0xfe,
+    0xfe, 0xfe, 0x97, 0xff, 0xff, 0xff, 0x6d, 0xe4,
+    0x10, 0x0, 0x26, 0x98, 0xfe, 0xbb, 0xff, 0xff,
+    0x95, 0xb8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe,
+    0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0,
+    0xce, 0xa7, 0xff, 0xff, 0xa9, 0xfc, 0x8c, 0x1e,
+    0x0, 0x0, 0x0, 0x86, 0x9, 0x7d, 0xb7, 0xb1,
+    0x77, 0xb, 0xbc, 0x1c, 0x26, 0xd, 0x39, 0xb,
+    0xf2, 0x2e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xfa, 0x20,
+    0x74, 0x23, 0xfb, 0xff, 0xff, 0x9f, 0xc6, 0x0,
+    0x0, 0x1e, 0xf, 0xfb, 0xff, 0xff, 0xa5, 0xec,
+    0x14, 0xa6, 0x5f, 0xff, 0xff, 0xff, 0x49, 0x54,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xd9,
+    0xfe, 0xba, 0x74, 0x46, 0x8, 0x0, 0x0, 0xf8,
+    0xeb, 0xff, 0xff, 0xb3, 0x5, 0xea, 0xfe, 0x41,
+    0x43, 0x43, 0x25, 0x50, 0x0, 0x0, 0x6, 0xd,
+    0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, 0x0,
+    0x0, 0xf4, 0xd3, 0xff, 0xff, 0xbb, 0xe2, 0x0,
+    0x46, 0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0,
+    0x0, 0x0, 0xbc, 0x83, 0xff, 0xff, 0xe9, 0xfe,
+    0xe6, 0xaf, 0xff, 0xff, 0xbd, 0xf6, 0x6, 0x0,
+    0x0, 0xe6, 0xb1, 0xff, 0xff, 0x83, 0xf4, 0xa5,
+    0xff, 0xff, 0xff, 0xff, 0x41, 0xfc, 0xd7, 0xff,
+    0xff, 0x55, 0x76, 0x0, 0x0, 0x0, 0x0, 0xa2,
+    0x3d, 0xf9, 0xff, 0xff, 0xf1, 0xff, 0xff, 0x89,
+    0xe8, 0x10, 0x0, 0x0, 0x0, 0xd0, 0x91, 0xff,
+    0xff, 0xf5, 0xd, 0xfc, 0xcf, 0xff, 0xff, 0xcb,
+    0xfc, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10,
+    0xda, 0x5d, 0xfd, 0xff, 0xff, 0xa7, 0xfe, 0x3a,
+    0x0, 0x0, 0x70, 0x51, 0xbb, 0xff, 0xff, 0xef,
+    0x2d, 0x68, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe,
+    0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0,
+    0x7e, 0x3d, 0xf5, 0xff, 0xff, 0xb3, 0x45, 0x5a,
+    0x0, 0x0, 0x30, 0xfe, 0xbb, 0xff, 0xff, 0xff,
+    0xff, 0xdd, 0x43, 0xee, 0xca, 0x4f, 0xff, 0xfb,
+    0x5b, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee, 0x0,
+    0xc, 0xfc, 0xd7, 0xff, 0xff, 0xbf, 0xe4, 0x0,
+    0x0, 0x40, 0x41, 0xff, 0xff, 0xff, 0x6f, 0xa2,
+    0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x49, 0x54,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb,
+    0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe2,
+    0xad, 0xff, 0xff, 0xff, 0xe7, 0xb1, 0x7b, 0x2d,
+    0xfc, 0xac, 0x38, 0xc, 0x0, 0x0, 0x6, 0xd,
+    0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, 0x0,
+    0x0, 0xf4, 0xd3, 0xff, 0xff, 0xbb, 0xe2, 0x0,
+    0x46, 0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0,
+    0x0, 0x0, 0x56, 0x27, 0xfb, 0xff, 0xff, 0x41,
+    0xfe, 0xe3, 0xff, 0xff, 0x6f, 0xa4, 0x0, 0x0,
+    0x0, 0xa2, 0x77, 0xff, 0xff, 0xb1, 0xfe, 0xdf,
+    0xff, 0xd1, 0xff, 0xff, 0x8d, 0xf, 0xf9, 0xff,
+    0xf5, 0xb, 0x28, 0x0, 0x0, 0x0, 0x0, 0x1a,
+    0xf4, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xd9, 0x9,
+    0x52, 0x0, 0x0, 0x0, 0x0, 0x64, 0x31, 0xff,
+    0xff, 0xff, 0x5f, 0x21, 0xfb, 0xff, 0xff, 0x7f,
+    0xba, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa2,
+    0x2d, 0xed, 0xff, 0xff, 0xd5, 0xf, 0x72, 0x0,
+    0x0, 0x0, 0x9e, 0x8d, 0xff, 0xff, 0xeb, 0x43,
+    0xea, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe,
+    0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0,
+    0x1a, 0xf2, 0x4d, 0xed, 0xff, 0xff, 0x7b, 0x84,
+    0x0, 0x0, 0x92, 0x5f, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xf5, 0x85, 0x4d, 0xcb, 0xff, 0xff,
+    0x39, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee, 0x0,
+    0x0, 0xf0, 0xc5, 0xff, 0xff, 0xcd, 0xec, 0x0,
+    0x0, 0x58, 0x51, 0xff, 0xff, 0xff, 0x59, 0x7a,
+    0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x49, 0x54,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb,
+    0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x78,
+    0x19, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
+    0xbf, 0x33, 0xcc, 0x8, 0x0, 0x0, 0x6, 0xd,
+    0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, 0x0,
+    0x0, 0xf4, 0xd3, 0xff, 0xff, 0xbb, 0xe2, 0x0,
+    0x46, 0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0,
+    0x0, 0x0, 0xc, 0xfa, 0xc9, 0xff, 0xff, 0x89,
+    0x35, 0xff, 0xff, 0xf5, 0x13, 0x3e, 0x0, 0x0,
+    0x0, 0x4e, 0x2d, 0xff, 0xff, 0xd9, 0x35, 0xff,
+    0xff, 0x7d, 0xd5, 0xff, 0xcb, 0x4f, 0xff, 0xff,
+    0xc7, 0xf6, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x94, 0x17, 0xf7, 0xff, 0xff, 0xff, 0x6b, 0xe4,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0xfc, 0xcf,
+    0xff, 0xff, 0xa5, 0x75, 0xff, 0xff, 0xf9, 0x21,
+    0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x64, 0x9,
+    0xcd, 0xff, 0xff, 0xf3, 0x37, 0xb0, 0x4, 0x0,
+    0x0, 0x0, 0x8c, 0x89, 0xff, 0xff, 0xff, 0xa7,
+    0xfe, 0x34, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe,
+    0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0,
+    0x46, 0x5, 0xb5, 0xff, 0xff, 0xff, 0x77, 0x74,
+    0x0, 0x0, 0xc4, 0xaf, 0xff, 0xf9, 0x5d, 0x41,
+    0xb3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd3,
+    0xfe, 0x16, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee, 0x0,
+    0x0, 0xf4, 0xcb, 0xff, 0xff, 0xcb, 0xec, 0x0,
+    0x0, 0x52, 0x4f, 0xff, 0xff, 0xff, 0x5d, 0x82,
+    0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x49, 0x54,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb,
+    0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc,
+    0x92, 0xfe, 0x4d, 0xa3, 0xd9, 0xff, 0xff, 0xff,
+    0xff, 0xe9, 0x1f, 0x4c, 0x0, 0x0, 0x6, 0xd,
+    0xff, 0xff, 0xff, 0x83, 0xa6, 0x0, 0x0, 0x0,
+    0x0, 0xf2, 0xd3, 0xff, 0xff, 0xbb, 0xe6, 0x0,
+    0x46, 0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0,
+    0x0, 0x0, 0x0, 0xb6, 0x7d, 0xff, 0xff, 0xc3,
+    0x7f, 0xff, 0xff, 0xb9, 0xf2, 0x4, 0x0, 0x0,
+    0x0, 0x10, 0xfe, 0xe1, 0xff, 0xfb, 0x8b, 0xff,
+    0xff, 0x29, 0x95, 0xff, 0xfb, 0x8d, 0xff, 0xff,
+    0x8f, 0xc2, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe,
+    0xe6, 0x83, 0xff, 0xff, 0xff, 0xff, 0xc5, 0xfe,
+    0x3c, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbe, 0x81,
+    0xff, 0xff, 0xe1, 0xb9, 0xff, 0xff, 0xbf, 0xf8,
+    0xa, 0x0, 0x0, 0x0, 0x0, 0x30, 0xfa, 0x9b,
+    0xff, 0xff, 0xff, 0x6d, 0xe4, 0x16, 0x0, 0x0,
+    0x0, 0x0, 0x52, 0xfe, 0x43, 0xeb, 0xff, 0xff,
+    0x67, 0x94, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe,
+    0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0,
+    0xac, 0x7b, 0xff, 0xff, 0xdf, 0x37, 0xfe, 0x42,
+    0x0, 0x0, 0xb6, 0xab, 0xef, 0xc1, 0xf8, 0x9e,
+    0xfe, 0x7d, 0xf7, 0xff, 0xff, 0xff, 0xef, 0x43,
+    0xae, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xf2, 0x0,
+    0x2a, 0xfe, 0xe3, 0xff, 0xff, 0xb7, 0xde, 0x0,
+    0x0, 0x34, 0x33, 0xff, 0xff, 0xff, 0x7d, 0xc4,
+    0x0, 0x82, 0x5f, 0xff, 0xff, 0xff, 0x49, 0x54,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb,
+    0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0x32, 0x9,
+    0x15, 0x15, 0x13, 0xfc, 0xfe, 0x27, 0x9f, 0xff,
+    0xff, 0xff, 0x7b, 0x8c, 0x0, 0x0, 0x4, 0xd,
+    0xff, 0xff, 0xff, 0x83, 0xac, 0x0, 0x0, 0x0,
+    0x0, 0xee, 0xcf, 0xff, 0xff, 0xc3, 0xf2, 0x0,
+    0x56, 0x3f, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0,
+    0x0, 0x0, 0x0, 0x50, 0x21, 0xfb, 0xff, 0xf3,
+    0xb7, 0xff, 0xff, 0x6b, 0xa0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xe2, 0xad, 0xff, 0xff, 0xe9, 0xff,
+    0xd3, 0xfe, 0x47, 0xff, 0xff, 0xe9, 0xff, 0xff,
+    0x4f, 0x6e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x88,
+    0x29, 0xf3, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x71,
+    0xd8, 0x8, 0x0, 0x0, 0x0, 0x0, 0x54, 0x23,
+    0xfb, 0xff, 0xff, 0xf3, 0xff, 0xff, 0x71, 0xa8,
+    0x0, 0x0, 0x0, 0x0, 0x10, 0xdc, 0x61, 0xff,
+    0xff, 0xff, 0xa7, 0xfc, 0x3a, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x1c, 0xea, 0x99, 0xff, 0xff,
+    0xb1, 0xd2, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe,
+    0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0,
+    0xe2, 0xc1, 0xff, 0xff, 0x85, 0xdc, 0x16, 0x0,
+    0x0, 0x0, 0x74, 0xe6, 0xf4, 0x9, 0x8c, 0x0,
+    0x48, 0xea, 0x2b, 0x87, 0xa3, 0x8d, 0x29, 0xda,
+    0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xea, 0xc3, 0xff, 0xff, 0xdb, 0x5, 0xd8,
+    0xf2, 0x59, 0xff, 0xff, 0xff, 0x8b, 0xb0, 0x0,
+    0x0, 0x14, 0xfe, 0xef, 0xff, 0xff, 0xcb, 0x5,
+    0xd6, 0xf8, 0x77, 0xff, 0xff, 0xff, 0x49, 0x54,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb,
+    0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0x63,
+    0xff, 0xff, 0xfb, 0x17, 0xae, 0xb4, 0xfe, 0xeb,
+    0xff, 0xff, 0x91, 0xa0, 0x0, 0x0, 0x2, 0x5,
+    0xff, 0xff, 0xff, 0x8d, 0xf2, 0x80, 0x30, 0x0,
+    0x0, 0xe0, 0xbb, 0xff, 0xff, 0xe9, 0x9, 0xda,
+    0xf6, 0x5b, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0,
+    0x0, 0x0, 0x0, 0xa, 0xfa, 0xc5, 0xff, 0xff,
+    0xf3, 0xff, 0xf3, 0xf, 0x3a, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x9c, 0x73, 0xff, 0xff, 0xff, 0xff,
+    0x93, 0xd2, 0xfe, 0xe7, 0xff, 0xff, 0xff, 0xf3,
+    0x9, 0x24, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xfe,
+    0xb7, 0xff, 0xff, 0xdd, 0x99, 0xff, 0xff, 0xeb,
+    0x1d, 0x74, 0x0, 0x0, 0x0, 0x0, 0xc, 0xf8,
+    0xc1, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x13, 0x40,
+    0x0, 0x0, 0x0, 0x2, 0xa6, 0x2f, 0xef, 0xff,
+    0xff, 0xd5, 0xf, 0xee, 0xe0, 0xe0, 0xcc, 0x9a,
+    0x32, 0x0, 0x0, 0x0, 0xac, 0x7d, 0xff, 0xff,
+    0xc5, 0xe6, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe,
+    0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0,
+    0xf2, 0xd5, 0xff, 0xff, 0x69, 0x92, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xe, 0x5a, 0x9e, 0xba, 0xa2, 0x5e, 0xe,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xea, 0xc3, 0xff, 0xff, 0xff, 0xcf, 0x8b,
+    0x9f, 0xf1, 0xff, 0xff, 0xfb, 0x2f, 0x5e, 0x0,
+    0x0, 0x0, 0xe6, 0xa7, 0xff, 0xff, 0xff, 0xc7,
+    0x8d, 0xa5, 0xf7, 0xff, 0xff, 0xff, 0x49, 0x54,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb,
+    0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0x38, 0x19,
+    0xf3, 0xff, 0xff, 0xc1, 0x51, 0x3f, 0x8b, 0xff,
+    0xff, 0xff, 0x67, 0x7c, 0x0, 0x0, 0x0, 0xfe,
+    0xeb, 0xff, 0xff, 0xe9, 0x99, 0x5f, 0x8c, 0x0,
+    0x0, 0xb2, 0x89, 0xff, 0xff, 0xff, 0xcb, 0x91,
+    0xa9, 0xf5, 0xff, 0xff, 0xff, 0x67, 0x80, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0xb2, 0x79, 0xff, 0xff,
+    0xff, 0xff, 0xb5, 0xf0, 0x4, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x4a, 0x29, 0xff, 0xff, 0xff, 0xff,
+    0x45, 0x70, 0xe4, 0xab, 0xff, 0xff, 0xff, 0xc3,
+    0xf4, 0x0, 0x0, 0x0, 0x0, 0x4, 0xc6, 0x5d,
+    0xff, 0xff, 0xff, 0x73, 0x21, 0xf3, 0xff, 0xff,
+    0xa7, 0xf8, 0x22, 0x0, 0x0, 0x0, 0x0, 0xaa,
+    0x71, 0xff, 0xff, 0xff, 0xff, 0xb5, 0xf0, 0x4,
+    0x0, 0x0, 0x0, 0x18, 0xb, 0xcf, 0xff, 0xff,
+    0xff, 0xcd, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0x63,
+    0x74, 0x0, 0x0, 0x0, 0x9e, 0x7b, 0xff, 0xff,
+    0xc7, 0xec, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe,
+    0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0,
+    0xf6, 0xd7, 0xff, 0xff, 0x67, 0x82, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xea, 0xc3, 0xff, 0xff, 0xfb, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0x95, 0xf4, 0x10, 0x0,
+    0x0, 0x0, 0x76, 0x27, 0xeb, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0x49, 0x54,
+    0x0, 0x0, 0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb,
+    0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xe4,
+    0x73, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xc7, 0x5, 0x34, 0x0, 0x0, 0x0, 0xe4,
+    0xad, 0xff, 0xff, 0xff, 0xff, 0xa9, 0xc8, 0x0,
+    0x0, 0x5a, 0x25, 0xef, 0xff, 0xff, 0xff, 0xff,
+    0xff, 0xe7, 0xf7, 0xff, 0xff, 0x67, 0x80, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x4a, 0x1d, 0xf9, 0xff,
+    0xff, 0xff, 0x65, 0x9a, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xe, 0xfe, 0xdd, 0xff, 0xff, 0xe5,
+    0xfe, 0x1e, 0x90, 0x63, 0xff, 0xff, 0xff, 0x8b,
+    0xbc, 0x0, 0x0, 0x0, 0x0, 0x60, 0xf, 0xe1,
+    0xff, 0xff, 0xdf, 0x5, 0xf0, 0x9d, 0xff, 0xff,
+    0xfd, 0x4b, 0xb2, 0x0, 0x0, 0x0, 0x0, 0x40,
+    0x13, 0xf5, 0xff, 0xff, 0xff, 0x63, 0x98, 0x0,
+    0x0, 0x0, 0x0, 0x2c, 0x39, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x89,
+    0xa0, 0x0, 0x0, 0x0, 0x92, 0x7b, 0xff, 0xff,
+    0xc7, 0xee, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe,
+    0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x0,
+    0xf8, 0xd7, 0xff, 0xff, 0x65, 0x74, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0x9f, 0xfb,
+    0xff, 0xff, 0xf3, 0x8f, 0xfe, 0x5e, 0x0, 0x0,
+    0x0, 0x0, 0xc, 0xd0, 0x3d, 0xcd, 0xff, 0xff,
+    0xff, 0xdd, 0x87, 0xff, 0xff, 0xff, 0x49, 0x54,
+    0x0, 0x0, 0x0, 0xce, 0xc3, 0xff, 0xff, 0xcb,
+    0xd6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40,
+    0xfa, 0x5d, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xed,
+    0x99, 0x11, 0x96, 0x0, 0x0, 0x0, 0x0, 0x7a,
+    0x21, 0xbd, 0xff, 0xff, 0xff, 0xb9, 0xba, 0x0,
+    0x0, 0xc, 0xd8, 0x4b, 0xdb, 0xff, 0xff, 0xff,
+    0xcf, 0x39, 0xdb, 0xff, 0xff, 0x67, 0x60, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x8, 0xf4, 0xc1, 0xff,
+    0xff, 0xf1, 0xd, 0x36, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0xd6, 0xa9, 0xff, 0xff, 0xa7,
+    0xdc, 0x0, 0x36, 0xf, 0xf5, 0xff, 0xff, 0x49,
+    0x68, 0x0, 0x0, 0x0, 0x0, 0x60, 0x95, 0xff,
+    0xff, 0xff, 0x77, 0xc8, 0x6c, 0x25, 0xf5, 0xff,
+    0xff, 0xd5, 0x7, 0x0, 0x0, 0x0, 0x0, 0x4,
+    0xf6, 0xb3, 0xff, 0xff, 0xed, 0x9, 0x32, 0x0,
+    0x0, 0x0, 0x0, 0x2a, 0x39, 0xff, 0xff, 0xff,
+    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x89,
+    0x8a, 0x0, 0x0, 0x0, 0x78, 0x65, 0xff, 0xff,
+    0xd1, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe,
+    0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x8,
+    0xfc, 0xe3, 0xff, 0xff, 0x4d, 0x56, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xfe, 0x21,
+    0x51, 0x49, 0xf, 0xe8, 0x58, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x18, 0xa4, 0xfc, 0x2d, 0x53,
+    0x3f, 0xfe, 0x5f, 0xff, 0xff, 0xff, 0x49, 0x54,
+    0x0, 0x0, 0x0, 0x90, 0xfe, 0xfe, 0xfe, 0xfe,
+    0x98, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x2e, 0xb6, 0xfe, 0x25, 0x4f, 0x55, 0x39, 0xfe,
+    0xe2, 0x64, 0x4, 0x0, 0x0, 0x0, 0x0, 0xa,
+    0x8e, 0xfe, 0x25, 0x51, 0x43, 0x5, 0x84, 0x0,
+    0x0, 0x0, 0x22, 0xbc, 0xfe, 0x39, 0x55, 0x33,
+    0xfe, 0xe4, 0xfe, 0xfe, 0xfe, 0xfe, 0x36, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0xfe, 0xfe,
+    0xfe, 0xfe, 0xd6, 0x2, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x72, 0xfe, 0xfe, 0xfe, 0xfe,
+    0x70, 0x0, 0x4, 0xde, 0xfe, 0xfe, 0xfe, 0xfe,
+    0x20, 0x0, 0x0, 0x0, 0x0, 0x5e, 0xfe, 0xfe,
+    0xfe, 0xfe, 0xfe, 0x42, 0xc, 0xe0, 0xfe, 0xfe,
+    0xfe, 0xfe, 0xa8, 0x0, 0x0, 0x0, 0x0, 0x1a,
+    0xfc, 0xbb, 0xff, 0xff, 0xa7, 0xe8, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x16, 0xfe, 0xfe, 0xfe, 0xfe,
+    0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
+    0x52, 0x0, 0x0, 0x0, 0x46, 0x39, 0xff, 0xff,
+    0xf1, 0x9, 0x4e, 0x0, 0x0, 0x0, 0x0, 0xfe,
+    0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x0, 0x66,
+    0x1b, 0xfb, 0xff, 0xfd, 0x1f, 0x2a, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee, 0x2e,
+    0x48, 0x44, 0x22, 0x4, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x34, 0x48,
+    0x3c, 0x84, 0x5f, 0xff, 0xff, 0xff, 0x49, 0x54,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0xc, 0x2e, 0x4e, 0x56, 0x3a, 0x16,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xc, 0x30, 0x46, 0x3e, 0x1c, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x16, 0x3a, 0x48, 0x38,
+    0x14, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0xa0, 0xee,
+    0x3d, 0xfb, 0xff, 0xff, 0x51, 0x86, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x16, 0xfe, 0xcd, 0xff,
+    0xff, 0x83, 0xfc, 0x40, 0x0, 0x0, 0x0, 0xfe,
+    0xfb, 0xff, 0x2f, 0x2e, 0x0, 0x0, 0x50, 0xfe,
+    0x99, 0xff, 0xff, 0xbb, 0xfa, 0x8, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xea, 0xc3, 0xff, 0xff, 0xcb, 0xee, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x76, 0x5f, 0xff, 0xff, 0xff, 0x49, 0x54,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xa8, 0x73, 0xb5,
+    0xef, 0xff, 0xff, 0xd5, 0xfe, 0x26, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xaa, 0x4d, 0xf7,
+    0xff, 0xff, 0x73, 0x50, 0x0, 0x0, 0x0, 0xfe,
+    0xfb, 0xff, 0x2f, 0x22, 0x0, 0x0, 0x68, 0x87,
+    0xff, 0xff, 0xef, 0x3b, 0x90, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xe6, 0xc3, 0xff, 0xff, 0xcb, 0xea, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x72, 0x5f, 0xff, 0xff, 0xff, 0x49, 0x50,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xe2, 0xc1, 0xff,
+    0xff, 0xff, 0xfb, 0x55, 0xb6, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0xe8, 0x41,
+    0xc7, 0xfd, 0x37, 0x50, 0x0, 0x0, 0x0, 0xee,
+    0x47, 0x49, 0xd, 0x12, 0x0, 0x0, 0x68, 0x4f,
+    0xfd, 0xbd, 0x35, 0xda, 0x18, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0xc6, 0xb1, 0xe9, 0xe9, 0xb7, 0xcc, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x52, 0x57, 0xe9, 0xe9, 0xe9, 0x41, 0x38,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xd8, 0xd7, 0xff,
+    0xff, 0xdf, 0x63, 0xf2, 0x28, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x9e,
+    0xfa, 0x29, 0xf6, 0x16, 0x0, 0x0, 0x0, 0x1e,
+    0x3a, 0x3c, 0x22, 0x2, 0x0, 0x0, 0x24, 0xf4,
+    0x29, 0xfa, 0x92, 0x14, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x7c, 0xe2, 0xf8, 0xf8, 0xe4, 0x82, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x2a, 0xd0, 0xf4, 0xfc, 0xf4, 0xcc, 0x1c,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0xaa, 0x9, 0x2f,
+    0x17, 0xfe, 0xc6, 0x32, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0xe, 0xe, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe,
+    0xe, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x16,
+    0x16, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+    0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+};
+const uint16_t FontBitmap::glyphWidth[] = {
+    8, 9, 10, 16, 16, 20, 18, 6,
+    10, 10, 13, 15, 8, 11, 9, 11,
+    16, 16, 16, 16, 16, 16, 16, 16,
+    16, 16, 9, 9, 14, 16, 14, 14,
+    23, 17, 17, 17, 18, 16, 16, 18,
+    19, 9, 16, 18, 15, 23, 19, 19,
+    18, 19, 18, 17, 17, 18, 17, 23,
+    17, 17, 16, 9, 12, 9, 13, 13,
+    10, 15, 16, 14, 16, 15, 11, 16,
+    16, 8, 8, 15, 8, 23, 16, 16,
+    16, 16, 11, 14, 10, 16, 14, 20,
+    14, 14, 14, 10, 8, 10, 18,
+};
+const uint16_t FontBitmap::yoffset[] = {
+    0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 34, 34, 34, 34, 34,
+    34, 34, 34, 34, 34, 34, 34, 34,
+    34, 34, 68, 68, 68, 68, 68, 68,
+    68, 68, 68, 68, 68, 68, 68, 68,
+    102, 102, 102, 102, 102, 102, 102, 102,
+    102, 102, 102, 102, 102, 102, 102, 136,
+    136, 136, 136, 136, 136, 136, 136, 136,
+    136, 136, 136, 136, 136, 136, 136, 136,
+    170, 170, 170, 170, 170, 170, 170, 170,
+    170, 170, 170, 170, 170, 170, 170,
+};
diff --git a/cmds/screenrecord/Overlay.cpp b/cmds/screenrecord/Overlay.cpp
new file mode 100644
index 0000000..96e25b8
--- /dev/null
+++ b/cmds/screenrecord/Overlay.cpp
@@ -0,0 +1,401 @@
+/*
+ * Copyright 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "ScreenRecord"
+//#define LOG_NDEBUG 0
+#include <utils/Log.h>
+
+#include <gui/BufferQueue.h>
+#include <gui/GraphicBufferAlloc.h>
+#include <gui/Surface.h>
+#include <cutils/properties.h>
+#include <utils/misc.h>
+
+#include <GLES2/gl2.h>
+#include <GLES2/gl2ext.h>
+
+#include <stdlib.h>
+#include <assert.h>
+
+#include "screenrecord.h"
+#include "Overlay.h"
+#include "TextRenderer.h"
+
+using namespace android;
+
+// System properties to look up and display on the info screen.
+const char* Overlay::kPropertyNames[] = {
+        "ro.build.description",
+        // includes ro.build.id, ro.build.product, ro.build.tags, ro.build.type,
+        // and ro.build.version.release
+        "ro.product.manufacturer",
+        "ro.product.model",
+        "ro.board.platform",
+        "ro.revision",
+        "dalvik.vm.heapgrowthlimit",
+        "dalvik.vm.heapsize",
+        "persist.sys.dalvik.vm.lib",
+        //"ro.product.cpu.abi",
+        //"ro.bootloader",
+        //"this-never-appears!",
+};
+
+
+status_t Overlay::start(const sp<IGraphicBufferProducer>& outputSurface,
+        sp<IGraphicBufferProducer>* pBufferProducer) {
+    ALOGV("Overlay::start");
+    mOutputSurface = outputSurface;
+
+    // Grab the current monotonic time and the current wall-clock time so we
+    // can map one to the other.  This allows the overlay counter to advance
+    // by the exact delay between frames, but if the wall clock gets adjusted
+    // we won't track it, which means we'll gradually go out of sync with the
+    // times in logcat.
+    mStartMonotonicNsecs = systemTime(CLOCK_MONOTONIC);
+    mStartRealtimeNsecs = systemTime(CLOCK_REALTIME);
+
+    Mutex::Autolock _l(mMutex);
+
+    // Start the thread.  Traffic begins immediately.
+    run("overlay");
+
+    mState = INIT;
+    while (mState == INIT) {
+        mStartCond.wait(mMutex);
+    }
+
+    if (mThreadResult != NO_ERROR) {
+        ALOGE("Failed to start overlay thread: err=%d", mThreadResult);
+        return mThreadResult;
+    }
+    assert(mState == RUNNING);
+
+    ALOGV("Overlay::start successful");
+    *pBufferProducer = mBufferQueue;
+    return NO_ERROR;
+}
+
+status_t Overlay::stop() {
+    ALOGV("Overlay::stop");
+    Mutex::Autolock _l(mMutex);
+    mState = STOPPING;
+    mEventCond.signal();
+    return NO_ERROR;
+}
+
+bool Overlay::threadLoop() {
+    Mutex::Autolock _l(mMutex);
+
+    mThreadResult = setup_l();
+
+    if (mThreadResult != NO_ERROR) {
+        ALOGW("Aborting overlay thread");
+        mState = STOPPED;
+        release_l();
+        mStartCond.broadcast();
+        return false;
+    }
+
+    ALOGV("Overlay thread running");
+    mState = RUNNING;
+    mStartCond.broadcast();
+
+    while (mState == RUNNING) {
+        mEventCond.wait(mMutex);
+        if (mFrameAvailable) {
+            ALOGV("Awake, frame available");
+            processFrame_l();
+            mFrameAvailable = false;
+        } else {
+            ALOGV("Awake, frame not available");
+        }
+    }
+
+    ALOGV("Overlay thread stopping");
+    release_l();
+    mState = STOPPED;
+    return false;       // stop
+}
+
+status_t Overlay::setup_l() {
+    status_t err;
+
+    err = mEglWindow.createWindow(mOutputSurface);
+    if (err != NO_ERROR) {
+        return err;
+    }
+    mEglWindow.makeCurrent();
+
+    int width = mEglWindow.getWidth();
+    int height = mEglWindow.getHeight();
+
+    glViewport(0, 0, width, height);
+    glDisable(GL_DEPTH_TEST);
+    glDisable(GL_CULL_FACE);
+
+    // Shaders for rendering from different types of textures.
+    err = mTexProgram.setup(Program::PROGRAM_TEXTURE_2D);
+    if (err != NO_ERROR) {
+        return err;
+    }
+    err = mExtTexProgram.setup(Program::PROGRAM_EXTERNAL_TEXTURE);
+    if (err != NO_ERROR) {
+        return err;
+    }
+
+    err = mTextRenderer.loadIntoTexture();
+    if (err != NO_ERROR) {
+        return err;
+    }
+    mTextRenderer.setScreenSize(width, height);
+
+    // Input side (buffers from virtual display).
+    glGenTextures(1, &mExtTextureName);
+    if (mExtTextureName == 0) {
+        ALOGE("glGenTextures failed: %#x", glGetError());
+        return UNKNOWN_ERROR;
+    }
+
+    mBufferQueue = new BufferQueue(/*new GraphicBufferAlloc()*/);
+    mGlConsumer = new GLConsumer(mBufferQueue, mExtTextureName,
+                GL_TEXTURE_EXTERNAL_OES);
+    mGlConsumer->setName(String8("virtual display"));
+    mGlConsumer->setDefaultBufferSize(width, height);
+    mGlConsumer->setDefaultMaxBufferCount(5);
+    mGlConsumer->setConsumerUsageBits(GRALLOC_USAGE_HW_TEXTURE);
+
+    mGlConsumer->setFrameAvailableListener(this);
+
+    return NO_ERROR;
+}
+
+
+void Overlay::release_l() {
+    ALOGV("Overlay::release_l");
+    mOutputSurface.clear();
+    mGlConsumer.clear();
+    mBufferQueue.clear();
+
+    mTexProgram.release();
+    mExtTexProgram.release();
+    mEglWindow.release();
+}
+
+void Overlay::processFrame_l() {
+    float texMatrix[16];
+
+    mGlConsumer->updateTexImage();
+    mGlConsumer->getTransformMatrix(texMatrix);
+    nsecs_t monotonicNsec = mGlConsumer->getTimestamp();
+    nsecs_t frameNumber = mGlConsumer->getFrameNumber();
+    int64_t droppedFrames = 0;
+
+    if (mLastFrameNumber > 0) {
+        mTotalDroppedFrames += size_t(frameNumber - mLastFrameNumber) - 1;
+    }
+    mLastFrameNumber = frameNumber;
+
+    mTextRenderer.setProportionalScale(35);
+
+    if (false) {  // DEBUG - full blue background
+        glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
+        glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
+    }
+
+    int width = mEglWindow.getWidth();
+    int height = mEglWindow.getHeight();
+    if (false) {  // DEBUG - draw inset
+        mExtTexProgram.blit(mExtTextureName, texMatrix,
+                100, 100, width-200, height-200);
+    } else {
+        mExtTexProgram.blit(mExtTextureName, texMatrix,
+                0, 0, width, height);
+    }
+
+    glEnable(GL_BLEND);
+    glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
+    if (false) {  // DEBUG - show entire font bitmap
+        mTexProgram.blit(mTextRenderer.getTextureName(), Program::kIdentity,
+                100, 100, width-200, height-200);
+    }
+
+    char textBuf[64];
+    getTimeString_l(monotonicNsec, textBuf, sizeof(textBuf));
+    String8 timeStr(String8::format("%s f=%lld (%zd)",
+            textBuf, frameNumber, mTotalDroppedFrames));
+    mTextRenderer.drawString(mTexProgram, Program::kIdentity, 0, 0, timeStr);
+
+    glDisable(GL_BLEND);
+
+    if (false) {  // DEBUG - add red rectangle in lower-left corner
+        glEnable(GL_SCISSOR_TEST);
+        glScissor(0, 0, 200, 200);
+        glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
+        glClear(GL_COLOR_BUFFER_BIT);
+        glDisable(GL_SCISSOR_TEST);
+    }
+
+    mEglWindow.presentationTime(monotonicNsec);
+    mEglWindow.swapBuffers();
+}
+
+void Overlay::getTimeString_l(nsecs_t monotonicNsec, char* buf, size_t bufLen) {
+    //const char* format = "%m-%d %T";    // matches log output
+    const char* format = "%T";
+    struct tm tm;
+
+    // localtime/strftime is not the fastest way to do this, but a trivial
+    // benchmark suggests that the cost is negligible.
+    int64_t realTime = mStartRealtimeNsecs +
+            (monotonicNsec - mStartMonotonicNsecs);
+    time_t secs = (time_t) (realTime / 1000000000);
+    localtime_r(&secs, &tm);
+    strftime(buf, bufLen, format, &tm);
+
+    int32_t msec = (int32_t) ((realTime % 1000000000) / 1000000);
+    char tmpBuf[5];
+    snprintf(tmpBuf, sizeof(tmpBuf), ".%03d", msec);
+    strlcat(buf, tmpBuf, bufLen);
+}
+
+// Callback; executes on arbitrary thread.
+void Overlay::onFrameAvailable() {
+    ALOGV("Overlay::onFrameAvailable");
+    Mutex::Autolock _l(mMutex);
+    mFrameAvailable = true;
+    mEventCond.signal();
+}
+
+
+/*static*/ status_t Overlay::drawInfoPage(
+        const sp<IGraphicBufferProducer>& outputSurface) {
+    status_t err;
+
+    EglWindow window;
+    err = window.createWindow(outputSurface);
+    if (err != NO_ERROR) {
+        return err;
+    }
+    window.makeCurrent();
+
+    int width = window.getWidth();
+    int height = window.getHeight();
+    glViewport(0, 0, width, height);
+    glDisable(GL_DEPTH_TEST);
+    glDisable(GL_CULL_FACE);
+
+    // Shaders for rendering.
+    Program texProgram;
+    err = texProgram.setup(Program::PROGRAM_TEXTURE_2D);
+    if (err != NO_ERROR) {
+        return err;
+    }
+    TextRenderer textRenderer;
+    err = textRenderer.loadIntoTexture();
+    if (err != NO_ERROR) {
+        return err;
+    }
+    textRenderer.setScreenSize(width, height);
+
+    doDrawInfoPage(window, texProgram, textRenderer);
+
+    // Destroy the surface.  This causes a disconnect.
+    texProgram.release();
+    window.release();
+
+    return NO_ERROR;
+}
+
+/*static*/ void Overlay::doDrawInfoPage(const EglWindow& window,
+        const Program& texProgram, TextRenderer& textRenderer) {
+    const nsecs_t holdTime = 250000000LL;
+
+    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
+    glClear(GL_COLOR_BUFFER_BIT);
+
+    int width = window.getWidth();
+    int height = window.getHeight();
+
+    // Draw a thin border around the screen.  Some players, e.g. browser
+    // plugins, make it hard to see where the edges are when the device
+    // is using a black background, so this gives the viewer a frame of
+    // reference.
+    //
+    // This is a clumsy way to do it, but we're only doing it for one frame,
+    // and it's easier than actually drawing lines.
+    const int lineWidth = 4;
+    glEnable(GL_SCISSOR_TEST);
+    glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
+    glScissor(0, 0, width, lineWidth);
+    glClear(GL_COLOR_BUFFER_BIT);
+    glScissor(0, height - lineWidth, width, lineWidth);
+    glClear(GL_COLOR_BUFFER_BIT);
+    glScissor(0, 0, lineWidth, height);
+    glClear(GL_COLOR_BUFFER_BIT);
+    glScissor(width - lineWidth, 0, lineWidth, height);
+    glClear(GL_COLOR_BUFFER_BIT);
+    glDisable(GL_SCISSOR_TEST);
+
+    //glEnable(GL_BLEND);
+    //glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
+    textRenderer.setProportionalScale(30);
+
+    float xpos = 0;
+    float ypos = 0;
+    ypos = textRenderer.drawWrappedString(texProgram, xpos, ypos,
+            String8::format("Android screenrecord v%d.%d",
+                    kVersionMajor, kVersionMinor));
+
+    // Show date/time
+    time_t now = time(0);
+    struct tm tm;
+    localtime_r(&now, &tm);
+    char timeBuf[64];
+    strftime(timeBuf, sizeof(timeBuf), "%a, %d %b %Y %T %z", &tm);
+    String8 header("Started ");
+    header += timeBuf;
+    ypos = textRenderer.drawWrappedString(texProgram, xpos, ypos, header);
+    ypos += 8 * textRenderer.getScale();    // slight padding
+
+    // Show selected system property values
+    for (int i = 0; i < NELEM(kPropertyNames); i++) {
+        char valueBuf[PROPERTY_VALUE_MAX];
+
+        property_get(kPropertyNames[i], valueBuf, "");
+        if (valueBuf[0] == '\0') {
+            continue;
+        }
+        String8 str(String8::format("%s: [%s]", kPropertyNames[i], valueBuf));
+        ypos = textRenderer.drawWrappedString(texProgram, xpos, ypos, str);
+    }
+    ypos += 8 * textRenderer.getScale();    // slight padding
+
+    // Show GL info
+    String8 glStr("OpenGL: ");
+    glStr += (char*) glGetString(GL_VENDOR);
+    glStr += " / ";
+    glStr += (char*) glGetString(GL_RENDERER);
+    glStr += ", ";
+    glStr += (char*) glGetString(GL_VERSION);
+    ypos = textRenderer.drawWrappedString(texProgram, xpos, ypos, glStr);
+
+    //glDisable(GL_BLEND);
+
+    // Set a presentation time slightly in the past.  This will cause the
+    // player to hold the frame on screen.
+    window.presentationTime(systemTime(CLOCK_MONOTONIC) - holdTime);
+    window.swapBuffers();
+}
diff --git a/cmds/screenrecord/Overlay.h b/cmds/screenrecord/Overlay.h
new file mode 100644
index 0000000..b8473b4
--- /dev/null
+++ b/cmds/screenrecord/Overlay.h
@@ -0,0 +1,157 @@
+/*
+ * Copyright 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SCREENRECORD_OVERLAY_H
+#define SCREENRECORD_OVERLAY_H
+
+#include "Program.h"
+#include "TextRenderer.h"
+#include "EglWindow.h"
+
+#include <gui/BufferQueue.h>
+#include <gui/GLConsumer.h>
+#include <utils/Thread.h>
+
+#include <EGL/egl.h>
+
+namespace android {
+
+/*
+ * Overlay "filter".  This sits between the virtual display and the video
+ * encoder.
+ *
+ * Most functions run on a thread created by start().
+ */
+class Overlay : public GLConsumer::FrameAvailableListener, Thread {
+public:
+    Overlay() : Thread(false),
+        mThreadResult(UNKNOWN_ERROR),
+        mState(UNINITIALIZED),
+        mFrameAvailable(false),
+        mExtTextureName(0),
+        mStartMonotonicNsecs(0),
+        mStartRealtimeNsecs(0),
+        mLastFrameNumber(-1),
+        mTotalDroppedFrames(0)
+        {}
+    virtual ~Overlay() { assert(mState == UNINITIALIZED || mState == STOPPED); }
+
+    // Creates a thread that performs the overlay.  Pass in the surface that
+    // output will be sent to.
+    //
+    // This creates a dedicated thread for processing frames.
+    //
+    // Returns a reference to the producer side of a new BufferQueue that will
+    // be used by the virtual display.
+    status_t start(const sp<IGraphicBufferProducer>& outputSurface,
+            sp<IGraphicBufferProducer>* pBufferProducer);
+
+    // Stops the thread and releases resources.  It's okay to call this even
+    // if start() was never called.
+    status_t stop();
+
+    // This creates an EGL context and window surface, draws some informative
+    // text on it, swaps the buffer, and then tears the whole thing down.
+    static status_t drawInfoPage(const sp<IGraphicBufferProducer>& outputSurface);
+
+private:
+    Overlay(const Overlay&);
+    Overlay& operator=(const Overlay&);
+
+    // Draw the initial info screen.
+    static void doDrawInfoPage(const EglWindow& window,
+            const Program& texRender, TextRenderer& textRenderer);
+
+    // (overrides GLConsumer::FrameAvailableListener method)
+    virtual void onFrameAvailable();
+
+    // (overrides Thread method)
+    virtual bool threadLoop();
+
+    // One-time setup (essentially object construction on the overlay thread).
+    status_t setup_l();
+
+    // Release all resources held.
+    void release_l();
+
+    // Release EGL display, context, surface.
+    void eglRelease_l();
+
+    // Process a frame received from the virtual display.
+    void processFrame_l();
+
+    // Convert a monotonic time stamp into a string with the current time.
+    void getTimeString_l(nsecs_t monotonicNsec, char* buf, size_t bufLen);
+
+    // Guards all fields below.
+    Mutex mMutex;
+
+    // Initialization gate.
+    Condition mStartCond;
+
+    // Thread status, mostly useful during startup.
+    status_t mThreadResult;
+
+    // Overlay thread state.  States advance from left to right; object may
+    // not be restarted.
+    enum { UNINITIALIZED, INIT, RUNNING, STOPPING, STOPPED } mState;
+
+    // Event notification.  Overlay thread sleeps on this until a frame
+    // arrives or it's time to shut down.
+    Condition mEventCond;
+
+    // Set by the FrameAvailableListener callback.
+    bool mFrameAvailable;
+
+    // The surface we send our output to, i.e. the video encoder's input
+    // surface.
+    sp<IGraphicBufferProducer> mOutputSurface;
+
+    // Our queue.  The producer side is passed to the virtual display, the
+    // consumer side feeds into our GLConsumer.
+    sp<BufferQueue> mBufferQueue;
+
+    // This receives frames from the virtual display and makes them available
+    // as an external texture.
+    sp<GLConsumer> mGlConsumer;
+
+    // EGL display / context / surface.
+    EglWindow mEglWindow;
+
+    // GL rendering support.
+    Program mExtTexProgram;
+    Program mTexProgram;
+
+    // Text rendering.
+    TextRenderer mTextRenderer;
+
+    // External texture, updated by GLConsumer.
+    GLuint mExtTextureName;
+
+    // Start time, used to map monotonic to wall-clock time.
+    nsecs_t mStartMonotonicNsecs;
+    nsecs_t mStartRealtimeNsecs;
+
+    // Used for tracking dropped frames.
+    nsecs_t mLastFrameNumber;
+    size_t mTotalDroppedFrames;
+
+    static const char* kPropertyNames[];
+};
+
+}; // namespace android
+
+#endif /*SCREENRECORD_OVERLAY_H*/
diff --git a/cmds/screenrecord/Program.cpp b/cmds/screenrecord/Program.cpp
new file mode 100644
index 0000000..a198204
--- /dev/null
+++ b/cmds/screenrecord/Program.cpp
@@ -0,0 +1,303 @@
+/*
+ * Copyright 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "ScreenRecord"
+//#define LOG_NDEBUG 0
+#include <utils/Log.h>
+
+#include "Program.h"
+
+#include <GLES2/gl2.h>
+#include <GLES2/gl2ext.h>
+
+#include <assert.h>
+
+using namespace android;
+
+// 4x4 identity matrix
+const float Program::kIdentity[] = {
+        1.0f, 0.0f, 0.0f, 0.0f,
+        0.0f, 1.0f, 0.0f, 0.0f,
+        0.0f, 0.0f, 1.0f, 0.0f,
+        0.0f, 0.0f, 0.0f, 1.0f
+};
+
+// Simple vertex shader.  Texture coord calc includes matrix for GLConsumer
+// transform.
+static const char* kVertexShader =
+        "uniform mat4 uMVPMatrix;\n"
+        "uniform mat4 uGLCMatrix;\n"
+        "attribute vec4 aPosition;\n"
+        "attribute vec4 aTextureCoord;\n"
+        "varying vec2 vTextureCoord;\n"
+        "void main() {\n"
+        "    gl_Position = uMVPMatrix * aPosition;\n"
+        "    vTextureCoord = (uGLCMatrix * aTextureCoord).xy;\n"
+        "}\n";
+
+// Trivial fragment shader for external texture.
+static const char* kExtFragmentShader =
+        "#extension GL_OES_EGL_image_external : require\n"
+        "precision mediump float;\n"
+        "varying vec2 vTextureCoord;\n"
+        "uniform samplerExternalOES uTexture;\n"
+        "void main() {\n"
+        "    gl_FragColor = texture2D(uTexture, vTextureCoord);\n"
+        "}\n";
+
+// Trivial fragment shader for mundane texture.
+static const char* kFragmentShader =
+        "precision mediump float;\n"
+        "varying vec2 vTextureCoord;\n"
+        "uniform sampler2D uTexture;\n"
+        "void main() {\n"
+        "    gl_FragColor = texture2D(uTexture, vTextureCoord);\n"
+        //"    gl_FragColor = vec4(0.2, 1.0, 0.2, 1.0);\n"
+        "}\n";
+
+status_t Program::setup(ProgramType type) {
+    ALOGV("Program::setup type=%d", type);
+    status_t err;
+
+    mProgramType = type;
+
+    GLuint program;
+    if (type == PROGRAM_TEXTURE_2D) {
+        err = createProgram(&program, kVertexShader, kFragmentShader);
+    } else {
+        err = createProgram(&program, kVertexShader, kExtFragmentShader);
+    }
+    if (err != NO_ERROR) {
+        return err;
+    }
+    assert(program != 0);
+
+    maPositionLoc = glGetAttribLocation(program, "aPosition");
+    maTextureCoordLoc = glGetAttribLocation(program, "aTextureCoord");
+    muMVPMatrixLoc = glGetUniformLocation(program, "uMVPMatrix");
+    muGLCMatrixLoc = glGetUniformLocation(program, "uGLCMatrix");
+    muTextureLoc = glGetUniformLocation(program, "uTexture");
+    if ((maPositionLoc | maTextureCoordLoc | muMVPMatrixLoc |
+            muGLCMatrixLoc | muTextureLoc) == -1) {
+        ALOGE("Attrib/uniform lookup failed: %#x", glGetError());
+        glDeleteProgram(program);
+        return UNKNOWN_ERROR;
+    }
+
+    mProgram = program;
+    return NO_ERROR;
+}
+
+void Program::release() {
+    ALOGV("Program::release");
+    if (mProgram != 0) {
+        glDeleteProgram(mProgram);
+        mProgram = 0;
+    }
+}
+
+status_t Program::createProgram(GLuint* outPgm, const char* vertexShader,
+        const char* fragmentShader) {
+    GLuint vs, fs;
+    status_t err;
+
+    err = compileShader(GL_VERTEX_SHADER, vertexShader, &vs);
+    if (err != NO_ERROR) {
+        return err;
+    }
+    err = compileShader(GL_FRAGMENT_SHADER, fragmentShader, &fs);
+    if (err != NO_ERROR) {
+        glDeleteShader(vs);
+        return err;
+    }
+
+    GLuint program;
+    err = linkShaderProgram(vs, fs, &program);
+    glDeleteShader(vs);
+    glDeleteShader(fs);
+    if (err == NO_ERROR) {
+        *outPgm = program;
+    }
+    return err;
+}
+
+status_t Program::compileShader(GLenum shaderType, const char* src,
+        GLuint* outShader) {
+    GLuint shader = glCreateShader(shaderType);
+    if (shader == 0) {
+        ALOGE("glCreateShader error: %#x", glGetError());
+        return UNKNOWN_ERROR;
+    }
+
+    glShaderSource(shader, 1, &src, NULL);
+    glCompileShader(shader);
+
+    GLint compiled = 0;
+    glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);
+    if (!compiled) {
+        ALOGE("Compile of shader type %d failed", shaderType);
+        GLint infoLen = 0;
+        glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLen);
+        if (infoLen) {
+            char* buf = new char[infoLen];
+            if (buf) {
+                glGetShaderInfoLog(shader, infoLen, NULL, buf);
+                ALOGE("Compile log: %s", buf);
+                delete[] buf;
+            }
+        }
+        glDeleteShader(shader);
+        return UNKNOWN_ERROR;
+    }
+    *outShader = shader;
+    return NO_ERROR;
+}
+
+status_t Program::linkShaderProgram(GLuint vs, GLuint fs, GLuint* outPgm) {
+    GLuint program = glCreateProgram();
+    if (program == 0) {
+        ALOGE("glCreateProgram error: %#x", glGetError());
+        return UNKNOWN_ERROR;
+    }
+
+    glAttachShader(program, vs);
+    glAttachShader(program, fs);
+    glLinkProgram(program);
+    GLint linkStatus = GL_FALSE;
+    glGetProgramiv(program, GL_LINK_STATUS, &linkStatus);
+    if (linkStatus != GL_TRUE) {
+        ALOGE("glLinkProgram failed");
+        GLint bufLength = 0;
+        glGetProgramiv(program, GL_INFO_LOG_LENGTH, &bufLength);
+        if (bufLength) {
+            char* buf = new char[bufLength];
+            if (buf) {
+                glGetProgramInfoLog(program, bufLength, NULL, buf);
+                ALOGE("Link log: %s", buf);
+                delete[] buf;
+            }
+        }
+        glDeleteProgram(program);
+        return UNKNOWN_ERROR;
+    }
+
+    *outPgm = program;
+    return NO_ERROR;
+}
+
+
+
+status_t Program::blit(GLuint texName, const float* texMatrix,
+        int32_t x, int32_t y, int32_t w, int32_t h) const {
+    ALOGV("Program::blit %d xy=%d,%d wh=%d,%d", texName, x, y, w, h);
+
+    const float pos[] = {
+        float(x),   float(y+h),
+        float(x+w), float(y+h),
+        float(x),   float(y),
+        float(x+w), float(y),
+    };
+    const float uv[] = {
+        0.0f, 0.0f,
+        1.0f, 0.0f,
+        0.0f, 1.0f,
+        1.0f, 1.0f,
+    };
+    status_t err;
+
+    err = beforeDraw(texName, texMatrix, pos, uv);
+    if (err == NO_ERROR) {
+        glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+        err = afterDraw();
+    }
+    return err;
+}
+
+status_t Program::drawTriangles(GLuint texName, const float* texMatrix,
+        const float* vertices, const float* texes, size_t count) const {
+    ALOGV("Program::drawTriangles texName=%d", texName);
+
+    status_t err;
+
+    err = beforeDraw(texName, texMatrix, vertices, texes);
+    if (err == NO_ERROR) {
+        glDrawArrays(GL_TRIANGLES, 0, count);
+        err = afterDraw();
+    }
+    return err;
+}
+
+status_t Program::beforeDraw(GLuint texName, const float* texMatrix,
+        const float* vertices, const float* texes) const {
+    // Create an orthographic projection matrix based on viewport size.
+    GLint vp[4];
+    glGetIntegerv(GL_VIEWPORT, vp);
+    float screenToNdc[16] = {
+        2.0f/float(vp[2]),  0.0f,               0.0f,   0.0f,
+        0.0f,               -2.0f/float(vp[3]), 0.0f,   0.0f,
+        0.0f,               0.0f,               1.0f,   0.0f,
+        -1.0f,              1.0f,               0.0f,   1.0f,
+    };
+
+    glUseProgram(mProgram);
+
+    glVertexAttribPointer(maPositionLoc, 2, GL_FLOAT, GL_FALSE, 0, vertices);
+    glVertexAttribPointer(maTextureCoordLoc, 2, GL_FLOAT, GL_FALSE, 0, texes);
+    glEnableVertexAttribArray(maPositionLoc);
+    glEnableVertexAttribArray(maTextureCoordLoc);
+
+    glUniformMatrix4fv(muMVPMatrixLoc, 1, GL_FALSE, screenToNdc);
+    glUniformMatrix4fv(muGLCMatrixLoc, 1, GL_FALSE, texMatrix);
+
+    glActiveTexture(GL_TEXTURE0);
+
+    switch (mProgramType) {
+    case PROGRAM_EXTERNAL_TEXTURE:
+        glBindTexture(GL_TEXTURE_EXTERNAL_OES, texName);
+        break;
+    case PROGRAM_TEXTURE_2D:
+        glBindTexture(GL_TEXTURE_2D, texName);
+        break;
+    default:
+        ALOGE("unexpected program type %d", mProgramType);
+        return UNKNOWN_ERROR;
+    }
+
+    glUniform1i(muTextureLoc, 0);
+
+    GLenum glErr;
+    if ((glErr = glGetError()) != GL_NO_ERROR) {
+        ALOGE("GL error before draw: %#x", glErr);
+        glDisableVertexAttribArray(maPositionLoc);
+        glDisableVertexAttribArray(maTextureCoordLoc);
+        return UNKNOWN_ERROR;
+    }
+
+    return NO_ERROR;
+}
+
+status_t Program::afterDraw() const {
+    glDisableVertexAttribArray(maPositionLoc);
+    glDisableVertexAttribArray(maTextureCoordLoc);
+
+    GLenum glErr;
+    if ((glErr = glGetError()) != GL_NO_ERROR) {
+        ALOGE("GL error after draw: %#x", glErr);
+        return UNKNOWN_ERROR;
+    }
+
+    return NO_ERROR;
+}
diff --git a/cmds/screenrecord/Program.h b/cmds/screenrecord/Program.h
new file mode 100644
index 0000000..e47bc0d
--- /dev/null
+++ b/cmds/screenrecord/Program.h
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SCREENRECORD_PROGRAM_H
+#define SCREENRECORD_PROGRAM_H
+
+#include <utils/Errors.h>
+
+#include <EGL/egl.h>
+#include <GLES2/gl2.h>
+
+namespace android {
+
+/*
+ * Utility class for GLES rendering.
+ *
+ * Not thread-safe.
+ */
+class Program {
+public:
+    enum ProgramType { PROGRAM_UNKNOWN=0, PROGRAM_EXTERNAL_TEXTURE,
+            PROGRAM_TEXTURE_2D };
+
+    Program() :
+        mProgramType(PROGRAM_UNKNOWN),
+        mProgram(0),
+        maPositionLoc(0),
+        maTextureCoordLoc(0),
+        muMVPMatrixLoc(0),
+        muGLCMatrixLoc(0),
+        muTextureLoc(0)
+        {}
+    ~Program() { release(); }
+
+    // Initialize the program for use with the specified texture type.
+    status_t setup(ProgramType type);
+
+    // Release the program and associated resources.
+    void release();
+
+    // Blit the specified texture to { x, y, x+w, y+h }.
+    status_t blit(GLuint texName, const float* texMatrix,
+            int32_t x, int32_t y, int32_t w, int32_t h) const;
+
+    // Draw a number of triangles.
+    status_t drawTriangles(GLuint texName, const float* texMatrix,
+            const float* vertices, const float* texes, size_t count) const;
+
+    static const float kIdentity[];
+
+private:
+    Program(const Program&);
+    Program& operator=(const Program&);
+
+    // Common code for draw functions.
+    status_t beforeDraw(GLuint texName, const float* texMatrix,
+            const float* vertices, const float* texes) const;
+    status_t afterDraw() const;
+
+    // GLES 2 shader utilities.
+    status_t createProgram(GLuint* outPgm, const char* vertexShader,
+            const char* fragmentShader);
+    static status_t compileShader(GLenum shaderType, const char* src,
+            GLuint* outShader);
+    static status_t linkShaderProgram(GLuint vs, GLuint fs, GLuint* outPgm);
+
+    ProgramType mProgramType;
+    GLuint mProgram;
+
+    GLint maPositionLoc;
+    GLint maTextureCoordLoc;
+    GLint muMVPMatrixLoc;
+    GLint muGLCMatrixLoc;
+    GLint muTextureLoc;
+};
+
+}; // namespace android
+
+#endif /*SCREENRECORD_PROGRAM_H*/
diff --git a/cmds/screenrecord/TextRenderer.cpp b/cmds/screenrecord/TextRenderer.cpp
new file mode 100644
index 0000000..784055c
--- /dev/null
+++ b/cmds/screenrecord/TextRenderer.cpp
@@ -0,0 +1,358 @@
+/*
+ * Copyright 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "ScreenRecord"
+//#define LOG_NDEBUG 0
+#include <utils/Log.h>
+
+#include "TextRenderer.h"
+
+#include <assert.h>
+
+namespace android {
+#include "FontBitmap.h"
+};
+
+using namespace android;
+
+const char TextRenderer::kWhitespace[] = " \t\n\r";
+
+bool TextRenderer::mInitialized = false;
+uint32_t TextRenderer::mXOffset[FontBitmap::numGlyphs];
+
+void TextRenderer::initOnce() {
+    if (!mInitialized) {
+        initXOffset();
+        mInitialized = true;
+    }
+}
+
+void TextRenderer::initXOffset() {
+    // Generate a table of X offsets.  They start at zero and reset whenever
+    // we move down a line (i.e. the Y offset changes).  The offset increases
+    // by one pixel more than the width because the generator left a gap to
+    // avoid reading pixels from adjacent glyphs in the texture filter.
+    uint16_t offset = 0;
+    uint16_t prevYOffset = (int16_t) -1;
+    for (unsigned int i = 0; i < FontBitmap::numGlyphs; i++) {
+        if (prevYOffset != FontBitmap::yoffset[i]) {
+            prevYOffset = FontBitmap::yoffset[i];
+            offset = 0;
+        }
+        mXOffset[i] = offset;
+        offset += FontBitmap::glyphWidth[i] + 1;
+    }
+}
+
+static bool isPowerOfTwo(uint32_t val) {
+    // a/k/a "is exactly one bit set"; note returns true for 0
+    return (val & (val -1)) == 0;
+}
+
+static uint32_t powerOfTwoCeil(uint32_t val) {
+    // drop it, smear the bits across, pop it
+    val--;
+    val |= val >> 1;
+    val |= val >> 2;
+    val |= val >> 4;
+    val |= val >> 8;
+    val |= val >> 16;
+    val++;
+
+    return val;
+}
+
+float TextRenderer::getGlyphHeight() const {
+    return FontBitmap::maxGlyphHeight;
+}
+
+status_t TextRenderer::loadIntoTexture() {
+    ALOGV("Font::loadIntoTexture");
+
+    glGenTextures(1, &mTextureName);
+    if (mTextureName == 0) {
+        ALOGE("glGenTextures failed: %#x", glGetError());
+        return UNKNOWN_ERROR;
+    }
+    glBindTexture(GL_TEXTURE_2D, mTextureName);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+
+    // The pixel data is stored as combined color+alpha, 8 bits per pixel.
+    // It's guaranteed to be a power-of-two wide, but we cut off the height
+    // where the data ends.  We want to expand it to a power-of-two bitmap
+    // with ARGB data and hand that to glTexImage2D.
+
+    if (!isPowerOfTwo(FontBitmap::width)) {
+        ALOGE("npot glyph bitmap width %u", FontBitmap::width);
+        return UNKNOWN_ERROR;
+    }
+
+    uint32_t potHeight = powerOfTwoCeil(FontBitmap::height);
+    uint8_t* rgbaPixels = new uint8_t[FontBitmap::width * potHeight * 4];
+    memset(rgbaPixels, 0, FontBitmap::width * potHeight * 4);
+    uint8_t* pix = rgbaPixels;
+
+    for (unsigned int i = 0; i < FontBitmap::width * FontBitmap::height; i++) {
+        uint8_t alpha, color;
+        if ((FontBitmap::pixels[i] & 1) == 0) {
+            // black pixel with varying alpha
+            color = 0x00;
+            alpha = FontBitmap::pixels[i] & ~1;
+        } else {
+            // opaque grey pixel
+            color = FontBitmap::pixels[i] & ~1;
+            alpha = 0xff;
+        }
+        *pix++ = color;
+        *pix++ = color;
+        *pix++ = color;
+        *pix++ = alpha;
+    }
+
+    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, FontBitmap::width, potHeight, 0,
+            GL_RGBA, GL_UNSIGNED_BYTE, rgbaPixels);
+    delete[] rgbaPixels;
+    GLint glErr = glGetError();
+    if (glErr != 0) {
+        ALOGE("glTexImage2D failed: %#x", glErr);
+        return UNKNOWN_ERROR;
+    }
+    return NO_ERROR;
+}
+
+void TextRenderer::setProportionalScale(float linesPerScreen) {
+    if (mScreenWidth == 0 || mScreenHeight == 0) {
+        ALOGW("setFontScale: can't set scale for width=%d height=%d",
+                mScreenWidth, mScreenHeight);
+        return;
+    }
+    float tallest = mScreenWidth > mScreenHeight ? mScreenWidth : mScreenHeight;
+    setScale(tallest / (linesPerScreen * getGlyphHeight()));
+}
+
+float TextRenderer::computeScaledStringWidth(const String8& str8) const {
+    // String8.length() isn't documented, but I'm assuming it will return
+    // the number of characters rather than the number of bytes.  Since
+    // we can only display ASCII we want to ignore anything else, so we
+    // just convert to char* -- but String8 doesn't document what it does
+    // with values outside 0-255.  So just convert to char* and use strlen()
+    // to see what we get.
+    const char* str = str8.string();
+    return computeScaledStringWidth(str, strlen(str));
+}
+
+size_t TextRenderer::glyphIndex(char ch) const {
+    size_t chi = ch - FontBitmap::firstGlyphChar;
+    if (chi >= FontBitmap::numGlyphs) {
+        chi = '?' - FontBitmap::firstGlyphChar;
+    }
+    assert(chi < FontBitmap::numGlyphs);
+    return chi;
+}
+
+float TextRenderer::computeScaledStringWidth(const char* str,
+        size_t len) const {
+    float width = 0.0f;
+    for (size_t i = 0; i < len; i++) {
+        size_t chi = glyphIndex(str[i]);
+        float glyphWidth = FontBitmap::glyphWidth[chi];
+        width += (glyphWidth - 1 - FontBitmap::outlineWidth) * mScale;
+    }
+
+    return width;
+}
+
+void TextRenderer::drawString(const Program& program, const float* texMatrix,
+        float x, float y, const String8& str8) const {
+    ALOGV("drawString %.3f,%.3f '%s' (scale=%.3f)", x, y, str8.string(),mScale);
+    initOnce();
+
+    // We want to draw the entire string with a single GLES call.  We
+    // generate two arrays, one with screen coordinates, one with texture
+    // coordinates.  Need two triangles per character.
+    const char* str = str8.string();
+    size_t len = strlen(str);       // again, unsure about String8 handling
+
+    const size_t quadCoords =
+            2 /*triangles*/ * 3 /*vertex/tri*/ * 2 /*coord/vertex*/;
+    float vertices[len * quadCoords];
+    float texes[len * quadCoords];
+
+    float fullTexWidth = FontBitmap::width;
+    float fullTexHeight = powerOfTwoCeil(FontBitmap::height);
+    for (size_t i = 0; i < len; i++) {
+        size_t chi = glyphIndex(str[i]);
+        float glyphWidth = FontBitmap::glyphWidth[chi];
+        float glyphHeight = FontBitmap::maxGlyphHeight;
+
+        float vertLeft = x;
+        float vertRight = x + glyphWidth * mScale;
+        float vertTop = y;
+        float vertBottom = y + glyphHeight * mScale;
+
+        // Lowest-numbered glyph is in top-left of bitmap, which puts it at
+        // the bottom-left in texture coordinates.
+        float texLeft = mXOffset[chi] / fullTexWidth;
+        float texRight = (mXOffset[chi] + glyphWidth) / fullTexWidth;
+        float texTop = FontBitmap::yoffset[chi] / fullTexHeight;
+        float texBottom = (FontBitmap::yoffset[chi] + glyphHeight) /
+                fullTexHeight;
+
+        size_t off = i * quadCoords;
+        vertices[off +  0] = vertLeft;
+        vertices[off +  1] = vertBottom;
+        vertices[off +  2] = vertRight;
+        vertices[off +  3] = vertBottom;
+        vertices[off +  4] = vertLeft;
+        vertices[off +  5] = vertTop;
+        vertices[off +  6] = vertLeft;
+        vertices[off +  7] = vertTop;
+        vertices[off +  8] = vertRight;
+        vertices[off +  9] = vertBottom;
+        vertices[off + 10] = vertRight;
+        vertices[off + 11] = vertTop;
+        texes[off +  0] = texLeft;
+        texes[off +  1] = texBottom;
+        texes[off +  2] = texRight;
+        texes[off +  3] = texBottom;
+        texes[off +  4] = texLeft;
+        texes[off +  5] = texTop;
+        texes[off +  6] = texLeft;
+        texes[off +  7] = texTop;
+        texes[off +  8] = texRight;
+        texes[off +  9] = texBottom;
+        texes[off + 10] = texRight;
+        texes[off + 11] = texTop;
+
+        // We added 1-pixel padding in the texture, so we want to advance by
+        // one less.  Also, each glyph is surrounded by a black outline, which
+        // we want to merge.
+        x += (glyphWidth - 1 - FontBitmap::outlineWidth) * mScale;
+    }
+
+    program.drawTriangles(mTextureName, texMatrix, vertices, texes,
+            len * quadCoords / 2);
+}
+
+float TextRenderer::drawWrappedString(const Program& texRender,
+        float xpos, float ypos, const String8& str) {
+    ALOGV("drawWrappedString %.3f,%.3f '%s'", xpos, ypos, str.string());
+    initOnce();
+
+    if (mScreenWidth == 0 || mScreenHeight == 0) {
+        ALOGW("drawWrappedString: can't wrap with width=%d height=%d",
+                mScreenWidth, mScreenHeight);
+        return ypos;
+    }
+
+    const float indentWidth = mIndentMult * getScale();
+    if (xpos < mBorderWidth) {
+        xpos = mBorderWidth;
+    }
+    if (ypos < mBorderWidth) {
+        ypos = mBorderWidth;
+    }
+
+    const size_t maxWidth = (mScreenWidth - mBorderWidth) - xpos;
+    if (maxWidth < 1) {
+        ALOGE("Unable to render text: xpos=%.3f border=%.3f width=%u",
+                xpos, mBorderWidth, mScreenWidth);
+        return ypos;
+    }
+    float stringWidth = computeScaledStringWidth(str);
+    if (stringWidth <= maxWidth) {
+        // Trivial case.
+        drawString(texRender, Program::kIdentity, xpos, ypos, str);
+        ypos += getScaledGlyphHeight();
+    } else {
+        // We need to break the string into pieces, ideally at whitespace
+        // boundaries.
+        char* mangle = strdup(str.string());
+        char* start = mangle;
+        while (start != NULL) {
+            float xposAdj = (start == mangle) ? xpos : xpos + indentWidth;
+            char* brk = breakString(start,
+                    (float) (mScreenWidth - mBorderWidth - xposAdj));
+            if (brk == NULL) {
+                // draw full string
+                drawString(texRender, Program::kIdentity, xposAdj, ypos,
+                        String8(start));
+                start = NULL;
+            } else {
+                // draw partial string
+                char ch = *brk;
+                *brk = '\0';
+                drawString(texRender, Program::kIdentity, xposAdj, ypos,
+                        String8(start));
+                *brk = ch;
+                start = brk;
+                if (strchr(kWhitespace, ch) != NULL) {
+                    // if we broke on whitespace, skip past it
+                    start++;
+                }
+            }
+            ypos += getScaledGlyphHeight();
+        }
+        free(mangle);
+    }
+
+    return ypos;
+}
+
+char* TextRenderer::breakString(const char* str, float maxWidth) const {
+    // Ideally we'd do clever things like binary search.  Not bothering.
+    ALOGV("breakString '%s' %.3f", str, maxWidth);
+
+    size_t len = strlen(str);
+    if (len == 0) {
+        // Caller should detect this and not advance ypos.
+        return NULL;
+    }
+
+    float stringWidth = computeScaledStringWidth(str, len);
+    if (stringWidth <= maxWidth) {
+        return NULL;        // trivial -- use full string
+    }
+
+    // Find the longest string that will fit.
+    size_t goodPos = 0;
+    for (size_t i = 0; i < len; i++) {
+        stringWidth = computeScaledStringWidth(str, i);
+        if (stringWidth < maxWidth) {
+            goodPos = i;
+        } else {
+            break;  // too big
+        }
+    }
+    if (goodPos == 0) {
+        // space is too small to hold any glyph; output a single char
+        ALOGW("Couldn't find a nonzero prefix that fit from '%s'", str);
+        goodPos = 1;
+    }
+
+    // Scan back for whitespace.  If we can't find any we'll just have
+    // an ugly mid-word break.
+    for (size_t i = goodPos; i > 0; i--) {
+        if (strchr(kWhitespace, str[i]) != NULL) {
+            goodPos = i;
+            break;
+        }
+    }
+
+    ALOGV("goodPos=%d for str='%s'", goodPos, str);
+    return const_cast<char*>(str + goodPos);
+}
diff --git a/cmds/screenrecord/TextRenderer.h b/cmds/screenrecord/TextRenderer.h
new file mode 100644
index 0000000..03dd2fb
--- /dev/null
+++ b/cmds/screenrecord/TextRenderer.h
@@ -0,0 +1,140 @@
+/*
+ * Copyright 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SCREENRECORD_TEXT_RENDER_H
+#define SCREENRECORD_TEXT_RENDER_H
+
+#include "Program.h"
+
+#include <utils/String8.h>
+#include <utils/Errors.h>
+
+#include <GLES2/gl2.h>
+
+
+namespace android {
+
+/*
+ * Simple font representation.
+ *
+ * Not thread-safe.
+ */
+class TextRenderer {
+public:
+    TextRenderer() :
+        mTextureName(0),
+        mScale(1.0f),
+        mBorderWidth(10.0f),
+        mIndentMult(30.0f),
+        mScreenWidth(0),
+        mScreenHeight(0)
+        {}
+    ~TextRenderer() {}
+
+    // Load the glyph bitmap into a 2D texture in the current context.
+    status_t loadIntoTexture();
+
+    // Set the screen dimensions, used for scaling and line wrap.
+    void setScreenSize(uint32_t width, uint32_t height) {
+        mScreenWidth = width;
+        mScreenHeight = height;
+    }
+
+    // Get/set the font scaling.
+    float getScale() const { return mScale; }
+    void setScale(float scale) { mScale = scale; }
+
+    // Set the font scaling based on the desired number of lines per screen.
+    // The display's tallest axis is used, so if the device is in landscape
+    // the screen will fit fewer lines.
+    void setProportionalScale(float linesPerScreen);
+
+    // Render the text string at the specified coordinates.  Pass in the
+    // upper-left corner in non-GL-flipped coordinates, i.e. to print text
+    // at the top left of the screen use (0,0).
+    //
+    // Set blend func (1, 1-srcAlpha) before calling if drawing onto
+    // something other than black.
+    void drawString(const Program& program, const float* texMatrix,
+            float x, float y, const String8& str) const;
+
+    // Draw a string, possibly wrapping it at the screen boundary.  Top-left
+    // is at (0,0).
+    //
+    // Returns the updated Y position.
+    float drawWrappedString(const Program& texRender, float xpos, float ypos,
+            const String8& str);
+
+    // Returns the name of the texture the font was loaded into.
+    GLuint getTextureName() const { return mTextureName; }
+
+private:
+    TextRenderer(const TextRenderer&);
+    TextRenderer& operator=(const TextRenderer&);
+
+    // Perform one-time initialization.
+    static void initOnce();
+
+    // Populate the mXOffset array.
+    static void initXOffset();
+
+    // Find a good place to break the string.  Returns NULL if the entire
+    // string will fit.
+    char* breakString(const char* str, float maxWidth) const;
+
+    // Computes the width of the string, in pixels.
+    float computeScaledStringWidth(const String8& str8) const;
+
+    // Computes the width of first N characters in the string.
+    float computeScaledStringWidth(const char* str, size_t len) const;
+
+    // Returns the font's glyph height.  This is the full pixel height of the
+    // tallest glyph, both above and below the baseline, NOT adjusted by the
+    // current scale factor.
+    float getGlyphHeight() const;
+
+    // Like getGlyphHeight(), but result is scaled.
+    float getScaledGlyphHeight() const { return getGlyphHeight() * mScale; }
+
+    // Convert an ASCII character to a glyph index.  Returns the glyph for
+    // '?' if we have no glyph for the specified character.
+    size_t glyphIndex(char ch) const;
+
+    GLuint mTextureName;
+    float mScale;
+
+    // Number of pixels preserved at the left/right edges of the screen by
+    // drawWrappedString().  Not scaled.
+    float mBorderWidth;
+
+    // Distance to indent a broken line.  Used by drawWrappedString().
+    // Value will be adjusted by the current scale factor.
+    float mIndentMult;
+
+    // Screen dimensions.
+    uint32_t mScreenWidth;
+    uint32_t mScreenHeight;
+
+    // Static font info.
+    static bool mInitialized;
+    static uint32_t mXOffset[];
+
+    static const char kWhitespace[];
+};
+
+}; // namespace android
+
+#endif /*SCREENRECORD_TEXT_RENDER_H*/
diff --git a/cmds/screenrecord/screenrecord.cpp b/cmds/screenrecord/screenrecord.cpp
index 49999b5..61f83e3 100644
--- a/cmds/screenrecord/screenrecord.cpp
+++ b/cmds/screenrecord/screenrecord.cpp
@@ -15,13 +15,14 @@
  */
 
 #define LOG_TAG "ScreenRecord"
+#define ATRACE_TAG ATRACE_TAG_GRAPHICS
 //#define LOG_NDEBUG 0
 #include <utils/Log.h>
 
 #include <binder/IPCThreadState.h>
 #include <utils/Errors.h>
-#include <utils/Thread.h>
 #include <utils/Timers.h>
+#include <utils/Trace.h>
 
 #include <gui/Surface.h>
 #include <gui/SurfaceComposerClient.h>
@@ -29,7 +30,6 @@
 #include <ui/DisplayInfo.h>
 #include <media/openmax/OMX_IVCommon.h>
 #include <media/stagefright/foundation/ABuffer.h>
-#include <media/stagefright/foundation/ADebug.h>
 #include <media/stagefright/foundation/AMessage.h>
 #include <media/stagefright/MediaCodec.h>
 #include <media/stagefright/MediaErrors.h>
@@ -40,30 +40,37 @@
 #include <unistd.h>
 #include <string.h>
 #include <stdio.h>
+#include <ctype.h>
 #include <fcntl.h>
 #include <signal.h>
 #include <getopt.h>
 #include <sys/wait.h>
+#include <assert.h>
+
+#include "screenrecord.h"
+#include "Overlay.h"
 
 using namespace android;
 
 static const uint32_t kMinBitRate = 100000;         // 0.1Mbps
-static const uint32_t kMaxBitRate = 100 * 1000000;  // 100Mbps
+static const uint32_t kMaxBitRate = 200 * 1000000;  // 200Mbps
 static const uint32_t kMaxTimeLimitSec = 180;       // 3 minutes
 static const uint32_t kFallbackWidth = 1280;        // 720p
 static const uint32_t kFallbackHeight = 720;
 
 // Command-line parameters.
-static bool gVerbose = false;               // chatty on stdout
-static bool gRotate = false;                // rotate 90 degrees
-static bool gSizeSpecified = false;         // was size explicitly requested?
-static uint32_t gVideoWidth = 0;            // default width+height
+static bool gVerbose = false;           // chatty on stdout
+static bool gRotate = false;            // rotate 90 degrees
+static bool gSizeSpecified = false;     // was size explicitly requested?
+static bool gWantInfoScreen = false;    // do we want initial info screen?
+static bool gWantFrameTime = false;     // do we want times on each frame?
+static uint32_t gVideoWidth = 0;        // default width+height
 static uint32_t gVideoHeight = 0;
-static uint32_t gBitRate = 4000000;         // 4Mbps
+static uint32_t gBitRate = 4000000;     // 4Mbps
 static uint32_t gTimeLimitSec = kMaxTimeLimitSec;
 
 // Set by signal handler to stop recording.
-static bool gStopRequested;
+static volatile bool gStopRequested;
 
 // Previous signal handler state, restored after first hit.
 static struct sigaction gOrigSigactionINT;
@@ -97,8 +104,7 @@
  * when Ctrl-C is hit.  If we're run from the host, the local adb process
  * gets the signal, and we get a SIGHUP when the terminal disconnects.
  */
-static status_t configureSignals()
-{
+static status_t configureSignals() {
     struct sigaction act;
     memset(&act, 0, sizeof(act));
     act.sa_handler = signalCatcher;
@@ -156,35 +162,30 @@
         fprintf(stderr, "ERROR: unable to create video/avc codec instance\n");
         return UNKNOWN_ERROR;
     }
+
     err = codec->configure(format, NULL, NULL,
             MediaCodec::CONFIGURE_FLAG_ENCODE);
     if (err != NO_ERROR) {
-        codec->release();
-        codec.clear();
-
         fprintf(stderr, "ERROR: unable to configure codec (err=%d)\n", err);
+        codec->release();
         return err;
     }
 
-    ALOGV("Creating buffer producer");
+    ALOGV("Creating encoder input surface");
     sp<IGraphicBufferProducer> bufferProducer;
     err = codec->createInputSurface(&bufferProducer);
     if (err != NO_ERROR) {
-        codec->release();
-        codec.clear();
-
         fprintf(stderr,
             "ERROR: unable to create encoder input surface (err=%d)\n", err);
+        codec->release();
         return err;
     }
 
     ALOGV("Starting codec");
     err = codec->start();
     if (err != NO_ERROR) {
-        codec->release();
-        codec.clear();
-
         fprintf(stderr, "ERROR: unable to start codec (err=%d)\n", err);
+        codec->release();
         return err;
     }
 
@@ -195,12 +196,11 @@
 }
 
 /*
- * Configures the virtual display.  When this completes, virtual display
- * frames will start being sent to the encoder's surface.
+ * Sets the display projection, based on the display dimensions, video size,
+ * and device orientation.
  */
-static status_t prepareVirtualDisplay(const DisplayInfo& mainDpyInfo,
-        const sp<IGraphicBufferProducer>& bufferProducer,
-        sp<IBinder>* pDisplayHandle) {
+static status_t setDisplayProjection(const sp<IBinder>& dpy,
+        const DisplayInfo& mainDpyInfo) {
     status_t err;
 
     // Set the region of the layer stack we're interested in, which in our
@@ -266,15 +266,25 @@
         }
     }
 
-
-    sp<IBinder> dpy = SurfaceComposerClient::createDisplay(
-            String8("ScreenRecorder"), false /* secure */);
-
-    SurfaceComposerClient::openGlobalTransaction();
-    SurfaceComposerClient::setDisplaySurface(dpy, bufferProducer);
     SurfaceComposerClient::setDisplayProjection(dpy,
             gRotate ? DISPLAY_ORIENTATION_90 : DISPLAY_ORIENTATION_0,
             layerStackRect, displayRect);
+    return NO_ERROR;
+}
+
+/*
+ * Configures the virtual display.  When this completes, virtual display
+ * frames will start arriving from the buffer producer.
+ */
+static status_t prepareVirtualDisplay(const DisplayInfo& mainDpyInfo,
+        const sp<IGraphicBufferProducer>& bufferProducer,
+        sp<IBinder>* pDisplayHandle) {
+    sp<IBinder> dpy = SurfaceComposerClient::createDisplay(
+            String8("ScreenRecorder"), false /*secure*/);
+
+    SurfaceComposerClient::openGlobalTransaction();
+    SurfaceComposerClient::setDisplaySurface(dpy, bufferProducer);
+    setDisplayProjection(dpy, mainDpyInfo);
     SurfaceComposerClient::setDisplayLayerStack(dpy, 0);    // default stack
     SurfaceComposerClient::closeGlobalTransaction();
 
@@ -291,13 +301,15 @@
  * The muxer must *not* have been started before calling.
  */
 static status_t runEncoder(const sp<MediaCodec>& encoder,
-        const sp<MediaMuxer>& muxer) {
+        const sp<MediaMuxer>& muxer, const sp<IBinder>& mainDpy,
+        const sp<IBinder>& virtualDpy, uint8_t orientation) {
     static int kTimeout = 250000;   // be responsive on signal
     status_t err;
     ssize_t trackIdx = -1;
     uint32_t debugNumFrames = 0;
     int64_t startWhenNsec = systemTime(CLOCK_MONOTONIC);
     int64_t endWhenNsec = startWhenNsec + seconds_to_nanoseconds(gTimeLimitSec);
+    DisplayInfo mainDpyInfo;
 
     Vector<sp<ABuffer> > buffers;
     err = encoder->getOutputBuffers(&buffers);
@@ -338,10 +350,31 @@
             if (size != 0) {
                 ALOGV("Got data in buffer %d, size=%d, pts=%lld",
                         bufIndex, size, ptsUsec);
-                CHECK(trackIdx != -1);
+                assert(trackIdx != -1);
+
+                { // scope
+                    ATRACE_NAME("orientation");
+                    // Check orientation, update if it has changed.
+                    //
+                    // Polling for changes is inefficient and wrong, but the
+                    // useful stuff is hard to get at without a Dalvik VM.
+                    err = SurfaceComposerClient::getDisplayInfo(mainDpy,
+                            &mainDpyInfo);
+                    if (err != NO_ERROR) {
+                        ALOGW("getDisplayInfo(main) failed: %d", err);
+                    } else if (orientation != mainDpyInfo.orientation) {
+                        ALOGD("orientation changed, now %d", mainDpyInfo.orientation);
+                        SurfaceComposerClient::openGlobalTransaction();
+                        setDisplayProjection(virtualDpy, mainDpyInfo);
+                        SurfaceComposerClient::closeGlobalTransaction();
+                        orientation = mainDpyInfo.orientation;
+                    }
+                }
 
                 // If the virtual display isn't providing us with timestamps,
-                // use the current time.
+                // use the current time.  This isn't great -- we could get
+                // decoded data in clusters -- but we're not expecting
+                // to hit this anyway.
                 if (ptsUsec == 0) {
                     ptsUsec = systemTime(SYSTEM_TIME_MONOTONIC) / 1000;
                 }
@@ -349,12 +382,18 @@
                 // The MediaMuxer docs are unclear, but it appears that we
                 // need to pass either the full set of BufferInfo flags, or
                 // (flags & BUFFER_FLAG_SYNCFRAME).
-                err = muxer->writeSampleData(buffers[bufIndex], trackIdx,
-                        ptsUsec, flags);
-                if (err != NO_ERROR) {
-                    fprintf(stderr, "Failed writing data to muxer (err=%d)\n",
-                            err);
-                    return err;
+                //
+                // If this blocks for too long we could drop frames.  We may
+                // want to queue these up and do them on a different thread.
+                { // scope
+                    ATRACE_NAME("write sample");
+                    err = muxer->writeSampleData(buffers[bufIndex], trackIdx,
+                            ptsUsec, flags);
+                    if (err != NO_ERROR) {
+                        fprintf(stderr,
+                            "Failed writing data to muxer (err=%d)\n", err);
+                        return err;
+                    }
                 }
                 debugNumFrames++;
             }
@@ -366,8 +405,8 @@
             }
             if ((flags & MediaCodec::BUFFER_FLAG_EOS) != 0) {
                 // Not expecting EOS from SurfaceFlinger.  Go with it.
-                ALOGD("Received end-of-stream");
-                gStopRequested = false;
+                ALOGI("Received end-of-stream");
+                gStopRequested = true;
             }
             break;
         case -EAGAIN:                       // INFO_TRY_AGAIN_LATER
@@ -375,7 +414,7 @@
             break;
         case INFO_FORMAT_CHANGED:           // INFO_OUTPUT_FORMAT_CHANGED
             {
-                // format includes CSD, which we must provide to muxer
+                // Format includes CSD, which we must provide to muxer.
                 ALOGV("Encoder format changed");
                 sp<AMessage> newFormat;
                 encoder->getOutputFormat(&newFormat);
@@ -389,7 +428,7 @@
             }
             break;
         case INFO_OUTPUT_BUFFERS_CHANGED:   // INFO_OUTPUT_BUFFERS_CHANGED
-            // not expected for an encoder; handle it anyway
+            // Not expected for an encoder; handle it anyway.
             ALOGV("Encoder buffers changed");
             err = encoder->getOutputBuffers(&buffers);
             if (err != NO_ERROR) {
@@ -399,7 +438,7 @@
             }
             break;
         case INVALID_OPERATION:
-            fprintf(stderr, "Request for encoder buffer failed\n");
+            ALOGW("dequeueOutputBuffer returned INVALID_OPERATION");
             return err;
         default:
             fprintf(stderr,
@@ -411,8 +450,8 @@
     ALOGV("Encoder stopping (req=%d)", gStopRequested);
     if (gVerbose) {
         printf("Encoder stopping; recorded %u frames in %lld seconds\n",
-                debugNumFrames,
-                nanoseconds_to_seconds(systemTime(CLOCK_MONOTONIC) - startWhenNsec));
+                debugNumFrames, nanoseconds_to_seconds(
+                        systemTime(CLOCK_MONOTONIC) - startWhenNsec));
     }
     return NO_ERROR;
 }
@@ -460,8 +499,8 @@
 
     // Configure and start the encoder.
     sp<MediaCodec> encoder;
-    sp<IGraphicBufferProducer> bufferProducer;
-    err = prepareEncoder(mainDpyInfo.fps, &encoder, &bufferProducer);
+    sp<IGraphicBufferProducer> encoderInputSurface;
+    err = prepareEncoder(mainDpyInfo.fps, &encoder, &encoderInputSurface);
 
     if (err != NO_ERROR && !gSizeSpecified) {
         // fallback is defined for landscape; swap if we're in portrait
@@ -474,11 +513,41 @@
                     gVideoWidth, gVideoHeight, newWidth, newHeight);
             gVideoWidth = newWidth;
             gVideoHeight = newHeight;
-            err = prepareEncoder(mainDpyInfo.fps, &encoder, &bufferProducer);
+            err = prepareEncoder(mainDpyInfo.fps, &encoder,
+                    &encoderInputSurface);
         }
     }
-    if (err != NO_ERROR) {
-        return err;
+    if (err != NO_ERROR) return err;
+
+    // From here on, we must explicitly release() the encoder before it goes
+    // out of scope, or we will get an assertion failure from stagefright
+    // later on in a different thread.
+
+
+    // Draw the "info" page by rendering a frame with GLES and sending
+    // it directly to the encoder.
+    // TODO: consider displaying this as a regular layer to avoid b/11697754
+    if (gWantInfoScreen) {
+        Overlay::drawInfoPage(encoderInputSurface);
+    }
+
+    // Configure optional overlay.
+    sp<IGraphicBufferProducer> bufferProducer;
+    sp<Overlay> overlay;
+    if (gWantFrameTime) {
+        // Send virtual display frames to an external texture.
+        overlay = new Overlay();
+        err = overlay->start(encoderInputSurface, &bufferProducer);
+        if (err != NO_ERROR) {
+            encoder->release();
+            return err;
+        }
+        if (gVerbose) {
+            printf("Bugreport overlay created\n");
+        }
+    } else {
+        // Use the encoder's input surface as the virtual display surface.
+        bufferProducer = encoderInputSurface;
     }
 
     // Configure virtual display.
@@ -486,25 +555,22 @@
     err = prepareVirtualDisplay(mainDpyInfo, bufferProducer, &dpy);
     if (err != NO_ERROR) {
         encoder->release();
-        encoder.clear();
-
         return err;
     }
 
-    // Configure, but do not start, muxer.
+    // Configure muxer.  We have to wait for the CSD blob from the encoder
+    // before we can start it.
     sp<MediaMuxer> muxer = new MediaMuxer(fileName,
             MediaMuxer::OUTPUT_FORMAT_MPEG_4);
     if (gRotate) {
-        muxer->setOrientationHint(90);
+        muxer->setOrientationHint(90);  // TODO: does this do anything?
     }
 
     // Main encoder loop.
-    err = runEncoder(encoder, muxer);
+    err = runEncoder(encoder, muxer, mainDpy, dpy, mainDpyInfo.orientation);
     if (err != NO_ERROR) {
-        encoder->release();
-        encoder.clear();
-
-        return err;
+        fprintf(stderr, "Encoder failed (err=%d)\n", err);
+        // fall through to cleanup
     }
 
     if (gVerbose) {
@@ -512,14 +578,18 @@
     }
 
     // Shut everything down, starting with the producer side.
-    bufferProducer = NULL;
+    encoderInputSurface = NULL;
     SurfaceComposerClient::destroyDisplay(dpy);
-
+    if (overlay != NULL) {
+        overlay->stop();
+    }
     encoder->stop();
+    // If we don't stop muxer explicitly, i.e. let the destructor run,
+    // it may hang (b/11050628).
     muxer->stop();
     encoder->release();
 
-    return 0;
+    return err;
 }
 
 /*
@@ -528,6 +598,28 @@
  * This is optional, but nice to have.
  */
 static status_t notifyMediaScanner(const char* fileName) {
+    // need to do allocations before the fork()
+    String8 fileUrl("file://");
+    fileUrl.append(fileName);
+
+    const char* kCommand = "/system/bin/am";
+    const char* const argv[] = {
+            kCommand,
+            "broadcast",
+            "-a",
+            "android.intent.action.MEDIA_SCANNER_SCAN_FILE",
+            "-d",
+            fileUrl.string(),
+            NULL
+    };
+    if (gVerbose) {
+        printf("Executing:");
+        for (int i = 0; argv[i] != NULL; i++) {
+            printf(" %s", argv[i]);
+        }
+        putchar('\n');
+    }
+
     pid_t pid = fork();
     if (pid < 0) {
         int err = errno;
@@ -539,34 +631,14 @@
         int status;
         pid_t actualPid = TEMP_FAILURE_RETRY(waitpid(pid, &status, 0));
         if (actualPid != pid) {
-            ALOGW("waitpid() returned %d (errno=%d)", actualPid, errno);
+            ALOGW("waitpid(%d) returned %d (errno=%d)", pid, actualPid, errno);
         } else if (status != 0) {
             ALOGW("'am broadcast' exited with status=%d", status);
         } else {
             ALOGV("'am broadcast' exited successfully");
         }
     } else {
-        const char* kCommand = "/system/bin/am";
-
-        // child; we're single-threaded, so okay to alloc
-        String8 fileUrl("file://");
-        fileUrl.append(fileName);
-        const char* const argv[] = {
-                kCommand,
-                "broadcast",
-                "-a",
-                "android.intent.action.MEDIA_SCANNER_SCAN_FILE",
-                "-d",
-                fileUrl.string(),
-                NULL
-        };
-        if (gVerbose) {
-            printf("Executing:");
-            for (int i = 0; argv[i] != NULL; i++) {
-                printf(" %s", argv[i]);
-            }
-            putchar('\n');
-        } else {
+        if (!gVerbose) {
             // non-verbose, suppress 'am' output
             ALOGV("closing stdout/stderr in child");
             int fd = open("/dev/null", O_WRONLY);
@@ -611,13 +683,37 @@
 }
 
 /*
+ * Accepts a string with a bare number ("4000000") or with a single-character
+ * unit ("4m").
+ *
+ * Returns an error if parsing fails.
+ */
+static status_t parseValueWithUnit(const char* str, uint32_t* pValue) {
+    long value;
+    char* endptr;
+
+    value = strtol(str, &endptr, 10);
+    if (*endptr == '\0') {
+        // bare number
+        *pValue = value;
+        return NO_ERROR;
+    } else if (toupper(*endptr) == 'M' && *(endptr+1) == '\0') {
+        *pValue = value * 1000000;  // check for overflow?
+        return NO_ERROR;
+    } else {
+        fprintf(stderr, "Unrecognized value: %s\n", str);
+        return UNKNOWN_ERROR;
+    }
+}
+
+/*
  * Dumps usage on stderr.
  */
 static void usage() {
     fprintf(stderr,
         "Usage: screenrecord [options] <filename>\n"
         "\n"
-        "Records the device's display to a .mp4 file.\n"
+        "Android screenrecord v%d.%d.  Records the device's display to a .mp4 file.\n"
         "\n"
         "Options:\n"
         "--size WIDTHxHEIGHT\n"
@@ -625,11 +721,13 @@
         "    display resolution (if supported), 1280x720 if not.  For best results,\n"
         "    use a size supported by the AVC encoder.\n"
         "--bit-rate RATE\n"
-        "    Set the video bit rate, in megabits per second.  Default %dMbps.\n"
+        "    Set the video bit rate, in bits per second.  Value may be specified as\n"
+        "    bits or megabits, e.g. '4000000' is equivalent to '4M'.  Default %dMbps.\n"
+        "--bugreport\n"
+        "    Add additional information, such as a timestamp overlay, that is helpful\n"
+        "    in videos captured to illustrate bugs.\n"
         "--time-limit TIME\n"
         "    Set the maximum recording time, in seconds.  Default / maximum is %d.\n"
-        "--rotate\n"
-        "    Rotate the output 90 degrees.\n"
         "--verbose\n"
         "    Display interesting information on stdout.\n"
         "--help\n"
@@ -637,7 +735,7 @@
         "\n"
         "Recording continues until Ctrl-C is hit or the time limit is reached.\n"
         "\n",
-        gBitRate / 1000000, gTimeLimitSec
+        kVersionMajor, kVersionMinor, gBitRate / 1000000, gTimeLimitSec
         );
 }
 
@@ -646,13 +744,16 @@
  */
 int main(int argc, char* const argv[]) {
     static const struct option longOptions[] = {
-        { "help",       no_argument,        NULL, 'h' },
-        { "verbose",    no_argument,        NULL, 'v' },
-        { "size",       required_argument,  NULL, 's' },
-        { "bit-rate",   required_argument,  NULL, 'b' },
-        { "time-limit", required_argument,  NULL, 't' },
-        { "rotate",     no_argument,        NULL, 'r' },
-        { NULL,         0,                  NULL, 0 }
+        { "help",               no_argument,        NULL, 'h' },
+        { "verbose",            no_argument,        NULL, 'v' },
+        { "size",               required_argument,  NULL, 's' },
+        { "bit-rate",           required_argument,  NULL, 'b' },
+        { "time-limit",         required_argument,  NULL, 't' },
+        { "show-device-info",   no_argument,        NULL, 'i' },
+        { "show-frame-time",    no_argument,        NULL, 'f' },
+        { "bugreport",          no_argument,        NULL, 'u' },
+        { "rotate",             no_argument,        NULL, 'r' },
+        { NULL,                 0,                  NULL, 0 }
     };
 
     while (true) {
@@ -684,7 +785,9 @@
             gSizeSpecified = true;
             break;
         case 'b':
-            gBitRate = atoi(optarg);
+            if (parseValueWithUnit(optarg, &gBitRate) != NO_ERROR) {
+                return 2;
+            }
             if (gBitRate < kMinBitRate || gBitRate > kMaxBitRate) {
                 fprintf(stderr,
                         "Bit rate %dbps outside acceptable range [%d,%d]\n",
@@ -701,7 +804,18 @@
                 return 2;
             }
             break;
+        case 'i':
+            gWantInfoScreen = true;
+            break;
+        case 'f':
+            gWantFrameTime = true;
+            break;
+        case 'u':
+            gWantInfoScreen = true;
+            gWantFrameTime = true;
+            break;
         case 'r':
+            // experimental feature
             gRotate = true;
             break;
         default:
diff --git a/cmds/screenrecord/screenrecord.h b/cmds/screenrecord/screenrecord.h
new file mode 100644
index 0000000..95e8a68
--- /dev/null
+++ b/cmds/screenrecord/screenrecord.h
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SCREENRECORD_SCREENRECORD_H
+#define SCREENRECORD_SCREENRECORD_H
+
+#define kVersionMajor 1
+#define kVersionMinor 1
+
+#endif /*SCREENRECORD_SCREENRECORD_H*/
diff --git a/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp b/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp
index 234aef2..f400732 100644
--- a/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp
+++ b/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp
@@ -316,6 +316,7 @@
 
     if (-1 < fileDesc) {
         if (FwdLockFile_attach(fileDesc) < 0) {
+            close(fileDesc);
             return mimeString;
         }
         const char* pMimeType = FwdLockFile_GetContentType(fileDesc);
diff --git a/include/media/AudioRecord.h b/include/media/AudioRecord.h
index 052064d..fb47448 100644
--- a/include/media/AudioRecord.h
+++ b/include/media/AudioRecord.h
@@ -60,7 +60,7 @@
         size_t      frameCount;     // number of sample frames corresponding to size;
                                     // on input it is the number of frames available,
                                     // on output is the number of frames actually drained
-                                    // (currently ignored, but will make the primary field in future)
+                                    // (currently ignored but will make the primary field in future)
 
         size_t      size;           // input/output in bytes == frameCount * frameSize
                                     // FIXME this is redundant with respect to frameCount,
@@ -446,7 +446,8 @@
                                                     // notification callback
     uint32_t                mNotificationFramesAct; // actual number of frames between each
                                                     // notification callback
-    bool                    mRefreshRemaining;  // processAudioBuffer() should refresh next 2
+    bool                    mRefreshRemaining;      // processAudioBuffer() should refresh
+                                                    // mRemainingFrames and mRetryOnPartialBuffer
 
     // These are private to processAudioBuffer(), and are not protected by a lock
     uint32_t                mRemainingFrames;       // number of frames to request in obtainBuffer()
diff --git a/include/media/AudioSystem.h b/include/media/AudioSystem.h
index 225ef76..b96b8a1 100644
--- a/include/media/AudioSystem.h
+++ b/include/media/AudioSystem.h
@@ -155,7 +155,8 @@
     class OutputDescriptor {
     public:
         OutputDescriptor()
-        : samplingRate(0), format(AUDIO_FORMAT_DEFAULT), channelMask(0), frameCount(0), latency(0)  {}
+        : samplingRate(0), format(AUDIO_FORMAT_DEFAULT), channelMask(0), frameCount(0), latency(0)
+            {}
 
         uint32_t samplingRate;
         audio_format_t format;
diff --git a/include/media/AudioTimestamp.h b/include/media/AudioTimestamp.h
index c29c7e5..99e9c3e 100644
--- a/include/media/AudioTimestamp.h
+++ b/include/media/AudioTimestamp.h
@@ -19,6 +19,8 @@
 
 #include <time.h>
 
+namespace android {
+
 class AudioTimestamp {
 public:
     AudioTimestamp() : mPosition(0) {
@@ -30,4 +32,6 @@
     struct timespec mTime;     // corresponding CLOCK_MONOTONIC when frame is expected to present
 };
 
+}   // namespace
+
 #endif  // ANDROID_AUDIO_TIMESTAMP_H
diff --git a/include/media/AudioTrack.h b/include/media/AudioTrack.h
index f379ee5..e163f88 100644
--- a/include/media/AudioTrack.h
+++ b/include/media/AudioTrack.h
@@ -661,12 +661,11 @@
     sp<AudioTrackThread>    mAudioTrackThread;
     float                   mVolume[2];
     float                   mSendLevel;
-    uint32_t                mSampleRate;
+    mutable uint32_t        mSampleRate;            // mutable because getSampleRate() can update it.
     size_t                  mFrameCount;            // corresponds to current IAudioTrack
     size_t                  mReqFrameCount;         // frame count to request the next time a new
                                                     // IAudioTrack is needed
 
-
     // constant after constructor or set()
     audio_format_t          mFormat;                // as requested by client, not forced to 16-bit
     audio_stream_type_t     mStreamType;
@@ -705,7 +704,8 @@
     uint32_t                mNotificationFramesAct; // actual number of frames between each
                                                     // notification callback,
                                                     // at initial source sample rate
-    bool                    mRefreshRemaining;      // processAudioBuffer() should refresh next 2
+    bool                    mRefreshRemaining;      // processAudioBuffer() should refresh
+                                                    // mRemainingFrames and mRetryOnPartialBuffer
 
     // These are private to processAudioBuffer(), and are not protected by a lock
     uint32_t                mRemainingFrames;       // number of frames to request in obtainBuffer()
diff --git a/include/media/MediaPlayerInterface.h b/include/media/MediaPlayerInterface.h
index cc244f0..26d8729 100644
--- a/include/media/MediaPlayerInterface.h
+++ b/include/media/MediaPlayerInterface.h
@@ -100,6 +100,7 @@
         virtual status_t    getFramesWritten(uint32_t *frameswritten) const = 0;
         virtual int         getSessionId() const = 0;
         virtual audio_stream_type_t getAudioStreamType() const = 0;
+        virtual uint32_t    getSampleRate() const = 0;
 
         // If no callback is specified, use the "write" API below to submit
         // audio data.
diff --git a/include/media/stagefright/ACodec.h b/include/media/stagefright/ACodec.h
index 7395055..f1636e6 100644
--- a/include/media/stagefright/ACodec.h
+++ b/include/media/stagefright/ACodec.h
@@ -249,6 +249,8 @@
             int32_t numChannels, int32_t sampleRate, int32_t bitRate,
             int32_t aacProfile, bool isADTS);
 
+    status_t setupAC3Codec(bool encoder, int32_t numChannels, int32_t sampleRate);
+
     status_t selectAudioPortFormat(
             OMX_U32 portIndex, OMX_AUDIO_CODINGTYPE desiredFormat);
 
diff --git a/include/media/stagefright/AudioPlayer.h b/include/media/stagefright/AudioPlayer.h
index 912a43c..14afb85 100644
--- a/include/media/stagefright/AudioPlayer.h
+++ b/include/media/stagefright/AudioPlayer.h
@@ -129,7 +129,7 @@
     void reset();
 
     uint32_t getNumFramesPendingPlayout() const;
-    int64_t getOutputPlayPositionUs_l() const;
+    int64_t getOutputPlayPositionUs_l();
 
     bool allowDeepBuffering() const { return (mCreateFlags & ALLOW_DEEP_BUFFERING) != 0; }
     bool useOffload() const { return (mCreateFlags & USE_OFFLOAD) != 0; }
diff --git a/include/media/stagefright/MediaDefs.h b/include/media/stagefright/MediaDefs.h
index 85693d4..cf5beda 100644
--- a/include/media/stagefright/MediaDefs.h
+++ b/include/media/stagefright/MediaDefs.h
@@ -44,6 +44,7 @@
 extern const char *MEDIA_MIMETYPE_AUDIO_FLAC;
 extern const char *MEDIA_MIMETYPE_AUDIO_AAC_ADTS;
 extern const char *MEDIA_MIMETYPE_AUDIO_MSGSM;
+extern const char *MEDIA_MIMETYPE_AUDIO_AC3;
 
 extern const char *MEDIA_MIMETYPE_CONTAINER_MPEG4;
 extern const char *MEDIA_MIMETYPE_CONTAINER_WAV;
diff --git a/include/media/stagefright/OMXCodec.h b/include/media/stagefright/OMXCodec.h
index daaf20f..5121c17 100644
--- a/include/media/stagefright/OMXCodec.h
+++ b/include/media/stagefright/OMXCodec.h
@@ -248,6 +248,8 @@
             int32_t numChannels, int32_t sampleRate, int32_t bitRate,
             int32_t aacProfile, bool isADTS);
 
+    status_t setAC3Format(int32_t numChannels, int32_t sampleRate);
+
     void setG711Format(int32_t numChannels);
 
     status_t setVideoPortFormatType(
diff --git a/include/media/stagefright/SkipCutBuffer.h b/include/media/stagefright/SkipCutBuffer.h
index 2653b53..098aa69 100644
--- a/include/media/stagefright/SkipCutBuffer.h
+++ b/include/media/stagefright/SkipCutBuffer.h
@@ -47,6 +47,7 @@
  private:
     void write(const char *src, size_t num);
     size_t read(char *dst, size_t num);
+    int32_t mSkip;
     int32_t mFrontPadding;
     int32_t mBackPadding;
     int32_t mWriteHead;
diff --git a/include/private/media/AudioTrackShared.h b/include/private/media/AudioTrackShared.h
index 7fd9379..85862a8 100644
--- a/include/private/media/AudioTrackShared.h
+++ b/include/private/media/AudioTrackShared.h
@@ -48,7 +48,7 @@
 #define CBLK_STREAM_END_DONE 0x400 // set by server on render completion, cleared by client
 
 //EL_FIXME 20 seconds may not be enough and must be reconciled with new obtainBuffer implementation
-#define MAX_RUN_OFFLOADED_TIMEOUT_MS 20000 //assuming upto a maximum of 20 seconds of offloaded
+#define MAX_RUN_OFFLOADED_TIMEOUT_MS 20000 // assuming up to a maximum of 20 seconds of offloaded
 
 struct AudioTrackSharedStreaming {
     // similar to NBAIO MonoPipe
diff --git a/libvideoeditor/lvpp/VideoEditorPlayer.cpp b/libvideoeditor/lvpp/VideoEditorPlayer.cpp
index 5aeba4f..8d656c4 100755
--- a/libvideoeditor/lvpp/VideoEditorPlayer.cpp
+++ b/libvideoeditor/lvpp/VideoEditorPlayer.cpp
@@ -585,4 +585,11 @@
     return mSessionId;
 }
 
+uint32_t VideoEditorPlayer::VeAudioOutput::getSampleRate() const {
+    if (mMsecsPerFrame == 0) {
+        return 0;
+    }
+    return (uint32_t)(1.e3 / mMsecsPerFrame);
+}
+
 }  // namespace android
diff --git a/libvideoeditor/lvpp/VideoEditorPlayer.h b/libvideoeditor/lvpp/VideoEditorPlayer.h
index 5862c08..b8c1254 100755
--- a/libvideoeditor/lvpp/VideoEditorPlayer.h
+++ b/libvideoeditor/lvpp/VideoEditorPlayer.h
@@ -48,6 +48,7 @@
         virtual status_t        getPosition(uint32_t *position) const;
         virtual status_t        getFramesWritten(uint32_t*) const;
         virtual int             getSessionId() const;
+        virtual uint32_t        getSampleRate() const;
 
         virtual status_t        open(
                 uint32_t sampleRate, int channelCount, audio_channel_mask_t channelMask,
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp
index b8a89a0..4b93714 100644
--- a/media/libmedia/AudioTrack.cpp
+++ b/media/libmedia/AudioTrack.cpp
@@ -250,9 +250,6 @@
     if (format == AUDIO_FORMAT_DEFAULT) {
         format = AUDIO_FORMAT_PCM_16_BIT;
     }
-    if (channelMask == 0) {
-        channelMask = AUDIO_CHANNEL_OUT_STEREO;
-    }
 
     // validate parameters
     if (!audio_is_valid_format(format)) {
@@ -260,6 +257,11 @@
         return BAD_VALUE;
     }
 
+    if (!audio_is_output_channel(channelMask)) {
+        ALOGE("Invalid channel mask %#x", channelMask);
+        return BAD_VALUE;
+    }
+
     // AudioFlinger does not currently support 8-bit data in shared memory
     if (format == AUDIO_FORMAT_PCM_8_BIT && sharedBuffer != 0) {
         ALOGE("8-bit data in shared memory is not supported");
@@ -282,10 +284,6 @@
         flags = (audio_output_flags_t)(flags &~AUDIO_OUTPUT_FLAG_DEEP_BUFFER);
     }
 
-    if (!audio_is_output_channel(channelMask)) {
-        ALOGE("Invalid channel mask %#x", channelMask);
-        return BAD_VALUE;
-    }
     mChannelMask = channelMask;
     uint32_t channelCount = popcount(channelMask);
     mChannelCount = channelCount;
@@ -445,8 +443,7 @@
 void AudioTrack::stop()
 {
     AutoMutex lock(mLock);
-    // FIXME pause then stop should not be a nop
-    if (mState != STATE_ACTIVE) {
+    if (mState != STATE_ACTIVE && mState != STATE_PAUSED) {
         return;
     }
 
@@ -603,6 +600,19 @@
     }
 
     AutoMutex lock(mLock);
+
+    // sample rate can be updated during playback by the offloaded decoder so we need to
+    // query the HAL and update if needed.
+// FIXME use Proxy return channel to update the rate from server and avoid polling here
+    if (isOffloaded()) {
+        if (mOutput != 0) {
+            uint32_t sampleRate = 0;
+            status_t status = AudioSystem::getSamplingRate(mOutput, mStreamType, &sampleRate);
+            if (status == NO_ERROR) {
+                mSampleRate = sampleRate;
+            }
+        }
+    }
     return mSampleRate;
 }
 
diff --git a/media/libmedia/IAudioFlinger.cpp b/media/libmedia/IAudioFlinger.cpp
index acfaea0..9df10f0 100644
--- a/media/libmedia/IAudioFlinger.cpp
+++ b/media/libmedia/IAudioFlinger.cpp
@@ -139,7 +139,7 @@
             lStatus = reply.readInt32();
             track = interface_cast<IAudioTrack>(reply.readStrongBinder());
         }
-        if (status) {
+        if (status != NULL) {
             *status = lStatus;
         }
         return track;
@@ -198,7 +198,7 @@
                 }
             }
         }
-        if (status) {
+        if (status != NULL) {
             *status = lStatus;
         }
         return record;
@@ -415,15 +415,25 @@
         audio_io_handle_t output = (audio_io_handle_t) reply.readInt32();
         ALOGV("openOutput() returned output, %d", output);
         devices = (audio_devices_t)reply.readInt32();
-        if (pDevices != NULL) *pDevices = devices;
+        if (pDevices != NULL) {
+            *pDevices = devices;
+        }
         samplingRate = reply.readInt32();
-        if (pSamplingRate != NULL) *pSamplingRate = samplingRate;
+        if (pSamplingRate != NULL) {
+            *pSamplingRate = samplingRate;
+        }
         format = (audio_format_t) reply.readInt32();
-        if (pFormat != NULL) *pFormat = format;
+        if (pFormat != NULL) {
+            *pFormat = format;
+        }
         channelMask = (audio_channel_mask_t)reply.readInt32();
-        if (pChannelMask != NULL) *pChannelMask = channelMask;
+        if (pChannelMask != NULL) {
+            *pChannelMask = channelMask;
+        }
         latency = reply.readInt32();
-        if (pLatencyMs != NULL) *pLatencyMs = latency;
+        if (pLatencyMs != NULL) {
+            *pLatencyMs = latency;
+        }
         return output;
     }
 
@@ -487,13 +497,21 @@
         remote()->transact(OPEN_INPUT, data, &reply);
         audio_io_handle_t input = (audio_io_handle_t) reply.readInt32();
         devices = (audio_devices_t)reply.readInt32();
-        if (pDevices != NULL) *pDevices = devices;
+        if (pDevices != NULL) {
+            *pDevices = devices;
+        }
         samplingRate = reply.readInt32();
-        if (pSamplingRate != NULL) *pSamplingRate = samplingRate;
+        if (pSamplingRate != NULL) {
+            *pSamplingRate = samplingRate;
+        }
         format = (audio_format_t) reply.readInt32();
-        if (pFormat != NULL) *pFormat = format;
+        if (pFormat != NULL) {
+            *pFormat = format;
+        }
         channelMask = (audio_channel_mask_t)reply.readInt32();
-        if (pChannelMask != NULL) *pChannelMask = channelMask;
+        if (pChannelMask != NULL) {
+            *pChannelMask = channelMask;
+        }
         return input;
     }
 
@@ -535,11 +553,11 @@
         status_t status = reply.readInt32();
         if (status == NO_ERROR) {
             uint32_t tmp = reply.readInt32();
-            if (halFrames) {
+            if (halFrames != NULL) {
                 *halFrames = tmp;
             }
             tmp = reply.readInt32();
-            if (dspFrames) {
+            if (dspFrames != NULL) {
                 *dspFrames = tmp;
             }
         }
@@ -657,7 +675,7 @@
 
         if (pDesc == NULL) {
             return effect;
-            if (status) {
+            if (status != NULL) {
                 *status = BAD_VALUE;
             }
         }
@@ -675,7 +693,7 @@
         } else {
             lStatus = reply.readInt32();
             int tmp = reply.readInt32();
-            if (id) {
+            if (id != NULL) {
                 *id = tmp;
             }
             tmp = reply.readInt32();
@@ -685,7 +703,7 @@
             effect = interface_cast<IEffect>(reply.readStrongBinder());
             reply.read(pDesc, sizeof(effect_descriptor_t));
         }
-        if (status) {
+        if (status != NULL) {
             *status = lStatus;
         }
 
diff --git a/media/libmedia/IAudioRecord.cpp b/media/libmedia/IAudioRecord.cpp
index 4a7de65..9866d70 100644
--- a/media/libmedia/IAudioRecord.cpp
+++ b/media/libmedia/IAudioRecord.cpp
@@ -50,6 +50,9 @@
         status_t status = remote()->transact(GET_CBLK, data, &reply);
         if (status == NO_ERROR) {
             cblk = interface_cast<IMemory>(reply.readStrongBinder());
+            if (cblk != 0 && cblk->pointer() == NULL) {
+                cblk.clear();
+            }
         }
         return cblk;
     }
diff --git a/media/libmedia/IAudioTrack.cpp b/media/libmedia/IAudioTrack.cpp
index 3cd9cfd..ffc21fc 100644
--- a/media/libmedia/IAudioTrack.cpp
+++ b/media/libmedia/IAudioTrack.cpp
@@ -60,6 +60,9 @@
         status_t status = remote()->transact(GET_CBLK, data, &reply);
         if (status == NO_ERROR) {
             cblk = interface_cast<IMemory>(reply.readStrongBinder());
+            if (cblk != 0 && cblk->pointer() == NULL) {
+                cblk.clear();
+            }
         }
         return cblk;
     }
@@ -122,6 +125,9 @@
             status = reply.readInt32();
             if (status == NO_ERROR) {
                 *buffer = interface_cast<IMemory>(reply.readStrongBinder());
+                if (*buffer != 0 && (*buffer)->pointer() == NULL) {
+                    (*buffer).clear();
+                }
             }
         }
         return status;
diff --git a/media/libmedia/IEffect.cpp b/media/libmedia/IEffect.cpp
index a303a8f..b94012a 100644
--- a/media/libmedia/IEffect.cpp
+++ b/media/libmedia/IEffect.cpp
@@ -117,6 +117,9 @@
         status_t status = remote()->transact(GET_CBLK, data, &reply);
         if (status == NO_ERROR) {
             cblk = interface_cast<IMemory>(reply.readStrongBinder());
+            if (cblk != 0 && cblk->pointer() == NULL) {
+                cblk.clear();
+            }
         }
         return cblk;
     }
diff --git a/media/libmedia/SoundPool.cpp b/media/libmedia/SoundPool.cpp
index 22e9fad..b420c95 100644
--- a/media/libmedia/SoundPool.cpp
+++ b/media/libmedia/SoundPool.cpp
@@ -600,16 +600,15 @@
         // wrong audio audio buffer size  (mAudioBufferSize)
         unsigned long toggle = mToggle ^ 1;
         void *userData = (void *)((unsigned long)this | toggle);
-        uint32_t channels = (numChannels == 2) ?
-                AUDIO_CHANNEL_OUT_STEREO : AUDIO_CHANNEL_OUT_MONO;
+        audio_channel_mask_t channelMask = audio_channel_out_mask_from_count(numChannels);
 
         // do not create a new audio track if current track is compatible with sample parameters
 #ifdef USE_SHARED_MEM_BUFFER
         newTrack = new AudioTrack(streamType, sampleRate, sample->format(),
-                channels, sample->getIMemory(), AUDIO_OUTPUT_FLAG_FAST, callback, userData);
+                channelMask, sample->getIMemory(), AUDIO_OUTPUT_FLAG_FAST, callback, userData);
 #else
         newTrack = new AudioTrack(streamType, sampleRate, sample->format(),
-                channels, frameCount, AUDIO_OUTPUT_FLAG_FAST, callback, userData,
+                channelMask, frameCount, AUDIO_OUTPUT_FLAG_FAST, callback, userData,
                 bufferFrames);
 #endif
         oldTrack = mAudioTrack;
diff --git a/media/libmediaplayerservice/HDCP.cpp b/media/libmediaplayerservice/HDCP.cpp
index c2ac1a3..afe3936 100644
--- a/media/libmediaplayerservice/HDCP.cpp
+++ b/media/libmediaplayerservice/HDCP.cpp
@@ -107,11 +107,7 @@
         return NO_INIT;
     }
 
-    // TO-DO:
-    // Only support HDCP_CAPS_ENCRYPT (byte-array to byte-array) for now.
-    // use mHDCPModule->getCaps() when the HDCP libraries get updated.
-    //return mHDCPModule->getCaps();
-    return HDCPModule::HDCP_CAPS_ENCRYPT;
+    return mHDCPModule->getCaps();
 }
 
 status_t HDCP::encrypt(
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
index cd052e6..9ac9105 100644
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ b/media/libmediaplayerservice/MediaPlayerService.cpp
@@ -1813,6 +1813,12 @@
     return mSessionId;
 }
 
+uint32_t MediaPlayerService::AudioOutput::getSampleRate() const
+{
+    if (mTrack == 0) return 0;
+    return mTrack->getSampleRate();
+}
+
 #undef LOG_TAG
 #define LOG_TAG "AudioCache"
 MediaPlayerService::AudioCache::AudioCache(const sp<IMemoryHeap>& heap) :
@@ -2015,6 +2021,14 @@
     return 0;
 }
 
+uint32_t MediaPlayerService::AudioCache::getSampleRate() const
+{
+    if (mMsecsPerFrame == 0) {
+        return 0;
+    }
+    return (uint32_t)(1.e3 / mMsecsPerFrame);
+}
+
 void MediaPlayerService::addBatteryData(uint32_t params)
 {
     Mutex::Autolock lock(mLock);
diff --git a/media/libmediaplayerservice/MediaPlayerService.h b/media/libmediaplayerservice/MediaPlayerService.h
index a486cb5..9c084e1 100644
--- a/media/libmediaplayerservice/MediaPlayerService.h
+++ b/media/libmediaplayerservice/MediaPlayerService.h
@@ -86,6 +86,7 @@
         virtual status_t        getPosition(uint32_t *position) const;
         virtual status_t        getFramesWritten(uint32_t *frameswritten) const;
         virtual int             getSessionId() const;
+        virtual uint32_t        getSampleRate() const;
 
         virtual status_t        open(
                 uint32_t sampleRate, int channelCount, audio_channel_mask_t channelMask,
@@ -195,6 +196,7 @@
         virtual status_t        getPosition(uint32_t *position) const;
         virtual status_t        getFramesWritten(uint32_t *frameswritten) const;
         virtual int             getSessionId() const;
+        virtual uint32_t        getSampleRate() const;
 
         virtual status_t        open(
                 uint32_t sampleRate, int channelCount, audio_channel_mask_t channelMask,
diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp
index f9d9020..78dad19 100644
--- a/media/libmediaplayerservice/StagefrightRecorder.cpp
+++ b/media/libmediaplayerservice/StagefrightRecorder.cpp
@@ -973,7 +973,7 @@
             return err;
         }
 
-        err = setupVideoEncoder(mediaSource, mVideoBitRate, &source);
+        err = setupVideoEncoder(mediaSource, &source);
         if (err != OK) {
             return err;
         }
@@ -1017,7 +1017,7 @@
         }
 
         sp<MediaSource> encoder;
-        err = setupVideoEncoder(mediaSource, mVideoBitRate, &encoder);
+        err = setupVideoEncoder(mediaSource, &encoder);
 
         if (err != OK) {
             return err;
@@ -1383,12 +1383,11 @@
 
 status_t StagefrightRecorder::setupVideoEncoder(
         sp<MediaSource> cameraSource,
-        int32_t videoBitRate,
         sp<MediaSource> *source) {
     source->clear();
 
     sp<MetaData> enc_meta = new MetaData;
-    enc_meta->setInt32(kKeyBitRate, videoBitRate);
+    enc_meta->setInt32(kKeyBitRate, mVideoBitRate);
     enc_meta->setInt32(kKeyFrameRate, mFrameRate);
 
     switch (mVideoEncoder) {
@@ -1495,16 +1494,11 @@
     return OK;
 }
 
-status_t StagefrightRecorder::setupMPEG4Recording(
-        int outputFd,
-        int32_t videoWidth, int32_t videoHeight,
-        int32_t videoBitRate,
-        int32_t *totalBitRate,
-        sp<MediaWriter> *mediaWriter) {
-    mediaWriter->clear();
+status_t StagefrightRecorder::setupMPEG4Recording(int32_t *totalBitRate) {
+    mWriter.clear();
     *totalBitRate = 0;
     status_t err = OK;
-    sp<MediaWriter> writer = new MPEG4Writer(outputFd);
+    sp<MediaWriter> writer = new MPEG4Writer(mOutputFd);
 
     if (mVideoSource < VIDEO_SOURCE_LIST_END) {
 
@@ -1515,13 +1509,13 @@
         }
 
         sp<MediaSource> encoder;
-        err = setupVideoEncoder(mediaSource, videoBitRate, &encoder);
+        err = setupVideoEncoder(mediaSource, &encoder);
         if (err != OK) {
             return err;
         }
 
         writer->addSource(encoder);
-        *totalBitRate += videoBitRate;
+        *totalBitRate += mVideoBitRate;
     }
 
     // Audio source is added at the end if it exists.
@@ -1555,7 +1549,7 @@
     }
 
     writer->setListener(mListener);
-    *mediaWriter = writer;
+    mWriter = writer;
     return OK;
 }
 
@@ -1578,9 +1572,7 @@
 
 status_t StagefrightRecorder::startMPEG4Recording() {
     int32_t totalBitRate;
-    status_t err = setupMPEG4Recording(
-            mOutputFd, mVideoWidth, mVideoHeight,
-            mVideoBitRate, &totalBitRate, &mWriter);
+    status_t err = setupMPEG4Recording(&totalBitRate);
     if (err != OK) {
         return err;
     }
diff --git a/media/libmediaplayerservice/StagefrightRecorder.h b/media/libmediaplayerservice/StagefrightRecorder.h
index 31f09e0..bc43488 100644
--- a/media/libmediaplayerservice/StagefrightRecorder.h
+++ b/media/libmediaplayerservice/StagefrightRecorder.h
@@ -124,12 +124,7 @@
     // frame buffers will be queued and dequeued
     sp<SurfaceMediaSource> mSurfaceMediaSource;
 
-    status_t setupMPEG4Recording(
-        int outputFd,
-        int32_t videoWidth, int32_t videoHeight,
-        int32_t videoBitRate,
-        int32_t *totalBitRate,
-        sp<MediaWriter> *mediaWriter);
+    status_t setupMPEG4Recording(int32_t *totalBitRate);
     void setupMPEG4MetaData(int64_t startTimeUs, int32_t totalBitRate,
         sp<MetaData> *meta);
     status_t startMPEG4Recording();
@@ -151,10 +146,7 @@
     status_t setupSurfaceMediaSource();
 
     status_t setupAudioEncoder(const sp<MediaWriter>& writer);
-    status_t setupVideoEncoder(
-            sp<MediaSource> cameraSource,
-            int32_t videoBitRate,
-            sp<MediaSource> *source);
+    status_t setupVideoEncoder(sp<MediaSource> cameraSource, sp<MediaSource> *source);
 
     // Encoding parameter handling utilities
     status_t setParameter(const String8 &key, const String8 &value);
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
index 5d5220f..eb274a8 100644
--- a/media/libstagefright/ACodec.cpp
+++ b/media/libstagefright/ACodec.cpp
@@ -35,7 +35,9 @@
 
 #include <media/hardware/HardwareAPI.h>
 
+#include <OMX_AudioExt.h>
 #include <OMX_Component.h>
+#include <OMX_IndexExt.h>
 
 #include "include/avc_utils.h"
 
@@ -977,6 +979,10 @@
             "audio_decoder.flac", "audio_encoder.flac" },
         { MEDIA_MIMETYPE_AUDIO_MSGSM,
             "audio_decoder.gsm", "audio_encoder.gsm" },
+        { MEDIA_MIMETYPE_VIDEO_MPEG2,
+            "video_decoder.mpeg2", "video_encoder.mpeg2" },
+        { MEDIA_MIMETYPE_AUDIO_AC3,
+            "audio_decoder.ac3", "audio_encoder.ac3" },
     };
 
     static const size_t kNumMimeToRole =
@@ -1268,6 +1274,15 @@
         } else {
             err = setupRawAudioFormat(kPortIndexInput, sampleRate, numChannels);
         }
+    } else if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AC3)) {
+        int32_t numChannels;
+        int32_t sampleRate;
+        if (!msg->findInt32("channel-count", &numChannels)
+                || !msg->findInt32("sample-rate", &sampleRate)) {
+            err = INVALID_OPERATION;
+        } else {
+            err = setupAC3Codec(encoder, numChannels, sampleRate);
+        }
     }
 
     if (err != OK) {
@@ -1464,6 +1479,44 @@
             mNode, OMX_IndexParamAudioAac, &profile, sizeof(profile));
 }
 
+status_t ACodec::setupAC3Codec(
+        bool encoder, int32_t numChannels, int32_t sampleRate) {
+    status_t err = setupRawAudioFormat(
+            encoder ? kPortIndexInput : kPortIndexOutput, sampleRate, numChannels);
+
+    if (err != OK) {
+        return err;
+    }
+
+    if (encoder) {
+        ALOGW("AC3 encoding is not supported.");
+        return INVALID_OPERATION;
+    }
+
+    OMX_AUDIO_PARAM_ANDROID_AC3TYPE def;
+    InitOMXParams(&def);
+    def.nPortIndex = kPortIndexInput;
+
+    err = mOMX->getParameter(
+            mNode,
+            (OMX_INDEXTYPE)OMX_IndexParamAudioAndroidAc3,
+            &def,
+            sizeof(def));
+
+    if (err != OK) {
+        return err;
+    }
+
+    def.nChannels = numChannels;
+    def.nSampleRate = sampleRate;
+
+    return mOMX->setParameter(
+            mNode,
+            (OMX_INDEXTYPE)OMX_IndexParamAudioAndroidAc3,
+            &def,
+            sizeof(def));
+}
+
 static OMX_AUDIO_AMRBANDMODETYPE pickModeFromBitRate(
         bool isAMRWB, int32_t bps) {
     if (isAMRWB) {
@@ -2558,7 +2611,7 @@
         {
             OMX_AUDIO_PORTDEFINITIONTYPE *audioDef = &def.format.audio;
 
-            switch (audioDef->eEncoding) {
+            switch ((int)audioDef->eEncoding) {
                 case OMX_AUDIO_CodingPCM:
                 {
                     OMX_AUDIO_PARAM_PCMMODETYPE params;
@@ -2664,6 +2717,24 @@
                     break;
                 }
 
+                case OMX_AUDIO_CodingAndroidAC3:
+                {
+                    OMX_AUDIO_PARAM_ANDROID_AC3TYPE params;
+                    InitOMXParams(&params);
+                    params.nPortIndex = kPortIndexOutput;
+
+                    CHECK_EQ((status_t)OK, mOMX->getParameter(
+                            mNode,
+                            (OMX_INDEXTYPE)OMX_IndexParamAudioAndroidAc3,
+                            &params,
+                            sizeof(params)));
+
+                    notify->setString("mime", MEDIA_MIMETYPE_AUDIO_AC3);
+                    notify->setInt32("channel-count", params.nChannels);
+                    notify->setInt32("sample-rate", params.nSampleRate);
+                    break;
+                }
+
                 default:
                     TRESPASS();
             }
@@ -3342,7 +3413,7 @@
             sp<AMessage> reply =
                 new AMessage(kWhatOutputBufferDrained, mCodec->id());
 
-            if (!mCodec->mSentFormat) {
+            if (!mCodec->mSentFormat && rangeLength > 0) {
                 mCodec->sendFormatChange(reply);
             }
 
diff --git a/media/libstagefright/AudioPlayer.cpp b/media/libstagefright/AudioPlayer.cpp
index a8a8786..05ee34e 100644
--- a/media/libstagefright/AudioPlayer.cpp
+++ b/media/libstagefright/AudioPlayer.cpp
@@ -721,16 +721,27 @@
     return result + diffUs;
 }
 
-int64_t AudioPlayer::getOutputPlayPositionUs_l() const
+int64_t AudioPlayer::getOutputPlayPositionUs_l()
 {
     uint32_t playedSamples = 0;
+    uint32_t sampleRate;
     if (mAudioSink != NULL) {
         mAudioSink->getPosition(&playedSamples);
+        sampleRate = mAudioSink->getSampleRate();
     } else {
         mAudioTrack->getPosition(&playedSamples);
+        sampleRate = mAudioTrack->getSampleRate();
+    }
+    if (sampleRate != 0) {
+        mSampleRate = sampleRate;
     }
 
-    const int64_t playedUs = (static_cast<int64_t>(playedSamples) * 1000000 ) / mSampleRate;
+    int64_t playedUs;
+    if (mSampleRate != 0) {
+        playedUs = (static_cast<int64_t>(playedSamples) * 1000000 ) / mSampleRate;
+    } else {
+        playedUs = 0;
+    }
 
     // HAL position is relative to the first buffer we sent at mStartPosUs
     const int64_t renderedDuration = mStartPosUs + playedUs;
diff --git a/media/libstagefright/MediaDefs.cpp b/media/libstagefright/MediaDefs.cpp
index b5d4e44..340cba7 100644
--- a/media/libstagefright/MediaDefs.cpp
+++ b/media/libstagefright/MediaDefs.cpp
@@ -42,6 +42,7 @@
 const char *MEDIA_MIMETYPE_AUDIO_FLAC = "audio/flac";
 const char *MEDIA_MIMETYPE_AUDIO_AAC_ADTS = "audio/aac-adts";
 const char *MEDIA_MIMETYPE_AUDIO_MSGSM = "audio/gsm";
+const char *MEDIA_MIMETYPE_AUDIO_AC3 = "audio/ac3";
 
 const char *MEDIA_MIMETYPE_CONTAINER_MPEG4 = "video/mp4";
 const char *MEDIA_MIMETYPE_CONTAINER_WAV = "audio/x-wav";
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp
index 43736ad..625922f 100644
--- a/media/libstagefright/OMXCodec.cpp
+++ b/media/libstagefright/OMXCodec.cpp
@@ -40,7 +40,9 @@
 #include <utils/Vector.h>
 
 #include <OMX_Audio.h>
+#include <OMX_AudioExt.h>
 #include <OMX_Component.h>
+#include <OMX_IndexExt.h>
 
 #include "include/avc_utils.h"
 
@@ -528,6 +530,17 @@
                     sampleRate,
                     numChannels);
         }
+    } else if (!strcasecmp(MEDIA_MIMETYPE_AUDIO_AC3, mMIME)) {
+        int32_t numChannels;
+        int32_t sampleRate;
+        CHECK(meta->findInt32(kKeyChannelCount, &numChannels));
+        CHECK(meta->findInt32(kKeySampleRate, &sampleRate));
+
+        status_t err = setAC3Format(numChannels, sampleRate);
+        if (err != OK) {
+            CODEC_LOGE("setAC3Format() failed (err = %d)", err);
+            return err;
+        }
     } else if (!strcasecmp(MEDIA_MIMETYPE_AUDIO_G711_ALAW, mMIME)
             || !strcasecmp(MEDIA_MIMETYPE_AUDIO_G711_MLAW, mMIME)) {
         // These are PCM-like formats with a fixed sample rate but
@@ -1394,6 +1407,10 @@
             "audio_decoder.flac", "audio_encoder.flac" },
         { MEDIA_MIMETYPE_AUDIO_MSGSM,
             "audio_decoder.gsm", "audio_encoder.gsm" },
+        { MEDIA_MIMETYPE_VIDEO_MPEG2,
+            "video_decoder.mpeg2", "video_encoder.mpeg2" },
+        { MEDIA_MIMETYPE_AUDIO_AC3,
+            "audio_decoder.ac3", "audio_encoder.ac3" },
     };
 
     static const size_t kNumMimeToRole =
@@ -3489,6 +3506,31 @@
     return OK;
 }
 
+status_t OMXCodec::setAC3Format(int32_t numChannels, int32_t sampleRate) {
+    OMX_AUDIO_PARAM_ANDROID_AC3TYPE def;
+    InitOMXParams(&def);
+    def.nPortIndex = kPortIndexInput;
+
+    status_t err = mOMX->getParameter(
+            mNode,
+            (OMX_INDEXTYPE)OMX_IndexParamAudioAndroidAc3,
+            &def,
+            sizeof(def));
+
+    if (err != OK) {
+        return err;
+    }
+
+    def.nChannels = numChannels;
+    def.nSampleRate = sampleRate;
+
+    return mOMX->setParameter(
+            mNode,
+            (OMX_INDEXTYPE)OMX_IndexParamAudioAndroidAc3,
+            &def,
+            sizeof(def));
+}
+
 void OMXCodec::setG711Format(int32_t numChannels) {
     CHECK(!mIsEncoder);
     setRawAudioFormat(kPortIndexInput, 8000, numChannels);
@@ -4422,6 +4464,17 @@
                 mOutputFormat->setInt32(kKeyChannelCount, numChannels);
                 mOutputFormat->setInt32(kKeySampleRate, sampleRate);
                 mOutputFormat->setInt32(kKeyBitRate, bitRate);
+            } else if (audio_def->eEncoding ==
+                    (OMX_AUDIO_CODINGTYPE)OMX_AUDIO_CodingAndroidAC3) {
+                mOutputFormat->setCString(
+                        kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_AC3);
+                int32_t numChannels, sampleRate, bitRate;
+                inputFormat->findInt32(kKeyChannelCount, &numChannels);
+                inputFormat->findInt32(kKeySampleRate, &sampleRate);
+                inputFormat->findInt32(kKeyBitRate, &bitRate);
+                mOutputFormat->setInt32(kKeyChannelCount, numChannels);
+                mOutputFormat->setInt32(kKeySampleRate, sampleRate);
+                mOutputFormat->setInt32(kKeyBitRate, bitRate);
             } else {
                 CHECK(!"Should not be here. Unknown audio encoding.");
             }
diff --git a/media/libstagefright/SkipCutBuffer.cpp b/media/libstagefright/SkipCutBuffer.cpp
index 773854f..e2e6d79 100644
--- a/media/libstagefright/SkipCutBuffer.cpp
+++ b/media/libstagefright/SkipCutBuffer.cpp
@@ -25,7 +25,7 @@
 namespace android {
 
 SkipCutBuffer::SkipCutBuffer(int32_t skip, int32_t cut) {
-    mFrontPadding = skip;
+    mFrontPadding = mSkip = skip;
     mBackPadding = cut;
     mWriteHead = 0;
     mReadHead = 0;
@@ -94,6 +94,7 @@
 
 void SkipCutBuffer::clear() {
     mWriteHead = mReadHead = 0;
+    mFrontPadding = mSkip;
 }
 
 void SkipCutBuffer::write(const char *src, size_t num) {
diff --git a/media/libstagefright/codecs/aacdec/SoftAAC2.cpp b/media/libstagefright/codecs/aacdec/SoftAAC2.cpp
index 1b20cbb..f842e27 100644
--- a/media/libstagefright/codecs/aacdec/SoftAAC2.cpp
+++ b/media/libstagefright/codecs/aacdec/SoftAAC2.cpp
@@ -58,6 +58,8 @@
       mIsADTS(false),
       mInputBufferCount(0),
       mSignalledError(false),
+      mSawInputEos(false),
+      mSignalledOutputEos(false),
       mAnchorTimeUs(0),
       mNumSamplesOutput(0),
       mOutputPortSettingsChange(NONE) {
@@ -350,115 +352,83 @@
         return;
     }
 
-    while (!inQueue.empty() && !outQueue.empty()) {
-        BufferInfo *inInfo = *inQueue.begin();
-        OMX_BUFFERHEADERTYPE *inHeader = inInfo->mHeader;
+    while ((!inQueue.empty() || (mSawInputEos && !mSignalledOutputEos)) && !outQueue.empty()) {
+        BufferInfo *inInfo = NULL;
+        OMX_BUFFERHEADERTYPE *inHeader = NULL;
+        if (!inQueue.empty()) {
+            inInfo = *inQueue.begin();
+            inHeader = inInfo->mHeader;
+        }
 
         BufferInfo *outInfo = *outQueue.begin();
         OMX_BUFFERHEADERTYPE *outHeader = outInfo->mHeader;
+        outHeader->nFlags = 0;
 
-        if (inHeader->nFlags & OMX_BUFFERFLAG_EOS) {
-            inQueue.erase(inQueue.begin());
-            inInfo->mOwnedByUs = false;
-            notifyEmptyBufferDone(inHeader);
+        if (inHeader) {
+            if (inHeader->nFlags & OMX_BUFFERFLAG_EOS) {
+                mSawInputEos = true;
+            }
 
-            if (mDecoderHasData) {
-                // flush out the decoder's delayed data by calling DecodeFrame
-                // one more time, with the AACDEC_FLUSH flag set
-                INT_PCM *outBuffer =
-                        reinterpret_cast<INT_PCM *>(
-                                outHeader->pBuffer + outHeader->nOffset);
+            if (inHeader->nOffset == 0 && inHeader->nFilledLen) {
+                mAnchorTimeUs = inHeader->nTimeStamp;
+                mNumSamplesOutput = 0;
+            }
 
-                AAC_DECODER_ERROR decoderErr =
-                    aacDecoder_DecodeFrame(mAACDecoder,
-                                           outBuffer,
-                                           outHeader->nAllocLen,
-                                           AACDEC_FLUSH);
-                mDecoderHasData = false;
+            if (mIsADTS) {
+                size_t adtsHeaderSize = 0;
+                // skip 30 bits, aac_frame_length follows.
+                // ssssssss ssssiiip ppffffPc ccohCCll llllllll lll?????
 
-                if (decoderErr != AAC_DEC_OK) {
+                const uint8_t *adtsHeader = inHeader->pBuffer + inHeader->nOffset;
+
+                bool signalError = false;
+                if (inHeader->nFilledLen < 7) {
+                    ALOGE("Audio data too short to contain even the ADTS header. "
+                          "Got %ld bytes.", inHeader->nFilledLen);
+                    hexdump(adtsHeader, inHeader->nFilledLen);
+                    signalError = true;
+                } else {
+                    bool protectionAbsent = (adtsHeader[1] & 1);
+
+                    unsigned aac_frame_length =
+                        ((adtsHeader[3] & 3) << 11)
+                        | (adtsHeader[4] << 3)
+                        | (adtsHeader[5] >> 5);
+
+                    if (inHeader->nFilledLen < aac_frame_length) {
+                        ALOGE("Not enough audio data for the complete frame. "
+                              "Got %ld bytes, frame size according to the ADTS "
+                              "header is %u bytes.",
+                              inHeader->nFilledLen, aac_frame_length);
+                        hexdump(adtsHeader, inHeader->nFilledLen);
+                        signalError = true;
+                    } else {
+                        adtsHeaderSize = (protectionAbsent ? 7 : 9);
+
+                        inBuffer[0] = (UCHAR *)adtsHeader + adtsHeaderSize;
+                        inBufferLength[0] = aac_frame_length - adtsHeaderSize;
+
+                        inHeader->nOffset += adtsHeaderSize;
+                        inHeader->nFilledLen -= adtsHeaderSize;
+                    }
+                }
+
+                if (signalError) {
                     mSignalledError = true;
 
-                    notify(OMX_EventError, OMX_ErrorUndefined, decoderErr,
+                    notify(OMX_EventError,
+                           OMX_ErrorStreamCorrupt,
+                           ERROR_MALFORMED,
                            NULL);
 
                     return;
                 }
-
-                outHeader->nFilledLen =
-                        mStreamInfo->frameSize
-                            * sizeof(int16_t)
-                            * mStreamInfo->numChannels;
             } else {
-                // we never submitted any data to the decoder, so there's nothing to flush out
-                outHeader->nFilledLen = 0;
-            }
-
-            outHeader->nFlags = OMX_BUFFERFLAG_EOS;
-
-            outQueue.erase(outQueue.begin());
-            outInfo->mOwnedByUs = false;
-            notifyFillBufferDone(outHeader);
-            return;
-        }
-
-        if (inHeader->nOffset == 0) {
-            mAnchorTimeUs = inHeader->nTimeStamp;
-            mNumSamplesOutput = 0;
-        }
-
-        size_t adtsHeaderSize = 0;
-        if (mIsADTS) {
-            // skip 30 bits, aac_frame_length follows.
-            // ssssssss ssssiiip ppffffPc ccohCCll llllllll lll?????
-
-            const uint8_t *adtsHeader = inHeader->pBuffer + inHeader->nOffset;
-
-            bool signalError = false;
-            if (inHeader->nFilledLen < 7) {
-                ALOGE("Audio data too short to contain even the ADTS header. "
-                      "Got %ld bytes.", inHeader->nFilledLen);
-                hexdump(adtsHeader, inHeader->nFilledLen);
-                signalError = true;
-            } else {
-                bool protectionAbsent = (adtsHeader[1] & 1);
-
-                unsigned aac_frame_length =
-                    ((adtsHeader[3] & 3) << 11)
-                    | (adtsHeader[4] << 3)
-                    | (adtsHeader[5] >> 5);
-
-                if (inHeader->nFilledLen < aac_frame_length) {
-                    ALOGE("Not enough audio data for the complete frame. "
-                          "Got %ld bytes, frame size according to the ADTS "
-                          "header is %u bytes.",
-                          inHeader->nFilledLen, aac_frame_length);
-                    hexdump(adtsHeader, inHeader->nFilledLen);
-                    signalError = true;
-                } else {
-                    adtsHeaderSize = (protectionAbsent ? 7 : 9);
-
-                    inBuffer[0] = (UCHAR *)adtsHeader + adtsHeaderSize;
-                    inBufferLength[0] = aac_frame_length - adtsHeaderSize;
-
-                    inHeader->nOffset += adtsHeaderSize;
-                    inHeader->nFilledLen -= adtsHeaderSize;
-                }
-            }
-
-            if (signalError) {
-                mSignalledError = true;
-
-                notify(OMX_EventError,
-                       OMX_ErrorStreamCorrupt,
-                       ERROR_MALFORMED,
-                       NULL);
-
-                return;
+                inBuffer[0] = inHeader->pBuffer + inHeader->nOffset;
+                inBufferLength[0] = inHeader->nFilledLen;
             }
         } else {
-            inBuffer[0] = inHeader->pBuffer + inHeader->nOffset;
-            inBufferLength[0] = inHeader->nFilledLen;
+            inBufferLength[0] = 0;
         }
 
         // Fill and decode
@@ -471,50 +441,66 @@
         int prevNumChannels = mStreamInfo->numChannels;
 
         AAC_DECODER_ERROR decoderErr = AAC_DEC_NOT_ENOUGH_BITS;
-        while (bytesValid[0] > 0 && decoderErr == AAC_DEC_NOT_ENOUGH_BITS) {
+        while ((bytesValid[0] > 0 || mSawInputEos) && decoderErr == AAC_DEC_NOT_ENOUGH_BITS) {
+            mDecoderHasData |= (bytesValid[0] > 0);
             aacDecoder_Fill(mAACDecoder,
                             inBuffer,
                             inBufferLength,
                             bytesValid);
-            mDecoderHasData = true;
 
             decoderErr = aacDecoder_DecodeFrame(mAACDecoder,
                                                 outBuffer,
                                                 outHeader->nAllocLen,
                                                 0 /* flags */);
-
             if (decoderErr == AAC_DEC_NOT_ENOUGH_BITS) {
-                ALOGW("Not enough bits, bytesValid %d", bytesValid[0]);
+                if (mSawInputEos && bytesValid[0] <= 0) {
+                    if (mDecoderHasData) {
+                        // flush out the decoder's delayed data by calling DecodeFrame
+                        // one more time, with the AACDEC_FLUSH flag set
+                        decoderErr = aacDecoder_DecodeFrame(mAACDecoder,
+                                                            outBuffer,
+                                                            outHeader->nAllocLen,
+                                                            AACDEC_FLUSH);
+                        mDecoderHasData = false;
+                    }
+                    outHeader->nFlags = OMX_BUFFERFLAG_EOS;
+                    mSignalledOutputEos = true;
+                    break;
+                } else {
+                    ALOGW("Not enough bits, bytesValid %d", bytesValid[0]);
+                }
             }
         }
 
         size_t numOutBytes =
             mStreamInfo->frameSize * sizeof(int16_t) * mStreamInfo->numChannels;
 
-        if (decoderErr == AAC_DEC_OK) {
-            UINT inBufferUsedLength = inBufferLength[0] - bytesValid[0];
-            inHeader->nFilledLen -= inBufferUsedLength;
-            inHeader->nOffset += inBufferUsedLength;
-        } else {
-            ALOGW("AAC decoder returned error %d, substituting silence",
-                  decoderErr);
+        if (inHeader) {
+            if (decoderErr == AAC_DEC_OK) {
+                UINT inBufferUsedLength = inBufferLength[0] - bytesValid[0];
+                inHeader->nFilledLen -= inBufferUsedLength;
+                inHeader->nOffset += inBufferUsedLength;
+            } else {
+                ALOGW("AAC decoder returned error %d, substituting silence",
+                      decoderErr);
 
-            memset(outHeader->pBuffer + outHeader->nOffset, 0, numOutBytes);
+                memset(outHeader->pBuffer + outHeader->nOffset, 0, numOutBytes);
 
-            // Discard input buffer.
-            inHeader->nFilledLen = 0;
+                // Discard input buffer.
+                inHeader->nFilledLen = 0;
 
-            aacDecoder_SetParam(mAACDecoder, AAC_TPDEC_CLEAR_BUFFER, 1);
+                aacDecoder_SetParam(mAACDecoder, AAC_TPDEC_CLEAR_BUFFER, 1);
 
-            // fall through
-        }
+                // fall through
+            }
 
-        if (inHeader->nFilledLen == 0) {
-            inInfo->mOwnedByUs = false;
-            inQueue.erase(inQueue.begin());
-            inInfo = NULL;
-            notifyEmptyBufferDone(inHeader);
-            inHeader = NULL;
+            if (inHeader->nFilledLen == 0) {
+                inInfo->mOwnedByUs = false;
+                inQueue.erase(inQueue.begin());
+                inInfo = NULL;
+                notifyEmptyBufferDone(inHeader);
+                inHeader = NULL;
+            }
         }
 
         /*
@@ -555,7 +541,6 @@
             // we've previously decoded valid data, in the latter case
             // (decode failed) we'll output a silent frame.
             outHeader->nFilledLen = numOutBytes;
-            outHeader->nFlags = 0;
 
             outHeader->nTimeStamp =
                 mAnchorTimeUs
@@ -582,6 +567,12 @@
         // depend on fragments from the last one decoded.
         // drain all existing data
         drainDecoder();
+        // force decoder loop to drop the first decoded buffer by resetting these state variables,
+        // but only if initialization has already happened.
+        if (mInputBufferCount != 0) {
+            mInputBufferCount = 1;
+            mStreamInfo->sampleRate = 0;
+        }
     }
 }
 
@@ -606,6 +597,8 @@
     mStreamInfo->sampleRate = 0;
 
     mSignalledError = false;
+    mSawInputEos = false;
+    mSignalledOutputEos = false;
     mOutputPortSettingsChange = NONE;
 }
 
diff --git a/media/libstagefright/codecs/aacdec/SoftAAC2.h b/media/libstagefright/codecs/aacdec/SoftAAC2.h
index 2d960ab..a7ea1e2 100644
--- a/media/libstagefright/codecs/aacdec/SoftAAC2.h
+++ b/media/libstagefright/codecs/aacdec/SoftAAC2.h
@@ -55,6 +55,8 @@
     bool mDecoderHasData;
     size_t mInputBufferCount;
     bool mSignalledError;
+    bool mSawInputEos;
+    bool mSignalledOutputEos;
     int64_t mAnchorTimeUs;
     int64_t mNumSamplesOutput;
 
diff --git a/media/libstagefright/codecs/mp3dec/SoftMP3.cpp b/media/libstagefright/codecs/mp3dec/SoftMP3.cpp
index 7c382fb..877e3cb 100644
--- a/media/libstagefright/codecs/mp3dec/SoftMP3.cpp
+++ b/media/libstagefright/codecs/mp3dec/SoftMP3.cpp
@@ -49,6 +49,8 @@
       mNumChannels(2),
       mSamplingRate(44100),
       mSignalledError(false),
+      mSawInputEos(false),
+      mSignalledOutputEos(false),
       mOutputPortSettingsChange(NONE) {
     initPorts();
     initDecoder();
@@ -194,48 +196,36 @@
     List<BufferInfo *> &inQueue = getPortQueue(0);
     List<BufferInfo *> &outQueue = getPortQueue(1);
 
-    while (!inQueue.empty() && !outQueue.empty()) {
-        BufferInfo *inInfo = *inQueue.begin();
-        OMX_BUFFERHEADERTYPE *inHeader = inInfo->mHeader;
+    while ((!inQueue.empty() || (mSawInputEos && !mSignalledOutputEos)) && !outQueue.empty()) {
+        BufferInfo *inInfo = NULL;
+        OMX_BUFFERHEADERTYPE *inHeader = NULL;
+        if (!inQueue.empty()) {
+            inInfo = *inQueue.begin();
+            inHeader = inInfo->mHeader;
+        }
 
         BufferInfo *outInfo = *outQueue.begin();
         OMX_BUFFERHEADERTYPE *outHeader = outInfo->mHeader;
+        outHeader->nFlags = 0;
 
-        if (inHeader->nFlags & OMX_BUFFERFLAG_EOS) {
-            inQueue.erase(inQueue.begin());
-            inInfo->mOwnedByUs = false;
-            notifyEmptyBufferDone(inHeader);
-
-            if (!mIsFirst) {
-                // pad the end of the stream with 529 samples, since that many samples
-                // were trimmed off the beginning when decoding started
-                outHeader->nFilledLen =
-                    kPVMP3DecoderDelay * mNumChannels * sizeof(int16_t);
-
-                memset(outHeader->pBuffer, 0, outHeader->nFilledLen);
-            } else {
-                // Since we never discarded frames from the start, we won't have
-                // to add any padding at the end either.
-                outHeader->nFilledLen = 0;
+        if (inHeader) {
+            if (inHeader->nOffset == 0 && inHeader->nFilledLen) {
+                mAnchorTimeUs = inHeader->nTimeStamp;
+                mNumFramesOutput = 0;
             }
 
-            outHeader->nFlags = OMX_BUFFERFLAG_EOS;
+            if (inHeader->nFlags & OMX_BUFFERFLAG_EOS) {
+                mSawInputEos = true;
+            }
 
-            outQueue.erase(outQueue.begin());
-            outInfo->mOwnedByUs = false;
-            notifyFillBufferDone(outHeader);
-            return;
+            mConfig->pInputBuffer =
+                inHeader->pBuffer + inHeader->nOffset;
+
+            mConfig->inputBufferCurrentLength = inHeader->nFilledLen;
+        } else {
+            mConfig->pInputBuffer = NULL;
+            mConfig->inputBufferCurrentLength = 0;
         }
-
-        if (inHeader->nOffset == 0) {
-            mAnchorTimeUs = inHeader->nTimeStamp;
-            mNumFramesOutput = 0;
-        }
-
-        mConfig->pInputBuffer =
-            inHeader->pBuffer + inHeader->nOffset;
-
-        mConfig->inputBufferCurrentLength = inHeader->nFilledLen;
         mConfig->inputBufferMaxLength = 0;
         mConfig->inputBufferUsedLength = 0;
 
@@ -262,13 +252,28 @@
                 mConfig->outputFrameSize = kOutputBufferSize / sizeof(int16_t);
             }
 
-            // This is recoverable, just ignore the current frame and
-            // play silence instead.
-            memset(outHeader->pBuffer,
-                   0,
-                   mConfig->outputFrameSize * sizeof(int16_t));
+            if (decoderErr == NO_ENOUGH_MAIN_DATA_ERROR && mSawInputEos) {
+                if (!mIsFirst) {
+                    // pad the end of the stream with 529 samples, since that many samples
+                    // were trimmed off the beginning when decoding started
+                    outHeader->nOffset = 0;
+                    outHeader->nFilledLen = kPVMP3DecoderDelay * mNumChannels * sizeof(int16_t);
 
-            mConfig->inputBufferUsedLength = inHeader->nFilledLen;
+                    memset(outHeader->pBuffer, 0, outHeader->nFilledLen);
+                }
+                outHeader->nFlags = OMX_BUFFERFLAG_EOS;
+                mSignalledOutputEos = true;
+            } else {
+                // This is recoverable, just ignore the current frame and
+                // play silence instead.
+                memset(outHeader->pBuffer,
+                       0,
+                       mConfig->outputFrameSize * sizeof(int16_t));
+
+                if (inHeader) {
+                    mConfig->inputBufferUsedLength = inHeader->nFilledLen;
+                }
+            }
         } else if (mConfig->samplingRate != mSamplingRate
                 || mConfig->num_channels != mNumChannels) {
             mSamplingRate = mConfig->samplingRate;
@@ -289,7 +294,7 @@
 
             outHeader->nFilledLen =
                 mConfig->outputFrameSize * sizeof(int16_t) - outHeader->nOffset;
-        } else {
+        } else if (!mSignalledOutputEos) {
             outHeader->nOffset = 0;
             outHeader->nFilledLen = mConfig->outputFrameSize * sizeof(int16_t);
         }
@@ -298,23 +303,24 @@
             mAnchorTimeUs
                 + (mNumFramesOutput * 1000000ll) / mConfig->samplingRate;
 
-        outHeader->nFlags = 0;
+        if (inHeader) {
+            CHECK_GE(inHeader->nFilledLen, mConfig->inputBufferUsedLength);
 
-        CHECK_GE(inHeader->nFilledLen, mConfig->inputBufferUsedLength);
+            inHeader->nOffset += mConfig->inputBufferUsedLength;
+            inHeader->nFilledLen -= mConfig->inputBufferUsedLength;
 
-        inHeader->nOffset += mConfig->inputBufferUsedLength;
-        inHeader->nFilledLen -= mConfig->inputBufferUsedLength;
+
+            if (inHeader->nFilledLen == 0) {
+                inInfo->mOwnedByUs = false;
+                inQueue.erase(inQueue.begin());
+                inInfo = NULL;
+                notifyEmptyBufferDone(inHeader);
+                inHeader = NULL;
+            }
+        }
 
         mNumFramesOutput += mConfig->outputFrameSize / mNumChannels;
 
-        if (inHeader->nFilledLen == 0) {
-            inInfo->mOwnedByUs = false;
-            inQueue.erase(inQueue.begin());
-            inInfo = NULL;
-            notifyEmptyBufferDone(inHeader);
-            inHeader = NULL;
-        }
-
         outInfo->mOwnedByUs = false;
         outQueue.erase(outQueue.begin());
         outInfo = NULL;
@@ -362,6 +368,8 @@
     pvmp3_InitDecoder(mConfig, mDecoderBuf);
     mIsFirst = true;
     mSignalledError = false;
+    mSawInputEos = false;
+    mSignalledOutputEos = false;
     mOutputPortSettingsChange = NONE;
 }
 
diff --git a/media/libstagefright/codecs/mp3dec/SoftMP3.h b/media/libstagefright/codecs/mp3dec/SoftMP3.h
index 4af91ea..f9e7b53 100644
--- a/media/libstagefright/codecs/mp3dec/SoftMP3.h
+++ b/media/libstagefright/codecs/mp3dec/SoftMP3.h
@@ -61,6 +61,8 @@
 
     bool mIsFirst;
     bool mSignalledError;
+    bool mSawInputEos;
+    bool mSignalledOutputEos;
 
     enum {
         NONE,
diff --git a/media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp b/media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp
index 51bb958..515e4d3 100644
--- a/media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp
+++ b/media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp
@@ -54,6 +54,8 @@
       mAnchorTimeUs(0),
       mNumFramesOutput(0),
       mNumFramesLeftOnPage(-1),
+      mSawInputEos(false),
+      mSignalledOutputEos(false),
       mOutputPortSettingsChange(NONE) {
     initPorts();
     CHECK_EQ(initDecoder(), (status_t)OK);
@@ -290,48 +292,47 @@
         return;
     }
 
-    while (!inQueue.empty() && !outQueue.empty()) {
-        BufferInfo *inInfo = *inQueue.begin();
-        OMX_BUFFERHEADERTYPE *inHeader = inInfo->mHeader;
+    while ((!inQueue.empty() || (mSawInputEos && !mSignalledOutputEos)) && !outQueue.empty()) {
+        BufferInfo *inInfo = NULL;
+        OMX_BUFFERHEADERTYPE *inHeader = NULL;
+        if (!inQueue.empty()) {
+            inInfo = *inQueue.begin();
+            inHeader = inInfo->mHeader;
+        }
 
         BufferInfo *outInfo = *outQueue.begin();
         OMX_BUFFERHEADERTYPE *outHeader = outInfo->mHeader;
 
-        if (inHeader->nFlags & OMX_BUFFERFLAG_EOS) {
-            inQueue.erase(inQueue.begin());
-            inInfo->mOwnedByUs = false;
-            notifyEmptyBufferDone(inHeader);
+        int32_t numPageSamples = 0;
 
-            outHeader->nFilledLen = 0;
-            outHeader->nFlags = OMX_BUFFERFLAG_EOS;
+        if (inHeader) {
+            if (inHeader->nFlags & OMX_BUFFERFLAG_EOS) {
+                mSawInputEos = true;
+            }
 
-            outQueue.erase(outQueue.begin());
-            outInfo->mOwnedByUs = false;
-            notifyFillBufferDone(outHeader);
-            return;
+            if (inHeader->nFilledLen || !mSawInputEos) {
+                CHECK_GE(inHeader->nFilledLen, sizeof(numPageSamples));
+                memcpy(&numPageSamples,
+                       inHeader->pBuffer
+                        + inHeader->nOffset + inHeader->nFilledLen - 4,
+                       sizeof(numPageSamples));
+
+                if (inHeader->nOffset == 0) {
+                    mAnchorTimeUs = inHeader->nTimeStamp;
+                    mNumFramesOutput = 0;
+                }
+
+                inHeader->nFilledLen -= sizeof(numPageSamples);;
+            }
         }
 
-        int32_t numPageSamples;
-        CHECK_GE(inHeader->nFilledLen, sizeof(numPageSamples));
-        memcpy(&numPageSamples,
-               inHeader->pBuffer
-                + inHeader->nOffset + inHeader->nFilledLen - 4,
-               sizeof(numPageSamples));
-
         if (numPageSamples >= 0) {
             mNumFramesLeftOnPage = numPageSamples;
         }
 
-        if (inHeader->nOffset == 0) {
-            mAnchorTimeUs = inHeader->nTimeStamp;
-            mNumFramesOutput = 0;
-        }
-
-        inHeader->nFilledLen -= sizeof(numPageSamples);;
-
         ogg_buffer buf;
-        buf.data = inHeader->pBuffer + inHeader->nOffset;
-        buf.size = inHeader->nFilledLen;
+        buf.data = inHeader ? inHeader->pBuffer + inHeader->nOffset : NULL;
+        buf.size = inHeader ? inHeader->nFilledLen : 0;
         buf.refcount = 1;
         buf.ptr.owner = NULL;
 
@@ -351,6 +352,7 @@
 
         int numFrames = 0;
 
+        outHeader->nFlags = 0;
         int err = vorbis_dsp_synthesis(mState, &pack, 1);
         if (err != 0) {
             ALOGW("vorbis_dsp_synthesis returned %d", err);
@@ -370,13 +372,16 @@
                 ALOGV("discarding %d frames at end of page",
                      numFrames - mNumFramesLeftOnPage);
                 numFrames = mNumFramesLeftOnPage;
+                if (mSawInputEos) {
+                    outHeader->nFlags = OMX_BUFFERFLAG_EOS;
+                    mSignalledOutputEos = true;
+                }
             }
             mNumFramesLeftOnPage -= numFrames;
         }
 
         outHeader->nFilledLen = numFrames * sizeof(int16_t) * mVi->channels;
         outHeader->nOffset = 0;
-        outHeader->nFlags = 0;
 
         outHeader->nTimeStamp =
             mAnchorTimeUs
@@ -384,11 +389,13 @@
 
         mNumFramesOutput += numFrames;
 
-        inInfo->mOwnedByUs = false;
-        inQueue.erase(inQueue.begin());
-        inInfo = NULL;
-        notifyEmptyBufferDone(inHeader);
-        inHeader = NULL;
+        if (inHeader) {
+            inInfo->mOwnedByUs = false;
+            inQueue.erase(inQueue.begin());
+            inInfo = NULL;
+            notifyEmptyBufferDone(inHeader);
+            inHeader = NULL;
+        }
 
         outInfo->mOwnedByUs = false;
         outQueue.erase(outQueue.begin());
@@ -425,6 +432,8 @@
         mVi = NULL;
     }
 
+    mSawInputEos = false;
+    mSignalledOutputEos = false;
     mOutputPortSettingsChange = NONE;
 }
 
diff --git a/media/libstagefright/codecs/vorbis/dec/SoftVorbis.h b/media/libstagefright/codecs/vorbis/dec/SoftVorbis.h
index cb628a0..1d00816 100644
--- a/media/libstagefright/codecs/vorbis/dec/SoftVorbis.h
+++ b/media/libstagefright/codecs/vorbis/dec/SoftVorbis.h
@@ -59,6 +59,8 @@
     int64_t mAnchorTimeUs;
     int64_t mNumFramesOutput;
     int32_t mNumFramesLeftOnPage;
+    bool mSawInputEos;
+    bool mSignalledOutputEos;
 
     enum {
         NONE,
diff --git a/media/libstagefright/httplive/LiveSession.cpp b/media/libstagefright/httplive/LiveSession.cpp
index bd12ddc..233db44 100644
--- a/media/libstagefright/httplive/LiveSession.cpp
+++ b/media/libstagefright/httplive/LiveSession.cpp
@@ -632,9 +632,6 @@
         // playlist unchanged
         *unchanged = true;
 
-        ALOGV("Playlist unchanged, refresh state is now %d",
-             (int)mRefreshState);
-
         return NULL;
     }
 
diff --git a/media/libstagefright/mpeg2ts/ATSParser.cpp b/media/libstagefright/mpeg2ts/ATSParser.cpp
index 175a263..cb57a2f 100644
--- a/media/libstagefright/mpeg2ts/ATSParser.cpp
+++ b/media/libstagefright/mpeg2ts/ATSParser.cpp
@@ -506,6 +506,11 @@
                     ElementaryStreamQueue::PCM_AUDIO);
             break;
 
+        case STREAMTYPE_AC3:
+            mQueue = new ElementaryStreamQueue(
+                    ElementaryStreamQueue::AC3);
+            break;
+
         default:
             break;
     }
@@ -614,6 +619,7 @@
         case STREAMTYPE_MPEG2_AUDIO:
         case STREAMTYPE_MPEG2_AUDIO_ADTS:
         case STREAMTYPE_PCM_AUDIO:
+        case STREAMTYPE_AC3:
             return true;
 
         default:
diff --git a/media/libstagefright/mpeg2ts/ATSParser.h b/media/libstagefright/mpeg2ts/ATSParser.h
index a10edc9..d4e30b4 100644
--- a/media/libstagefright/mpeg2ts/ATSParser.h
+++ b/media/libstagefright/mpeg2ts/ATSParser.h
@@ -88,6 +88,10 @@
         STREAMTYPE_MPEG2_AUDIO_ADTS     = 0x0f,
         STREAMTYPE_MPEG4_VIDEO          = 0x10,
         STREAMTYPE_H264                 = 0x1b,
+
+        // From ATSC A/53 Part 3:2009, 6.7.1
+        STREAMTYPE_AC3                  = 0x81,
+
         STREAMTYPE_PCM_AUDIO            = 0x83,
     };
 
diff --git a/media/libstagefright/mpeg2ts/ESQueue.cpp b/media/libstagefright/mpeg2ts/ESQueue.cpp
index 8f9c9c8..ea79885 100644
--- a/media/libstagefright/mpeg2ts/ESQueue.cpp
+++ b/media/libstagefright/mpeg2ts/ESQueue.cpp
@@ -56,6 +56,122 @@
     }
 }
 
+// Parse AC3 header assuming the current ptr is start position of syncframe,
+// update metadata only applicable, and return the payload size
+static unsigned parseAC3SyncFrame(
+        const uint8_t *ptr, size_t size, sp<MetaData> *metaData) {
+    static const unsigned channelCountTable[] = {2, 1, 2, 3, 4, 4, 5, 6};
+    static const unsigned samplingRateTable[] = {48000, 44100, 32000};
+    static const unsigned rates[] = {32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256,
+            320, 384, 448, 512, 576, 640};
+
+    static const unsigned frameSizeTable[19][3] = {
+        { 64, 69, 96 },
+        { 80, 87, 120 },
+        { 96, 104, 144 },
+        { 112, 121, 168 },
+        { 128, 139, 192 },
+        { 160, 174, 240 },
+        { 192, 208, 288 },
+        { 224, 243, 336 },
+        { 256, 278, 384 },
+        { 320, 348, 480 },
+        { 384, 417, 576 },
+        { 448, 487, 672 },
+        { 512, 557, 768 },
+        { 640, 696, 960 },
+        { 768, 835, 1152 },
+        { 896, 975, 1344 },
+        { 1024, 1114, 1536 },
+        { 1152, 1253, 1728 },
+        { 1280, 1393, 1920 },
+    };
+
+    ABitReader bits(ptr, size);
+    unsigned syncStartPos = 0;  // in bytes
+    if (bits.numBitsLeft() < 16) {
+        return 0;
+    }
+    if (bits.getBits(16) != 0x0B77) {
+        return 0;
+    }
+
+    if (bits.numBitsLeft() < 16 + 2 + 6 + 5 + 3 + 3) {
+        ALOGV("Not enough bits left for further parsing");
+        return 0;
+    }
+    bits.skipBits(16);  // crc1
+
+    unsigned fscod = bits.getBits(2);
+    if (fscod == 3) {
+        ALOGW("Incorrect fscod in AC3 header");
+        return 0;
+    }
+
+    unsigned frmsizecod = bits.getBits(6);
+    if (frmsizecod > 37) {
+        ALOGW("Incorrect frmsizecod in AC3 header");
+        return 0;
+    }
+
+    unsigned bsid = bits.getBits(5);
+    if (bsid > 8) {
+        ALOGW("Incorrect bsid in AC3 header. Possibly E-AC-3?");
+        return 0;
+    }
+
+    unsigned bsmod = bits.getBits(3);
+    unsigned acmod = bits.getBits(3);
+    unsigned cmixlev = 0;
+    unsigned surmixlev = 0;
+    unsigned dsurmod = 0;
+
+    if ((acmod & 1) > 0 && acmod != 1) {
+        if (bits.numBitsLeft() < 2) {
+            return 0;
+        }
+        cmixlev = bits.getBits(2);
+    }
+    if ((acmod & 4) > 0) {
+        if (bits.numBitsLeft() < 2) {
+            return 0;
+        }
+        surmixlev = bits.getBits(2);
+    }
+    if (acmod == 2) {
+        if (bits.numBitsLeft() < 2) {
+            return 0;
+        }
+        dsurmod = bits.getBits(2);
+    }
+
+    if (bits.numBitsLeft() < 1) {
+        return 0;
+    }
+    unsigned lfeon = bits.getBits(1);
+
+    unsigned samplingRate = samplingRateTable[fscod];
+    unsigned payloadSize = frameSizeTable[frmsizecod >> 1][fscod];
+    if (fscod == 1) {
+        payloadSize += frmsizecod & 1;
+    }
+    payloadSize <<= 1;  // convert from 16-bit words to bytes
+
+    unsigned channelCount = channelCountTable[acmod] + lfeon;
+
+    if (metaData != NULL) {
+        (*metaData)->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_AC3);
+        (*metaData)->setInt32(kKeyChannelCount, channelCount);
+        (*metaData)->setInt32(kKeySampleRate, samplingRate);
+    }
+
+    return payloadSize;
+}
+
+static bool IsSeeminglyValidAC3Header(const uint8_t *ptr, size_t size) {
+    return parseAC3SyncFrame(ptr, size, NULL) > 0;
+}
+
 static bool IsSeeminglyValidADTSHeader(const uint8_t *ptr, size_t size) {
     if (size < 3) {
         // Not enough data to verify header.
@@ -224,6 +340,33 @@
                 break;
             }
 
+            case AC3:
+            {
+                uint8_t *ptr = (uint8_t *)data;
+
+                ssize_t startOffset = -1;
+                for (size_t i = 0; i < size; ++i) {
+                    if (IsSeeminglyValidAC3Header(&ptr[i], size - i)) {
+                        startOffset = i;
+                        break;
+                    }
+                }
+
+                if (startOffset < 0) {
+                    return ERROR_MALFORMED;
+                }
+
+                if (startOffset > 0) {
+                    ALOGI("found something resembling an AC3 syncword at "
+                          "offset %d",
+                          startOffset);
+                }
+
+                data = &ptr[startOffset];
+                size -= startOffset;
+                break;
+            }
+
             case MPEG_AUDIO:
             {
                 uint8_t *ptr = (uint8_t *)data;
@@ -328,6 +471,8 @@
             return dequeueAccessUnitH264();
         case AAC:
             return dequeueAccessUnitAAC();
+        case AC3:
+            return dequeueAccessUnitAC3();
         case MPEG_VIDEO:
             return dequeueAccessUnitMPEGVideo();
         case MPEG4_VIDEO:
@@ -340,6 +485,51 @@
     }
 }
 
+sp<ABuffer> ElementaryStreamQueue::dequeueAccessUnitAC3() {
+    unsigned syncStartPos = 0;  // in bytes
+    unsigned payloadSize = 0;
+    sp<MetaData> format = new MetaData;
+    while (true) {
+        if (syncStartPos + 2 >= mBuffer->size()) {
+            return NULL;
+        }
+
+        payloadSize = parseAC3SyncFrame(
+                mBuffer->data() + syncStartPos,
+                mBuffer->size() - syncStartPos,
+                &format);
+        if (payloadSize > 0) {
+            break;
+        }
+        ++syncStartPos;
+    }
+
+    if (mBuffer->size() < syncStartPos + payloadSize) {
+        ALOGV("Not enough buffer size for AC3");
+        return NULL;
+    }
+
+    if (mFormat == NULL) {
+        mFormat = format;
+    }
+
+    sp<ABuffer> accessUnit = new ABuffer(syncStartPos + payloadSize);
+    memcpy(accessUnit->data(), mBuffer->data(), syncStartPos + payloadSize);
+
+    int64_t timeUs = fetchTimestamp(syncStartPos + payloadSize);
+    CHECK_GE(timeUs, 0ll);
+    accessUnit->meta()->setInt64("timeUs", timeUs);
+
+    memmove(
+            mBuffer->data(),
+            mBuffer->data() + syncStartPos + payloadSize,
+            mBuffer->size() - syncStartPos - payloadSize);
+
+    mBuffer->setRange(0, mBuffer->size() - syncStartPos - payloadSize);
+
+    return accessUnit;
+}
+
 sp<ABuffer> ElementaryStreamQueue::dequeueAccessUnitPCMAudio() {
     if (mBuffer->size() < 4) {
         return NULL;
diff --git a/media/libstagefright/mpeg2ts/ESQueue.h b/media/libstagefright/mpeg2ts/ESQueue.h
index 66a8087..a2cca77 100644
--- a/media/libstagefright/mpeg2ts/ESQueue.h
+++ b/media/libstagefright/mpeg2ts/ESQueue.h
@@ -32,6 +32,7 @@
     enum Mode {
         H264,
         AAC,
+        AC3,
         MPEG_AUDIO,
         MPEG_VIDEO,
         MPEG4_VIDEO,
@@ -67,6 +68,7 @@
 
     sp<ABuffer> dequeueAccessUnitH264();
     sp<ABuffer> dequeueAccessUnitAAC();
+    sp<ABuffer> dequeueAccessUnitAC3();
     sp<ABuffer> dequeueAccessUnitMPEGAudio();
     sp<ABuffer> dequeueAccessUnitMPEGVideo();
     sp<ABuffer> dequeueAccessUnitMPEG4Video();
diff --git a/media/libstagefright/timedtext/test/Android.mk b/media/libstagefright/timedtext/test/Android.mk
index a5e7ba2..9a9fde2 100644
--- a/media/libstagefright/timedtext/test/Android.mk
+++ b/media/libstagefright/timedtext/test/Android.mk
@@ -2,7 +2,6 @@
 
 # ================================================================
 # Unit tests for libstagefright_timedtext
-# See also /development/testrunner/test_defs.xml
 # ================================================================
 
 # ================================================================
@@ -18,10 +17,13 @@
 
 LOCAL_C_INCLUDES := \
     $(TOP)/external/expat/lib \
-    $(TOP)/frameworks/base/media/libstagefright/timedtext
+    $(TOP)/frameworks/av/media/libstagefright/timedtext
 
 LOCAL_SHARED_LIBRARIES := \
+    libbinder \
     libexpat \
-    libstagefright
+    libstagefright \
+    libstagefright_foundation \
+    libutils
 
 include $(BUILD_NATIVE_TEST)
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 3132e54..5cf6ef3 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -162,12 +162,15 @@
         (void) property_get("af.tee", value, "0");
         teeEnabled = atoi(value);
     }
-    if (teeEnabled & 1)
+    if (teeEnabled & 1) {
         mTeeSinkInputEnabled = true;
-    if (teeEnabled & 2)
+    }
+    if (teeEnabled & 2) {
         mTeeSinkOutputEnabled = true;
-    if (teeEnabled & 4)
+    }
+    if (teeEnabled & 4) {
         mTeeSinkTrackEnabled = true;
+    }
 #endif
 }
 
@@ -473,6 +476,12 @@
         goto Exit;
     }
 
+    if (sharedBuffer != 0 && sharedBuffer->pointer() == NULL) {
+        ALOGE("createTrack() sharedBuffer is non-0 but has NULL pointer()");
+        lStatus = BAD_VALUE;
+        goto Exit;
+    }
+
     {
         Mutex::Autolock _l(mLock);
         PlaybackThread *thread = checkPlaybackThread_l(output);
@@ -513,10 +522,12 @@
 
         track = thread->createTrack_l(client, streamType, sampleRate, format,
                 channelMask, frameCount, sharedBuffer, lSessionId, flags, tid, clientUid, &lStatus);
+        // we don't abort yet if lStatus != NO_ERROR; there is still work to be done regardless
 
         // move effect chain to this output thread if an effect on same session was waiting
         // for a track to be created
         if (lStatus == NO_ERROR && effectThread != NULL) {
+            // no risk of deadlock because AudioFlinger::mLock is held
             Mutex::Autolock _dl(thread->mLock);
             Mutex::Autolock _sl(effectThread->mLock);
             moveEffectChain_l(lSessionId, effectThread, thread, true);
@@ -536,7 +547,9 @@
                 }
             }
         }
+
     }
+
     if (lStatus == NO_ERROR) {
         // s for server's pid, n for normal mixer name, f for fast index
         name = String8::format("s:%d;n:%d;f:%d", getpid_cached, track->name() - AudioMixer::TRACK0,
@@ -550,9 +563,7 @@
     }
 
 Exit:
-    if (status != NULL) {
-        *status = lStatus;
-    }
+    *status = lStatus;
     return trackHandle;
 }
 
@@ -1293,6 +1304,7 @@
                                                   flags, tid, &lStatus);
         LOG_ALWAYS_FATAL_IF((recordTrack != 0) != (lStatus == NO_ERROR));
     }
+
     if (lStatus != NO_ERROR) {
         // remove local strong reference to Client before deleting the RecordTrack so that the
         // Client destructor is called by the TrackBase destructor with mLock held
@@ -1301,14 +1313,11 @@
         goto Exit;
     }
 
-    // return to handle to client
+    // return handle to client
     recordHandle = new RecordHandle(recordTrack);
-    lStatus = NO_ERROR;
 
 Exit:
-    if (status) {
-        *status = lStatus;
-    }
+    *status = lStatus;
     return recordHandle;
 }
 
@@ -1449,18 +1458,15 @@
                                            audio_output_flags_t flags,
                                            const audio_offload_info_t *offloadInfo)
 {
-    PlaybackThread *thread = NULL;
     struct audio_config config;
+    memset(&config, 0, sizeof(config));
     config.sample_rate = (pSamplingRate != NULL) ? *pSamplingRate : 0;
     config.channel_mask = (pChannelMask != NULL) ? *pChannelMask : 0;
     config.format = (pFormat != NULL) ? *pFormat : AUDIO_FORMAT_DEFAULT;
-    if (offloadInfo) {
+    if (offloadInfo != NULL) {
         config.offload_info = *offloadInfo;
     }
 
-    audio_stream_out_t *outStream = NULL;
-    AudioHwDevice *outHwDev;
-
     ALOGV("openOutput(), module %d Device %x, SamplingRate %d, Format %#08x, Channels %x, flags %x",
               module,
               (pDevices != NULL) ? *pDevices : 0,
@@ -1469,7 +1475,7 @@
               config.channel_mask,
               flags);
     ALOGV("openOutput(), offloadInfo %p version 0x%04x",
-          offloadInfo, offloadInfo == NULL ? -1 : offloadInfo->version );
+          offloadInfo, offloadInfo == NULL ? -1 : offloadInfo->version);
 
     if (pDevices == NULL || *pDevices == 0) {
         return 0;
@@ -1477,15 +1483,17 @@
 
     Mutex::Autolock _l(mLock);
 
-    outHwDev = findSuitableHwDev_l(module, *pDevices);
-    if (outHwDev == NULL)
+    AudioHwDevice *outHwDev = findSuitableHwDev_l(module, *pDevices);
+    if (outHwDev == NULL) {
         return 0;
+    }
 
     audio_hw_device_t *hwDevHal = outHwDev->hwDevice();
     audio_io_handle_t id = nextUniqueId();
 
     mHardwareStatus = AUDIO_HW_OUTPUT_OPEN;
 
+    audio_stream_out_t *outStream = NULL;
     status_t status = hwDevHal->open_output_stream(hwDevHal,
                                           id,
                                           *pDevices,
@@ -1505,6 +1513,7 @@
     if (status == NO_ERROR && outStream != NULL) {
         AudioStreamOut *output = new AudioStreamOut(outHwDev, outStream, flags);
 
+        PlaybackThread *thread;
         if (flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) {
             thread = new OffloadThread(this, output, id, *pDevices);
             ALOGV("openOutput() created offload output: ID %d thread %p", id, thread);
@@ -1672,18 +1681,15 @@
                                           audio_format_t *pFormat,
                                           audio_channel_mask_t *pChannelMask)
 {
-    status_t status;
-    RecordThread *thread = NULL;
     struct audio_config config;
+    memset(&config, 0, sizeof(config));
     config.sample_rate = (pSamplingRate != NULL) ? *pSamplingRate : 0;
     config.channel_mask = (pChannelMask != NULL) ? *pChannelMask : 0;
     config.format = (pFormat != NULL) ? *pFormat : AUDIO_FORMAT_DEFAULT;
 
     uint32_t reqSamplingRate = config.sample_rate;
     audio_format_t reqFormat = config.format;
-    audio_channel_mask_t reqChannels = config.channel_mask;
-    audio_stream_in_t *inStream = NULL;
-    AudioHwDevice *inHwDev;
+    audio_channel_mask_t reqChannelMask = config.channel_mask;
 
     if (pDevices == NULL || *pDevices == 0) {
         return 0;
@@ -1691,14 +1697,16 @@
 
     Mutex::Autolock _l(mLock);
 
-    inHwDev = findSuitableHwDev_l(module, *pDevices);
-    if (inHwDev == NULL)
+    AudioHwDevice *inHwDev = findSuitableHwDev_l(module, *pDevices);
+    if (inHwDev == NULL) {
         return 0;
+    }
 
     audio_hw_device_t *inHwHal = inHwDev->hwDevice();
     audio_io_handle_t id = nextUniqueId();
 
-    status = inHwHal->open_input_stream(inHwHal, id, *pDevices, &config,
+    audio_stream_in_t *inStream = NULL;
+    status_t status = inHwHal->open_input_stream(inHwHal, id, *pDevices, &config,
                                         &inStream);
     ALOGV("openInput() openInputStream returned input %p, SamplingRate %d, Format %d, Channels %x, "
             "status %d",
@@ -1714,10 +1722,12 @@
     if (status == BAD_VALUE &&
         reqFormat == config.format && config.format == AUDIO_FORMAT_PCM_16_BIT &&
         (config.sample_rate <= 2 * reqSamplingRate) &&
-        (popcount(config.channel_mask) <= FCC_2) && (popcount(reqChannels) <= FCC_2)) {
+        (popcount(config.channel_mask) <= FCC_2) && (popcount(reqChannelMask) <= FCC_2)) {
+        // FIXME describe the change proposed by HAL (save old values so we can log them here)
         ALOGV("openInput() reopening with proposed sampling rate and channel mask");
         inStream = NULL;
         status = inHwHal->open_input_stream(inHwHal, id, *pDevices, &config, &inStream);
+        // FIXME log this new status; HAL should not propose any further changes
     }
 
     if (status == NO_ERROR && inStream != NULL) {
@@ -1776,10 +1786,10 @@
         // Start record thread
         // RecordThread requires both input and output device indication to forward to audio
         // pre processing modules
-        thread = new RecordThread(this,
+        RecordThread *thread = new RecordThread(this,
                                   input,
                                   reqSamplingRate,
-                                  reqChannels,
+                                  reqChannelMask,
                                   id,
                                   primaryOutputDevice_l(),
                                   *pDevices
@@ -1796,7 +1806,7 @@
             *pFormat = config.format;
         }
         if (pChannelMask != NULL) {
-            *pChannelMask = reqChannels;
+            *pChannelMask = reqChannelMask;
         }
 
         // notify client processes of the new input creation
@@ -1954,7 +1964,7 @@
             }
         }
         if (!found) {
-            Mutex::Autolock _l (t->mLock);
+            Mutex::Autolock _l(t->mLock);
             // remove all effects from the chain
             while (ec->mEffects.size()) {
                 sp<EffectModule> effect = ec->mEffects[0];
@@ -2249,9 +2259,7 @@
     }
 
 Exit:
-    if (status != NULL) {
-        *status = lStatus;
-    }
+    *status = lStatus;
     return handle;
 }
 
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index 53e238e..9137040 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -110,7 +110,7 @@
                                 int *sessionId,
                                 String8& name,
                                 int clientUid,
-                                status_t *status);
+                                status_t *status /*non-NULL*/);
 
     virtual sp<IAudioRecord> openRecord(
                                 audio_io_handle_t input,
@@ -121,7 +121,7 @@
                                 IAudioFlinger::track_flags_t *flags,
                                 pid_t tid,
                                 int *sessionId,
-                                status_t *status);
+                                status_t *status /*non-NULL*/);
 
     virtual     uint32_t    sampleRate(audio_io_handle_t output) const;
     virtual     int         channelCount(audio_io_handle_t output) const;
@@ -210,7 +210,7 @@
                         int32_t priority,
                         audio_io_handle_t io,
                         int sessionId,
-                        status_t *status,
+                        status_t *status /*non-NULL*/,
                         int *id,
                         int *enabled);
 
@@ -499,7 +499,7 @@
     private:
         const char * const mModuleName;
         audio_hw_device_t * const mHwDevice;
-        Flags mFlags;
+        const Flags mFlags;
     };
 
     // AudioStreamOut and AudioStreamIn are immutable, so their fields are const.
@@ -509,7 +509,7 @@
     struct AudioStreamOut {
         AudioHwDevice* const audioHwDev;
         audio_stream_out_t* const stream;
-        audio_output_flags_t flags;
+        const audio_output_flags_t flags;
 
         audio_hw_device_t* hwDev() const { return audioHwDev->hwDevice(); }
 
diff --git a/services/audioflinger/AudioMixer.cpp b/services/audioflinger/AudioMixer.cpp
index df4e029..8bea752 100644
--- a/services/audioflinger/AudioMixer.cpp
+++ b/services/audioflinger/AudioMixer.cpp
@@ -58,7 +58,7 @@
 status_t AudioMixer::DownmixerBufferProvider::getNextBuffer(AudioBufferProvider::Buffer *pBuffer,
         int64_t pts) {
     //ALOGV("DownmixerBufferProvider::getNextBuffer()");
-    if (this->mTrackBufferProvider != NULL) {
+    if (mTrackBufferProvider != NULL) {
         status_t res = mTrackBufferProvider->getNextBuffer(pBuffer, pts);
         if (res == OK) {
             mDownmixConfig.inputCfg.buffer.frameCount = pBuffer->frameCount;
@@ -81,7 +81,7 @@
 
 void AudioMixer::DownmixerBufferProvider::releaseBuffer(AudioBufferProvider::Buffer *pBuffer) {
     //ALOGV("DownmixerBufferProvider::releaseBuffer()");
-    if (this->mTrackBufferProvider != NULL) {
+    if (mTrackBufferProvider != NULL) {
         mTrackBufferProvider->releaseBuffer(pBuffer);
     } else {
         ALOGE("DownmixerBufferProvider::releaseBuffer() error: NULL track buffer provider");
@@ -90,9 +90,9 @@
 
 
 // ----------------------------------------------------------------------------
-bool AudioMixer::isMultichannelCapable = false;
+bool AudioMixer::sIsMultichannelCapable = false;
 
-effect_descriptor_t AudioMixer::dwnmFxDesc;
+effect_descriptor_t AudioMixer::sDwnmFxDesc;
 
 // Ensure mConfiguredNames bitmask is initialized properly on all architectures.
 // The value of 1 << x is undefined in C when x >= 32.
@@ -113,8 +113,6 @@
     // AudioMixer is not yet capable of multi-channel output beyond stereo
     ALOG_ASSERT(2 == MAX_NUM_CHANNELS, "bad MAX_NUM_CHANNELS %d", MAX_NUM_CHANNELS);
 
-    LocalClock lc;
-
     pthread_once(&sOnceControl, &sInitRoutine);
 
     mState.enabledTracks= 0;
@@ -136,27 +134,6 @@
         t++;
     }
 
-    // find multichannel downmix effect if we have to play multichannel content
-    uint32_t numEffects = 0;
-    int ret = EffectQueryNumberEffects(&numEffects);
-    if (ret != 0) {
-        ALOGE("AudioMixer() error %d querying number of effects", ret);
-        return;
-    }
-    ALOGV("EffectQueryNumberEffects() numEffects=%d", numEffects);
-
-    for (uint32_t i = 0 ; i < numEffects ; i++) {
-        if (EffectQueryEffect(i, &dwnmFxDesc) == 0) {
-            ALOGV("effect %d is called %s", i, dwnmFxDesc.name);
-            if (memcmp(&dwnmFxDesc.type, EFFECT_UIID_DOWNMIX, sizeof(effect_uuid_t)) == 0) {
-                ALOGI("found effect \"%s\" from %s",
-                        dwnmFxDesc.name, dwnmFxDesc.implementor);
-                isMultichannelCapable = true;
-                break;
-            }
-        }
-    }
-    ALOGE_IF(!isMultichannelCapable, "unable to find downmix effect");
 }
 
 AudioMixer::~AudioMixer()
@@ -229,7 +206,7 @@
 
 void AudioMixer::invalidateState(uint32_t mask)
 {
-    if (mask) {
+    if (mask != 0) {
         mState.needsChanged |= mask;
         mState.hook = process__validate;
     }
@@ -276,13 +253,13 @@
     DownmixerBufferProvider* pDbp = new DownmixerBufferProvider();
     int32_t status;
 
-    if (!isMultichannelCapable) {
+    if (!sIsMultichannelCapable) {
         ALOGE("prepareTrackForDownmix(%d) fails: mixer doesn't support multichannel content",
                 trackName);
         goto noDownmixForActiveTrack;
     }
 
-    if (EffectCreate(&dwnmFxDesc.uuid,
+    if (EffectCreate(&sDwnmFxDesc.uuid,
             pTrack->sessionId /*sessionId*/, -2 /*ioId not relevant here, using random value*/,
             &pDbp->mDownmixHandle/*pHandle*/) != 0) {
         ALOGE("prepareTrackForDownmix(%d) fails: error creating downmixer effect", trackName);
@@ -566,7 +543,7 @@
                 resampler = AudioResampler::create(
                         format,
                         // the resampler sees the number of channels after the downmixer, if any
-                        downmixerBufferProvider != NULL ? MAX_NUM_CHANNELS : channelCount,
+                        (int) (downmixerBufferProvider != NULL ? MAX_NUM_CHANNELS : channelCount),
                         devSampleRate, quality);
                 resampler->setLocalTimeFreq(sLocalTimeFreq);
             }
@@ -667,27 +644,29 @@
         countActiveTracks++;
         track_t& t = state->tracks[i];
         uint32_t n = 0;
+        // FIXME can overflow (mask is only 3 bits)
         n |= NEEDS_CHANNEL_1 + t.channelCount - 1;
-        n |= NEEDS_FORMAT_16;
-        n |= t.doesResample() ? NEEDS_RESAMPLE_ENABLED : NEEDS_RESAMPLE_DISABLED;
+        if (t.doesResample()) {
+            n |= NEEDS_RESAMPLE;
+        }
         if (t.auxLevel != 0 && t.auxBuffer != NULL) {
-            n |= NEEDS_AUX_ENABLED;
+            n |= NEEDS_AUX;
         }
 
         if (t.volumeInc[0]|t.volumeInc[1]) {
             volumeRamp = true;
         } else if (!t.doesResample() && t.volumeRL == 0) {
-            n |= NEEDS_MUTE_ENABLED;
+            n |= NEEDS_MUTE;
         }
         t.needs = n;
 
-        if ((n & NEEDS_MUTE__MASK) == NEEDS_MUTE_ENABLED) {
+        if (n & NEEDS_MUTE) {
             t.hook = track__nop;
         } else {
-            if ((n & NEEDS_AUX__MASK) == NEEDS_AUX_ENABLED) {
+            if (n & NEEDS_AUX) {
                 all16BitsStereoNoResample = false;
             }
-            if ((n & NEEDS_RESAMPLE__MASK) == NEEDS_RESAMPLE_ENABLED) {
+            if (n & NEEDS_RESAMPLE) {
                 all16BitsStereoNoResample = false;
                 resampling = true;
                 t.hook = track__genericResample;
@@ -709,7 +688,7 @@
 
     // select the processing hooks
     state->hook = process__nop;
-    if (countActiveTracks) {
+    if (countActiveTracks > 0) {
         if (resampling) {
             if (!state->outputTemp) {
                 state->outputTemp = new int32_t[MAX_NUM_CHANNELS * state->frameCount];
@@ -745,16 +724,15 @@
 
     // Now that the volume ramp has been done, set optimal state and
     // track hooks for subsequent mixer process
-    if (countActiveTracks) {
+    if (countActiveTracks > 0) {
         bool allMuted = true;
         uint32_t en = state->enabledTracks;
         while (en) {
             const int i = 31 - __builtin_clz(en);
             en &= ~(1<<i);
             track_t& t = state->tracks[i];
-            if (!t.doesResample() && t.volumeRL == 0)
-            {
-                t.needs |= NEEDS_MUTE_ENABLED;
+            if (!t.doesResample() && t.volumeRL == 0) {
+                t.needs |= NEEDS_MUTE;
                 t.hook = track__nop;
             } else {
                 allMuted = false;
@@ -1124,8 +1102,9 @@
         t.in = t.buffer.raw;
         // t.in == NULL can happen if the track was flushed just after having
         // been enabled for mixing.
-        if (t.in == NULL)
+        if (t.in == NULL) {
             enabledTracks &= ~(1<<i);
+        }
     }
 
     e0 = enabledTracks;
@@ -1157,12 +1136,12 @@
                 track_t& t = state->tracks[i];
                 size_t outFrames = BLOCKSIZE;
                 int32_t *aux = NULL;
-                if (CC_UNLIKELY((t.needs & NEEDS_AUX__MASK) == NEEDS_AUX_ENABLED)) {
+                if (CC_UNLIKELY(t.needs & NEEDS_AUX)) {
                     aux = t.auxBuffer + numFrames;
                 }
                 while (outFrames) {
                     size_t inFrames = (t.frameCount > outFrames)?outFrames:t.frameCount;
-                    if (inFrames) {
+                    if (inFrames > 0) {
                         t.hook(&t, outTemp + (BLOCKSIZE-outFrames)*MAX_NUM_CHANNELS, inFrames,
                                 state->resampleTemp, aux);
                         t.frameCount -= inFrames;
@@ -1238,14 +1217,14 @@
             e1 &= ~(1<<i);
             track_t& t = state->tracks[i];
             int32_t *aux = NULL;
-            if (CC_UNLIKELY((t.needs & NEEDS_AUX__MASK) == NEEDS_AUX_ENABLED)) {
+            if (CC_UNLIKELY(t.needs & NEEDS_AUX)) {
                 aux = t.auxBuffer;
             }
 
             // this is a little goofy, on the resampling case we don't
             // acquire/release the buffers because it's done by
             // the resampler.
-            if ((t.needs & NEEDS_RESAMPLE__MASK) == NEEDS_RESAMPLE_ENABLED) {
+            if (t.needs & NEEDS_RESAMPLE) {
                 t.resampler->setPTS(pts);
                 t.hook(&t, outTemp, numFrames, state->resampleTemp, aux);
             } else {
@@ -1445,8 +1424,9 @@
 int64_t AudioMixer::calculateOutputPTS(const track_t& t, int64_t basePTS,
                                        int outputFrameIndex)
 {
-    if (AudioBufferProvider::kInvalidPTS == basePTS)
+    if (AudioBufferProvider::kInvalidPTS == basePTS) {
         return AudioBufferProvider::kInvalidPTS;
+    }
 
     return basePTS + ((outputFrameIndex * sLocalTimeFreq) / t.sampleRate);
 }
@@ -1458,6 +1438,28 @@
 {
     LocalClock lc;
     sLocalTimeFreq = lc.getLocalFreq();
+
+    // find multichannel downmix effect if we have to play multichannel content
+    uint32_t numEffects = 0;
+    int ret = EffectQueryNumberEffects(&numEffects);
+    if (ret != 0) {
+        ALOGE("AudioMixer() error %d querying number of effects", ret);
+        return;
+    }
+    ALOGV("EffectQueryNumberEffects() numEffects=%d", numEffects);
+
+    for (uint32_t i = 0 ; i < numEffects ; i++) {
+        if (EffectQueryEffect(i, &sDwnmFxDesc) == 0) {
+            ALOGV("effect %d is called %s", i, sDwnmFxDesc.name);
+            if (memcmp(&sDwnmFxDesc.type, EFFECT_UIID_DOWNMIX, sizeof(effect_uuid_t)) == 0) {
+                ALOGI("found effect \"%s\" from %s",
+                        sDwnmFxDesc.name, sDwnmFxDesc.implementor);
+                sIsMultichannelCapable = true;
+                break;
+            }
+        }
+    }
+    ALOGW_IF(!sIsMultichannelCapable, "unable to find downmix effect");
 }
 
 // ----------------------------------------------------------------------------
diff --git a/services/audioflinger/AudioMixer.h b/services/audioflinger/AudioMixer.h
index 43aeb86..d5c9da7 100644
--- a/services/audioflinger/AudioMixer.h
+++ b/services/audioflinger/AudioMixer.h
@@ -120,27 +120,19 @@
 private:
 
     enum {
+        // FIXME this representation permits up to 8 channels
         NEEDS_CHANNEL_COUNT__MASK   = 0x00000007,
-        NEEDS_FORMAT__MASK          = 0x000000F0,
-        NEEDS_MUTE__MASK            = 0x00000100,
-        NEEDS_RESAMPLE__MASK        = 0x00001000,
-        NEEDS_AUX__MASK             = 0x00010000,
     };
 
     enum {
-        NEEDS_CHANNEL_1             = 0x00000000,
-        NEEDS_CHANNEL_2             = 0x00000001,
+        NEEDS_CHANNEL_1             = 0x00000000,   // mono
+        NEEDS_CHANNEL_2             = 0x00000001,   // stereo
 
-        NEEDS_FORMAT_16             = 0x00000010,
+        // sample format is not explicitly specified, and is assumed to be AUDIO_FORMAT_PCM_16_BIT
 
-        NEEDS_MUTE_DISABLED         = 0x00000000,
-        NEEDS_MUTE_ENABLED          = 0x00000100,
-
-        NEEDS_RESAMPLE_DISABLED     = 0x00000000,
-        NEEDS_RESAMPLE_ENABLED      = 0x00001000,
-
-        NEEDS_AUX_DISABLED     = 0x00000000,
-        NEEDS_AUX_ENABLED      = 0x00010000,
+        NEEDS_MUTE                  = 0x00000100,
+        NEEDS_RESAMPLE              = 0x00001000,
+        NEEDS_AUX                   = 0x00010000,
     };
 
     struct state_t;
@@ -256,9 +248,9 @@
     state_t         mState __attribute__((aligned(32)));
 
     // effect descriptor for the downmixer used by the mixer
-    static effect_descriptor_t dwnmFxDesc;
+    static effect_descriptor_t sDwnmFxDesc;
     // indicates whether a downmix effect has been found and is usable by this mixer
-    static bool                isMultichannelCapable;
+    static bool                sIsMultichannelCapable;
 
     // Call after changing either the enabled status of a track, or parameters of an enabled track.
     // OK to call more often than that, but unnecessary.
diff --git a/services/audioflinger/AudioPolicyService.cpp b/services/audioflinger/AudioPolicyService.cpp
index 35e816b..c5ad2c0 100644
--- a/services/audioflinger/AudioPolicyService.cpp
+++ b/services/audioflinger/AudioPolicyService.cpp
@@ -77,24 +77,28 @@
     mOutputCommandThread = new AudioCommandThread(String8("ApmOutput"), this);
     /* instantiate the audio policy manager */
     rc = hw_get_module(AUDIO_POLICY_HARDWARE_MODULE_ID, &module);
-    if (rc)
+    if (rc) {
         return;
+    }
 
     rc = audio_policy_dev_open(module, &mpAudioPolicyDev);
     ALOGE_IF(rc, "couldn't open audio policy device (%s)", strerror(-rc));
-    if (rc)
+    if (rc) {
         return;
+    }
 
     rc = mpAudioPolicyDev->create_audio_policy(mpAudioPolicyDev, &aps_ops, this,
                                                &mpAudioPolicy);
     ALOGE_IF(rc, "couldn't create audio policy (%s)", strerror(-rc));
-    if (rc)
+    if (rc) {
         return;
+    }
 
     rc = mpAudioPolicy->init_check(mpAudioPolicy);
     ALOGE_IF(rc, "couldn't init_check the audio policy (%s)", strerror(-rc));
-    if (rc)
+    if (rc) {
         return;
+    }
 
     ALOGI("Loaded audio policy from %s (%s)", module->name, module->id);
 
@@ -126,10 +130,12 @@
     }
     mInputs.clear();
 
-    if (mpAudioPolicy != NULL && mpAudioPolicyDev != NULL)
+    if (mpAudioPolicy != NULL && mpAudioPolicyDev != NULL) {
         mpAudioPolicyDev->destroy_audio_policy(mpAudioPolicyDev, mpAudioPolicy);
-    if (mpAudioPolicyDev != NULL)
+    }
+    if (mpAudioPolicyDev != NULL) {
         audio_policy_dev_close(mpAudioPolicyDev);
+    }
 }
 
 status_t AudioPolicyService::setDeviceConnectionState(audio_devices_t device,
@@ -1114,11 +1120,13 @@
 int AudioPolicyService::startTone(audio_policy_tone_t tone,
                                   audio_stream_type_t stream)
 {
-    if (tone != AUDIO_POLICY_TONE_IN_CALL_NOTIFICATION)
+    if (tone != AUDIO_POLICY_TONE_IN_CALL_NOTIFICATION) {
         ALOGE("startTone: illegal tone requested (%d)", tone);
-    if (stream != AUDIO_STREAM_VOICE_CALL)
+    }
+    if (stream != AUDIO_STREAM_VOICE_CALL) {
         ALOGE("startTone: illegal stream (%d) requested for tone %d", stream,
             tone);
+    }
     mTonePlaybackThread->startToneCommand(ToneGenerator::TONE_SUP_CALL_WAITING,
                                           AUDIO_STREAM_VOICE_CALL);
     return 0;
@@ -1509,8 +1517,9 @@
 static int aps_close_output(void *service, audio_io_handle_t output)
 {
     sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
-    if (af == 0)
+    if (af == 0) {
         return PERMISSION_DENIED;
+    }
 
     return af->closeOutput(output);
 }
@@ -1573,8 +1582,9 @@
 static int aps_close_input(void *service, audio_io_handle_t input)
 {
     sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
-    if (af == 0)
+    if (af == 0) {
         return PERMISSION_DENIED;
+    }
 
     return af->closeInput(input);
 }
@@ -1583,8 +1593,9 @@
                                      audio_io_handle_t output)
 {
     sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
-    if (af == 0)
+    if (af == 0) {
         return PERMISSION_DENIED;
+    }
 
     return af->setStreamOutput(stream, output);
 }
@@ -1594,8 +1605,9 @@
                                 audio_io_handle_t dst_output)
 {
     sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
-    if (af == 0)
+    if (af == 0) {
         return PERMISSION_DENIED;
+    }
 
     return af->moveEffects(session, src_output, dst_output);
 }
diff --git a/services/audioflinger/AudioResampler.cpp b/services/audioflinger/AudioResampler.cpp
index 2c3c719..323f1a4 100644
--- a/services/audioflinger/AudioResampler.cpp
+++ b/services/audioflinger/AudioResampler.cpp
@@ -339,8 +339,9 @@
             out[outputIndex++] += vl * Interp(mX0L, in[0], phaseFraction);
             out[outputIndex++] += vr * Interp(mX0R, in[1], phaseFraction);
             Advance(&inputIndex, &phaseFraction, phaseIncrement);
-            if (outputIndex == outputSampleCount)
+            if (outputIndex == outputSampleCount) {
                 break;
+            }
         }
 
         // process input samples
@@ -434,8 +435,9 @@
             out[outputIndex++] += vl * sample;
             out[outputIndex++] += vr * sample;
             Advance(&inputIndex, &phaseFraction, phaseIncrement);
-            if (outputIndex == outputSampleCount)
+            if (outputIndex == outputSampleCount) {
                 break;
+            }
         }
 
         // process input samples
diff --git a/services/audioflinger/AudioResamplerCubic.cpp b/services/audioflinger/AudioResamplerCubic.cpp
index 18e59e9..1f9714b 100644
--- a/services/audioflinger/AudioResamplerCubic.cpp
+++ b/services/audioflinger/AudioResamplerCubic.cpp
@@ -66,8 +66,9 @@
     if (mBuffer.frameCount == 0) {
         mBuffer.frameCount = inFrameCount;
         provider->getNextBuffer(&mBuffer, mPTS);
-        if (mBuffer.raw == NULL)
+        if (mBuffer.raw == NULL) {
             return;
+        }
         // ALOGW("New buffer: offset=%p, frames=%dn", mBuffer.raw, mBuffer.frameCount);
     }
     int16_t *in = mBuffer.i16;
@@ -97,8 +98,9 @@
                 mBuffer.frameCount = inFrameCount;
                 provider->getNextBuffer(&mBuffer,
                                         calculateOutputPTS(outputIndex / 2));
-                if (mBuffer.raw == NULL)
+                if (mBuffer.raw == NULL) {
                     goto save_state;  // ugly, but efficient
+                }
                 in = mBuffer.i16;
                 // ALOGW("New buffer: offset=%p, frames=%d", mBuffer.raw, mBuffer.frameCount);
             }
@@ -132,8 +134,9 @@
     if (mBuffer.frameCount == 0) {
         mBuffer.frameCount = inFrameCount;
         provider->getNextBuffer(&mBuffer, mPTS);
-        if (mBuffer.raw == NULL)
+        if (mBuffer.raw == NULL) {
             return;
+        }
         // ALOGW("New buffer: offset=%p, frames=%d", mBuffer.raw, mBuffer.frameCount);
     }
     int16_t *in = mBuffer.i16;
@@ -163,8 +166,9 @@
                 mBuffer.frameCount = inFrameCount;
                 provider->getNextBuffer(&mBuffer,
                                         calculateOutputPTS(outputIndex / 2));
-                if (mBuffer.raw == NULL)
+                if (mBuffer.raw == NULL) {
                     goto save_state;  // ugly, but efficient
+                }
                 // ALOGW("New buffer: offset=%p, frames=%dn", mBuffer.raw, mBuffer.frameCount);
                 in = mBuffer.i16;
             }
diff --git a/services/audioflinger/Effects.cpp b/services/audioflinger/Effects.cpp
index a8a5169..59b4770 100644
--- a/services/audioflinger/Effects.cpp
+++ b/services/audioflinger/Effects.cpp
@@ -116,8 +116,9 @@
             continue;
         }
         // first non destroyed handle is considered in control
-        if (controlHandle == NULL)
+        if (controlHandle == NULL) {
             controlHandle = h;
+        }
         if (h->priority() <= priority) {
             break;
         }
@@ -911,18 +912,15 @@
     }
     int bufOffset = ((sizeof(effect_param_cblk_t) - 1) / sizeof(int) + 1) * sizeof(int);
     mCblkMemory = client->heap()->allocate(EFFECT_PARAM_BUFFER_SIZE + bufOffset);
-    if (mCblkMemory != 0) {
-        mCblk = static_cast<effect_param_cblk_t *>(mCblkMemory->pointer());
-
-        if (mCblk != NULL) {
-            new(mCblk) effect_param_cblk_t();
-            mBuffer = (uint8_t *)mCblk + bufOffset;
-        }
-    } else {
+    if (mCblkMemory == 0 ||
+            (mCblk = static_cast<effect_param_cblk_t *>(mCblkMemory->pointer())) == NULL) {
         ALOGE("not enough memory for Effect size=%u", EFFECT_PARAM_BUFFER_SIZE +
                 sizeof(effect_param_cblk_t));
+        mCblkMemory.clear();
         return;
     }
+    new(mCblk) effect_param_cblk_t();
+    mBuffer = (uint8_t *)mCblk + bufOffset;
 }
 
 AudioFlinger::EffectHandle::~EffectHandle()
@@ -939,6 +937,11 @@
     disconnect(false);
 }
 
+status_t AudioFlinger::EffectHandle::initCheck()
+{
+    return mClient == 0 || mCblkMemory != 0 ? OK : NO_MEMORY;
+}
+
 status_t AudioFlinger::EffectHandle::enable()
 {
     ALOGV("enable %p", this);
diff --git a/services/audioflinger/Effects.h b/services/audioflinger/Effects.h
index b717857..50535a2 100644
--- a/services/audioflinger/Effects.h
+++ b/services/audioflinger/Effects.h
@@ -169,6 +169,7 @@
             const sp<IEffectClient>& effectClient,
             int32_t priority);
     virtual ~EffectHandle();
+    virtual status_t initCheck();
 
     // IEffect
     virtual status_t enable();
diff --git a/services/audioflinger/FastMixer.cpp b/services/audioflinger/FastMixer.cpp
index f27ea17..7126e92 100644
--- a/services/audioflinger/FastMixer.cpp
+++ b/services/audioflinger/FastMixer.cpp
@@ -459,8 +459,9 @@
             }
 
             int64_t pts;
-            if (outputSink == NULL || (OK != outputSink->getNextWriteTimestamp(&pts)))
+            if (outputSink == NULL || (OK != outputSink->getNextWriteTimestamp(&pts))) {
                 pts = AudioBufferProvider::kInvalidPTS;
+            }
 
             // process() is CPU-bound
             mixer->process(pts);
diff --git a/services/audioflinger/PlaybackTracks.h b/services/audioflinger/PlaybackTracks.h
index 43b77f3..4b6c74d 100644
--- a/services/audioflinger/PlaybackTracks.h
+++ b/services/audioflinger/PlaybackTracks.h
@@ -34,6 +34,7 @@
                                 int uid,
                                 IAudioFlinger::track_flags_t flags);
     virtual             ~Track();
+    virtual status_t    initCheck() const;
 
     static  void        appendDumpHeader(String8& result);
             void        dump(char* buffer, size_t size);
diff --git a/services/audioflinger/RecordTracks.h b/services/audioflinger/RecordTracks.h
index 57de568..5ef6f58 100644
--- a/services/audioflinger/RecordTracks.h
+++ b/services/audioflinger/RecordTracks.h
@@ -59,5 +59,4 @@
     // releaseBuffer() not overridden
 
     bool                mOverflow;  // overflow on most recent attempt to fill client buffer
-    AudioRecordServerProxy* mAudioRecordServerProxy;
 };
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index bf85b51..c8ba6f6 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -269,8 +269,8 @@
     :   Thread(false /*canCallJava*/),
         mType(type),
         mAudioFlinger(audioFlinger),
-        // mSampleRate, mFrameCount, mChannelMask, mChannelCount, mFrameSize, and mFormat are
-        // set by PlaybackThread::readOutputParameters() or RecordThread::readInputParameters()
+        // mSampleRate, mFrameCount, mChannelMask, mChannelCount, mFrameSize, mFormat, mBufferSize
+        // are set by PlaybackThread::readOutputParameters() or RecordThread::readInputParameters()
         mParamStatus(NO_ERROR),
         //FIXME: mStandby should be true here. Is this some kind of hack?
         mStandby(false), mOutDevice(outDevice), mInDevice(inDevice),
@@ -297,6 +297,17 @@
     }
 }
 
+status_t AudioFlinger::ThreadBase::readyToRun()
+{
+    status_t status = initCheck();
+    if (status == NO_ERROR) {
+        ALOGI("AudioFlinger's thread %p ready to run", this);
+    } else {
+        ALOGE("No working audio driver found.");
+    }
+    return status;
+}
+
 void AudioFlinger::ThreadBase::exit()
 {
     ALOGV("ThreadBase::exit");
@@ -369,7 +380,13 @@
 
 void AudioFlinger::ThreadBase::processConfigEvents()
 {
-    mLock.lock();
+    Mutex::Autolock _l(mLock);
+    processConfigEvents_l();
+}
+
+// post condition: mConfigEvents.isEmpty()
+void AudioFlinger::ThreadBase::processConfigEvents_l()
+{
     while (!mConfigEvents.isEmpty()) {
         ALOGV("processConfigEvents() remaining events %d", mConfigEvents.size());
         ConfigEvent *event = mConfigEvents[0];
@@ -377,32 +394,31 @@
         // release mLock before locking AudioFlinger mLock: lock order is always
         // AudioFlinger then ThreadBase to avoid cross deadlock
         mLock.unlock();
-        switch(event->type()) {
-            case CFG_EVENT_PRIO: {
-                PrioConfigEvent *prioEvent = static_cast<PrioConfigEvent *>(event);
-                // FIXME Need to understand why this has be done asynchronously
-                int err = requestPriority(prioEvent->pid(), prioEvent->tid(), prioEvent->prio(),
-                        true /*asynchronous*/);
-                if (err != 0) {
-                    ALOGW("Policy SCHED_FIFO priority %d is unavailable for pid %d tid %d; "
-                          "error %d",
-                          prioEvent->prio(), prioEvent->pid(), prioEvent->tid(), err);
-                }
-            } break;
-            case CFG_EVENT_IO: {
-                IoConfigEvent *ioEvent = static_cast<IoConfigEvent *>(event);
-                mAudioFlinger->mLock.lock();
+        switch (event->type()) {
+        case CFG_EVENT_PRIO: {
+            PrioConfigEvent *prioEvent = static_cast<PrioConfigEvent *>(event);
+            // FIXME Need to understand why this has be done asynchronously
+            int err = requestPriority(prioEvent->pid(), prioEvent->tid(), prioEvent->prio(),
+                    true /*asynchronous*/);
+            if (err != 0) {
+                ALOGW("Policy SCHED_FIFO priority %d is unavailable for pid %d tid %d; error %d",
+                      prioEvent->prio(), prioEvent->pid(), prioEvent->tid(), err);
+            }
+        } break;
+        case CFG_EVENT_IO: {
+            IoConfigEvent *ioEvent = static_cast<IoConfigEvent *>(event);
+            {
+                Mutex::Autolock _l(mAudioFlinger->mLock);
                 audioConfigChanged_l(ioEvent->event(), ioEvent->param());
-                mAudioFlinger->mLock.unlock();
-            } break;
-            default:
-                ALOGE("processConfigEvents() unknown event type %d", event->type());
-                break;
+            }
+        } break;
+        default:
+            ALOGE("processConfigEvents() unknown event type %d", event->type());
+            break;
         }
         delete event;
         mLock.lock();
     }
-    mLock.unlock();
 }
 
 void AudioFlinger::ThreadBase::dumpBase(int fd, const Vector<String16>& args)
@@ -427,6 +443,8 @@
     result.append(buffer);
     snprintf(buffer, SIZE, "HAL frame count: %d\n", mFrameCount);
     result.append(buffer);
+    snprintf(buffer, SIZE, "HAL buffer size: %u bytes\n", mBufferSize);
+    result.append(buffer);
     snprintf(buffer, SIZE, "Channel Count: %u\n", mChannelCount);
     result.append(buffer);
     snprintf(buffer, SIZE, "Channel Mask: 0x%08x\n", mChannelMask);
@@ -739,8 +757,7 @@
         int sessionId,
         effect_descriptor_t *desc,
         int *enabled,
-        status_t *status
-        )
+        status_t *status)
 {
     sp<EffectModule> effect;
     sp<EffectHandle> handle;
@@ -829,7 +846,10 @@
         }
         // create effect handle and connect it to effect module
         handle = new EffectHandle(effect, client, effectClient, priority);
-        lStatus = effect->addHandle(handle.get());
+        lStatus = handle->initCheck();
+        if (lStatus == OK) {
+            lStatus = effect->addHandle(handle.get());
+        }
         if (enabled != NULL) {
             *enabled = (int)effect->isEnabled();
         }
@@ -850,9 +870,7 @@
         handle.clear();
     }
 
-    if (status != NULL) {
-        *status = lStatus;
-    }
+    *status = lStatus;
     return handle;
 }
 
@@ -1002,7 +1020,7 @@
                                              type_t type)
     :   ThreadBase(audioFlinger, id, device, AUDIO_DEVICE_NONE, type),
         mNormalFrameCount(0), mMixBuffer(NULL),
-        mAllocMixBuffer(NULL), mSuspended(0), mBytesWritten(0),
+        mSuspended(0), mBytesWritten(0),
         mActiveTracksGeneration(0),
         // mStreamTypes[] initialized in constructor body
         mOutput(output),
@@ -1060,7 +1078,7 @@
 AudioFlinger::PlaybackThread::~PlaybackThread()
 {
     mAudioFlinger->unregisterWriter(mNBLogWriter);
-    delete [] mAllocMixBuffer;
+    delete[] mMixBuffer;
 }
 
 void AudioFlinger::PlaybackThread::dump(int fd, const Vector<String16>& args)
@@ -1150,16 +1168,6 @@
 }
 
 // Thread virtuals
-status_t AudioFlinger::PlaybackThread::readyToRun()
-{
-    status_t status = initCheck();
-    if (status == NO_ERROR) {
-        ALOGI("AudioFlinger's thread %p ready to run", this);
-    } else {
-        ALOGE("No working audio driver found.");
-    }
-    return status;
-}
 
 void AudioFlinger::PlaybackThread::onFirstRef()
 {
@@ -1326,8 +1334,12 @@
             track = TimedTrack::create(this, client, streamType, sampleRate, format,
                     channelMask, frameCount, sharedBuffer, sessionId, uid);
         }
-        if (track == 0 || track->getCblk() == NULL || track->name() < 0) {
-            lStatus = NO_MEMORY;
+
+        // new Track always returns non-NULL,
+        // but TimedTrack::create() is a factory that could fail by returning NULL
+        lStatus = track != 0 ? track->initCheck() : (status_t) NO_MEMORY;
+        if (lStatus != NO_ERROR) {
+            track.clear();
             goto Exit;
         }
 
@@ -1352,9 +1364,7 @@
     lStatus = NO_ERROR;
 
 Exit:
-    if (status) {
-        *status = lStatus;
-    }
+    *status = lStatus;
     return track;
 }
 
@@ -1642,7 +1652,8 @@
                 mFormat);
     }
     mFrameSize = audio_stream_frame_size(&mOutput->stream->common);
-    mFrameCount = mOutput->stream->common.get_buffer_size(&mOutput->stream->common) / mFrameSize;
+    mBufferSize = mOutput->stream->common.get_buffer_size(&mOutput->stream->common);
+    mFrameCount = mBufferSize / mFrameSize;
     if (mFrameCount & 15) {
         ALOGW("HAL output buffer size is %u frames but AudioMixer requires multiples of 16 frames",
                 mFrameCount);
@@ -1699,11 +1710,11 @@
     ALOGI("HAL output buffer size %u frames, normal mix buffer size %u frames", mFrameCount,
             mNormalFrameCount);
 
-    delete[] mAllocMixBuffer;
-    size_t align = (mFrameSize < sizeof(int16_t)) ? sizeof(int16_t) : mFrameSize;
-    mAllocMixBuffer = new int8_t[mNormalFrameCount * mFrameSize + align - 1];
-    mMixBuffer = (int16_t *) ((((size_t)mAllocMixBuffer + align - 1) / align) * align);
-    memset(mMixBuffer, 0, mNormalFrameCount * mFrameSize);
+    delete[] mMixBuffer;
+    size_t normalBufferSize = mNormalFrameCount * mFrameSize;
+    // For historical reasons mMixBuffer is int16_t[], but mFrameSize can be odd (such as 1)
+    mMixBuffer = new int16_t[(normalBufferSize + 1) >> 1];
+    memset(mMixBuffer, 0, normalBufferSize);
 
     // force reconfiguration of effect chains and engines to take new buffer size and audio
     // parameters into account
@@ -1837,7 +1848,7 @@
         const Vector< sp<Track> >& tracksToRemove)
 {
     size_t count = tracksToRemove.size();
-    if (count) {
+    if (count > 0) {
         for (size_t i = 0 ; i < count ; i++) {
             const sp<Track>& track = tracksToRemove.itemAt(i);
             if (!track->isOutputTrack()) {
@@ -1913,7 +1924,7 @@
     // otherwise use the HAL / AudioStreamOut directly
     } else {
         // Direct output and offload threads
-        size_t offset = (mCurrentWriteLength - mBytesRemaining) / sizeof(int16_t);
+        size_t offset = (mCurrentWriteLength - mBytesRemaining);
         if (mUseAsyncWrite) {
             ALOGW_IF(mWriteAckSequence & 1, "threadLoop_write(): out of sequence write request");
             mWriteAckSequence += 2;
@@ -1924,7 +1935,7 @@
         // FIXME We should have an implementation of timestamps for direct output threads.
         // They are used e.g for multichannel PCM playback over HDMI.
         bytesWritten = mOutput->stream->write(mOutput->stream,
-                                                   mMixBuffer + offset, mBytesRemaining);
+                                                   (char *)mMixBuffer + offset, mBytesRemaining);
         if (mUseAsyncWrite &&
                 ((bytesWritten < 0) || (bytesWritten == (ssize_t)mBytesRemaining))) {
             // do not wait for async callback in case of error of full write
@@ -2405,7 +2416,7 @@
 void AudioFlinger::PlaybackThread::removeTracks_l(const Vector< sp<Track> >& tracksToRemove)
 {
     size_t count = tracksToRemove.size();
-    if (count) {
+    if (count > 0) {
         for (size_t i=0 ; i<count ; i++) {
             const sp<Track>& track = tracksToRemove.itemAt(i);
             mActiveTracks.remove(track);
@@ -2798,7 +2809,7 @@
             sleepTime = idleSleepTime;
         }
     } else if (mBytesWritten != 0 || (mMixerStatus == MIXER_TRACKS_ENABLED)) {
-        memset (mMixBuffer, 0, mixBufferSize);
+        memset(mMixBuffer, 0, mixBufferSize);
         sleepTime = 0;
         ALOGV_IF(mBytesWritten == 0 && (mMixerStatus == MIXER_TRACKS_ENABLED),
                 "anticipated start");
@@ -3024,7 +3035,7 @@
             // +1 for rounding and +1 for additional sample needed for interpolation
             desiredFrames = (mNormalFrameCount * sr) / mSampleRate + 1 + 1;
             // add frames already consumed but not yet released by the resampler
-            // because cblk->framesReady() will include these frames
+            // because mAudioTrackServerProxy->framesReady() will include these frames
             desiredFrames += mAudioMixer->getUnreleasedFrames(track->name());
             // the minimum track buffer size is normally twice the number of frames necessary
             // to fill one buffer and the resampler should not leave more than one buffer worth
@@ -3362,6 +3373,7 @@
             if ((audio_format_t) value != AUDIO_FORMAT_PCM_16_BIT) {
                 status = BAD_VALUE;
             } else {
+                // no need to save value, since it's constant
                 reconfig = true;
             }
         }
@@ -3369,6 +3381,7 @@
             if ((audio_channel_mask_t) value != AUDIO_CHANNEL_OUT_STEREO) {
                 status = BAD_VALUE;
             } else {
+                // no need to save value, since it's constant
                 reconfig = true;
             }
         }
@@ -4163,15 +4176,15 @@
 // must be called with thread mutex locked
 bool AudioFlinger::OffloadThread::shouldStandby_l()
 {
-    bool TrackPaused = false;
+    bool trackPaused = false;
 
     // do not put the HAL in standby when paused. AwesomePlayer clear the offloaded AudioTrack
     // after a timeout and we will enter standby then.
     if (mTracks.size() > 0) {
-        TrackPaused = mTracks[mTracks.size() - 1]->isPaused();
+        trackPaused = mTracks[mTracks.size() - 1]->isPaused();
     }
 
-    return !mStandby && !TrackPaused;
+    return !mStandby && !trackPaused;
 }
 
 
@@ -4379,7 +4392,9 @@
                                          ) :
     ThreadBase(audioFlinger, id, outDevice, inDevice, RECORD),
     mInput(input), mResampler(NULL), mRsmpOutBuffer(NULL), mRsmpInBuffer(NULL),
-    // mRsmpInIndex and mBufferSize set by readInputParameters()
+    // mRsmpInFrames, mRsmpInFramesP2, mRsmpInUnrel, mRsmpInFront, and mRsmpInRear
+    //      are set by readInputParameters()
+    // mRsmpInIndex LEGACY
     mReqChannelCount(popcount(channelMask)),
     mReqSampleRate(sampleRate)
     // mBytesRead is only meaningful while active, and so is cleared in start()
@@ -4406,22 +4421,12 @@
     run(mName, PRIORITY_URGENT_AUDIO);
 }
 
-status_t AudioFlinger::RecordThread::readyToRun()
-{
-    status_t status = initCheck();
-    ALOGW_IF(status != NO_ERROR,"RecordThread %p could not initialize", this);
-    return status;
-}
-
 bool AudioFlinger::RecordThread::threadLoop()
 {
-    AudioBufferProvider::Buffer buffer;
-    sp<RecordTrack> activeTrack;
-    Vector< sp<EffectChain> > effectChains;
-
     nsecs_t lastWarning = 0;
 
     inputStandBy();
+    sp<RecordTrack> activeTrack;
     {
         Mutex::Autolock _l(mLock);
         activeTrack = mActiveTrack;
@@ -4431,27 +4436,38 @@
     // used to verify we've read at least once before evaluating how many bytes were read
     bool readOnce = false;
 
-    // start recording
-    while (!exitPending()) {
+    // used to request a deferred sleep, to be executed later while mutex is unlocked
+    bool doSleep = false;
 
-        processConfigEvents();
+    // start recording
+    for (;;) {
+        TrackBase::track_state activeTrackState;
+        Vector< sp<EffectChain> > effectChains;
+
+        // sleep with mutex unlocked
+        if (doSleep) {
+            doSleep = false;
+            usleep(kRecordThreadSleepUs);
+        }
 
         { // scope for mLock
             Mutex::Autolock _l(mLock);
-            checkForNewParameters_l();
+            if (exitPending()) {
+                break;
+            }
+            processConfigEvents_l();
+            // return value 'reconfig' is currently unused
+            bool reconfig = checkForNewParameters_l();
             if (mActiveTrack != 0 && activeTrack != mActiveTrack) {
                 SortedVector<int> tmp;
                 tmp.add(mActiveTrack->uid());
                 updateWakeLockUids_l(tmp);
             }
+            // make a stable copy of mActiveTrack
             activeTrack = mActiveTrack;
-            if (mActiveTrack == 0 && mConfigEvents.isEmpty()) {
-                standby();
-
-                if (exitPending()) {
-                    break;
-                }
-
+            if (activeTrack == 0) {
+                standbyIfNotAlreadyInStandby();
+                // exitPending() can't become true here
                 releaseWakeLock_l();
                 ALOGV("RecordThread: loop stopping");
                 // go to sleep
@@ -4460,176 +4476,238 @@
                 acquireWakeLock_l(mActiveTrack != 0 ? mActiveTrack->uid() : -1);
                 continue;
             }
-            if (mActiveTrack != 0) {
-                if (mActiveTrack->isTerminated()) {
-                    removeTrack_l(mActiveTrack);
-                    mActiveTrack.clear();
-                } else if (mActiveTrack->mState == TrackBase::PAUSING) {
-                    standby();
+
+            if (activeTrack->isTerminated()) {
+                removeTrack_l(activeTrack);
+                mActiveTrack.clear();
+                continue;
+            }
+
+            activeTrackState = activeTrack->mState;
+            switch (activeTrackState) {
+            case TrackBase::PAUSING:
+                standbyIfNotAlreadyInStandby();
+                mActiveTrack.clear();
+                mStartStopCond.broadcast();
+                doSleep = true;
+                continue;
+
+            case TrackBase::RESUMING:
+                mStandby = false;
+                if (mReqChannelCount != activeTrack->channelCount()) {
                     mActiveTrack.clear();
                     mStartStopCond.broadcast();
-                } else if (mActiveTrack->mState == TrackBase::RESUMING) {
-                    if (mReqChannelCount != mActiveTrack->channelCount()) {
-                        mActiveTrack.clear();
-                        mStartStopCond.broadcast();
-                    } else if (readOnce) {
-                        // record start succeeds only if first read from audio input
-                        // succeeds
-                        if (mBytesRead >= 0) {
-                            mActiveTrack->mState = TrackBase::ACTIVE;
-                        } else {
-                            mActiveTrack.clear();
-                        }
-                        mStartStopCond.broadcast();
-                    }
-                    mStandby = false;
+                    continue;
                 }
+                if (readOnce) {
+                    mStartStopCond.broadcast();
+                    // record start succeeds only if first read from audio input succeeds
+                    if (mBytesRead < 0) {
+                        mActiveTrack.clear();
+                        continue;
+                    }
+                    activeTrack->mState = TrackBase::ACTIVE;
+                }
+                break;
+
+            case TrackBase::ACTIVE:
+                break;
+
+            case TrackBase::IDLE:
+                doSleep = true;
+                continue;
+
+            default:
+                LOG_FATAL("Unexpected activeTrackState %d", activeTrackState);
             }
 
             lockEffectChains_l(effectChains);
         }
 
-        if (mActiveTrack != 0) {
-            if (mActiveTrack->mState != TrackBase::ACTIVE &&
-                mActiveTrack->mState != TrackBase::RESUMING) {
-                unlockEffectChains(effectChains);
-                usleep(kRecordThreadSleepUs);
-                continue;
-            }
-            for (size_t i = 0; i < effectChains.size(); i ++) {
-                effectChains[i]->process_l();
-            }
+        // thread mutex is now unlocked, mActiveTrack unknown, activeTrack != 0, kept, immutable
+        // activeTrack->mState unknown, activeTrackState immutable and is ACTIVE or RESUMING
 
-            buffer.frameCount = mFrameCount;
-            status_t status = mActiveTrack->getNextBuffer(&buffer);
-            if (status == NO_ERROR) {
-                readOnce = true;
-                size_t framesOut = buffer.frameCount;
-                if (mResampler == NULL) {
-                    // no resampling
-                    while (framesOut) {
-                        size_t framesIn = mFrameCount - mRsmpInIndex;
-                        if (framesIn) {
-                            int8_t *src = (int8_t *)mRsmpInBuffer + mRsmpInIndex * mFrameSize;
-                            int8_t *dst = buffer.i8 + (buffer.frameCount - framesOut) *
-                                    mActiveTrack->mFrameSize;
-                            if (framesIn > framesOut)
-                                framesIn = framesOut;
-                            mRsmpInIndex += framesIn;
-                            framesOut -= framesIn;
-                            if (mChannelCount == mReqChannelCount) {
-                                memcpy(dst, src, framesIn * mFrameSize);
-                            } else {
-                                if (mChannelCount == 1) {
-                                    upmix_to_stereo_i16_from_mono_i16((int16_t *)dst,
-                                            (int16_t *)src, framesIn);
-                                } else {
-                                    downmix_to_mono_i16_from_stereo_i16((int16_t *)dst,
-                                            (int16_t *)src, framesIn);
-                                }
-                            }
-                        }
-                        if (framesOut && mFrameCount == mRsmpInIndex) {
-                            void *readInto;
-                            if (framesOut == mFrameCount && mChannelCount == mReqChannelCount) {
-                                readInto = buffer.raw;
-                                framesOut = 0;
-                            } else {
-                                readInto = mRsmpInBuffer;
-                                mRsmpInIndex = 0;
-                            }
-                            mBytesRead = mInput->stream->read(mInput->stream, readInto,
-                                    mBufferSize);
-                            if (mBytesRead <= 0) {
-                                if ((mBytesRead < 0) && (mActiveTrack->mState == TrackBase::ACTIVE))
-                                {
-                                    ALOGE("Error reading audio input");
-                                    // Force input into standby so that it tries to
-                                    // recover at next read attempt
-                                    inputStandBy();
-                                    usleep(kRecordThreadSleepUs);
-                                }
-                                mRsmpInIndex = mFrameCount;
-                                framesOut = 0;
-                                buffer.frameCount = 0;
-                            }
-#ifdef TEE_SINK
-                            else if (mTeeSink != 0) {
-                                (void) mTeeSink->write(readInto,
-                                        mBytesRead >> Format_frameBitShift(mTeeSink->format()));
-                            }
-#endif
-                        }
-                    }
-                } else {
-                    // resampling
-
-                    // resampler accumulates, but we only have one source track
-                    memset(mRsmpOutBuffer, 0, framesOut * FCC_2 * sizeof(int32_t));
-                    // alter output frame count as if we were expecting stereo samples
-                    if (mChannelCount == 1 && mReqChannelCount == 1) {
-                        framesOut >>= 1;
-                    }
-                    mResampler->resample(mRsmpOutBuffer, framesOut,
-                            this /* AudioBufferProvider* */);
-                    // ditherAndClamp() works as long as all buffers returned by
-                    // mActiveTrack->getNextBuffer() are 32 bit aligned which should be always true.
-                    if (mChannelCount == 2 && mReqChannelCount == 1) {
-                        // temporarily type pun mRsmpOutBuffer from Q19.12 to int16_t
-                        ditherAndClamp(mRsmpOutBuffer, mRsmpOutBuffer, framesOut);
-                        // the resampler always outputs stereo samples:
-                        // do post stereo to mono conversion
-                        downmix_to_mono_i16_from_stereo_i16(buffer.i16, (int16_t *)mRsmpOutBuffer,
-                                framesOut);
-                    } else {
-                        ditherAndClamp((int32_t *)buffer.raw, mRsmpOutBuffer, framesOut);
-                    }
-                    // now done with mRsmpOutBuffer
-
-                }
-                if (mFramestoDrop == 0) {
-                    mActiveTrack->releaseBuffer(&buffer);
-                } else {
-                    if (mFramestoDrop > 0) {
-                        mFramestoDrop -= buffer.frameCount;
-                        if (mFramestoDrop <= 0) {
-                            clearSyncStartEvent();
-                        }
-                    } else {
-                        mFramestoDrop += buffer.frameCount;
-                        if (mFramestoDrop >= 0 || mSyncStartEvent == 0 ||
-                                mSyncStartEvent->isCancelled()) {
-                            ALOGW("Synced record %s, session %d, trigger session %d",
-                                  (mFramestoDrop >= 0) ? "timed out" : "cancelled",
-                                  mActiveTrack->sessionId(),
-                                  (mSyncStartEvent != 0) ? mSyncStartEvent->triggerSession() : 0);
-                            clearSyncStartEvent();
-                        }
-                    }
-                }
-                mActiveTrack->clearOverflow();
-            }
-            // client isn't retrieving buffers fast enough
-            else {
-                if (!mActiveTrack->setOverflow()) {
-                    nsecs_t now = systemTime();
-                    if ((now - lastWarning) > kWarningThrottleNs) {
-                        ALOGW("RecordThread: buffer overflow");
-                        lastWarning = now;
-                    }
-                }
-                // Release the processor for a while before asking for a new buffer.
-                // This will give the application more chance to read from the buffer and
-                // clear the overflow.
-                usleep(kRecordThreadSleepUs);
-            }
+        for (size_t i = 0; i < effectChains.size(); i ++) {
+            // thread mutex is not locked, but effect chain is locked
+            effectChains[i]->process_l();
         }
+
+        AudioBufferProvider::Buffer buffer;
+        buffer.frameCount = mFrameCount;
+        status_t status = activeTrack->getNextBuffer(&buffer);
+        if (status == NO_ERROR) {
+            readOnce = true;
+            size_t framesOut = buffer.frameCount;
+            if (mResampler == NULL) {
+                // no resampling
+                while (framesOut) {
+                    size_t framesIn = mFrameCount - mRsmpInIndex;
+                    if (framesIn > 0) {
+                        int8_t *src = (int8_t *)mRsmpInBuffer + mRsmpInIndex * mFrameSize;
+                        int8_t *dst = buffer.i8 + (buffer.frameCount - framesOut) *
+                                activeTrack->mFrameSize;
+                        if (framesIn > framesOut) {
+                            framesIn = framesOut;
+                        }
+                        mRsmpInIndex += framesIn;
+                        framesOut -= framesIn;
+                        if (mChannelCount == mReqChannelCount) {
+                            memcpy(dst, src, framesIn * mFrameSize);
+                        } else {
+                            if (mChannelCount == 1) {
+                                upmix_to_stereo_i16_from_mono_i16((int16_t *)dst,
+                                        (int16_t *)src, framesIn);
+                            } else {
+                                downmix_to_mono_i16_from_stereo_i16((int16_t *)dst,
+                                        (int16_t *)src, framesIn);
+                            }
+                        }
+                    }
+                    if (framesOut > 0 && mFrameCount == mRsmpInIndex) {
+                        void *readInto;
+                        if (framesOut == mFrameCount && mChannelCount == mReqChannelCount) {
+                            readInto = buffer.raw;
+                            framesOut = 0;
+                        } else {
+                            readInto = mRsmpInBuffer;
+                            mRsmpInIndex = 0;
+                        }
+                        mBytesRead = mInput->stream->read(mInput->stream, readInto,
+                                mBufferSize);
+                        if (mBytesRead <= 0) {
+                            // TODO: verify that it's benign to use a stale track state
+                            if ((mBytesRead < 0) && (activeTrackState == TrackBase::ACTIVE))
+                            {
+                                ALOGE("Error reading audio input");
+                                // Force input into standby so that it tries to
+                                // recover at next read attempt
+                                inputStandBy();
+                                doSleep = true;
+                            }
+                            mRsmpInIndex = mFrameCount;
+                            framesOut = 0;
+                            buffer.frameCount = 0;
+                        }
+#ifdef TEE_SINK
+                        else if (mTeeSink != 0) {
+                            (void) mTeeSink->write(readInto,
+                                    mBytesRead >> Format_frameBitShift(mTeeSink->format()));
+                        }
+#endif
+                    }
+                }
+            } else {
+                // resampling
+
+                // avoid busy-waiting if client doesn't keep up
+                bool madeProgress = false;
+
+                // keep mRsmpInBuffer full so resampler always has sufficient input
+                for (;;) {
+                    int32_t rear = mRsmpInRear;
+                    ssize_t filled = rear - mRsmpInFront;
+                    ALOG_ASSERT(0 <= filled && (size_t) filled <= mRsmpInFramesP2);
+                    // exit once there is enough data in buffer for resampler
+                    if ((size_t) filled >= mRsmpInFrames) {
+                        break;
+                    }
+                    size_t avail = mRsmpInFramesP2 - filled;
+                    // Only try to read full HAL buffers.
+                    // But if the HAL read returns a partial buffer, use it.
+                    if (avail < mFrameCount) {
+                        ALOGE("insufficient space to read: avail %d < mFrameCount %d",
+                                avail, mFrameCount);
+                        break;
+                    }
+                    // If 'avail' is non-contiguous, first read past the nominal end of buffer, then
+                    // copy to the right place.  Permitted because mRsmpInBuffer was over-allocated.
+                    rear &= mRsmpInFramesP2 - 1;
+                    mBytesRead = mInput->stream->read(mInput->stream,
+                            &mRsmpInBuffer[rear * mChannelCount], mBufferSize);
+                    if (mBytesRead <= 0) {
+                        ALOGE("read failed: mBytesRead=%d < %u", mBytesRead, mBufferSize);
+                        break;
+                    }
+                    ALOG_ASSERT((size_t) mBytesRead <= mBufferSize);
+                    size_t framesRead = mBytesRead / mFrameSize;
+                    ALOG_ASSERT(framesRead > 0);
+                    madeProgress = true;
+                    // If 'avail' was non-contiguous, we now correct for reading past end of buffer.
+                    size_t part1 = mRsmpInFramesP2 - rear;
+                    if (framesRead > part1) {
+                        memcpy(mRsmpInBuffer, &mRsmpInBuffer[mRsmpInFramesP2 * mChannelCount],
+                                (framesRead - part1) * mFrameSize);
+                    }
+                    mRsmpInRear += framesRead;
+                }
+
+                if (!madeProgress) {
+                    ALOGV("Did not make progress");
+                    usleep(((mFrameCount * 1000) / mSampleRate) * 1000);
+                }
+
+                // resampler accumulates, but we only have one source track
+                memset(mRsmpOutBuffer, 0, framesOut * FCC_2 * sizeof(int32_t));
+                mResampler->resample(mRsmpOutBuffer, framesOut,
+                        this /* AudioBufferProvider* */);
+                // ditherAndClamp() works as long as all buffers returned by
+                // activeTrack->getNextBuffer() are 32 bit aligned which should be always true.
+                if (mReqChannelCount == 1) {
+                    // temporarily type pun mRsmpOutBuffer from Q19.12 to int16_t
+                    ditherAndClamp(mRsmpOutBuffer, mRsmpOutBuffer, framesOut);
+                    // the resampler always outputs stereo samples:
+                    // do post stereo to mono conversion
+                    downmix_to_mono_i16_from_stereo_i16(buffer.i16, (int16_t *)mRsmpOutBuffer,
+                            framesOut);
+                } else {
+                    ditherAndClamp((int32_t *)buffer.raw, mRsmpOutBuffer, framesOut);
+                }
+                // now done with mRsmpOutBuffer
+
+            }
+            if (mFramestoDrop == 0) {
+                activeTrack->releaseBuffer(&buffer);
+            } else {
+                if (mFramestoDrop > 0) {
+                    mFramestoDrop -= buffer.frameCount;
+                    if (mFramestoDrop <= 0) {
+                        clearSyncStartEvent();
+                    }
+                } else {
+                    mFramestoDrop += buffer.frameCount;
+                    if (mFramestoDrop >= 0 || mSyncStartEvent == 0 ||
+                            mSyncStartEvent->isCancelled()) {
+                        ALOGW("Synced record %s, session %d, trigger session %d",
+                              (mFramestoDrop >= 0) ? "timed out" : "cancelled",
+                              activeTrack->sessionId(),
+                              (mSyncStartEvent != 0) ? mSyncStartEvent->triggerSession() : 0);
+                        clearSyncStartEvent();
+                    }
+                }
+            }
+            activeTrack->clearOverflow();
+        }
+        // client isn't retrieving buffers fast enough
+        else {
+            if (!activeTrack->setOverflow()) {
+                nsecs_t now = systemTime();
+                if ((now - lastWarning) > kWarningThrottleNs) {
+                    ALOGW("RecordThread: buffer overflow");
+                    lastWarning = now;
+                }
+            }
+            // Release the processor for a while before asking for a new buffer.
+            // This will give the application more chance to read from the buffer and
+            // clear the overflow.
+            doSleep = true;
+        }
+
         // enable changes in effect chain
         unlockEffectChains(effectChains);
-        effectChains.clear();
+        // effectChains doesn't need to be cleared, since it is cleared by destructor at scope end
     }
 
-    standby();
+    standbyIfNotAlreadyInStandby();
 
     {
         Mutex::Autolock _l(mLock);
@@ -4647,7 +4725,7 @@
     return false;
 }
 
-void AudioFlinger::RecordThread::standby()
+void AudioFlinger::RecordThread::standbyIfNotAlreadyInStandby()
 {
     if (!mStandby) {
         inputStandBy();
@@ -4660,7 +4738,7 @@
     mInput->stream->common.standby(&mInput->stream->common);
 }
 
-sp<AudioFlinger::RecordThread::RecordTrack>  AudioFlinger::RecordThread::createRecordTrack_l(
+sp<AudioFlinger::RecordThread::RecordTrack> AudioFlinger::RecordThread::createRecordTrack_l(
         const sp<AudioFlinger::Client>& client,
         uint32_t sampleRate,
         audio_format_t format,
@@ -4739,9 +4817,9 @@
         track = new RecordTrack(this, client, sampleRate,
                       format, channelMask, frameCount, sessionId, uid);
 
-        if (track->getCblk() == 0) {
-            ALOGE("createRecordTrack_l() no control block");
-            lStatus = NO_MEMORY;
+        lStatus = track->initCheck();
+        if (lStatus != NO_ERROR) {
+            ALOGE("createRecordTrack_l() initCheck failed %d; no control block?", lStatus);
             track.clear();
             goto Exit;
         }
@@ -4763,9 +4841,7 @@
     lStatus = NO_ERROR;
 
 Exit:
-    if (status) {
-        *status = lStatus;
-    }
+    *status = lStatus;
     return track;
 }
 
@@ -4796,6 +4872,7 @@
     }
 
     {
+        // This section is a rendezvous between binder thread executing start() and RecordThread
         AutoMutex lock(mLock);
         if (mActiveTrack != 0) {
             if (recordTrack != mActiveTrack.get()) {
@@ -4806,21 +4883,29 @@
             return status;
         }
 
+        // FIXME why? already set in constructor, 'STARTING_1' would be more accurate
         recordTrack->mState = TrackBase::IDLE;
         mActiveTrack = recordTrack;
         mLock.unlock();
         status_t status = AudioSystem::startInput(mId);
         mLock.lock();
+        // FIXME should verify that mActiveTrack is still == recordTrack
         if (status != NO_ERROR) {
             mActiveTrack.clear();
             clearSyncStartEvent();
             return status;
         }
+        // FIXME LEGACY
         mRsmpInIndex = mFrameCount;
+        mRsmpInFront = 0;
+        mRsmpInRear = 0;
+        mRsmpInUnrel = 0;
         mBytesRead = 0;
         if (mResampler != NULL) {
             mResampler->reset();
         }
+        // FIXME hijacking a playback track state name which was intended for start after pause;
+        //       here 'STARTING_2' would be more accurate
         mActiveTrack->mState = TrackBase::RESUMING;
         // signal thread to start
         ALOGV("Signal record thread");
@@ -4831,6 +4916,7 @@
             status = INVALID_OPERATION;
             goto startError;
         }
+        // FIXME incorrect usage of wait: no explicit predicate or loop
         mStartStopCond.wait(mLock);
         if (mActiveTrack == 0) {
             ALOGV("Record failed to start");
@@ -4881,11 +4967,13 @@
     if (recordTrack != mActiveTrack.get() || recordTrack->mState == TrackBase::PAUSING) {
         return false;
     }
+    // note that threadLoop may still be processing the track at this point [without lock]
     recordTrack->mState = TrackBase::PAUSING;
     // do not wait for mStartStopCond if exiting
     if (exitPending()) {
         return true;
     }
+    // FIXME incorrect usage of wait: no explicit predicate or loop
     mStartStopCond.wait(mLock);
     // if we have been restarted, recordTrack == mActiveTrack.get() here
     if (exitPending() || recordTrack != mActiveTrack.get()) {
@@ -5009,46 +5097,47 @@
 // AudioBufferProvider interface
 status_t AudioFlinger::RecordThread::getNextBuffer(AudioBufferProvider::Buffer* buffer, int64_t pts)
 {
-    size_t framesReq = buffer->frameCount;
-    size_t framesReady = mFrameCount - mRsmpInIndex;
-    int channelCount;
-
-    if (framesReady == 0) {
-        mBytesRead = mInput->stream->read(mInput->stream, mRsmpInBuffer, mBufferSize);
-        if (mBytesRead <= 0) {
-            if ((mBytesRead < 0) && (mActiveTrack->mState == TrackBase::ACTIVE)) {
-                ALOGE("RecordThread::getNextBuffer() Error reading audio input");
-                // Force input into standby so that it tries to
-                // recover at next read attempt
-                inputStandBy();
-                usleep(kRecordThreadSleepUs);
-            }
-            buffer->raw = NULL;
-            buffer->frameCount = 0;
-            return NOT_ENOUGH_DATA;
-        }
-        mRsmpInIndex = 0;
-        framesReady = mFrameCount;
+    int32_t rear = mRsmpInRear;
+    int32_t front = mRsmpInFront;
+    ssize_t filled = rear - front;
+    ALOG_ASSERT(0 <= filled && (size_t) filled <= mRsmpInFramesP2);
+    // 'filled' may be non-contiguous, so return only the first contiguous chunk
+    front &= mRsmpInFramesP2 - 1;
+    size_t part1 = mRsmpInFramesP2 - front;
+    if (part1 > (size_t) filled) {
+        part1 = filled;
+    }
+    size_t ask = buffer->frameCount;
+    ALOG_ASSERT(ask > 0);
+    if (part1 > ask) {
+        part1 = ask;
+    }
+    if (part1 == 0) {
+        // Higher-level should keep mRsmpInBuffer full, and not call resampler if empty
+        ALOGE("RecordThread::getNextBuffer() starved");
+        buffer->raw = NULL;
+        buffer->frameCount = 0;
+        mRsmpInUnrel = 0;
+        return NOT_ENOUGH_DATA;
     }
 
-    if (framesReq > framesReady) {
-        framesReq = framesReady;
-    }
-
-    if (mChannelCount == 1 && mReqChannelCount == 2) {
-        channelCount = 1;
-    } else {
-        channelCount = 2;
-    }
-    buffer->raw = mRsmpInBuffer + mRsmpInIndex * channelCount;
-    buffer->frameCount = framesReq;
+    buffer->raw = mRsmpInBuffer + front * mChannelCount;
+    buffer->frameCount = part1;
+    mRsmpInUnrel = part1;
     return NO_ERROR;
 }
 
 // AudioBufferProvider interface
 void AudioFlinger::RecordThread::releaseBuffer(AudioBufferProvider::Buffer* buffer)
 {
-    mRsmpInIndex += buffer->frameCount;
+    size_t stepCount = buffer->frameCount;
+    if (stepCount == 0) {
+        return;
+    }
+    ALOG_ASSERT(stepCount <= mRsmpInUnrel);
+    mRsmpInUnrel -= stepCount;
+    mRsmpInFront += stepCount;
+    buffer->raw = NULL;
     buffer->frameCount = 0;
 }
 
@@ -5063,7 +5152,7 @@
         int value;
         audio_format_t reqFormat = mFormat;
         uint32_t reqSamplingRate = mReqSampleRate;
-        uint32_t reqChannelCount = mReqChannelCount;
+        audio_channel_mask_t reqChannelMask = audio_channel_in_mask_from_count(mReqChannelCount);
 
         if (param.getInt(String8(AudioParameter::keySamplingRate), value) == NO_ERROR) {
             reqSamplingRate = value;
@@ -5078,8 +5167,13 @@
             }
         }
         if (param.getInt(String8(AudioParameter::keyChannels), value) == NO_ERROR) {
-            reqChannelCount = popcount(value);
-            reconfig = true;
+            audio_channel_mask_t mask = (audio_channel_mask_t) value;
+            if (mask != AUDIO_CHANNEL_IN_MONO && mask != AUDIO_CHANNEL_IN_STEREO) {
+                status = BAD_VALUE;
+            } else {
+                reqChannelMask = mask;
+                reconfig = true;
+            }
         }
         if (param.getInt(String8(AudioParameter::keyFrameCount), value) == NO_ERROR) {
             // do not accept frame count changes if tracks are open as the track buffer
@@ -5128,6 +5222,7 @@
             }
             mAudioSource = (audio_source_t)value;
         }
+
         if (status == NO_ERROR) {
             status = mInput->stream->common.set_parameters(&mInput->stream->common,
                     keyValuePair.string());
@@ -5144,7 +5239,8 @@
                             <= (2 * reqSamplingRate)) &&
                     popcount(mInput->stream->common.get_channels(&mInput->stream->common))
                             <= FCC_2 &&
-                    (reqChannelCount <= FCC_2)) {
+                    (reqChannelMask == AUDIO_CHANNEL_IN_MONO ||
+                            reqChannelMask == AUDIO_CHANNEL_IN_STEREO)) {
                     status = NO_ERROR;
                 }
                 if (status == NO_ERROR) {
@@ -5180,7 +5276,7 @@
 
 void AudioFlinger::RecordThread::audioConfigChanged_l(int event, int param) {
     AudioSystem::OutputDescriptor desc;
-    void *param2 = NULL;
+    const void *param2 = NULL;
 
     switch (event) {
     case AudioSystem::INPUT_OPENED:
@@ -5219,29 +5315,22 @@
     mFrameSize = audio_stream_frame_size(&mInput->stream->common);
     mBufferSize = mInput->stream->common.get_buffer_size(&mInput->stream->common);
     mFrameCount = mBufferSize / mFrameSize;
-    mRsmpInBuffer = new int16_t[mFrameCount * mChannelCount];
+    // With 3 HAL buffers, we can guarantee ability to down-sample the input by ratio of 2:1 to
+    // 1 full output buffer, regardless of the alignment of the available input.
+    mRsmpInFrames = mFrameCount * 3;
+    mRsmpInFramesP2 = roundup(mRsmpInFrames);
+    // Over-allocate beyond mRsmpInFramesP2 to permit a HAL read past end of buffer
+    mRsmpInBuffer = new int16_t[(mRsmpInFramesP2 + mFrameCount - 1) * mChannelCount];
+    mRsmpInFront = 0;
+    mRsmpInRear = 0;
+    mRsmpInUnrel = 0;
 
-    if (mSampleRate != mReqSampleRate && mChannelCount <= FCC_2 && mReqChannelCount <= FCC_2)
-    {
-        int channelCount;
-        // optimization: if mono to mono, use the resampler in stereo to stereo mode to avoid
-        // stereo to mono post process as the resampler always outputs stereo.
-        if (mChannelCount == 1 && mReqChannelCount == 2) {
-            channelCount = 1;
-        } else {
-            channelCount = 2;
-        }
-        mResampler = AudioResampler::create(16, channelCount, mReqSampleRate);
+    if (mSampleRate != mReqSampleRate && mChannelCount <= FCC_2 && mReqChannelCount <= FCC_2) {
+        mResampler = AudioResampler::create(16, (int) mChannelCount, mReqSampleRate);
         mResampler->setSampleRate(mSampleRate);
         mResampler->setVolume(AudioMixer::UNITY_GAIN, AudioMixer::UNITY_GAIN);
+        // resampler always outputs stereo
         mRsmpOutBuffer = new int32_t[mFrameCount * FCC_2];
-
-        // optmization: if mono to mono, alter input frame count as if we were inputing
-        // stereo samples
-        if (mChannelCount == 1 && mReqChannelCount == 1) {
-            mFrameCount >>= 1;
-        }
-
     }
     mRsmpInIndex = mFrameCount;
 }
diff --git a/services/audioflinger/Threads.h b/services/audioflinger/Threads.h
index 207f1eb..d31009e 100644
--- a/services/audioflinger/Threads.h
+++ b/services/audioflinger/Threads.h
@@ -36,6 +36,8 @@
                 audio_devices_t outDevice, audio_devices_t inDevice, type_t type);
     virtual             ~ThreadBase();
 
+    virtual status_t    readyToRun();
+
     void dumpBase(int fd, const Vector<String16>& args);
     void dumpEffectChains(int fd, const Vector<String16>& args);
 
@@ -141,6 +143,7 @@
                 void        sendIoConfigEvent_l(int event, int param = 0);
                 void        sendPrioConfigEvent_l(pid_t pid, pid_t tid, int32_t prio);
                 void        processConfigEvents();
+                void        processConfigEvents_l();
 
                 // see note at declaration of mStandby, mOutDevice and mInDevice
                 bool        standby() const { return mStandby; }
@@ -156,7 +159,7 @@
                                     int sessionId,
                                     effect_descriptor_t *desc,
                                     int *enabled,
-                                    status_t *status);
+                                    status_t *status /*non-NULL*/);
                 void disconnectEffect(const sp< EffectModule>& effect,
                                       EffectHandle *handle,
                                       bool unpinIfLast);
@@ -275,6 +278,7 @@
                 uint32_t                mChannelCount;
                 size_t                  mFrameSize;
                 audio_format_t          mFormat;
+                size_t                  mBufferSize;       // HAL buffer size for read() or write()
 
                 // Parameter sequence by client: binder thread calling setParameters():
                 //  1. Lock mLock
@@ -358,7 +362,6 @@
                 void        dump(int fd, const Vector<String16>& args);
 
     // Thread virtuals
-    virtual     status_t    readyToRun();
     virtual     bool        threadLoop();
 
     // RefBase
@@ -425,7 +428,7 @@
                                 IAudioFlinger::track_flags_t *flags,
                                 pid_t tid,
                                 int uid,
-                                status_t *status);
+                                status_t *status /*non-NULL*/);
 
                 AudioStreamOut* getOutput() const;
                 AudioStreamOut* clearOutput();
@@ -479,7 +482,6 @@
     size_t                          mNormalFrameCount;  // normal mixer and effects
 
     int16_t*                        mMixBuffer;         // frame size aligned mix buffer
-    int8_t*                         mAllocMixBuffer;    // mixer buffer allocation address
 
     // suspend count, > 0 means suspended.  While suspended, the thread continues to pull from
     // tracks and mix, but doesn't write to HAL.  A2DP and SCO HAL implementations can't handle
@@ -867,12 +869,12 @@
 
     // Thread virtuals
     virtual bool        threadLoop();
-    virtual status_t    readyToRun();
 
     // RefBase
     virtual void        onFirstRef();
 
     virtual status_t    initCheck() const { return (mInput == NULL) ? NO_INIT : NO_ERROR; }
+
             sp<AudioFlinger::RecordThread::RecordTrack>  createRecordTrack_l(
                     const sp<AudioFlinger::Client>& client,
                     uint32_t sampleRate,
@@ -883,7 +885,7 @@
                     int uid,
                     IAudioFlinger::track_flags_t *flags,
                     pid_t tid,
-                    status_t *status);
+                    status_t *status /*non-NULL*/);
 
             status_t    start(RecordTrack* recordTrack,
                               AudioSystem::sync_event_t event,
@@ -926,13 +928,13 @@
             bool        hasFastRecorder() const { return false; }
 
 private:
-            void clearSyncStartEvent();
+            void    clearSyncStartEvent();
 
             // Enter standby if not already in standby, and set mStandby flag
-            void standby();
+            void    standbyIfNotAlreadyInStandby();
 
             // Call the HAL standby method unconditionally, and don't change mStandby flag
-            void inputStandBy();
+            void    inputStandBy();
 
             AudioStreamIn                       *mInput;
             SortedVector < sp<RecordTrack> >    mTracks;
@@ -945,11 +947,22 @@
             AudioResampler                      *mResampler;
             // interleaved stereo pairs of fixed-point signed Q19.12
             int32_t                             *mRsmpOutBuffer;
-            int16_t                             *mRsmpInBuffer; // [mFrameCount * mChannelCount]
-            size_t                              mRsmpInIndex;
-            size_t                              mBufferSize;    // stream buffer size for read()
+
+            // resampler converts input at HAL Hz to output at AudioRecord client Hz
+            int16_t                             *mRsmpInBuffer; // see new[] for details on the size
+            size_t                              mRsmpInFrames;  // size of resampler input in frames
+            size_t                              mRsmpInFramesP2;// size rounded up to a power-of-2
+            size_t                              mRsmpInUnrel;   // unreleased frames remaining from
+                                                                // most recent getNextBuffer
+            // these are rolling counters that are never cleared
+            int32_t                             mRsmpInFront;   // next available frame
+            int32_t                             mRsmpInRear;    // last filled frame + 1
+            size_t                              mRsmpInIndex;   // FIXME legacy
+
+            // client's requested configuration, which may differ from the HAL configuration
             const uint32_t                      mReqChannelCount;
             const uint32_t                      mReqSampleRate;
+
             ssize_t                             mBytesRead;
             // sync event triggering actual audio capture. Frames read before this event will
             // be dropped and therefore not read by the application.
diff --git a/services/audioflinger/TrackBase.h b/services/audioflinger/TrackBase.h
index cd201d9..05fde7c 100644
--- a/services/audioflinger/TrackBase.h
+++ b/services/audioflinger/TrackBase.h
@@ -48,6 +48,7 @@
                                 int uid,
                                 bool isOut);
     virtual             ~TrackBase();
+    virtual status_t    initCheck() const { return getCblk() != 0 ? NO_ERROR : NO_MEMORY; }
 
     virtual status_t    start(AudioSystem::sync_event_t event,
                              int triggerSession) = 0;
@@ -78,15 +79,6 @@
 
     virtual uint32_t sampleRate() const { return mSampleRate; }
 
-    // Return a pointer to the start of a contiguous slice of the track buffer.
-    // Parameter 'offset' is the requested start position, expressed in
-    // monotonically increasing frame units relative to the track epoch.
-    // Parameter 'frames' is the requested length, also in frame units.
-    // Always returns non-NULL.  It is the caller's responsibility to
-    // verify that this will be successful; the result of calling this
-    // function with invalid 'offset' or 'frames' is undefined.
-    void* getBuffer(uint32_t offset, uint32_t frames) const;
-
     bool isStopped() const {
         return (mState == STOPPED || mState == FLUSHED);
     }
diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp
index af04ce7..53196c8 100644
--- a/services/audioflinger/Tracks.cpp
+++ b/services/audioflinger/Tracks.cpp
@@ -116,12 +116,11 @@
 
     if (client != 0) {
         mCblkMemory = client->heap()->allocate(size);
-        if (mCblkMemory != 0) {
-            mCblk = static_cast<audio_track_cblk_t *>(mCblkMemory->pointer());
-            // can't assume mCblk != NULL
-        } else {
+        if (mCblkMemory == 0 ||
+                (mCblk = static_cast<audio_track_cblk_t *>(mCblkMemory->pointer())) == NULL) {
             ALOGE("not enough memory for AudioTrack size=%u", size);
             client->heap()->dump("AudioTrack");
+            mCblkMemory.clear();
             return;
         }
     } else {
@@ -275,6 +274,11 @@
     if (!mTrack->isTimedTrack())
         return INVALID_OPERATION;
 
+    if (buffer == 0 || buffer->pointer() == NULL) {
+        ALOGE("queueTimedBuffer() buffer is 0 or has NULL pointer()");
+        return BAD_VALUE;
+    }
+
     PlaybackThread::TimedTrack* tt =
             reinterpret_cast<PlaybackThread::TimedTrack*>(mTrack.get());
     return tt->queueTimedBuffer(buffer, pts);
@@ -396,6 +400,15 @@
     }
 }
 
+status_t AudioFlinger::PlaybackThread::Track::initCheck() const
+{
+    status_t status = TrackBase::initCheck();
+    if (status == NO_ERROR && mName < 0) {
+        status = NO_MEMORY;
+    }
+    return status;
+}
+
 void AudioFlinger::PlaybackThread::Track::destroy()
 {
     // NOTE: destroyTrack_l() can remove a strong reference to this Track
@@ -1045,15 +1058,14 @@
 
         mTimedMemoryDealer = new MemoryDealer(kTimedBufferHeapSize,
                                               "AudioFlingerTimed");
-        if (mTimedMemoryDealer == NULL)
+        if (mTimedMemoryDealer == NULL) {
             return NO_MEMORY;
+        }
     }
 
     sp<IMemory> newBuffer = mTimedMemoryDealer->allocate(size);
-    if (newBuffer == NULL) {
-        newBuffer = mTimedMemoryDealer->allocate(size);
-        if (newBuffer == NULL)
-            return NO_MEMORY;
+    if (newBuffer == 0 || newBuffer->pointer() == NULL) {
+        return NO_MEMORY;
     }
 
     *buffer = newBuffer;
@@ -1764,9 +1776,7 @@
 {
     ALOGV("RecordTrack constructor");
     if (mCblk != NULL) {
-        mAudioRecordServerProxy = new AudioRecordServerProxy(mCblk, mBuffer, frameCount,
-                mFrameSize);
-        mServerProxy = mAudioRecordServerProxy;
+        mServerProxy = new AudioRecordServerProxy(mCblk, mBuffer, frameCount, mFrameSize);
     }
 }
 
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp
index 3dbc1b0..edb77aa 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.cpp
+++ b/services/camera/libcameraservice/device3/Camera3Device.cpp
@@ -100,8 +100,10 @@
 
     camera3_device_t *device;
 
+    ATRACE_BEGIN("camera3->open");
     res = module->common.methods->open(&module->common, deviceName.string(),
             reinterpret_cast<hw_device_t**>(&device));
+    ATRACE_END();
 
     if (res != OK) {
         SET_ERR_L("Could not open camera: %s (%d)", strerror(-res), res);
@@ -269,7 +271,9 @@
         mStatusTracker.clear();
 
         if (mHal3Device != NULL) {
+            ATRACE_BEGIN("camera3->close");
             mHal3Device->common.close(&mHal3Device->common);
+            ATRACE_END();
             mHal3Device = NULL;
         }
 
@@ -1664,8 +1668,10 @@
             return;
         }
 
-        // Check if everything has arrived for this result (buffers and metadata)
-        if (request.haveResultMetadata && request.numBuffersLeft == 0) {
+        // Check if everything has arrived for this result (buffers and metadata), remove it from
+        // InFlightMap if both arrived or HAL reports error for this request (i.e. during flush).
+        if ((request.requestStatus != OK) ||
+                (request.haveResultMetadata && request.numBuffersLeft == 0)) {
             ATRACE_ASYNC_END("frame capture", frameNumber);
             mInFlightMap.removeItemsAt(idx, 1);
         }
diff --git a/services/camera/libcameraservice/device3/Camera3InputStream.cpp b/services/camera/libcameraservice/device3/Camera3InputStream.cpp
index 5aa9a3e..e1c492b 100644
--- a/services/camera/libcameraservice/device3/Camera3InputStream.cpp
+++ b/services/camera/libcameraservice/device3/Camera3InputStream.cpp
@@ -199,13 +199,33 @@
     assert(mMaxSize == 0);
     assert(camera3_stream::format != HAL_PIXEL_FORMAT_BLOB);
 
-    mTotalBufferCount = BufferQueue::MIN_UNDEQUEUED_BUFFERS +
-                        camera3_stream::max_buffers;
     mDequeuedBufferCount = 0;
     mFrameCount = 0;
 
     if (mConsumer.get() == 0) {
         sp<BufferQueue> bq = new BufferQueue();
+
+        int minUndequeuedBuffers = 0;
+        res = bq->query(NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS, &minUndequeuedBuffers);
+        if (res != OK || minUndequeuedBuffers < 0) {
+            ALOGE("%s: Stream %d: Could not query min undequeued buffers (error %d, bufCount %d)",
+                  __FUNCTION__, mId, res, minUndequeuedBuffers);
+            return res;
+        }
+        size_t minBufs = static_cast<size_t>(minUndequeuedBuffers);
+        /*
+         * We promise never to 'acquire' more than camera3_stream::max_buffers
+         * at any one time.
+         *
+         * Boost the number up to meet the minimum required buffer count.
+         *
+         * (Note that this sets consumer-side buffer count only,
+         * and not the sum of producer+consumer side as in other camera streams).
+         */
+        mTotalBufferCount = camera3_stream::max_buffers > minBufs ?
+            camera3_stream::max_buffers : minBufs;
+        // TODO: somehow set the total buffer count when producer connects?
+
         mConsumer = new BufferItemConsumer(bq, camera3_stream::usage,
                                            mTotalBufferCount);
         mConsumer->setName(String8::format("Camera3-InputStream-%d", mId));
diff --git a/services/camera/libcameraservice/device3/Camera3InputStream.h b/services/camera/libcameraservice/device3/Camera3InputStream.h
index 681d684..ae49467 100644
--- a/services/camera/libcameraservice/device3/Camera3InputStream.h
+++ b/services/camera/libcameraservice/device3/Camera3InputStream.h
@@ -44,6 +44,8 @@
 
     virtual void     dump(int fd, const Vector<String16> &args) const;
 
+    // TODO: expose an interface to get the IGraphicBufferProducer
+
   private:
 
     typedef BufferItemConsumer::BufferItem BufferItem;
diff --git a/services/camera/libcameraservice/device3/Camera3ZslStream.cpp b/services/camera/libcameraservice/device3/Camera3ZslStream.cpp
index 04f5dc5..5f63a6e 100644
--- a/services/camera/libcameraservice/device3/Camera3ZslStream.cpp
+++ b/services/camera/libcameraservice/device3/Camera3ZslStream.cpp
@@ -109,14 +109,14 @@
 } // namespace anonymous
 
 Camera3ZslStream::Camera3ZslStream(int id, uint32_t width, uint32_t height,
-        int depth) :
+        int bufferCount) :
         Camera3OutputStream(id, CAMERA3_STREAM_BIDIRECTIONAL,
                             width, height,
                             HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED),
-        mDepth(depth) {
+        mDepth(bufferCount) {
 
     sp<BufferQueue> bq = new BufferQueue();
-    mProducer = new RingBufferConsumer(bq, GRALLOC_USAGE_HW_CAMERA_ZSL, depth);
+    mProducer = new RingBufferConsumer(bq, GRALLOC_USAGE_HW_CAMERA_ZSL, bufferCount);
     mConsumer = new Surface(bq);
 }
 
diff --git a/services/camera/libcameraservice/device3/Camera3ZslStream.h b/services/camera/libcameraservice/device3/Camera3ZslStream.h
index c7f4490..6721832 100644
--- a/services/camera/libcameraservice/device3/Camera3ZslStream.h
+++ b/services/camera/libcameraservice/device3/Camera3ZslStream.h
@@ -37,10 +37,10 @@
         public Camera3OutputStream {
   public:
     /**
-     * Set up a ZSL stream of a given resolution. Depth is the number of buffers
+     * Set up a ZSL stream of a given resolution. bufferCount is the number of buffers
      * cached within the stream that can be retrieved for input.
      */
-    Camera3ZslStream(int id, uint32_t width, uint32_t height, int depth);
+    Camera3ZslStream(int id, uint32_t width, uint32_t height, int bufferCount);
     ~Camera3ZslStream();
 
     virtual void     dump(int fd, const Vector<String16> &args) const;
diff --git a/services/camera/libcameraservice/gui/RingBufferConsumer.h b/services/camera/libcameraservice/gui/RingBufferConsumer.h
index b4ad824..a03736d 100644
--- a/services/camera/libcameraservice/gui/RingBufferConsumer.h
+++ b/services/camera/libcameraservice/gui/RingBufferConsumer.h
@@ -64,7 +64,7 @@
     // bufferCount parameter specifies how many buffers can be pinned for user
     // access at the same time.
     RingBufferConsumer(const sp<IGraphicBufferConsumer>& consumer, uint32_t consumerUsage,
-            int bufferCount = BufferQueue::MIN_UNDEQUEUED_BUFFERS);
+            int bufferCount);
 
     virtual ~RingBufferConsumer();