Browse Source

Several love.data functions now take an enum ("data" or "string") to determine whether they return a Data object or a string.

Changed functions are love.data.compress, decompress, encode, decode, and pack.
Alex Szpakowski 7 years ago
parent
commit
9fa73f8b87

+ 13 - 0
src/modules/data/ByteData.cpp

@@ -45,10 +45,23 @@ ByteData::ByteData(const void *d, size_t size)
 	memcpy(data, d, size);
 }
 
+ByteData::ByteData(void *d, size_t size, bool own)
+	: size(size)
+{
+	if (own)
+		data = (char *) d;
+	else
+	{
+		create();
+		memcpy(data, d, size);
+	}
+}
+
 ByteData::ByteData(const ByteData &d)
 	: size(d.size)
 {
 	create();
+	memcpy(data, d.data, size);
 }
 
 ByteData::~ByteData()

+ 1 - 0
src/modules/data/ByteData.h

@@ -37,6 +37,7 @@ public:
 
 	ByteData(size_t size);
 	ByteData(const void *d, size_t size);
+	ByteData(void *d, size_t size, bool own);
 	ByteData(const ByteData &d);
 	virtual ~ByteData();
 

+ 28 - 5
src/modules/data/DataModule.cpp

@@ -117,11 +117,6 @@ namespace love
 namespace data
 {
 
-CompressedData *compress(Compressor::Format format, love::Data *rawdata, int level)
-{
-	return compress(format, (const char *) rawdata->getData(), rawdata->getSize(), level);
-}
-
 CompressedData *compress(Compressor::Format format, const char *rawbytes, size_t rawsize, int level)
 {
 	Compressor *compressor = Compressor::getCompressor(format);
@@ -245,6 +240,11 @@ ByteData *DataModule::newByteData(const void *d, size_t size)
 	return new ByteData(d, size);
 }
 
+ByteData *DataModule::newByteData(void *d, size_t size, bool own)
+{
+	return new ByteData(d, size, own);
+}
+
 static StringMap<EncodeFormat, ENCODE_MAX_ENUM>::Entry encoderEntries[] =
 {
 	{ "base64", ENCODE_BASE64 },
@@ -253,6 +253,14 @@ static StringMap<EncodeFormat, ENCODE_MAX_ENUM>::Entry encoderEntries[] =
 
 static StringMap<EncodeFormat, ENCODE_MAX_ENUM> encoders(encoderEntries, sizeof(encoderEntries));
 
+static StringMap<ContainerType, CONTAINER_MAX_ENUM>::Entry containerEntries[] =
+{
+	{ "data",   CONTAINER_DATA   },
+	{ "string", CONTAINER_STRING },
+};
+
+static StringMap<ContainerType, CONTAINER_MAX_ENUM> containers(containerEntries, sizeof(containerEntries));
+
 bool getConstant(const char *in, EncodeFormat &out)
 {
 	return encoders.find(in, out);
@@ -268,5 +276,20 @@ std::vector<std::string> getConstants(EncodeFormat)
 	return encoders.getNames();
 }
 
+bool getConstant(const char *in, ContainerType &out)
+{
+	return containers.find(in, out);
+}
+
+bool getConstant(ContainerType in, const char *&out)
+{
+	return containers.find(in, out);
+}
+
+std::vector<std::string> getConstants(ContainerType)
+{
+	return containers.getNames();
+}
+
 } // data
 } // love

+ 14 - 2
src/modules/data/DataModule.h

@@ -42,17 +42,24 @@ enum EncodeFormat
 	ENCODE_MAX_ENUM
 };
 
+enum ContainerType
+{
+	CONTAINER_DATA,
+	CONTAINER_STRING,
+	CONTAINER_MAX_ENUM
+};
+
 /**
  * Compresses a block of memory using the given compression format.
  *
  * @param format The compression format to use.
- * @param rawdata The data to compress.
+ * @param rawbytes The data to compress.
+ * @param rawsize The size in bytes of the data to compress.
  * @param level The amount of compression to apply (between 0 and 9.)
  *              A value of -1 indicates the default amount of compression.
  *              Specific formats may not use every level.
  * @return The newly compressed data.
  **/
-CompressedData *compress(Compressor::Format format, Data *rawdata, int level = -1);
 CompressedData *compress(Compressor::Format format, const char *rawbytes, size_t rawsize, int level = -1);
 
 /**
@@ -98,6 +105,10 @@ bool getConstant(const char *in, EncodeFormat &out);
 bool getConstant(EncodeFormat in, const char *&out);
 std::vector<std::string> getConstants(EncodeFormat);
 
+bool getConstant(const char *in, ContainerType &out);
+bool getConstant(ContainerType in, const char *&out);
+std::vector<std::string> getConstants(ContainerType);
+
 
 class DataModule : public Module
 {
@@ -112,6 +123,7 @@ public:
 	DataView *newDataView(Data *data, size_t offset, size_t size);
 	ByteData *newByteData(size_t size);
 	ByteData *newByteData(const void *d, size_t size);
+	ByteData *newByteData(void *d, size_t size, bool own);
 
 	static DataModule instance;
 

+ 103 - 51
src/modules/data/wrap_DataModule.cpp

@@ -41,6 +41,15 @@ namespace love
 namespace data
 {
 
+ContainerType luax_checkcontainertype(lua_State *L, int idx)
+{
+	const char *str = luaL_checkstring(L, idx);
+	ContainerType ctype = CONTAINER_STRING;
+	if (!getConstant(str, ctype))
+		luax_enumerror(L, "container type", getConstants(ctype), str);
+	return ctype;
+}
+
 int w_newDataView(lua_State *L)
 {
 	Data *data = luax_checkdata(L, 1);
@@ -103,38 +112,47 @@ int w_newByteData(lua_State *L)
 
 int w_compress(lua_State *L)
 {
-	const char *fstr = luaL_checkstring(L, 1);
+	ContainerType ctype = luax_checkcontainertype(L, 1);
+
+	const char *fstr = luaL_checkstring(L, 2);
 	Compressor::Format format = Compressor::FORMAT_LZ4;
 
 	if (!Compressor::getConstant(fstr, format))
 		return luax_enumerror(L, "compressed data format", Compressor::getConstants(format), fstr);
 
-	int level = (int) luaL_optinteger(L, 3, -1);
+	int level = (int) luaL_optinteger(L, 4, -1);
+	size_t rawsize = 0;
+	const char *rawbytes = nullptr;
 
-	CompressedData *cdata = nullptr;
-	if (lua_isstring(L, 2))
-	{
-		size_t rawsize = 0;
-		const char *rawbytes = luaL_checklstring(L, 2, &rawsize);
-		luax_catchexcept(L, [&](){ cdata = compress(format, rawbytes, rawsize, level); });
-	}
+	if (lua_isstring(L, 3))
+		rawbytes = luaL_checklstring(L, 3, &rawsize);
 	else
 	{
-		Data *rawdata = luax_checktype<Data>(L, 2);
-		luax_catchexcept(L, [&](){ cdata = compress(format, rawdata, level); });
+		Data *rawdata = luax_checktype<Data>(L, 3);
+		rawsize = rawdata->getSize();
+		rawbytes = (const char *) rawdata->getData();
 	}
 
-	luax_pushtype(L, cdata);
+	CompressedData *cdata = nullptr;
+	luax_catchexcept(L, [&](){ cdata = compress(format, rawbytes, rawsize, level); });
+
+	if (ctype == CONTAINER_DATA)
+		luax_pushtype(L, cdata);
+	else
+		lua_pushlstring(L, (const char *) cdata->getData(), cdata->getSize());
+
 	cdata->release();
 	return 1;
 }
 
 int w_decompress(lua_State *L)
 {
+	ContainerType ctype = luax_checkcontainertype(L, 1);
+
 	char *rawbytes = nullptr;
 	size_t rawsize = 0;
 
-	if (luax_istype(L, 1, CompressedData::type))
+	if (luax_istype(L, 2, CompressedData::type))
 	{
 		CompressedData *data = luax_checkcompresseddata(L, 1);
 		rawsize = data->getDecompressedSize();
@@ -143,7 +161,7 @@ int w_decompress(lua_State *L)
 	else
 	{
 		Compressor::Format format = Compressor::FORMAT_LZ4;
-		const char *fstr = luaL_checkstring(L, 1);
+		const char *fstr = luaL_checkstring(L, 2);
 
 		if (!Compressor::getConstant(fstr, format))
 			return luax_enumerror(L, "compressed data format", Compressor::getConstants(format), fstr);
@@ -151,27 +169,39 @@ int w_decompress(lua_State *L)
 		size_t compressedsize = 0;
 		const char *cbytes = nullptr;
 
-		if (luax_istype(L, 2, Data::type))
+		if (luax_istype(L, 3, Data::type))
 		{
 			Data *data = luax_checktype<Data>(L, 2);
 			cbytes = (const char *) data->getData();
 			compressedsize = data->getSize();
 		}
 		else
-			cbytes = luaL_checklstring(L, 2, &compressedsize);
+			cbytes = luaL_checklstring(L, 3, &compressedsize);
 
 		luax_catchexcept(L, [&](){ rawbytes = decompress(format, cbytes, compressedsize, rawsize); });
 	}
 
-	lua_pushlstring(L, rawbytes, rawsize);
-	delete[] rawbytes;
+	if (ctype == CONTAINER_DATA)
+	{
+		ByteData *data = nullptr;
+		luax_catchexcept(L, [&]() { data = DataModule::instance.newByteData(rawbytes, rawsize, true); });
+		luax_pushtype(L, Data::type, data);
+		data->release();
+	}
+	else
+	{
+		lua_pushlstring(L, rawbytes, rawsize);
+		delete[] rawbytes;
+	}
 
 	return 1;
 }
 
 int w_encode(lua_State *L)
 {
-	const char *formatstr = luaL_checkstring(L, 1);
+	ContainerType ctype = luax_checkcontainertype(L, 1);
+
+	const char *formatstr = luaL_checkstring(L, 2);
 	EncodeFormat format;
 	if (!getConstant(formatstr, format))
 		return luax_enumerror(L, "encode format", getConstants(format), formatstr);
@@ -179,33 +209,50 @@ int w_encode(lua_State *L)
 	size_t srclen = 0;
 	const char *src = nullptr;
 
-	if (luax_istype(L, 2, Data::type))
+	if (luax_istype(L, 3, Data::type))
 	{
-		Data *data = luax_totype<Data>(L, 2);
+		Data *data = luax_totype<Data>(L, 3);
 		src = (const char *) data->getData();
 		srclen = data->getSize();
 	}
 	else
-		src = luaL_checklstring(L, 2, &srclen);
+		src = luaL_checklstring(L, 3, &srclen);
 
-	size_t linelen = (size_t) luaL_optinteger(L, 3, 0);
+	size_t linelen = (size_t) luaL_optinteger(L, 4, 0);
 
 	size_t dstlen = 0;
 	char *dst = nullptr;
 	luax_catchexcept(L, [&](){ dst = encode(format, src, srclen, dstlen, linelen); });
 
-	if (dst != nullptr)
-		lua_pushlstring(L, dst, dstlen);
+	if (ctype == CONTAINER_DATA)
+	{
+		ByteData *data = nullptr;
+		if (dst != nullptr)
+			luax_catchexcept(L, [&]() { data = DataModule::instance.newByteData(dst, dstlen, true); });
+		else
+			luax_catchexcept(L, [&]() { data = DataModule::instance.newByteData(0); });
+
+		luax_pushtype(L, Data::type, data);
+		data->release();
+	}
 	else
-		lua_pushstring(L, "");
+	{
+		if (dst != nullptr)
+			lua_pushlstring(L, dst, dstlen);
+		else
+			lua_pushstring(L, "");
+
+		delete[] dst;
+	}
 
-	delete[] dst;
 	return 1;
 }
 
 int w_decode(lua_State *L)
 {
-	const char *formatstr = luaL_checkstring(L, 1);
+	ContainerType ctype = luax_checkcontainertype(L, 1);
+
+	const char *formatstr = luaL_checkstring(L, 2);
 	EncodeFormat format;
 	if (!getConstant(formatstr, format))
 		return luax_enumerror(L, "decode format", getConstants(format), formatstr);
@@ -213,25 +260,40 @@ int w_decode(lua_State *L)
 	size_t srclen = 0;
 	const char *src = nullptr;
 
-	if (luax_istype(L, 2, Data::type))
+	if (luax_istype(L, 3, Data::type))
 	{
-		Data *data = luax_totype<Data>(L, 2);
+		Data *data = luax_totype<Data>(L, 3);
 		src = (const char *) data->getData();
 		srclen = data->getSize();
 	}
 	else
-		src = luaL_checklstring(L, 2, &srclen);
+		src = luaL_checklstring(L, 3, &srclen);
 
 	size_t dstlen = 0;
 	char *dst = nullptr;
 	luax_catchexcept(L, [&](){ dst = decode(format, src, srclen, dstlen); });
 
-	if (dst != nullptr)
-		lua_pushlstring(L, dst, dstlen);
+	if (ctype == CONTAINER_DATA)
+	{
+		ByteData *data = nullptr;
+		if (dst != nullptr)
+			luax_catchexcept(L, [&]() { data = DataModule::instance.newByteData(dst, dstlen, true); });
+		else
+			luax_catchexcept(L, [&]() { data = DataModule::instance.newByteData(0); });
+
+		luax_pushtype(L, Data::type, data);
+		data->release();
+	}
 	else
-		lua_pushstring(L, "");
+	{
+		if (dst != nullptr)
+			lua_pushlstring(L, dst, dstlen);
+		else
+			lua_pushstring(L, "");
+
+		delete[] dst;
+	}
 
-	delete[] dst;
 	return 1;
 }
 
@@ -259,13 +321,14 @@ int w_hash(lua_State *L)
 	return 1;
 }
 
-static int w_pack(lua_State *L, bool data)
+static int w_pack(lua_State *L)
 {
-	const char *fmt = luaL_checkstring(L, 1);
+	ContainerType ctype = luax_checkcontainertype(L, 1);
+	const char *fmt = luaL_checkstring(L, 2);
 	luaL_Buffer_53 b;
-	lua53_str_pack(L, fmt, 2, &b);
+	lua53_str_pack(L, fmt, 3, &b);
 
-	if (data)
+	if (ctype == CONTAINER_DATA)
 	{
 		Data *d = nullptr;
 		luax_catchexcept(L, [&]() { d = DataModule::instance.newByteData(b.nelems); });
@@ -281,16 +344,6 @@ static int w_pack(lua_State *L, bool data)
 	return 1;
 }
 
-int w_packString(lua_State *L)
-{
-	return w_pack(L, false);
-}
-
-int w_packData(lua_State *L)
-{
-	return w_pack(L, true);
-}
-
 int w_unpack(lua_State *L)
 {
 	const char *fmt = luaL_checkstring(L, 1);
@@ -321,8 +374,7 @@ static const luaL_Reg functions[] =
 	{ "decode", w_decode },
 	{ "hash", w_hash },
 
-	{ "packString", w_packString },
-	{ "packData", w_packData },
+	{ "pack", w_pack },
 	{ "unpack", w_unpack },
 	{ "getPackedSize", lua53_str_packsize },
 

+ 2 - 0
src/modules/data/wrap_DataModule.h

@@ -23,12 +23,14 @@
 // LOVE
 #include "common/config.h"
 #include "common/runtime.h"
+#include "DataModule.h"
 
 namespace love
 {
 namespace data
 {
 
+ContainerType luax_checkcontainertype(lua_State *L, int idx);
 int w_compress(lua_State *L);
 int w_decompress(lua_State *L);
 extern "C" LOVE_EXPORT int luaopen_love_data(lua_State *L);

+ 8 - 7
src/modules/math/wrap_Math.cpp

@@ -360,20 +360,21 @@ int w_compress(lua_State *L)
 		return luax_enumerror(L, "compressed data format", Compressor::getConstants(format), fstr);
 
 	int level = (int) luaL_optinteger(L, 3, -1);
+	size_t rawsize = 0;
+	const char *rawbytes = nullptr;
 
-	CompressedData *cdata = nullptr;
 	if (lua_isstring(L, 1))
-	{
-		size_t rawsize = 0;
-		const char *rawbytes = luaL_checklstring(L, 1, &rawsize);
-		luax_catchexcept(L, [&](){ cdata = compress(format, rawbytes, rawsize, level); });
-	}
+		rawbytes = luaL_checklstring(L, 1, &rawsize);
 	else
 	{
 		Data *rawdata = luax_checktype<Data>(L, 1);
-		luax_catchexcept(L, [&](){ cdata = compress(format, rawdata, level); });
+		rawsize = rawdata->getSize();
+		rawbytes = (const char *) rawdata->getData();
 	}
 
+	CompressedData *cdata = nullptr;
+	luax_catchexcept(L, [&](){ cdata = compress(format, rawbytes, rawsize, level); });
+
 	luax_pushtype(L, cdata);
 	cdata->release();
 	return 1;

+ 89 - 86
src/scripts/nogame.lua

@@ -25,10 +25,10 @@ function love.nogame()
 
 	R = {}
 
-	R.bg = {}
+	R.bg = {[1]={}, [2]={}}
 
 	-- cloud_1.png
-	R.bg.cloud_1_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.bg[1].cloud_1_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAALEAAABUCAYAAADNoNb0AAAGqElEQVR4nO3de6wcVR0H8M\
 	+lL20bX1iItFANVEEkpai1tWBJg6JEkxrwCWrAlEpMNdHYaDSpJjU+Eo0mmqBi+odKUuID\
 	Y4xExFdjhJJqRYKCYkzUP6RCedWalkv949wmze3O3t3ZmXNm7/19kv3j7u7M+e293zs7c2\
@@ -63,9 +63,9 @@ function love.nogame()
 	HtxVbsr7PwKMOTfo/1uE66aUgIw3pQys96NQNMczdjnI/NuFa6j2/cEixUeUq668Au3Dr1\
 	80iavKPocc+TZhDaKN0WdxVOFdNizUWH8DD+gnvxq6nHI0020kaIQ8gqhuyHsRchDmMvQh\
 	zGXoQ4jL3/A4htWI/rxYLaAAAAAElFTkSuQmCC\
-	"), "cloud_1.png")
+	")
 	-- [email protected]
-	R.bg.cloud_1_2x_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.bg[2].cloud_1_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAAWIAAACoCAYAAADaWOQcAAAOEElEQVR4nO3debQfZX3H8f\
 	cl4SZkITkmshmwIYgBTVgLZRMwBiwuOaCCqCig4illq2KL2x+etmqtWFcqirGlLlXcDngE\
 	BbHUKEKhKkILFRO2YpEkEiGQQLjpH98bEvAmmZnfzDyzvF/n3HNzYGaeLwn5/J77zLMMrV\
@@ -136,9 +136,9 @@ function love.nogame()
 	odAExIWpGkJlsL3Ezsd/M94HrgyaQVbUUbgviZJhBT4OYBLyCOsN4V2AGYSRxoKqnbHgWW\
 	E6fJ3wssA24DfkmcFrQ2XWn5tTGIJalTUk5fkyRhEEtScgaxJCVmEEtSYgaxJCVmEEtSYg\
 	axJCVmEEtSYgaxJCX2/5ixqodpMZm+AAAAAElFTkSuQmCC\
-	"), "[email protected]")
+	")
 	-- cloud_2.png
-	R.bg.cloud_2_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.bg[1].cloud_2_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAALEAAABUCAYAAADNoNb0AAAF0klEQVR4nO3dW4hVVRzH8e\
 	8cc2w0M6uZhjE1m0lNsbLsOj5FXgoyKlMLSqMxYx6znsughzDMh56sibALFSEUpFQiFUVk\
 	SdJDNF2s7DZYUGNTDU7j9PA/kWSkc87/v9dl/z/gy6hr/w/nx5q1115r7YaRkRGcS1kldA\
@@ -169,9 +169,9 @@ function love.nogame()
 	iZA13IAXMuTwP88z0PFXXRohfF9wBzkXGyy8s25Lst/DduyLcnXQTciwz8x4YqwtVlCAnv\
 	RmBPqCJieBljMzJ+ugY5t6I1bDnuGPqQ5ZTbkamzH8OWE0eInauLbxR1yfMQu+R5iF3yPM\
 	QueX8BzokhiMHuRk0AAAAASUVORK5CYII=\
-	"), "cloud_2.png")
+	")
 	-- [email protected]
-	R.bg.cloud_2_2x_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.bg[2].cloud_2_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAAWIAAACoCAYAAADaWOQcAAAMXUlEQVR4nO3de6zf8x3H8e\
 	fR9kQxpZ2WCkqrOlKrul9Kmds2m5lths0lw1oWhMzcZtnMNrK4zUzS2NjFzDW2mWxzN5Ni\
 	ZshQrbmUMkxrSteq7o+PE1XV8/ud8/v93p/P9/t8JJKmOel55cjvdd6/z+/z/Xy6lixZgi\
@@ -234,9 +234,9 @@ function love.nogame()
 	KwG7AfsC+wbmwcqdKeA24ArgduBd6OjZMHi/i9uoCtgB2B7YHtcFqW+uNpYDpwD+moyvsp\
 	/KS0drCIJSlY1bevSVL2LGJJCmYRS1Iwi1iSglnEkhTMIpakYBaxJAWziCUpmEUsScH+D0\
 	EmR28m6dqwAAAAAElFTkSuQmCC\
-	"), "[email protected]")
+	")
 	-- cloud_3.png
-	R.bg.cloud_3_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.bg[1].cloud_3_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAALEAAABUCAYAAADNoNb0AAAFhklEQVR4nO3dWYxfUxwH8E\
 	+rElGh1tSe1NJUiMTEFtEmJR5ILEG8iC1p8SAhggdeRCW1e6JCiCdLBKkSsST2pfYtDCFE\
 	SSNFhDZ9YOrhZGTKjLbTmfn9zr3n89zMfPs/3zn/c+89995pGzZs0DQ1mx4doGm2VitxU7\
@@ -266,9 +266,9 @@ function love.nogame()
 	8rkOqKjA1DcTjzQDZ+FCnKi+P8gMhvCC8krcx1R6kanmEo+0h3IEvUCZSeZq73wezTpl88\
 	57eBnP4afQRBOgKyVueqx9BTfVayVuqtdK3FSvlbip3t9rOy6aUG6iAgAAAABJRU5ErkJg\
 	gg==\
-	"), "cloud_3.png")
+	")
 	-- [email protected]
-	R.bg.cloud_3_2x_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.bg[2].cloud_3_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAAWIAAACoCAYAAADaWOQcAAALhklEQVR4nO3daaxdVRnG8f\
 	8tpUUopdQKSEtb5qkBQSwEiUBDUagyiBIpiVZAQcBqkDAlihJAgZKIUEIIKE4Eq0yCTEJB\
 	YtFiDEhoGVqGho7QkDKUoUDrh3Xh9HLnc88579p7/39Jk/bTfdqc/fS96661dtu6deuQJM\
@@ -327,9 +327,9 @@ function love.nogame()
 	fGUUk9QzqSfzfpbu13Y+MILOKcbUG6gH4vYE9SMW9Lupxe6s0a4HngWeB/wGOkC9tfjgyl\
 	rlnEkhTMfcSSFMwilqRgFrEkBbOIJSmYRSxJwSxiSQpmEUtSMItYkoJZxJIU7P83pECPnM\
 	xUCgAAAABJRU5ErkJggg==\
-	"), "[email protected]")
+	")
 	-- cloud_4.png
-	R.bg.cloud_4_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.bg[1].cloud_4_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAALEAAABUCAYAAADNoNb0AAAFz0lEQVR4nO3dW4hfxR0H8M\
 	+mGhuNxqLWe0niNUaNEol3tJrY4L312tYbIlpB0BcVvDy1YIgoKqioEGKfKlgo2IcGqigY\
 	xIiYxtYoahSLNWhDi7fqJnH7MCsmMSy7c+bc9v/7wJ9AsjPze/juyfzPmZkzNDIyIoQ+m9\
@@ -360,9 +360,9 @@ function love.nogame()
 	mO69p2vxrzpd+69TWNEfphvZSD+WoIMM28oHwarsK1WFD3YKEzVmEZfi+dRVybJkK8pVk4\
 	09bvsdtdO+/TC2VsknZkrJMeXLyIZ/FeUwU0HeIQioujqELvRYhD70WIQ+9FiEPvRYhD7/\
 	0fHvIyRu6OJTkAAAAASUVORK5CYII=\
-	"), "cloud_4.png")
+	")
 	-- [email protected]
-	R.bg.cloud_4_2x_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.bg[2].cloud_4_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAAWIAAACoCAYAAADaWOQcAAAMOklEQVR4nO3de+zXVR3H8e\
 	dP7oKCCoLITUEylJuXykQltQJvXbzNQZnlJS0vMFeuZWpO29yylO4zMZelkq2823Rqma6G\
 	U1DLNPCSBojmBVkR6K8/zu9niL/r93Len8/3+3xsTOZl56VzLw7ncy4tra2tSJLibBUdQJ\
@@ -424,11 +424,12 @@ function love.nogame()
 	MBc4EBgVG0dSBVYDvwfuAG4n4Kn7HBq5iLe0K+nB0qnAZGAC6amm4cC2cbGkpvcG8DLplY\
 	xngaeAx0hvyK2Mi5VPMxWxJBWSa6iSFMwilqRgFrEkBbOIJSmYRSxJwSxiSQpmEUtSMItY\
 	koJZxJIUzCKWpGAWsSQF+x/RmkrWbHB7LQAAAABJRU5ErkJggg==\
-	"), "[email protected]")
-	R.chain = {}
+	")
+
+	R.chain = {[1]={}, [2]={}}
 
 	-- a.png
-	R.chain.a_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.chain[1].a_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAADj0lEQVRIic2WTWwUZRjHf/\
 	OxM/vRtSnttgsYSttN2yUBWqQKWC1BE6iGBj3IAcHoRcWLiRxMTCTiyejRqCeNPejBkxSQ\
 	Fg6GxEjSkLYgEmDXrwjFOmtry352Zl4Pg4WZnd2uhhD+yVze93me3zPvx/O8khCCeyn5nt\
@@ -448,9 +449,9 @@ function love.nogame()
 	rtaAk8CI9ftsR+7z7zDPXqsKUzbECL+4DTURTwF7gIu+SdX4xDho/fKnVvo+jfmTgcjkQI\
 	DUFEZZ04DW14bavaoIfIKzjPOVAi4H/FdxYB8wCPRwu1xlgCngJDCMc+iqqlbgXdN9+y69\
 	a/oHeH87HFWBERQAAAAASUVORK5CYII=\
-	"), "a.png")
+	")
 	-- [email protected]
-	R.chain.a_2x_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.chain[2].a_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAYAAACohjseAAAH3ElEQVRoge2aXWwVxxXHf7\
 	O7d++XDcQOBgzYOMHUNg00JHyHD4coLYSEVn1paJq0iCZqm1YofUirfqjNQ6u+oJY0ahu5\
 	fWgDEZEipfBQERRaaMCQNnGggCDU2MSNqQMmYPD1/dqdPqz3foB39861rYaIv3SlmdkzZ8\
@@ -491,9 +492,9 @@ function love.nogame()
 	7L2BevOlM4lUVUhBGVEfQZt2E0TEavvyEJcxr4Gc56H52BY3wRaMPwZZ5UGReBMtK5RPSF\
 	j9tFoJEwESf0vxQngDwLJwzpRhASOCGRM8Bx4ACwj3G4yjVeBD82+MTfNrxF8GbHLYI3O/\
 	4HzN2+0cWu1vEAAAAASUVORK5CYII=\
-	"), "[email protected]")
+	")
 	-- e.png
-	R.chain.e_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.chain[1].e_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAADrElEQVRIic2WW2hcVRSGv3\
 	OZk8wtJjhpUk1bk6a1sZhqsVJFLFpQIxIRivhQBd+kogQvCIooFJ8K9cHQF5+kbz6UqkGJ\
 	BEVF0ZRaBkxtNZOml9w6k06ayXQm55y9tw+niXPOmWlSLaU/zMu/11r/WmfP3v/WlFLcTO\
@@ -514,9 +515,9 @@ function love.nogame()
 	E7WzNAL1W8cCVB8LxxP7BPnMla9vAY7mgWlS+BK9BakhhtjVg72jG33GED/XhPkrBnrVJw\
 	CS3AXqAHb1+WLocc3jkbBA5TYUP/V/CG4ZZ9l94w/AMIA3oLRCGsQwAAAABJRU5ErkJggg\
 	==\
-	"), "e.png")
+	")
 	-- [email protected]
-	R.chain.e_2x_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.chain[2].e_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAYAAACohjseAAAH2klEQVRoge2ae4xVRx3HPz\
 	PnnPvYe/cur12WLQu7FBrYllJgC6VgTZfGKqBNaku0sSYkbRq1GEhMmviI1uh/YjVg1JTE\
 	pDWgRIlajAGxKLUFAWlB3UIXlvdjW3bZ133fc8Y/zj2Xvbt7zz3n7qKl4ZtsMr85v5n5fe\
@@ -557,9 +558,9 @@ function love.nogame()
 	hZE5XKISIBRCxkR7eba9FmTAYhhjY9BXwL2IF9TFWOcXwIJPOPeF7LP+rxi0y+7WPKflT0\
 	oXkINBqcp1wPAK3YMdbp5CN12PGeLuyowTHsu+dNecp1swh+aPCRf214m+CtjtsEb3X8F5\
 	Lt7GKi5gIEAAAAAElFTkSuQmCC\
-	"), "[email protected]")
+	")
 	-- g.png
-	R.chain.g_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.chain[1].g_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAADvElEQVRIidWWTUxcVRTHf/\
 	d9DcwM00FomYYAQ9uhbdIUUWNrmtqA2pguqk3UBYp148LEdKELv5aaNHFRTWpMTGy0lcYY\
 	MW60Ma0BGrW18hUhEW0tjICKM1CgwLxh3rx3XQzFecMwUGOaepK3+Z/zzu+ee+479wkpJb\
@@ -580,9 +581,9 @@ function love.nogame()
 	pbdmHs3hwHHseR57PbshYgQAXwJlI+aQ2MqakfhrCHryGvJ8FyEOVe1OpSjHvC6DurbTTl\
 	I+AVYHylhKsBM9spRBhoBvYDO4CyRe8kMEBm604jZRSxvKqbA/7Hdtv+Jv5/gX8Djf96T7\
 	NLXZQAAAAASUVORK5CYII=\
-	"), "g.png")
+	")
 	-- [email protected]
-	R.chain.g_2x_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.chain[2].g_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAYAAACohjseAAAIJ0lEQVRoge2aWZBU1RnHf+\
 	feXuf2DMyAs7AYlgEGnLBETQVBEkFMjKIVLYwlSbRSZVW0ECV5yYsVH5JKkVS5lSmtSpFo\
 	MDFWEhcCWAYTDMNmRjZFBhhHBodtmBmYpffue08ebndPd9F36Z4hAYv/073nfuec//+e7T\
@@ -624,9 +625,9 @@ function love.nogame()
 	QeAnGSK5SwgylkI/fo5UezfGmQGMvggkdZAS/B5EpR+1YSzq1PF4ZzXkdiIZ9GFeQHiWMl\
 	otH6N9jeQB4EHMA8pyYvPbMT2nP3IZXSMphlpgGbAQmAd8CbMbZ33fGOZVkU+Bw5jLz7+4\
 	zC8CXZb4wt9VuyrwSsdVgVc6rgq80vFfbDnjk7U4d3EAAAAASUVORK5CYII=\
-	"), "[email protected]")
+	")
 	-- m.png
-	R.chain.m_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.chain[1].m_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAADkUlEQVRIic2WXWwUVRTHf3\
 	dmdva7RLst21Zql1ZsqxBoKvKRCOqDAhF50wRNNCFR8UGMEh+MEjE+GI36pM8SP2J8MAoG\
 	LYkPJoQSTFpNCrHtVjSUQrtrW7a70935uD5srZ2d6W4lhPBP5mHOuff+zr33zDkjpJTcTC\
@@ -646,9 +647,9 @@ function love.nogame()
 	tQbcBZywL02vLXx62pPylVI3NBB5dhtaR3IU2AcM+QZV4xcjTrnFHLT/mNJL/WmssQwyWw\
 	ApEYkoautt6Pel0Dqbi8AnwBHKp+SrWsB/lQT2A7uAjfxXrrLAANAHHAOu1lpopcAbplv2\
 	v/SG6R/27zmuL3E50QAAAABJRU5ErkJggg==\
-	"), "m.png")
+	")
 	-- [email protected]
-	R.chain.m_2x_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.chain[2].m_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAYAAACohjseAAAH/klEQVRoge2aaXBVZxnHf+\
 	855557c29CAkIMWUGaNCRsJh22KGVRRqCVOnXGkUGxiqPW4mD9UJ2Oy/jFGT/gSNvROti6\
 	QRWXD8VlFKUlU0ixVqQ0gCxDIAKlkJClufu9rx/OPTd3ydmyaOnwn7kz533P8z7LPed53u\
@@ -690,9 +691,9 @@ function love.nogame()
 	7izUhpmFPM8A38Hw94kpOMkHgT6SOcwTG8dBoIQ0DhE98HY7CDQWyjFK/yswCshzMMqQ5m\
 	d+GKMkcg7jw/ow8CJTcJRrqgx82+Adf9rwjoG3O+4YeLvjv1Ru0JflEZTtAAAAAElFTkSu\
 	QmCC\
-	"), "[email protected]")
+	")
 	-- n.png
-	R.chain.n_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.chain[1].n_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAADbElEQVRIidWWTWxUVRSAv/\
 	v+Zt60dChQWlNpB1NqF9aimFajMjVRsSWwUEJcYI0LNNG4MJjoojHG+LdgZ3TXGDEmRuOC\
 	aDCAfxijEWP4SRcCBQpF+bHTTpmZN9P3d13M1On0dV4HYgie5OW9d+495zvn3fvOuUJKyY\
@@ -711,9 +712,9 @@ function love.nogame()
 	bbwHYWFG4I74cbgS/csUurrA9/wTt+JRSktC3D3NGLcV/HJLANXx5iQXZLAQFaKHb8IffE\
 	RWEfPoN3ehJ/0gJfIhpN1PZG9LvbMda3e2jKxxQ7/uVqDpcCzkkC2AE8AtwBzLWGKWAUOA\
 	h8gpRnEcGsrgf4n8lNe0z8/wL/AWkORFUNbGW+AAAAAElFTkSuQmCC\
-	"), "n.png")
+	")
 	-- [email protected]
-	R.chain.n_2x_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.chain[2].n_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAYAAACohjseAAAHaElEQVRoge2aa2wU1xXHf/\
 	PY99rgEAdDjTEBHEgbwisENSmPUJSYCslRqZK2n5qoqlRF1Cpp0yp8qPoBNaUNTZXHJ0RV\
 	KSlIlULV1ORVSExFAzVJREJqXjHQ2BQ3xsbe987M7Yfx7M7indnZ9W5TR/5/unPvufee/9\
@@ -752,9 +753,9 @@ function love.nogame()
 	t1cZN9tcD0L3djvrxJHbrV/I0kAnwLM29f6W8kx4G9mB6KN6+7BKpJ0I4mYDNmbHU5MA8z\
 	8mXtvRSmsejDNPsnMPP+FQZgnVErgv83+Nz/qzZNcKpjmuBUxzTBqY7/AmDdgoJ+h2mjAA\
 	AAAElFTkSuQmCC\
-	"), "[email protected]")
+	")
 	-- o.png
-	R.chain.o_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.chain[1].o_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAGXRFWHRTb2Z0d2FyZQBBZG\
 	9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBh\
 	Y2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4On\
@@ -791,9 +792,9 @@ function love.nogame()
 	62ELoSvYDZsXRFrm/3hs8/gvZ+4OfvlKkuCmMhpJJ57ALeTKj9kyfGGUS1DfKzNij19MTo\
 	6IcekinPJPDTUiAWZEHMzyQRCTep7x6rJwYYoQ34CacIDYSIPmKsbBxt99mcx9LD/w/hhO\
 	2bAAMAGcakBZrrNusAAAAASUVORK5CYII=\
-	"), "o.png")
+	")
 	-- [email protected]
-	R.chain.o_2x_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.chain[2].o_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAYAAACohjseAAAH90lEQVRoge2abXAV1RnHf/\
 	ty3/NKEhJeApeEgLEqUSRNeBGKIjO2aFvHStXWji3TdjqljF/amVpbO5WxnSlDazuj0mod\
 	2xlKYaTDDFYEq4DyYkcGSwjUxIaEAAkQyMvNzb27e7cfNnvvDZI9uzfJWBz+n/acfZ5z/v\
@@ -834,9 +835,9 @@ function love.nogame()
 	WST+QSQjYqgV8BDwDpg3Wzfwjt5FmM9oukuvut/2lCR4r4kYvCKJWTUGsqkMsLstsysUbG\
 	T7EuC40Z43kRaDbWtZLVWJORF/RgCXsOODFehGB8BdpQgSVYByP1WMKjgJ1siWHdmGgGjg\
 	C7sXYGwvxKLpgIgf9X+NTfNrwu8FrHdYHXOv4HXDGZ3/Dil9AAAAAASUVORK5CYII=\
-	"), "[email protected]")
+	")
 	-- square.png
-	R.chain.square_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.chain[1].square_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAACHklEQVRIie2VzWsTQRjGn9\
 	l2t7GktmmLJiD1YPw4+HHwIIqi9FCw0D9AsRRF/Ac82LNQ/wJPQi+CV48WROqhgrZGglJJ\
 	CYKGQm1Mk7j5aHdms/N4sFg/ss2uloKlA3MYeN/nN8+8vO8IktjOZWwrbRe4I4DtoTM8CX\
@@ -849,9 +850,9 @@ function love.nogame()
 	SxqV7APrRB8pSuZItq9uKPPlSvzlKX3+ZJHtdOYesa/6fmT+rap0U1N0j1eoi68iFD8oCW\
 	5a2dNBvjrQaSCV3LvdG13BOSe7WqhtJoWcM/SqBsQLvr9TMhrO5Q+aGB/7p2/o+/C/z/gd\
 	8AcTpAf+9BGPQAAAAASUVORK5CYII=\
-	"), "square.png")
+	")
 	-- [email protected]
-	R.chain.square_2x_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.chain[2].square_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAYAAACohjseAAADpElEQVRoge2Zb2hVZRzHP+\
 	c558w796c5YbG1miaVu9tKeucLEyosK7GwIChEhjGKIRYGUYkyohgRMkYGG4kU6asiYrKi\
 	ImS+KMIgWLoWrJW4zMlWY+rN8+fbiy0ha5b3nHPlyPnAgQv3PN/n9+Gee5/n+V1LEtcy5m\
@@ -871,11 +872,12 @@ function love.nogame()
 	243C2M+CQOI9mS5JCk+8p8JQowpD9fNXw1/NJ09Se5LNp8S7WpK2S1Iw8eGc5JEmBb8MSN\
 	KspPuTnr8Ugkh6XFIhOPWxgskhSRqXtKoUcyfZVbuU1cy1JIaBLczthBKnlIJXhey/ibST\
 	CaadTDDtZIJpJxNMO5lg2skE0841L/gnbItHb7ZckqQAAAAASUVORK5CYII=\
-	"), "[email protected]")
-	R.duckloon = {}
+	")
+
+	R.duckloon = {[1]={}, [2]={}}
 
 	-- blink.png
-	R.duckloon.blink_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.duckloon[1].blink_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAAJEAAADNCAYAAAC4lJKvAAAAGXRFWHRTb2Z0d2FyZQBBZG\
 	9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBh\
 	Y2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4On\
@@ -1141,9 +1143,9 @@ function love.nogame()
 	PgQs002cYwcQDZasRfVUfALXzw69+T9ZBvoxBGmd+9INNXf1rkvQn/0Y12V780PyBpw0XG\
 	Yw5tmFbustI2+fkPEQb9Yoa+ecx/o4DiAaLFkLa8o4aPTcie3aMdYPLBrWxTlh86T2cq9c\
 	Ups9BstgGcREg2UA0WAZQDRYBhANlsHS2vL/BRgAoPt28wv5YoIAAAAASUVORK5CYII=\
-	"), "blink.png")
+	")
 	-- [email protected]
-	R.duckloon.blink_2x_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.duckloon[2].blink_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAASIAAAGaCAYAAACrJ06uAAAgAElEQVR4nOy9ebgtx1XY+6\
 	veZ7izZku2hCQs2Vi2CDaW55HEDA/C4ITwEfIygJmS90gg+RiSEHDyMhBI+PICL/BIXh4v\
 	jEmwGY0J4IlBHmIDxpPAA5Y8SbakK+le3XvPOXv3en90VfeqVdW9e8/7nLvX9917urqqa1\
@@ -1833,9 +1835,9 @@ function love.nogame()
 	lo2IrLqXwAX5S+nhItPfGas/9/Kwn+gChHwT0qH6lNtHcqhW5VZu83wrq27UOu+x4ATfta\
 	+4VJ9+w2gPyKqUsiCysrIauWzTzMrKauSyILKyshq5LIisrKxGLgsiKyurkcuCyMrKauSy\
 	ILKyshq5LIisrKxGLgsiKyurkeu/ABHELVe8zEuIAAAAAElFTkSuQmCC\
-	"), "[email protected]")
+	")
 	-- normal.png
-	R.duckloon.normal_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.duckloon[1].normal_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAAJEAAADNCAYAAAC4lJKvAAAgAElEQVR4nO2debwlR3WYv9\
 	N3e+vMaEbLaB0JARISMouMRywCJIyNQTHEISEQb8EsxiRxTBwbnIBJMI632NgxJpFXYvDC\
 	ajAy2CARVgkQi8SmXRqN0Db7vJm33O6ukz+qqru6b/d999533zLSO7/fTHdXV1dXV33vnF\
@@ -2120,9 +2122,9 @@ function love.nogame()
 	WXrwBnm4RDUROkZQA+jf3arZWZ2aM6N4fMzq5TFddfKmesNwWO/eGVhZigmZ+7lu5HLkOa\
 	NoZaml2aP/yt9avgBpJNiDZlxbI5OtuUFcsmRJuyYtmEaFNWLP8frUcjd38kwVYAAAAASU\
 	VORK5CYII=\
-	"), "normal.png")
+	")
 	-- [email protected]
-	R.duckloon.normal_2x_png = love.filesystem.newFileData(love.data.decode("base64", "\
+	R.duckloon[2].normal_png = love.data.decode("data", "base64", "\
 	iVBORw0KGgoAAAANSUhEUgAAASIAAAGaCAYAAACrJ06uAAAgAElEQVR4nOy9ebgtx1XY+6\
 	ve+5xzZ83WiCRbtmwNBGPJFjaeADMEYoiJkwckIY/JEF5IIHwBkhAwCUkg08tLeIGQvDwS\
 	EiCMBmwMOJ4YPOERD5IH2ZIs25KQdCXdq3vvOWd3r/zRVd2rVlf37j2dvc+5e33fvaerq7\
@@ -2822,7 +2824,7 @@ function love.nogame()
 	R2a/Mzb9wmvieaJLEPLNSI/6M+8eyaY6VVuFzfOdnLpR66IngRd9177mU3/2raPdIKdKyo\
 	HIyclp5HJDMycnp5HLgcjJyWnkciBycnIauRyInJycRi4HIicnp5HLgcjJyWnkciBycnIa\
 	uRyInJycRq7/D3Tgxzs5ujSKAAAAAElFTkSuQmCC\
-	"), "[email protected]")
+	")
 
 	-- 30log.lua begins
 	local function require_30log()
@@ -3167,37 +3169,38 @@ function love.nogame()
 		love.graphics.setBackgroundColor(43/255, 165/255, 223/255)
 		love.physics.setMeter(64)
 
-		local hdpi = love.window.getDPIScale() > 1
-
-		R.chain.n = hdpi and R.chain.n_2x_png or R.chain.n_png
-		R.chain.o = hdpi and R.chain.o_2x_png or R.chain.o_png
-		R.chain.g = hdpi and R.chain.g_2x_png or R.chain.g_png
-		R.chain.a = hdpi and R.chain.a_2x_png or R.chain.a_png
-		R.chain.m = hdpi and R.chain.m_2x_png or R.chain.m_png
-		R.chain.e = hdpi and R.chain.e_2x_png or R.chain.e_png
-		R.chain.square = hdpi and R.chain.square_2x_png or R.chain.square_png
-		R.duckloon.blink = hdpi and R.duckloon.blink_2x_png or R.duckloon.blink_png
-		R.duckloon.normal = hdpi and R.duckloon.normal_2x_png or R.duckloon.normal_png
-		R.bg.cloud_1 = hdpi and R.bg.cloud_1_2x_png or R.bg.cloud_1_png
-		R.bg.cloud_2 = hdpi and R.bg.cloud_2_2x_png or R.bg.cloud_2_png
-		R.bg.cloud_3 = hdpi and R.bg.cloud_3_2x_png or R.bg.cloud_3_png
-		R.bg.cloud_4 = hdpi and R.bg.cloud_4_2x_png or R.bg.cloud_4_png
-
-		img_duckloon_normal = love.graphics.newImage(R.duckloon.normal)
-		img_duckloon_blink = love.graphics.newImage(R.duckloon.blink)
-
-		img_n = love.graphics.newImage(R.chain.n)
-		img_o = love.graphics.newImage(R.chain.o)
-		img_g = love.graphics.newImage(R.chain.g)
-		img_a = love.graphics.newImage(R.chain.a)
-		img_m = love.graphics.newImage(R.chain.m)
-		img_e = love.graphics.newImage(R.chain.e)
-		img_square = love.graphics.newImage(R.chain.square)
-
-		img_cloud_1 = love.graphics.newImage(R.bg.cloud_1)
-		img_cloud_2 = love.graphics.newImage(R.bg.cloud_2)
-		img_cloud_3 = love.graphics.newImage(R.bg.cloud_3)
-		img_cloud_4 = love.graphics.newImage(R.bg.cloud_4)
+		local dpiscale = love.window.getDPIScale() > 1 and 2 or 1
+		local settings = {dpiscale = dpiscale}
+
+		R.chain.n = R.chain[dpiscale].n_png
+		R.chain.o = R.chain[dpiscale].o_png
+		R.chain.g = R.chain[dpiscale].g_png
+		R.chain.a = R.chain[dpiscale].a_png
+		R.chain.m = R.chain[dpiscale].m_png
+		R.chain.e = R.chain[dpiscale].e_png
+		R.chain.square = R.chain[dpiscale].square_png
+		R.duckloon.blink = R.duckloon[dpiscale].blink_png
+		R.duckloon.normal = R.duckloon[dpiscale].normal_png
+		R.bg.cloud_1 = R.bg[dpiscale].cloud_1_png
+		R.bg.cloud_2 = R.bg[dpiscale].cloud_2_png
+		R.bg.cloud_3 = R.bg[dpiscale].cloud_3_png
+		R.bg.cloud_4 = R.bg[dpiscale].cloud_4_png
+
+		img_duckloon_normal = love.graphics.newImage(R.duckloon.normal, settings)
+		img_duckloon_blink = love.graphics.newImage(R.duckloon.blink, settings)
+
+		img_n = love.graphics.newImage(R.chain.n, settings)
+		img_o = love.graphics.newImage(R.chain.o, settings)
+		img_g = love.graphics.newImage(R.chain.g, settings)
+		img_a = love.graphics.newImage(R.chain.a, settings)
+		img_m = love.graphics.newImage(R.chain.m, settings)
+		img_e = love.graphics.newImage(R.chain.e, settings)
+		img_square = love.graphics.newImage(R.chain.square, settings)
+
+		img_cloud_1 = love.graphics.newImage(R.bg.cloud_1, settings)
+		img_cloud_2 = love.graphics.newImage(R.bg.cloud_2, settings)
+		img_cloud_3 = love.graphics.newImage(R.bg.cloud_3, settings)
+		img_cloud_4 = love.graphics.newImage(R.bg.cloud_4, settings)
 
 		cloud_images = {
 			img_cloud_1,

+ 199 - 237
src/scripts/nogame.lua.h

@@ -86,13 +86,13 @@ const unsigned char nogame_lua[] =
 	0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x6e, 0x6f, 0x67, 0x61, 
 	0x6d, 0x65, 0x28, 0x29, 0x0a,
 	0x09, 0x52, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a,
-	0x09, 0x52, 0x2e, 0x62, 0x67, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a,
+	0x09, 0x52, 0x2e, 0x62, 0x67, 0x20, 0x3d, 0x20, 0x7b, 0x5b, 0x31, 0x5d, 0x3d, 0x7b, 0x7d, 0x2c, 0x20, 0x5b, 
+	0x32, 0x5d, 0x3d, 0x7b, 0x7d, 0x7d, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x31, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x31, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
-	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 
-	0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 
-	0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 
-	0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x62, 0x67, 0x5b, 0x31, 0x5d, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x31, 0x5f, 0x70, 
+	0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 
+	0x6f, 0x64, 0x65, 0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 
+	0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x4c, 0x45, 0x41, 0x41, 0x41, 0x42, 0x55, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x44, 0x4e, 0x6f, 0x4e, 0x62, 0x30, 0x41, 0x41, 0x41, 0x47, 0x71, 0x45, 0x6c, 0x45, 0x51, 
@@ -228,14 +228,12 @@ const unsigned char nogame_lua[] =
 	0x09, 0x7a, 0x47, 0x58, 0x6f, 0x51, 0x34, 0x6a, 0x4c, 0x33, 0x2f, 0x41, 0x34, 0x68, 0x74, 0x57, 0x49, 0x2f, 
 	0x72, 0x78, 0x59, 0x4c, 0x61, 0x41, 0x41, 0x41, 0x41, 0x41, 0x45, 0x6c, 0x46, 0x54, 0x6b, 0x53, 0x75, 0x51, 
 	0x6d, 0x43, 0x43, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x31, 0x2e, 0x70, 0x6e, 0x67, 0x22, 
-	0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x31, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x31, 0x5f, 0x32, 0x78, 0x5f, 0x70, 
-	0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 
-	0x65, 0x6d, 0x2e, 0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 0x76, 
-	0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 0x73, 
-	0x65, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x62, 0x67, 0x5b, 0x32, 0x5d, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x31, 0x5f, 0x70, 
+	0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 
+	0x6f, 0x64, 0x65, 0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 
+	0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x57, 0x49, 0x41, 0x41, 0x41, 0x43, 0x6f, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x44, 0x61, 0x57, 0x4f, 0x51, 0x63, 0x41, 0x41, 0x41, 0x4f, 0x45, 0x45, 0x6c, 0x45, 0x51, 
@@ -515,14 +513,12 @@ const unsigned char nogame_lua[] =
 	0x09, 0x61, 0x78, 0x4a, 0x43, 0x56, 0x6d, 0x45, 0x45, 0x74, 0x53, 0x59, 0x67, 0x61, 0x78, 0x4a, 0x43, 0x58, 
 	0x32, 0x2f, 0x35, 0x69, 0x78, 0x71, 0x6f, 0x64, 0x70, 0x4d, 0x5a, 0x6d, 0x2b, 0x41, 0x41, 0x41, 0x41, 0x41, 
 	0x45, 0x6c, 0x46, 0x54, 0x6b, 0x53, 0x75, 0x51, 0x6d, 0x43, 0x43, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x31, 0x40, 0x32, 0x78, 0x2e, 0x70, 
-	0x6e, 0x67, 0x22, 0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x32, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x32, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
-	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 
-	0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 
-	0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 
-	0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x62, 0x67, 0x5b, 0x31, 0x5d, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x32, 0x5f, 0x70, 
+	0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 
+	0x6f, 0x64, 0x65, 0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 
+	0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x4c, 0x45, 0x41, 0x41, 0x41, 0x42, 0x55, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x44, 0x4e, 0x6f, 0x4e, 0x62, 0x30, 0x41, 0x41, 0x41, 0x46, 0x30, 0x6b, 0x6c, 0x45, 0x51, 
@@ -641,14 +637,12 @@ const unsigned char nogame_lua[] =
 	0x78, 0x52, 0x31, 0x79, 0x66, 0x4d, 0x51, 0x75, 0x2b, 0x52, 0x35, 0x69, 0x46, 0x33, 0x79, 0x50, 0x4d, 0x5c, 0x0a,
 	0x09, 0x51, 0x75, 0x65, 0x58, 0x38, 0x42, 0x7a, 0x6f, 0x6b, 0x68, 0x69, 0x4d, 0x48, 0x75, 0x52, 0x6b, 0x30, 
 	0x41, 0x41, 0x41, 0x41, 0x41, 0x53, 0x55, 0x56, 0x4f, 0x52, 0x4b, 0x35, 0x43, 0x59, 0x49, 0x49, 0x3d, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x32, 0x2e, 0x70, 0x6e, 0x67, 0x22, 
-	0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x32, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x32, 0x5f, 0x32, 0x78, 0x5f, 0x70, 
-	0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 
-	0x65, 0x6d, 0x2e, 0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 0x76, 
-	0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 0x73, 
-	0x65, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x62, 0x67, 0x5b, 0x32, 0x5d, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x32, 0x5f, 0x70, 
+	0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 
+	0x6f, 0x64, 0x65, 0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 
+	0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x57, 0x49, 0x41, 0x41, 0x41, 0x43, 0x6f, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x44, 0x61, 0x57, 0x4f, 0x51, 0x63, 0x41, 0x41, 0x41, 0x4d, 0x58, 0x55, 0x6c, 0x45, 0x51, 
@@ -895,14 +889,12 @@ const unsigned char nogame_lua[] =
 	0x41, 0x57, 0x7a, 0x69, 0x43, 0x55, 0x70, 0x6d, 0x45, 0x55, 0x73, 0x53, 0x63, 0x48, 0x2b, 0x44, 0x30, 0x5c, 0x0a,
 	0x09, 0x45, 0x6d, 0x52, 0x32, 0x38, 0x6d, 0x36, 0x64, 0x71, 0x77, 0x41, 0x41, 0x41, 0x41, 0x41, 0x45, 0x6c, 
 	0x46, 0x54, 0x6b, 0x53, 0x75, 0x51, 0x6d, 0x43, 0x43, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x32, 0x40, 0x32, 0x78, 0x2e, 0x70, 
-	0x6e, 0x67, 0x22, 0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x33, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x33, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
-	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 
-	0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 
-	0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 
-	0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x62, 0x67, 0x5b, 0x31, 0x5d, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x33, 0x5f, 0x70, 
+	0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 
+	0x6f, 0x64, 0x65, 0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 
+	0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x4c, 0x45, 0x41, 0x41, 0x41, 0x42, 0x55, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x44, 0x4e, 0x6f, 0x4e, 0x62, 0x30, 0x41, 0x41, 0x41, 0x46, 0x68, 0x6b, 0x6c, 0x45, 0x51, 
@@ -1016,14 +1008,12 @@ const unsigned char nogame_lua[] =
 	0x46, 0x53, 0x76, 0x6c, 0x62, 0x69, 0x70, 0x33, 0x74, 0x39, 0x72, 0x4f, 0x79, 0x36, 0x61, 0x55, 0x47, 0x36, 
 	0x69, 0x41, 0x67, 0x41, 0x41, 0x41, 0x41, 0x42, 0x4a, 0x52, 0x55, 0x35, 0x45, 0x72, 0x6b, 0x4a, 0x67, 0x5c, 0x0a,
 	0x09, 0x67, 0x67, 0x3d, 0x3d, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x33, 0x2e, 0x70, 0x6e, 0x67, 0x22, 
-	0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x33, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x33, 0x5f, 0x32, 0x78, 0x5f, 0x70, 
-	0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 
-	0x65, 0x6d, 0x2e, 0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 0x76, 
-	0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 0x73, 
-	0x65, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x62, 0x67, 0x5b, 0x32, 0x5d, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x33, 0x5f, 0x70, 
+	0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 
+	0x6f, 0x64, 0x65, 0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 
+	0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x57, 0x49, 0x41, 0x41, 0x41, 0x43, 0x6f, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x44, 0x61, 0x57, 0x4f, 0x51, 0x63, 0x41, 0x41, 0x41, 0x4c, 0x68, 0x6b, 0x6c, 0x45, 0x51, 
@@ -1254,14 +1244,12 @@ const unsigned char nogame_lua[] =
 	0x6f, 0x4a, 0x5a, 0x78, 0x4a, 0x49, 0x55, 0x37, 0x50, 0x38, 0x33, 0x70, 0x45, 0x43, 0x50, 0x6e, 0x4d, 0x5c, 0x0a,
 	0x09, 0x78, 0x55, 0x43, 0x67, 0x41, 0x41, 0x41, 0x41, 0x42, 0x4a, 0x52, 0x55, 0x35, 0x45, 0x72, 0x6b, 0x4a, 
 	0x67, 0x67, 0x67, 0x3d, 0x3d, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x33, 0x40, 0x32, 0x78, 0x2e, 0x70, 
-	0x6e, 0x67, 0x22, 0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x34, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x34, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
-	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 
-	0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 
-	0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 
-	0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x62, 0x67, 0x5b, 0x31, 0x5d, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x34, 0x5f, 0x70, 
+	0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 
+	0x6f, 0x64, 0x65, 0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 
+	0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x4c, 0x45, 0x41, 0x41, 0x41, 0x42, 0x55, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x44, 0x4e, 0x6f, 0x4e, 0x62, 0x30, 0x41, 0x41, 0x41, 0x46, 0x7a, 0x30, 0x6c, 0x45, 0x51, 
@@ -1380,14 +1368,12 @@ const unsigned char nogame_lua[] =
 	0x30, 0x57, 0x49, 0x51, 0x2b, 0x39, 0x46, 0x69, 0x45, 0x50, 0x76, 0x52, 0x59, 0x68, 0x44, 0x37, 0x2f, 0x5c, 0x0a,
 	0x09, 0x30, 0x66, 0x48, 0x76, 0x49, 0x79, 0x52, 0x75, 0x36, 0x4f, 0x4a, 0x54, 0x6b, 0x41, 0x41, 0x41, 0x41, 
 	0x41, 0x53, 0x55, 0x56, 0x4f, 0x52, 0x4b, 0x35, 0x43, 0x59, 0x49, 0x49, 0x3d, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x34, 0x2e, 0x70, 0x6e, 0x67, 0x22, 
-	0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x34, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x34, 0x5f, 0x32, 0x78, 0x5f, 0x70, 
-	0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 
-	0x65, 0x6d, 0x2e, 0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 0x76, 
-	0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 0x73, 
-	0x65, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x62, 0x67, 0x5b, 0x32, 0x5d, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x34, 0x5f, 0x70, 
+	0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 
+	0x6f, 0x64, 0x65, 0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 
+	0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x57, 0x49, 0x41, 0x41, 0x41, 0x43, 0x6f, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x44, 0x61, 0x57, 0x4f, 0x51, 0x63, 0x41, 0x41, 0x41, 0x4d, 0x4f, 0x6b, 0x6c, 0x45, 0x51, 
@@ -1631,15 +1617,14 @@ const unsigned char nogame_lua[] =
 	0x09, 0x6b, 0x6f, 0x4a, 0x5a, 0x78, 0x4a, 0x49, 0x55, 0x7a, 0x43, 0x4b, 0x57, 0x70, 0x47, 0x41, 0x57, 0x73, 
 	0x53, 0x51, 0x46, 0x2b, 0x78, 0x2f, 0x52, 0x6d, 0x6b, 0x72, 0x57, 0x62, 0x48, 0x42, 0x37, 0x4c, 0x51, 0x41, 
 	0x41, 0x41, 0x41, 0x42, 0x4a, 0x52, 0x55, 0x35, 0x45, 0x72, 0x6b, 0x4a, 0x67, 0x67, 0x67, 0x3d, 0x3d, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x34, 0x40, 0x32, 0x78, 0x2e, 0x70, 
-	0x6e, 0x67, 0x22, 0x29, 0x0a,
-	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
+	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x20, 0x3d, 0x20, 0x7b, 0x5b, 0x31, 0x5d, 0x3d, 0x7b, 0x7d, 
+	0x2c, 0x20, 0x5b, 0x32, 0x5d, 0x3d, 0x7b, 0x7d, 0x7d, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x61, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x61, 0x5f, 0x70, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 
-	0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x6e, 0x65, 0x77, 
-	0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 
-	0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 0x20, 
-	0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5b, 0x31, 0x5d, 0x2e, 0x61, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
+	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 
+	0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 
+	0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x42, 0x77, 0x41, 0x41, 0x41, 0x41, 0x63, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x42, 0x79, 0x44, 0x64, 0x2b, 0x55, 0x41, 0x41, 0x41, 0x44, 0x6a, 0x30, 0x6c, 0x45, 0x51, 
@@ -1714,13 +1699,12 @@ const unsigned char nogame_lua[] =
 	0x4d, 0x63, 0x2b, 0x69, 0x71, 0x71, 0x6c, 0x62, 0x67, 0x58, 0x64, 0x4e, 0x39, 0x2b, 0x79, 0x36, 0x39, 0x5c, 0x0a,
 	0x09, 0x61, 0x2f, 0x6f, 0x48, 0x65, 0x48, 0x38, 0x37, 0x48, 0x46, 0x57, 0x42, 0x45, 0x52, 0x51, 0x41, 0x41, 
 	0x41, 0x41, 0x41, 0x53, 0x55, 0x56, 0x4f, 0x52, 0x4b, 0x35, 0x43, 0x59, 0x49, 0x49, 0x3d, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x61, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x61, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x61, 0x5f, 0x32, 0x78, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
-	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 
-	0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 
-	0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 
-	0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5b, 0x32, 0x5d, 0x2e, 0x61, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
+	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 
+	0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 
+	0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x44, 0x67, 0x41, 0x41, 0x41, 0x41, 0x34, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x43, 0x6f, 0x68, 0x6a, 0x73, 0x65, 0x41, 0x41, 0x41, 0x48, 0x33, 0x45, 0x6c, 0x45, 0x51, 
@@ -1879,13 +1863,12 @@ const unsigned char nogame_lua[] =
 	0x4d, 0x54, 0x66, 0x4e, 0x72, 0x78, 0x46, 0x38, 0x47, 0x62, 0x48, 0x4c, 0x59, 0x49, 0x33, 0x4f, 0x2f, 0x5c, 0x0a,
 	0x09, 0x34, 0x48, 0x7a, 0x4e, 0x32, 0x2b, 0x30, 0x63, 0x57, 0x75, 0x31, 0x76, 0x45, 0x41, 0x41, 0x41, 0x41, 
 	0x41, 0x53, 0x55, 0x56, 0x4f, 0x52, 0x4b, 0x35, 0x43, 0x59, 0x49, 0x49, 0x3d, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x61, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x65, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x65, 0x5f, 0x70, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 
-	0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x6e, 0x65, 0x77, 
-	0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 
-	0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 0x20, 
-	0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5b, 0x31, 0x5d, 0x2e, 0x65, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
+	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 
+	0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 
+	0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x42, 0x77, 0x41, 0x41, 0x41, 0x41, 0x63, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x42, 0x79, 0x44, 0x64, 0x2b, 0x55, 0x41, 0x41, 0x41, 0x44, 0x72, 0x45, 0x6c, 0x45, 0x51, 
@@ -1963,13 +1946,12 @@ const unsigned char nogame_lua[] =
 	0x39, 0x6c, 0x39, 0x34, 0x77, 0x2f, 0x41, 0x4d, 0x49, 0x41, 0x33, 0x6f, 0x4c, 0x52, 0x43, 0x47, 0x73, 0x51, 
 	0x77, 0x41, 0x41, 0x41, 0x41, 0x42, 0x4a, 0x52, 0x55, 0x35, 0x45, 0x72, 0x6b, 0x4a, 0x67, 0x67, 0x67, 0x5c, 0x0a,
 	0x09, 0x3d, 0x3d, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x65, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x65, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x65, 0x5f, 0x32, 0x78, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
-	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 
-	0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 
-	0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 
-	0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5b, 0x32, 0x5d, 0x2e, 0x65, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
+	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 
+	0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 
+	0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x44, 0x67, 0x41, 0x41, 0x41, 0x41, 0x34, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x43, 0x6f, 0x68, 0x6a, 0x73, 0x65, 0x41, 0x41, 0x41, 0x48, 0x32, 0x6b, 0x6c, 0x45, 0x51, 
@@ -2128,13 +2110,12 @@ const unsigned char nogame_lua[] =
 	0x32, 0x31, 0x34, 0x6d, 0x2b, 0x43, 0x74, 0x6a, 0x74, 0x73, 0x45, 0x62, 0x33, 0x58, 0x38, 0x46, 0x35, 0x5c, 0x0a,
 	0x09, 0x4c, 0x74, 0x37, 0x47, 0x4b, 0x69, 0x35, 0x67, 0x49, 0x45, 0x41, 0x41, 0x41, 0x41, 0x41, 0x45, 0x6c, 
 	0x46, 0x54, 0x6b, 0x53, 0x75, 0x51, 0x6d, 0x43, 0x43, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x65, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x67, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x67, 0x5f, 0x70, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 
-	0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x6e, 0x65, 0x77, 
-	0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 
-	0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 0x20, 
-	0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5b, 0x31, 0x5d, 0x2e, 0x67, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
+	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 
+	0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 
+	0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x42, 0x77, 0x41, 0x41, 0x41, 0x41, 0x63, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x42, 0x79, 0x44, 0x64, 0x2b, 0x55, 0x41, 0x41, 0x41, 0x44, 0x76, 0x45, 0x6c, 0x45, 0x51, 
@@ -2213,13 +2194,12 @@ const unsigned char nogame_lua[] =
 	0x74, 0x76, 0x2b, 0x4a, 0x76, 0x35, 0x2f, 0x67, 0x58, 0x38, 0x44, 0x6a, 0x66, 0x39, 0x36, 0x54, 0x37, 0x5c, 0x0a,
 	0x09, 0x4e, 0x4c, 0x58, 0x5a, 0x51, 0x41, 0x41, 0x41, 0x41, 0x41, 0x53, 0x55, 0x56, 0x4f, 0x52, 0x4b, 0x35, 
 	0x43, 0x59, 0x49, 0x49, 0x3d, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x67, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x67, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x67, 0x5f, 0x32, 0x78, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
-	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 
-	0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 
-	0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 
-	0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5b, 0x32, 0x5d, 0x2e, 0x67, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
+	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 
+	0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 
+	0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x44, 0x67, 0x41, 0x41, 0x41, 0x41, 0x34, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x43, 0x6f, 0x68, 0x6a, 0x73, 0x65, 0x41, 0x41, 0x41, 0x49, 0x4a, 0x30, 0x6c, 0x45, 0x51, 
@@ -2384,13 +2364,12 @@ const unsigned char nogame_lua[] =
 	0x73, 0x64, 0x56, 0x67, 0x56, 0x63, 0x36, 0x72, 0x67, 0x71, 0x38, 0x30, 0x76, 0x46, 0x66, 0x62, 0x44, 0x6e, 
 	0x6a, 0x6b, 0x37, 0x55, 0x34, 0x64, 0x33, 0x45, 0x41, 0x41, 0x41, 0x41, 0x41, 0x53, 0x55, 0x56, 0x4f, 0x52, 
 	0x4b, 0x35, 0x43, 0x59, 0x49, 0x49, 0x3d, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x67, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x6d, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6d, 0x5f, 0x70, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 
-	0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x6e, 0x65, 0x77, 
-	0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 
-	0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 0x20, 
-	0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5b, 0x31, 0x5d, 0x2e, 0x6d, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
+	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 
+	0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 
+	0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x42, 0x77, 0x41, 0x41, 0x41, 0x41, 0x63, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x42, 0x79, 0x44, 0x64, 0x2b, 0x55, 0x41, 0x41, 0x41, 0x44, 0x6b, 0x55, 0x6c, 0x45, 0x51, 
@@ -2466,13 +2445,12 @@ const unsigned char nogame_lua[] =
 	0x09, 0x76, 0x2f, 0x53, 0x47, 0x36, 0x52, 0x2f, 0x32, 0x37, 0x7a, 0x6d, 0x75, 0x4c, 0x33, 0x45, 0x35, 0x30, 
 	0x51, 0x41, 0x41, 0x41, 0x41, 0x42, 0x4a, 0x52, 0x55, 0x35, 0x45, 0x72, 0x6b, 0x4a, 0x67, 0x67, 0x67, 0x3d, 
 	0x3d, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x6d, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x6d, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6d, 0x5f, 0x32, 0x78, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
-	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 
-	0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 
-	0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 
-	0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5b, 0x32, 0x5d, 0x2e, 0x6d, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
+	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 
+	0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 
+	0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x44, 0x67, 0x41, 0x41, 0x41, 0x41, 0x34, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x43, 0x6f, 0x68, 0x6a, 0x73, 0x65, 0x41, 0x41, 0x41, 0x48, 0x2f, 0x6b, 0x6c, 0x45, 0x51, 
@@ -2634,13 +2612,12 @@ const unsigned char nogame_lua[] =
 	0x6f, 0x47, 0x33, 0x4f, 0x2b, 0x34, 0x59, 0x65, 0x4c, 0x76, 0x6a, 0x76, 0x31, 0x52, 0x75, 0x30, 0x4a, 0x66, 
 	0x6c, 0x45, 0x5a, 0x54, 0x74, 0x41, 0x41, 0x41, 0x41, 0x41, 0x45, 0x6c, 0x46, 0x54, 0x6b, 0x53, 0x75, 0x5c, 0x0a,
 	0x09, 0x51, 0x6d, 0x43, 0x43, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x6d, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x6e, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6e, 0x5f, 0x70, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 
-	0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x6e, 0x65, 0x77, 
-	0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 
-	0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 0x20, 
-	0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5b, 0x31, 0x5d, 0x2e, 0x6e, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
+	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 
+	0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 
+	0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x42, 0x77, 0x41, 0x41, 0x41, 0x41, 0x63, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x42, 0x79, 0x44, 0x64, 0x2b, 0x55, 0x41, 0x41, 0x41, 0x44, 0x62, 0x45, 0x6c, 0x45, 0x51, 
@@ -2713,13 +2690,12 @@ const unsigned char nogame_lua[] =
 	0x4e, 0x65, 0x30, 0x7a, 0x38, 0x2f, 0x77, 0x4c, 0x2f, 0x41, 0x57, 0x6b, 0x4f, 0x52, 0x46, 0x55, 0x4e, 0x62, 
 	0x47, 0x57, 0x2b, 0x41, 0x41, 0x41, 0x41, 0x41, 0x45, 0x6c, 0x46, 0x54, 0x6b, 0x53, 0x75, 0x51, 0x6d, 0x43, 
 	0x43, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x6e, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x6e, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6e, 0x5f, 0x32, 0x78, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
-	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 
-	0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 
-	0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 
-	0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5b, 0x32, 0x5d, 0x2e, 0x6e, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
+	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 
+	0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 
+	0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x44, 0x67, 0x41, 0x41, 0x41, 0x41, 0x34, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x43, 0x6f, 0x68, 0x6a, 0x73, 0x65, 0x41, 0x41, 0x41, 0x48, 0x61, 0x45, 0x6c, 0x45, 0x51, 
@@ -2869,13 +2845,12 @@ const unsigned char nogame_lua[] =
 	0x2f, 0x71, 0x7a, 0x5a, 0x4e, 0x63, 0x4b, 0x70, 0x6a, 0x6d, 0x75, 0x42, 0x55, 0x78, 0x7a, 0x54, 0x42, 0x71, 
 	0x59, 0x37, 0x2f, 0x41, 0x6d, 0x44, 0x64, 0x67, 0x6f, 0x4a, 0x2b, 0x68, 0x32, 0x6d, 0x6a, 0x41, 0x41, 0x5c, 0x0a,
 	0x09, 0x41, 0x41, 0x41, 0x45, 0x6c, 0x46, 0x54, 0x6b, 0x53, 0x75, 0x51, 0x6d, 0x43, 0x43, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x6e, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x6f, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6f, 0x5f, 0x70, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 
-	0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x6e, 0x65, 0x77, 
-	0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 
-	0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 0x20, 
-	0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5b, 0x31, 0x5d, 0x2e, 0x6f, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
+	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 
+	0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 
+	0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x42, 0x77, 0x41, 0x41, 0x41, 0x41, 0x63, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x42, 0x79, 0x44, 0x64, 0x2b, 0x55, 0x41, 0x41, 0x41, 0x41, 0x47, 0x58, 0x52, 0x46, 0x57, 
@@ -3018,13 +2993,12 @@ const unsigned char nogame_lua[] =
 	0x42, 0x78, 0x74, 0x39, 0x39, 0x6d, 0x63, 0x78, 0x39, 0x4c, 0x44, 0x2f, 0x77, 0x2f, 0x68, 0x68, 0x4f, 0x5c, 0x0a,
 	0x09, 0x32, 0x62, 0x41, 0x41, 0x4d, 0x41, 0x47, 0x63, 0x61, 0x6b, 0x42, 0x5a, 0x72, 0x72, 0x4e, 0x75, 0x73, 
 	0x41, 0x41, 0x41, 0x41, 0x41, 0x53, 0x55, 0x56, 0x4f, 0x52, 0x4b, 0x35, 0x43, 0x59, 0x49, 0x49, 0x3d, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x6f, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x6f, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6f, 0x5f, 0x32, 0x78, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
-	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 
-	0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 
-	0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 
-	0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5b, 0x32, 0x5d, 0x2e, 0x6f, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
+	0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 
+	0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 
+	0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x44, 0x67, 0x41, 0x41, 0x41, 0x41, 0x34, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x43, 0x6f, 0x68, 0x6a, 0x73, 0x65, 0x41, 0x41, 0x41, 0x48, 0x39, 0x30, 0x6c, 0x45, 0x51, 
@@ -3185,13 +3159,12 @@ const unsigned char nogame_lua[] =
 	0x58, 0x2b, 0x4e, 0x54, 0x66, 0x4e, 0x72, 0x77, 0x75, 0x38, 0x46, 0x72, 0x48, 0x64, 0x59, 0x48, 0x58, 0x4f, 
 	0x76, 0x34, 0x48, 0x58, 0x44, 0x47, 0x5a, 0x33, 0x2f, 0x44, 0x69, 0x6c, 0x39, 0x41, 0x41, 0x41, 0x41, 0x41, 
 	0x41, 0x53, 0x55, 0x56, 0x4f, 0x52, 0x4b, 0x35, 0x43, 0x59, 0x49, 0x49, 0x3d, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x6f, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x5f, 0x70, 0x6e, 
-	0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 
-	0x6d, 0x2e, 0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 0x76, 0x65, 
-	0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 0x73, 0x65, 
-	0x36, 0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5b, 0x31, 0x5d, 0x2e, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 
+	0x5f, 0x70, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 
+	0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 
+	0x65, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x42, 0x77, 0x41, 0x41, 0x41, 0x41, 0x63, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x42, 0x79, 0x44, 0x64, 0x2b, 0x55, 0x41, 0x41, 0x41, 0x43, 0x48, 0x6b, 0x6c, 0x45, 0x51, 
@@ -3238,13 +3211,12 @@ const unsigned char nogame_lua[] =
 	0x61, 0x47, 0x42, 0x2f, 0x37, 0x70, 0x32, 0x2f, 0x6f, 0x2b, 0x2f, 0x43, 0x2f, 0x7a, 0x2f, 0x67, 0x64, 0x5c, 0x0a,
 	0x09, 0x38, 0x41, 0x63, 0x54, 0x70, 0x41, 0x66, 0x2b, 0x39, 0x42, 0x47, 0x50, 0x51, 0x41, 0x41, 0x41, 0x41, 
 	0x41, 0x53, 0x55, 0x56, 0x4f, 0x52, 0x4b, 0x35, 0x43, 0x59, 0x49, 0x49, 0x3d, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x5f, 0x32, 0x78, 
-	0x5f, 0x70, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 
-	0x73, 0x74, 0x65, 0x6d, 0x2e, 0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 
-	0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 
-	0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5b, 0x32, 0x5d, 0x2e, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 
+	0x5f, 0x70, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 
+	0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x61, 0x73, 
+	0x65, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x44, 0x67, 0x41, 0x41, 0x41, 0x41, 0x34, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x43, 0x6f, 0x68, 0x6a, 0x73, 0x65, 0x41, 0x41, 0x41, 0x44, 0x70, 0x45, 0x6c, 0x45, 0x51, 
@@ -3321,15 +3293,14 @@ const unsigned char nogame_lua[] =
 	0x35, 0x6c, 0x67, 0x32, 0x73, 0x6b, 0x45, 0x30, 0x38, 0x34, 0x31, 0x4c, 0x2f, 0x67, 0x6e, 0x62, 0x49, 0x74, 
 	0x48, 0x62, 0x37, 0x5a, 0x63, 0x6b, 0x71, 0x51, 0x41, 0x41, 0x41, 0x41, 0x41, 0x53, 0x55, 0x56, 0x4f, 0x52, 
 	0x4b, 0x35, 0x43, 0x59, 0x49, 0x49, 0x3d, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 
-	0x67, 0x22, 0x29, 0x0a,
-	0x09, 0x52, 0x2e, 0x64, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
+	0x09, 0x52, 0x2e, 0x64, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x7b, 0x5b, 0x31, 0x5d, 
+	0x3d, 0x7b, 0x7d, 0x2c, 0x20, 0x5b, 0x32, 0x5d, 0x3d, 0x7b, 0x7d, 0x7d, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x62, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x64, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 
-	0x70, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 
-	0x74, 0x65, 0x6d, 0x2e, 0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 0x6f, 
-	0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 0x61, 
-	0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x64, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 0x6f, 0x6e, 0x5b, 0x31, 0x5d, 0x2e, 0x62, 0x6c, 0x69, 
+	0x6e, 0x6b, 0x5f, 0x70, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 
+	0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 
+	0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x4a, 0x45, 0x41, 0x41, 0x41, 0x44, 0x4e, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x43, 0x34, 0x6c, 0x4a, 0x4b, 0x76, 0x41, 0x41, 0x41, 0x41, 0x47, 0x58, 0x52, 0x46, 0x57, 
@@ -4390,13 +4361,12 @@ const unsigned char nogame_lua[] =
 	0x57, 0x41, 0x5a, 0x51, 0x44, 0x52, 0x59, 0x42, 0x68, 0x41, 0x4e, 0x6c, 0x73, 0x48, 0x53, 0x32, 0x76, 0x4c, 
 	0x2f, 0x42, 0x52, 0x67, 0x41, 0x6f, 0x50, 0x74, 0x32, 0x38, 0x77, 0x76, 0x35, 0x59, 0x6f, 0x49, 0x41, 0x41, 
 	0x41, 0x41, 0x41, 0x53, 0x55, 0x56, 0x4f, 0x52, 0x4b, 0x35, 0x43, 0x59, 0x49, 0x49, 0x3d, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x62, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x62, 0x6c, 0x69, 0x6e, 0x6b, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x64, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 
-	0x32, 0x78, 0x5f, 0x70, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 
-	0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 
-	0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 
-	0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x64, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 0x6f, 0x6e, 0x5b, 0x32, 0x5d, 0x2e, 0x62, 0x6c, 0x69, 
+	0x6e, 0x6b, 0x5f, 0x70, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 
+	0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 
+	0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x53, 0x49, 0x41, 0x41, 0x41, 0x47, 0x61, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x43, 0x72, 0x4a, 0x30, 0x36, 0x75, 0x41, 0x41, 0x41, 0x67, 0x41, 0x45, 0x6c, 0x45, 0x51, 
@@ -7153,14 +7123,12 @@ const unsigned char nogame_lua[] =
 	0x67, 0x73, 0x69, 0x4b, 0x79, 0x75, 0x72, 0x6b, 0x65, 0x75, 0x2f, 0x41, 0x42, 0x48, 0x45, 0x4c, 0x56, 0x65, 
 	0x38, 0x7a, 0x45, 0x75, 0x49, 0x41, 0x41, 0x41, 0x41, 0x41, 0x45, 0x6c, 0x46, 0x54, 0x6b, 0x53, 0x75, 0x51, 
 	0x6d, 0x43, 0x43, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x62, 0x6c, 0x69, 0x6e, 0x6b, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 0x67, 
-	0x22, 0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x64, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 0x6f, 0x6e, 0x2e, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 
-	0x5f, 0x70, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 
-	0x73, 0x74, 0x65, 0x6d, 0x2e, 0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x28, 0x6c, 
-	0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x62, 
-	0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x64, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 0x6f, 0x6e, 0x5b, 0x31, 0x5d, 0x2e, 0x6e, 0x6f, 0x72, 
+	0x6d, 0x61, 0x6c, 0x5f, 0x70, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 
+	0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 
+	0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x4a, 0x45, 0x41, 0x41, 0x41, 0x44, 0x4e, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x43, 0x34, 0x6c, 0x4a, 0x4b, 0x76, 0x41, 0x41, 0x41, 0x67, 0x41, 0x45, 0x6c, 0x45, 0x51, 
@@ -8294,13 +8262,12 @@ const unsigned char nogame_lua[] =
 	0x6d, 0x52, 0x4a, 0x75, 0x79, 0x59, 0x74, 0x6d, 0x45, 0x61, 0x46, 0x4e, 0x57, 0x4c, 0x50, 0x38, 0x66, 0x72, 
 	0x55, 0x63, 0x6a, 0x64, 0x33, 0x38, 0x6b, 0x77, 0x56, 0x59, 0x41, 0x41, 0x41, 0x41, 0x41, 0x53, 0x55, 0x5c, 0x0a,
 	0x09, 0x56, 0x4f, 0x52, 0x4b, 0x35, 0x43, 0x59, 0x49, 0x49, 0x3d, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x2e, 0x70, 0x6e, 0x67, 0x22, 0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x52, 0x2e, 0x64, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 0x6f, 0x6e, 0x2e, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 
-	0x5f, 0x32, 0x78, 0x5f, 0x70, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 
-	0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x6e, 0x65, 0x77, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x61, 0x74, 
-	0x61, 0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 
-	0x28, 0x22, 0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
+	0x09, 0x52, 0x2e, 0x64, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 0x6f, 0x6e, 0x5b, 0x32, 0x5d, 0x2e, 0x6e, 0x6f, 0x72, 
+	0x6d, 0x61, 0x6c, 0x5f, 0x70, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x64, 0x61, 0x74, 
+	0x61, 0x2e, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x28, 0x22, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2c, 0x20, 0x22, 
+	0x62, 0x61, 0x73, 0x65, 0x36, 0x34, 0x22, 0x2c, 0x20, 0x22, 0x5c, 0x0a,
 	0x09, 0x69, 0x56, 0x42, 0x4f, 0x52, 0x77, 0x30, 0x4b, 0x47, 0x67, 0x6f, 0x41, 0x41, 0x41, 0x41, 0x4e, 0x53, 
 	0x55, 0x68, 0x45, 0x55, 0x67, 0x41, 0x41, 0x41, 0x53, 0x49, 0x41, 0x41, 0x41, 0x47, 0x61, 0x43, 0x41, 0x59, 
 	0x41, 0x41, 0x41, 0x43, 0x72, 0x4a, 0x30, 0x36, 0x75, 0x41, 0x41, 0x41, 0x67, 0x41, 0x45, 0x6c, 0x45, 0x51, 
@@ -11096,8 +11063,7 @@ const unsigned char nogame_lua[] =
 	0x09, 0x75, 0x52, 0x79, 0x49, 0x6e, 0x4a, 0x79, 0x63, 0x52, 0x71, 0x37, 0x2f, 0x44, 0x33, 0x54, 0x67, 0x78, 
 	0x7a, 0x73, 0x35, 0x75, 0x6a, 0x53, 0x4b, 0x41, 0x41, 0x41, 0x41, 0x41, 0x45, 0x6c, 0x46, 0x54, 0x6b, 0x53, 
 	0x75, 0x51, 0x6d, 0x43, 0x43, 0x5c, 0x0a,
-	0x09, 0x22, 0x29, 0x2c, 0x20, 0x22, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x40, 0x32, 0x78, 0x2e, 0x70, 0x6e, 
-	0x67, 0x22, 0x29, 0x0a,
+	0x09, 0x22, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x33, 0x30, 0x6c, 0x6f, 0x67, 0x2e, 0x6c, 0x75, 0x61, 0x20, 0x62, 0x65, 0x67, 0x69, 
 	0x6e, 0x73, 0x0a,
 	0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 
@@ -11843,104 +11809,100 @@ const unsigned char nogame_lua[] =
 	0x33, 0x2f, 0x32, 0x35, 0x35, 0x29, 0x0a,
 	0x09, 0x09, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x74, 
 	0x4d, 0x65, 0x74, 0x65, 0x72, 0x28, 0x36, 0x34, 0x29, 0x0a,
-	0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x68, 0x64, 0x70, 0x69, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 
-	0x65, 0x2e, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x67, 0x65, 0x74, 0x44, 0x50, 0x49, 0x53, 0x63, 0x61, 
-	0x6c, 0x65, 0x28, 0x29, 0x20, 0x3e, 0x20, 0x31, 0x0a,
-	0x09, 0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6e, 0x20, 0x3d, 0x20, 0x68, 0x64, 0x70, 0x69, 
-	0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6e, 0x5f, 0x32, 0x78, 0x5f, 
-	0x70, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6e, 0x5f, 0x70, 
-	0x6e, 0x67, 0x0a,
-	0x09, 0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6f, 0x20, 0x3d, 0x20, 0x68, 0x64, 0x70, 0x69, 
-	0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6f, 0x5f, 0x32, 0x78, 0x5f, 
-	0x70, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6f, 0x5f, 0x70, 
-	0x6e, 0x67, 0x0a,
-	0x09, 0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x67, 0x20, 0x3d, 0x20, 0x68, 0x64, 0x70, 0x69, 
-	0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x67, 0x5f, 0x32, 0x78, 0x5f, 
-	0x70, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x67, 0x5f, 0x70, 
-	0x6e, 0x67, 0x0a,
-	0x09, 0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x61, 0x20, 0x3d, 0x20, 0x68, 0x64, 0x70, 0x69, 
-	0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x61, 0x5f, 0x32, 0x78, 0x5f, 
-	0x70, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x61, 0x5f, 0x70, 
-	0x6e, 0x67, 0x0a,
-	0x09, 0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6d, 0x20, 0x3d, 0x20, 0x68, 0x64, 0x70, 0x69, 
-	0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6d, 0x5f, 0x32, 0x78, 0x5f, 
-	0x70, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6d, 0x5f, 0x70, 
-	0x6e, 0x67, 0x0a,
-	0x09, 0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x65, 0x20, 0x3d, 0x20, 0x68, 0x64, 0x70, 0x69, 
-	0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x65, 0x5f, 0x32, 0x78, 0x5f, 
-	0x70, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x65, 0x5f, 0x70, 
-	0x6e, 0x67, 0x0a,
+	0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x64, 0x70, 0x69, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x20, 0x3d, 
+	0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x2e, 0x67, 0x65, 0x74, 0x44, 0x50, 
+	0x49, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x28, 0x29, 0x20, 0x3e, 0x20, 0x31, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x32, 
+	0x20, 0x6f, 0x72, 0x20, 0x31, 0x0a,
+	0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x3d, 
+	0x20, 0x7b, 0x64, 0x70, 0x69, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x64, 0x70, 0x69, 0x73, 0x63, 
+	0x61, 0x6c, 0x65, 0x7d, 0x0a,
+	0x09, 0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6e, 0x20, 0x3d, 0x20, 0x52, 0x2e, 0x63, 0x68, 
+	0x61, 0x69, 0x6e, 0x5b, 0x64, 0x70, 0x69, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5d, 0x2e, 0x6e, 0x5f, 0x70, 0x6e, 
+	0x67, 0x0a,
+	0x09, 0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6f, 0x20, 0x3d, 0x20, 0x52, 0x2e, 0x63, 0x68, 
+	0x61, 0x69, 0x6e, 0x5b, 0x64, 0x70, 0x69, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5d, 0x2e, 0x6f, 0x5f, 0x70, 0x6e, 
+	0x67, 0x0a,
+	0x09, 0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x67, 0x20, 0x3d, 0x20, 0x52, 0x2e, 0x63, 0x68, 
+	0x61, 0x69, 0x6e, 0x5b, 0x64, 0x70, 0x69, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5d, 0x2e, 0x67, 0x5f, 0x70, 0x6e, 
+	0x67, 0x0a,
+	0x09, 0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x61, 0x20, 0x3d, 0x20, 0x52, 0x2e, 0x63, 0x68, 
+	0x61, 0x69, 0x6e, 0x5b, 0x64, 0x70, 0x69, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5d, 0x2e, 0x61, 0x5f, 0x70, 0x6e, 
+	0x67, 0x0a,
+	0x09, 0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6d, 0x20, 0x3d, 0x20, 0x52, 0x2e, 0x63, 0x68, 
+	0x61, 0x69, 0x6e, 0x5b, 0x64, 0x70, 0x69, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5d, 0x2e, 0x6d, 0x5f, 0x70, 0x6e, 
+	0x67, 0x0a,
+	0x09, 0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x65, 0x20, 0x3d, 0x20, 0x52, 0x2e, 0x63, 0x68, 
+	0x61, 0x69, 0x6e, 0x5b, 0x64, 0x70, 0x69, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5d, 0x2e, 0x65, 0x5f, 0x70, 0x6e, 
+	0x67, 0x0a,
 	0x09, 0x09, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x20, 0x3d, 
-	0x20, 0x68, 0x64, 0x70, 0x69, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 
-	0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x5f, 0x32, 0x78, 0x5f, 0x70, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20, 0x52, 
-	0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x5f, 0x70, 0x6e, 0x67, 0x0a,
+	0x20, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5b, 0x64, 0x70, 0x69, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5d, 
+	0x2e, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x5f, 0x70, 0x6e, 0x67, 0x0a,
 	0x09, 0x09, 0x52, 0x2e, 0x64, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x69, 0x6e, 0x6b, 
-	0x20, 0x3d, 0x20, 0x68, 0x64, 0x70, 0x69, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x2e, 0x64, 0x75, 0x63, 0x6b, 
-	0x6c, 0x6f, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x32, 0x78, 0x5f, 0x70, 0x6e, 0x67, 0x20, 
-	0x6f, 0x72, 0x20, 0x52, 0x2e, 0x64, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x69, 0x6e, 
-	0x6b, 0x5f, 0x70, 0x6e, 0x67, 0x0a,
+	0x20, 0x3d, 0x20, 0x52, 0x2e, 0x64, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 0x6f, 0x6e, 0x5b, 0x64, 0x70, 0x69, 0x73, 
+	0x63, 0x61, 0x6c, 0x65, 0x5d, 0x2e, 0x62, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x70, 0x6e, 0x67, 0x0a,
 	0x09, 0x09, 0x52, 0x2e, 0x64, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 0x6f, 0x6e, 0x2e, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 
-	0x6c, 0x20, 0x3d, 0x20, 0x68, 0x64, 0x70, 0x69, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x2e, 0x64, 0x75, 0x63, 
-	0x6b, 0x6c, 0x6f, 0x6f, 0x6e, 0x2e, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x5f, 0x32, 0x78, 0x5f, 0x70, 0x6e, 
-	0x67, 0x20, 0x6f, 0x72, 0x20, 0x52, 0x2e, 0x64, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 0x6f, 0x6e, 0x2e, 0x6e, 0x6f, 
-	0x72, 0x6d, 0x61, 0x6c, 0x5f, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x09, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x68, 
-	0x64, 0x70, 0x69, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 
-	0x5f, 0x31, 0x5f, 0x32, 0x78, 0x5f, 0x70, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20, 0x52, 0x2e, 0x62, 0x67, 0x2e, 
-	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x31, 0x5f, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x09, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x68, 
-	0x64, 0x70, 0x69, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 
-	0x5f, 0x32, 0x5f, 0x32, 0x78, 0x5f, 0x70, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20, 0x52, 0x2e, 0x62, 0x67, 0x2e, 
-	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x32, 0x5f, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x09, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x68, 
-	0x64, 0x70, 0x69, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 
-	0x5f, 0x33, 0x5f, 0x32, 0x78, 0x5f, 0x70, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20, 0x52, 0x2e, 0x62, 0x67, 0x2e, 
-	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x33, 0x5f, 0x70, 0x6e, 0x67, 0x0a,
-	0x09, 0x09, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x68, 
-	0x64, 0x70, 0x69, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 
-	0x5f, 0x34, 0x5f, 0x32, 0x78, 0x5f, 0x70, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20, 0x52, 0x2e, 0x62, 0x67, 0x2e, 
-	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x34, 0x5f, 0x70, 0x6e, 0x67, 0x0a,
+	0x6c, 0x20, 0x3d, 0x20, 0x52, 0x2e, 0x64, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 0x6f, 0x6e, 0x5b, 0x64, 0x70, 0x69, 
+	0x73, 0x63, 0x61, 0x6c, 0x65, 0x5d, 0x2e, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x5f, 0x70, 0x6e, 0x67, 0x0a,
+	0x09, 0x09, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x52, 
+	0x2e, 0x62, 0x67, 0x5b, 0x64, 0x70, 0x69, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5d, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 
+	0x64, 0x5f, 0x31, 0x5f, 0x70, 0x6e, 0x67, 0x0a,
+	0x09, 0x09, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x52, 
+	0x2e, 0x62, 0x67, 0x5b, 0x64, 0x70, 0x69, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5d, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 
+	0x64, 0x5f, 0x32, 0x5f, 0x70, 0x6e, 0x67, 0x0a,
+	0x09, 0x09, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x52, 
+	0x2e, 0x62, 0x67, 0x5b, 0x64, 0x70, 0x69, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5d, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 
+	0x64, 0x5f, 0x33, 0x5f, 0x70, 0x6e, 0x67, 0x0a,
+	0x09, 0x09, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x52, 
+	0x2e, 0x62, 0x67, 0x5b, 0x64, 0x70, 0x69, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5d, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 
+	0x64, 0x5f, 0x34, 0x5f, 0x70, 0x6e, 0x67, 0x0a,
 	0x09, 0x09, 0x69, 0x6d, 0x67, 0x5f, 0x64, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x72, 
 	0x6d, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 
 	0x73, 0x2e, 0x6e, 0x65, 0x77, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x28, 0x52, 0x2e, 0x64, 0x75, 0x63, 0x6b, 0x6c, 
-	0x6f, 0x6f, 0x6e, 0x2e, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x29, 0x0a,
+	0x6f, 0x6f, 0x6e, 0x2e, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x2c, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 
+	0x67, 0x73, 0x29, 0x0a,
 	0x09, 0x09, 0x69, 0x6d, 0x67, 0x5f, 0x64, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 0x6f, 0x6e, 0x5f, 0x62, 0x6c, 0x69, 
 	0x6e, 0x6b, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 
 	0x2e, 0x6e, 0x65, 0x77, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x28, 0x52, 0x2e, 0x64, 0x75, 0x63, 0x6b, 0x6c, 0x6f, 
-	0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x69, 0x6e, 0x6b, 0x29, 0x0a,
+	0x6f, 0x6e, 0x2e, 0x62, 0x6c, 0x69, 0x6e, 0x6b, 0x2c, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 
+	0x29, 0x0a,
 	0x09, 0x09, 0x69, 0x6d, 0x67, 0x5f, 0x6e, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x67, 0x72, 0x61, 
 	0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x6e, 0x65, 0x77, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x28, 0x52, 0x2e, 0x63, 
-	0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6e, 0x29, 0x0a,
+	0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6e, 0x2c, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x29, 0x0a,
 	0x09, 0x09, 0x69, 0x6d, 0x67, 0x5f, 0x6f, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x67, 0x72, 0x61, 
 	0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x6e, 0x65, 0x77, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x28, 0x52, 0x2e, 0x63, 
-	0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6f, 0x29, 0x0a,
+	0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6f, 0x2c, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x29, 0x0a,
 	0x09, 0x09, 0x69, 0x6d, 0x67, 0x5f, 0x67, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x67, 0x72, 0x61, 
 	0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x6e, 0x65, 0x77, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x28, 0x52, 0x2e, 0x63, 
-	0x68, 0x61, 0x69, 0x6e, 0x2e, 0x67, 0x29, 0x0a,
+	0x68, 0x61, 0x69, 0x6e, 0x2e, 0x67, 0x2c, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x29, 0x0a,
 	0x09, 0x09, 0x69, 0x6d, 0x67, 0x5f, 0x61, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x67, 0x72, 0x61, 
 	0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x6e, 0x65, 0x77, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x28, 0x52, 0x2e, 0x63, 
-	0x68, 0x61, 0x69, 0x6e, 0x2e, 0x61, 0x29, 0x0a,
+	0x68, 0x61, 0x69, 0x6e, 0x2e, 0x61, 0x2c, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x29, 0x0a,
 	0x09, 0x09, 0x69, 0x6d, 0x67, 0x5f, 0x6d, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x67, 0x72, 0x61, 
 	0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x6e, 0x65, 0x77, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x28, 0x52, 0x2e, 0x63, 
-	0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6d, 0x29, 0x0a,
+	0x68, 0x61, 0x69, 0x6e, 0x2e, 0x6d, 0x2c, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x29, 0x0a,
 	0x09, 0x09, 0x69, 0x6d, 0x67, 0x5f, 0x65, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x67, 0x72, 0x61, 
 	0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x6e, 0x65, 0x77, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x28, 0x52, 0x2e, 0x63, 
-	0x68, 0x61, 0x69, 0x6e, 0x2e, 0x65, 0x29, 0x0a,
+	0x68, 0x61, 0x69, 0x6e, 0x2e, 0x65, 0x2c, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x29, 0x0a,
 	0x09, 0x09, 0x69, 0x6d, 0x67, 0x5f, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x76, 
 	0x65, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x6e, 0x65, 0x77, 0x49, 0x6d, 0x61, 0x67, 
-	0x65, 0x28, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x29, 0x0a,
+	0x65, 0x28, 0x52, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x2c, 0x20, 
+	0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x29, 0x0a,
 	0x09, 0x09, 0x69, 0x6d, 0x67, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 
 	0x76, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x6e, 0x65, 0x77, 0x49, 0x6d, 0x61, 
-	0x67, 0x65, 0x28, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x31, 0x29, 0x0a,
+	0x67, 0x65, 0x28, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x31, 0x2c, 0x20, 0x73, 
+	0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x29, 0x0a,
 	0x09, 0x09, 0x69, 0x6d, 0x67, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x32, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 
 	0x76, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x6e, 0x65, 0x77, 0x49, 0x6d, 0x61, 
-	0x67, 0x65, 0x28, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x32, 0x29, 0x0a,
+	0x67, 0x65, 0x28, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x32, 0x2c, 0x20, 0x73, 
+	0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x29, 0x0a,
 	0x09, 0x09, 0x69, 0x6d, 0x67, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x33, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 
 	0x76, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x6e, 0x65, 0x77, 0x49, 0x6d, 0x61, 
-	0x67, 0x65, 0x28, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x33, 0x29, 0x0a,
+	0x67, 0x65, 0x28, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x33, 0x2c, 0x20, 0x73, 
+	0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x29, 0x0a,
 	0x09, 0x09, 0x69, 0x6d, 0x67, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x34, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 
 	0x76, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x6e, 0x65, 0x77, 0x49, 0x6d, 0x61, 
-	0x67, 0x65, 0x28, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x34, 0x29, 0x0a,
+	0x67, 0x65, 0x28, 0x52, 0x2e, 0x62, 0x67, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x34, 0x2c, 0x20, 0x73, 
+	0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x29, 0x0a,
 	0x09, 0x09, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0x0a,
 	0x09, 0x09, 0x09, 0x69, 0x6d, 0x67, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x31, 0x2c, 0x0a,
 	0x09, 0x09, 0x09, 0x69, 0x6d, 0x67, 0x5f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x32, 0x2c, 0x0a,