You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by da...@apache.org on 2011/04/07 22:41:24 UTC
svn commit: r1089997 - in /commons/proper/sanselan/trunk/src:
main/java/org/apache/sanselan/ main/java/org/apache/sanselan/common/
main/java/org/apache/sanselan/formats/xbm/
main/java/org/apache/sanselan/formats/xpm/ test/data/images/xbm/
test/data/ima...
Author: damjan
Date: Thu Apr 7 20:41:24 2011
New Revision: 1089997
URL: http://svn.apache.org/viewvc?rev=1089997&view=rev
Log:
Added support for reading and writing XBM images, relevant tests,
and a very basic C language parser that can be reused for XPM files too.
Added:
commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/common/BasicCParser.java (with props)
commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/formats/xbm/
commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/formats/xbm/XbmImageParser.java (with props)
commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/formats/xpm/
commons/proper/sanselan/trunk/src/test/data/images/xbm/
commons/proper/sanselan/trunk/src/test/data/images/xbm/1/
commons/proper/sanselan/trunk/src/test/data/images/xbm/1/Oregon Scientific DS6639 - DSC_0307 - small.xbm
commons/proper/sanselan/trunk/src/test/data/images/xbm/1/info.txt (with props)
commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/xbm/
commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/xbm/XbmBaseTest.java (with props)
commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/xbm/XbmReadTest.java (with props)
Modified:
commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/ImageFormat.java
commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/ImageParser.java
commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceImageTest.java
commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/roundtrip/RoundtripTest.java
Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/ImageFormat.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/ImageFormat.java?rev=1089997&r1=1089996&r2=1089997&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/ImageFormat.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/ImageFormat.java Thu Apr 7 20:41:24 2011
@@ -76,6 +76,7 @@ public class ImageFormat
public static final ImageFormat IMAGE_FORMAT_WBMP = new ImageFormat("WBMP");
public static final ImageFormat IMAGE_FORMAT_PCX = new ImageFormat("PCX");
public static final ImageFormat IMAGE_FORMAT_DCX = new ImageFormat("DCX");
+ public static final ImageFormat IMAGE_FORMAT_XBM = new ImageFormat("XBM");
public static final ImageFormat[] getAllFormats()
{
@@ -85,7 +86,7 @@ public class ImageFormat
IMAGE_FORMAT_PSD, IMAGE_FORMAT_PBM, IMAGE_FORMAT_PGM,
IMAGE_FORMAT_PPM, IMAGE_FORMAT_PNM, IMAGE_FORMAT_TGA,
IMAGE_FORMAT_JBIG2, IMAGE_FORMAT_ICNS, IMAGE_FORMAT_WBMP,
- IMAGE_FORMAT_PCX, IMAGE_FORMAT_DCX,
+ IMAGE_FORMAT_PCX, IMAGE_FORMAT_DCX, IMAGE_FORMAT_XBM,
};
return result;
Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/ImageParser.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/ImageParser.java?rev=1089997&r1=1089996&r2=1089997&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/ImageParser.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/ImageParser.java Thu Apr 7 20:41:24 2011
@@ -45,6 +45,7 @@ import org.apache.sanselan.formats.pnm.P
import org.apache.sanselan.formats.psd.PsdImageParser;
import org.apache.sanselan.formats.tiff.TiffImageParser;
import org.apache.sanselan.formats.wbmp.WbmpImageParser;
+import org.apache.sanselan.formats.xbm.XbmImageParser;
import org.apache.sanselan.util.Debug;
public abstract class ImageParser extends BinaryFileParser implements
@@ -59,6 +60,7 @@ public abstract class ImageParser extend
new PNMImageParser(), new IcoImageParser(),
new IcnsImageParser(), new WbmpImageParser(),
new PcxImageParser(), new DcxImageParser(),
+ new XbmImageParser(),
// new JBig2ImageParser(),
// new TgaImageParser(),
};
Added: commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/common/BasicCParser.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/common/BasicCParser.java?rev=1089997&view=auto
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/common/BasicCParser.java (added)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/common/BasicCParser.java Thu Apr 7 20:41:24 2011
@@ -0,0 +1,373 @@
+/*
+ * 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.
+ * under the License.
+ */
+
+package org.apache.sanselan.common;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PushbackInputStream;
+import java.util.Map;
+import org.apache.sanselan.ImageReadException;
+
+public class BasicCParser
+{
+ private PushbackInputStream is;
+
+ public BasicCParser(ByteArrayInputStream is)
+ {
+ this.is = new PushbackInputStream(is);
+ }
+
+ public String nextToken() throws IOException, ImageReadException
+ {
+ // I don't know how complete the C parsing in an XPM file
+ // is meant to be, this is just the very basics...
+
+ boolean inString = false;
+ boolean inIdentifier = false;
+ boolean hadBackSlash = false;
+ StringBuilder token = new StringBuilder();
+ for (int c = is.read(); c != -1; c = is.read())
+ {
+ if (inString)
+ {
+ if (c == '\\')
+ {
+ token.append('\\');
+ hadBackSlash = !hadBackSlash;
+ }
+ else if (c == '"')
+ {
+ token.append('"');
+ if (!hadBackSlash)
+ return token.toString();
+ hadBackSlash = false;
+ }
+ else if (c == '\r' || c == '\n')
+ throw new ImageReadException("Unterminated string in XPM file");
+ else
+ {
+ token.append((char)c);
+ hadBackSlash = false;
+ }
+ }
+ else if (inIdentifier)
+ {
+ if (Character.isLetterOrDigit(c) || c == '_')
+ token.append((char)c);
+ else
+ {
+ is.unread(c);
+ return token.toString();
+ }
+ }
+ else
+ {
+ if (c == '"')
+ {
+ token.append('"');
+ inString = true;
+ }
+ else if (Character.isLetterOrDigit(c) || c == '_')
+ {
+ token.append((char)c);
+ inIdentifier = true;
+ }
+ else if (c == '{' || c == '}' ||
+ c == '[' || c == ']' ||
+ c == '*' || c == ';' ||
+ c == '=' || c == ',')
+ {
+ token.append((char)c);
+ return token.toString();
+ }
+ else if (c == ' ' || c == '\t' || c == '\r' || c == '\n')
+ ;
+ else
+ throw new ImageReadException("Unhandled/invalid character '" +
+ ((char)c) + "' found in XPM file");
+ }
+ }
+
+ if (inIdentifier)
+ return token.toString();
+ if (inString)
+ throw new ImageReadException("Unterminated string ends XMP file");
+ return null;
+ }
+
+ public static ByteArrayOutputStream preprocess(InputStream is,
+ StringBuilder firstComment, Map defines)
+ throws IOException, ImageReadException
+ {
+ boolean inString = false;
+ boolean inComment = false;
+ boolean inDirective = false;
+ boolean hadSlash = false;
+ boolean hadStar = false;
+ boolean hadBackSlash = false;
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ boolean seenFirstComment = (firstComment == null);
+ StringBuilder directiveBuffer = new StringBuilder();
+ for (int c = is.read(); c != -1; c = is.read())
+ {
+ if (inComment)
+ {
+ if (c == '*')
+ {
+ if (hadStar && !seenFirstComment)
+ firstComment.append('*');
+ hadStar = true;
+ }
+ else if(c == '/')
+ {
+ if (hadStar)
+ {
+ hadStar = false;
+ inComment = false;
+ seenFirstComment = true;
+ }
+ else
+ out.write(c);
+ }
+ else
+ {
+ if (hadStar && !seenFirstComment)
+ firstComment.append('*');
+ hadStar = false;
+ if (!seenFirstComment)
+ firstComment.append((char)c);
+ }
+ }
+ else if (inString)
+ {
+ if (c == '\\')
+ {
+ if (hadBackSlash)
+ out.write('\\');
+ hadBackSlash = true;
+ }
+ else if (c == '"')
+ {
+ if (hadBackSlash)
+ {
+ out.write('\\');
+ hadBackSlash = false;
+ }
+ else
+ inString = false;
+ out.write('"');
+ }
+ else if (c == '\r' || c == '\n')
+ throw new ImageReadException("Unterminated string in file");
+ else
+ {
+ if (hadBackSlash)
+ {
+ out.write('\\');
+ hadBackSlash = false;
+ }
+ out.write(c);
+ }
+ }
+ else if (inDirective)
+ {
+ if (c == '\r' || c == '\n')
+ {
+ inDirective = false;
+ String[] tokens = tokenizeRow(directiveBuffer.toString());
+ if (tokens.length < 2 || tokens.length > 3)
+ throw new ImageReadException("Bad preprocessor directive");
+ if (!tokens[0].equals("define"))
+ throw new ImageReadException("Invalid/unsupported " +
+ "preprocessor directive '" + tokens[0] + "'");
+ defines.put(tokens[1], (tokens.length == 3) ? tokens[2] : null);
+ directiveBuffer.setLength(0);
+ }
+ else
+ directiveBuffer.append((char)c);
+ }
+ else
+ {
+ if (c == '/')
+ {
+ if (hadSlash)
+ out.write('/');
+ hadSlash = true;
+ }
+ else if (c == '*')
+ {
+ if (hadSlash)
+ {
+ inComment = true;
+ hadSlash = false;
+ }
+ else
+ out.write(c);
+ }
+ else if (c == '"')
+ {
+ if (hadSlash)
+ out.write('/');
+ hadSlash = false;
+ out.write(c);
+ inString = true;
+ }
+ else if (c == '#')
+ {
+ if (defines == null)
+ throw new ImageReadException("Unexpected preprocessor directive");
+ inDirective = true;
+ }
+ else
+ {
+ if (hadSlash)
+ out.write('/');
+ hadSlash = false;
+ out.write(c);
+ // Only whitespace allowed before first comment:
+ if (c != ' ' && c != '\t' && c != '\r' && c != '\n')
+ seenFirstComment = true;
+ }
+ }
+ }
+ if (hadSlash)
+ out.write('/');
+ if (hadStar)
+ out.write('*');
+ if (inString)
+ throw new ImageReadException("Unterminated string at the end of file");
+ if (inComment)
+ throw new ImageReadException("Unterminated comment at the end of file");
+ return out;
+ }
+
+ public static String[] tokenizeRow(String row)
+ throws ImageReadException
+ {
+ String[] tokens = row.split("[ \t]");
+ int numLiveTokens = 0;
+ for (int i = 0; i < tokens.length; i++)
+ {
+ if (tokens[i] != null && tokens[i].length() > 0)
+ ++numLiveTokens;
+ }
+ String[] liveTokens = new String[numLiveTokens];
+ int next = 0;
+ for (int i = 0; i < tokens.length; i++)
+ {
+ if (tokens[i] != null && tokens[i].length() > 0)
+ liveTokens[next++] = tokens[i];
+ }
+ return liveTokens;
+ }
+
+ public static void unescapeString(StringBuilder stringBuilder, String string)
+ throws ImageReadException
+ {
+ if (string.length() < 2)
+ throw new ImageReadException("Parsing XPM file failed, " +
+ "string is too short");
+ if (string.charAt(0) != '"' || string.charAt(string.length() - 1) != '"')
+ throw new ImageReadException("Parsing XPM file failed, " +
+ "string not surrounded by '\"'");
+ boolean hadBackSlash = false;
+ for (int i = 1; i < (string.length() - 1); i++)
+ {
+ char c = string.charAt(i);
+ if (hadBackSlash)
+ {
+ if (c == '\\')
+ stringBuilder.append('\\');
+ else if (c == '"')
+ stringBuilder.append('"');
+ else if (c == '\'')
+ stringBuilder.append('\'');
+ else if (c == 'x')
+ {
+ if (i + 2 >= string.length())
+ throw new ImageReadException("Parsing XPM file failed, " +
+ "hex constant in string too short");
+ char hex1 = string.charAt(i + 1);
+ char hex2 = string.charAt(i + 2);
+ i += 2;
+ int constant;
+ try
+ {
+ constant = Integer.parseInt("" + hex1 + hex2, 16);
+ }
+ catch (NumberFormatException nfe)
+ {
+ throw new ImageReadException("Parsing XPM file failed, " +
+ "hex constant invalid", nfe);
+ }
+ stringBuilder.append((char)constant);
+ }
+ else if (c == '0' || c == '1' || c == '2' || c == '3' || c == '4' ||
+ c == '5' || c == '6' || c == '7')
+ {
+ int length = 1;
+ if (i+1 < string.length() && '0' <= string.charAt(i+1) &&
+ string.charAt(i+1) <= '7')
+ ++length;
+ if (i+2 < string.length() && '0' <= string.charAt(i+2) &&
+ string.charAt(i+2) <= '7')
+ ++length;
+ int constant = 0;
+ for (int j = 0; j < length; j++)
+ {
+ constant *= 8;
+ constant += (string.charAt(i + j) - '0');
+ }
+ i += length - 1;
+ stringBuilder.append((char)constant);
+ }
+ else if (c == 'a')
+ stringBuilder.append((char)0x07);
+ else if (c == 'b')
+ stringBuilder.append((char)0x08);
+ else if (c == 'f')
+ stringBuilder.append((char)0x0c);
+ else if (c == 'n')
+ stringBuilder.append((char)0x0a);
+ else if (c == 'r')
+ stringBuilder.append((char)0x0d);
+ else if (c == 't')
+ stringBuilder.append((char)0x09);
+ else if (c == 'v')
+ stringBuilder.append((char)0x0b);
+ else
+ throw new ImageReadException("Parsing XPM file failed, " +
+ "invalid escape sequence");
+ hadBackSlash = false;
+ }
+ else
+ {
+ if (c == '\\')
+ hadBackSlash = true;
+ else if (c == '"')
+ throw new ImageReadException("Parsing XPM file failed, " +
+ "extra '\"' found in string");
+ else
+ stringBuilder.append(c);
+ }
+ }
+ if (hadBackSlash)
+ throw new ImageReadException("Parsing XPM file failed, " +
+ "unterminated escape sequence found in string");
+ }
+}
Propchange: commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/common/BasicCParser.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/formats/xbm/XbmImageParser.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/formats/xbm/XbmImageParser.java?rev=1089997&view=auto
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/formats/xbm/XbmImageParser.java (added)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/formats/xbm/XbmImageParser.java Thu Apr 7 20:41:24 2011
@@ -0,0 +1,420 @@
+/*
+ * 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.
+ * under the License.
+ */
+
+package org.apache.sanselan.formats.xbm;
+
+import java.awt.Dimension;
+import java.awt.image.BufferedImage;
+import java.awt.image.ColorModel;
+import java.awt.image.DataBuffer;
+import java.awt.image.DataBufferByte;
+import java.awt.image.IndexColorModel;
+import java.awt.image.WritableRaster;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+import java.util.UUID;
+import org.apache.sanselan.ImageFormat;
+import org.apache.sanselan.ImageInfo;
+import org.apache.sanselan.ImageParser;
+import org.apache.sanselan.ImageReadException;
+import org.apache.sanselan.ImageWriteException;
+import org.apache.sanselan.common.BasicCParser;
+import org.apache.sanselan.common.IImageMetadata;
+import org.apache.sanselan.common.byteSources.ByteSource;
+
+public class XbmImageParser extends ImageParser
+{
+ public XbmImageParser()
+ {
+ }
+
+ public String getName()
+ {
+ return "Xbm-Custom";
+ }
+
+ public String getDefaultExtension()
+ {
+ return DEFAULT_EXTENSION;
+ }
+ private static final String DEFAULT_EXTENSION = ".xbm";
+ private static final String ACCEPTED_EXTENSIONS[] =
+ {
+ ".xbm",
+ };
+
+ protected String[] getAcceptedExtensions()
+ {
+ return ACCEPTED_EXTENSIONS;
+ }
+
+ protected ImageFormat[] getAcceptedTypes()
+ {
+ return new ImageFormat[]
+ {
+ ImageFormat.IMAGE_FORMAT_XBM, //
+ };
+ }
+
+ public boolean embedICCProfile(File src, File dst, byte profile[])
+ {
+ return false;
+ }
+
+ public IImageMetadata getMetadata(ByteSource byteSource, Map params)
+ throws ImageReadException, IOException
+ {
+ return null;
+ }
+
+ public ImageInfo getImageInfo(ByteSource byteSource, Map params)
+ throws ImageReadException, IOException
+ {
+ XbmHeader xbmHeader = readXbmHeader(byteSource);
+ return new ImageInfo("XBM", 1,
+ new ArrayList(), ImageFormat.IMAGE_FORMAT_XBM,
+ "X BitMap",
+ xbmHeader.height, "image/x-xbitmap", 1,
+ 0, 0, 0, 0,
+ xbmHeader.width, false, false, false,
+ ImageInfo.COLOR_TYPE_BW,
+ ImageInfo.COMPRESSION_ALGORITHM_NONE);
+ }
+
+ public Dimension getImageSize(ByteSource byteSource,
+ Map params)
+ throws ImageReadException, IOException
+ {
+ XbmHeader xbmHeader = readXbmHeader(byteSource);
+ return new Dimension(xbmHeader.width, xbmHeader.height);
+ }
+
+ public byte[] getICCProfileBytes(ByteSource byteSource,
+ Map params)
+ throws ImageReadException, IOException
+ {
+ return null;
+ }
+
+ private static class XbmHeader
+ {
+ int width;
+ int height;
+ int xHot = -1;
+ int yHot = -1;
+
+ public XbmHeader(int width, int height, int xHot, int yHot)
+ {
+ this.width = width;
+ this.height = height;
+ this.xHot = xHot;
+ this.yHot = yHot;
+ }
+
+ public void dump(PrintWriter pw)
+ {
+ pw.println("XbmHeader");
+ pw.println("Width: " + width);
+ pw.println("Height: " + height);
+ if (xHot != -1 && yHot != -1)
+ {
+ pw.println("X hot: " + xHot);
+ pw.println("Y hot: " + yHot);
+ }
+ }
+ }
+
+ private static class XbmParseResult
+ {
+ XbmHeader xbmHeader;
+ BasicCParser cParser;
+ }
+
+ private XbmHeader readXbmHeader(ByteSource byteSource)
+ throws ImageReadException, IOException
+ {
+ XbmParseResult result = parseXbmHeader(byteSource);
+ return result.xbmHeader;
+ }
+
+ private XbmParseResult parseXbmHeader(ByteSource byteSource)
+ throws ImageReadException, IOException
+ {
+ InputStream is = null;
+ try
+ {
+ is = byteSource.getInputStream();
+ Map defines = new HashMap();
+ ByteArrayOutputStream preprocessedFile = BasicCParser.preprocess(
+ is, null, defines);
+ int width = -1;
+ int height = -1;
+ int xHot = -1;
+ int yHot = -1;
+ for (Iterator it = defines.entrySet().iterator(); it.hasNext();)
+ {
+ Map.Entry entry = (Map.Entry)it.next();
+ String name = (String)entry.getKey();
+ if (name.endsWith("_width"))
+ width = Integer.parseInt((String)entry.getValue());
+ else if (name.endsWith("_height"))
+ height = Integer.parseInt((String)entry.getValue());
+ else if (name.endsWith("_x_hot"))
+ xHot = Integer.parseInt((String)entry.getValue());
+ else if (name.endsWith("_y_hot"))
+ yHot = Integer.parseInt((String)entry.getValue());
+ }
+ if (width == -1)
+ throw new ImageReadException("width not found");
+ if (height == -1)
+ throw new ImageReadException("height not found");
+
+ XbmParseResult xbmParseResult = new XbmParseResult();
+ xbmParseResult.cParser = new BasicCParser(
+ new ByteArrayInputStream(preprocessedFile.toByteArray()));
+ xbmParseResult.xbmHeader = new XbmHeader(width, height, xHot, yHot);
+ return xbmParseResult;
+ }
+ finally
+ {
+ try
+ {
+ if (is != null)
+ is.close();
+ }
+ catch (IOException ignored)
+ {
+ }
+ }
+ }
+
+ private BufferedImage readXbmImage(XbmHeader xbmHeader, BasicCParser cParser)
+ throws ImageReadException, IOException
+ {
+ String token;
+ token = cParser.nextToken();
+ if (token == null || !token.equals("static"))
+ throw new ImageReadException("Parsing XBM file failed, no 'static' token");
+ token = cParser.nextToken();
+ if (token == null)
+ throw new ImageReadException("Parsing XBM file failed, no 'unsigned' " +
+ "or 'char' token");
+ if (token.equals("unsigned"))
+ token = cParser.nextToken();
+ if (token == null || !token.equals("char"))
+ throw new ImageReadException("Parsing XBM file failed, no 'char' token");
+ String name = cParser.nextToken();
+ if (name == null)
+ throw new ImageReadException("Parsing XBM file failed, no variable name");
+ if (name.charAt(0) != '_' && !Character.isLetter(name.charAt(0)))
+ throw new ImageReadException("Parsing XBM file failed, variable name " +
+ "doesn't start with letter or underscore");
+ for (int i = 0; i < name.length(); i++)
+ {
+ char c = name.charAt(i);
+ if (!Character.isLetterOrDigit(c) && c != '_')
+ throw new ImageReadException("Parsing XBM file failed, variable name " +
+ "contains non-letter non-digit non-underscore");
+ }
+ token = cParser.nextToken();
+ if (token == null || !token.equals("["))
+ throw new ImageReadException("Parsing XBM file failed, no '[' token");
+ token = cParser.nextToken();
+ if (token == null || !token.equals("]"))
+ throw new ImageReadException("Parsing XBM file failed, no ']' token");
+ token = cParser.nextToken();
+ if (token == null || !token.equals("="))
+ throw new ImageReadException("Parsing XBM file failed, no '=' token");
+ token = cParser.nextToken();
+ if (token == null || !token.equals("{"))
+ throw new ImageReadException("Parsing XBM file failed, no '{' token");
+
+ int rowLength = (xbmHeader.width + 7) / 8;
+ byte[] imageData = new byte[rowLength * xbmHeader.height];
+ for (int i = 0; i < imageData.length; i++)
+ {
+ token = cParser.nextToken();
+ if (token == null || !token.startsWith("0x"))
+ throw new ImageReadException("Parsing XBM file failed, " +
+ "hex value missing");
+ if (token.length() > 4)
+ throw new ImageReadException("Parsing XBM file failed, " +
+ "hex value too long");
+ int value = Integer.parseInt(token.substring(2), 16);
+ int flipped = 0;
+ for (int j = 0; j < 8; j++)
+ {
+ if ((value & (1 << j)) != 0)
+ flipped |= (0x80 >>> j);
+ }
+ imageData[i] = (byte) flipped;
+
+ token = cParser.nextToken();
+ if (token == null)
+ throw new ImageReadException("Parsing XBM file failed, " +
+ "premature end of file");
+ if (!token.equals(",") && (i < (imageData.length - 1) || !token.equals("}")))
+ throw new ImageReadException("Parsing XBM file failed, " +
+ "punctuation error");
+ }
+
+ int[] palette = {0xffffff, 0x000000};
+ ColorModel colorModel = new IndexColorModel(1, 2,
+ palette, 0, false, -1, DataBuffer.TYPE_BYTE);
+ DataBufferByte dataBuffer = new DataBufferByte(imageData, imageData.length);
+ WritableRaster raster = WritableRaster.createPackedRaster(dataBuffer,
+ xbmHeader.width, xbmHeader.height, 1, null);
+ BufferedImage image = new BufferedImage(colorModel, raster,
+ colorModel.isAlphaPremultiplied(), new Properties());
+ return image;
+ }
+
+ public boolean dumpImageFile(PrintWriter pw, ByteSource byteSource)
+ throws ImageReadException, IOException
+ {
+ readXbmHeader(byteSource).dump(pw);
+ return true;
+ }
+
+ public final BufferedImage getBufferedImage(ByteSource byteSource,
+ Map params) throws ImageReadException, IOException
+ {
+ XbmParseResult result = parseXbmHeader(byteSource);
+ return readXbmImage(result.xbmHeader, result.cParser);
+ }
+
+ private String randomName()
+ {
+ UUID uuid = UUID.randomUUID();
+ StringBuilder stringBuilder = new StringBuilder("a");
+ long bits = uuid.getMostSignificantBits();
+ // Long.toHexString() breaks for very big numbers
+ for (int i = 64 - 8; i >= 0; i -= 8)
+ stringBuilder.append(Integer.toHexString((int)((bits >> i) & 0xff)));
+ bits = uuid.getLeastSignificantBits();
+ for (int i = 64 - 8; i >= 0; i -= 8)
+ stringBuilder.append(Integer.toHexString((int)((bits >> i) & 0xff)));
+ return stringBuilder.toString();
+ }
+
+ private String toPrettyHex(int value)
+ {
+ String s = Integer.toHexString(0xff & value);
+ if (s.length() == 2)
+ return "0x" + s;
+ return "0x0" + s;
+ }
+
+ public void writeImage(BufferedImage src, OutputStream os, Map params)
+ throws ImageWriteException, IOException
+ {
+ // make copy of params; we'll clear keys as we consume them.
+ params = (params == null) ? new HashMap() : new HashMap(params);
+
+ // clear format key.
+ if (params.containsKey(PARAM_KEY_FORMAT))
+ params.remove(PARAM_KEY_FORMAT);
+
+ if (params.size() > 0)
+ {
+ Object firstKey = params.keySet().iterator().next();
+ throw new ImageWriteException("Unknown parameter: " + firstKey);
+ }
+
+ String name = randomName();
+
+ os.write(("#define " + name + "_width " + src.getWidth() + "\n").getBytes("US-ASCII"));
+ os.write(("#define " + name + "_height " + src.getHeight() + "\n").getBytes("US-ASCII"));
+ os.write(("static unsigned char " + name + "_bits[] = {").getBytes("US-ASCII"));
+
+ int bitcache = 0;
+ int bits_in_cache = 0;
+ String separator = "\n ";
+ int written = 0;
+ for (int y = 0; y < src.getHeight(); y++)
+ {
+ for (int x = 0; x < src.getWidth(); x++)
+ {
+ int argb = src.getRGB(x, y);
+ int red = 0xff & (argb >> 16);
+ int green = 0xff & (argb >> 8);
+ int blue = 0xff & (argb >> 0);
+ int sample = (red + green + blue) / 3;
+ if (sample > 127)
+ sample = 0;
+ else
+ sample = 1;
+ bitcache |= (sample << bits_in_cache);
+ ++bits_in_cache;
+ if (bits_in_cache == 8)
+ {
+ os.write(separator.getBytes("US-ASCII"));
+ separator = ",";
+ if (written == 12)
+ {
+ os.write("\n ".getBytes("US-ASCII"));
+ written = 0;
+ }
+ os.write(toPrettyHex(bitcache).getBytes("US-ASCII"));
+ bitcache = 0;
+ bits_in_cache = 0;
+ ++written;
+ }
+ }
+ if (bits_in_cache != 0)
+ {
+ os.write(separator.getBytes("US-ASCII"));
+ separator = ",";
+ if (written == 12)
+ {
+ os.write("\n ".getBytes("US-ASCII"));
+ written = 0;
+ }
+ os.write(toPrettyHex(bitcache).getBytes("US-ASCII"));
+ bitcache = 0;
+ bits_in_cache = 0;
+ ++written;
+ }
+ }
+
+ os.write("\n};\n".getBytes("US-ASCII"));
+ }
+
+ /**
+ * Extracts embedded XML metadata as XML string.
+ * <p>
+ *
+ * @param byteSource
+ * File containing image data.
+ * @param params
+ * Map of optional parameters, defined in SanselanConstants.
+ * @return Xmp Xml as String, if present. Otherwise, returns null.
+ */
+ public String getXmpXml(ByteSource byteSource, Map params)
+ throws ImageReadException, IOException
+ {
+ return null;
+ }
+}
Propchange: commons/proper/sanselan/trunk/src/main/java/org/apache/sanselan/formats/xbm/XbmImageParser.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: commons/proper/sanselan/trunk/src/test/data/images/xbm/1/Oregon Scientific DS6639 - DSC_0307 - small.xbm
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/test/data/images/xbm/1/Oregon%20Scientific%20DS6639%20-%20DSC_0307%20-%20small.xbm?rev=1089997&view=auto
==============================================================================
--- commons/proper/sanselan/trunk/src/test/data/images/xbm/1/Oregon Scientific DS6639 - DSC_0307 - small.xbm (added)
+++ commons/proper/sanselan/trunk/src/test/data/images/xbm/1/Oregon Scientific DS6639 - DSC_0307 - small.xbm Thu Apr 7 20:41:24 2011
@@ -0,0 +1,717 @@
+#define adbe1c3fcd16143da8c2bd7adfa6dcf80_width 300
+#define adbe1c3fcd16143da8c2bd7adfa6dcf80_height 225
+static unsigned char adbe1c3fcd16143da8c2bd7adfa6dcf80_bits[] = {
+ 0xff,0xfd,0xff,0xff,0xff,0x7f,0xef,0x3f,0xfe,0xdf,0xff,0xff,
+ 0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,
+ 0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,
+ 0xff,0x0f,0xfd,0xff,0xff,0xff,0xff,0xbf,0xd6,0x4b,0xfd,0xff,
+ 0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,
+ 0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xc1,
+ 0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x9f,0xff,
+ 0xff,0x7f,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xfa,0xff,0xff,0xff,0x0f,0xde,0xfd,0xff,0xff,0xff,0xff,
+ 0x0a,0x80,0xce,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xfe,0xff,0xff,0xff,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0xff,
+ 0xff,0xaf,0x0b,0x20,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0x7f,
+ 0xff,0xff,0xfc,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0x0f,0xff,0xfd,
+ 0xff,0xff,0xbf,0xdf,0x2e,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xd7,0xff,0xfe,0x5f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfa,0xff,0xff,0xff,0x0f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xab,0xfa,0xfb,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xdf,0xff,0xf3,0xe3,0xff,0xff,0xfd,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xfe,0xd3,0xff,0xff,
+ 0xff,0x0f,0xfc,0xdf,0xff,0xff,0xff,0xfe,0xdf,0xff,0xfc,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xcf,0xff,0xff,0xfd,
+ 0xf3,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xff,0xee,
+ 0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0x5a,0xef,
+ 0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd3,0xdf,0xff,
+ 0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xae,0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xdf,0xaf,0xe7,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,
+ 0xbf,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,
+ 0xfb,0xff,0xff,0xbf,0xff,0xff,0xff,0x0f,0xff,0xaf,0xff,0xff,
+ 0xff,0xbf,0xef,0xfd,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,
+ 0xfd,0xb3,0xfe,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0x1b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xfb,0x33,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xdf,0xff,0xff,0xff,0x0f,
+ 0xff,0xef,0xff,0xff,0xff,0xff,0xfd,0xb2,0xff,0xff,0xef,0xff,
+ 0xff,0x7f,0x7f,0xff,0xff,0x8f,0x7b,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xff,0xff,
+ 0xff,0x0f,0xf7,0xff,0xff,0xff,0xff,0xff,0xf7,0xe5,0xfe,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x8b,0x77,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xfd,
+ 0xff,0xff,0xff,0x0f,0xbf,0xdd,0xff,0xff,0xff,0xff,0x13,0xf4,
+ 0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xdb,0xff,0xaf,0xf7,0xf7,
+ 0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x0f,0xeb,0xf7,0xff,0xbf,0xff,0xff,
+ 0x71,0x3a,0xfe,0xff,0xff,0xf7,0x3f,0xf7,0xff,0xdf,0x8f,0xfb,
+ 0xfc,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf6,0xfe,0xff,0xdf,
+ 0xff,0xff,0x7e,0xd5,0xf4,0xff,0xff,0xff,0x4f,0xf8,0xff,0x9f,
+ 0x97,0xff,0xff,0xdf,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xfc,0xff,0xff,0xff,0x0f,0xeb,0xff,
+ 0xff,0xfe,0xff,0xff,0xff,0xd8,0xdd,0xff,0xff,0xff,0x2f,0xf0,
+ 0xff,0x0f,0x5f,0xbf,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,
+ 0xaa,0xf5,0xff,0xff,0xfb,0xef,0xff,0x1b,0xa7,0xff,0xff,0xff,
+ 0x0f,0xff,0xff,0xff,0x3d,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,
+ 0xff,0x0f,0xbd,0x6a,0xff,0xff,0xff,0xff,0xff,0xff,0xdd,0xff,
+ 0xff,0xff,0x3f,0xdf,0x7f,0xff,0x7f,0x1d,0xff,0xff,0xff,0xff,
+ 0xff,0xf1,0xfe,0xff,0x7f,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x0f,0xee,0xa9,0xef,0xff,0xd7,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xdf,0xbf,0xff,0xff,0xff,0x5e,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xff,0xff,0xff,0xef,
+ 0xff,0xcf,0xfe,0xff,0xff,0x0f,0x57,0x57,0xfe,0xef,0xbf,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xdd,0xff,0xff,0xff,0xdf,
+ 0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,
+ 0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0x0f,0xaa,0x55,0xff,0xff,
+ 0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xdf,0xff,0xff,
+ 0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0x0f,0x5d,0xd5,
+ 0xfa,0xfa,0x7f,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,
+ 0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xfe,0xff,0xff,
+ 0x9f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,
+ 0xaa,0xaa,0x7d,0xfb,0xdf,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xe7,0xff,0xf3,0xff,0xff,
+ 0xff,0xff,0x9f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x0f,0x55,0x55,0xed,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x86,0xff,0xff,0xff,0xff,0xff,0x9f,0xff,0xff,0xff,
+ 0xff,0xfc,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xaf,
+ 0xff,0xff,0xff,0x0f,0xaa,0xea,0xee,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x6f,0x93,0xbf,0xff,0xff,0xff,0xbf,0xcf,0xff,
+ 0xff,0xff,0xdf,0xff,0xf7,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x0f,0x55,0xf9,0x7d,0xfd,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xfe,0xef,0x9f,0xff,0xfc,0xff,0xff,0xbf,
+ 0xdf,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0x0f,0x55,0x7d,0xfe,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xfb,0xff,0x1f,0xf0,0xbf,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xaa,0xfa,
+ 0xff,0xf7,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,
+ 0xff,0xff,0xff,0x7f,0xf3,0xff,0x07,0x00,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,
+ 0x55,0xfd,0xff,0xc3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x18,0xff,0xff,0xff,0xff,0xec,0xff,0x01,0x00,0xf8,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x0f,0xaa,0xb2,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xfe,0xf3,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,
+ 0xc0,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x0f,0x85,0x98,0xff,0xef,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xf8,0xff,0xbf,0xf7,0xff,0xff,0xff,0xff,0x0f,
+ 0x00,0x00,0x00,0x84,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x0f,0x0a,0x80,0x5f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x3f,0xcc,0xac,0xff,0x8f,0xff,0xff,0xff,0xff,
+ 0xff,0x03,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xf9,0xff,0xff,0xff,0x0f,0x02,0xc4,0xbf,0xfb,
+ 0xff,0xff,0xff,0xff,0xff,0x8f,0x54,0x04,0xfe,0x5f,0xff,0xff,
+ 0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x12,0x80,
+ 0x7f,0xf5,0xff,0xff,0xff,0xff,0xff,0xcf,0x70,0xed,0xfe,0xff,
+ 0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x02,0x00,0x00,0xff,
+ 0xff,0x7f,0xfb,0xff,0xff,0xff,0xff,0xe7,0xff,0xff,0xff,0x0f,
+ 0x82,0x80,0xff,0xfe,0xff,0xff,0xef,0xff,0xff,0xd3,0xd8,0x39,
+ 0xff,0xf7,0xff,0xff,0xff,0xff,0x0d,0x00,0x00,0x00,0x3c,0x00,
+ 0x00,0xf8,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x0f,0x15,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x33,
+ 0x3f,0xff,0xf0,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,
+ 0xe0,0x01,0x00,0xc0,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x0f,0x00,0x00,0xff,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xf4,0x7a,0xd7,0xe1,0xff,0xff,0xff,0xfb,0xff,0x00,0x00,
+ 0x00,0x00,0x00,0x0f,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xfd,0xff,0xff,0x0f,0x45,0x00,0xfc,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xf4,0xe6,0x7f,0xf0,0xff,0xff,0xff,0xed,0x3f,
+ 0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x02,0xf8,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0x0f,0x00,0x80,0xff,0xff,
+ 0xff,0xff,0xff,0x4f,0xf7,0x1f,0xf7,0xff,0xfc,0xff,0xf4,0xff,
+ 0xf9,0x1f,0x00,0x08,0x00,0x00,0x00,0xe0,0x03,0x1e,0xf0,0xfd,
+ 0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0x0f,0x02,0x00,
+ 0xfe,0xff,0xff,0xff,0xff,0xff,0xf7,0xfc,0xff,0xfb,0xfc,0xff,
+ 0xfd,0xff,0xd0,0x02,0x00,0x0e,0x00,0x00,0x01,0xe0,0x3f,0x3c,
+ 0xe0,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,
+ 0x00,0x40,0xff,0xfd,0xff,0xff,0xbf,0xff,0xff,0xe7,0xff,0xbf,
+ 0xff,0xff,0xfe,0xdf,0xd0,0x00,0x80,0x0f,0x00,0x00,0x02,0xc8,
+ 0xfc,0x21,0x80,0xf9,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x0f,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xc7,
+ 0xf5,0xfe,0xff,0xfd,0x5c,0x4f,0x38,0x00,0xf0,0x0f,0x00,0x00,
+ 0x01,0xe0,0xfe,0x1f,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0xef,
+ 0xff,0xff,0xff,0x0f,0x02,0xe0,0xff,0xff,0xff,0xff,0xff,0xee,
+ 0xff,0xe1,0xf8,0xff,0xff,0xf6,0x3e,0x3f,0x09,0x00,0xf0,0x0f,
+ 0x00,0x00,0x01,0xc0,0xfd,0x7f,0x00,0xe0,0xff,0xff,0xff,0xff,
+ 0xff,0xe7,0xff,0xff,0xff,0x0f,0x00,0xe0,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xdb,0xff,0xff,0xff,0xe7,0x85,0x7f,0x01,0x00,
+ 0xf8,0x07,0x00,0x00,0x01,0xe0,0xfe,0xff,0x03,0x00,0xff,0xff,
+ 0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0x0f,0x00,0xc0,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xaf,0xff,0xff,0xff,0xff,0xfd,0xc7,0xff,
+ 0x00,0x00,0xf8,0x0f,0x00,0x00,0x01,0xc0,0xfd,0x7f,0x3f,0x00,
+ 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x02,0xc0,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3e,0xfe,0x5f,
+ 0x3f,0x7f,0x00,0x00,0xf8,0x07,0x00,0x80,0x05,0xc0,0xfe,0x7f,
+ 0xff,0x01,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,
+ 0x00,0xc0,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,
+ 0xfe,0x7f,0xff,0x1f,0x00,0x00,0xf8,0x07,0x00,0x80,0x1f,0xc0,
+ 0xfe,0x7f,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x0f,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x3f,0xff,0x03,0x00,0x00,0xfc,0x07,0x00,0x80,
+ 0xff,0xc1,0xfd,0x7f,0xff,0x7f,0xf0,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x0f,0x00,0xe2,0xff,0xfe,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0x00,0x00,0x00,0xf8,0x07,
+ 0x00,0x00,0xff,0xef,0xfe,0x7f,0xff,0xdf,0xe3,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x0f,0x81,0xf8,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x45,0x00,0x00,0x00,
+ 0xfc,0x07,0x08,0x00,0xfc,0xff,0xff,0x7c,0xff,0x1f,0x8e,0xff,
+ 0xff,0xff,0xff,0x9f,0xff,0xff,0xff,0x0f,0x40,0xff,0xf7,0xff,
+ 0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1d,0x00,
+ 0x00,0x00,0xfc,0x03,0x01,0x00,0xc2,0xff,0xff,0xff,0xff,0x5f,
+ 0x70,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x20,0xef,
+ 0xff,0xbf,0xf6,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x07,0x00,0x00,0x00,0x7c,0xc0,0x00,0x00,0x40,0xfc,0xff,0x7f,
+ 0xff,0x1f,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,
+ 0xc4,0xff,0xbe,0xfb,0xfb,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xbf,0x03,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0xe1,
+ 0xff,0xff,0xff,0x5f,0x44,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x0f,0x80,0xff,0x93,0xf3,0xbf,0xff,0xdf,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,
+ 0x00,0x20,0xfe,0x7f,0x7f,0x1f,0x01,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x0f,0xe1,0xf7,0xdd,0xff,0xfd,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x00,0xf1,0xff,0xff,0x5f,0x44,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0x0f,0x80,0xd9,0xe7,0xfd,0xfb,0xff,
+ 0xfc,0xff,0xff,0xff,0xff,0xff,0xfd,0x0f,0x00,0x00,0x00,0x10,
+ 0x30,0x00,0x00,0x00,0x00,0x00,0x08,0xff,0xff,0x3f,0x00,0xfe,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0xe4,0x7c,0xed,
+ 0xe7,0xff,0xb7,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,
+ 0x00,0x0e,0x04,0x00,0x00,0x00,0x0e,0x00,0x80,0xf2,0xff,0x5f,
+ 0x80,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x01,0x00,
+ 0x7e,0xcc,0xff,0x7b,0x3f,0xff,0xff,0xdf,0xff,0xff,0xff,0x00,
+ 0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0xfe,0x00,0x00,0x80,
+ 0xff,0x5f,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,
+ 0x00,0x00,0x1e,0xe5,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0x00,0x00,0x00,0xc0,0x60,0x00,0x00,0x00,0x00,0xff,0x0f,
+ 0x00,0x40,0xfe,0x7f,0x00,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xf7,0x0f,0x00,0x00,0x72,0xe2,0xff,0xbf,0xfb,0xff,0xff,0xff,
+ 0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,
+ 0xfe,0xff,0x00,0x00,0xc8,0xff,0x07,0xfd,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xfb,0x0f,0x00,0x00,0x3f,0xbd,0xff,0xff,0xef,0xff,
+ 0xef,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+ 0x00,0x00,0xfe,0xff,0x0f,0x00,0xa0,0xfe,0x3f,0xf8,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xaf,0xfd,0xfd,0xbf,
+ 0xff,0xff,0xff,0xff,0xfb,0xff,0x01,0x00,0x00,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x00,0xfe,0xff,0x7f,0x00,0x00,0xe1,0xff,0xf9,
+ 0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0x0f,0x01,0x85,0xf3,0xfd,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0x00,0x00,0x00,0x00,
+ 0x10,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x07,0x00,0x10,
+ 0xff,0xf3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x28,
+ 0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0x1f,0x3f,0x00,0x00,
+ 0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x1f,
+ 0x00,0x00,0xf8,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,
+ 0x80,0xc2,0xfa,0xff,0xfe,0xff,0xff,0xfd,0xff,0xff,0xf7,0x0f,
+ 0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,
+ 0xff,0x3f,0x00,0x00,0x44,0xe3,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x0f,0x20,0x75,0xff,0xff,0xff,0xff,0xdf,0xfd,0xff,0xff,
+ 0xbf,0x03,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xfe,0xff,0xff,0x7f,0x38,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x0f,0x48,0xd5,0xfb,0xff,0xff,0xff,0xff,0xfd,
+ 0xff,0xff,0x5f,0x01,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfc,0xff,0xff,0x7f,0xf8,0x03,0x00,0xe0,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x0f,0x90,0xbe,0xfb,0xff,0xff,0xff,
+ 0xff,0xeb,0xff,0xff,0x37,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xf8,0x1f,0x00,0xc0,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x78,0xfd,0xfb,0xff,
+ 0xff,0xff,0xff,0xfb,0xff,0xff,0x0d,0x00,0x00,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xf0,0xff,
+ 0x00,0xc0,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0x0f,0x68,0xeb,
+ 0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,
+ 0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,
+ 0xf0,0xff,0x0f,0x80,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0x0f,
+ 0xf2,0x2a,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x6f,0x01,0x00,
+ 0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,
+ 0xff,0xff,0xf1,0xff,0x7f,0x80,0xff,0xff,0xfe,0xff,0xff,0xff,
+ 0xff,0x0f,0x68,0xd1,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xfc,0xff,0xff,0xff,0xe1,0xff,0xff,0x03,0xff,0xbf,0xfe,0xff,
+ 0xff,0xff,0xff,0x0f,0xd5,0x4e,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xbf,0x3f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfc,0xff,0xff,0xff,0xe1,0xff,0xff,0x0f,0xfe,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x0f,0x54,0xeb,0xfb,0xff,0xff,0xff,
+ 0xff,0xfd,0x7f,0x0e,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xe1,0xff,0xff,0x0f,
+ 0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0x0f,0x5a,0xd5,0xff,0xdf,
+ 0xff,0xff,0xff,0xf6,0x7f,0x07,0x00,0x00,0x00,0x02,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xc3,0xff,
+ 0xff,0x1f,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xae,0xaa,
+ 0xff,0xff,0xff,0xff,0xff,0x5f,0xbf,0x01,0x00,0x00,0x80,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,
+ 0xc3,0xff,0xff,0x3f,0xfc,0xff,0xef,0xff,0xff,0xff,0xff,0x0f,
+ 0x5b,0xd7,0xff,0xff,0xfe,0xff,0xef,0x4b,0x3a,0x01,0x00,0x00,
+ 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,
+ 0xff,0xff,0xc3,0xff,0xff,0x3f,0xfc,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x0f,0x56,0xed,0xff,0xff,0xff,0xff,0x8f,0xf9,0x93,0x00,
+ 0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xfc,0xff,0xff,0xff,0xc7,0xff,0xff,0x7f,0xf8,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x0f,0xad,0xea,0xff,0x7f,0xff,0xff,0x57,0xfe,
+ 0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xf8,0xff,0xff,0xff,0x87,0xff,0xff,0x7f,0xf8,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x0f,0x7a,0xbf,0xff,0xff,0xff,0xff,
+ 0x7f,0x70,0x6f,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0x87,0xff,0xff,0xff,
+ 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xee,0xfe,0xff,0xdf,
+ 0xff,0xff,0xdc,0xfb,0x67,0x02,0x00,0x30,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0x87,0xff,
+ 0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xdd,0x57,
+ 0xff,0xff,0xff,0xff,0xa0,0xfa,0x3f,0x03,0x00,0x08,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,
+ 0x87,0xff,0xff,0xff,0xe1,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,
+ 0x6a,0xab,0xfa,0xff,0xff,0x7f,0x00,0xff,0xd2,0x03,0x00,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xff,
+ 0xff,0xff,0x0f,0xff,0xff,0xff,0xe1,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x0f,0x8b,0xfa,0xf5,0xff,0xff,0x7f,0x66,0xde,0xfc,0x03,
+ 0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xf8,0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0xc1,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x0f,0xaa,0xff,0xea,0xf7,0xff,0x7f,0x80,0xbf,
+ 0xde,0x03,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xf8,0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0x83,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x0f,0xd4,0xff,0xf7,0xdf,0xef,0xff,
+ 0x51,0xad,0xcd,0xe3,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0x0f,0xff,0xff,0xff,
+ 0x03,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xaa,0xa4,0xed,0xff,
+ 0x5f,0xee,0xc7,0x53,0xe4,0x91,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0x1f,0xff,
+ 0xff,0xff,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x1b,0x57,
+ 0xe2,0xff,0xef,0xdf,0x3b,0x0b,0xe1,0xa1,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,
+ 0x0f,0xfe,0xff,0xff,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,
+ 0xe5,0xeb,0x6d,0xeb,0xef,0xe7,0x4f,0xa3,0xe0,0x11,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,
+ 0xff,0xff,0x1f,0xfe,0xff,0xff,0x0f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x0f,0xfc,0x5b,0xf7,0xf6,0x9f,0x91,0x85,0x28,0xe0,0x04,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,
+ 0xc0,0xff,0xff,0xff,0x1f,0xfe,0xff,0xff,0x0f,0xfe,0xff,0xff,
+ 0xbf,0xff,0xff,0x0f,0xfe,0xb9,0xfa,0xff,0x4f,0x02,0x00,0x0a,
+ 0x20,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,
+ 0x5f,0xf8,0x01,0xfc,0xff,0xff,0x1f,0xfe,0xff,0xff,0x0f,0xfe,
+ 0xff,0xe7,0xbf,0xff,0xff,0x0f,0x7f,0xef,0x6f,0xef,0x15,0x54,
+ 0x32,0x05,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xf8,0x7f,0xe8,0x7f,0x40,0xff,0xff,0x1f,0xfe,0xff,0xff,
+ 0x0f,0xfe,0xff,0xff,0x9f,0xff,0xff,0x0f,0x7d,0xff,0x9f,0xbf,
+ 0x7f,0x55,0x89,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x80,0xff,0x5f,0xf4,0xff,0x0f,0xf0,0xff,0x3f,0xfe,
+ 0xff,0xff,0x1f,0xfc,0xff,0xdf,0x9f,0xfd,0xff,0x0f,0xf7,0xfe,
+ 0x7f,0xfb,0xfb,0xda,0xa2,0x04,0x14,0x00,0x80,0x05,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xe0,0xff,0x7f,0xe8,0xff,0xfe,0x01,0xfe,
+ 0x1f,0xfe,0xff,0xff,0x1f,0xfc,0xff,0xff,0x9f,0xff,0xff,0x0f,
+ 0x9e,0xda,0xde,0xdd,0x1f,0x7f,0x9c,0x05,0x02,0x00,0xb0,0x02,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x5f,0xfc,0xff,0xf2,
+ 0x1f,0xe0,0x1f,0xfc,0xff,0xff,0x1f,0xfc,0xff,0xff,0xff,0xfd,
+ 0xff,0x0f,0xf5,0xbd,0xfa,0xbe,0x5e,0x9c,0xfa,0x83,0x00,0x00,
+ 0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xff,0xff,0x7f,0xe8,
+ 0xfb,0x00,0xfd,0x07,0x08,0xfc,0xff,0xff,0x1f,0xfc,0xff,0xff,
+ 0xff,0xff,0xff,0x0f,0xaa,0x65,0xf5,0xc3,0x2b,0x5e,0x75,0x41,
+ 0x00,0x80,0xca,0x01,0x00,0x00,0x00,0x00,0x00,0x14,0xfe,0xff,
+ 0x7f,0xfc,0xff,0x04,0xa1,0xbf,0x00,0xf8,0xff,0xff,0x3f,0xf8,
+ 0xff,0xff,0xff,0xff,0xff,0x0f,0xe9,0x2a,0xfa,0xd7,0x6b,0x2c,
+ 0x75,0x11,0x00,0xa0,0x5d,0x01,0x00,0x00,0x00,0x00,0x00,0x19,
+ 0xff,0xff,0x5f,0xf4,0xff,0x00,0x09,0xfd,0x0f,0xf0,0xff,0xff,
+ 0x3f,0xf8,0xff,0xff,0xff,0xff,0xff,0x0f,0x2a,0xd9,0xdd,0x57,
+ 0xe9,0xcf,0xa5,0x09,0x00,0xb0,0xf5,0x01,0x00,0x00,0x00,0x00,
+ 0xa0,0xc0,0xff,0xff,0x7f,0xfc,0xff,0x00,0x00,0xe1,0xfe,0x00,
+ 0xff,0xff,0x3f,0xf0,0xff,0xff,0xff,0xff,0xff,0x0f,0x55,0x35,
+ 0xff,0xad,0xaa,0xd9,0xc9,0x02,0x00,0x18,0x2f,0x00,0x00,0x00,
+ 0x00,0x00,0xb4,0x4a,0xff,0xff,0xbf,0xf4,0xff,0x04,0xa9,0xc4,
+ 0xe8,0x1f,0xc0,0xff,0x3f,0xf0,0xff,0xff,0xff,0xff,0xff,0x0f,
+ 0x12,0xd5,0x7d,0xfd,0x9a,0x06,0xc9,0x18,0x00,0x0c,0xa5,0x01,
+ 0x00,0x00,0x00,0x00,0x26,0x0e,0xff,0xff,0x7f,0xff,0x7f,0x00,
+ 0x81,0xc1,0x00,0xff,0x03,0xfe,0x3f,0xf0,0xff,0xff,0xff,0xff,
+ 0xff,0x0f,0x6b,0xa9,0xdb,0xff,0xb1,0xc0,0x7c,0x1c,0x00,0x84,
+ 0x37,0x00,0x00,0x00,0x00,0x68,0xa4,0x88,0xff,0xff,0x3f,0x54,
+ 0xff,0x03,0x20,0xc1,0x20,0xf4,0x7f,0x80,0x3f,0xf0,0xff,0xff,
+ 0xff,0xff,0xff,0x0f,0xf5,0x67,0xfd,0xf3,0x51,0x42,0x15,0x0f,
+ 0x00,0x86,0x1c,0x00,0x00,0x00,0x00,0x21,0xa4,0xe0,0xff,0xff,
+ 0xff,0x7e,0xff,0x3f,0x00,0xc0,0x08,0x01,0xfe,0x07,0x18,0xe0,
+ 0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0x5f,0xf7,0xe2,0x1d,0xb8,
+ 0x9f,0x07,0x00,0x86,0x05,0x00,0x00,0x00,0x40,0xa2,0x85,0xe9,
+ 0xff,0x9f,0xff,0x7f,0xa0,0xff,0x2f,0xc0,0x20,0x90,0x26,0xff,
+ 0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0xbf,0x3f,0xd0,
+ 0x1b,0xe0,0xed,0x07,0x00,0xc7,0x00,0x00,0x00,0x00,0x28,0x8a,
+ 0x81,0x03,0xff,0x00,0xff,0x7e,0x00,0xf0,0xff,0xc3,0x28,0x14,
+ 0x86,0xf4,0x1f,0xe0,0xff,0xff,0xff,0xff,0xdf,0x0f,0xff,0xff,
+ 0xff,0xf1,0xb3,0xd6,0xea,0x06,0x00,0x3d,0x00,0x00,0x00,0x00,
+ 0x82,0x8a,0x05,0x08,0x2f,0x80,0x7f,0x7f,0x00,0x00,0xfc,0xff,
+ 0x20,0x90,0xa6,0x40,0xff,0xe1,0xff,0xff,0xff,0xff,0xff,0x0f,
+ 0xff,0xff,0xfd,0xbf,0x77,0x10,0xf6,0x03,0x00,0x0d,0x00,0x00,
+ 0x00,0x20,0xb2,0x81,0x91,0xe8,0x01,0x80,0xff,0x7c,0x00,0x00,
+ 0x40,0xff,0x0f,0x00,0x06,0x04,0xe8,0xef,0xff,0xff,0xff,0xff,
+ 0xff,0x0f,0xff,0x77,0xfb,0xcf,0xec,0x65,0xf7,0x02,0x80,0x01,
+ 0x00,0x00,0x00,0x38,0x18,0x91,0x90,0x3e,0x00,0x80,0xff,0x7f,
+ 0x00,0x00,0x00,0xe0,0xff,0x05,0xa6,0x05,0xe0,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x0f,0xaf,0x5f,0xff,0x5d,0xef,0xd9,0xb9,0x02,
+ 0x00,0x10,0x00,0x00,0x80,0xbf,0x20,0x18,0xf2,0x05,0x00,0x80,
+ 0x7f,0x7f,0x00,0x00,0x00,0x00,0xfc,0x7f,0x8c,0x10,0xe8,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x0f,0x3e,0xff,0xff,0x75,0x98,0x75,
+ 0x5d,0x01,0x00,0x00,0x00,0x00,0xb0,0xbf,0xf0,0x38,0x7e,0x00,
+ 0x00,0x80,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0xff,0x0f,0x10,
+ 0xc2,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xfb,0x6f,0xfb,0xe7,
+ 0xdf,0x69,0x5d,0x01,0x00,0x00,0x00,0x00,0xa6,0x3f,0x59,0xfc,
+ 0x03,0x00,0x00,0x80,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0xe0,
+ 0xff,0x15,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xdf,0xff,
+ 0xef,0xff,0x7f,0x67,0xae,0x00,0x00,0x00,0x00,0x80,0xb4,0x3f,
+ 0x1a,0xbd,0x00,0x00,0x00,0x80,0x7f,0x7f,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xf8,0xbf,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,
+ 0xff,0xef,0xf7,0xff,0x6f,0xbf,0xef,0x00,0x00,0x00,0x00,0x70,
+ 0xa4,0x5f,0x10,0x07,0x00,0x00,0x00,0x80,0xff,0x7f,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x40,0xff,0xc7,0xff,0xff,0xff,0xff,0xff,
+ 0xdf,0x0f,0xff,0x17,0xe5,0xff,0x87,0x7e,0x57,0x00,0x00,0x00,
+ 0x00,0x52,0xb7,0x9f,0xf0,0x00,0x00,0x00,0x00,0x80,0xff,0x7f,
+ 0x00,0xc0,0x00,0x00,0x00,0xc0,0x00,0xf0,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x0f,0xff,0x4f,0x2b,0xfb,0xe1,0xb7,0x6b,0x00,
+ 0x00,0x00,0x40,0x00,0x93,0xdf,0x0f,0x00,0x00,0x00,0x00,0x80,
+ 0x7f,0x7d,0x00,0xe0,0x01,0x00,0x00,0xe0,0x1f,0x00,0xfc,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x0f,0xbd,0xff,0x3d,0xd4,0xcb,0xff,
+ 0x57,0x00,0x00,0x00,0x30,0x89,0xd3,0xff,0x01,0x00,0x00,0x00,
+ 0x00,0x80,0xff,0x7c,0x00,0x60,0x91,0x01,0x00,0xe0,0xff,0x07,
+ 0x40,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x5f,0xff,0x7c,0xa2,
+ 0xf2,0xdb,0x7d,0x00,0x00,0x00,0x47,0x83,0x13,0x1f,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0xff,0x7f,0x00,0x60,0x90,0x39,0x00,0xe0,
+ 0xff,0x7f,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0x0f,0xe6,0xf7,
+ 0xff,0x42,0xf9,0xeb,0x7f,0x00,0x00,0xc0,0x17,0x8c,0xa8,0x03,
+ 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x7f,0x00,0x60,0xd0,0x49,
+ 0x00,0xe0,0xff,0xff,0x03,0xf0,0xff,0xbf,0xff,0xff,0xff,0x0f,
+ 0xbb,0x57,0xdf,0x5e,0xff,0xef,0x3f,0x00,0x00,0xa8,0x07,0x05,
+ 0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x7f,0x00,0xf0,
+ 0x50,0x49,0x00,0xe0,0xff,0xff,0x03,0xf0,0xff,0xff,0xff,0xff,
+ 0xff,0x0f,0x7f,0x7e,0xcf,0x58,0xfe,0xf9,0x3f,0x00,0x00,0x8a,
+ 0x87,0x45,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x37,0x34,
+ 0x00,0x30,0x61,0x39,0x00,0xe0,0xff,0xff,0x03,0xf0,0xff,0x7f,
+ 0xff,0xff,0xff,0x0f,0x7f,0xcd,0x3c,0x2e,0xfe,0xf7,0x3f,0x00,
+ 0x60,0xca,0x07,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
+ 0x49,0x68,0x00,0x00,0x69,0x28,0x00,0xe0,0x40,0xff,0x03,0xe0,
+ 0xff,0xff,0xfe,0xff,0xff,0x0f,0xff,0x3a,0x3b,0x4f,0xfe,0xfb,
+ 0x3f,0x00,0x48,0x88,0x07,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xa0,0x8a,0x21,0x00,0x00,0x00,0x00,0x49,0x00,0xe0,0x00,0xf8,
+ 0x03,0xf0,0xff,0x77,0xfe,0xff,0xff,0x0f,0xff,0x6b,0xf7,0xf3,
+ 0xff,0xf9,0x1f,0x00,0x81,0xcb,0xe3,0x01,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x50,0x02,0x01,0x20,0x00,0x00,0x00,0x40,0x00,0xc0,
+ 0x01,0xe0,0x03,0xe0,0xff,0xff,0xfc,0xff,0xff,0x0f,0xff,0xfb,
+ 0xfe,0xf5,0xff,0xfd,0x9b,0xa0,0x94,0xc9,0x3f,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x90,0x8a,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xe0,0x00,0xc0,0x03,0xf0,0xff,0xff,0xfd,0xff,0xff,0x0f,
+ 0xef,0xf7,0xef,0xfc,0xff,0xfd,0x1f,0x3c,0xa6,0xd1,0x0b,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x12,0x05,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xc0,0x00,0xc0,0x03,0xe0,0xff,0xff,0xf8,0xff,
+ 0xff,0x0f,0xf7,0x1f,0xcd,0xff,0xff,0xfc,0x8f,0xae,0x20,0xfa,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x0d,0x01,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xe0,0x00,0xc0,0x03,0xe0,0xff,0xff,
+ 0xff,0xff,0xff,0x0f,0xc7,0xdf,0xc0,0xff,0xff,0xfd,0x03,0x2f,
+ 0x16,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x11,
+ 0x00,0x00,0x80,0x01,0x00,0x00,0x00,0xc0,0x01,0xc0,0x03,0xe0,
+ 0xff,0xff,0xff,0xff,0xff,0x0f,0x8f,0xdf,0xdf,0xe7,0xff,0x7f,
+ 0xf8,0x2f,0xd6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x1d,0x00,0x00,0x40,0x53,0x00,0x00,0x00,0x60,0x01,0xc0,
+ 0x03,0xe0,0xff,0xff,0xff,0xff,0xff,0x0f,0x1f,0xfd,0xdd,0xfb,
+ 0xff,0x3f,0xff,0x2f,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xf0,0x02,0x00,0x00,0x80,0x91,0x01,0x00,0x00,0xe0,
+ 0x17,0x80,0x03,0xe0,0xff,0xff,0xf7,0xff,0xff,0x0f,0xff,0xff,
+ 0xeb,0xfd,0xd7,0xcf,0xff,0x87,0x07,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0xff,0x00,0x00,
+ 0x00,0xc0,0xff,0xc7,0x03,0xe0,0xff,0xff,0xe7,0xff,0xff,0x0f,
+ 0xff,0xff,0xff,0xf7,0x5d,0xf3,0xff,0xdf,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0xff,0xbf,0x03,0xe0,0xff,0xff,0xe7,0xff,
+ 0xff,0x0f,0xff,0xff,0xff,0xf7,0x89,0xff,0xff,0x3f,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x03,0xe0,0xff,0xff,
+ 0xe1,0xff,0xff,0x0f,0xff,0xfb,0xff,0xf7,0xe5,0xff,0xff,0x05,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x03,0xa0,
+ 0xff,0xff,0xc1,0xff,0xff,0x0f,0xff,0xff,0x9f,0xff,0xf3,0xff,
+ 0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x0f,0x9f,0xfd,0xef,0xff,
+ 0xfd,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0xff,
+ 0xf7,0xbf,0xff,0xff,0x0b,0x00,0x00,0x00,0x00,0x00,0xc0,0x1f,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x08,0x00,0x78,0x20,0xff,0xff,0xff,0xff,0xff,0x0f,
+ 0xfb,0xff,0xff,0xdf,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xf8,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0xc5,0x03,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xc0,0xff,0xff,0xff,0xff,
+ 0xff,0x0f,0xef,0xef,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xca,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x80,0xfe,0xff,
+ 0xff,0xff,0xff,0x0f,0xef,0xff,0xff,0xf3,0xff,0x03,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0xfb,0xff,0xf7,0xff,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0x01,0x00,0x00,0x00,
+ 0x00,0x80,0xea,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0xff,
+ 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0x03,0x00,
+ 0x00,0x00,0x00,0x00,0xff,0x07,0x00,0x08,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0xff,
+ 0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0xff,
+ 0x03,0x00,0x00,0x00,0x00,0x00,0xff,0x57,0x03,0x14,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0x0f,
+ 0xff,0xff,0xff,0xff,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf4,0x07,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9f,0xff,0xff,0xff,
+ 0xff,0x0f,0xff,0xff,0xff,0x7f,0x01,0x30,0x00,0x00,0x00,0x00,
+ 0x00,0xe0,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xfc,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x8f,0xff,
+ 0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0x1f,0x01,0x44,0x00,0x00,
+ 0x00,0x00,0x00,0xe0,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0x00,
+ 0x05,0x00,0xdc,0x02,0xd0,0x0f,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x0f,0xff,0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0x8f,0x00,0x16,
+ 0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x07,0x00,0x00,0x00,
+ 0x00,0xb0,0x0a,0x00,0x00,0xaa,0x05,0xe0,0x17,0x00,0x00,0x00,
+ 0x00,0x00,0x9f,0xff,0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0x47,
+ 0x00,0xe6,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0x0f,0x00,
+ 0x00,0x00,0xf8,0xff,0x01,0x00,0x50,0xa5,0x2a,0x09,0x40,0x3f,
+ 0x00,0x00,0x00,0x00,0xc0,0xff,0xff,0xff,0xff,0x0f,0xff,0xff,
+ 0xff,0xcf,0x00,0x17,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,
+ 0x0f,0x00,0x00,0xe0,0xff,0xff,0x96,0x00,0x4a,0xd1,0x5f,0x75,
+ 0x2f,0x40,0x5f,0x00,0x18,0x00,0xd8,0xff,0xff,0xff,0xff,0x0f,
+ 0xff,0xff,0xff,0x67,0x00,0x77,0x00,0x00,0x00,0x00,0x00,0xe0,
+ 0xff,0xff,0x0f,0x00,0xd0,0xff,0xff,0xff,0x7f,0x01,0x90,0x6a,
+ 0x57,0xbb,0xda,0x15,0x40,0x2f,0x08,0x00,0xcc,0xff,0xff,0xff,
+ 0xff,0x0f,0xff,0xff,0xff,0x07,0x00,0x8b,0x00,0x00,0x00,0x00,
+ 0x00,0xf0,0xff,0xff,0x0f,0xe0,0xff,0xff,0xff,0xff,0x05,0x00,
+ 0x00,0x80,0x1e,0xf5,0x7f,0x45,0x2d,0x00,0xfd,0x01,0xdc,0xff,
+ 0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0x67,0x00,0x54,0x00,0x00,
+ 0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x2a,0x00,0x00,0x00,0x40,0xda,0x5f,0xbd,0xff,0x5f,0x04,0xfa,
+ 0xaf,0xff,0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0xff,0x01,0xa2,
+ 0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x57,0x01,0x00,0x00,0x00,0x40,0xb5,0x6a,0xbf,0xff,
+ 0x7f,0x41,0x83,0xff,0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0xf7,
+ 0x03,0x5e,0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x5b,0x00,0x00,0x00,0x82,0x00,0x00,0xb5,
+ 0xea,0xff,0xd7,0xaa,0xeb,0xff,0xff,0xff,0xff,0x0f,0xff,0xff,
+ 0xff,0xfb,0x03,0xa2,0x00,0x00,0x00,0x00,0x00,0xf5,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x02,0x00,0x00,0x00,0x2a,
+ 0x04,0x80,0xd4,0xff,0xaf,0xca,0xf6,0xff,0xff,0xff,0xff,0x0f,
+ 0xff,0xff,0xff,0xff,0x07,0x0d,0x00,0x00,0x00,0x00,0xf8,0xff,
+ 0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x09,0x00,0x00,
+ 0x80,0x40,0x92,0x12,0x00,0x50,0x5d,0x10,0xf5,0xfe,0xff,0xff,
+ 0xff,0x0f,0xff,0xff,0xff,0xff,0x07,0x00,0x00,0x00,0x00,0xd0,
+ 0xff,0xff,0xbf,0xf2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x12,
+ 0x00,0x00,0x2a,0xaa,0x44,0x49,0x55,0x15,0xa1,0xd5,0xe4,0xfd,
+ 0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0xfb,0x07,0x00,0x00,0x00,
+ 0x00,0xf5,0xff,0xff,0x5f,0xed,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xaf,0x04,0x00,0x40,0x11,0x15,0xaa,0xaa,0xaa,0x0a,0x24,
+ 0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0xff,0x07,0x00,
+ 0x00,0x00,0xfa,0xe2,0xff,0xff,0xbf,0xfd,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x95,0xaa,0xaa,0x52,0x55,0x95,0x55,
+ 0x55,0x89,0xd0,0xff,0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0xff,
+ 0x07,0x00,0x00,0xf8,0x55,0xe5,0xff,0xff,0xaf,0xdc,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x02,0x41,0xad,0xaa,
+ 0x6a,0xb5,0x5a,0x25,0xca,0xfd,0xff,0xff,0xff,0x0f,0xff,0xff,
+ 0xff,0xff,0x0f,0x00,0xf4,0xbf,0x6e,0xe5,0xff,0xef,0xcf,0xd8,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x82,0x03,
+ 0x40,0x54,0xb5,0xea,0xaa,0x52,0xf9,0xff,0xff,0xff,0xff,0x0f,
+ 0xff,0xff,0xff,0xff,0x0f,0xe0,0xff,0x55,0xf5,0xe6,0xff,0xff,
+ 0x87,0xd0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,
+ 0x81,0x03,0xf0,0xab,0x6a,0xaf,0xb6,0x2a,0xf5,0xff,0xff,0xff,
+ 0xff,0x0f,0xff,0xff,0xff,0xff,0x8f,0xff,0xff,0xfb,0xbb,0xcd,
+ 0xff,0xdf,0x07,0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xaa,0x02,0x03,0xf0,0xff,0x07,0x50,0x55,0x85,0xfa,0xff,
+ 0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,
+ 0xf6,0xc5,0xff,0xff,0x03,0xa0,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xfb,0x03,0xf0,0xff,0x07,0xe0,0xab,0x7a,
+ 0xfd,0xff,0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xfb,0xed,0x8a,0xff,0xff,0x13,0xc0,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0x07,0xe0,
+ 0xff,0x03,0xed,0xff,0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xf7,0x85,0xff,0xff,0x03,0x80,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x0f,0xe0,0xff,0x07,0xf8,0xff,0xff,0xff,0xff,0x0f,0xff,0xff,
+ 0xff,0xff,0xfe,0xff,0xff,0xfb,0xda,0x8d,0xff,0xff,0x13,0x80,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xf7,0xff,0x03,0xf8,0xff,0xff,0xff,0xff,0x0f,
+ 0xff,0xff,0xff,0xc7,0xfc,0xff,0xff,0x7f,0xf7,0x8a,0xff,0xff,
+ 0x01,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xeb,0xff,0xff,0x2f,0xf8,0xff,0xff,0xff,
+ 0xff,0x0f,0xff,0xff,0xff,0x4b,0xfc,0xff,0xff,0xf7,0xfa,0x0f,
+ 0xff,0xff,0x21,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0x0b,0xf8,0xff,0xff,0xff,
+ 0x57,0x0d,0xff,0xff,0x01,0x80,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0x19,0xf0,0xff,
+ 0xff,0x57,0xfd,0x1b,0xff,0xff,0x21,0x80,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,
+ 0xcf,0xfe,0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0x0d,
+ 0xf8,0xff,0xff,0xff,0xab,0x0f,0xff,0xff,0x21,0xa0,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xdd,0xff,0x8f,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0xff,
+ 0xff,0x09,0xf0,0xff,0xff,0xff,0xff,0x1d,0xfe,0xff,0x21,0xcd,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0x80,0xfc,0xcf,0xff,0xff,0xff,0xff,0xdf,0xff,0x0f,
+ 0xff,0xff,0xff,0x11,0xf0,0xff,0xff,0xff,0xff,0xbf,0xfe,0xff,
+ 0xd9,0xe1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x3f,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xef,
+ 0xff,0x0f,0xff,0xff,0xff,0x28,0xe0,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xe1,0xc4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0xfc,0xff,0xff,0xff,0xff,
+ 0xff,0xb7,0xff,0x0f,0xff,0xff,0xff,0x10,0xe0,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xb3,0xc2,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0xfc,0xff,0xff,
+ 0xff,0xff,0xff,0xd7,0xff,0x0f,0xff,0xff,0xff,0xd8,0xe1,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x73,0xe1,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc3,0x02,0xfc,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0x0f,0xff,0xff,0xff,0xf8,
+ 0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x63,0xe5,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x01,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0xff,
+ 0xff,0xf9,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xe6,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x07,0xfc,0xff,0xff,0xff,0x7f,0xff,0x7f,0xff,0x0f,
+ 0xfe,0xff,0xff,0x71,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x27,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x02,0xbc,0xff,0xff,0xff,0xff,0xff,0x5f,
+ 0xff,0x0f,0xff,0xff,0xff,0xc3,0xfc,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x0f,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x26,0xfc,0xff,0xff,0xff,0xff,
+ 0xff,0xbf,0xff,0x0f,0xff,0xff,0xff,0xe3,0xfc,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x0f,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x5f,0xa3,0xfc,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0x07,0xfe,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0xfe,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x1d,0xb7,0xfe,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xfe,0xff,0xff,0xbf,
+ 0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfe,0x7b,
+ 0xda,0xfe,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0x0f,0xfe,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xfe,0x52,0x15,0xfc,0x7f,0xfe,0xdf,0xff,0xff,0xff,0xff,0x0f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xbf,0xfe,0xa9,0x6a,0xfd,0xbf,0xff,0xfb,0xff,0xff,0xff,
+ 0xff,0x0f,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xfe,0x05,0x05,0xfc,0x3f,0x7f,0xe4,0xbf,
+ 0xff,0xff,0xff,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xaf,0x52,0x50,0xa1,0x2a,0x29,
+ 0x15,0xaa,0x52,0xa9,0xaa,0x0a,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xaa,0xad,0x56,
+ 0xd5,0xd6,0xea,0x55,0x7d,0xef,0xf6,0x0f,0xd5,0xeb,0xfe,0xff,
+ 0xff,0xff,0xf3,0xff,0xff,0xff,0xf7,0xfe,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0x7d,
+ 0xdb,0xb5,0x7d,0xbb,0xaf,0xfe,0xaf,0xff,0x5f,0x0f,0x50,0x08,
+ 0x00,0x80,0xaa,0xaa,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,
+ 0xaf,0xaf,0xfd,0x6f,0xab,0xed,0xf5,0xdf,0xff,0xf7,0xff,0x0d,
+ 0x4a,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd5,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0xfd,0xff,
+ 0xff,0xff,0x75,0xff,0x56,0xd5,0xdd,0xb6,0x5f,0xed,0xff,0xff,
+ 0x5f,0x0f,0x25,0x2a,0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x20,0xa9,0xee,0xff,0xff,0xff,0xff,0xff,0xff,0x57,
+ 0xfa,0xff,0xff,0xff,0xaf,0x57,0x55,0x75,0x6a,0xdb,0x6a,0xbb,
+ 0xba,0xff,0xff,0x0e,0x52,0x81,0x00,0x80,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x55,0xff,
+ 0xff,0xaf,0xaa,0xfe,0xff,0xff,0xff,0x54,0x57,0xd5,0xd4,0x76,
+ 0x6f,0xfd,0xef,0xff,0xff,0x0f,0x2d,0x14,0x80,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x42,
+ 0x2b,0xeb,0x7a,0xff,0xff,0xff,0xff,0x0f,0x11,0xa1,0x02,0x00,
+ 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa4,0xfb,0x0f,0x54,0x02,
+ 0x08,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x21,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x20,
+ 0xa0,0x0a,0x88,0x42,0x0a,0x00,0x00,0x40,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x10,0x88,0x00,0x00,0x44,0x88,0x02,0x01,0x20,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x20,0x55,0x09,0x2a,0x25,0x28,0x90,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x95,0x10,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x50,0x0a,
+ 0x12,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x08,
+ 0x0a,0x11,0x00,0x80,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x11,0x80,
+ 0x18,0x00,0x15,0x4a,0x2a,0x12,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+ 0x48,0x55,0x41,0x05,0x4a,0x12,0x00,0x08,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x08,0xaa,0x0a,0x29,0x48,0xa1,0x50,0x00,0x00,
+ 0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x10,0x00,0x04,0x05,0x8a,0x04,0x05,0x01,
+ 0x00,0x02,0x00,0x20,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x90,0x80,0x00,0x41,0x81,
+ 0x10,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x04,
+ 0x8a,0x6a,0x21,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x04,0x00,0x95,0x00,0x42,0x20,0x0a,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x10,0x00,0x00,
+ 0x00,0x00,0x80,0x00,0x05,0x85,0x44,0x91,0x00,0x01,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x50,0x02,0x28,0x01,0x54,0x50,0x20,0x08,0x10,0x40,
+ 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xa0,0x84,0x04,0x85,0x0a,0x42,0x01,
+ 0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x02,0x12,0x22,
+ 0x85,0x52,0x00,0x08,0x40,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xa8,0x00,
+ 0x92,0xa8,0x20,0x05,0x00,0x00,0x96,0x08,0x00,0x00,0x80,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x02,0x08,0x69,0x01,0x85,0x40,0x0b,0x08,0x08,0x10,0x00,0x05,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x14,0x00,0x48,0x00,0xab,0x0a,0x51,0x01,0x00,0x02,0x00,0x00,
+ 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x40,0x00,0x55,0x09,0x55,0xa5,0x00,0xc0,0x04,0x04,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x44,0x01,0x50,0x00,0x04,0x21,0x02,0xaa,0x94,0x22,0x21,
+ 0x01,0x02,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0x00,0x00,0x40,0x11,0x80,0x0a,0x51,0x49,
+ 0x54,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0xa0,0x84,0x00,
+ 0x8a,0x12,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x04,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x02,
+ 0xa1,0x00,0x12,0x15,0x09,0x69,0x07,0x82,0x01,0x04,0x00,0x08,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x84,0x14,0x05,0xaa,0x2a,0xa5,0x94,0x08,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+ 0x00,0x00,0x01,0x02,0x02,0x08
+};
Added: commons/proper/sanselan/trunk/src/test/data/images/xbm/1/info.txt
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/test/data/images/xbm/1/info.txt?rev=1089997&view=auto
==============================================================================
--- commons/proper/sanselan/trunk/src/test/data/images/xbm/1/info.txt (added)
+++ commons/proper/sanselan/trunk/src/test/data/images/xbm/1/info.txt Thu Apr 7 20:41:24 2011
@@ -0,0 +1,2 @@
+Contributed to the project by Damjan Jovanovic.
+Converted from ../../pxm/1/Oregon Scientific DS6639 - DSC_0307 - small.pbm
Propchange: commons/proper/sanselan/trunk/src/test/data/images/xbm/1/info.txt
------------------------------------------------------------------------------
svn:eol-style = native
Modified: commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceImageTest.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceImageTest.java?rev=1089997&r1=1089996&r2=1089997&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceImageTest.java (original)
+++ commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/common/byteSources/ByteSourceImageTest.java Thu Apr 7 20:41:24 2011
@@ -62,7 +62,8 @@ public class ByteSourceImageTest extends
|| imageFile.getName().toLowerCase().endsWith(".pcx")
|| imageFile.getName().toLowerCase().endsWith(".dcx")
|| imageFile.getName().toLowerCase().endsWith(".psd")
- || imageFile.getName().toLowerCase().endsWith(".wbmp"))
+ || imageFile.getName().toLowerCase().endsWith(".wbmp")
+ || imageFile.getName().toLowerCase().endsWith(".xbm"))
{
// these formats can't be parsed without a filename hint.
// they have ambiguous "magic number" signatures.
Added: commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/xbm/XbmBaseTest.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/xbm/XbmBaseTest.java?rev=1089997&view=auto
==============================================================================
--- commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/xbm/XbmBaseTest.java (added)
+++ commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/xbm/XbmBaseTest.java Thu Apr 7 20:41:24 2011
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ * under the License.
+ */
+
+package org.apache.sanselan.formats.xbm;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import org.apache.sanselan.ImageReadException;
+import org.apache.sanselan.SanselanTest;
+
+public abstract class XbmBaseTest extends SanselanTest
+{
+
+ private static boolean isXbm(File file) throws IOException, ImageReadException
+ {
+ return file.getName().toLowerCase().endsWith(".xbm");
+ }
+
+ private static final ImageFilter IMAGE_FILTER = new ImageFilter() {
+ public boolean accept(File file) throws IOException, ImageReadException
+ {
+ return isXbm(file);
+ }
+ };
+
+ protected List getXbmImages() throws IOException, ImageReadException
+ {
+ return getTestImages(IMAGE_FILTER);
+ }
+}
Propchange: commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/xbm/XbmBaseTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/xbm/XbmReadTest.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/xbm/XbmReadTest.java?rev=1089997&view=auto
==============================================================================
--- commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/xbm/XbmReadTest.java (added)
+++ commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/xbm/XbmReadTest.java Thu Apr 7 20:41:24 2011
@@ -0,0 +1,58 @@
+/*
+ * 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.
+ * under the License.
+ */
+
+package org.apache.sanselan.formats.xbm;
+
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.sanselan.ImageInfo;
+import org.apache.sanselan.ImageReadException;
+import org.apache.sanselan.Sanselan;
+import org.apache.sanselan.common.IImageMetadata;
+import org.apache.sanselan.util.Debug;
+
+public class XbmReadTest extends XbmBaseTest
+{
+
+ public void test() throws IOException, ImageReadException
+ {
+ Debug.debug("start");
+
+ List images = getXbmImages();
+ for (int i = 0; i < images.size(); i++)
+ {
+ if (i % 10 == 0)
+ Debug.purgeMemory();
+
+ File imageFile = (File) images.get(i);
+ Debug.debug("imageFile", imageFile);
+
+ IImageMetadata metadata = Sanselan.getMetadata(imageFile);
+ // assertNotNull(metadata);
+
+ Map params = new HashMap();
+ ImageInfo imageInfo = Sanselan.getImageInfo(imageFile, params);
+ assertNotNull(imageInfo);
+
+ BufferedImage image = Sanselan.getBufferedImage(imageFile);
+ assertNotNull(image);
+ }
+ }
+
+}
Propchange: commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/formats/xbm/XbmReadTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/roundtrip/RoundtripTest.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/roundtrip/RoundtripTest.java?rev=1089997&r1=1089996&r2=1089997&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/roundtrip/RoundtripTest.java (original)
+++ commons/proper/sanselan/trunk/src/test/java/org/apache/sanselan/roundtrip/RoundtripTest.java Thu Apr 7 20:41:24 2011
@@ -92,6 +92,8 @@ public class RoundtripTest extends Sanse
COLOR_FULL_RGB, true), //
new FormatInfo(ImageFormat.IMAGE_FORMAT_DCX, true, true,
COLOR_FULL_RGB, true), //
+ new FormatInfo(ImageFormat.IMAGE_FORMAT_XBM, true, true,
+ COLOR_BITMAP, false), //
};
private BufferedImage createArgbBitmapImage(int width, int height)