浏览代码

build 327, fbset aus busybox, tsc aus dts entfernt, bump linux 3.12.10 to 3.12.30 (ti-linux)

Reinhard Russinger 8 年之前
父节点
当前提交
e797aadcbf
共有 24 个文件被更改,包括 7042 次插入4 次删除
  1. 1 1
      MakeBuildrootEnv.sh
  2. 0 1
      board/GfA/Display001/.#Display001.dts
  3. 1 1
      board/GfA/Display001/BUILD
  4. 2 0
      board/GfA/Display001/Display001.dts
  5. 2 0
      board/GfA/Display001/Display001_10.dts
  6. 2 0
      board/GfA/Display001/Display001_4.dts
  7. 2 0
      board/GfA/Display001/Display001_7.dts
  8. 21 0
      board/GfA/Display001/linux_3.12.30/linux-001-am33xx-dtsi_no-otg.patch
  9. 890 0
      board/GfA/Display001/linux_3.12.30/linux-002-edt-touch.patch
  10. 24 0
      board/GfA/Display001/linux_3.12.30/linux-003-da8xx-videotiming.patch
  11. 61 0
      board/GfA/Display001/linux_3.12.30/linux-004-mmc-enum.patch
  12. 1104 0
      board/GfA/Display001/linux_3.12.30/linux-005-egalax-i2c.patch
  13. 48 0
      board/GfA/Display001/linux_3.12.30/linux-006-custom-bootlogo.patch
  14. 2887 0
      board/GfA/Display001/linux_3.12.30/linux-006-custom-bootlogo_ppm.patch
  15. 453 0
      board/GfA/Display001/linux_3.12.30/linux-007-gpio-helper.patch
  16. 271 0
      board/GfA/Display001/linux_3.12.30/linux-009-pru.patch
  17. 55 0
      board/GfA/Display001/linux_3.12.30/linux-010-pru_ena.patch
  18. 24 0
      board/GfA/Display001/linux_3.12.30/linux-011-bootlogo_move.patch
  19. 521 0
      board/GfA/Display001/linux_3.12.30/linux-012-omap-dmtimer.patch
  20. 114 0
      board/GfA/Display001/linux_3.12.30/linux-013-omap-dmtimer-quirks.patch
  21. 167 0
      board/GfA/Display001/uboot_2013.10/uboot-001-Display001.patch
  22. 44 0
      board/GfA/Display001/uboot_2013.10/uboot-002-BootdelayEnter.patch
  23. 348 0
      configs/Display001_3.12.30_defconfig
  24. 0 1
      configs/Display001_defconfig

+ 1 - 1
MakeBuildrootEnv.sh

@@ -12,5 +12,5 @@ chmod a+x *.sh
 cp ../GfA/configs/* ./configs
 git add .
 git commit -m "GfA wrk changes and setup"
-make  BR2_EXTERNAL=../GfA Display001_defconfig
+make  BR2_EXTERNAL=../GfA Display001_3.12.30_defconfig
 cd $GFAWRKDIR

+ 0 - 1
board/GfA/Display001/.#Display001.dts

@@ -1 +0,0 @@
-ru@here.4993

+ 1 - 1
board/GfA/Display001/BUILD

@@ -1 +1 @@
-320
+327

+ 2 - 0
board/GfA/Display001/Display001.dts

@@ -262,6 +262,7 @@
         };
 };
 
+/*
 &tscadc {
         status = "okay";
         tsc {
@@ -271,6 +272,7 @@
                 ti,wire-config = <0x00 0x11 0x22 0x33>;
         };
 };
+*/
 
 &uart4 {
 	pinctrl-names = "default", "sleep";

+ 2 - 0
board/GfA/Display001/Display001_10.dts

@@ -263,6 +263,7 @@
 	};
 };
 
+/*
 &tscadc {
         status = "okay";
         tsc {
@@ -272,6 +273,7 @@
                 ti,wire-config = <0x00 0x11 0x22 0x33>;
         };
 };
+*/
 
 &uart4 {
 	pinctrl-names = "default", "sleep";

+ 2 - 0
board/GfA/Display001/Display001_4.dts

@@ -262,6 +262,7 @@
         };
 };
 
+/*
 &tscadc {
         status = "okay";
         tsc {
@@ -271,6 +272,7 @@
                 ti,wire-config = <0x00 0x11 0x22 0x33>;
         };
 };
+*/
 
 &uart4 {
 	pinctrl-names = "default", "sleep";

+ 2 - 0
board/GfA/Display001/Display001_7.dts

@@ -296,6 +296,7 @@ i2c@3 {
 	};
 };
 
+/*
 &tscadc {
         status = "okay";
         tsc {
@@ -305,6 +306,7 @@ i2c@3 {
                 ti,wire-config = <0x00 0x11 0x22 0x33>;
         };
 };
+*/
 
 &uart4 {
 	pinctrl-names = "default", "sleep";

+ 21 - 0
board/GfA/Display001/linux_3.12.30/linux-001-am33xx-dtsi_no-otg.patch

@@ -0,0 +1,21 @@
+diff -Naur linux-orig/arch/arm/boot/dts/am33xx.dtsi linux-7f280334068b7c875ade51f8f3921ab311f0c824/arch/arm/boot/dts/am33xx.dtsi
+--- linux-orig/arch/arm/boot/dts/am33xx.dtsi	2014-02-07 00:05:20.000000000 +0100
++++ linux-7f280334068b7c875ade51f8f3921ab311f0c824/arch/arm/boot/dts/am33xx.dtsi	2015-07-07 23:48:27.436000000 +0200
+@@ -526,7 +526,7 @@
+ 
+ 				interrupts = <18>;
+ 				interrupt-names = "mc";
+-				dr_mode = "otg";
++				dr_mode = "peripheral";
+ 				mentor,multipoint = <1>;
+ 				mentor,num-eps = <16>;
+ 				mentor,ram-bits = <12>;
+@@ -573,7 +573,7 @@
+ 				reg-names = "mc", "control";
+ 				interrupts = <19>;
+ 				interrupt-names = "mc";
+-				dr_mode = "otg";
++				dr_mode = "host";
+ 				mentor,multipoint = <1>;
+ 				mentor,num-eps = <16>;
+ 				mentor,ram-bits = <12>;

+ 890 - 0
board/GfA/Display001/linux_3.12.30/linux-002-edt-touch.patch

@@ -0,0 +1,890 @@
+diff -ur -x '*.o.*' -x '*.o' -x '*.builtin' -x '*.order' -x '*.ko' -x '*.ko.cmd' -x '*~' -x '*mod.c' linux-7f280334068b7c875ade51f8f3921ab311f0c824/drivers/input/touchscreen/edt-ft5x06.c linux-change/drivers/input/touchscreen/edt-ft5x06.c
+--- linux-7f280334068b7c875ade51f8f3921ab311f0c824/drivers/input/touchscreen/edt-ft5x06.c	2014-02-07 00:05:20.000000000 +0100
++++ linux-change/drivers/input/touchscreen/edt-ft5x06.c	2014-07-27 00:23:49.000000000 +0200
+@@ -1,5 +1,7 @@
+ /*
+  * Copyright (C) 2012 Simon Budig, <simon.budig@kernelconcepts.de>
++ * Daniel Wagener <daniel.wagener@kernelconcepts.de> (M09 firmware support)
++ * Lothar Waßmann <LW@KARO-electronics.de> (DT support)
+  *
+  * This software is licensed under the terms of the GNU General Public
+  * License version 2, as published by the Free Software Foundation, and
+@@ -33,6 +35,7 @@
+ #include <linux/debugfs.h>
+ #include <linux/slab.h>
+ #include <linux/gpio.h>
++#include <linux/of_gpio.h>
+ #include <linux/input/mt.h>
+ #include <linux/input/edt-ft5x06.h>
+ 
+@@ -45,6 +48,14 @@
+ #define WORK_REGISTER_NUM_X		0x33
+ #define WORK_REGISTER_NUM_Y		0x34
+ 
++#define M09_REGISTER_THRESHOLD		0x80
++#define M09_REGISTER_GAIN		0x92
++#define M09_REGISTER_OFFSET		0x93
++#define M09_REGISTER_NUM_X		0x94
++#define M09_REGISTER_NUM_Y		0x95
++
++#define NO_REGISTER			0xff
++
+ #define WORK_REGISTER_OPMODE		0x3c
+ #define FACTORY_REGISTER_OPMODE		0x01
+ 
+@@ -59,12 +70,30 @@
+ #define EDT_RAW_DATA_RETRIES		100
+ #define EDT_RAW_DATA_DELAY		1 /* msec */
+ 
++enum edt_ver {
++	M06,
++	M09,
++};
++
++struct edt_reg_addr {
++	int reg_threshold;
++	int reg_report_rate;
++	int reg_gain;
++	int reg_offset;
++	int reg_num_x;
++	int reg_num_y;
++};
++
+ struct edt_ft5x06_ts_data {
+ 	struct i2c_client *client;
+ 	struct input_dev *input;
+ 	u16 num_x;
+ 	u16 num_y;
+ 
++	int reset_pin;
++	int irq_pin;
++	int wake_pin;
++
+ #if defined(CONFIG_DEBUG_FS)
+ 	struct dentry *debug_dir;
+ 	u8 *raw_buffer;
+@@ -79,6 +108,9 @@
+ 	int report_rate;
+ 
+ 	char name[EDT_NAME_LEN];
++
++	struct edt_reg_addr reg_addr;
++	enum edt_ver version;
+ };
+ 
+ static int edt_ft5x06_ts_readwrite(struct i2c_client *client,
+@@ -136,33 +168,58 @@
+ {
+ 	struct edt_ft5x06_ts_data *tsdata = dev_id;
+ 	struct device *dev = &tsdata->client->dev;
+-	u8 cmd = 0xf9;
+-	u8 rdbuf[26];
++	u8 cmd;
++	u8 rdbuf[29];
+ 	int i, type, x, y, id;
++	int offset, tplen, datalen;
+ 	int error;
+ 
++	switch (tsdata->version) {
++	case M06:
++		cmd = 0xf9; /* tell the controller to send touch data */
++		offset = 5; /* where the actual touch data starts */
++		tplen = 4;  /* data comes in so called frames */
++		datalen = 26; /* how much bytes to listen for */
++		break;
++
++	case M09:
++		cmd = 0x02;
++		offset = 1;
++		tplen = 6;
++		datalen = 29;
++		break;
++
++	default:
++		goto out;
++	}
++
+ 	memset(rdbuf, 0, sizeof(rdbuf));
+ 
+ 	error = edt_ft5x06_ts_readwrite(tsdata->client,
+ 					sizeof(cmd), &cmd,
+-					sizeof(rdbuf), rdbuf);
++					datalen, rdbuf);
+ 	if (error) {
+ 		dev_err_ratelimited(dev, "Unable to fetch data, error: %d\n",
+ 				    error);
+ 		goto out;
+ 	}
+ 
+-	if (rdbuf[0] != 0xaa || rdbuf[1] != 0xaa || rdbuf[2] != 26) {
+-		dev_err_ratelimited(dev, "Unexpected header: %02x%02x%02x!\n",
+-				    rdbuf[0], rdbuf[1], rdbuf[2]);
+-		goto out;
+-	}
++	/* M09 does not send header or CRC */
++	if (tsdata->version == M06) {
++		if (rdbuf[0] != 0xaa || rdbuf[1] != 0xaa ||
++			rdbuf[2] != datalen) {
++			dev_err_ratelimited(dev,
++					"Unexpected header: %02x%02x%02x!\n",
++					rdbuf[0], rdbuf[1], rdbuf[2]);
++			goto out;
++		}
+ 
+-	if (!edt_ft5x06_ts_check_crc(tsdata, rdbuf, 26))
+-		goto out;
++		if (!edt_ft5x06_ts_check_crc(tsdata, rdbuf, datalen))
++			goto out;
++	}
+ 
+ 	for (i = 0; i < MAX_SUPPORT_POINTS; i++) {
+-		u8 *buf = &rdbuf[i * 4 + 5];
++		u8 *buf = &rdbuf[i * tplen + offset];
+ 		bool down;
+ 
+ 		type = buf[0] >> 6;
+@@ -170,10 +227,14 @@
+ 		if (type == TOUCH_EVENT_RESERVED)
+ 			continue;
+ 
++		/* M06 sometimes sends bogus coordinates in TOUCH_DOWN */
++		if (tsdata->version == M06 && type == TOUCH_EVENT_DOWN)
++			continue;
++
+ 		x = ((buf[0] << 8) | buf[1]) & 0x0fff;
+ 		y = ((buf[2] << 8) | buf[3]) & 0x0fff;
+ 		id = (buf[2] >> 4) & 0x0f;
+-		down = (type != TOUCH_EVENT_UP);
++		down = type != TOUCH_EVENT_UP;
+ 
+ 		input_mt_slot(tsdata->input, id);
+ 		input_mt_report_slot_state(tsdata->input, MT_TOOL_FINGER, down);
+@@ -197,12 +258,25 @@
+ {
+ 	u8 wrbuf[4];
+ 
+-	wrbuf[0] = tsdata->factory_mode ? 0xf3 : 0xfc;
+-	wrbuf[1] = tsdata->factory_mode ? addr & 0x7f : addr & 0x3f;
+-	wrbuf[2] = value;
+-	wrbuf[3] = wrbuf[0] ^ wrbuf[1] ^ wrbuf[2];
++	switch (tsdata->version) {
++	case M06:
++		wrbuf[0] = tsdata->factory_mode ? 0xf3 : 0xfc;
++		wrbuf[1] = tsdata->factory_mode ? addr & 0x7f : addr & 0x3f;
++		wrbuf[1] = tsdata->factory_mode ? addr & 0x7f : addr & 0x3f;
++		wrbuf[2] = value;
++		wrbuf[3] = wrbuf[0] ^ wrbuf[1] ^ wrbuf[2];
++		return edt_ft5x06_ts_readwrite(tsdata->client, 4,
++					wrbuf, 0, NULL);
++	case M09:
++		wrbuf[0] = addr;
++		wrbuf[1] = value;
++
++		return edt_ft5x06_ts_readwrite(tsdata->client, 3,
++					wrbuf, 0, NULL);
+ 
+-	return edt_ft5x06_ts_readwrite(tsdata->client, 4, wrbuf, 0, NULL);
++	default:
++		return -EINVAL;
++	}
+ }
+ 
+ static int edt_ft5x06_register_read(struct edt_ft5x06_ts_data *tsdata,
+@@ -211,19 +285,36 @@
+ 	u8 wrbuf[2], rdbuf[2];
+ 	int error;
+ 
+-	wrbuf[0] = tsdata->factory_mode ? 0xf3 : 0xfc;
+-	wrbuf[1] = tsdata->factory_mode ? addr & 0x7f : addr & 0x3f;
+-	wrbuf[1] |= tsdata->factory_mode ? 0x80 : 0x40;
++	switch (tsdata->version) {
++	case M06:
++		wrbuf[0] = tsdata->factory_mode ? 0xf3 : 0xfc;
++		wrbuf[1] = tsdata->factory_mode ? addr & 0x7f : addr & 0x3f;
++		wrbuf[1] |= tsdata->factory_mode ? 0x80 : 0x40;
+ 
+-	error = edt_ft5x06_ts_readwrite(tsdata->client, 2, wrbuf, 2, rdbuf);
+-	if (error)
+-		return error;
++		error = edt_ft5x06_ts_readwrite(tsdata->client, 2, wrbuf, 2,
++						rdbuf);
++		if (error)
++			return error;
+ 
+-	if ((wrbuf[0] ^ wrbuf[1] ^ rdbuf[0]) != rdbuf[1]) {
+-		dev_err(&tsdata->client->dev,
+-			"crc error: 0x%02x expected, got 0x%02x\n",
+-			wrbuf[0] ^ wrbuf[1] ^ rdbuf[0], rdbuf[1]);
+-		return -EIO;
++		if ((wrbuf[0] ^ wrbuf[1] ^ rdbuf[0]) != rdbuf[1]) {
++			dev_err(&tsdata->client->dev,
++				"crc error: 0x%02x expected, got 0x%02x\n",
++				wrbuf[0] ^ wrbuf[1] ^ rdbuf[0],
++				rdbuf[1]);
++			return -EIO;
++		}
++		break;
++
++	case M09:
++		wrbuf[0] = addr;
++		error = edt_ft5x06_ts_readwrite(tsdata->client, 1,
++						wrbuf, 1, rdbuf);
++		if (error)
++			return error;
++		break;
++
++	default:
++		return -EINVAL;
+ 	}
+ 
+ 	return rdbuf[0];
+@@ -234,19 +325,21 @@
+ 	size_t field_offset;
+ 	u8 limit_low;
+ 	u8 limit_high;
+-	u8 addr;
++	u8 addr_m06;
++	u8 addr_m09;
+ };
+ 
+-#define EDT_ATTR(_field, _mode, _addr, _limit_low, _limit_high)		\
++#define EDT_ATTR(_field, _mode, _addr_m06, _addr_m09,			\
++		_limit_low, _limit_high)				\
+ 	struct edt_ft5x06_attribute edt_ft5x06_attr_##_field = {	\
+ 		.dattr = __ATTR(_field, _mode,				\
+ 				edt_ft5x06_setting_show,		\
+ 				edt_ft5x06_setting_store),		\
+-		.field_offset =						\
+-			offsetof(struct edt_ft5x06_ts_data, _field),	\
++		.field_offset = offsetof(struct edt_ft5x06_ts_data, _field), \
++		.addr_m06 = _addr_m06,					\
++		.addr_m09 = _addr_m09,					\
+ 		.limit_low = _limit_low,				\
+ 		.limit_high = _limit_high,				\
+-		.addr = _addr,						\
+ 	}
+ 
+ static ssize_t edt_ft5x06_setting_show(struct device *dev,
+@@ -257,10 +350,11 @@
+ 	struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
+ 	struct edt_ft5x06_attribute *attr =
+ 			container_of(dattr, struct edt_ft5x06_attribute, dattr);
+-	u8 *field = (u8 *)((char *)tsdata + attr->field_offset);
++	u8 *field = (u8 *)tsdata + attr->field_offset;
+ 	int val;
+ 	size_t count = 0;
+ 	int error = 0;
++	u8 addr;
+ 
+ 	mutex_lock(&tsdata->mutex);
+ 
+@@ -269,15 +363,33 @@
+ 		goto out;
+ 	}
+ 
+-	val = edt_ft5x06_register_read(tsdata, attr->addr);
+-	if (val < 0) {
+-		error = val;
+-		dev_err(&tsdata->client->dev,
+-			"Failed to fetch attribute %s, error %d\n",
+-			dattr->attr.name, error);
++	switch (tsdata->version) {
++	case M06:
++		addr = attr->addr_m06;
++		break;
++
++	case M09:
++		addr = attr->addr_m09;
++		break;
++
++	default:
++		error = -ENODEV;
+ 		goto out;
+ 	}
+ 
++	if (addr != NO_REGISTER) {
++		val = edt_ft5x06_register_read(tsdata, addr);
++		if (val < 0) {
++			error = val;
++			dev_err(&tsdata->client->dev,
++				"Failed to fetch attribute %s, error %d\n",
++				dattr->attr.name, error);
++			goto out;
++		}
++	} else {
++		val = *field;
++	}
++
+ 	if (val != *field) {
+ 		dev_warn(&tsdata->client->dev,
+ 			 "%s: read (%d) and stored value (%d) differ\n",
+@@ -299,9 +411,10 @@
+ 	struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
+ 	struct edt_ft5x06_attribute *attr =
+ 			container_of(dattr, struct edt_ft5x06_attribute, dattr);
+-	u8 *field = (u8 *)((char *)tsdata + attr->field_offset);
++	u8 *field = (u8 *)tsdata + attr->field_offset;
+ 	unsigned int val;
+ 	int error;
++	u8 addr;
+ 
+ 	mutex_lock(&tsdata->mutex);
+ 
+@@ -319,14 +432,29 @@
+ 		goto out;
+ 	}
+ 
+-	error = edt_ft5x06_register_write(tsdata, attr->addr, val);
+-	if (error) {
+-		dev_err(&tsdata->client->dev,
+-			"Failed to update attribute %s, error: %d\n",
+-			dattr->attr.name, error);
++	switch (tsdata->version) {
++	case M06:
++		addr = attr->addr_m06;
++		break;
++
++	case M09:
++		addr = attr->addr_m09;
++		break;
++
++	default:
++		error = -ENODEV;
+ 		goto out;
+ 	}
+ 
++	if (addr != NO_REGISTER) {
++		error = edt_ft5x06_register_write(tsdata, addr, val);
++		if (error) {
++			dev_err(&tsdata->client->dev,
++				"Failed to update attribute %s, error: %d\n",
++				dattr->attr.name, error);
++			goto out;
++		}
++	}
+ 	*field = val;
+ 
+ out:
+@@ -334,12 +462,14 @@
+ 	return error ?: count;
+ }
+ 
+-static EDT_ATTR(gain, S_IWUSR | S_IRUGO, WORK_REGISTER_GAIN, 0, 31);
+-static EDT_ATTR(offset, S_IWUSR | S_IRUGO, WORK_REGISTER_OFFSET, 0, 31);
+-static EDT_ATTR(threshold, S_IWUSR | S_IRUGO,
+-		WORK_REGISTER_THRESHOLD, 20, 80);
+-static EDT_ATTR(report_rate, S_IWUSR | S_IRUGO,
+-		WORK_REGISTER_REPORT_RATE, 3, 14);
++static EDT_ATTR(gain, S_IWUSR | S_IRUGO, WORK_REGISTER_GAIN,
++		M09_REGISTER_GAIN, 0, 31);
++static EDT_ATTR(offset, S_IWUSR | S_IRUGO, WORK_REGISTER_OFFSET,
++		M09_REGISTER_OFFSET, 0, 31);
++static EDT_ATTR(threshold, S_IWUSR | S_IRUGO, WORK_REGISTER_THRESHOLD,
++		M09_REGISTER_THRESHOLD, 20, 80);
++static EDT_ATTR(report_rate, S_IWUSR | S_IRUGO, WORK_REGISTER_REPORT_RATE,
++		NO_REGISTER, 3, 14);
+ 
+ static struct attribute *edt_ft5x06_attrs[] = {
+ 	&edt_ft5x06_attr_gain.dattr.attr,
+@@ -374,6 +504,9 @@
+ 	}
+ 
+ 	/* mode register is 0x3c when in the work mode */
++	if (tsdata->version == M09)
++		goto m09_out;
++
+ 	error = edt_ft5x06_register_write(tsdata, WORK_REGISTER_OPMODE, 0x03);
+ 	if (error) {
+ 		dev_err(&client->dev,
+@@ -406,12 +539,18 @@
+ 	enable_irq(client->irq);
+ 
+ 	return error;
++
++m09_out:
++	dev_err(&client->dev, "No factory mode support for M09\n");
++	return -EINVAL;
++
+ }
+ 
+ static int edt_ft5x06_work_mode(struct edt_ft5x06_ts_data *tsdata)
+ {
+ 	struct i2c_client *client = tsdata->client;
+ 	int retries = EDT_SWITCH_MODE_RETRIES;
++	struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
+ 	int ret;
+ 	int error;
+ 
+@@ -444,13 +583,14 @@
+ 	tsdata->raw_buffer = NULL;
+ 
+ 	/* restore parameters */
+-	edt_ft5x06_register_write(tsdata, WORK_REGISTER_THRESHOLD,
++	edt_ft5x06_register_write(tsdata, reg_addr->reg_threshold,
+ 				  tsdata->threshold);
+-	edt_ft5x06_register_write(tsdata, WORK_REGISTER_GAIN,
++	edt_ft5x06_register_write(tsdata, reg_addr->reg_gain,
+ 				  tsdata->gain);
+-	edt_ft5x06_register_write(tsdata, WORK_REGISTER_OFFSET,
++	edt_ft5x06_register_write(tsdata, reg_addr->reg_offset,
+ 				  tsdata->offset);
+-	edt_ft5x06_register_write(tsdata, WORK_REGISTER_REPORT_RATE,
++	if (reg_addr->reg_report_rate)
++		edt_ft5x06_register_write(tsdata, reg_addr->reg_report_rate,
+ 				  tsdata->report_rate);
+ 
+ 	enable_irq(client->irq);
+@@ -479,7 +619,7 @@
+ 
+ 	if (mode != tsdata->factory_mode) {
+ 		retval = mode ? edt_ft5x06_factory_mode(tsdata) :
+-			        edt_ft5x06_work_mode(tsdata);
++				edt_ft5x06_work_mode(tsdata);
+ 	}
+ 
+ 	mutex_unlock(&tsdata->mutex);
+@@ -568,7 +708,6 @@
+ 	return error ?: read;
+ };
+ 
+-
+ static const struct file_operations debugfs_raw_data_fops = {
+ 	.open = simple_open,
+ 	.read = edt_ft5x06_debugfs_raw_data_read,
+@@ -614,57 +753,100 @@
+ 
+ #endif /* CONFIG_DEBUGFS */
+ 
+-
+-
+ static int edt_ft5x06_ts_reset(struct i2c_client *client,
+-					 int reset_pin)
++			struct edt_ft5x06_ts_data *tsdata)
+ {
+ 	int error;
+ 
+-	if (gpio_is_valid(reset_pin)) {
++	if (gpio_is_valid(tsdata->wake_pin)) {
++		error = devm_gpio_request_one(&client->dev,
++					tsdata->wake_pin, GPIOF_OUT_INIT_LOW,
++					"edt-ft5x06 wake");
++		if (error) {
++			dev_err(&client->dev,
++				"Failed to request GPIO %d as wake pin, error %d\n",
++				tsdata->wake_pin, error);
++			return error;
++		}
++
++		msleep(5);
++		gpio_set_value(tsdata->wake_pin, 1);
++	}
++	if (gpio_is_valid(tsdata->reset_pin)) {
+ 		/* this pulls reset down, enabling the low active reset */
+-		error = gpio_request_one(reset_pin, GPIOF_OUT_INIT_LOW,
+-					 "edt-ft5x06 reset");
++		error = devm_gpio_request_one(&client->dev,
++					tsdata->reset_pin, GPIOF_OUT_INIT_LOW,
++					"edt-ft5x06 reset");
+ 		if (error) {
+ 			dev_err(&client->dev,
+ 				"Failed to request GPIO %d as reset pin, error %d\n",
+-				reset_pin, error);
++				tsdata->reset_pin, error);
+ 			return error;
+ 		}
+ 
+-		mdelay(50);
+-		gpio_set_value(reset_pin, 1);
+-		mdelay(100);
++		msleep(5);
++		gpio_set_value(tsdata->reset_pin, 1);
++		msleep(300);
+ 	}
+ 
+ 	return 0;
+ }
+ 
+ static int edt_ft5x06_ts_identify(struct i2c_client *client,
+-					    char *model_name,
+-					    char *fw_version)
++					struct edt_ft5x06_ts_data *tsdata,
++					char *fw_version)
+ {
+ 	u8 rdbuf[EDT_NAME_LEN];
+ 	char *p;
+ 	int error;
++	char *model_name = tsdata->name;
+ 
++	/* see what we find if we assume it is a M06 *
++	 * if we get less than EDT_NAME_LEN, we don't want
++	 * to have garbage in there
++	 */
++	memset(rdbuf, 0, sizeof(rdbuf));
+ 	error = edt_ft5x06_ts_readwrite(client, 1, "\xbb",
+ 					EDT_NAME_LEN - 1, rdbuf);
+ 	if (error)
+ 		return error;
+ 
+-	/* remove last '$' end marker */
+-	rdbuf[EDT_NAME_LEN - 1] = '\0';
+-	if (rdbuf[EDT_NAME_LEN - 2] == '$')
+-		rdbuf[EDT_NAME_LEN - 2] = '\0';
+-
+-	/* look for Model/Version separator */
+-	p = strchr(rdbuf, '*');
+-	if (p)
+-		*p++ = '\0';
++	/* if we find something consistent, stay with that assumption
++	 * at least M09 won't send 3 bytes here
++	 */
++	if (!(strnicmp(rdbuf + 1, "EP0", 3))) {
++		tsdata->version = M06;
++
++		/* remove last '$' end marker */
++		rdbuf[EDT_NAME_LEN - 1] = '\0';
++		if (rdbuf[EDT_NAME_LEN - 2] == '$')
++			rdbuf[EDT_NAME_LEN - 2] = '\0';
++
++		/* look for Model/Version separator */
++		p = strchr(rdbuf, '*');
++		if (p)
++			*p++ = '\0';
++		strlcpy(model_name, rdbuf + 1, EDT_NAME_LEN);
++		strlcpy(fw_version, p ? p : "", EDT_NAME_LEN);
++	} else {
++		/* since there are only two versions around (M06, M09) */
++		tsdata->version = M09;
++
++		error = edt_ft5x06_ts_readwrite(client, 1, "\xA6",
++						2, rdbuf);
++		if (error)
++			return error;
++
++		strlcpy(fw_version, rdbuf, 2);
++
++		error = edt_ft5x06_ts_readwrite(client, 1, "\xA8",
++						1, rdbuf);
++		if (error)
++			return error;
+ 
+-	strlcpy(model_name, rdbuf + 1, EDT_NAME_LEN);
+-	strlcpy(fw_version, p ? p : "", EDT_NAME_LEN);
++		snprintf(model_name, EDT_NAME_LEN, "EP0%i%i0M09",
++			rdbuf[0] >> 4, rdbuf[0] & 0x0F);
++	}
+ 
+ 	return 0;
+ }
+@@ -674,71 +856,157 @@
+ 	    pdata->name <= edt_ft5x06_attr_##name.limit_high)		\
+ 		edt_ft5x06_register_write(tsdata, reg, pdata->name)
+ 
++#define EDT_GET_PROP(name, reg) {				\
++	u32 val;						\
++	if (of_property_read_u32(np, #name, &val) == 0)		\
++		edt_ft5x06_register_write(tsdata, reg, val);	\
++}
++
++static void edt_ft5x06_ts_get_dt_defaults(struct device_node *np,
++					struct edt_ft5x06_ts_data *tsdata)
++{
++	struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
++
++	EDT_GET_PROP(threshold, reg_addr->reg_threshold);
++	EDT_GET_PROP(gain, reg_addr->reg_gain);
++	EDT_GET_PROP(offset, reg_addr->reg_offset);
++}
++
+ static void
+ edt_ft5x06_ts_get_defaults(struct edt_ft5x06_ts_data *tsdata,
+ 			   const struct edt_ft5x06_platform_data *pdata)
+ {
++	struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
++
+ 	if (!pdata->use_parameters)
+ 		return;
+ 
+ 	/* pick up defaults from the platform data */
+-	EDT_ATTR_CHECKSET(threshold, WORK_REGISTER_THRESHOLD);
+-	EDT_ATTR_CHECKSET(gain, WORK_REGISTER_GAIN);
+-	EDT_ATTR_CHECKSET(offset, WORK_REGISTER_OFFSET);
+-	EDT_ATTR_CHECKSET(report_rate, WORK_REGISTER_REPORT_RATE);
++	EDT_ATTR_CHECKSET(threshold, reg_addr->reg_threshold);
++	EDT_ATTR_CHECKSET(gain, reg_addr->reg_gain);
++	EDT_ATTR_CHECKSET(offset, reg_addr->reg_offset);
++	if (reg_addr->reg_report_rate != NO_REGISTER)
++		EDT_ATTR_CHECKSET(report_rate, reg_addr->reg_report_rate);
+ }
+ 
+ static void
+ edt_ft5x06_ts_get_parameters(struct edt_ft5x06_ts_data *tsdata)
+ {
++	struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
++
+ 	tsdata->threshold = edt_ft5x06_register_read(tsdata,
+-						     WORK_REGISTER_THRESHOLD);
+-	tsdata->gain = edt_ft5x06_register_read(tsdata, WORK_REGISTER_GAIN);
+-	tsdata->offset = edt_ft5x06_register_read(tsdata, WORK_REGISTER_OFFSET);
+-	tsdata->report_rate = edt_ft5x06_register_read(tsdata,
+-						WORK_REGISTER_REPORT_RATE);
+-	tsdata->num_x = edt_ft5x06_register_read(tsdata, WORK_REGISTER_NUM_X);
+-	tsdata->num_y = edt_ft5x06_register_read(tsdata, WORK_REGISTER_NUM_Y);
++						     reg_addr->reg_threshold);
++	tsdata->gain = edt_ft5x06_register_read(tsdata, reg_addr->reg_gain);
++	tsdata->offset = edt_ft5x06_register_read(tsdata, reg_addr->reg_offset);
++	if (reg_addr->reg_report_rate != NO_REGISTER)
++		tsdata->report_rate = edt_ft5x06_register_read(tsdata,
++						reg_addr->reg_report_rate);
++	tsdata->num_x = edt_ft5x06_register_read(tsdata, reg_addr->reg_num_x);
++	tsdata->num_y = edt_ft5x06_register_read(tsdata, reg_addr->reg_num_y);
+ }
+ 
++static void
++edt_ft5x06_ts_set_regs(struct edt_ft5x06_ts_data *tsdata)
++{
++	struct edt_reg_addr *reg_addr = &tsdata->reg_addr;
++
++	switch (tsdata->version) {
++	case M06:
++		reg_addr->reg_threshold = WORK_REGISTER_THRESHOLD;
++		reg_addr->reg_report_rate = WORK_REGISTER_REPORT_RATE;
++		reg_addr->reg_gain = WORK_REGISTER_GAIN;
++		reg_addr->reg_offset = WORK_REGISTER_OFFSET;
++		reg_addr->reg_num_x = WORK_REGISTER_NUM_X;
++		reg_addr->reg_num_y = WORK_REGISTER_NUM_Y;
++		break;
++
++	case M09:
++		reg_addr->reg_threshold = M09_REGISTER_THRESHOLD;
++		reg_addr->reg_gain = M09_REGISTER_GAIN;
++		reg_addr->reg_offset = M09_REGISTER_OFFSET;
++		reg_addr->reg_num_x = M09_REGISTER_NUM_X;
++		reg_addr->reg_num_y = M09_REGISTER_NUM_Y;
++		break;
++	}
++}
++
++#ifdef CONFIG_OF
++static int edt_ft5x06_i2c_ts_probe_dt(struct device *dev,
++				struct edt_ft5x06_ts_data *tsdata)
++{
++	struct device_node *np = dev->of_node;
++
++	/*
++	 * irq_pin is not needed for DT setup.
++	 * irq is associated via 'interrupts' property in DT
++	 */
++	tsdata->irq_pin = -EINVAL;
++	tsdata->reset_pin = of_get_named_gpio(np, "reset-gpios", 0);
++	tsdata->wake_pin = of_get_named_gpio(np, "wake-gpios", 0);
++
++	return 0;
++}
++#else
++static inline int edt_ft5x06_i2c_ts_probe_dt(struct device *dev,
++					struct edt_ft5x06_ts_data *tsdata)
++{
++	return -ENODEV;
++}
++#endif
++
+ static int edt_ft5x06_ts_probe(struct i2c_client *client,
+ 					 const struct i2c_device_id *id)
+ {
+ 	const struct edt_ft5x06_platform_data *pdata =
+-						client->dev.platform_data;
++						dev_get_platdata(&client->dev);
+ 	struct edt_ft5x06_ts_data *tsdata;
+ 	struct input_dev *input;
+ 	int error;
+ 	char fw_version[EDT_NAME_LEN];
+ 
++
++	printk(KERN_INFO "EDT-TC:: %s ::-----\n", __func__);
++
+ 	dev_dbg(&client->dev, "probing for EDT FT5x06 I2C\n");
+ 
++	tsdata = devm_kzalloc(&client->dev, sizeof(*tsdata), GFP_KERNEL);
++	if (!tsdata) {
++		dev_err(&client->dev, "failed to allocate driver data.\n");
++		return -ENOMEM;
++	}
++
+ 	if (!pdata) {
+-		dev_err(&client->dev, "no platform data?\n");
+-		return -EINVAL;
++		error = edt_ft5x06_i2c_ts_probe_dt(&client->dev, tsdata);
++		if (error) {
++			dev_err(&client->dev,
++				"DT probe failed and no platform data present\n");
++			return error;
++		}
++	} else {
++		tsdata->reset_pin = pdata->reset_pin;
++		tsdata->irq_pin = pdata->irq_pin;
++		tsdata->wake_pin = -EINVAL;
+ 	}
+ 
+-	error = edt_ft5x06_ts_reset(client, pdata->reset_pin);
++	error = edt_ft5x06_ts_reset(client, tsdata);
+ 	if (error)
+ 		return error;
+ 
+-	if (gpio_is_valid(pdata->irq_pin)) {
+-		error = gpio_request_one(pdata->irq_pin,
+-					 GPIOF_IN, "edt-ft5x06 irq");
++	if (gpio_is_valid(tsdata->irq_pin)) {
++		error = devm_gpio_request_one(&client->dev, tsdata->irq_pin,
++					GPIOF_IN, "edt-ft5x06 irq");
+ 		if (error) {
+ 			dev_err(&client->dev,
+ 				"Failed to request GPIO %d, error %d\n",
+-				pdata->irq_pin, error);
++				tsdata->irq_pin, error);
+ 			return error;
+ 		}
+ 	}
+ 
+-	tsdata = kzalloc(sizeof(*tsdata), GFP_KERNEL);
+-	input = input_allocate_device();
+-	if (!tsdata || !input) {
+-		dev_err(&client->dev, "failed to allocate driver data.\n");
+-		error = -ENOMEM;
+-		goto err_free_mem;
++	input = devm_input_allocate_device(&client->dev);
++	if (!input) {
++		dev_err(&client->dev, "failed to allocate input device.\n");
++		return -ENOMEM;
+ 	}
+ 
+ 	mutex_init(&tsdata->mutex);
+@@ -746,13 +1014,19 @@
+ 	tsdata->input = input;
+ 	tsdata->factory_mode = false;
+ 
+-	error = edt_ft5x06_ts_identify(client, tsdata->name, fw_version);
++	error = edt_ft5x06_ts_identify(client, tsdata, fw_version);
+ 	if (error) {
+ 		dev_err(&client->dev, "touchscreen probe failed\n");
+-		goto err_free_mem;
++		return error;
+ 	}
+ 
+-	edt_ft5x06_ts_get_defaults(tsdata, pdata);
++	edt_ft5x06_ts_set_regs(tsdata);
++
++	if (!pdata)
++		edt_ft5x06_ts_get_dt_defaults(client->dev.of_node, tsdata);
++	else
++		edt_ft5x06_ts_get_defaults(tsdata, pdata);
++
+ 	edt_ft5x06_ts_get_parameters(tsdata);
+ 
+ 	dev_dbg(&client->dev,
+@@ -776,23 +1050,24 @@
+ 	error = input_mt_init_slots(input, MAX_SUPPORT_POINTS, 0);
+ 	if (error) {
+ 		dev_err(&client->dev, "Unable to init MT slots.\n");
+-		goto err_free_mem;
++		return error;
+ 	}
+ 
+ 	input_set_drvdata(input, tsdata);
+ 	i2c_set_clientdata(client, tsdata);
+ 
+-	error = request_threaded_irq(client->irq, NULL, edt_ft5x06_ts_isr,
+-				     IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
+-				     client->name, tsdata);
++	error = devm_request_threaded_irq(&client->dev, client->irq, NULL,
++					edt_ft5x06_ts_isr,
++					IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
++					client->name, tsdata);
+ 	if (error) {
+ 		dev_err(&client->dev, "Unable to request touchscreen IRQ.\n");
+-		goto err_free_mem;
++		return error;
+ 	}
+ 
+ 	error = sysfs_create_group(&client->dev.kobj, &edt_ft5x06_attr_group);
+ 	if (error)
+-		goto err_free_irq;
++		return error;
+ 
+ 	error = input_register_device(input);
+ 	if (error)
+@@ -802,44 +1077,23 @@
+ 	device_init_wakeup(&client->dev, 1);
+ 
+ 	dev_dbg(&client->dev,
+-		"EDT FT5x06 initialized: IRQ pin %d, Reset pin %d.\n",
+-		pdata->irq_pin, pdata->reset_pin);
++		"EDT FT5x06 initialized: IRQ %d, WAKE pin %d, Reset pin %d.\n",
++		client->irq, tsdata->wake_pin, tsdata->reset_pin);
+ 
+ 	return 0;
+ 
+ err_remove_attrs:
+ 	sysfs_remove_group(&client->dev.kobj, &edt_ft5x06_attr_group);
+-err_free_irq:
+-	free_irq(client->irq, tsdata);
+-err_free_mem:
+-	input_free_device(input);
+-	kfree(tsdata);
+-
+-	if (gpio_is_valid(pdata->irq_pin))
+-		gpio_free(pdata->irq_pin);
+-
+ 	return error;
+ }
+ 
+ static int edt_ft5x06_ts_remove(struct i2c_client *client)
+ {
+-	const struct edt_ft5x06_platform_data *pdata =
+-						dev_get_platdata(&client->dev);
+ 	struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
+ 
+ 	edt_ft5x06_ts_teardown_debugfs(tsdata);
+ 	sysfs_remove_group(&client->dev.kobj, &edt_ft5x06_attr_group);
+ 
+-	free_irq(client->irq, tsdata);
+-	input_unregister_device(tsdata->input);
+-
+-	if (gpio_is_valid(pdata->irq_pin))
+-		gpio_free(pdata->irq_pin);
+-	if (gpio_is_valid(pdata->reset_pin))
+-		gpio_free(pdata->reset_pin);
+-
+-	kfree(tsdata);
+-
+ 	return 0;
+ }
+ 
+@@ -869,15 +1123,26 @@
+ 			 edt_ft5x06_ts_suspend, edt_ft5x06_ts_resume);
+ 
+ static const struct i2c_device_id edt_ft5x06_ts_id[] = {
+-	{ "edt-ft5x06", 0 },
+-	{ }
++	{ "edt-ft5x06", 0, },
++	{ /* sentinel */ }
+ };
+ MODULE_DEVICE_TABLE(i2c, edt_ft5x06_ts_id);
+ 
++#ifdef CONFIG_OF
++static const struct of_device_id edt_ft5x06_of_match[] = {
++	{ .compatible = "edt,edt-ft5206", },
++	{ .compatible = "edt,edt-ft5306", },
++	{ .compatible = "edt,edt-ft5406", },
++	{ /* sentinel */ }
++};
++MODULE_DEVICE_TABLE(of, edt_ft5x06_of_match);
++#endif
++
+ static struct i2c_driver edt_ft5x06_ts_driver = {
+ 	.driver = {
+ 		.owner = THIS_MODULE,
+ 		.name = "edt_ft5x06",
++		.of_match_table = of_match_ptr(edt_ft5x06_of_match),
+ 		.pm = &edt_ft5x06_ts_pm_ops,
+ 	},
+ 	.id_table = edt_ft5x06_ts_id,

+ 24 - 0
board/GfA/Display001/linux_3.12.30/linux-003-da8xx-videotiming.patch

@@ -0,0 +1,24 @@
+--- a/drivers/video/fbmon.c	2014-02-07 00:05:20.000000000 +0100
++++ b/drivers/video/fbmon.c	2015-01-11 22:23:39.721375753 +0100
+@@ -38,7 +38,9 @@
+ #include <asm/pci-bridge.h>
+ #endif
+ #include "edid.h"
+-
++#ifdef CONFIG_FB_DA8XX
++#include <video/da8xx-fb.h>
++#endif
+ /*
+  * EDID parser
+  */
+@@ -1400,6 +1402,10 @@
+ 	fbmode->vmode = 0;
+ 	if (vm->flags & DISPLAY_FLAGS_HSYNC_HIGH)
+ 		fbmode->sync |= FB_SYNC_HOR_HIGH_ACT;
++#ifdef CONFIG_FB_DA8XX		
++	if (vm->flags & DISPLAY_FLAGS_PIXDATA_POSEDGE)
++		fbmode->sync |= FB_SYNC_CLK_INVERT;
++#endif		
+ 	if (vm->flags & DISPLAY_FLAGS_VSYNC_HIGH)
+ 		fbmode->sync |= FB_SYNC_VERT_HIGH_ACT;
+ 	if (vm->flags & DISPLAY_FLAGS_INTERLACED)

+ 61 - 0
board/GfA/Display001/linux_3.12.30/linux-004-mmc-enum.patch

@@ -0,0 +1,61 @@
+--- linux-org/drivers/mmc/card/Kconfig	2014-02-07 00:05:20.000000000 +0100
++++ linux-7f280334068b7c875ade51f8f3921ab311f0c824/drivers/mmc/card/Kconfig	2015-09-29 23:12:27.205337449 +0200
+@@ -50,6 +50,33 @@
+ 
+ 	  If unsure, say Y here.
+ 
++config MMC_SLOTINDEX
++	bool "Use host index for enumerating mmxblkN"
++	depends on MMC_BLOCK
++	default n
++	help
++	  On embedded devices, often there is a combination of
++	  removable mmc devices (e.g. MMC/SD cards) and hard
++	  wired ones (e.g. eMMC). Depending on the hardware
++	  configuration, the 'mmcblkN' node might change if
++	  the removable device is available or not at boot time.
++
++	  E.g. if the removable device is attached at boot time,
++	  it might become mmxblk0. And the hard wired one mmcblk1.
++	  But if the removable device isn't there at boot time,
++	  the hard wired one will become mmcblk0. This makes it
++	  somehow difficult to hard code the root device to the
++	  non-removable device and boot fast.
++
++	  Enabling this option will simply associating 'N' of
++	  'mmcblkN' with the slot index instead of the dynamic
++	  name index. The slot index is always the same, ensuring
++	  that the non-removable mmc device is associated always
++	  with the same mmcblkN. Independent of the availability of
++	  the removable one.
++
++	  If unsure, say N here.
++
+ config SDIO_UART
+ 	tristate "SDIO UART/GPS class support"
+ 	depends on TTY
+--- linux-org/drivers/mmc/card/block.c	2014-02-07 00:05:20.000000000 +0100
++++ linux-7f280334068b7c875ade51f8f3921ab311f0c824/drivers/mmc/card/block.c	2015-09-29 23:15:11.545345811 +0200
+@@ -2098,7 +2098,7 @@
+ 	 */
+ 
+ 	snprintf(md->disk->disk_name, sizeof(md->disk->disk_name),
+-		 "mmcblk%d%s", md->name_idx, subname ? subname : "");
++		 "mmcblk%d%s", NAMEIDX, subname ? subname : "");
+ 
+ 	if (mmc_card_mmc(card))
+ 		blk_queue_logical_block_size(md->queue.queue,
+--- linux-org/include/linux/mmc/host.h	2014-02-07 00:05:20.000000000 +0100
++++ linux-7f280334068b7c875ade51f8f3921ab311f0c824/include/linux/mmc/host.h	2015-09-29 23:22:48.889369085 +0200
+@@ -487,4 +487,11 @@
+ 	return host->ios.clock;
+ }
+ #endif
++
++#ifdef CONFIG_MMC_SLOTINDEX
++#define NAMEIDX (card->host->index)
++#else
++#define NAMEIDX (md->name_idx)
++#endif
++
+ #endif /* LINUX_MMC_HOST_H */

+ 1104 - 0
board/GfA/Display001/linux_3.12.30/linux-005-egalax-i2c.patch

@@ -0,0 +1,1104 @@
+--- a/drivers/input/touchscreen/Makefile	2014-02-07 00:05:20.000000000 +0100
++++ b/drivers/input/touchscreen/Makefile	2015-10-12 18:55:04.861031192 +0200
+@@ -32,6 +32,7 @@
+ obj-$(CONFIG_TOUCHSCREEN_EETI)		+= eeti_ts.o
+ obj-$(CONFIG_TOUCHSCREEN_ELO)		+= elo.o
+ obj-$(CONFIG_TOUCHSCREEN_EGALAX)	+= egalax_ts.o
++obj-$(CONFIG_TOUCHSCREEN_EGALAX_I2C)	+= egalax_i2c.o
+ obj-$(CONFIG_TOUCHSCREEN_FUJITSU)	+= fujitsu_ts.o
+ obj-$(CONFIG_TOUCHSCREEN_ILI210X)	+= ili210x.o
+ obj-$(CONFIG_TOUCHSCREEN_INEXIO)	+= inexio.o
+--- a/drivers/input/touchscreen/Kconfig	2014-02-07 00:05:20.000000000 +0100
++++ b/drivers/input/touchscreen/Kconfig	2015-10-12 18:54:15.585025690 +0200
+@@ -265,6 +265,16 @@
+ 	  To compile this driver as a module, choose M here: the
+ 	  module will be called egalax_ts.
+ 
++config TOUCHSCREEN_EGALAX_I2C
++	tristate "EETI eGalax (egalax_i2c) multi-touch panel support for i2C"
++	depends on I2C && OF
++	help
++	  Say Y here to enable support for I2C connected EETI
++	  eGalax multi-touch panels.
++
++	  To compile this driver as a module, choose M here: the
++	  module will be called egalax_i2c.
++
+ config TOUCHSCREEN_FUJITSU
+ 	tristate "Fujitsu serial touchscreen"
+ 	select SERIO
+--- a/drivers/input/touchscreen/egalax_i2c.c	1970-01-01 01:00:00.000000000 +0100
++++ b/drivers/input/touchscreen/egalax_i2c.c	2015-10-12 18:56:02.573037587 +0200
+@@ -0,0 +1,1072 @@
++/*
++ *
++ * Touch Screen I2C Driver for EETI Controller
++ *
++ * Copyright (C) 2000-2015  eGalax_eMPIA Technology Inc.
++ * All Rights Reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ */
++
++#define RELEASE_DATE "2015/04/23"
++
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/interrupt.h>
++#include <linux/wait.h>
++#include <linux/delay.h>
++#include <linux/i2c.h>
++#include <linux/gpio.h>
++#include <linux/device.h>
++#include <asm/uaccess.h>
++#include <linux/kfifo.h>
++#include <linux/version.h>
++#include <linux/input.h>
++#include <linux/irq.h>
++#include <linux/timer.h>
++#include <linux/proc_fs.h>
++#include <linux/seq_file.h>
++#include <linux/miscdevice.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)
++#include <linux/input/mt.h>
++#endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)
++#include <linux/of_gpio.h>
++#endif
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)
++	#define __devinit 
++	#define __devexit 
++	#define __devexit_p(x) x
++#endif
++
++#ifdef CONFIG_HAS_EARLYSUSPEND
++	#include <linux/earlysuspend.h>
++	static struct early_suspend egalax_early_suspend;
++#endif
++
++// Global define to enable function
++//#define _SWITCH_XY
++//#define _CONVERT_Y
++
++#define MAX_EVENTS		600
++#define MAX_I2C_LEN		64
++#define FIFO_SIZE		8192 //(PAGE_SIZE*2)
++#define MAX_SUPPORT_POINT	16
++#define REPORTID_MOUSE		0x01
++#define REPORTID_VENDOR		0x03
++#define REPORTID_MTOUCH		0x06//0x04
++#define MAX_RESOLUTION		4095
++
++// running mode
++#define MODE_STOP	0
++#define MODE_WORKING	1
++#define MODE_IDLE	2
++#define MODE_SUSPEND	3
++
++struct tagMTContacts {
++	unsigned char ID;
++	signed char Status;
++	unsigned short X;
++	unsigned short Y;
++};
++
++struct _egalax_i2c {
++	struct workqueue_struct *ktouch_wq;
++	struct work_struct work_irq;
++	struct delayed_work delay_work_ioctl;
++	struct mutex mutex_wq;
++	struct i2c_client *client;
++	unsigned char work_state;
++	unsigned char skip_packet;
++	unsigned int ioctl_cmd;
++	int interrupt_gpio;
++};
++
++struct egalax_char_dev
++{
++	int OpenCnts;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
++	struct kfifo* pDataKFiFo;
++#else
++	struct kfifo DataKFiFo;
++#endif
++	unsigned char *pFiFoBuf;
++	spinlock_t FiFoLock;
++	struct semaphore sem;
++	wait_queue_head_t fifo_inq;
++};
++
++static struct _egalax_i2c *p_egalax_i2c_dev = NULL;	// allocated in egalax_i2c_probe
++static struct egalax_char_dev *p_char_dev = NULL;	// allocated in init_module
++static atomic_t egalax_char_available = ATOMIC_INIT(1);
++static atomic_t wait_command_ack = ATOMIC_INIT(0);
++static struct input_dev *input_dev = NULL;
++static struct tagMTContacts pContactBuf[MAX_SUPPORT_POINT];
++static unsigned char input_report_buf[MAX_I2C_LEN+2];
++
++#define DBG_MODULE	0x00000001
++#define DBG_CDEV	0x00000002
++#define DBG_PROC	0x00000004
++#define DBG_POINT	0x00000008
++#define DBG_INT		0x00000010
++#define DBG_I2C		0x00000020
++#define DBG_SUSP	0x00000040
++#define DBG_INPUT	0x00000080
++#define DBG_CONST	0x00000100
++#define DBG_IDLE	0x00000200
++#define DBG_WAKEUP	0x00000400
++#define DBG_BUTTON	0x00000800
++static unsigned int DbgLevel = DBG_MODULE|DBG_SUSP;
++
++#define PROC_FS_NAME	"egalax_dbg"
++#define PROC_FS_MAX_LEN	8
++static struct proc_dir_entry *dbgProcFile;
++
++#define EGALAX_DBG(level, fmt, args...)  do{ if( (level&DbgLevel)>0 ) \
++					printk( KERN_DEBUG "[egalax_i2c]: " fmt, ## args); }while(0)
++
++static int egalax_I2C_read(unsigned char *pBuf, unsigned short len)
++{
++	struct i2c_msg xfer;
++	unsigned char cmdbuf[2]={0x27, 0x00};
++
++	if(pBuf==NULL)
++		return -1;
++
++	// Write register first
++	xfer.addr = p_egalax_i2c_dev->client->addr;
++	xfer.flags = 0;
++	xfer.len = 2;
++	xfer.buf = cmdbuf;
++	i2c_transfer(p_egalax_i2c_dev->client->adapter, &xfer, 1);
++
++	// Read device data
++	xfer.addr = p_egalax_i2c_dev->client->addr;
++	xfer.flags = I2C_M_RD;
++	xfer.len = len;
++	xfer.buf = pBuf;
++
++	if(i2c_transfer(p_egalax_i2c_dev->client->adapter, &xfer, 1) != 1) 
++	{
++		EGALAX_DBG(DBG_I2C, " %s: i2c transfer fail\n", __func__);
++		return -EIO;
++	}
++	else
++		EGALAX_DBG(DBG_I2C, " %s: i2c transfer success\n", __func__);
++
++	return 0;
++}
++
++static int egalax_I2C_write(unsigned short reg, unsigned char *pBuf, unsigned short len)
++{
++	unsigned char cmdbuf[4+len];
++	struct i2c_msg xfer;
++
++	if(pBuf==NULL)
++		return -1;
++
++	cmdbuf[0] = reg & 0x00FF;
++	cmdbuf[1] = (reg >> 8) & 0x00FF;
++	cmdbuf[2] = (len+2) & 0x00FF;
++	cmdbuf[3] = ((len+2) >> 8) & 0x00FF;
++	memcpy(cmdbuf+4, pBuf, len);
++
++	// Write data to device
++	xfer.addr = p_egalax_i2c_dev->client->addr;
++	xfer.flags = 0;
++	xfer.len = sizeof(cmdbuf);
++	xfer.buf = cmdbuf;
++
++	if(i2c_transfer(p_egalax_i2c_dev->client->adapter, &xfer, 1) != 1) 
++	{
++		EGALAX_DBG(DBG_I2C, " %s: i2c transfer fail\n", __func__);
++		return -EIO;
++	}
++	else
++		EGALAX_DBG(DBG_I2C, " %s: i2c transfer success\n", __func__);
++
++	return 0;
++}
++
++static int wakeup_controller(int irq)
++{
++	int ret = 0;
++
++	disable_irq(irq);
++	
++	gpio_direction_output(p_egalax_i2c_dev->interrupt_gpio, 0);
++	udelay(200);
++	gpio_direction_input(p_egalax_i2c_dev->interrupt_gpio); //return to high level
++	
++	enable_irq(irq);
++	
++	EGALAX_DBG(DBG_WAKEUP, " INT wakeup touch controller done\n");
++	
++	return ret;
++}
++
++static int egalax_cdev_open(struct inode *inode, struct file *filp)
++{
++	if( !atomic_dec_and_test(&egalax_char_available) )
++	{
++		atomic_inc(&egalax_char_available);
++		return -EBUSY; // already open
++	}
++
++	p_char_dev->OpenCnts++;
++	filp->private_data = p_char_dev;// Used by the read and write metheds
++
++	EGALAX_DBG(DBG_CDEV, " CDev open done!\n");
++	try_module_get(THIS_MODULE);
++	return 0;
++}
++
++static int egalax_cdev_release(struct inode *inode, struct file *filp)
++{
++	struct egalax_char_dev *cdev = filp->private_data;
++
++	atomic_inc(&egalax_char_available); // release the device
++
++	cdev->OpenCnts--;
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
++	kfifo_reset( cdev->pDataKFiFo );
++#else
++	kfifo_reset( &cdev->DataKFiFo );
++#endif
++
++	EGALAX_DBG(DBG_CDEV, " CDev release done!\n");
++	module_put(THIS_MODULE);
++	return 0;
++}
++
++static char fifo_read_buf[MAX_I2C_LEN];
++static ssize_t egalax_cdev_read(struct file *file, char __user *buf, size_t count, loff_t *offset)
++{
++	int read_cnt, ret, fifoLen;
++	struct egalax_char_dev *cdev = file->private_data;
++	
++	if( down_interruptible(&cdev->sem) )
++		return -ERESTARTSYS;
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
++	fifoLen = kfifo_len(cdev->pDataKFiFo);
++#else
++	fifoLen = kfifo_len(&cdev->DataKFiFo);
++#endif
++
++	while( fifoLen<1 ) // nothing to read
++	{
++		up(&cdev->sem); // release the lock
++		if( file->f_flags & O_NONBLOCK )
++			return -EAGAIN;
++
++	#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
++		if( wait_event_interruptible(cdev->fifo_inq, kfifo_len( cdev->pDataKFiFo )>0) )
++	#else
++		if( wait_event_interruptible(cdev->fifo_inq, kfifo_len( &cdev->DataKFiFo )>0) )
++	#endif
++		{
++			return -ERESTARTSYS; // signal: tell the fs layer to handle it
++		}
++
++		if( down_interruptible(&cdev->sem) )
++			return -ERESTARTSYS;
++	}
++
++	if(count > MAX_I2C_LEN)
++		count = MAX_I2C_LEN;
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
++	read_cnt = kfifo_get(cdev->pDataKFiFo, fifo_read_buf, count);
++#else
++	read_cnt = kfifo_out_locked(&cdev->DataKFiFo, fifo_read_buf, count, &cdev->FiFoLock);
++#endif
++	EGALAX_DBG(DBG_CDEV, " \"%s\" reading fifo data count=%d\n", current->comm, read_cnt);
++
++	ret = copy_to_user(buf, fifo_read_buf, read_cnt)?-EFAULT:read_cnt;
++
++	up(&cdev->sem);
++	
++	return ret;
++}
++
++static ssize_t egalax_cdev_write(struct file *file, const char __user *buf, size_t count, loff_t *offset)
++{
++	struct egalax_char_dev *cdev = file->private_data;
++	int ret=0;
++	char *tmp;
++
++	if( down_interruptible(&cdev->sem) )
++		return -ERESTARTSYS;
++
++	if (count > MAX_I2C_LEN)
++		count = MAX_I2C_LEN;
++
++	tmp = kzalloc(MAX_I2C_LEN, GFP_KERNEL);
++	if(tmp==NULL)
++	{
++		up(&cdev->sem);
++		return -ENOMEM;
++	}
++
++	if(copy_from_user(tmp, buf, count))
++	{
++		up(&cdev->sem);
++		kfree(tmp);
++		return -EFAULT;
++	}
++	
++	ret = egalax_I2C_write(0x0067, tmp, MAX_I2C_LEN);
++
++	up(&cdev->sem);
++	EGALAX_DBG(DBG_CDEV, " I2C writing %zu bytes.\n", count);
++	kfree(tmp);
++
++	return (ret==0?count:-1);
++}
++
++static unsigned int egalax_cdev_poll(struct file *filp, struct poll_table_struct *wait)
++{
++	struct egalax_char_dev *cdev = filp->private_data;
++	unsigned int mask = 0;
++	int fifoLen;
++	
++	down(&cdev->sem);
++	poll_wait(filp, &cdev->fifo_inq,  wait);
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
++	fifoLen = kfifo_len(cdev->pDataKFiFo);
++#else
++	fifoLen = kfifo_len(&cdev->DataKFiFo);
++#endif
++
++	if( fifoLen > 0 )
++		mask |= POLLIN | POLLRDNORM;    /* readable */
++	if( (FIFO_SIZE - fifoLen) > MAX_I2C_LEN )
++		mask |= POLLOUT | POLLWRNORM;   /* writable */
++
++	up(&cdev->sem);
++	return mask;
++}
++
++static int egalax_proc_show(struct seq_file* seqfilp, void *v)
++{
++	seq_printf(seqfilp, "EETI I2C for All Points.\nDebug Level: 0x%08X\nRelease Date: %s\n", DbgLevel, RELEASE_DATE);
++	return 0;
++}
++
++static int egalax_proc_open(struct inode *inode, struct file *filp)
++{
++	EGALAX_DBG(DBG_PROC, " \"%s\" call proc_open\n", current->comm);
++	return single_open(filp, egalax_proc_show, NULL);
++}
++
++static ssize_t egalax_proc_write(struct file *file, const char __user *buf, size_t count, loff_t *offset)
++{
++	char procfs_buffer_size = 0; 
++	unsigned char procfs_buf[PROC_FS_MAX_LEN+1] = {0};
++
++	EGALAX_DBG(DBG_PROC, " \"%s\" call proc_write\n", current->comm);
++
++	procfs_buffer_size = count;
++	if(procfs_buffer_size > PROC_FS_MAX_LEN ) 
++		procfs_buffer_size = PROC_FS_MAX_LEN+1;
++	
++	if( copy_from_user(procfs_buf, buf, procfs_buffer_size) ) 
++	{
++		EGALAX_DBG(DBG_PROC, " proc_write faied at copy_from_user\n");
++		return -EFAULT;
++	}
++
++	sscanf(procfs_buf, "%x", &DbgLevel);
++	EGALAX_DBG(DBG_PROC, " Switch Debug Level to 0x%08X\n", DbgLevel);
++
++	return procfs_buffer_size;
++}
++
++#define MAX_POINT_PER_PACKET	5
++#define POINT_STRUCT_SIZE	10
++static int TotalPtsCnt=0, RecvPtsCnt=0;
++static void ProcessReport(unsigned char *buf, struct _egalax_i2c *p_egalax_i2c)
++{
++	unsigned char i, index=0, cnt_down=0, cnt_up=0, shift=0;
++	unsigned char status=0;
++	unsigned short contactID=0, x=0, y=0;
++
++	if(TotalPtsCnt<=0)
++	{
++		if(buf[1]==0 || buf[1]>MAX_SUPPORT_POINT)
++		{
++			EGALAX_DBG(DBG_POINT, " NumsofContacts mismatch, skip packet\n");
++			return;
++		}
++
++		TotalPtsCnt = buf[1];
++		RecvPtsCnt = 0;
++	}
++	else if(buf[1]>0)
++	{
++		TotalPtsCnt = RecvPtsCnt = 0;
++		EGALAX_DBG(DBG_POINT, " NumsofContacts mismatch, skip packet\n");
++		return;
++	}
++
++	while(index<MAX_POINT_PER_PACKET)
++	{
++		shift = index * POINT_STRUCT_SIZE + 2;
++		status = buf[shift] & 0x01;
++		contactID = buf[shift+1];
++		x = ((buf[shift+3]<<8) + buf[shift+2]);
++		y = ((buf[shift+5]<<8) + buf[shift+4]);
++
++		if( contactID>=MAX_SUPPORT_POINT )
++		{
++			TotalPtsCnt = RecvPtsCnt = 0;
++			EGALAX_DBG(DBG_POINT, " Get error ContactID.\n");
++			return;
++		}
++
++		EGALAX_DBG(DBG_POINT, " Get Point[%d] Update: Status=%d X=%d Y=%d\n", contactID, status, x, y);
++
++	#ifdef _SWITCH_XY
++		short tmp = x;
++		x = y;
++		y = tmp;
++	#endif
++	#ifdef _CONVERT_X
++		x = MAX_RESOLUTION-x;
++	#endif
++
++	#ifdef _CONVERT_Y
++		y = MAX_RESOLUTION-y;
++	#endif
++
++		pContactBuf[RecvPtsCnt].ID = contactID;
++		pContactBuf[RecvPtsCnt].Status = status;
++		pContactBuf[RecvPtsCnt].X = x;
++		pContactBuf[RecvPtsCnt].Y = y;
++
++		RecvPtsCnt++;
++		index++;
++
++		// Recv all points, send input report
++		if(RecvPtsCnt==TotalPtsCnt)
++		{
++			for(i=0; i<RecvPtsCnt; i++)
++			{
++			#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)
++				input_mt_slot(input_dev, pContactBuf[i].ID);
++				input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, pContactBuf[i].Status);
++				if(pContactBuf[i].Status)
++				{
++					input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, pContactBuf[i].Status);
++					input_report_abs(input_dev, ABS_MT_POSITION_X, pContactBuf[i].X);
++					input_report_abs(input_dev, ABS_MT_POSITION_Y, pContactBuf[i].Y);
++				}
++			#else
++				input_report_abs(input_dev, ABS_MT_TRACKING_ID, pContactBuf[i].ID);
++				input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, pContactBuf[i].Status);
++				input_report_abs(input_dev, ABS_MT_POSITION_X, pContactBuf[i].X);
++				input_report_abs(input_dev, ABS_MT_POSITION_Y, pContactBuf[i].Y);
++				input_report_abs(input_dev, ABS_MT_WIDTH_MAJOR, 0);
++				input_mt_sync(input_dev);
++			#endif
++
++				if(pContactBuf[i].Status)
++					cnt_down++;
++				else
++					cnt_up++;
++			}
++		#ifndef CONFIG_HAS_EARLYSUSPEND //We use this config to distinguish Linux and Android
++			#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)
++			input_mt_report_pointer_emulation(input_dev, true);
++			#endif
++		#endif
++			input_sync(input_dev);
++			EGALAX_DBG(DBG_POINT, " Input sync point data done! (Down:%d Up:%d)\n", cnt_down, cnt_up);
++			
++			TotalPtsCnt = RecvPtsCnt = 0;
++			return;
++		}
++	}
++}
++
++static struct input_dev * allocate_Input_Dev(void)
++{
++	int ret;
++	struct input_dev *pInputDev=NULL;
++
++	pInputDev = input_allocate_device();
++	if(pInputDev == NULL)
++	{
++		EGALAX_DBG(DBG_MODULE, " Failed to allocate input device\n");
++		return NULL;//-ENOMEM;
++	}
++
++	pInputDev->name = "eGalax_Touch_Screen";
++	pInputDev->phys = "I2C";
++	pInputDev->id.bustype = BUS_I2C;
++	pInputDev->id.vendor = 0x0EEF;
++	pInputDev->id.product = 0x0020;
++	pInputDev->id.version = 0x0001;
++	
++	set_bit(EV_ABS, pInputDev->evbit);
++#ifndef CONFIG_HAS_EARLYSUSPEND //We use this config to distinguish Linux and Android
++	set_bit(EV_KEY, pInputDev->evbit);
++	__set_bit(BTN_TOUCH, pInputDev->keybit);
++	input_set_abs_params(pInputDev, ABS_X, 0, MAX_RESOLUTION, 0, 0);
++	input_set_abs_params(pInputDev, ABS_Y, 0, MAX_RESOLUTION, 0, 0);
++#endif
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)
++	__set_bit(INPUT_PROP_DIRECT, pInputDev->propbit);
++	#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0)
++		input_mt_init_slots(pInputDev, MAX_SUPPORT_POINT, 0);
++	#else
++		input_mt_init_slots(pInputDev, MAX_SUPPORT_POINT);
++	#endif
++	input_set_abs_params(pInputDev, ABS_MT_POSITION_X, 0, MAX_RESOLUTION, 0, 0);
++	input_set_abs_params(pInputDev, ABS_MT_POSITION_Y, 0, MAX_RESOLUTION, 0, 0);
++	input_set_abs_params(pInputDev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0);
++#else
++	input_set_abs_params(pInputDev, ABS_MT_POSITION_X, 0, MAX_RESOLUTION, 0, 0);
++	input_set_abs_params(pInputDev, ABS_MT_POSITION_Y, 0, MAX_RESOLUTION, 0, 0);
++	input_set_abs_params(pInputDev, ABS_MT_WIDTH_MAJOR, 0, MAX_RESOLUTION, 0, 0); //Size
++	input_set_abs_params(pInputDev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0); //Pressure
++	input_set_abs_params(pInputDev, ABS_MT_TRACKING_ID, 0, MAX_SUPPORT_POINT, 0, 0);
++#endif // #if LINUX_VERSION_CODE > KERNEL_VERSION(3,0,0)
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)
++	input_set_events_per_packet(pInputDev, MAX_EVENTS);
++#endif
++
++	ret = input_register_device(pInputDev);
++	if(ret) 
++	{
++		EGALAX_DBG(DBG_MODULE, " Unable to register input device.\n");
++		input_free_device(pInputDev);
++		pInputDev = NULL;
++	}
++	
++	return pInputDev;
++}
++
++static int egalax_i2c_measure(struct _egalax_i2c *egalax_i2c)
++{
++	int ret=0, frameLen=0, loop=3, i;
++
++	EGALAX_DBG(DBG_INT, " egalax_i2c_measure\n");
++
++	if( egalax_I2C_read(input_report_buf, MAX_I2C_LEN+2) < 0)
++	{
++		EGALAX_DBG(DBG_I2C, " I2C read input report fail!\n");
++		return -1;
++	}
++	
++	if( DbgLevel&DBG_I2C )
++	{
++		char dbgmsg[(MAX_I2C_LEN+2)*4];
++		for(i=0; i<MAX_I2C_LEN+2; i++)
++			sprintf(dbgmsg+i*4, "[%02X]", input_report_buf[i]);
++		EGALAX_DBG(DBG_I2C, " Buf=%s\n", dbgmsg);
++	}
++
++	frameLen = input_report_buf[0] + (input_report_buf[1]<<8);
++	EGALAX_DBG(DBG_I2C, " I2C read data with Len=%d\n", frameLen);
++
++	if(frameLen==0)
++	{
++		EGALAX_DBG(DBG_MODULE, " Device reset\n");
++		return -1;
++	}
++
++	switch(input_report_buf[2])
++	{
++		case REPORTID_MTOUCH:
++			if( !egalax_i2c->skip_packet && egalax_i2c->work_state==MODE_WORKING )
++				ProcessReport(input_report_buf+2, egalax_i2c);
++			ret = 0;
++			break;
++		case REPORTID_VENDOR:
++			atomic_set(&wait_command_ack, 1);
++			EGALAX_DBG(DBG_I2C, " I2C get vendor command packet\n");
++
++			if( p_char_dev->OpenCnts>0 ) // If someone reading now! put the data into the buffer!
++			{
++				loop=3;
++				do {
++				#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
++					ret = wait_event_timeout(p_char_dev->fifo_inq, (FIFO_SIZE-kfifo_len(p_char_dev->pDataKFiFo))>=MAX_I2C_LEN, HZ);
++				#else
++					ret = wait_event_timeout(p_char_dev->fifo_inq, kfifo_avail(&p_char_dev->DataKFiFo)>=MAX_I2C_LEN, HZ);
++				#endif
++				}while(ret<=0 && --loop);
++
++				if(ret>0) // fifo size is ready
++				{
++				#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
++					ret = kfifo_put(p_char_dev->pDataKFiFo, input_report_buf+2, MAX_I2C_LEN);
++				#else
++					ret = kfifo_in_locked(&p_char_dev->DataKFiFo, input_report_buf+2, MAX_I2C_LEN, &p_char_dev->FiFoLock);
++				#endif
++
++					wake_up_interruptible( &p_char_dev->fifo_inq );
++				}
++				else
++					EGALAX_DBG(DBG_CDEV, " [Warning] Can't write data because fifo size is overflow.\n");
++			}
++
++			break;
++		default:
++			EGALAX_DBG(DBG_I2C, " I2C read error data with hedaer=%d\n", input_report_buf[2]);
++			ret = -1;
++			break;
++	}
++
++	return ret;
++}
++
++static void egalax_i2c_wq_irq(struct work_struct *work)
++{
++	struct _egalax_i2c *egalax_i2c = container_of(work, struct _egalax_i2c, work_irq);
++	struct i2c_client *client = egalax_i2c->client;
++
++	EGALAX_DBG(DBG_INT, " egalax_i2c_wq run\n");
++
++	/*continue recv data*/
++	while( !gpio_get_value(egalax_i2c->interrupt_gpio) )
++	{
++		egalax_i2c_measure(egalax_i2c);
++		schedule();
++	}
++		
++	if( egalax_i2c->skip_packet > 0 )
++		egalax_i2c->skip_packet = 0;
++
++	enable_irq(client->irq);
++
++	EGALAX_DBG(DBG_INT, " egalax_i2c_wq leave\n");
++}
++
++static irqreturn_t egalax_i2c_interrupt(int irq, void *dev_id)
++{
++	struct _egalax_i2c *egalax_i2c = (struct _egalax_i2c *)dev_id;
++
++	EGALAX_DBG(DBG_INT, " INT with irq:%d\n", irq);
++
++	disable_irq_nosync(irq);
++
++	queue_work(egalax_i2c->ktouch_wq, &egalax_i2c->work_irq);
++
++	return IRQ_HANDLED;
++}
++
++static void egalax_i2c_senduppoint(void) 
++{
++	int i=0;
++	
++	EGALAX_DBG(DBG_SUSP, " %s\n", __func__);
++
++	for(i=0; i<MAX_SUPPORT_POINT; i++)
++	{
++	#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)
++		input_mt_slot(input_dev, pContactBuf[i].ID);
++		input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, 0);
++	#else
++		input_report_abs(input_dev, ABS_MT_TRACKING_ID, pContactBuf[i].ID);
++		input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, 0);
++		input_mt_sync(input_dev);
++	#endif
++	
++		if(pContactBuf[i].Status)
++			pContactBuf[i].Status = 0;
++	}
++
++#ifndef CONFIG_HAS_EARLYSUSPEND //We use this config to distinguish Linux and Android
++	input_mt_report_pointer_emulation(input_dev, true);
++#endif
++	input_sync(input_dev);
++	EGALAX_DBG(DBG_POINT, " Sent up point data done!\n");
++}
++
++static int egalax_i2c_pm_suspend(struct i2c_client *client, pm_message_t mesg)
++{
++	unsigned char cmdbuf[4];
++	struct i2c_msg xfer;
++
++	EGALAX_DBG(DBG_SUSP, " Enter early_suspend state:%d\n", p_egalax_i2c_dev->work_state);
++	
++	if(!p_egalax_i2c_dev) 
++		goto fail_suspend;
++
++	//Power sleep command
++	cmdbuf[0] = 0xA7;	cmdbuf[1] = 0x00;
++	cmdbuf[2] = 0x01;	cmdbuf[3] = 0x08;
++	
++	// Write data to device
++	xfer.addr = p_egalax_i2c_dev->client->addr;
++	xfer.flags = 0;
++	xfer.len = sizeof(cmdbuf);
++	xfer.buf = cmdbuf;
++
++	if(i2c_transfer(p_egalax_i2c_dev->client->adapter, &xfer, 1) != 1) 
++	{
++		EGALAX_DBG(DBG_I2C, " %s: i2c send Power command fail\n", __func__);
++		goto fail_suspend2;
++	}
++
++	p_egalax_i2c_dev->work_state = MODE_SUSPEND;
++
++	EGALAX_DBG(DBG_SUSP, " Early_suspend done!!\n");
++	return 0;
++
++fail_suspend2:
++	p_egalax_i2c_dev->work_state = MODE_SUSPEND;
++fail_suspend:
++	EGALAX_DBG(DBG_SUSP, " Early_suspend failed!!\n");
++	return -1;
++}
++
++static int egalax_i2c_pm_resume(struct i2c_client *client)
++{
++	EGALAX_DBG(DBG_SUSP, " Enter early_resume state:%d\n", p_egalax_i2c_dev->work_state);
++
++	if(!p_egalax_i2c_dev) 
++		goto fail_resume;
++
++	if( wakeup_controller(p_egalax_i2c_dev->client->irq)==0 )
++		p_egalax_i2c_dev->work_state = MODE_WORKING;
++	else
++		goto fail_resume2;
++
++	egalax_i2c_senduppoint();
++
++	EGALAX_DBG(DBG_SUSP, " Early_resume done!!\n");
++	return 0;
++
++fail_resume2:
++	p_egalax_i2c_dev->work_state = MODE_WORKING;
++fail_resume:
++	EGALAX_DBG(DBG_SUSP, " Early_resume failed!!\n");
++	return -1;
++}
++
++#ifdef CONFIG_HAS_EARLYSUSPEND
++static void egalax_i2c_early_suspend(struct early_suspend *handler)
++{
++	pm_message_t state;
++	state.event = PM_EVENT_SUSPEND;
++
++	EGALAX_DBG(DBG_SUSP, " %s\n", __func__);
++	egalax_i2c_pm_suspend(p_egalax_i2c_dev->client, state);
++}
++
++static void egalax_i2c_early_resume(struct early_suspend *handler)
++{
++	EGALAX_DBG(DBG_SUSP, " %s\n", __func__);
++	egalax_i2c_pm_resume(p_egalax_i2c_dev->client);
++}
++#endif // #ifdef CONFIG_HAS_EARLYSUSPEND
++
++static int __devinit egalax_i2c_probe(struct i2c_client *client, const struct i2c_device_id *idp)
++{
++	int ret;
++	struct device_node *devnode;
++	
++	EGALAX_DBG(DBG_MODULE, " Start probe\n");
++
++	p_egalax_i2c_dev = (struct _egalax_i2c *)kzalloc(sizeof(struct _egalax_i2c), GFP_KERNEL);
++	if (!p_egalax_i2c_dev) 
++	{
++		EGALAX_DBG(DBG_MODULE, " Request memory failed\n");
++		ret = -ENOMEM;
++		goto fail1;
++	}
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)
++	devnode = client->dev.of_node;
++	if(devnode) //if use the device tree config
++	{
++		p_egalax_i2c_dev->interrupt_gpio = of_get_named_gpio(devnode, "int-gpios", 0);
++	}
++#else
++	{
++		p_egalax_i2c_dev->interrupt_gpio = irq_to_gpio(client->irq);
++	}
++#endif
++
++	if( !gpio_is_valid(p_egalax_i2c_dev->interrupt_gpio) )
++	{
++		ret = -ENODEV;
++		goto fail1;
++	}
++	ret = gpio_request(p_egalax_i2c_dev->interrupt_gpio, "Touch IRQ");
++	if(ret<0)
++	{
++		EGALAX_DBG(DBG_MODULE, " gpio_request[%d] failed: %d\n", p_egalax_i2c_dev->interrupt_gpio, ret);
++		if(ret!=-EBUSY)
++			goto fail1;
++	}
++	gpio_direction_input(p_egalax_i2c_dev->interrupt_gpio);
++
++	input_dev = allocate_Input_Dev();
++	if(input_dev==NULL)
++	{
++		EGALAX_DBG(DBG_MODULE, " allocate_Input_Dev failed\n");
++		ret = -EINVAL; 
++		goto fail2;
++	}
++	EGALAX_DBG(DBG_MODULE, " Register input device done\n");
++
++	p_egalax_i2c_dev->client = client;
++	mutex_init(&p_egalax_i2c_dev->mutex_wq);
++
++	p_egalax_i2c_dev->ktouch_wq = create_singlethread_workqueue("egalax_touch_wq");
++	INIT_WORK(&p_egalax_i2c_dev->work_irq, egalax_i2c_wq_irq);
++
++	i2c_set_clientdata(client, p_egalax_i2c_dev);
++
++	if( gpio_get_value(p_egalax_i2c_dev->interrupt_gpio) )
++		p_egalax_i2c_dev->skip_packet = 0;
++	else
++		p_egalax_i2c_dev->skip_packet = 1;
++
++	p_egalax_i2c_dev->work_state = MODE_WORKING;
++
++	ret = request_irq(client->irq, egalax_i2c_interrupt, IRQF_DISABLED | IRQF_TRIGGER_LOW, client->name, p_egalax_i2c_dev);
++	if( ret ) 
++	{
++		EGALAX_DBG(DBG_MODULE, " Request irq(%d) failed\n", client->irq);
++		goto fail3;
++	}
++	EGALAX_DBG(DBG_MODULE, " Request irq(%d) gpio(%d) with result:%d\n", client->irq, p_egalax_i2c_dev->interrupt_gpio, ret);
++
++#ifdef CONFIG_HAS_EARLYSUSPEND
++	egalax_early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN;
++	egalax_early_suspend.suspend = egalax_i2c_early_suspend;
++	egalax_early_suspend.resume = egalax_i2c_early_resume;
++	register_early_suspend(&egalax_early_suspend);
++	EGALAX_DBG(DBG_MODULE, " Register early_suspend done\n");
++#endif
++
++	EGALAX_DBG(DBG_MODULE, " I2C probe done\n");
++	return 0;
++
++fail3:
++	i2c_set_clientdata(client, NULL);
++	destroy_workqueue(p_egalax_i2c_dev->ktouch_wq); 
++	free_irq(client->irq, p_egalax_i2c_dev);
++	input_unregister_device(input_dev);
++	input_dev = NULL;
++fail2:
++	gpio_free(p_egalax_i2c_dev->interrupt_gpio);
++fail1:
++	kfree(p_egalax_i2c_dev);
++	p_egalax_i2c_dev = NULL;
++
++	EGALAX_DBG(DBG_MODULE, " I2C probe failed\n");
++	return ret;
++}
++
++static int __devexit egalax_i2c_remove(struct i2c_client *client)
++{
++	struct _egalax_i2c *egalax_i2c = i2c_get_clientdata(client);
++
++	egalax_i2c->work_state = MODE_STOP;
++
++	cancel_work_sync(&egalax_i2c->work_irq);
++
++	if(client->irq)
++	{
++		disable_irq(client->irq);
++		free_irq(client->irq, egalax_i2c);
++	}
++
++	gpio_free(egalax_i2c->interrupt_gpio);
++	
++	if(egalax_i2c->ktouch_wq) 
++		destroy_workqueue(egalax_i2c->ktouch_wq); 
++
++#ifdef CONFIG_HAS_EARLYSUSPEND
++	unregister_early_suspend(&egalax_early_suspend);
++#endif
++
++	if(input_dev)
++	{
++		EGALAX_DBG(DBG_MODULE,  " Unregister input device\n");
++		input_unregister_device(input_dev);
++		input_dev = NULL;
++	}
++
++	i2c_set_clientdata(client, NULL);
++	kfree(egalax_i2c);
++	p_egalax_i2c_dev = NULL;
++
++	return 0;
++}
++
++static const struct i2c_device_id egalax_i2c_idtable[] = { 
++	{ "egalax_i2c", 0 }, 
++	{ } 
++};
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)
++static const struct of_device_id egalax_i2c_dt_ids[] = { 
++	{ .compatible = "eeti,egalax_i2c" }, 
++	{ } 
++};
++#endif
++
++MODULE_DEVICE_TABLE(i2c, egalax_i2c_idtable);
++
++static struct i2c_driver egalax_i2c_driver = {
++	.driver = {
++		.name 	= "egalax_i2c",
++		.owner	= THIS_MODULE,
++	#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)
++		.of_match_table = egalax_i2c_dt_ids,
++	#endif
++	},
++	.id_table	= egalax_i2c_idtable,
++	.probe		= egalax_i2c_probe,
++	.remove		= __devexit_p(egalax_i2c_remove),
++#ifndef CONFIG_HAS_EARLYSUSPEND
++	.suspend 	= egalax_i2c_pm_suspend,
++	.resume 	= egalax_i2c_pm_resume,
++#endif
++};
++
++static const struct file_operations egalax_cdev_fops = {
++	.owner	= THIS_MODULE,
++	.read	= egalax_cdev_read,
++	.write	= egalax_cdev_write,
++	.open	= egalax_cdev_open,
++	.release= egalax_cdev_release,
++	.poll	= egalax_cdev_poll,
++};
++
++static const struct file_operations egalax_proc_fops = {
++	.owner		= THIS_MODULE,
++        .open           = egalax_proc_open,
++        .read           = seq_read,
++        .write          = egalax_proc_write,
++        .llseek         = seq_lseek,
++	.release	= single_release,
++};
++
++static struct miscdevice egalax_misc_dev = {
++	.minor = MISC_DYNAMIC_MINOR,
++	.name = "egalax_i2c",
++	.fops = &egalax_cdev_fops,
++};
++
++static void egalax_i2c_ts_exit(void)
++{
++	if(p_char_dev)
++	{
++		if( p_char_dev->pFiFoBuf )
++			kfree(p_char_dev->pFiFoBuf);
++
++		kfree(p_char_dev);
++		p_char_dev = NULL;
++	}
++
++	misc_deregister(&egalax_misc_dev);
++
++	i2c_del_driver(&egalax_i2c_driver);
++
++	remove_proc_entry(PROC_FS_NAME, NULL);
++
++	EGALAX_DBG(DBG_MODULE, " Exit driver done!\n");
++}
++
++static struct egalax_char_dev* setup_chardev(void)
++{
++	struct egalax_char_dev *pCharDev;
++
++	pCharDev = kzalloc(1*sizeof(struct egalax_char_dev), GFP_KERNEL);
++	if(!pCharDev) 
++		goto fail_cdev;
++
++	spin_lock_init( &pCharDev->FiFoLock );
++	pCharDev->pFiFoBuf = kzalloc(sizeof(unsigned char)*FIFO_SIZE, GFP_KERNEL);
++	if(!pCharDev->pFiFoBuf)
++		goto fail_fifobuf;
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)
++	pCharDev->pDataKFiFo = kfifo_init(pCharDev->pFiFoBuf, FIFO_SIZE, GFP_KERNEL, &pCharDev->FiFoLock);
++	if( pCharDev->pDataKFiFo==NULL )
++		goto fail_kfifo;
++#else
++	kfifo_init(&pCharDev->DataKFiFo, pCharDev->pFiFoBuf, FIFO_SIZE);
++	if( !kfifo_initialized(&pCharDev->DataKFiFo) )
++		goto fail_kfifo;
++#endif
++	
++	pCharDev->OpenCnts = 0;
++	sema_init(&pCharDev->sem, 1);
++	init_waitqueue_head(&pCharDev->fifo_inq);
++
++	return pCharDev; 
++
++fail_kfifo:
++	kfree(pCharDev->pFiFoBuf);
++fail_fifobuf:
++	kfree(pCharDev);
++fail_cdev:
++	return NULL;
++}
++
++static int egalax_i2c_ts_init(void)
++{
++	int result;
++
++	result = misc_register(&egalax_misc_dev);
++	if(result) 
++	{
++		EGALAX_DBG(DBG_MODULE, " misc device register failed\n");
++		goto fail;
++	}
++
++	p_char_dev = setup_chardev(); // allocate the character device
++	if(!p_char_dev) 
++	{
++		result = -ENOMEM;
++		goto fail;
++	}
++
++	dbgProcFile = proc_create(PROC_FS_NAME, S_IRUGO|S_IWUGO, NULL, &egalax_proc_fops);
++	if (dbgProcFile == NULL) 
++	{
++		remove_proc_entry(PROC_FS_NAME, NULL);
++		EGALAX_DBG(DBG_MODULE, " Could not initialize /proc/%s\n", PROC_FS_NAME);
++	}
++
++	EGALAX_DBG(DBG_MODULE, " Driver init done!\n");
++	return i2c_add_driver(&egalax_i2c_driver);
++
++fail:	
++	egalax_i2c_ts_exit();
++	return result;
++}
++
++module_init(egalax_i2c_ts_init);
++module_exit(egalax_i2c_ts_exit);
++
++MODULE_AUTHOR("EETI <touch_fae@eeti.com>");
++MODULE_DESCRIPTION("egalax all points controller i2c driver");
++MODULE_LICENSE("GPL");

+ 48 - 0
board/GfA/Display001/linux_3.12.30/linux-006-custom-bootlogo.patch

@@ -0,0 +1,48 @@
+diff -Naurp linux-orig/drivers/video/logo/Kconfig linux-new/drivers/video/logo/Kconfig
+--- linux-orig/drivers/video/logo/Kconfig	2014-02-07 00:05:20.000000000 +0100
++++ linux-new/drivers/video/logo/Kconfig	2015-10-30 11:26:05.982804832 +0100
+@@ -15,6 +15,10 @@ config FB_LOGO_EXTRA
+ 	depends on FB=y
+ 	default y if SPU_BASE
+ 
++config FB_LOGO_CUSTOM
++	bool "Custom Linux Logo"
++	default n
++
+ config LOGO_LINUX_MONO
+ 	bool "Standard black and white Linux logo"
+ 	default y
+diff -Naurp linux-orig/drivers/video/logo/logo.c linux-new/drivers/video/logo/logo.c
+--- linux-orig/drivers/video/logo/logo.c	2014-02-07 00:05:20.000000000 +0100
++++ linux-new/drivers/video/logo/logo.c	2015-10-30 11:42:22.566239197 +0100
+@@ -31,6 +31,8 @@ MODULE_PARM_DESC(nologo, "Disables start
+  */
+ const struct linux_logo * __init_refok fb_find_logo(int depth)
+ {
++	extern const struct linux_logo logo_custom_clut224;
++	
+ 	const struct linux_logo *logo = NULL;
+ 
+ 	if (nologo)
+@@ -100,6 +102,10 @@ const struct linux_logo * __init_refok f
+ 		/* M32R Linux logo */
+ 		logo = &logo_m32r_clut224;
+ #endif
++#ifdef CONFIG_FB_LOGO_CUSTOM
++		/* Custom Linux logo */
++		logo = &logo_custom_clut224;
++#endif
+ 	}
+ 	return logo;
+ }
+diff -Naurp linux-orig/drivers/video/logo/Makefile linux-new/drivers/video/logo/Makefile
+--- linux-orig/drivers/video/logo/Makefile	2014-02-07 00:05:20.000000000 +0100
++++ linux-new/drivers/video/logo/Makefile	2015-10-30 11:16:38.303156003 +0100
+@@ -15,6 +15,7 @@ obj-$(CONFIG_LOGO_SUPERH_MONO)		+= logo_
+ obj-$(CONFIG_LOGO_SUPERH_VGA16)		+= logo_superh_vga16.o
+ obj-$(CONFIG_LOGO_SUPERH_CLUT224)	+= logo_superh_clut224.o
+ obj-$(CONFIG_LOGO_M32R_CLUT224)		+= logo_m32r_clut224.o
++obj-$(CONFIG_FB_LOGO_CUSTOM)		+= logo_custom_clut224.o
+ 
+ obj-$(CONFIG_SPU_BASE)			+= logo_spe_clut224.o
+ 

+ 2887 - 0
board/GfA/Display001/linux_3.12.30/linux-006-custom-bootlogo_ppm.patch

@@ -0,0 +1,2887 @@
+diff -Naurp a/drivers/video/logo/logo_custom_clut224.ppm b/drivers/video/logo/logo_custom_clut224.ppm
+--- a/drivers/video/logo/logo_custom_clut224.ppm	1970-01-01 01:00:00.000000000 +0100
++++ b/drivers/video/logo/logo_custom_clut224.ppm	2015-11-17 16:04:14.418518831 +0100
+@@ -0,0 +1,2883 @@
++P3
++179 96
++255
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  24 24 24  24 24 24  39 39 39
++57 57 57  72 72 72  87 87 87  87 87 87  87 87 87  87 87 87
++87 87 87  87 87 87  87 87 87  72 72 72  72 72 72  57 57 57
++39 39 39  24 24 24  24 24 24  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 55 55  0 72 72
++0 88 88  0 103 103  0 122 122  0 128 128  0 128 128  0 122 122
++0 103 103  0 103 103  0 72 72  0 40 40  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  24 24 24
++39 39 39  72 72 72  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  72 72 72  39 39 39
++24 24 24  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 55 55  0 103 103  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 103 103
++0 40 40  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  39 39 39  72 72 72  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  72 72 72  24 24 24  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 72 72
++0 122 122  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 122 122  0 55 55  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  24 24 24
++57 57 57  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  57 57 57
++24 24 24  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 40 40  0 103 103  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 122 122  0 103 103  0 40 40  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  39 39 39  72 72 72  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  72 72 72  24 24 24  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 72 72  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 72 72
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  24 24 24  87 87 87  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  87 87 87  24 24 24  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 103 103  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 88 88  0 21 21  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  24 24 24
++72 72 72  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  72 72 72
++24 24 24  0 0 0  0 0 0  0 0 0  0 0 0  0 21 21
++0 103 103  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 103 103  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  57 57 57  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++72 72 72  0 0 0  0 0 0  0 0 0  0 0 0  0 103 103
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 103 103  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  24 24 24  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  87 87 87
++0 0 0  0 0 0  0 0 0  0 0 0  0 88 88  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 72 72  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  57 57 57  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  24 24 24
++0 0 0  0 0 0  0 0 0  0 55 55  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 55 55  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++72 72 72  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  39 39 39  0 0 0
++0 0 0  0 0 0  0 21 21  0 122 122  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 122 122  0 21 21
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  24 24 24  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  57 57 57  0 0 0  0 0 0
++0 0 0  0 21 21  0 122 122  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 122 122
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 103 103
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  24 24 24  87 87 87  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  87 87 87
++72 72 72  57 57 57  39 39 39  39 39 39  39 39 39  24 24 24
++39 39 39  39 39 39  39 39 39  39 39 39  57 57 57  72 72 72
++87 87 87  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  72 72 72  0 0 0  0 0 0  0 0 0
++0 0 0  0 103 103  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 122 122
++0 88 88  0 55 55  0 21 21  0 21 21  0 21 21  0 40 40
++0 55 55  0 88 88  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 21 21  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  24 24 24  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  87 87 87  57 57 57  39 39 39  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  39 39 39  57 57 57  87 87 87  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  24 24 24  0 0 0  0 0 0  0 0 0
++0 72 72  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 72 72  0 21 21
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 21 21  0 88 88  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 55 55
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  24 24 24  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  87 87 87  57 57 57
++24 24 24  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  24 24 24
++39 39 39  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  39 39 39  0 0 0  0 0 0  0 0 0  0 40 40
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 122 122  0 40 40  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 55 55  0 122 122
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 88 88  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++24 24 24  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  72 72 72  39 39 39  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  39 39 39  72 72 72  105 105 105  105 105 105
++57 57 57  0 0 0  0 0 0  0 0 0  0 21 21  0 122 122
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 122 122  0 21 21  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 55 55
++0 122 122  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 103 103  0 0 0  0 0 0
++0 0 0  0 0 0  72 72 72  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  24 24 24
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++87 87 87  24 24 24  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  24 24 24  57 57 57
++0 0 0  0 0 0  0 0 0  0 0 0  0 103 103  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 55 55  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 55 55  0 122 122  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 122 122  0 21 21  0 0 0  0 0 0
++0 0 0  57 57 57  105 105 105  72 72 72  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  87 87 87
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  39 39 39
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 88 88  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 88 88  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 88 88  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 40 40  0 0 0  0 0 0  0 0 0
++39 39 39  105 105 105  105 105 105  105 105 105  57 57 57  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  87 87 87  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  72 72 72  0 21 21  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 55 55  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 103 103
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 21 21  0 103 103  0 128 128  0 128 128  0 128 128
++0 128 128  0 72 72  0 0 0  0 0 0  0 0 0  0 21 21
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  39 39 39
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  57 57 57  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  57 57 57  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 21 21  0 122 122  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 122 122  0 21 21
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 21 21  0 128 128  0 128 128  0 122 122
++0 103 103  0 0 0  0 0 0  0 0 0  0 0 0  87 87 87
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++24 24 24  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  39 39 39  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  24 24 24  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 122 122  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 40 40  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 55 55  0 128 128  0 122 122
++0 0 0  0 0 0  0 0 0  0 0 0  72 72 72  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++87 87 87  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  87 87 87  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  87 87 87
++0 21 21  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 88 88  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 72 72  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 72 72  0 21 21
++0 0 0  0 0 0  0 0 0  39 39 39  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  72 72 72  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  72 72 72  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  87 87 87  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 72 72
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 103 103  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  24 24 24  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  39 39 39  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++24 24 24  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  87 87 87  24 24 24  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 40 40  0 122 122
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 122 122  0 122 122  0 21 21  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  87 87 87  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  24 24 24  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++87 87 87  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  87 87 87  24 24 24  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 21 21  0 103 103  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 40 40  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  72 72 72  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  87 87 87  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  39 39 39
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  24 24 24  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 103 103  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 55 55  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  57 57 57  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  87 87 87  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  87 87 87
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  39 39 39  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 72 72  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 88 88
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  87 87 87  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  57 57 57
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  39 39 39  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++72 72 72  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 40 40  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 103 103  0 21 21
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++24 24 24  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  87 87 87  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  87 87 87
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 21 21  0 122 122  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 122 122  0 21 21  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  39 39 39  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++87 87 87  24 24 24  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  24 24 24  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  39 39 39
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 103 103  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 55 55  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  57 57 57  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  72 72 72  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  72 72 72  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  87 87 87  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 88 88
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 88 88  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  72 72 72
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  57 57 57  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  24 24 24  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 55 55  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 103 103  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++87 87 87  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  39 39 39  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  39 39 39  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  87 87 87  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 21 21  0 122 122  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 122 122  0 21 21  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++24 24 24  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  87 87 87  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  24 24 24  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 122 122  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 40 40  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  39 39 39  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  87 87 87  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  87 87 87  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 103 103  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 72 72
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  72 72 72  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  72 72 72
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  24 24 24  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  39 39 39  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 72 72  0 122 122  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 103 103  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  87 87 87  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++39 39 39  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  72 72 72  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 40 40  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 122 122  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  24 24 24  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  24 24 24  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  87 87 87  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  87 87 87  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 21 21
++0 122 122  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 122 122  0 40 40  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  24 24 24  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  39 39 39  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 103 103
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 55 55  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  57 57 57
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  72 72 72  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++24 24 24  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  24 24 24  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 72 72  0 122 122
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 88 88  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++87 87 87  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  57 57 57  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++39 39 39  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 55 55  0 122 122  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 103 103  0 21 21  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  24 24 24  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++57 57 57  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++87 87 87  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 21 21  0 122 122  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 122 122
++0 21 21  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  24 24 24  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  24 24 24
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++72 72 72  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++57 57 57  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 103 103  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 55 55
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  39 39 39  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  72 72 72
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++87 87 87  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++39 39 39  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 88 88  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 72 72  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  72 72 72  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++57 57 57  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++87 87 87  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++39 39 39  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 55 55  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 103 103  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  87 87 87  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  39 39 39  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++24 24 24  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 21 21
++0 122 122  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 122 122  0 21 21  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  24 24 24  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  24 24 24  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++24 24 24  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 21 21  0 103 103
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 40 40  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  39 39 39
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  87 87 87  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++24 24 24  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 103 103  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 72 72  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++57 57 57  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  72 72 72  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++24 24 24  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 72 72  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 122 122
++0 103 103  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  87 87 87  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  39 39 39  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++87 87 87  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++24 24 24  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 40 40  0 122 122  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 122 122
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  24 24 24  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  24 24 24
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++24 24 24  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 21 21  0 122 122  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 122 122  0 40 40
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  24 24 24  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++87 87 87  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++24 24 24  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 103 103  0 122 122  0 122 122  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 55 55  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  57 57 57  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++87 87 87  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++87 87 87  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++39 39 39  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 72 72  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 122 122  0 122 122
++0 122 122  0 122 122  0 122 122  0 122 122  0 122 122  0 122 122
++0 122 122  0 122 122  0 122 122  0 122 122  0 122 122  0 122 122
++0 122 122  0 122 122  0 122 122  0 122 122  0 122 122  0 122 122
++0 122 122  0 122 122  0 122 122  0 122 122  0 122 122  0 122 122
++0 122 122  0 122 122  0 122 122  0 122 122  0 122 122  0 122 122
++0 122 122  0 122 122  0 122 122  0 122 122  0 122 122  0 122 122
++0 122 122  0 122 122  0 122 122  0 122 122  0 122 122  0 122 122
++0 122 122  0 122 122  0 122 122  0 122 122  0 103 103  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  72 72 72  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  39 39 39  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++72 72 72  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++57 57 57  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 55 55
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 122 122  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 122 122  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 122 122  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 103 103  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  24 24 24  87 87 87
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  39 39 39  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++57 57 57  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++87 87 87  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 21 21  0 122 122
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 103 103  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  24 24 24
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++39 39 39  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 103 103  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 122 122  0 103 103  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++39 39 39  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  87 87 87  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++24 24 24  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  24 24 24  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 88 88  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 103 103  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  72 72 72  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  57 57 57  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 21 21  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  39 39 39  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 55 55  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 103 103  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  87 87 87  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  39 39 39
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  87 87 87  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  72 72 72  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 40 40  0 122 122  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 103 103  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  24 24 24  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++24 24 24  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  72 72 72  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  0 21 21  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 122 122  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 122 122  0 103 103  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  39 39 39  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++87 87 87  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  39 39 39  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  39 39 39  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 103 103  0 122 122  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 103 103  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  72 72 72  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  72 72 72  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  72 72 72  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 72 72
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 103 103  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  87 87 87
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  39 39 39  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  87 87 87  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  24 24 24  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 40 40  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 103 103  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  24 24 24  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  57 57 57  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  72 72 72  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 21 21  0 122 122  0 122 122
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 122 122  0 103 103  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++24 24 24  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  24 24 24  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 103 103  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 55 55  0 21 21  0 21 21  0 21 21  0 21 21  0 21 21
++0 21 21  0 21 21  0 21 21  0 21 21  0 21 21  0 21 21
++0 21 21  0 21 21  0 21 21  0 21 21  0 21 21  0 21 21
++0 21 21  0 21 21  0 21 21  0 21 21  0 21 21  0 21 21
++0 21 21  0 21 21  0 21 21  0 21 21  0 21 21  0 21 21
++0 21 21  0 21 21  0 21 21  0 21 21  0 21 21  0 21 21
++0 21 21  0 21 21  0 21 21  0 21 21  0 21 21  0 21 21
++0 21 21  0 21 21  0 21 21  0 21 21  0 21 21  0 21 21
++0 21 21  0 21 21  0 21 21  0 21 21  0 21 21  0 21 21
++0 21 21  0 21 21  0 21 21  0 21 21  0 21 21  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  57 57 57  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  87 87 87  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  72 72 72  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  72 72 72  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 88 88  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 88 88
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  72 72 72  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  57 57 57
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  39 39 39  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  24 24 24
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 55 55  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 103 103  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++24 24 24  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  87 87 87
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 21 21  0 122 122  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 21 21  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++39 39 39  39 39 39  39 39 39  39 39 39  39 39 39  39 39 39
++39 39 39  39 39 39  39 39 39  39 39 39  39 39 39  39 39 39
++39 39 39  39 39 39  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  24 24 24  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  24 24 24  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  39 39 39  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++57 57 57  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 21 21
++0 103 103  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 55 55  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  57 57 57
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  39 39 39  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  39 39 39  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  87 87 87  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  39 39 39  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 88 88
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 72 72  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  39 39 39  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++87 87 87  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  72 72 72
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  57 57 57  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  39 39 39
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  24 24 24  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 55 55  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 122 122
++0 128 128  0 103 103  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  24 24 24  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++39 39 39  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++87 87 87  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  39 39 39  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++87 87 87  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  87 87 87  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 40 40  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 122 122
++0 122 122  0 21 21  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  87 87 87  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  87 87 87
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++24 24 24  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  24 24 24  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++39 39 39  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  72 72 72  0 0 0  0 0 0
++0 0 0  0 0 0  0 21 21  0 122 122  0 122 122  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 122 122
++0 40 40  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  87 87 87  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  24 24 24
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  39 39 39  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  72 72 72  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  87 87 87  0 0 0
++0 0 0  0 0 0  0 103 103  0 122 122  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 122 122  0 72 72
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  87 87 87  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  72 72 72  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  57 57 57  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  72 72 72
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  87 87 87
++0 0 0  0 72 72  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 103 103  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++87 87 87  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  87 87 87  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++39 39 39  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  39 39 39  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 103 103  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  24 24 24  87 87 87
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  39 39 39  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  24 24 24  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  72 72 72  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  36 120 120  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 40 40  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  39 39 39  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  72 72 72  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  24 24 24  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  87 87 87  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  87 87 87  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  61 115 115  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 55 55  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  57 57 57  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  87 87 87  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  57 57 57
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  87 87 87  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  24 24 24  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  87 109 109  24 123 123
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 88 88  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++39 39 39  87 87 87  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++72 72 72  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  57 57 57  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  24 24 24
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++87 109 109  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 103 103  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  24 24 24  72 72 72
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++24 24 24  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  24 24 24  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++39 39 39  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  69 113 113  0 128 128  0 128 128  0 122 122
++0 21 21  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  24 24 24  72 72 72  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  39 39 39
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  24 24 24  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  24 24 24
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  39 39 39  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  87 109 109  38 67 67
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++39 39 39  87 87 87  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  39 39 39  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  39 39 39  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  87 87 87
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  39 39 39  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  72 72 72  39 39 39  24 24 24  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  24 24 24  39 39 39  72 72 72  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  39 39 39  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  72 72 72  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++57 57 57  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  39 39 39  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  72 72 72
++57 57 57  39 39 39  24 24 24  24 24 24  24 24 24  24 24 24
++0 0 0  24 24 24  24 24 24  39 39 39  39 39 39  57 57 57
++87 87 87  87 87 87  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  39 39 39  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  87 87 87  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  39 39 39  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  24 24 24  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  24 24 24  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  24 24 24  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  24 24 24  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  24 123 123
++87 109 109  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  87 87 87
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  39 39 39
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  87 87 87  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 103 103  0 128 128
++0 128 128  69 113 113  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  72 72 72  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++57 57 57  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  72 72 72  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 72 72  0 128 128  0 128 128
++0 128 128  0 128 128  36 120 120  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  87 87 87  39 39 39  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  72 72 72  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  57 57 57  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 40 40  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  69 113 113  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  72 72 72  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  24 24 24
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 21 21  0 122 122  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  36 120 120
++87 109 109  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  87 87 87
++24 24 24  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  24 24 24  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 103 103  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  36 120 120  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  39 39 39  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  57 57 57  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++87 87 87  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 88 88  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 122 122  43 92 92  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  87 87 87  39 39 39  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  72 72 72  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  57 57 57  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 55 55
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 103 103  0 0 0  0 0 0  39 39 39
++72 72 72  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  72 72 72
++39 39 39  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  87 87 87
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  39 39 39  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 40 40  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 122 122  0 21 21  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  39 39 39  87 87 87  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  87 87 87  39 39 39  24 24 24  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  24 24 24
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  87 87 87  24 24 24  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 103 103  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 122 122  0 55 55  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  39 39 39
++72 72 72  87 87 87  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  57 57 57
++39 39 39  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++39 39 39  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  87 87 87  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 103 103  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 128 128  0 128 128  0 128 128  0 128 128  0 128 128  0 128 128
++0 72 72  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 21 21  24 24 24  39 39 39  57 57 57
++72 72 72  87 87 87  87 87 87  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  87 87 87  87 87 87  72 72 72
++72 72 72  39 39 39  24 24 24  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0
++0 0 0  72 72 72  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  105 105 105  105 105 105
++105 105 105  105 105 105  105 105 105  105 105 105  72 72 72

+ 453 - 0
board/GfA/Display001/linux_3.12.30/linux-007-gpio-helper.patch

@@ -0,0 +1,453 @@
+diff -Naurp a/drivers/gpio/gpio-of-helper.c b/drivers/gpio/gpio-of-helper.c
+--- a/drivers/gpio/gpio-of-helper.c	1970-01-01 01:00:00.000000000 +0100
++++ b/drivers/gpio/gpio-of-helper.c	2015-10-30 21:13:09.834705182 +0100
+@@ -0,0 +1,414 @@
++/*
++ * GPIO OF based helper
++ *
++ * A simple DT based driver to provide access to GPIO functionality
++ * to user-space via sysfs.
++ *
++ * Copyright (C) 2013 Pantelis Antoniou <panto@antoniou-consulting.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/string.h>
++#include <linux/timer.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/delay.h>
++#include <linux/bitops.h>
++#include <linux/err.h>
++#include <linux/of.h>
++#include <linux/of_device.h>
++#include <linux/of_gpio.h>
++#include <linux/pinctrl/pinctrl.h>
++#include <linux/pinctrl/pinmux.h>
++#include <linux/pinctrl/consumer.h>
++#include <linux/atomic.h>
++#include <linux/clk.h>
++#include <linux/interrupt.h>
++#include <linux/math64.h>
++#include <linux/atomic.h>
++#include <linux/idr.h>
++
++/* fwd decl. */
++struct gpio_of_helper_info;
++
++enum gpio_type {
++	GPIO_TYPE_INPUT = 0,
++	GPIO_TYPE_OUTPUT = 1,
++};
++
++struct gpio_of_entry {
++	int id;
++	struct gpio_of_helper_info *info;
++	struct device_node *node;
++	enum gpio_type type;
++	int gpio;
++	enum of_gpio_flags gpio_flags;
++	int irq;
++	const char *name;
++	atomic64_t counter;
++	unsigned int count_flags;
++#define COUNT_RISING_EDGE	(1 << 0)
++#define COUNT_FALLING_EDGE	(1 << 1)
++};
++
++struct gpio_of_helper_info {
++	struct platform_device *pdev;
++	struct idr idr;
++};
++
++static const struct of_device_id gpio_of_helper_of_match[] = {
++	{
++		.compatible = "gpio-of-helper",
++	},
++	{ },
++};
++MODULE_DEVICE_TABLE(of, gpio_of_helper_of_match);
++
++static ssize_t gpio_of_helper_show_status(struct device *dev,
++				struct device_attribute *attr, char *buf)
++{
++	struct platform_device *pdev = to_platform_device(dev);
++	struct gpio_of_helper_info *info = platform_get_drvdata(pdev);
++	struct gpio_of_entry *entry;
++	char *p, *e;
++	int id, n;
++
++	p = buf;
++	e = p + PAGE_SIZE;
++	n = 0;
++	idr_for_each_entry(&info->idr, entry, id) {
++		switch (entry->type) {
++		case GPIO_TYPE_INPUT:
++			n = snprintf(p, e - p, "%2d %-24s %3d %-3s %llu\n",
++				entry->id, entry->name, entry->gpio, "IN",
++				(unsigned long long)
++					atomic64_read(&entry->counter));
++			break;
++		case GPIO_TYPE_OUTPUT:
++			n = snprintf(p, e - p, "%2d %-24s %3d %-3s\n",
++				entry->id, entry->name, entry->gpio, "OUT");
++			break;
++		}
++		p += n;
++	}
++
++	return p - buf;
++}
++
++static DEVICE_ATTR(status, S_IRUGO,
++		gpio_of_helper_show_status, NULL);
++
++static irqreturn_t gpio_of_helper_handler(int irq, void *ptr)
++{
++	struct gpio_of_entry *entry = ptr;
++
++	/* caution - low speed interfaces only! */
++	atomic64_inc(&entry->counter);
++
++	return IRQ_HANDLED;
++}
++
++static struct gpio_of_entry *
++gpio_of_entry_create(struct gpio_of_helper_info *info,
++		struct device_node *node)
++{
++	struct platform_device *pdev = info->pdev;
++	struct device *dev = &pdev->dev;
++	struct gpio_of_entry *entry;
++	int err, gpio, irq;
++	unsigned int req_flags, count_flags, irq_flags;
++	enum gpio_type type;
++	enum of_gpio_flags gpio_flags;
++	const char *name;
++
++	/* get the type of the node first */
++	if (of_property_read_bool(node, "input"))
++		type = GPIO_TYPE_INPUT;
++	else if (of_property_read_bool(node, "output"))
++		type = GPIO_TYPE_OUTPUT;
++	else {
++		dev_err(dev, "Not valid gpio node type\n");
++		err = -EINVAL;
++		goto err_bad_node;
++	}
++
++	/* get the name */
++	err = of_property_read_string(node, "gpio-name", &name);
++	if (err != 0) {
++		dev_err(dev, "Failed to get name property\n");
++		goto err_bad_node;
++	}
++
++	err = of_get_named_gpio_flags(node, "gpio", 0, &gpio_flags);
++	if (IS_ERR_VALUE(err)) {
++		dev_err(dev, "Failed to get gpio property of '%s'\n", name);
++		goto err_bad_node;
++	}
++	gpio = err;
++
++	req_flags = 0;
++	count_flags = 0;
++
++	/* set the request flags */
++	switch (type) {
++		case GPIO_TYPE_INPUT:
++			req_flags = GPIOF_DIR_IN | GPIOF_EXPORT;
++			if (of_property_read_bool(node, "count-falling-edge"))
++				count_flags |= COUNT_FALLING_EDGE;
++			if (of_property_read_bool(node, "count-rising-edge"))
++				count_flags |= COUNT_RISING_EDGE;
++			break;
++		case GPIO_TYPE_OUTPUT:
++			req_flags = GPIOF_DIR_OUT | GPIOF_EXPORT;
++			if (of_property_read_bool(node, "init-high"))
++				req_flags |= GPIOF_OUT_INIT_HIGH;
++			else if (of_property_read_bool(node, "init-low"))
++				req_flags |= GPIOF_OUT_INIT_LOW;
++			break;
++	}
++
++	/* request the gpio */
++	err = devm_gpio_request_one(dev, gpio, req_flags, name);
++	if (err != 0) {
++		dev_err(dev, "Failed to request gpio '%s'\n", name);
++		goto err_bad_node;
++	}
++
++	irq = -1;
++	irq_flags = 0;
++
++	/* counter mode requested - need an interrupt */
++	if (count_flags != 0) {
++		irq = gpio_to_irq(gpio);
++		if (IS_ERR_VALUE(irq)) {
++			dev_err(dev, "Failed to request gpio '%s'\n", name);
++			goto err_bad_node;
++		}
++
++		if (count_flags & COUNT_RISING_EDGE)
++			irq_flags |= IRQF_TRIGGER_RISING;
++		if (count_flags & COUNT_FALLING_EDGE)
++			irq_flags |= IRQF_TRIGGER_FALLING;
++	}
++
++	if (!idr_pre_get(&info->idr, GFP_KERNEL)) {
++		dev_err(dev, "Failed on idr_pre_get of '%s'\n", name);
++		err = -ENOMEM;
++		goto err_no_mem;
++	}
++
++	entry = devm_kzalloc(dev, sizeof(*entry), GFP_KERNEL);
++	if (entry == NULL) {
++		dev_err(dev, "Failed to allocate gpio entry of '%s'\n", name);
++		err = -ENOMEM;
++		goto err_no_mem;
++	}
++
++	entry->id = -1;
++	entry->info = info;
++	entry->node = of_node_get(node);	/* get node reference */
++	entry->type = type;
++	entry->gpio = gpio;
++	entry->gpio_flags = gpio_flags;
++	entry->irq = irq;
++	entry->name = name;
++
++	/* interrupt enable is last thing done */
++	if (irq >= 0) {
++		atomic64_set(&entry->counter, 0);
++		entry->count_flags = count_flags;
++		err = devm_request_irq(dev, irq, gpio_of_helper_handler,
++				irq_flags, name, entry);
++		if (err != 0) {
++			dev_err(dev, "Failed to request irq of '%s'\n", name);
++			goto err_no_irq;
++		}
++	}
++
++	/* all done; insert */
++	err = idr_get_new(&info->idr, entry, &entry->id);
++	if (IS_ERR_VALUE(err)) {
++		dev_err(dev, "Failed to idr_get_new  of '%s'\n", name);
++		goto err_fail_idr;
++	}
++
++	dev_info(dev, "Allocated GPIO id=%d\n", entry->id);
++
++	return entry;
++
++err_fail_idr:
++	/* nothing to do */
++err_no_irq:
++	/* release node ref */
++	of_node_put(node);
++	/* nothing else needs to be done, devres handles it */
++err_no_mem:
++err_bad_node:
++	return ERR_PTR(err);
++}
++
++static int gpio_of_entry_destroy(struct gpio_of_entry *entry)
++{
++	struct gpio_of_helper_info *info = entry->info;
++	struct platform_device *pdev = info->pdev;
++	struct device *dev = &pdev->dev;
++
++	dev_info(dev, "Destroying GPIO id=%d\n", entry->id);
++
++	/* remove from the IDR */
++	idr_remove(&info->idr, entry->id);
++
++	/* remove node ref */
++	of_node_put(entry->node);
++
++	/* free gpio */
++	devm_gpio_free(dev, entry->gpio);
++
++	/* gree irq */
++	if (entry->irq >= 0)
++		devm_free_irq(dev, entry->irq, entry);
++
++	/* and free */
++	devm_kfree(dev, entry);
++
++	return 0;
++}
++
++static int gpio_of_helper_probe(struct platform_device *pdev)
++{
++	struct device *dev = &pdev->dev;
++	struct gpio_of_helper_info *info;
++	struct gpio_of_entry *entry;
++	struct device_node *pnode = pdev->dev.of_node;
++	struct device_node *cnode;
++	struct pinctrl *pinctrl;
++	int err;
++
++	/* we only support OF */
++	if (pnode == NULL) {
++		dev_err(&pdev->dev, "No platform of_node!\n");
++		return -ENODEV;
++	}
++
++	pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
++	if (IS_ERR(pinctrl)) {
++		/* special handling for probe defer */
++		if (PTR_ERR(pinctrl) == -EPROBE_DEFER)
++			return -EPROBE_DEFER;
++
++		dev_warn(&pdev->dev,
++			"pins are not configured from the driver\n");
++	}
++
++	info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL);
++	if (info == NULL) {
++		dev_err(&pdev->dev, "Failed to allocate info\n");
++		err = -ENOMEM;
++		goto err_no_mem;
++	}
++	platform_set_drvdata(pdev, info);
++	info->pdev = pdev;
++
++	idr_init(&info->idr);
++
++	err = device_create_file(dev, &dev_attr_status);
++	if (err != 0) {
++		dev_err(dev, "Failed to create status sysfs attribute\n");
++		goto err_no_sysfs;
++	}
++
++	for_each_child_of_node(pnode, cnode) {
++
++		entry = gpio_of_entry_create(info, cnode);
++		if (IS_ERR_OR_NULL(entry)) {
++			dev_err(dev, "Failed to create gpio entry\n");
++			err = PTR_ERR(entry);
++			goto err_fail_entry;
++		}
++	}
++
++	dev_info(&pdev->dev, "ready\n");
++
++	return 0;
++err_fail_entry:
++	device_remove_file(&pdev->dev, &dev_attr_status);
++err_no_sysfs:
++err_no_mem:
++	return err;
++}
++
++static int gpio_of_helper_remove(struct platform_device *pdev)
++{
++	struct gpio_of_helper_info *info = platform_get_drvdata(pdev);
++	struct gpio_of_entry *entry;
++	int id;
++
++	dev_info(&pdev->dev, "removing\n");
++
++	device_remove_file(&pdev->dev, &dev_attr_status);
++
++	id = 0;
++	idr_for_each_entry(&info->idr, entry, id) {
++		/* destroy each and every one */
++		gpio_of_entry_destroy(entry);
++	}
++
++	return 0;
++}
++
++#ifdef CONFIG_PM
++#ifdef CONFIG_PM_RUNTIME
++static int gpio_of_helper_runtime_suspend(struct device *dev)
++{
++	/* place holder */
++	return 0;
++}
++
++static int gpio_of_helper_runtime_resume(struct device *dev)
++{
++	/* place holder */
++	return 0;
++}
++#endif /* CONFIG_PM_RUNTIME */
++
++static struct dev_pm_ops gpio_of_helper_pm_ops = {
++	SET_RUNTIME_PM_OPS(gpio_of_helper_runtime_suspend,
++			   gpio_of_helper_runtime_resume, NULL)
++};
++#define GPIO_OF_HELPER_PM_OPS (&gpio_of_helper_pm_ops)
++#else
++#define GPIO_OF_HELPER_PM_OPS NULL
++#endif /* CONFIG_PM */
++
++struct platform_driver gpio_of_helper_driver = {
++	.probe		= gpio_of_helper_probe,
++	.remove		= gpio_of_helper_remove,
++	.driver = {
++		.name		= "gpio-of-helper",
++		.owner		= THIS_MODULE,
++		.pm		= GPIO_OF_HELPER_PM_OPS,
++		.of_match_table	= gpio_of_helper_of_match,
++	},
++};
++
++module_platform_driver(gpio_of_helper_driver);
++
++MODULE_AUTHOR("Pantelis Antoniou <panto@antoniou-consulting.com>");
++MODULE_DESCRIPTION("GPIO OF Helper driver");
++MODULE_LICENSE("GPL");
++MODULE_ALIAS("platform:gpio-of-helper");
+diff -Naurp a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
+--- a/drivers/gpio/Kconfig	2014-02-07 00:05:20.000000000 +0100
++++ b/drivers/gpio/Kconfig	2015-10-30 21:13:09.826705188 +0100
+@@ -81,6 +81,20 @@ config GPIO_SYSFS
+ 	  Kernel drivers may also request that a particular GPIO be
+ 	  exported to userspace; this can be useful when debugging.
+ 
++config GPIO_OF_HELPER
++	bool "GPIO OF helper device"
++	depends on OF_GPIO 
++	help
++	  Say Y here to add an GPIO OF helper driver
++
++	  Allows you specify a GPIO helper based on OF
++	  which allows simple export of GPIO functionality
++	  in user-space.
++
++	  Features include, value set/get, direction control,
++	  interrupt/value change poll support, event counting
++	  and others.
++
+ config GPIO_GENERIC
+ 	tristate
+ 
+diff -Naurp a/drivers/gpio/Makefile b/drivers/gpio/Makefile
+--- a/drivers/gpio/Makefile	2014-02-07 00:05:20.000000000 +0100
++++ b/drivers/gpio/Makefile	2015-10-30 21:13:09.826705188 +0100
+@@ -6,6 +6,7 @@ obj-$(CONFIG_GPIO_DEVRES)	+= devres.o
+ obj-$(CONFIG_GPIOLIB)		+= gpiolib.o
+ obj-$(CONFIG_OF_GPIO)		+= gpiolib-of.o
+ obj-$(CONFIG_GPIO_ACPI)		+= gpiolib-acpi.o
++obj-$(CONFIG_GPIO_OF_HELPER)	+= gpio-of-helper.o
+ 
+ # Device drivers. Generally keep list sorted alphabetically
+ obj-$(CONFIG_GPIO_GENERIC)	+= gpio-generic.o

+ 271 - 0
board/GfA/Display001/linux_3.12.30/linux-009-pru.patch

@@ -0,0 +1,271 @@
+From e6720081e390bd1014edf00a800c24d6dfb0abbf Mon Sep 17 00:00:00 2001
+From: Elias <elias@iagent.no>
+Date: Tue, 14 Jan 2014 11:10:17 +0100
+Subject: [PATCH] These are the patches necessary for enabling the PRU with
+ kernel 3.12. Most of this has been taken form the 3.9-patchset and updated.
+
+---
+ arch/arm/boot/dts/am33xx.dtsi |  11 +++++
+ drivers/uio/Kconfig           |   4 +-
+ drivers/uio/uio_pruss.c       | 105 ++++++++++++++++++++++++++++++++++++++++--
+ 3 files changed, 115 insertions(+), 5 deletions(-)
+
+diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi
+index 3dd2af6..d9fd58b 100644
+--- a/arch/arm/boot/dts/am33xx.dtsi
++++ b/arch/arm/boot/dts/am33xx.dtsi
+@@ -368,6 +368,17 @@
+ 			ti,timer-pwm;
+ 		};
+ 
++		pruss: pruss@4a300000 {
++			compatible = "ti,pruss-v2";
++			ti,hwmods = "pruss";
++			ti,deassert-hard-reset = "pruss", "pruss";
++			reg = <0x4a300000 0x080000>;
++			ti,pintc-offset = <0x20000>;
++			interrupt-parent = <&intc>;
++			status = "disabled";
++			interrupts = <20 21 22 23 24 25 26 27>;
++		};
++
+ 		rtc@44e3e000 {
+ 			compatible = "ti,da830-rtc";
+ 			reg = <0x44e3e000 0x1000>;
+diff --git a/drivers/uio/Kconfig b/drivers/uio/Kconfig
+index 5a90914..6c5abe9 100644
+--- a/drivers/uio/Kconfig
++++ b/drivers/uio/Kconfig
+@@ -106,10 +106,10 @@ config UIO_NETX
+ 
+ config UIO_PRUSS
+ 	tristate "Texas Instruments PRUSS driver"
+-	depends on ARCH_DAVINCI_DA850
++	depends on ARCH_DAVINCI_DA850 || SOC_AM33XX
+ 	select GENERIC_ALLOCATOR
+ 	help
+-	  PRUSS driver for OMAPL138/DA850/AM18XX devices
++	  PRUSS driver for OMAPL138/DA850/AM18XX and AM33XX devices
+ 	  PRUSS driver requires user space components, examples and user space
+ 	  driver is available from below SVN repo - you may use anonymous login
+ 
+diff --git a/drivers/uio/uio_pruss.c b/drivers/uio/uio_pruss.c
+index f519da9..d99a772 100644
+--- a/drivers/uio/uio_pruss.c
++++ b/drivers/uio/uio_pruss.c
+@@ -19,6 +19,7 @@
+ #include <linux/module.h>
+ #include <linux/moduleparam.h>
+ #include <linux/platform_device.h>
++#include <linux/of_gpio.h>
+ #include <linux/uio_driver.h>
+ #include <linux/platform_data/uio_pruss.h>
+ #include <linux/io.h>
+@@ -26,6 +27,11 @@
+ #include <linux/dma-mapping.h>
+ #include <linux/slab.h>
+ #include <linux/genalloc.h>
++#include <linux/of_address.h>
++#include <linux/of_device.h>
++#include <linux/pinctrl/consumer.h>
++#include <linux/err.h>
++#include <linux/pm_runtime.h>
+ 
+ #define DRV_NAME "pruss_uio"
+ #define DRV_VERSION "1.0"
+@@ -106,10 +112,12 @@ static void pruss_cleanup(struct platform_device *dev,
+ 		dma_free_coherent(&dev->dev, extram_pool_sz, gdev->ddr_vaddr,
+ 			gdev->ddr_paddr);
+ 	}
++#ifdef CONFIG_ARCH_DAVINCI_DA850
+ 	if (gdev->sram_vaddr)
+ 		gen_pool_free(gdev->sram_pool,
+ 			      gdev->sram_vaddr,
+ 			      sram_pool_sz);
++#endif
+ 	kfree(gdev->info);
+ 	clk_put(gdev->pruss_clk);
+ 	kfree(gdev);
+@@ -120,8 +128,14 @@ static int pruss_probe(struct platform_device *dev)
+ 	struct uio_info *p;
+ 	struct uio_pruss_dev *gdev;
+ 	struct resource *regs_prussio;
++	struct resource res;
+ 	int ret = -ENODEV, cnt = 0, len;
+ 	struct uio_pruss_pdata *pdata = dev_get_platdata(&dev->dev);
++    struct pinctrl *pinctrl;
++
++	int count;
++	struct device_node *child;
++	const char *pin_name;
+ 
+ 	gdev = kzalloc(sizeof(struct uio_pruss_dev), GFP_KERNEL);
+ 	if (!gdev)
+@@ -132,6 +146,7 @@ static int pruss_probe(struct platform_device *dev)
+ 		kfree(gdev);
+ 		return -ENOMEM;
+ 	}
++#ifdef CONFIG_ARCH_DAVINCI_DA850
+ 	/* Power on PRU in case its not done as part of boot-loader */
+ 	gdev->pruss_clk = clk_get(&dev->dev, "pruss");
+ 	if (IS_ERR(gdev->pruss_clk)) {
+@@ -143,6 +158,63 @@ static int pruss_probe(struct platform_device *dev)
+ 	} else {
+ 		clk_enable(gdev->pruss_clk);
+ 	}
++#endif
++
++	if (dev->dev.of_node) {
++		pm_runtime_enable(&dev->dev);
++		ret = pm_runtime_get_sync(&dev->dev);
++		if (IS_ERR_VALUE(ret)) {
++			dev_err(&dev->dev, "pm_runtime_get_sync() failed\n");
++			return ret;
++		}
++
++		ret = of_address_to_resource(dev->dev.of_node, 0, &res);
++		if (IS_ERR_VALUE(ret)) {
++			dev_err(&dev->dev, "failed to parse DT reg\n");
++			return ret;
++		}
++		regs_prussio = &res;
++	}
++
++	pinctrl = devm_pinctrl_get_select_default(&dev->dev);
++	if (IS_ERR(pinctrl))
++		dev_warn(&dev->dev,
++			"pins are not configured from the driver\n");
++	else{
++		count = of_get_child_count(dev->dev.of_node);
++		if (!count){
++			dev_info(&dev->dev, "No children\n");
++			return -ENODEV;
++		}
++		// Run through all children. They have lables for easy reference.
++		for_each_child_of_node(dev->dev.of_node, child){
++			enum of_gpio_flags flags;
++			unsigned gpio;
++
++			count = of_gpio_count(child);
++
++			ret = of_property_count_strings(child, "pin-names");
++			if (ret < 0) {
++				dev_err(&dev->dev, "Failed to get pin-names\n");
++				continue;
++			}
++			if(count != ret){
++				dev_err(&dev->dev, "The number of gpios (%d) does not match"\
++					" the number of pin names (%d)\n", count, ret);
++				continue;
++			}
++
++			dev_err(&dev->dev, "Child has %u gpios\n", count);
++			for(cnt=0; cnt<count; cnt++){
++				ret = of_property_read_string_index(child,
++					"pin-names", cnt, &pin_name);
++				if (ret != 0)
++					dev_err(&dev->dev, "Error on pin-name #%d\n", cnt);
++				gpio = of_get_gpio_flags(child, cnt, &flags);
++				ret = devm_gpio_request_one(&dev->dev, gpio, flags, pin_name);
++			}
++		}
++	}
+ 
+ 	regs_prussio = platform_get_resource(dev, IORESOURCE_MEM, 0);
+ 	if (!regs_prussio) {
+@@ -150,19 +222,23 @@ static int pruss_probe(struct platform_device *dev)
+ 		goto out_free;
+ 	}
+ 
++    dev_err(&dev->dev,"pruss_probe() get_resource ok\n");
++
+ 	if (!regs_prussio->start) {
+ 		dev_err(&dev->dev, "Invalid memory resource\n");
+ 		goto out_free;
+ 	}
+ 
+-	if (pdata->sram_pool) {
++	if (pdata && pdata->sram_pool) {
+ 		gdev->sram_pool = pdata->sram_pool;
++#ifdef CONFIG_ARCH_DAVINCI_DA850
+ 		gdev->sram_vaddr =
+ 			gen_pool_alloc(gdev->sram_pool, sram_pool_sz);
+ 		if (!gdev->sram_vaddr) {
+ 			dev_err(&dev->dev, "Could not allocate SRAM pool\n");
+ 			goto out_free;
+ 		}
++#endif
+ 		gdev->sram_paddr =
+ 			gen_pool_virt_to_phys(gdev->sram_pool,
+ 					      gdev->sram_vaddr);
+@@ -182,7 +258,17 @@ static int pruss_probe(struct platform_device *dev)
+ 		goto out_free;
+ 	}
+ 
+-	gdev->pintc_base = pdata->pintc_base;
++	if (dev->dev.of_node) {
++		ret = of_property_read_u32(dev->dev.of_node,
++					   "ti,pintc-offset",
++					   &gdev->pintc_base);
++		if (ret < 0) {
++			dev_err(&dev->dev,
++				"Can't parse ti,pintc-offset property\n");
++			goto out_free;
++		}
++	} else
++		gdev->pintc_base = pdata->pintc_base;
+ 	gdev->hostirq_start = platform_get_irq(dev, 0);
+ 
+ 	for (cnt = 0, p = gdev->info; cnt < MAX_PRUSS_EVT; cnt++, p++) {
+@@ -190,6 +276,7 @@ static int pruss_probe(struct platform_device *dev)
+ 		p->mem[0].size = resource_size(regs_prussio);
+ 		p->mem[0].memtype = UIO_MEM_PHYS;
+ 
++#ifdef CONFIG_ARCH_DAVINCI_DA850
+ 		p->mem[1].addr = gdev->sram_paddr;
+ 		p->mem[1].size = sram_pool_sz;
+ 		p->mem[1].memtype = UIO_MEM_PHYS;
+@@ -197,6 +284,11 @@ static int pruss_probe(struct platform_device *dev)
+ 		p->mem[2].addr = gdev->ddr_paddr;
+ 		p->mem[2].size = extram_pool_sz;
+ 		p->mem[2].memtype = UIO_MEM_PHYS;
++#else
++		p->mem[1].addr = gdev->ddr_paddr;
++		p->mem[1].size = extram_pool_sz;
++		p->mem[1].memtype = UIO_MEM_PHYS;
++#endif
+ 
+ 		p->name = kasprintf(GFP_KERNEL, "pruss_evt%d", cnt);
+ 		p->version = DRV_VERSION;
+@@ -210,7 +302,6 @@ static int pruss_probe(struct platform_device *dev)
+ 		if (ret < 0)
+ 			goto out_free;
+ 	}
+-
+ 	platform_set_drvdata(dev, gdev);
+ 	return 0;
+ 
+@@ -227,12 +318,20 @@ static int pruss_remove(struct platform_device *dev)
+ 	return 0;
+ }
+ 
++static const struct of_device_id pruss_dt_ids[] = {
++	{ .compatible = "ti,pruss-v1", .data = NULL, },
++	{ .compatible = "ti,pruss-v2", .data = NULL, },
++	{},
++};
++MODULE_DEVICE_TABLE(of, pruss_dt_ids);
++
+ static struct platform_driver pruss_driver = {
+ 	.probe = pruss_probe,
+ 	.remove = pruss_remove,
+ 	.driver = {
+ 		   .name = DRV_NAME,
+ 		   .owner = THIS_MODULE,
++		   .of_match_table = pruss_dt_ids,
+ 		   },
+ };
+ 
+-- 
+1.8.5.2
+

+ 55 - 0
board/GfA/Display001/linux_3.12.30/linux-010-pru_ena.patch

@@ -0,0 +1,55 @@
+diff -Nur -x '*.S' -x '*.lds' a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c
+--- a/arch/arm/mach-omap2/omap_device.c	2014-02-07 00:05:20.000000000 +0100
++++ b/arch/arm/mach-omap2/omap_device.c	2016-01-10 20:05:46.923487984 +0100
+@@ -123,8 +123,8 @@
+ 	struct omap_device *od;
+ 	struct omap_hwmod *oh;
+ 	struct device_node *node = pdev->dev.of_node;
+-	const char *oh_name;
+-	int oh_cnt, i, ret = 0;
++	const char *oh_name, *rst_name;
++	int oh_cnt, dstr_cnt, i, ret = 0;
+ 	bool device_active = false;
+ 
+ 	oh_cnt = of_property_count_strings(node, "ti,hwmods");
+@@ -176,6 +176,26 @@
+ 		pm_runtime_set_active(&pdev->dev);
+ 	}
+ 
++       dstr_cnt =
++               of_property_count_strings(node, "ti,deassert-hard-reset");
++       if (dstr_cnt > 0) {
++               for (i = 0; i < dstr_cnt; i += 2) {
++                       of_property_read_string_index(
++                               node, "ti,deassert-hard-reset", i,
++                               &oh_name);
++                       of_property_read_string_index(
++                               node, "ti,deassert-hard-reset", i+1,
++                               &rst_name);
++                       oh = omap_hwmod_lookup(oh_name);
++                       if (!oh) {
++                               dev_warn(&pdev->dev,
++                               "Cannot parse deassert property for '%s'\n",
++                               oh_name);
++                               break;
++                       }
++                       omap_hwmod_deassert_hardreset(oh, rst_name);
++               }
++       }
+ odbfd_exit1:
+ 	kfree(hwmods);
+ odbfd_exit:
+diff -Nur -x '*.S' -x '*.lds' a/drivers/uio/uio_pruss.c b/drivers/uio/uio_pruss.c
+--- a/drivers/uio/uio_pruss.c	2016-01-10 22:06:02.731071925 +0100
++++ b/drivers/uio/uio_pruss.c	2016-01-10 22:04:52.011075216 +0100
+@@ -182,10 +182,6 @@
+ 			"pins are not configured from the driver\n");
+ 	else{
+ 		count = of_get_child_count(dev->dev.of_node);
+-		if (!count){
+-			dev_info(&dev->dev, "No children\n");
+-			return -ENODEV;
+-		}
+ 		// Run through all children. They have lables for easy reference.
+ 		for_each_child_of_node(dev->dev.of_node, child){
+ 			enum of_gpio_flags flags;

+ 24 - 0
board/GfA/Display001/linux_3.12.30/linux-011-bootlogo_move.patch

@@ -0,0 +1,24 @@
+--- linux-7f280334068b7c875ade51f8f3921ab311f0c824/drivers/video/fbmem.c	2014-02-07 00:05:20.000000000 +0100
++++ b/drivers/video/fbmem.c	2016-01-11 23:12:12.522516459 +0100
+@@ -498,8 +498,8 @@
+ 		fb_set_logo(info, logo, logo_new, fb_logo.depth);
+ 	}
+ 
+-	image.dx = 0;
+-	image.dy = y;
++	image.dx = 0 + 5;
++	image.dy = y + 5;
+ 	image.width = logo->width;
+ 	image.height = logo->height;
+ 
+--- linux-7f280334068b7c875ade51f8f3921ab311f0c824/drivers/video/console/fbcon.c	2014-02-07 00:05:20.000000000 +0100
++++ b/drivers/video/console/fbcon.c	2016-01-12 08:39:57.850085691 +0100
+@@ -584,6 +584,8 @@
+ 	if (fb_get_color_depth(&info->var, &info->fix) == 1)
+ 		erase &= ~0x400;
+ 	logo_height = fb_prepare_logo(info, ops->rotate);
++	logo_height += 5;
++	
+ 	logo_lines = DIV_ROUND_UP(logo_height, vc->vc_font.height);
+ 	q = (unsigned short *) (vc->vc_origin +
+ 				vc->vc_size_row * rows);

+ 521 - 0
board/GfA/Display001/linux_3.12.30/linux-012-omap-dmtimer.patch

@@ -0,0 +1,521 @@
+diff -Naur a/Documentation/devicetree/bindings/pwm/pwm-omap-dmtimer.txt b/Documentation/devicetree/bindings/pwm/pwm-omap-dmtimer.txt
+--- a/Documentation/devicetree/bindings/pwm/pwm-omap-dmtimer.txt	1970-01-01 01:00:00.000000000 +0100
++++ b/Documentation/devicetree/bindings/pwm/pwm-omap-dmtimer.txt	2016-11-09 00:03:50.775305324 +0100
+@@ -0,0 +1,18 @@
++* OMAP PWM for dual-mode timers
++
++Required properties:
++- compatible: Shall contain "ti,omap-dmtimer-pwm".
++- ti,timers: phandle to PWM capable OMAP timer. See arm/omap/timer.txt for info
++  about these timers.
++- #pwm-cells: Should be 3. See pwm.txt in this directory for a description of
++  the cells format.
++
++Optional properties:
++- ti,prescaler: Should be a value between 0 and 7, see the timers datasheet
++
++Example:
++	pwm9: dmtimer-pwm@9 {
++		compatible = "ti,omap-dmtimer-pwm";
++		ti,timers = <&timer9>;
++		#pwm-cells = <3>;
++	};
+diff -Naur a/drivers/pwm/Kconfig b/drivers/pwm/Kconfig
+--- a/drivers/pwm/Kconfig	2014-02-07 00:05:20.000000000 +0100
++++ b/drivers/pwm/Kconfig	2016-11-09 00:03:50.795305503 +0100
+@@ -101,6 +101,15 @@
+ 	  To compile this driver as a module, choose M here: the module
+ 	  will be called pwm-mxs.
+ 
++config PWM_OMAP_DMTIMER
++	tristate "OMAP Dual-Mode Timer PWM support"
++	depends on OF && ARCH_OMAP && OMAP_DM_TIMER
++	help
++	  Generic PWM framework driver for OMAP Dual-Mode Timer PWM output
++
++	  To compile this driver as a module, choose M here: the module
++	  will be called pwm-omap-dmtimer
++
+ config PWM_PCA9685
+ 	tristate "NXP PCA9685 PWM driver"
+ 	depends on OF && REGMAP_I2C
+diff -Naur a/drivers/pwm/Makefile b/drivers/pwm/Makefile
+--- a/drivers/pwm/Makefile	2014-02-07 00:05:20.000000000 +0100
++++ b/drivers/pwm/Makefile	2016-11-09 00:03:50.795305503 +0100
+@@ -7,6 +7,7 @@
+ obj-$(CONFIG_PWM_JZ4740)	+= pwm-jz4740.o
+ obj-$(CONFIG_PWM_LPC32XX)	+= pwm-lpc32xx.o
+ obj-$(CONFIG_PWM_MXS)		+= pwm-mxs.o
++obj-$(CONFIG_PWM_OMAP_DMTIMER)	+= pwm-omap-dmtimer.o
+ obj-$(CONFIG_PWM_PCA9685)	+= pwm-pca9685.o
+ obj-$(CONFIG_PWM_PUV3)		+= pwm-puv3.o
+ obj-$(CONFIG_PWM_PXA)		+= pwm-pxa.o
+diff -Naur a/drivers/pwm/pwm-omap-dmtimer.c b/drivers/pwm/pwm-omap-dmtimer.c
+--- a/drivers/pwm/pwm-omap-dmtimer.c	1970-01-01 01:00:00.000000000 +0100
++++ b/drivers/pwm/pwm-omap-dmtimer.c	2016-11-09 00:05:19.484095652 +0100
+@@ -0,0 +1,369 @@
++/*
++ * Copyright (c) 2015 Neil Armstrong <narmstrong@baylibre.com>
++ * Copyright (c) 2014 Joachim Eastwood <manabian@gmail.com>
++ * Copyright (c) 2012 NeilBrown <neilb@suse.de>
++ * Heavily based on earlier code which is:
++ * Copyright (c) 2010 Grant Erickson <marathon96@gmail.com>
++ *
++ * Also based on pwm-samsung.c
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * version 2 as published by the Free Software Foundation.
++ *
++ * Description:
++ *   This file is the core OMAP support for the generic, Linux
++ *   PWM driver / controller, using the OMAP's dual-mode timers.
++ */
++
++#include <linux/clk.h>
++#include <linux/err.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/mutex.h>
++#include <linux/of.h>
++#include <linux/of_platform.h>
++#include <linux/platform_data/pwm_omap_dmtimer.h>
++#include <linux/platform_device.h>
++#include <linux/pm_runtime.h>
++#include <linux/pwm.h>
++#include <linux/slab.h>
++#include <linux/time.h>
++
++#define DM_TIMER_LOAD_MIN 0xfffffffe
++#define DM_TIMER_MAX      0xffffffff
++
++struct pwm_omap_dmtimer_chip {
++	struct pwm_chip chip;
++	struct mutex mutex;
++	pwm_omap_dmtimer *dm_timer;
++	struct pwm_omap_dmtimer_pdata *pdata;
++	struct platform_device *dm_timer_pdev;
++};
++
++static inline struct pwm_omap_dmtimer_chip *
++to_pwm_omap_dmtimer_chip(struct pwm_chip *chip)
++{
++	return container_of(chip, struct pwm_omap_dmtimer_chip, chip);
++}
++
++static u32 pwm_omap_dmtimer_get_clock_cycles(unsigned long clk_rate, int ns)
++{
++	return DIV_ROUND_CLOSEST_ULL((u64)clk_rate * ns, NSEC_PER_SEC);
++}
++
++static void pwm_omap_dmtimer_start(struct pwm_omap_dmtimer_chip *omap)
++{
++	/*
++	 * According to OMAP 4 TRM section 22.2.4.10 the counter should be
++	 * started at 0xFFFFFFFE when overflow and match is used to ensure
++	 * that the PWM line is toggled on the first event.
++	 *
++	 * Note that omap_dm_timer_enable/disable is for register access and
++	 * not the timer counter itself.
++	 */
++	omap->pdata->enable(omap->dm_timer);
++	omap->pdata->write_counter(omap->dm_timer, DM_TIMER_LOAD_MIN);
++	omap->pdata->disable(omap->dm_timer);
++
++	omap->pdata->start(omap->dm_timer);
++}
++
++static int pwm_omap_dmtimer_enable(struct pwm_chip *chip,
++				   struct pwm_device *pwm)
++{
++	struct pwm_omap_dmtimer_chip *omap = to_pwm_omap_dmtimer_chip(chip);
++
++	mutex_lock(&omap->mutex);
++	pwm_omap_dmtimer_start(omap);
++	mutex_unlock(&omap->mutex);
++
++	return 0;
++}
++
++static void pwm_omap_dmtimer_disable(struct pwm_chip *chip,
++				     struct pwm_device *pwm)
++{
++	struct pwm_omap_dmtimer_chip *omap = to_pwm_omap_dmtimer_chip(chip);
++
++	mutex_lock(&omap->mutex);
++	omap->pdata->stop(omap->dm_timer);
++	mutex_unlock(&omap->mutex);
++}
++
++static int pwm_omap_dmtimer_config(struct pwm_chip *chip,
++				   struct pwm_device *pwm,
++				   int duty_ns, int period_ns)
++{
++	struct pwm_omap_dmtimer_chip *omap = to_pwm_omap_dmtimer_chip(chip);
++	u32 period_cycles, duty_cycles;
++	u32 load_value, match_value;
++	struct clk *fclk;
++	unsigned long clk_rate;
++	bool timer_active;
++
++	dev_dbg(chip->dev, "requested duty cycle: %d ns, period: %d ns\n",
++		duty_ns, period_ns);
++
++	mutex_lock(&omap->mutex);
++	if (duty_ns == pwm_get_duty_cycle(pwm) &&
++	    period_ns == pwm_get_period(pwm)) {
++		/* No change - don't cause any transients. */
++		mutex_unlock(&omap->mutex);
++		return 0;
++	}
++
++	fclk = omap->pdata->get_fclk(omap->dm_timer);
++	if (!fclk) {
++		dev_err(chip->dev, "invalid pmtimer fclk\n");
++		goto err_einval;
++	}
++
++	clk_rate = clk_get_rate(fclk);
++	if (!clk_rate) {
++		dev_err(chip->dev, "invalid pmtimer fclk rate\n");
++		goto err_einval;
++	}
++
++	dev_dbg(chip->dev, "clk rate: %luHz\n", clk_rate);
++
++	/*
++	 * Calculate the appropriate load and match values based on the
++	 * specified period and duty cycle. The load value determines the
++	 * period time and the match value determines the duty time.
++	 *
++	 * The period lasts for (DM_TIMER_MAX-load_value+1) clock cycles.
++	 * Similarly, the active time lasts (match_value-load_value+1) cycles.
++	 * The non-active time is the remainder: (DM_TIMER_MAX-match_value)
++	 * clock cycles.
++	 *
++	 * NOTE: It is required that: load_value <= match_value < DM_TIMER_MAX
++	 *
++	 * References:
++	 *   OMAP4430/60/70 TRM sections 22.2.4.10 and 22.2.4.11
++	 *   AM335x Sitara TRM sections 20.1.3.5 and 20.1.3.6
++	 */
++	period_cycles = pwm_omap_dmtimer_get_clock_cycles(clk_rate, period_ns);
++	duty_cycles = pwm_omap_dmtimer_get_clock_cycles(clk_rate, duty_ns);
++
++	if (period_cycles < 2) {
++		dev_info(chip->dev,
++			 "period %d ns too short for clock rate %lu Hz\n",
++			 period_ns, clk_rate);
++		goto err_einval;
++	}
++
++	if (duty_cycles < 1) {
++		dev_dbg(chip->dev,
++			"duty cycle %d ns is too short for clock rate %lu Hz\n",
++			duty_ns, clk_rate);
++		dev_dbg(chip->dev, "using minimum of 1 clock cycle\n");
++		duty_cycles = 1;
++	} else if (duty_cycles >= period_cycles) {
++		dev_dbg(chip->dev,
++			"duty cycle %d ns is too long for period %d ns at clock rate %lu Hz\n",
++			duty_ns, period_ns, clk_rate);
++		dev_dbg(chip->dev, "using maximum of 1 clock cycle less than period\n");
++		duty_cycles = period_cycles - 1;
++	}
++
++	dev_dbg(chip->dev, "effective duty cycle: %lld ns, period: %lld ns\n",
++		DIV_ROUND_CLOSEST_ULL((u64)NSEC_PER_SEC * duty_cycles,
++				      clk_rate),
++		DIV_ROUND_CLOSEST_ULL((u64)NSEC_PER_SEC * period_cycles,
++				      clk_rate));
++
++	load_value = (DM_TIMER_MAX - period_cycles) + 1;
++	match_value = load_value + duty_cycles - 1;
++
++	/*
++	 * We MUST stop the associated dual-mode timer before attempting to
++	 * write its registers, but calls to omap_dm_timer_start/stop must
++	 * be balanced so check if timer is active before calling timer_stop.
++	 */
++	timer_active = pm_runtime_active(&omap->dm_timer_pdev->dev);
++	if (timer_active)
++		omap->pdata->stop(omap->dm_timer);
++
++	omap->pdata->set_load(omap->dm_timer, true, load_value);
++	omap->pdata->set_match(omap->dm_timer, true, match_value);
++
++	dev_dbg(chip->dev, "load value: %#08x (%d), match value: %#08x (%d)\n",
++		load_value, load_value,	match_value, match_value);
++
++	omap->pdata->set_pwm(omap->dm_timer,
++			      pwm->polarity == PWM_POLARITY_INVERSED,
++			      true,
++			      PWM_OMAP_DMTIMER_TRIGGER_OVERFLOW_AND_COMPARE);
++
++	/* If config was called while timer was running it must be reenabled. */
++	if (timer_active)
++		pwm_omap_dmtimer_start(omap);
++
++	mutex_unlock(&omap->mutex);
++
++	return 0;
++
++err_einval:
++	mutex_unlock(&omap->mutex);
++
++	return -EINVAL;
++}
++
++static int pwm_omap_dmtimer_set_polarity(struct pwm_chip *chip,
++					 struct pwm_device *pwm,
++					 enum pwm_polarity polarity)
++{
++	struct pwm_omap_dmtimer_chip *omap = to_pwm_omap_dmtimer_chip(chip);
++
++	/*
++	 * PWM core will not call set_polarity while PWM is enabled so it's
++	 * safe to reconfigure the timer here without stopping it first.
++	 */
++	mutex_lock(&omap->mutex);
++	omap->pdata->set_pwm(omap->dm_timer,
++			      polarity == PWM_POLARITY_INVERSED,
++			      true,
++			      PWM_OMAP_DMTIMER_TRIGGER_OVERFLOW_AND_COMPARE);
++	mutex_unlock(&omap->mutex);
++
++	return 0;
++}
++
++static const struct pwm_ops pwm_omap_dmtimer_ops = {
++	.enable	= pwm_omap_dmtimer_enable,
++	.disable = pwm_omap_dmtimer_disable,
++	.config	= pwm_omap_dmtimer_config,
++	.set_polarity = pwm_omap_dmtimer_set_polarity,
++	.owner = THIS_MODULE,
++};
++
++static int pwm_omap_dmtimer_probe(struct platform_device *pdev)
++{
++	struct device_node *np = pdev->dev.of_node;
++	struct device_node *timer;
++	struct pwm_omap_dmtimer_chip *omap;
++	struct pwm_omap_dmtimer_pdata *pdata;
++	pwm_omap_dmtimer *dm_timer;
++	u32 prescaler;
++	int status;
++
++	pdata = dev_get_platdata(&pdev->dev);
++	if (!pdata) {
++		dev_err(&pdev->dev, "Missing dmtimer platform data\n");
++		return -EINVAL;
++	}
++
++	if (!pdata->request_by_node ||
++	    !pdata->free ||
++	    !pdata->enable ||
++	    !pdata->disable ||
++	    !pdata->get_fclk ||
++	    !pdata->start ||
++	    !pdata->stop ||
++	    !pdata->set_load ||
++	    !pdata->set_match ||
++	    !pdata->set_pwm ||
++	    !pdata->set_prescaler ||
++	    !pdata->write_counter) {
++		dev_err(&pdev->dev, "Incomplete dmtimer pdata structure\n");
++		return -EINVAL;
++	}
++
++	timer = of_parse_phandle(np, "ti,timers", 0);
++	if (!timer)
++		return -ENODEV;
++
++	if (!of_get_property(timer, "ti,timer-pwm", NULL)) {
++		dev_err(&pdev->dev, "Missing ti,timer-pwm capability\n");
++		return -ENODEV;
++	}
++
++	dm_timer = pdata->request_by_node(timer);
++	if (!dm_timer)
++		return -EPROBE_DEFER;
++
++	omap = devm_kzalloc(&pdev->dev, sizeof(*omap), GFP_KERNEL);
++	if (!omap) {
++		pdata->free(dm_timer);
++		return -ENOMEM;
++	}
++
++	omap->pdata = pdata;
++	omap->dm_timer = dm_timer;
++
++	omap->dm_timer_pdev = of_find_device_by_node(timer);
++	if (!omap->dm_timer_pdev) {
++		dev_err(&pdev->dev, "Unable to find timer pdev\n");
++		omap->pdata->free(dm_timer);
++		return -EINVAL;
++	}
++
++	/*
++	 * Ensure that the timer is stopped before we allow PWM core to call
++	 * pwm_enable.
++	 */
++	if (pm_runtime_active(&omap->dm_timer_pdev->dev))
++		omap->pdata->stop(omap->dm_timer);
++
++	/* setup dmtimer prescaler */
++	if (!of_property_read_u32(pdev->dev.of_node, "ti,prescaler",
++				&prescaler))
++		omap->pdata->set_prescaler(omap->dm_timer, prescaler);
++
++	omap->chip.dev = &pdev->dev;
++	omap->chip.ops = &pwm_omap_dmtimer_ops;
++	omap->chip.base = -1;
++	omap->chip.npwm = 1;
++	omap->chip.of_xlate = of_pwm_xlate_with_flags;
++	omap->chip.of_pwm_n_cells = 3;
++
++	mutex_init(&omap->mutex);
++
++	status = pwmchip_add(&omap->chip);
++	if (status < 0) {
++		dev_err(&pdev->dev, "failed to register PWM\n");
++		omap->pdata->free(omap->dm_timer);
++		return status;
++	}
++
++	platform_set_drvdata(pdev, omap);
++
++	return 0;
++}
++
++static int pwm_omap_dmtimer_remove(struct platform_device *pdev)
++{
++	struct pwm_omap_dmtimer_chip *omap = platform_get_drvdata(pdev);
++
++	if (pm_runtime_active(&omap->dm_timer_pdev->dev))
++		omap->pdata->stop(omap->dm_timer);
++
++	omap->pdata->free(omap->dm_timer);
++
++	mutex_destroy(&omap->mutex);
++
++	return pwmchip_remove(&omap->chip);
++}
++
++static const struct of_device_id pwm_omap_dmtimer_of_match[] = {
++	{.compatible = "ti,omap-dmtimer-pwm"},
++	{}
++};
++MODULE_DEVICE_TABLE(of, pwm_omap_dmtimer_of_match);
++
++static struct platform_driver pwm_omap_dmtimer_driver = {
++	.driver = {
++		.name = "omap-dmtimer-pwm",
++		.of_match_table = of_match_ptr(pwm_omap_dmtimer_of_match),
++	},
++	.probe = pwm_omap_dmtimer_probe,
++	.remove	= pwm_omap_dmtimer_remove,
++};
++module_platform_driver(pwm_omap_dmtimer_driver);
++
++MODULE_AUTHOR("Grant Erickson <marathon96@gmail.com>");
++MODULE_AUTHOR("NeilBrown <neilb@suse.de>");
++MODULE_AUTHOR("Neil Armstrong <narmstrong@baylibre.com>");
++MODULE_LICENSE("GPL v2");
++MODULE_DESCRIPTION("OMAP PWM Driver using Dual-mode Timers");
+diff -Naur a/include/linux/kernel.h b/include/linux/kernel.h
+--- a/include/linux/kernel.h	2014-02-07 00:05:20.000000000 +0100
++++ b/include/linux/kernel.h	2016-11-09 00:21:01.364470364 +0100
+@@ -92,6 +92,19 @@
+ )
+ 
+ /*
++ * Same as above but for u64 dividends. divisor must be a 32-bit
++ * number.
++ */
++#define DIV_ROUND_CLOSEST_ULL(x, divisor)(		\
++{							\
++	typeof(divisor) __d = divisor;			\
++	unsigned long long _tmp = (x) + (__d) / 2;	\
++	do_div(_tmp, __d);				\
++	_tmp;						\
++}							\
++)
++                                   
++/*
+  * Multiplies an integer by a fraction, while avoiding unnecessary
+  * overflow or loss of precision.
+  */
+diff -Naur a/include/linux/platform_data/pwm_omap_dmtimer.h b/include/linux/platform_data/pwm_omap_dmtimer.h
+--- a/include/linux/platform_data/pwm_omap_dmtimer.h	1970-01-01 01:00:00.000000000 +0100
++++ b/include/linux/platform_data/pwm_omap_dmtimer.h	2016-11-09 00:03:50.807305610 +0100
+@@ -0,0 +1,69 @@
++/*
++ * include/linux/platform_data/pwm_omap_dmtimer.h
++ *
++ * OMAP Dual-Mode Timer PWM platform data
++ *
++ * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
++ * Tarun Kanti DebBarma <tarun.kanti@ti.com>
++ * Thara Gopinath <thara@ti.com>
++ *
++ * Platform device conversion and hwmod support.
++ *
++ * Copyright (C) 2005 Nokia Corporation
++ * Author: Lauri Leukkunen <lauri.leukkunen@nokia.com>
++ * PWM and clock framework support by Timo Teras.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ *
++ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
++ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
++ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
++ * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
++ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ * You should have received a copy of the  GNU General Public License along
++ * with this program; if not, write  to the Free Software Foundation, Inc.,
++ * 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#ifndef __PWM_OMAP_DMTIMER_PDATA_H
++#define __PWM_OMAP_DMTIMER_PDATA_H
++
++/* trigger types */
++#define PWM_OMAP_DMTIMER_TRIGGER_NONE			0x00
++#define PWM_OMAP_DMTIMER_TRIGGER_OVERFLOW		0x01
++#define PWM_OMAP_DMTIMER_TRIGGER_OVERFLOW_AND_COMPARE	0x02
++
++struct omap_dm_timer;
++typedef struct omap_dm_timer pwm_omap_dmtimer;
++
++struct pwm_omap_dmtimer_pdata {
++	pwm_omap_dmtimer *(*request_by_node)(struct device_node *np);
++	int	(*free)(pwm_omap_dmtimer *timer);
++
++	void	(*enable)(pwm_omap_dmtimer *timer);
++	void	(*disable)(pwm_omap_dmtimer *timer);
++
++	struct clk *(*get_fclk)(pwm_omap_dmtimer *timer);
++
++	int	(*start)(pwm_omap_dmtimer *timer);
++	int	(*stop)(pwm_omap_dmtimer *timer);
++
++	int	(*set_load)(pwm_omap_dmtimer *timer, int autoreload,
++			unsigned int value);
++	int	(*set_match)(pwm_omap_dmtimer *timer, int enable,
++			unsigned int match);
++	int	(*set_pwm)(pwm_omap_dmtimer *timer, int def_on,
++			int toggle, int trigger);
++	int	(*set_prescaler)(pwm_omap_dmtimer *timer, int prescaler);
++
++	int	(*write_counter)(pwm_omap_dmtimer *timer, unsigned int value);
++};
++
++#endif /* __PWM_OMAP_DMTIMER_PDATA_H */

+ 114 - 0
board/GfA/Display001/linux_3.12.30/linux-013-omap-dmtimer-quirks.patch

@@ -0,0 +1,114 @@
+diff -Naur a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c
+--- a/arch/arm/mach-omap2/board-generic.c	2014-02-07 00:05:20.000000000 +0100
++++ b/arch/arm/mach-omap2/board-generic.c	2016-11-16 23:18:42.813852792 +0100
+@@ -38,7 +38,8 @@
+ {
+ 	omap_sdrc_init(NULL, NULL);
+ 
+-	of_platform_populate(NULL, omap_dt_match_table, NULL, NULL);
++	pdata_quirks_init(omap_dt_match_table);
++	//of_platform_populate(NULL, omap_dt_match_table, NULL, NULL);
+ 
+ 	omapdss_init_of();
+ }
+diff -Naur a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h
+--- a/arch/arm/mach-omap2/common.h	2014-02-07 00:05:20.000000000 +0100
++++ b/arch/arm/mach-omap2/common.h	2016-11-16 23:21:11.115162076 +0100
+@@ -321,6 +321,7 @@
+ 
+ #endif
+ 
++void pdata_quirks_init(const struct of_device_id *);
+ struct omap_sdrc_params;
+ extern void omap_sdrc_init(struct omap_sdrc_params *sdrc_cs0,
+ 				      struct omap_sdrc_params *sdrc_cs1);
+diff -Naur a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
+--- a/arch/arm/mach-omap2/Makefile	2014-02-07 00:05:20.000000000 +0100
++++ b/arch/arm/mach-omap2/Makefile	2016-11-16 22:30:30.400328507 +0100
+@@ -238,7 +238,7 @@
+ obj-$(CONFIG_SOC_OMAP2420)		+= msdi.o
+ 
+ # Specific board support
+-obj-$(CONFIG_MACH_OMAP_GENERIC)		+= board-generic.o
++obj-$(CONFIG_MACH_OMAP_GENERIC)		+= board-generic.o pdata-quirks.o
+ obj-$(CONFIG_MACH_OMAP_H4)		+= board-h4.o
+ obj-$(CONFIG_MACH_OMAP_2430SDP)		+= board-2430sdp.o
+ obj-$(CONFIG_MACH_OMAP3_BEAGLE)		+= board-omap3beagle.o
+diff -Naur a/arch/arm/mach-omap2/pdata-quirks.c b/arch/arm/mach-omap2/pdata-quirks.c
+--- a/arch/arm/mach-omap2/pdata-quirks.c	1970-01-01 01:00:00.000000000 +0100
++++ b/arch/arm/mach-omap2/pdata-quirks.c	2016-11-16 23:06:44.195509881 +0100
+@@ -0,0 +1,74 @@
++/*
++ * Legacy platform_data quirks
++ *
++ * Copyright (C) 2013 Texas Instruments
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/clk.h>
++#include <linux/davinci_emac.h>
++#include <linux/gpio.h>
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/of_platform.h>
++#include <linux/ti_wilink_st.h>
++#include <linux/wl12xx.h>
++#include <linux/mmc/card.h>
++#include <linux/mmc/host.h>
++#include <linux/regulator/machine.h>
++#include <linux/regulator/fixed.h>
++
++#include <linux/platform_data/iommu-omap.h>
++#include <linux/platform_data/pwm_omap_dmtimer.h>
++#include <plat/dmtimer.h>
++
++#include "common.h"
++#include "common-board-devices.h"
++#include "control.h"
++#include "omap_device.h"
++#include "omap-secure.h"
++#include "soc.h"
++#include "hsmmc.h"
++
++
++struct pdata_init {
++	const char *compatible;
++	void (*fn)(void);
++};
++
++static struct of_dev_auxdata omap_auxdata_lookup[];
++
++/* Dual mode timer PWM callbacks platdata */
++#if IS_ENABLED(CONFIG_OMAP_DM_TIMER)
++struct pwm_omap_dmtimer_pdata pwm_dmtimer_pdata = {
++	.request_by_node = omap_dm_timer_request_by_node,
++	.free = omap_dm_timer_free,
++	.enable = omap_dm_timer_enable,
++	.disable = omap_dm_timer_disable,
++	.get_fclk = omap_dm_timer_get_fclk,
++	.start = omap_dm_timer_start,
++	.stop = omap_dm_timer_stop,
++	.set_load = omap_dm_timer_set_load,
++	.set_match = omap_dm_timer_set_match,
++	.set_pwm = omap_dm_timer_set_pwm,
++	.set_prescaler = omap_dm_timer_set_prescaler,
++	.write_counter = omap_dm_timer_write_counter,
++};
++#endif
++
++static struct of_dev_auxdata omap_auxdata_lookup[] __initdata = {
++#if IS_ENABLED(CONFIG_OMAP_DM_TIMER)
++	OF_DEV_AUXDATA("ti,omap-dmtimer-pwm", 0, NULL, &pwm_dmtimer_pdata),
++#endif
++	{ /* sentinel */ },
++};
++
++void __init pdata_quirks_init(const struct of_device_id *omap_dt_match_table)
++{
++
++        of_platform_populate(NULL, omap_dt_match_table,
++                             omap_auxdata_lookup, NULL);
++}
++

+ 167 - 0
board/GfA/Display001/uboot_2013.10/uboot-001-Display001.patch

@@ -0,0 +1,167 @@
+--- uboot-2013.10_orig/include/configs/am335x_evm.h	2013-10-16 19:08:12.000000000 +0200
++++ uboot-2013.10/include/configs/am335x_evm.h	2015-10-08 15:45:37.315543700 +0200
+@@ -55,125 +55,48 @@
+ #define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
+ 
+ #ifndef CONFIG_SPL_BUILD
++
+ #define CONFIG_EXTRA_ENV_SETTINGS \
+-	"loadaddr=0x80200000\0" \
+-	"fdtaddr=0x80F80000\0" \
+-	"fdt_high=0xffffffff\0" \
+-	"boot_fdt=try\0" \
+-	"rdaddr=0x81000000\0" \
+-	"bootpart=0:2\0" \
+-	"bootdir=/boot\0" \
+-	"bootfile=zImage\0" \
+-	"fdtfile=undefined\0" \
+-	"console=ttyO0,115200n8\0" \
+-	"optargs=\0" \
+-	"dfu_alt_info_mmc=" DFU_ALT_INFO_MMC "\0" \
+-	"dfu_alt_info_emmc=rawemmc mmc 0 3751936\0" \
+-	"mmcdev=0\0" \
+-	"mmcroot=/dev/mmcblk0p2 ro\0" \
+-	"mmcrootfstype=ext4 rootwait\0" \
+-	"rootpath=/export/rootfs\0" \
+-	"nfsopts=nolock\0" \
+-	"static_ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}" \
+-		"::off\0" \
+-	"ramroot=/dev/ram0 rw ramdisk_size=65536 initrd=${rdaddr},64M\0" \
+-	"ramrootfstype=ext2\0" \
+-	"mmcargs=setenv bootargs console=${console} " \
+-		"${optargs} " \
+-		"root=${mmcroot} " \
+-		"rootfstype=${mmcrootfstype}\0" \
+-	"spiroot=/dev/mtdblock4 rw\0" \
+-	"spirootfstype=jffs2\0" \
+-	"spisrcaddr=0xe0000\0" \
+-	"spiimgsize=0x362000\0" \
+-	"spibusno=0\0" \
+-	"spiargs=setenv bootargs console=${console} " \
+-		"${optargs} " \
+-		"root=${spiroot} " \
+-		"rootfstype=${spirootfstype}\0" \
+-	"netargs=setenv bootargs console=${console} " \
+-		"${optargs} " \
+-		"root=/dev/nfs " \
+-		"nfsroot=${serverip}:${rootpath},${nfsopts} rw " \
+-		"ip=dhcp\0" \
+-	"bootenv=uEnv.txt\0" \
+-	"loadbootenv=load mmc ${mmcdev} ${loadaddr} ${bootenv}\0" \
+-	"importbootenv=echo Importing environment from mmc ...; " \
+-		"env import -t $loadaddr $filesize\0" \
+-	"dfu_alt_info_ram=" DFU_ALT_INFO_RAM "\0" \
+-	"ramargs=setenv bootargs console=${console} " \
+-		"${optargs} " \
+-		"root=${ramroot} " \
+-		"rootfstype=${ramrootfstype}\0" \
+-	"loadramdisk=load mmc ${mmcdev} ${rdaddr} ramdisk.gz\0" \
+-	"loadimage=load mmc ${bootpart} ${loadaddr} ${bootdir}/${bootfile}\0" \
+-	"loadfdt=load mmc ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile}\0" \
+-	"mmcloados=run mmcargs; " \
+-		"if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
+-			"if run loadfdt; then " \
+-				"bootz ${loadaddr} - ${fdtaddr}; " \
+-			"else " \
+-				"if test ${boot_fdt} = try; then " \
+-					"bootz; " \
+-				"else " \
+-					"echo WARN: Cannot load the DT; " \
+-				"fi; " \
+-			"fi; " \
+-		"else " \
+-			"bootz; " \
+-		"fi;\0" \
+-	"mmcboot=mmc dev ${mmcdev}; " \
+-		"if mmc rescan; then " \
+-			"echo SD/MMC found on device ${mmcdev};" \
+-			"if run loadbootenv; then " \
+-				"echo Loaded environment from ${bootenv};" \
+-				"run importbootenv;" \
+-			"fi;" \
+-			"if test -n $uenvcmd; then " \
+-				"echo Running uenvcmd ...;" \
+-				"run uenvcmd;" \
+-			"fi;" \
+-			"if run loadimage; then " \
+-				"run mmcloados;" \
+-			"fi;" \
+-		"fi;\0" \
+-	"spiboot=echo Booting from spi ...; " \
+-		"run spiargs; " \
+-		"sf probe ${spibusno}:0; " \
+-		"sf read ${loadaddr} ${spisrcaddr} ${spiimgsize}; " \
+-		"bootz ${loadaddr}\0" \
+-	"netboot=echo Booting from network ...; " \
+-		"setenv autoload no; " \
+-		"dhcp; " \
+-		"tftp ${loadaddr} ${bootfile}; " \
+-		"tftp ${fdtaddr} ${fdtfile}; " \
+-		"run netargs; " \
+-		"bootz ${loadaddr} - ${fdtaddr}\0" \
+-	"ramboot=echo Booting from ramdisk ...; " \
+-		"run ramargs; " \
+-		"bootz ${loadaddr} ${rdaddr} ${fdtaddr}\0" \
+-	"findfdt="\
+-		"if test $board_name = A335BONE; then " \
+-			"setenv fdtfile am335x-bone.dtb; fi; " \
+-		"if test $board_name = A335BNLT; then " \
+-			"setenv fdtfile am335x-boneblack.dtb; fi; " \
+-		"if test $board_name = A33515BB; then " \
+-			"setenv fdtfile am335x-evm.dtb; fi; " \
+-		"if test $board_name = A335X_SK; then " \
+-			"setenv fdtfile am335x-evmsk.dtb; fi; " \
+-		"if test $fdtfile = undefined; then " \
+-			"echo WARNING: Could not determine device tree to use; fi; \0" \
+-	NANDARGS
++        "ramboot=fatload mmc 0 0x80200000 uImage; " \
++                "fatload mmc 0 0x80F00000 Display001.dtb; " \
++                "fdt addr 0x80F00000; " \
++                "fatload mmc 0 0x81000000 initrd.gz; " \
++                "setenv initrdsize 0x${filesize}; " \   
++                "setenv bootargs console=ttyO0,115200 initrd=0x81000000,${initrdsize} " \
++                        "root=/dev/ram0 rw init=/sbin/init debug initcall_debug earlyprintk; " \
++                "bootm 0x80200000 - 0x80F00000\0" \
++        "sdboot=fatload mmc 0 0x80200000 uImage; " \
++                "fatload mmc 0 0x80F00000 Display001.dtb; " \
++                "fdt addr 0x80F00000; " \
++                "setenv bootargs console=ttyO0,115200 " \
++                        "root=/dev/mmcblk0p2 rw rootwait vram=50M; " \
++                "bootm 0x80200000 - 0x80F00000\0" \
++        "emmcboot=fatload mmc 1 0x80200000 uImage; " \
++                "fatload mmc 1 0x80F00000 Display001.dtb; " \
++                "fdt addr 0x80F00000; " \
++                "setenv bootargs console=ttyO0,115200 " \
++                        "root=/dev/mmcblk1p2 rw rootwait vram=50M; " \
++                "bootm 0x80200000 - 0x80F00000\0" \
++        "bootcmd=mw.l 0x80020000 0x0040033c; " \
++	        "if cmp 0x80020000 0x44e10040 1; " \
++	        "then " \
++	          "echo ---emmc--; " \
++	          "mmc rescan; " \
++		  "if fatload mmc 0:1 0x80200000 MLO; then " \
++		    "run sdboot; " \
++		  "else " \
++		    "run emmcboot; " \
++		  "fi; " \
++	        "else echo --sd--; " \
++	          "mmc rescan; " \
++		  "if fatload mmc 0:1 0x80200000 MLO; then " \
++		    "run sdboot; " \
++		  "else " \
++		    "run emmcboot; " \
++		  "fi; " \
++	        "fi;\0"
+ #endif
+ 
+-#define CONFIG_BOOTCOMMAND \
+-	"run findfdt; " \
+-	"run mmcboot;" \
+-	"setenv mmcdev 1; " \
+-	"setenv bootpart 1:2; " \
+-	"run mmcboot;" \
+-	"run nandboot;"
+-
+ /* NS16550 Configuration */
+ #define CONFIG_SYS_NS16550_COM1		0x44e09000	/* Base EVM has UART0 */
+ #define CONFIG_SYS_NS16550_COM2		0x48022000	/* UART1 */

+ 44 - 0
board/GfA/Display001/uboot_2013.10/uboot-002-BootdelayEnter.patch

@@ -0,0 +1,44 @@
+--- uboot-2013.10_orig/common/main.c     2013-10-16 19:08:12.000000000 +0200
++++ uboot-2013.10/common/main.c  2015-10-08 15:45:37.315543700 +0200
+@@ -194,7 +194,7 @@ static int abortboot_normal(int bootdela
+ 	printf(CONFIG_MENUPROMPT);
+ #else
+ 	if (bootdelay >= 0)
+-		printf("Hit any key to stop autoboot: %2d ", bootdelay);
++		printf("Hit ENTER key to stop autoboot: %2d ", bootdelay);
+ #endif
+ 
+ #if defined CONFIG_ZERO_BOOTDELAY_CHECK
+@@ -204,9 +204,10 @@ static int abortboot_normal(int bootdela
+ 	 */
+ 	if (bootdelay >= 0) {
+ 		if (tstc()) {	/* we got a key press	*/
+-			(void) getc();  /* consume input	*/
++			int in = getc();  /* consume input	*/
+ 			puts ("\b\b\b 0");
+-			abort = 1;	/* don't auto boot	*/
++			if (in == 13)
++				abort = 1;	/* don't auto boot	*/
+ 		}
+ 	}
+ #endif
+@@ -217,12 +218,14 @@ static int abortboot_normal(int bootdela
+ 		ts = get_timer(0);
+ 		do {
+ 			if (tstc()) {	/* we got a key press	*/
+-				abort  = 1;	/* don't auto boot	*/
+-				bootdelay = 0;	/* no more delay	*/
++				int in = getc();  /* consume input	*/
++
++				if (in == 13) {
++					abort  = 1;	/* don't auto boot	*/
++					bootdelay = 0;	/* no more delay	*/
++				}
+ # ifdef CONFIG_MENUKEY
+-				menukey = getc();
+-# else
+-				(void) getc();  /* consume input	*/
++				menukey = in;
+ # endif
+ 				break;
+ 			}

+ 348 - 0
configs/Display001_3.12.30_defconfig

@@ -0,0 +1,348 @@
+BR2_arm=y
+BR2_cortex_a8=y
+BR2_ARM_INSTRUCTIONS_THUMB2=y
+BR2_HOST_DIR="/opt/GfA/TC_L312_C493_QT57"
+# BR2_COMPILER_PARANOID_UNSAFE_PATH is not set
+BR2_TOOLCHAIN_BUILDROOT_GLIBC=y
+BR2_KERNEL_HEADERS_3_12=y
+BR2_GLIBC_VERSION_2_24=y
+BR2_BINUTILS_VERSION_2_27_X=y
+BR2_GCC_VERSION_4_9_3=y
+BR2_TOOLCHAIN_BUILDROOT_CXX=y
+BR2_PACKAGE_HOST_GDB=y
+BR2_PACKAGE_HOST_GDB_TUI=y
+BR2_PACKAGE_HOST_GDB_PYTHON=y
+BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY=y
+BR2_TARGET_OPTIMIZATION="-pipe"
+BR2_TARGET_GENERIC_HOSTNAME="GfA"
+BR2_TARGET_GENERIC_ISSUE="Welcome to GfA Display001"
+BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
+BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt ../GfA/board/GfA/Display001/device_table.txt"
+BR2_TARGET_GENERIC_ROOT_PASSWD="root"
+BR2_TARGET_GENERIC_GETTY_PORT="ttyO0"
+BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y
+# BR2_ENABLE_LOCALE_PURGE is not set
+BR2_GENERATE_LOCALE="en_US en_GB de_DE de_AT de_CH fr_FR it_IT es_ES sv_FI sv_SE nb_NO nn_NO se_NO da_DK"
+BR2_TARGET_TZ_INFO=y
+BR2_TARGET_LOCALTIME="Europe/Vienna"
+BR2_ROOTFS_POST_BUILD_SCRIPT="../GfA/board/GfA/Display001/post-build.sh"
+BR2_LINUX_KERNEL=y
+BR2_LINUX_KERNEL_CUSTOM_GIT=y
+BR2_LINUX_KERNEL_CUSTOM_REPO_URL="git://git.ti.com/ti-linux-kernel/ti-linux-kernel.git"
+BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="68f449afccf6d1fb6b38bddfc3a40d9e97b53bdf"
+BR2_LINUX_KERNEL_PATCH="board/beaglebone/patches/linux/ ../GfA/board/GfA/Display001/linux_3.12.30"
+BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
+BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="../GfA/board/GfA/Display001/Display001_defconfig"
+BR2_LINUX_KERNEL_UIMAGE=y
+BR2_LINUX_KERNEL_UIMAGE_LOADADDR="0x80008000"
+BR2_LINUX_KERNEL_DTS_SUPPORT=y
+BR2_LINUX_KERNEL_USE_CUSTOM_DTS=y
+BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="../GfA/board/GfA/Display001/Display001.dts ../GfA/board/GfA/Display001/Display001_4.dts ../GfA/board/GfA/Display001/Display001_7.dts ../GfA/board/GfA/Display001/Display001_10.dts"
+BR2_PACKAGE_BUSYBOX_CONFIG="../GfA/board/GfA/Display001/busybox.config"
+BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y
+BR2_PACKAGE_MPD=y
+BR2_PACKAGE_MPLAYER=y
+BR2_PACKAGE_WAVPACK=y
+BR2_PACKAGE_GZIP=y
+BR2_PACKAGE_LZ4=y
+BR2_PACKAGE_LZIP=y
+BR2_PACKAGE_LZOP=y
+BR2_PACKAGE_P7ZIP=y
+BR2_PACKAGE_UNRAR=y
+BR2_PACKAGE_UNZIP=y
+BR2_PACKAGE_XZ=y
+BR2_PACKAGE_ZIP=y
+BR2_PACKAGE_GDB=y
+BR2_PACKAGE_GDB_DEBUGGER=y
+BR2_PACKAGE_STRACE=y
+BR2_PACKAGE_BINUTILS=y
+BR2_PACKAGE_BINUTILS_TARGET=y
+BR2_PACKAGE_GETTEXT=y
+BR2_PACKAGE_SED=y
+BR2_PACKAGE_DOSFSTOOLS=y
+BR2_PACKAGE_DOSFSTOOLS_FATLABEL=y
+BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y
+BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y
+BR2_PACKAGE_E2FSPROGS=y
+BR2_PACKAGE_E2FSPROGS_DEBUGFS=y
+BR2_PACKAGE_F2FS_TOOLS=y
+BR2_PACKAGE_FLASHBENCH=y
+BR2_PACKAGE_MAKEDEVS=y
+BR2_PACKAGE_MMC_UTILS=y
+BR2_PACKAGE_DEJAVU=y
+BR2_PACKAGE_MESA3D_DEMOS=y
+BR2_PACKAGE_DIRECTFB=y
+BR2_PACKAGE_DIRECTFB_MULTI=y
+BR2_PACKAGE_DIRECTFB_DIVINE=y
+BR2_PACKAGE_DIRECTFB_SAWMAN=y
+BR2_PACKAGE_DIRECTFB_EXAMPLES=y
+BR2_PACKAGE_EFL=y
+BR2_PACKAGE_FB_TEST_APP=y
+BR2_PACKAGE_FBTERM=y
+BR2_PACKAGE_FBV=y
+BR2_PACKAGE_PSPLASH=y
+BR2_PACKAGE_SDL=y
+BR2_PACKAGE_SDL_DIRECTFB=y
+BR2_PACKAGE_SDL_GFX=y
+BR2_PACKAGE_SDL_IMAGE=y
+BR2_PACKAGE_SDL_IMAGE_GIF=y
+BR2_PACKAGE_SDL_IMAGE_JPEG=y
+BR2_PACKAGE_SDL_IMAGE_LBM=y
+BR2_PACKAGE_SDL_IMAGE_PCX=y
+BR2_PACKAGE_SDL_IMAGE_PNG=y
+BR2_PACKAGE_SDL_IMAGE_PNM=y
+BR2_PACKAGE_SDL_IMAGE_TARGA=y
+BR2_PACKAGE_SDL_IMAGE_TIFF=y
+BR2_PACKAGE_SDL_IMAGE_WEBP=y
+BR2_PACKAGE_SDL_IMAGE_XCF=y
+BR2_PACKAGE_SDL_IMAGE_XPM=y
+BR2_PACKAGE_SDL_IMAGE_XV=y
+BR2_PACKAGE_SDL_MIXER=y
+BR2_PACKAGE_SDL_NET=y
+BR2_PACKAGE_SDL_SOUND=y
+BR2_PACKAGE_SDL_SOUND_PLAYSOUND=y
+BR2_PACKAGE_SDL_TTF=y
+BR2_PACKAGE_QT5=y
+BR2_PACKAGE_QT5BASE_LICENSE_APPROVED=y
+BR2_PACKAGE_QT5BASE_MYSQL=y
+BR2_PACKAGE_QT5BASE_PSQL=y
+BR2_PACKAGE_QT5BASE_SQLITE_SYSTEM=y
+BR2_PACKAGE_QT5BASE_OPENGL_LIB=y
+BR2_PACKAGE_QT5BASE_LINUXFB=y
+BR2_PACKAGE_QT5BASE_DIRECTFB=y
+BR2_PACKAGE_QT5BASE_EGLFS=y
+BR2_PACKAGE_QT5BASE_GIF=y
+BR2_PACKAGE_QT5BASE_JPEG=y
+BR2_PACKAGE_QT5BASE_PNG=y
+BR2_PACKAGE_QT53D=y
+BR2_PACKAGE_QT5CANVAS3D=y
+BR2_PACKAGE_QT5CONNECTIVITY=y
+BR2_PACKAGE_QT5ENGINIO=y
+BR2_PACKAGE_QT5GRAPHICALEFFECTS=y
+BR2_PACKAGE_QT5IMAGEFORMATS=y
+BR2_PACKAGE_QT5LOCATION=y
+BR2_PACKAGE_QT5MULTIMEDIA=y
+BR2_PACKAGE_QT5QUICKCONTROLS=y
+BR2_PACKAGE_QT5SENSORS=y
+BR2_PACKAGE_QT5SERIALBUS=y
+BR2_PACKAGE_QT5SVG=y
+BR2_PACKAGE_QT5WEBENGINE=y
+BR2_PACKAGE_QT5VIRTUALKEYBOARD=y
+BR2_PACKAGE_QT5CHARTS=y
+BR2_PACKAGE_QT5DATAVIS3D=y
+BR2_PACKAGE_QT5QUICKCONTROLS2=y
+BR2_PACKAGE_QT5WEBKIT=y
+BR2_PACKAGE_AM33X_CM3=y
+BR2_PACKAGE_LINUX_FIRMWARE=y
+BR2_PACKAGE_AM335X_PRU_PACKAGE=y
+BR2_PACKAGE_DEVMEM2=y
+BR2_PACKAGE_EVTEST=y
+BR2_PACKAGE_I2C_TOOLS=y
+BR2_PACKAGE_INPUT_TOOLS=y
+BR2_PACKAGE_KBD=y
+BR2_PACKAGE_LIBUIO=y
+BR2_PACKAGE_LSUIO=y
+BR2_PACKAGE_RS485CONF=y
+BR2_PACKAGE_SPI_TOOLS=y
+BR2_PACKAGE_TI_GFX=y
+BR2_PACKAGE_TI_GFX_EGLIMAGE=y
+BR2_PACKAGE_TI_GFX_ES8=y
+BR2_PACKAGE_TI_UTILS=y
+BR2_PACKAGE_USB_MODESWITCH_DATA=y
+BR2_PACKAGE_USBMOUNT=y
+BR2_PACKAGE_USBUTILS=y
+BR2_PACKAGE_PERL=y
+BR2_PACKAGE_PYTHON=y
+BR2_PACKAGE_PYTHON_BZIP2=y
+BR2_PACKAGE_PYTHON_BSDDB=y
+BR2_PACKAGE_PYTHON_CODECSCJK=y
+BR2_PACKAGE_PYTHON_CURSES=y
+BR2_PACKAGE_PYTHON_READLINE=y
+BR2_PACKAGE_PYTHON_SSL=y
+BR2_PACKAGE_PYTHON_SQLITE=y
+BR2_PACKAGE_PYTHON_PYEXPAT=y
+BR2_PACKAGE_PYTHON_HASHLIB=y
+BR2_PACKAGE_PYTHON_PYUDEV=y
+BR2_PACKAGE_TCL=y
+BR2_PACKAGE_EXPECT=y
+BR2_PACKAGE_TCLLIB=y
+BR2_PACKAGE_LIBMPD=y
+BR2_PACKAGE_OPUS=y
+BR2_PACKAGE_TAGLIB=y
+BR2_PACKAGE_LIBZIP=y
+BR2_PACKAGE_SNAPPY=y
+BR2_PACKAGE_SZIP=y
+BR2_PACKAGE_CA_CERTIFICATES=y
+BR2_PACKAGE_GNUTLS=y
+BR2_PACKAGE_GNUTLS_TOOLS=y
+BR2_PACKAGE_LIBNSS=y
+BR2_PACKAGE_LIBSHA1=y
+BR2_PACKAGE_LIBSSH2=y
+BR2_PACKAGE_OPENSSL_BIN=y
+BR2_PACKAGE_OPENSSL_ENGINES=y
+BR2_PACKAGE_MYSQL_SERVER=y
+BR2_PACKAGE_SQLITE_NO_SYNC=y
+BR2_PACKAGE_LIBCONFIG=y
+BR2_PACKAGE_CAIRO_TEE=y
+BR2_PACKAGE_GD=y
+BR2_PACKAGE_GD_ANNOTATE=y
+BR2_PACKAGE_GD_BDFTOGD=y
+BR2_PACKAGE_GD_GD2COPYPAL=y
+BR2_PACKAGE_GD_GD2TOGIF=y
+BR2_PACKAGE_GD_GD2TOPNG=y
+BR2_PACKAGE_GD_GDCMPGIF=y
+BR2_PACKAGE_GD_GDPARTTOPNG=y
+BR2_PACKAGE_GD_GDTOPNG=y
+BR2_PACKAGE_GD_GIFTOGD2=y
+BR2_PACKAGE_GD_PNGTOGD=y
+BR2_PACKAGE_GD_PNGTOGD2=y
+BR2_PACKAGE_GD_WEBPNG=y
+BR2_PACKAGE_GDK_PIXBUF=y
+BR2_PACKAGE_HARFBUZZ=y
+BR2_PACKAGE_LIBDRM=y
+BR2_PACKAGE_LIBDRM_OMAP=y
+BR2_PACKAGE_LIBDRM_INSTALL_TESTS=y
+BR2_PACKAGE_DTC=y
+BR2_PACKAGE_DTC_PROGRAMS=y
+BR2_PACKAGE_LIBGUDEV=y
+BR2_PACKAGE_LIBHID=y
+BR2_PACKAGE_LIBIIO=y
+BR2_PACKAGE_LIBIIO_BINDINGS_PYTHON=y
+BR2_PACKAGE_LIBINPUT=y
+BR2_PACKAGE_LIBV4L=y
+BR2_PACKAGE_LIBXKBCOMMON=y
+BR2_PACKAGE_JSONCPP=y
+BR2_PACKAGE_LIBXSLT=y
+BR2_PACKAGE_LIBMPEG2=y
+BR2_PACKAGE_LIBOPENH264=y
+BR2_PACKAGE_LIBVPX=y
+BR2_PACKAGE_LIBYUV=y
+BR2_PACKAGE_CURL=y
+BR2_PACKAGE_LIBIDN=y
+BR2_PACKAGE_LIBIDN_BINARY=y
+BR2_PACKAGE_LIBMBUS=y
+BR2_PACKAGE_LIBNETFILTER_CONNTRACK=y
+BR2_PACKAGE_LIBNETFILTER_CTHELPER=y
+BR2_PACKAGE_LIBNETFILTER_CTTIMEOUT=y
+BR2_PACKAGE_LIBPJSIP=y
+BR2_PACKAGE_LIBRSYNC=y
+BR2_PACKAGE_LIBSOUP=y
+BR2_PACKAGE_LIBVNCSERVER=y
+BR2_PACKAGE_LIBVNCSERVER_TIGHTPNG=y
+BR2_PACKAGE_NEON=y
+BR2_PACKAGE_NEON_ZLIB=y
+BR2_PACKAGE_NEON_SSL=y
+BR2_PACKAGE_NEON_LIBXML2=y
+BR2_PACKAGE_BOOST_ATOMIC=y
+BR2_PACKAGE_BOOST_CHRONO=y
+BR2_PACKAGE_BOOST_CONTAINER=y
+BR2_PACKAGE_BOOST_CONTEXT=y
+BR2_PACKAGE_BOOST_COROUTINE=y
+BR2_PACKAGE_BOOST_COROUTINE2=y
+BR2_PACKAGE_BOOST_DATE_TIME=y
+BR2_PACKAGE_BOOST_EXCEPTION=y
+BR2_PACKAGE_BOOST_FILESYSTEM=y
+BR2_PACKAGE_BOOST_GRAPH=y
+BR2_PACKAGE_BOOST_GRAPH_PARALLEL=y
+BR2_PACKAGE_BOOST_IOSTREAMS=y
+BR2_PACKAGE_BOOST_LOCALE=y
+BR2_PACKAGE_BOOST_LOG=y
+BR2_PACKAGE_BOOST_MATH=y
+BR2_PACKAGE_BOOST_METAPARSE=y
+BR2_PACKAGE_BOOST_MPI=y
+BR2_PACKAGE_BOOST_PROGRAM_OPTIONS=y
+BR2_PACKAGE_BOOST_PYTHON=y
+BR2_PACKAGE_BOOST_RANDOM=y
+BR2_PACKAGE_BOOST_REGEX=y
+BR2_PACKAGE_BOOST_SERIALIZATION=y
+BR2_PACKAGE_BOOST_SIGNALS=y
+BR2_PACKAGE_BOOST_SYSTEM=y
+BR2_PACKAGE_BOOST_THREAD=y
+BR2_PACKAGE_BOOST_TIMER=y
+BR2_PACKAGE_BOOST_TYPE_ERASURE=y
+BR2_PACKAGE_BOOST_WAVE=y
+BR2_PACKAGE_ELFUTILS=y
+BR2_PACKAGE_LIBCAP_TOOLS=y
+BR2_PACKAGE_PROTOBUF=y
+BR2_PACKAGE_PROTOBUF_C=y
+BR2_PACKAGE_NCURSES_WCHAR=y
+BR2_PACKAGE_NCURSES_TARGET_PANEL=y
+BR2_PACKAGE_NCURSES_TARGET_FORM=y
+BR2_PACKAGE_NCURSES_TARGET_MENU=y
+BR2_PACKAGE_NCURSES_TARGET_PROGS=y
+BR2_PACKAGE_MSMTP=y
+BR2_PACKAGE_BLUEZ_UTILS_AUDIO=y
+BR2_PACKAGE_BLUEZ_UTILS_USB=y
+BR2_PACKAGE_BLUEZ_UTILS_GATT=y
+BR2_PACKAGE_CIVETWEB=y
+BR2_PACKAGE_CIVETWEB_WITH_LUA=y
+BR2_PACKAGE_CRDA=y
+BR2_PACKAGE_DHCP=y
+BR2_PACKAGE_DHCP_SERVER=y
+BR2_PACKAGE_DHCP_SERVER_DELAYED_ACK=y
+BR2_PACKAGE_DHCP_CLIENT=y
+BR2_PACKAGE_GESFTPSERVER=y
+BR2_PACKAGE_HOSTAPD=y
+BR2_PACKAGE_HOSTAPD_EAP=y
+BR2_PACKAGE_HOSTAPD_WPS=y
+BR2_PACKAGE_IFTOP=y
+BR2_PACKAGE_IPSEC_TOOLS=y
+BR2_PACKAGE_IPSEC_TOOLS_READLINE=y
+BR2_PACKAGE_IPTABLES=y
+BR2_PACKAGE_IW=y
+BR2_PACKAGE_NETPLUG=y
+BR2_PACKAGE_OPENSSH=y
+BR2_PACKAGE_OPENVPN=y
+BR2_PACKAGE_OPENVPN_SMALL=y
+BR2_PACKAGE_PPPD=y
+BR2_PACKAGE_PPPD_FILTER=y
+BR2_PACKAGE_PPPD_RADIUS=y
+BR2_PACKAGE_PPTP_LINUX=y
+BR2_PACKAGE_RSYNC=y
+BR2_PACKAGE_TINC=y
+BR2_PACKAGE_WGET=y
+BR2_PACKAGE_WIRELESS_TOOLS=y
+BR2_PACKAGE_WIRELESS_TOOLS_LIB=y
+BR2_PACKAGE_WPA_SUPPLICANT=y
+BR2_PACKAGE_WPA_SUPPLICANT_AP_SUPPORT=y
+BR2_PACKAGE_WPA_SUPPLICANT_WIFI_DISPLAY=y
+BR2_PACKAGE_WPA_SUPPLICANT_AUTOSCAN=y
+BR2_PACKAGE_WPA_SUPPLICANT_EAP=y
+BR2_PACKAGE_WPA_SUPPLICANT_HOTSPOT=y
+BR2_PACKAGE_WPA_SUPPLICANT_DEBUG_SYSLOG=y
+BR2_PACKAGE_WPA_SUPPLICANT_WPS=y
+BR2_PACKAGE_WPA_SUPPLICANT_CLI=y
+BR2_PACKAGE_WPA_SUPPLICANT_WPA_CLIENT_SO=y
+BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y
+BR2_PACKAGE_WPA_SUPPLICANT_DBUS_OLD=y
+BR2_PACKAGE_WPA_SUPPLICANT_DBUS_NEW=y
+BR2_PACKAGE_WPA_SUPPLICANT_DBUS_INTROSPECTION=y
+BR2_PACKAGE_BASH=y
+BR2_PACKAGE_SCREEN=y
+BR2_PACKAGE_SUDO=y
+BR2_PACKAGE_ATTR=y
+BR2_PACKAGE_HTOP=y
+BR2_PACKAGE_KEYUTILS=y
+BR2_PACKAGE_POLKIT=y
+BR2_PACKAGE_UTIL_LINUX_SETTERM=y
+BR2_PACKAGE_JOE=y
+BR2_TARGET_ROOTFS_EXT2=y
+BR2_TARGET_ROOTFS_EXT2_4=y
+BR2_TARGET_ROOTFS_TAR_GZIP=y
+BR2_TARGET_UBOOT=y
+BR2_TARGET_UBOOT_BOARDNAME="am335x_boneblack"
+BR2_TARGET_UBOOT_CUSTOM_VERSION=y
+BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2013.10"
+BR2_TARGET_UBOOT_PATCH="../GfA/board/GfA/Display001/uboot_2013.10"
+# BR2_TARGET_UBOOT_FORMAT_BIN is not set
+BR2_TARGET_UBOOT_FORMAT_IMG=y
+BR2_TARGET_UBOOT_FORMAT_CUSTOM=y
+BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="spl/u-boot-spl.bin"
+BR2_TARGET_UBOOT_SPL=y
+BR2_TARGET_UBOOT_SPL_NAME="MLO"
+BR2_PACKAGE_HOST_DOSFSTOOLS=y
+BR2_PACKAGE_HOST_DTC=y
+BR2_PACKAGE_HOST_GENIMAGE=y
+BR2_PACKAGE_HOST_MTOOLS=y
+BR2_PACKAGE_WT=y
+BR2_PACKAGE_NETWORK_INTERFACES_SCRIPT=y

+ 0 - 1
configs/Display001_defconfig

@@ -77,7 +77,6 @@ BR2_PACKAGE_DIRECTFB_DIVINE=y
 BR2_PACKAGE_DIRECTFB_SAWMAN=y
 BR2_PACKAGE_DIRECTFB_EXAMPLES=y
 BR2_PACKAGE_EFL=y
-BR2_PACKAGE_FBSET=y
 BR2_PACKAGE_FB_TEST_APP=y
 BR2_PACKAGE_FBTERM=y
 BR2_PACKAGE_FBV=y