History

Lua 3.0

Lua Team committed 29 years ago

Commit 9bc113c1 parent 100a7f178 files · +6569 −11586Browse files

Unified · Split

78 files
  1. COPYRIGHT +1 −1
  2. HISTORY +15 −1
  3. INSTALL +34 −7
  4. Makefile +0 −4
  5. README +16 −16
  6. clients/lib/iolib.c +101 −66
  7. clients/lib/mathlib.c +34 −47
  8. clients/lib/old/Makefile +0 −35
  9. clients/lib/old/iolib.c +0 −618
  10. clients/lib/old/lualib.h +0 −33
  11. clients/lib/old/mathlib.c +0 −230
  12. clients/lib/old/strlib.c +0 −276
  13. clients/lib/strlib.c +106 −144
  14. clients/lua/lua.c +73 −3
  15. config +5 −5
  16. doc/Makefile +0 −23
  17. doc/idx.html +241 −0
  18. doc/index.html +85 −0
  19. doc/luac.html +88 −0
  20. doc/luac.man +0 −75
  21. doc/luac.ps +0 −246
  22. doc/luac.txt +0 −66
  23. doc/manual.html +2545 −0
  24. doc/refman.ps +0 −7807
  25. include/Makefile +1 −1
  26. include/auxlib.h +30 −0
  27. include/lua.h +74 −49
  28. include/lualib.h +5 −14
  29. src/Makefile +12 −6
  30. src/auxlib.c +81 −0
  31. src/auxlib.h +30 −0
  32. src/fallback.c +286 −109
  33. src/fallback.h +50 −22
  34. src/func.c +26 −16
  35. src/func.h +3 −2
  36. src/hash.c +147 −134
  37. src/hash.h +17 −16
  38. src/inout.c +278 −170
  39. src/inout.h +8 −17
  40. src/lex.c +174 −45
  41. src/lex.h +3 −4
  42. src/lua.stx +29 −34
  43. src/luac/dump.c +11 −19
  44. src/luac/luac.c +112 −27
  45. src/luac/luac.h +6 −5
  46. src/luac/print.c +213 −20
  47. src/luac/print.h +6 −3
  48. src/luamem.c +159 −0
  49. src/luamem.h +3 −3
  50. src/mem.c +0 −58
  51. src/opcode.c +517 −369
  52. src/opcode.h +46 −25
  53. src/parser.c +344 −316
  54. src/table.c +84 −96
  55. src/table.h +6 −5
  56. src/tree.c +92 −26
  57. src/tree.h +14 −4
  58. src/undump.c +71 −74
  59. src/undump.h +11 −4
  60. src/zio.c +79 −0
  61. src/zio.h +48 −0
  62. test/README +3 −4
  63. test/array.lua +3 −3
  64. test/bisect.lua +2 −2
  65. test/dump.lua +15 −11
  66. test/examples/complex/complex.lua +0 −82
  67. test/examples/complex/mandel.lua +0 −25
  68. test/examples/www/README +10 −0
  69. test/examples/www/db.lua +46 −0
  70. test/examples/www/staff.lua +37 −0
  71. test/examples/www/template.html +29 −0
  72. test/hello.lua +1 −1
  73. test/loop.lua +0 −6
  74. test/lua +1 −0
  75. test/luac +1 −0
  76. test/sort.lua +1 −1
  77. test/split.lua +0 −18
  78. test/type.lua +0 −37
COPYRIGHT+1−1
@@ -1,4 +1,4 @@
1Copyright (c) 1994-1996 TeCGraf, PUC-Rio. Written by Waldemar Celes Filho,1Copyright (c) 1994-1997 TeCGraf, PUC-Rio. Written by Waldemar Celes Filho,
2Roberto Ierusalimschy, Luiz Henrique de Figueiredo. All rights reserved.2Roberto Ierusalimschy, Luiz Henrique de Figueiredo. All rights reserved.
3 3
4Permission is hereby granted, without written agreement and without license or4Permission is hereby granted, without written agreement and without license or
HISTORY+15−1
@@ -1,4 +1,18 @@
1Current version is 2.51This is version 3.0.
2
3* Changes since version 2.5 (no versions between 2.5 and 3.0)
4 + NEW CONCEPT: "tag methods".
5 Tag methods replace fallbacks as the meta-mechanism for extending the
6 semantics of Lua. Whereas fallbacks had a global nature, tag methods
7 work on objects having the same tag (e.g., groups of tables).
8 Existing code that uses fallbacks should work without change.
9 + new, general syntax for constructors {[exp] = exp, ... }.
10 + support for handling variable number of arguments in functions (varargs).
11 + support for conditional compilation ($if ... $else ... $end).
12 + cleaner semantics in API simplifies host code.
13 + better support for writing libraries (auxlib.h).
14 + better type checking and error messages in the standard library.
15 + luac can now also undump.
2 16
3* Changes since version 2.417* Changes since version 2.4
4 + io and string libraries are now based on pattern matching;18 + io and string libraries are now based on pattern matching;
INSTALL+34−7
@@ -1,26 +1,53 @@
1* Installation1* Installation
2 Installing Lua should be very easy:2
3 Building Lua on a Unix system should be very easy:
3 4
4 1. Edit "config" to suit your platform, if at all necessary5 1. Edit "config" to suit your platform, if at all necessary
5 2. Then, type "make"6 2. Then, type "make"
6 7
8 See below for instructions for Windows and Macintosh.
9
7* What you get10* What you get
11
8 If make succeeds, you get:12 If make succeeds, you get:
9 * a compiler and an interpreter in ./bin/lua;13 * an interpreter and a compiler in ./bin;
10 * libraries in ./lib;14 * libraries in ./lib;
11 * include files in ./include.15 * include files in ./include.
16 These are the only directories you need for development.
12 17
13 There is a reference manual in ./doc, and tests and examples in ./test.18 There is a reference manual in html in ./doc, and sample code in ./test.
14 You don't need these directories for development.19 You don't need these directories for development.
15 20
16* If you have problems (and solutions!)21* If you have problems (and solutions!)
17 If make fails, please let us know (lua@icad.puc-rio.br).22
23 If "make" fails, please let us know (lua@tecgraf.puc-rio.br).
18 If you make changes to "config", please send them to us.24 If you make changes to "config", please send them to us.
19 25
20* Shared libraries26* Shared libraries
27
21 If you are running SunOs 4.x, type the following after "make" succeeds:28 If you are running SunOs 4.x, type the following after "make" succeeds:
22 ld -o lib/liblua.so.2.5 src/*.o29 ld -o lib/liblua.so.3.0 src/*.o
23 ld -o lib/liblualib.so.2.5 clients/lib/*.o30 ld -o lib/liblualib.so.3.0 clients/lib/*.o
24 31
25 For AIX, the OpenGL clone Mesa includes a script for making shared libraries.32 For AIX, the OpenGL clone Mesa includes a script for making shared libraries.
26 For other systems, please let us know how!33 For other systems, please tell us how!
34
35* Installation on Windows or Macintosh
36
37 The instructions for building Lua on a Mac or Windows machine depend on
38 the particular compiler you are using.
39 The simplest way is to create a folder with all .c and .h files.
40 Then create projects for the basic library, the standard library,
41 the interpreter and the compiler, as follows:
42
43 basic lib: auxlib.c fallback.c func.c hash.c inout.c lex.c luamem.c
44 opcode.c parser.c table.c tree.c undump.c zio.c
45
46 standard lib: iolib.c mathlib.c strlib.c
47
48 interpreter: basic lib, standard lib, lua.c
49
50 compiler: basic lib, dump.c luac.c print.c
51
52 Of course, to use Lua as a library, you'll have to know how to create
53 libraries and use with your compiler.
Makefile+0−4
@@ -5,8 +5,4 @@ all co clean klean: · 4 unmodified lines
5 cd src; make $@5 cd src; make $@
6 cd src/luac; make $@6 cd src/luac; make $@
7 cd clients/lib; make $@7 cd clients/lib; make $@
8 cd clients/lib/old; make $@
9 cd clients/lua; make $@8 cd clients/lua; make $@
10
11old:
12 cd clients/lib/old; make $@
README+16−16
@@ -5,32 +5,32 @@ · 4 unmodified lines
5 Dozens of industrial products developed by TeCGraf use Lua.5 Dozens of industrial products developed by TeCGraf use Lua.
6 6
7* Some features of Lua7* Some features of Lua
8 + a simple, pascal-like, syntax8 + simple syntax (Pascal-like);
9 + powerful data description constructs (e.g., associative arrays)9 + powerful data description constructs (e.g., associative arrays);
10 + user-controlled type constructors10 + user-controlled type constructors;
11 + fallbacks for extending the language in unconventional ways (e.g.,11 + extensible semantics with tag methods;
12 inheritance, overloading)12 + garbage collection;
13 + garbage collection13 + Lua programs are compiled into bytecodes, which are then interpreted;
14 + Lua programs are compiled into bytecodes, which are then interpreted14 + truly portable, written in ANSI C.
15 + portable, written in ANSI C (runs in Unix, DOS, Windows, Mac, Cray, ...)
16 15
17* Availability16* Availability
18 The latest version of Lua is always available at the following locations:17 The latest version of Lua is always available at the following locations:
19 In Brazil: ftp://ftp.icad.puc-rio.br/pub/lua/lua.tar.gz18 In Brazil: ftp://ftp.icad.puc-rio.br/pub/lua/lua.tar.gz
20 In Canada: ftp://csg.uwaterloo.ca/pub/lhf/lua/lua.tar.gz19 In Canada: ftp://csg.uwaterloo.ca/pub/lhf/lua/lua.tar.gz
21 In Germany: ftp://ftp.uni-trier.de/pub/languages/lua/lua.tar.gz20 In Germany: ftp://ftp.uni-trier.de/pub/languages/lua/lua.tar.gz
22 In Greece: ftp://ftp.ntua.gr/pub/lang/lua/lua.tar.gz21 In Greece: ftp://ftp.ntua.gr/pub/lang/lua/lua.tar.gz
23 Home page: http://www.inf.puc-rio.br/~roberto/lua.html22 Home page: http://www.tecgraf.puc-rio.br/lua/
24 The current version is 2.5.23 Meta page: http://www.tecgraf.puc-rio.br/lua/meta.html
24 The current version is 3.0
25 25
26* Legal matters26* Legal matters
27 Lua is freely available for both academic and commercial purposes.27 Lua is freely available for both academic and commercial purposes.
28 Lua is not in the public domain; TeCGraf keeps its copyright.
29 See COPYRIGHT.28 See COPYRIGHT.
30 29
31* Installation30* Installation
32 See INSTALL.31 See INSTALL.
33 32
34* Contacting the authors33* Contacting the authors
35 Send your comments, bug reports and anything else to lua@icad.puc-rio.br.34 Send your comments, bug reports and anything else to lua@tecgraf.puc-rio.br.
36 Please send us email if you download Lua so that we can know how far it goes.35 Please send us email if you download Lua so that we can know how far it goes.
36 For reporting bugs, try also the mailing list: lua-l@tecgraf.puc-rio.br
clients/lib/iolib.c+101−66
@@ -1,16 +1,16 @@
1#include <stdio.h>1#include <stdio.h>
2#include <ctype.h>
3#include <string.h>2#include <string.h>
4#include <time.h>3#include <time.h>
5#include <stdlib.h>4#include <stdlib.h>
6#include <errno.h>5#include <errno.h>
7 6
8#include "lua.h"7#include "lua.h"
8#include "auxlib.h"
9#include "luadebug.h"9#include "luadebug.h"
10#include "lualib.h"10#include "lualib.h"
11 11
12 12
13FILE *lua_infile, *lua_outfile;13int lua_tagio;
14 14
15 15
16#ifdef POPEN16#ifdef POPEN
@@ -31,76 +31,95 @@ static void pushresult (int i) · 14 unmodified lines
31#ifndef NOSTRERROR31#ifndef NOSTRERROR
32 lua_pushstring(strerror(errno));32 lua_pushstring(strerror(errno));
33#else33#else
34 lua_pushstring("system unable to define the error");34 lua_pushstring("O.S. unable to define the error");
35#endif35#endif
36 }36 }
37}37}
38 38
39 39
40static void closefile (FILE *f)40
41static FILE *getfile (char *name)
42{
43 lua_Object f = lua_getglobal(name);
44 if (!lua_isuserdata(f) || lua_tag(f) != lua_tagio)
45 luaL_verror("global variable %s is not a file handle", name);
46 return lua_getuserdata(f);
47}
48
49
50static void closefile (char *name)
41{51{
42 if (f == stdin || f == stdout)52 FILE *f = getfile(name);
43 return;53 if (f == stdin || f == stdout) return;
44 if (f == lua_infile)
45 lua_infile = stdin;
46 if (f == lua_outfile)
47 lua_outfile = stdout;
48 if (pclose(f) == -1)54 if (pclose(f) == -1)
49 fclose(f);55 fclose(f);
50}56}
51 57
52 58
59static void setfile (FILE *f, char *name)
60{
61 lua_pushusertag(f, lua_tagio);
62 lua_setglobal(name);
63}
64
65
66static void setreturn (FILE *f, char *name)
67{
68 setfile(f, name);
69 lua_pushusertag(f, lua_tagio);
70}
71
53 72
54static void io_readfrom (void)73static void io_readfrom (void)
55{74{
75 FILE *current;
56 lua_Object f = lua_getparam(1);76 lua_Object f = lua_getparam(1);
57 if (f == LUA_NOOBJECT)77 if (f == LUA_NOOBJECT) {
58 closefile(lua_infile); /* restore standart input */78 closefile("_INPUT");
59 else if (lua_isuserdata(f))79 current = stdin;
60 lua_infile = lua_getuserdata(f);80 }
81 else if (lua_tag(f) == lua_tagio)
82 current = lua_getuserdata(f);
61 else {83 else {
62 char *s = lua_check_string(1, "readfrom");84 char *s = luaL_check_string(1);
63 FILE *fp = (*s == '|') ? popen(s+1, "r") : fopen(s, "r");85 current = (*s == '|') ? popen(s+1, "r") : fopen(s, "r");
64 if (fp)86 if (current == NULL) {
65 lua_infile = fp;
66 else {
67 pushresult(0);87 pushresult(0);
68 return;88 return;
69 }89 }
70 }90 }
71 lua_pushuserdata(lua_infile);91 setreturn(current, "_INPUT");
72}92}
73 93
74 94
75static void io_writeto (void)95static void io_writeto (void)
76{96{
97 FILE *current;
77 lua_Object f = lua_getparam(1);98 lua_Object f = lua_getparam(1);
78 if (f == LUA_NOOBJECT)99 if (f == LUA_NOOBJECT) {
79 closefile(lua_outfile); /* restore standart output */100 closefile("_OUTPUT");
80 else if (lua_isuserdata(f))101 current = stdout;
81 lua_outfile = lua_getuserdata(f);102 }
103 else if (lua_tag(f) == lua_tagio)
104 current = lua_getuserdata(f);
82 else {105 else {
83 char *s = lua_check_string(1, "writeto");106 char *s = luaL_check_string(1);
84 FILE *fp = (*s == '|') ? popen(s+1,"w") : fopen(s,"w");107 current = (*s == '|') ? popen(s+1,"w") : fopen(s,"w");
85 if (fp)108 if (current == NULL) {
86 lua_outfile = fp;
87 else {
88 pushresult(0);109 pushresult(0);
89 return;110 return;
90 }111 }
91 }112 }
92 lua_pushuserdata(lua_outfile);113 setreturn(current, "_OUTPUT");
93}114}
94 115
95 116
96static void io_appendto (void)117static void io_appendto (void)
97{118{
98 char *s = lua_check_string(1, "appendto");119 char *s = luaL_check_string(1);
99 FILE *fp = fopen (s, "a");120 FILE *fp = fopen (s, "a");
100 if (fp != NULL) {121 if (fp != NULL)
101 lua_outfile = fp;122 setreturn(fp, "_OUTPUT");
102 lua_pushuserdata(lua_outfile);
103 }
104 else123 else
105 pushresult(0);124 pushresult(0);
106}125}
@@ -110,23 +129,30 @@ static void io_appendto (void) · 3 unmodified lines
110 129
111static void io_read (void)130static void io_read (void)
112{131{
132 FILE *f = getfile("_INPUT");
113 char *buff;133 char *buff;
114 char *p = lua_opt_string(1, "[^\n]*{\n}", "read");134 char *p = luaL_opt_string(1, "[^\n]*{\n}");
115 int inskip = 0; /* to control {skips} */135 int inskip = 0; /* to control {skips} */
116 int c = NEED_OTHER;136 int c = NEED_OTHER;
117 luaI_addchar(0);137 luaI_emptybuff();
118 while (*p) {138 while (*p) {
119 if (*p == '{' || *p == '}') {139 if (*p == '{') {
120 inskip = (*p == '{');140 inskip++;
141 p++;
142 }
143 else if (*p == '}') {
144 if (inskip == 0)
145 lua_error("unbalanced braces in read pattern");
146 inskip--;
121 p++;147 p++;
122 }148 }
123 else {149 else {
124 char *ep = item_end(p); /* get what is next */150 char *ep = luaL_item_end(p); /* get what is next */
125 int m; /* match result */151 int m; /* match result */
126 if (c == NEED_OTHER) c = getc(lua_infile);152 if (c == NEED_OTHER) c = getc(f);
127 m = (c == EOF) ? 0 : singlematch((char)c, p);153 m = (c == EOF) ? 0 : luaL_singlematch((char)c, p);
128 if (m) {154 if (m) {
129 if (!inskip) luaI_addchar(c);155 if (inskip == 0) luaI_addchar(c);
130 c = NEED_OTHER;156 c = NEED_OTHER;
131 }157 }
132 switch (*ep) {158 switch (*ep) {
@@ -144,7 +170,7 @@ static void io_read (void) · 11 unmodified lines
144 }170 }
145 } break_while:171 } break_while:
146 if (c >= 0) /* not EOF nor NEED_OTHER? */172 if (c >= 0) /* not EOF nor NEED_OTHER? */
147 ungetc(c, lua_infile);173 ungetc(c, f);
148 buff = luaI_addchar(0);174 buff = luaI_addchar(0);
149 if (*buff != 0 || *p == 0) /* read something or did not fail? */175 if (*buff != 0 || *p == 0) /* read something or did not fail? */
150 lua_pushstring(buff);176 lua_pushstring(buff);
@@ -153,31 +179,32 @@ static void io_read (void) · 2 unmodified lines
153 179
154static void io_write (void)180static void io_write (void)
155{181{
182 FILE *f = getfile("_OUTPUT");
156 int arg = 1;183 int arg = 1;
157 int status = 1;184 int status = 1;
158 char *s;185 char *s;
159 while ((s = lua_opt_string(arg++, NULL, "write")) != NULL)186 while ((s = luaL_opt_string(arg++, NULL)) != NULL)
160 status = status && (fputs(s, lua_outfile) != EOF);187 status = status && (fputs(s, f) != EOF);
161 pushresult(status);188 pushresult(status);
162}189}
163 190
164 191
165static void io_execute (void)192static void io_execute (void)
166{193{
167 lua_pushnumber(system(lua_check_string(1, "execute")));194 lua_pushnumber(system(luaL_check_string(1)));
168}195}
169 196
170 197
171static void io_remove (void)198static void io_remove (void)
172{199{
173 pushresult(remove(lua_check_string(1, "remove")) == 0);200 pushresult(remove(luaL_check_string(1)) == 0);
174}201}
175 202
176 203
177static void io_rename (void)204static void io_rename (void)
178{205{
179 pushresult(rename(lua_check_string(1, "rename"),206 pushresult(rename(luaL_check_string(1),
180 lua_check_string(2, "rename")) == 0);207 luaL_check_string(2)) == 0);
181}208}
182 209
183 210
@@ -190,7 +217,7 @@ static void io_tmpname (void) · 6 unmodified lines
190 217
191static void io_getenv (void)218static void io_getenv (void)
192{219{
193 lua_pushstring(getenv(lua_check_string(1, "getenv"))); /* if NULL push nil */220 lua_pushstring(getenv(luaL_check_string(1))); /* if NULL push nil */
194}221}
195 222
196 223
@@ -198,7 +225,7 @@ static void io_date (void) · 1 unmodified line
198{225{
199 time_t t;226 time_t t;
200 struct tm *tm;227 struct tm *tm;
201 char *s = lua_opt_string(1, "%c", "date");228 char *s = luaL_opt_string(1, "%c");
202 char b[BUFSIZ];229 char b[BUFSIZ];
203 time(&t); tm = localtime(&t);230 time(&t); tm = localtime(&t);
204 if (strftime(b,sizeof(b),s,tm))231 if (strftime(b,sizeof(b),s,tm))
@@ -229,34 +256,36 @@ static void io_debug (void) · 24 unmodified lines
229 256
230static void lua_printstack (FILE *f)257static void lua_printstack (FILE *f)
231{258{
232 int level = 0;259 int level = 1; /* skip level 0 (it's this function) */
233 lua_Object func;260 lua_Object func;
234 fprintf(f, "Active Stack:\n");
235 while ((func = lua_stackedfunction(level++)) != LUA_NOOBJECT) {261 while ((func = lua_stackedfunction(level++)) != LUA_NOOBJECT) {
236 char *name;262 char *name;
237 int currentline;263 int currentline;
238 fprintf(f, "\t");264 char *filename;
265 int linedefined;
266 lua_funcinfo(func, &filename, &linedefined);
267 fprintf(f, (level==2) ? "Active Stack:\n\t" : "\t");
239 switch (*lua_getobjname(func, &name)) {268 switch (*lua_getobjname(func, &name)) {
240 case 'g':269 case 'g':
241 fprintf(f, "function %s", name);270 fprintf(f, "function %s", name);
242 break;271 break;
243 case 'f':272 case 't':
244 fprintf(f, "`%s' fallback", name);273 fprintf(f, "`%s' tag method", name);
245 break;274 break;
246 default: {275 default: {
247 char *filename;
248 int linedefined;
249 lua_funcinfo(func, &filename, &linedefined);
250 if (linedefined == 0)276 if (linedefined == 0)
251 fprintf(f, "main of %s", filename);277 fprintf(f, "main of %s", filename);
252 else if (linedefined < 0)278 else if (linedefined < 0)
253 fprintf(f, "%s", filename);279 fprintf(f, "%s", filename);
254 else280 else
255 fprintf(f, "function (%s:%d)", filename, linedefined);281 fprintf(f, "function (%s:%d)", filename, linedefined);
282 filename = NULL;
256 }283 }
257 }284 }
258 if ((currentline = lua_currentline(func)) > 0)285 if ((currentline = lua_currentline(func)) > 0)
259 fprintf(f, " at line %d", currentline);286 fprintf(f, " at line %d", currentline);
287 if (filename)
288 fprintf(f, " [in file %s]", filename);
260 fprintf(f, "\n");289 fprintf(f, "\n");
261 }290 }
262}291}
@@ -264,13 +293,13 @@ static void lua_printstack (FILE *f) · 1 unmodified line
264 293
265static void errorfb (void)294static void errorfb (void)
266{295{
267 char *s = lua_opt_string(1, "(no messsage)", NULL);296 fprintf(stderr, "lua: %s\n", lua_getstring(lua_getparam(1)));
268 fprintf(stderr, "lua: %s\n", s);
269 lua_printstack(stderr);297 lua_printstack(stderr);
270}298}
271 299
272 300
273static struct lua_reg iolib[] = {301
302static struct luaL_reg iolib[] = {
274{"readfrom", io_readfrom},303{"readfrom", io_readfrom},
275{"writeto", io_writeto},304{"writeto", io_writeto},
276{"appendto", io_appendto},305{"appendto", io_appendto},
@@ -289,7 +318,13 @@ static struct lua_reg iolib[] = { · 12 unmodified lines
289 318
290void iolib_open (void)319void iolib_open (void)
291{320{
292 lua_infile=stdin; lua_outfile=stdout;321 lua_tagio = lua_newtag();
293 luaI_openlib(iolib, (sizeof(iolib)/sizeof(iolib[0])));322 setfile(stdin, "_INPUT");
294 lua_setfallback("error", errorfb);323 setfile(stdout, "_OUTPUT");
324 setfile(stdin, "_STDIN");
325 setfile(stdout, "_STDOUT");
326 setfile(stderr, "_STDERR");
327 luaL_openlib(iolib, (sizeof(iolib)/sizeof(iolib[0])));
328 lua_pushcfunction(errorfb);
329 lua_seterrormethod();
295}330}
clients/lib/mathlib.c+34−47
@@ -3,12 +3,13 @@ · 2 unmodified lines
3** Mathematics library to LUA3** Mathematics library to LUA
4*/4*/
5 5
6char *rcs_mathlib="$Id: mathlib.c,v 1.18 1996/08/01 14:55:33 roberto Exp $";6char *rcs_mathlib="$Id: mathlib.c,v 1.25 1997/06/19 18:03:04 roberto Exp $";
7 7
8#include <stdlib.h>8#include <stdlib.h>
9#include <math.h>9#include <math.h>
10 10
11#include "lualib.h"11#include "lualib.h"
12#include "auxlib.h"
12#include "lua.h"13#include "lua.h"
13 14
14#ifndef PI15#ifndef PI
@@ -19,7 +20,7 @@ char *rcs_mathlib="$Id: mathlib.c,v 1.18 1996/08/01 14:55:33 roberto Exp $"; · 4 unmodified lines
19 20
20static void math_abs (void)21static void math_abs (void)
21{22{
22 double d = lua_check_number(1, "abs"); 23 double d = luaL_check_number(1);
23 if (d < 0) d = -d;24 if (d < 0) d = -d;
24 lua_pushnumber (d);25 lua_pushnumber (d);
25}26}
@@ -27,7 +28,7 @@ static void math_abs (void) · 1 unmodified line
27 28
28static void math_sin (void)29static void math_sin (void)
29{30{
30 double d = lua_check_number(1, "sin");31 double d = luaL_check_number(1);
31 lua_pushnumber (sin(TORAD(d)));32 lua_pushnumber (sin(TORAD(d)));
32}33}
33 34
@@ -35,7 +36,7 @@ static void math_sin (void) · 1 unmodified line
35 36
36static void math_cos (void)37static void math_cos (void)
37{38{
38 double d = lua_check_number(1, "cos");39 double d = luaL_check_number(1);
39 lua_pushnumber (cos(TORAD(d)));40 lua_pushnumber (cos(TORAD(d)));
40}41}
41 42
@@ -43,98 +44,82 @@ static void math_cos (void) · 1 unmodified line
43 44
44static void math_tan (void)45static void math_tan (void)
45{46{
46 double d = lua_check_number(1, "tan");47 double d = luaL_check_number(1);
47 lua_pushnumber (tan(TORAD(d)));48 lua_pushnumber (tan(TORAD(d)));
48}49}
49 50
50 51
51static void math_asin (void)52static void math_asin (void)
52{53{
53 double d = lua_check_number(1, "asin");54 double d = luaL_check_number(1);
54 lua_pushnumber (TODEGREE(asin(d)));55 lua_pushnumber (TODEGREE(asin(d)));
55}56}
56 57
57 58
58static void math_acos (void)59static void math_acos (void)
59{60{
60 double d = lua_check_number(1, "acos");61 double d = luaL_check_number(1);
61 lua_pushnumber (TODEGREE(acos(d)));62 lua_pushnumber (TODEGREE(acos(d)));
62}63}
63 64
64 65
65static void math_atan (void)66static void math_atan (void)
66{67{
67 double d = lua_check_number(1, "atan");68 double d = luaL_check_number(1);
68 lua_pushnumber (TODEGREE(atan(d)));69 lua_pushnumber (TODEGREE(atan(d)));
69}70}
70 71
71 72
72static void math_atan2 (void)73static void math_atan2 (void)
73{74{
74 double d1 = lua_check_number(1, "atan2");75 double d1 = luaL_check_number(1);
75 double d2 = lua_check_number(2, "atan2");76 double d2 = luaL_check_number(2);
76 lua_pushnumber (TODEGREE(atan2(d1, d2)));77 lua_pushnumber (TODEGREE(atan2(d1, d2)));
77}78}
78 79
79 80
80static void math_ceil (void)81static void math_ceil (void)
81{82{
82 double d = lua_check_number(1, "ceil");83 double d = luaL_check_number(1);
83 lua_pushnumber (ceil(d));84 lua_pushnumber (ceil(d));
84}85}
85 86
86 87
87static void math_floor (void)88static void math_floor (void)
88{89{
89 double d = lua_check_number(1, "floor");90 double d = luaL_check_number(1);
90 lua_pushnumber (floor(d));91 lua_pushnumber (floor(d));
91}92}
92 93
93static void math_mod (void)94static void math_mod (void)
94{95{
95 float x = lua_check_number(1, "mod");96 float x = luaL_check_number(1);
96 float y = lua_check_number(2, "mod");97 float y = luaL_check_number(2);
97 lua_pushnumber(fmod(x, y));98 lua_pushnumber(fmod(x, y));
98}99}
99 100
100 101
101static void math_sqrt (void)102static void math_sqrt (void)
102{103{
103 double d = lua_check_number(1, "sqrt");104 double d = luaL_check_number(1);
104 lua_pushnumber (sqrt(d));105 lua_pushnumber (sqrt(d));
105}106}
106 107
107static int old_pow;
108 108
109static void math_pow (void)109static void math_pow (void)
110{110{
111 lua_Object o1 = lua_getparam (1);111 double d1 = luaL_check_number(1);
112 lua_Object o2 = lua_getparam (2);112 double d2 = luaL_check_number(2);
113 lua_Object op = lua_getparam(3);113 lua_pushnumber(pow(d1,d2));
114 if (!lua_isnumber(o1) || !lua_isnumber(o2) || *(lua_getstring(op)) != 'p')
115 {
116 lua_Object old = lua_getref(old_pow);
117 lua_pushobject(o1);
118 lua_pushobject(o2);
119 lua_pushobject(op);
120 if (lua_callfunction(old) != 0)
121 lua_error(NULL);
122 }
123 else
124 {
125 double d1 = lua_getnumber(o1);
126 double d2 = lua_getnumber(o2);
127 lua_pushnumber (pow(d1,d2));
128 }
129}114}
130 115
131static void math_min (void)116static void math_min (void)
132{117{
133 int i=1;118 int i=1;
134 double dmin = lua_check_number(i, "min");119 double dmin = luaL_check_number(i);
135 while (lua_getparam(++i) != LUA_NOOBJECT)120 while (lua_getparam(++i) != LUA_NOOBJECT)
136 {121 {
137 double d = lua_check_number(i, "min");122 double d = luaL_check_number(i);
138 if (d < dmin) dmin = d;123 if (d < dmin) dmin = d;
139 }124 }
140 lua_pushnumber (dmin);125 lua_pushnumber (dmin);
@@ -143,10 +128,10 @@ static void math_min (void) · 2 unmodified lines
143static void math_max (void)128static void math_max (void)
144{129{
145 int i=1;130 int i=1;
146 double dmax = lua_check_number(i, "max");131 double dmax = luaL_check_number(i);
147 while (lua_getparam(++i) != LUA_NOOBJECT)132 while (lua_getparam(++i) != LUA_NOOBJECT)
148 {133 {
149 double d = lua_check_number(i, "max");134 double d = luaL_check_number(i);
150 if (d > dmax) dmax = d;135 if (d > dmax) dmax = d;
151 }136 }
152 lua_pushnumber (dmax);137 lua_pushnumber (dmax);
@@ -154,33 +139,33 @@ static void math_max (void) · 1 unmodified line
154 139
155static void math_log (void)140static void math_log (void)
156{141{
157 double d = lua_check_number(1, "log");142 double d = luaL_check_number(1);
158 lua_pushnumber (log(d));143 lua_pushnumber (log(d));
159}144}
160 145
161 146
162static void math_log10 (void)147static void math_log10 (void)
163{148{
164 double d = lua_check_number(1, "log10");149 double d = luaL_check_number(1);
165 lua_pushnumber (log10(d));150 lua_pushnumber (log10(d));
166}151}
167 152
168 153
169static void math_exp (void)154static void math_exp (void)
170{155{
171 double d = lua_check_number(1, "exp");156 double d = luaL_check_number(1);
172 lua_pushnumber (exp(d));157 lua_pushnumber (exp(d));
173}158}
174 159
175static void math_deg (void)160static void math_deg (void)
176{161{
177 float d = lua_check_number(1, "deg");162 float d = luaL_check_number(1);
178 lua_pushnumber (d*180./PI);163 lua_pushnumber (d*180./PI);
179}164}
180 165
181static void math_rad (void)166static void math_rad (void)
182{167{
183 float d = lua_check_number(1, "rad");168 float d = luaL_check_number(1);
184 lua_pushnumber (d/180.*PI);169 lua_pushnumber (d/180.*PI);
185}170}
186 171
@@ -191,11 +176,11 @@ static void math_random (void) · 4 unmodified lines
191 176
192static void math_randomseed (void)177static void math_randomseed (void)
193{178{
194 srand(lua_check_number(1, "randomseed"));179 srand(luaL_check_number(1));
195}180}
196 181
197 182
198static struct lua_reg mathlib[] = {183static struct luaL_reg mathlib[] = {
199{"abs", math_abs},184{"abs", math_abs},
200{"sin", math_sin},185{"sin", math_sin},
201{"cos", math_cos},186{"cos", math_cos},
@@ -224,7 +209,9 @@ static struct lua_reg mathlib[] = { · 22 unmodified lines
224*/209*/
225void mathlib_open (void)210void mathlib_open (void)
226{211{
227 luaI_openlib(mathlib, (sizeof(mathlib)/sizeof(mathlib[0])));212 luaL_openlib(mathlib, (sizeof(mathlib)/sizeof(mathlib[0])));
228 old_pow = lua_refobject(lua_setfallback("arith", math_pow), 1);213 lua_pushcfunction(math_pow);
214 lua_pushnumber(0); /* to get its tag */
215 lua_settagmethod(lua_tag(lua_pop()), "pow");
229}216}
230 217
clients/lib/old/Makefile+0−35
@@ -1,35 +0,0 @@
1# makefile for lualib
2
3LUA= ../../..
4
5include $(LUA)/config
6
7EXTRA_DEFS= $(POPEN) $(NOSTRERROR)
8
9OBJS= iolib.o mathlib.o strlib.o
10SRCS= iolib.c mathlib.c strlib.c
11
12SLIB= $(LIB)/liboldlualib.a
13
14# dynamic libraries only work for SunOs
15DLIB= $(LIB)/liboldlualib.so.$(VERSION)
16
17all: $(SLIB)
18
19dynamic: $(DLIB)
20
21$(SLIB): $(OBJS)
22 ar rcu $@ $(OBJS)
23 $(RANLIB) $(SLIB)
24
25$(DLIB): $(OBJS)
26 ld -o $@ $(OBJS)
27
28clean:
29 rm -f $(OBJS) $(SLIB) $(DLIB)
30
31co:
32 co -f -M -rv2_4 $(SRCS)
33
34klean: clean
35 rm -f $(SRCS)
clients/lib/old/iolib.c+0−618
@@ -1,618 +0,0 @@
1/*
2** iolib.c
3** Input/output library to LUA
4*/
5
6char *rcs_iolib="$Id: iolib.c,v 1.44 1996/05/03 20:10:59 roberto Exp $";
7
8#include <stdio.h>
9#include <ctype.h>
10#include <string.h>
11#include <time.h>
12#include <stdlib.h>
13#include <errno.h>
14
15#include "lua.h"
16#include "luadebug.h"
17#include "lualib.h"
18
19static FILE *in=stdin, *out=stdout;
20
21
22#ifdef POPEN
23FILE *popen();
24int pclose();
25#else
26#define popen(x,y) NULL /* that is, popen always fails */
27#define pclose(x) (-1)
28#endif
29
30
31static void pushresult (int i)
32{
33 if (i)
34 lua_pushnumber (1);
35 else
36 lua_pushnil();
37}
38
39static void closeread (void)
40{
41 if (in != stdin)
42 {
43 if (pclose(in) == -1)
44 fclose(in);
45 in = stdin;
46 }
47}
48
49static void closewrite (void)
50{
51 if (out != stdout)
52 {
53 if (pclose(out) == -1)
54 fclose(out);
55 out = stdout;
56 }
57}
58
59/*
60** Open a file to read.
61** LUA interface:
62** status = readfrom (filename)
63** where:
64** status = 1 -> success
65** status = nil -> error
66*/
67static void io_readfrom (void)
68{
69 if (lua_getparam (1) == LUA_NOOBJECT)
70 { /* restore standart input */
71 closeread();
72 lua_pushnumber (1);
73 }
74 else
75 {
76 char *s = lua_check_string(1, "readfrom");
77 FILE *fp = (*s == '|') ? popen(s+1, "r") : fopen(s, "r");
78 if (fp == NULL)
79 lua_pushnil();
80 else
81 {
82 closeread();
83 in = fp;
84 lua_pushnumber (1);
85 }
86 }
87}
88
89
90/*
91** Open a file to write.
92** LUA interface:
93** status = writeto (filename)
94** where:
95** status = 1 -> success
96** status = nil -> error
97*/
98static void io_writeto (void)
99{
100 if (lua_getparam (1) == LUA_NOOBJECT) /* restore standart output */
101 {
102 closewrite();
103 lua_pushnumber (1);
104 }
105 else
106 {
107 char *s = lua_check_string(1, "writeto");
108 FILE *fp = (*s == '|') ? popen(s+1,"w") : fopen(s,"w");
109 if (fp == NULL)
110 lua_pushnil();
111 else
112 {
113 closewrite();
114 out = fp;
115 lua_pushnumber (1);
116 }
117 }
118}
119
120
121/*
122** Open a file to write appended.
123** LUA interface:
124** status = appendto (filename)
125** where:
126** status = 1 -> success
127** status = nil -> error
128*/
129static void io_appendto (void)
130{
131 char *s = lua_check_string(1, "appendto");
132 FILE *fp = fopen (s, "a");
133 if (fp == NULL)
134 lua_pushnil();
135 else
136 {
137 if (out != stdout) fclose (out);
138 out = fp;
139 lua_pushnumber(1);
140 }
141}
142
143
144static char getformat (char *f, int *just, int *m, int *n)
145{
146 int t;
147 switch (*f++)
148 {
149 case 'q': case 'Q':
150 case 's': case 'S':
151 case 'i': case 'I':
152 t = tolower(*(f-1));
153 break;
154 case 'f': case 'F': case 'g': case 'G': case 'e': case 'E':
155 t = 'f';
156 break;
157 default:
158 t = 0; /* to avoid compiler warnings */
159 lua_arg_error("read/write (format)");
160 }
161 *just = (*f == '<' || *f == '>' || *f == '|') ? *f++ : '>';
162 if (isdigit(*f))
163 {
164 *m = 0;
165 while (isdigit(*f))
166 *m = *m*10 + (*f++ - '0');
167 }
168 else
169 *m = -1;
170 if (*f == '.')
171 {
172 f++; /* skip point */
173 *n = 0;
174 while (isdigit(*f))
175 *n = *n*10 + (*f++ - '0');
176 }
177 else
178 *n = -1;
179 return t;
180}
181
182
183/*
184** Read a variable. On error put nil on stack.
185** LUA interface:
186** variable = read ([format])
187**
188** O formato pode ter um dos seguintes especificadores:
189**
190** s ou S -> para string
191** f ou F, g ou G, e ou E -> para reais
192** i ou I -> para inteiros
193**
194** Estes especificadores podem vir seguidos de numero que representa
195** o numero de campos a serem lidos.
196*/
197
198static int read_until_char (int del)
199{
200 int c;
201 while((c = fgetc(in)) != EOF && c != del)
202 luaI_addchar(c);
203 return c;
204}
205
206static void read_until_blank (void)
207{
208 int c;
209 while((c = fgetc(in)) != EOF && !isspace(c))
210 luaI_addchar(c);
211 if (c != EOF) ungetc(c,in);
212}
213
214static void read_m (int m)
215{
216 int c;
217 while (m-- && (c = fgetc(in)) != EOF)
218 luaI_addchar(c);
219}
220
221
222static void read_free (void)
223{
224 int c;
225 while (isspace(c=fgetc(in)))
226 ;
227 if (c == EOF)
228 {
229 lua_pushnil();
230 return;
231 }
232 if (c == '\"' || c == '\'')
233 { /* string */
234 c = read_until_char(c);
235 if (c == EOF)
236 lua_pushnil();
237 else
238 lua_pushstring(luaI_addchar(0));
239 }
240 else
241 {
242 double d;
243 char dummy;
244 char *s;
245 luaI_addchar(c);
246 read_until_blank();
247 s = luaI_addchar(0);
248 if (sscanf(s, "%lf %c", &d, &dummy) == 1)
249 lua_pushnumber(d);
250 else
251 lua_pushstring(s);
252 }
253}
254
255static void io_read (void)
256{
257 lua_Object o = lua_getparam (1);
258 luaI_addchar(0); /* initialize buffer */
259 if (o == LUA_NOOBJECT) /* free format */
260 read_free();
261 else /* formatted */
262 {
263 int m, dummy1, dummy2;
264 switch (getformat(lua_check_string(1, "read"), &dummy1, &m, &dummy2))
265 {
266 case 's':
267 {
268 char *s;
269 if (m < 0)
270 read_until_blank();
271 else
272 read_m(m);
273 s = luaI_addchar(0);
274 if ((m >= 0 && strlen(s) == m) || (m < 0 && strlen(s) > 0))
275 lua_pushstring(s);
276 else
277 lua_pushnil();
278 break;
279 }
280
281 case 'i': /* can read as float, since it makes no difference to Lua */
282 case 'f':
283 {
284 double d;
285 int result;
286 if (m < 0)
287 result = fscanf(in, "%lf", &d);
288 else
289 {
290 read_m(m);
291 result = sscanf(luaI_addchar(0), "%lf", &d);
292 }
293 if (result == 1)
294 lua_pushnumber(d);
295 else
296 lua_pushnil();
297 break;
298 }
299 default:
300 lua_arg_error("read (format)");
301 }
302 }
303}
304
305
306/*
307** Read characters until a given one. The delimiter is not read.
308*/
309static void io_readuntil (void)
310{
311 int del, c;
312 lua_Object p = lua_getparam(1);
313 luaI_addchar(0); /* initialize buffer */
314 if (p == LUA_NOOBJECT || lua_isnil(p))
315 del = EOF;
316 else
317 del = *lua_check_string(1, "readuntil");
318 c = read_until_char(del);
319 if (c != EOF) ungetc(c,in);
320 lua_pushstring(luaI_addchar(0));
321}
322
323
324/*
325** Write a variable. On error put 0 on stack, otherwise put 1.
326** LUA interface:
327** status = write (variable [,format])
328**
329** O formato pode ter um dos seguintes especificadores:
330**
331** s ou S -> para string
332** f ou F, g ou G, e ou E -> para reais
333** i ou I -> para inteiros
334**
335** Estes especificadores podem vir seguidos de:
336**
337** [?][m][.n]
338**
339** onde:
340** ? -> indica justificacao
341** < = esquerda
342** | = centro
343** > = direita (default)
344** m -> numero maximo de campos (se exceder estoura)
345** n -> indica precisao para
346** reais -> numero de casas decimais
347** inteiros -> numero minimo de digitos
348** string -> nao se aplica
349*/
350
351static int write_fill (int n, int c)
352{
353 while (n--)
354 if (fputc(c, out) == EOF)
355 return 0;
356 return 1;
357}
358
359static int write_string (char *s, int just, int m)
360{
361 int status;
362 int l = strlen(s);
363 int pre; /* number of blanks before string */
364 if (m < 0) m = l;
365 else if (l > m)
366 {
367 write_fill(m, '*');
368 return 0;
369 }
370 pre = (just == '<') ? 0 : (just == '>') ? m-l : (m-l)/2;
371 status = write_fill(pre, ' ');
372 status = status && fprintf(out, "%s", s) >= 0;
373 status = status && write_fill(m-(l+pre), ' ');
374 return status;
375}
376
377static int write_quoted (int just, int m)
378{
379 luaI_addchar(0);
380 luaI_addquoted(lua_check_string(1, "write"));
381 return write_string(luaI_addchar(0), just, m);
382}
383
384static int write_float (int just, int m, int n)
385{
386 char buffer[100];
387 lua_Object p = lua_getparam(1);
388 float number;
389 if (!lua_isnumber(p)) return 0;
390 number = lua_getnumber(p);
391 if (n >= 0)
392 sprintf(buffer, "%.*f", n, number);
393 else
394 sprintf(buffer, "%g", number);
395 return write_string(buffer, just, m);
396}
397
398
399static int write_int (int just, int m, int n)
400{
401 char buffer[100];
402 lua_Object p = lua_getparam(1);
403 int number;
404 if (!lua_isnumber(p)) return 0;
405 number = (int)lua_getnumber(p);
406 if (n >= 0)
407 sprintf(buffer, "%.*d", n, number);
408 else
409 sprintf(buffer, "%d", number);
410 return write_string(buffer, just, m);
411}
412
413
414static void io_write (void)
415{
416 int status = 0;
417 if (lua_getparam (2) == LUA_NOOBJECT) /* free format */
418 {
419 lua_Object o1 = lua_getparam(1);
420 int t = lua_type(o1);
421 if (t == LUA_T_NUMBER)
422 status = fprintf (out, "%g", lua_getnumber(o1)) >= 0;
423 else if (t == LUA_T_STRING)
424 status = fprintf (out, "%s", lua_getstring(o1)) >= 0;
425 }
426 else /* formated */
427 {
428 int just, m, n;
429 switch (getformat(lua_check_string(2, "write"), &just, &m, &n))
430 {
431 case 's':
432 {
433 lua_Object p = lua_getparam(1);
434 if (lua_isstring(p))
435 status = write_string(lua_getstring(p), just, m);
436 else
437 status = 0;
438 break;
439 }
440 case 'q':
441 status = write_quoted(just, m);
442 break;
443 case 'f':
444 status = write_float(just, m, n);
445 break;
446 case 'i':
447 status = write_int(just, m, n);
448 break;
449 }
450 }
451 if (status)
452 lua_pushnumber(status);
453 else
454 lua_pushnil();
455}
456
457/*
458** Execute a executable program using "system".
459** Return the result of execution.
460*/
461static void io_execute (void)
462{
463 lua_pushnumber(system(lua_check_string(1, "execute")));
464}
465
466/*
467** Remove a file. On error return nil.
468*/
469static void io_remove (void)
470{
471 pushresult(remove(lua_check_string(1, "remove")) == 0);
472}
473
474static void io_rename (void)
475{
476 char *f1 = lua_check_string(1, "rename");
477 char *f2 = lua_check_string(2, "rename");
478 pushresult(rename(f1, f2) == 0);
479}
480
481static void io_tmpname (void)
482{
483 lua_pushstring(tmpnam(NULL));
484}
485
486static void io_errorno (void)
487{
488/* lua_pushstring(strerror(errno));*/
489}
490
491
492/*
493** To get a environment variable
494*/
495static void io_getenv (void)
496{
497 char *env = getenv(lua_check_string(1, "getenv"));
498 lua_pushstring(env); /* if NULL push nil */
499}
500
501/*
502** Return user formatted time stamp
503*/
504static void io_date (void)
505{
506 time_t t;
507 struct tm *tm;
508 char *s;
509 char b[BUFSIZ];
510 if (lua_getparam(1) == LUA_NOOBJECT)
511 s = "%c";
512 else
513 s = lua_check_string(1, "date");
514 time(&t); tm = localtime(&t);
515 if (strftime(b,sizeof(b),s,tm))
516 lua_pushstring(b);
517 else
518 lua_error("invalid `date' format");
519}
520
521/*
522** To exit
523*/
524static void io_exit (void)
525{
526 lua_Object o = lua_getparam(1);
527 int code = lua_isnumber(o) ? (int)lua_getnumber(o) : 1;
528 exit(code);
529}
530
531/*
532** To debug a lua program. Start a dialog with the user, interpreting
533 lua commands until an 'cont'.
534*/
535static void io_debug (void)
536{
537 while (1)
538 {
539 char buffer[250];
540 fprintf(stderr, "lua_debug> ");
541 if (fgets(buffer, sizeof(buffer), stdin) == 0) return;
542 if (strcmp(buffer, "cont") == 0) return;
543 lua_dostring(buffer);
544 }
545}
546
547
548static void lua_printstack (FILE *f)
549{
550 int level = 0;
551 lua_Object func;
552 fprintf(f, "Active Stack:\n");
553 while ((func = lua_stackedfunction(level++)) != LUA_NOOBJECT)
554 {
555 char *name;
556 int currentline;
557 fprintf(f, "\t");
558 switch (*lua_getobjname(func, &name))
559 {
560 case 'g':
561 fprintf(f, "function %s", name);
562 break;
563 case 'f':
564 fprintf(f, "`%s' fallback", name);
565 break;
566 default:
567 {
568 char *filename;
569 int linedefined;
570 lua_funcinfo(func, &filename, &linedefined);
571 if (linedefined == 0)
572 fprintf(f, "main of %s", filename);
573 else if (linedefined < 0)
574 fprintf(f, "%s", filename);
575 else
576 fprintf(f, "function (%s:%d)", filename, linedefined);
577 }
578 }
579 if ((currentline = lua_currentline(func)) > 0)
580 fprintf(f, " at line %d", currentline);
581 fprintf(f, "\n");
582 }
583}
584
585
586static void errorfb (void)
587{
588 lua_Object o = lua_getparam(1);
589 char *s = lua_isstring(o) ? lua_getstring(o) : "(no messsage)";
590 fprintf(stderr, "lua: %s\n", s);
591 lua_printstack(stderr);
592}
593
594
595static struct lua_reg iolib[] = {
596{"readfrom", io_readfrom},
597{"writeto", io_writeto},
598{"appendto", io_appendto},
599{"read", io_read},
600{"readuntil",io_readuntil},
601{"write", io_write},
602{"execute", io_execute},
603{"remove", io_remove},
604{"rename", io_rename},
605{"tmpname", io_tmpname},
606{"ioerror", io_errorno},
607{"getenv", io_getenv},
608{"date", io_date},
609{"exit", io_exit},
610{"debug", io_debug},
611{"print_stack", errorfb}
612};
613
614void iolib_open (void)
615{
616 luaI_openlib(iolib, (sizeof(iolib)/sizeof(iolib[0])));
617 lua_setfallback("error", errorfb);
618}
clients/lib/old/lualib.h+0−33
@@ -1,33 +0,0 @@
1/*
2** Libraries to be used in LUA programs
3** Grupo de Tecnologia em Computacao Grafica
4** TeCGraf - PUC-Rio
5** $Id: lualib.h,v 1.8 1996/04/30 21:13:55 roberto Exp $
6*/
7
8#ifndef lualib_h
9#define lualib_h
10
11#include "lua.h"
12
13void iolib_open (void);
14void strlib_open (void);
15void mathlib_open (void);
16
17
18/* auxiliar functions (private) */
19
20struct lua_reg {
21 char *name;
22 lua_CFunction func;
23};
24
25void luaI_openlib (struct lua_reg *l, int n);
26void lua_arg_error(char *funcname);
27char *lua_check_string (int numArg, char *funcname);
28double lua_check_number (int numArg, char *funcname);
29char *luaI_addchar (int c);
30void luaI_addquoted (char *s);
31
32#endif
33
clients/lib/old/mathlib.c+0−230
@@ -1,230 +0,0 @@
1/*
2** mathlib.c
3** Mathematics library to LUA
4*/
5
6char *rcs_mathlib="$Id: mathlib.c,v 1.17 1996/04/30 21:13:55 roberto Exp $";
7
8#include <stdlib.h>
9#include <math.h>
10
11#include "lualib.h"
12#include "lua.h"
13
14#ifndef PI
15#define PI 3.14159265358979323846
16#endif
17#define TODEGREE(a) ((a)*180.0/PI)
18#define TORAD(a) ((a)*PI/180.0)
19
20static void math_abs (void)
21{
22 double d = lua_check_number(1, "abs");
23 if (d < 0) d = -d;
24 lua_pushnumber (d);
25}
26
27
28static void math_sin (void)
29{
30 double d = lua_check_number(1, "sin");
31 lua_pushnumber (sin(TORAD(d)));
32}
33
34
35
36static void math_cos (void)
37{
38 double d = lua_check_number(1, "cos");
39 lua_pushnumber (cos(TORAD(d)));
40}
41
42
43
44static void math_tan (void)
45{
46 double d = lua_check_number(1, "tan");
47 lua_pushnumber (tan(TORAD(d)));
48}
49
50
51static void math_asin (void)
52{
53 double d = lua_check_number(1, "asin");
54 lua_pushnumber (TODEGREE(asin(d)));
55}
56
57
58static void math_acos (void)
59{
60 double d = lua_check_number(1, "acos");
61 lua_pushnumber (TODEGREE(acos(d)));
62}
63
64
65static void math_atan (void)
66{
67 double d = lua_check_number(1, "atan");
68 lua_pushnumber (TODEGREE(atan(d)));
69}
70
71
72static void math_atan2 (void)
73{
74 double d1 = lua_check_number(1, "atan2");
75 double d2 = lua_check_number(2, "atan2");
76 lua_pushnumber (TODEGREE(atan2(d1, d2)));
77}
78
79
80static void math_ceil (void)
81{
82 double d = lua_check_number(1, "ceil");
83 lua_pushnumber (ceil(d));
84}
85
86
87static void math_floor (void)
88{
89 double d = lua_check_number(1, "floor");
90 lua_pushnumber (floor(d));
91}
92
93static void math_mod (void)
94{
95 int d1 = (int)lua_check_number(1, "mod");
96 int d2 = (int)lua_check_number(2, "mod");
97 lua_pushnumber (d1%d2);
98}
99
100
101static void math_sqrt (void)
102{
103 double d = lua_check_number(1, "sqrt");
104 lua_pushnumber (sqrt(d));
105}
106
107static int old_pow;
108
109static void math_pow (void)
110{
111 lua_Object o1 = lua_getparam (1);
112 lua_Object o2 = lua_getparam (2);
113 lua_Object op = lua_getparam(3);
114 if (!lua_isnumber(o1) || !lua_isnumber(o2) || *(lua_getstring(op)) != 'p')
115 {
116 lua_Object old = lua_getref(old_pow);
117 lua_pushobject(o1);
118 lua_pushobject(o2);
119 lua_pushobject(op);
120 if (lua_callfunction(old) != 0)
121 lua_error(NULL);
122 }
123 else
124 {
125 double d1 = lua_getnumber(o1);
126 double d2 = lua_getnumber(o2);
127 lua_pushnumber (pow(d1,d2));
128 }
129}
130
131static void math_min (void)
132{
133 int i=1;
134 double dmin = lua_check_number(i, "min");
135 while (lua_getparam(++i) != LUA_NOOBJECT)
136 {
137 double d = lua_check_number(i, "min");
138 if (d < dmin) dmin = d;
139 }
140 lua_pushnumber (dmin);
141}
142
143static void math_max (void)
144{
145 int i=1;
146 double dmax = lua_check_number(i, "max");
147 while (lua_getparam(++i) != LUA_NOOBJECT)
148 {
149 double d = lua_check_number(i, "max");
150 if (d > dmax) dmax = d;
151 }
152 lua_pushnumber (dmax);
153}
154
155static void math_log (void)
156{
157 double d = lua_check_number(1, "log");
158 lua_pushnumber (log(d));
159}
160
161
162static void math_log10 (void)
163{
164 double d = lua_check_number(1, "log10");
165 lua_pushnumber (log10(d));
166}
167
168
169static void math_exp (void)
170{
171 double d = lua_check_number(1, "exp");
172 lua_pushnumber (exp(d));
173}
174
175static void math_deg (void)
176{
177 float d = lua_check_number(1, "deg");
178 lua_pushnumber (d*180./PI);
179}
180
181static void math_rad (void)
182{
183 float d = lua_check_number(1, "rad");
184 lua_pushnumber (d/180.*PI);
185}
186
187static void math_random (void)
188{
189 lua_pushnumber((double)(rand()%RAND_MAX) / (double)RAND_MAX);
190}
191
192static void math_randomseed (void)
193{
194 srand(lua_check_number(1, "randomseed"));
195}
196
197
198static struct lua_reg mathlib[] = {
199{"abs", math_abs},
200{"sin", math_sin},
201{"cos", math_cos},
202{"tan", math_tan},
203{"asin", math_asin},
204{"acos", math_acos},
205{"atan", math_atan},
206{"atan2", math_atan2},
207{"ceil", math_ceil},
208{"floor", math_floor},
209{"mod", math_mod},
210{"sqrt", math_sqrt},
211{"min", math_min},
212{"max", math_max},
213{"log", math_log},
214{"log10", math_log10},
215{"exp", math_exp},
216{"deg", math_deg},
217{"rad", math_rad},
218{"random", math_random},
219{"randomseed", math_randomseed}
220};
221
222/*
223** Open math library
224*/
225void mathlib_open (void)
226{
227 luaI_openlib(mathlib, (sizeof(mathlib)/sizeof(mathlib[0])));
228 old_pow = lua_refobject(lua_setfallback("arith", math_pow), 1);
229}
230
clients/lib/old/strlib.c+0−276
@@ -1,276 +0,0 @@
1/*
2** strlib.c
3** String library to LUA
4*/
5
6char *rcs_strlib="$Id: strlib.c,v 1.23 1996/04/30 21:13:55 roberto Exp $";
7
8#include <string.h>
9#include <stdio.h>
10#include <stdlib.h>
11#include <ctype.h>
12#include <limits.h>
13
14#include "lua.h"
15#include "lualib.h"
16
17
18void lua_arg_error(char *funcname)
19{
20 char buff[100];
21 sprintf(buff, "incorrect arguments to function `%s'", funcname);
22 lua_error(buff);
23}
24
25char *lua_check_string (int numArg, char *funcname)
26{
27 lua_Object o = lua_getparam(numArg);
28 if (!lua_isstring(o))
29 lua_arg_error(funcname);
30 return lua_getstring(o);
31}
32
33double lua_check_number (int numArg, char *funcname)
34{
35 lua_Object o = lua_getparam(numArg);
36 if (!lua_isnumber(o))
37 lua_arg_error(funcname);
38 return lua_getnumber(o);
39}
40
41static int lua_opt_number (int numArg, int def, char *funcname)
42{
43 return (lua_getparam(numArg) == LUA_NOOBJECT) ? def :
44 (int)lua_check_number(numArg, funcname);
45}
46
47char *luaI_addchar (int c)
48{
49 static char *buff = NULL;
50 static int max = 0;
51 static int n = 0;
52 if (n >= max)
53 {
54 if (max == 0)
55 {
56 max = 100;
57 buff = (char *)malloc(max);
58 }
59 else
60 {
61 max *= 2;
62 buff = (char *)realloc(buff, max);
63 }
64 if (buff == NULL)
65 lua_error("memory overflow");
66 }
67 buff[n++] = c;
68 if (c == 0)
69 n = 0; /* prepare for next string */
70 return buff;
71}
72
73
74/*
75** Return the position of the first caracter of a substring into a string
76** LUA interface:
77** n = strfind (string, substring, init, end)
78*/
79static void str_find (void)
80{
81 char *s1 = lua_check_string(1, "strfind");
82 char *s2 = lua_check_string(2, "strfind");
83 int init = lua_opt_number(3, 1, "strfind") - 1;
84 char *f = (init>=0 && init<=strlen(s1)) ? strstr(s1+init,s2) : NULL;
85 if (f != NULL)
86 {
87 int pos = f-s1+1;
88 if (lua_opt_number(4, INT_MAX, "strfind") >= pos+strlen(s2)-1)
89 lua_pushnumber (pos);
90 else
91 lua_pushnil();
92 }
93 else
94 lua_pushnil();
95}
96
97/*
98** Return the string length
99** LUA interface:
100** n = strlen (string)
101*/
102static void str_len (void)
103{
104 char *s = lua_check_string(1, "strlen");
105 lua_pushnumber(strlen(s));
106}
107
108
109/*
110** Return the substring of a string, from start to end
111** LUA interface:
112** substring = strsub (string, start, end)
113*/
114static void str_sub (void)
115{
116 char *s = lua_check_string(1, "strsub");
117 int start = (int)lua_check_number(2, "strsub");
118 int end = lua_opt_number(3, strlen(s), "strsub");
119 if (end < start || start < 1 || end > strlen(s))
120 lua_pushliteral("");
121 else
122 {
123 luaI_addchar(0);
124 while (start <= end)
125 luaI_addchar(s[start++ - 1]);
126 lua_pushstring (luaI_addchar(0));
127 }
128}
129
130/*
131** Convert a string to lower case.
132** LUA interface:
133** lowercase = strlower (string)
134*/
135static void str_lower (void)
136{
137 char *s = lua_check_string(1, "strlower");
138 luaI_addchar(0);
139 while (*s)
140 luaI_addchar(tolower(*s++));
141 lua_pushstring(luaI_addchar(0));
142}
143
144
145/*
146** Convert a string to upper case.
147** LUA interface:
148** uppercase = strupper (string)
149*/
150static void str_upper (void)
151{
152 char *s = lua_check_string(1, "strupper");
153 luaI_addchar(0);
154 while (*s)
155 luaI_addchar(toupper(*s++));
156 lua_pushstring(luaI_addchar(0));
157}
158
159/*
160** get ascii value of a character in a string
161*/
162static void str_ascii (void)
163{
164 char *s = lua_check_string(1, "ascii");
165 int pos = lua_opt_number(2, 1, "ascii") - 1;
166 if (pos<0 || pos>=strlen(s))
167 lua_arg_error("ascii");
168 lua_pushnumber(s[pos]);
169}
170
171void luaI_addquoted (char *s)
172{
173 luaI_addchar('"');
174 for (; *s; s++)
175 {
176 if (*s == '"' || *s == '\\' || *s == '\n')
177 luaI_addchar('\\');
178 luaI_addchar(*s);
179 }
180 luaI_addchar('"');
181}
182
183#define MAX_CONVERTION 2000
184#define MAX_FORMAT 50
185
186static void str_format (void)
187{
188 int arg = 1;
189 char *strfrmt = lua_check_string(arg++, "format");
190 luaI_addchar(0); /* initialize */
191 while (*strfrmt)
192 {
193 if (*strfrmt != '%')
194 luaI_addchar(*strfrmt++);
195 else if (*++strfrmt == '%')
196 luaI_addchar(*strfrmt++); /* %% */
197 else
198 { /* format item */
199 char form[MAX_FORMAT]; /* store the format ('%...') */
200 char buff[MAX_CONVERTION]; /* store the formated value */
201 int size = 0;
202 int i = 0;
203 form[i++] = '%';
204 form[i] = *strfrmt++;
205 while (!isalpha(form[i]))
206 {
207 if (isdigit(form[i]))
208 {
209 size = size*10 + form[i]-'0';
210 if (size >= MAX_CONVERTION)
211 lua_error("format size/precision too long in function `format'");
212 }
213 else if (form[i] == '.')
214 size = 0; /* re-start */
215 if (++i >= MAX_FORMAT)
216 lua_error("bad format in function `format'");
217 form[i] = *strfrmt++;
218 }
219 form[i+1] = 0; /* ends string */
220 switch (form[i])
221 {
222 case 'q':
223 luaI_addquoted(lua_check_string(arg++, "format"));
224 buff[0] = '\0'; /* addchar already done */
225 break;
226 case 's':
227 {
228 char *s = lua_check_string(arg++, "format");
229 if (strlen(s) >= MAX_CONVERTION)
230 lua_error("string argument too long in function `format'");
231 sprintf(buff, form, s);
232 break;
233 }
234 case 'c': case 'd': case 'i': case 'o':
235 case 'u': case 'x': case 'X':
236 sprintf(buff, form, (int)lua_check_number(arg++, "format"));
237 break;
238 case 'e': case 'E': case 'f': case 'g':
239 sprintf(buff, form, lua_check_number(arg++, "format"));
240 break;
241 default: /* also treat cases 'pnLlh' */
242 lua_error("invalid format option in function `format'");
243 }
244 for (i=0; buff[i]; i++) /* move formated value to result */
245 luaI_addchar(buff[i]);
246 }
247 }
248 lua_pushstring(luaI_addchar(0)); /* push the result */
249}
250
251
252void luaI_openlib (struct lua_reg *l, int n)
253{
254 int i;
255 for (i=0; i<n; i++)
256 lua_register(l[i].name, l[i].func);
257}
258
259static struct lua_reg strlib[] = {
260{"strfind", str_find},
261{"strlen", str_len},
262{"strsub", str_sub},
263{"strlower", str_lower},
264{"strupper", str_upper},
265{"ascii", str_ascii},
266{"format", str_format}
267};
268
269
270/*
271** Open string library
272*/
273void strlib_open (void)
274{
275 luaI_openlib(strlib, (sizeof(strlib)/sizeof(strlib[0])));
276}
clients/lib/strlib.c+106−144
@@ -3,7 +3,7 @@ · 2 unmodified lines
3** String library to LUA3** String library to LUA
4*/4*/
5 5
6char *rcs_strlib="$Id: strlib.c,v 1.33 1996/11/20 13:47:59 roberto Exp $";6char *rcs_strlib="$Id: strlib.c,v 1.46 1997/06/19 18:49:40 roberto Exp $";
7 7
8#include <string.h>8#include <string.h>
9#include <stdio.h>9#include <stdio.h>
@@ -11,6 +11,7 @@ char *rcs_strlib="$Id: strlib.c,v 1.33 1996/11/20 13:47:59 roberto Exp $"; · 1 unmodified line
11#include <ctype.h>11#include <ctype.h>
12 12
13#include "lua.h"13#include "lua.h"
14#include "auxlib.h"
14#include "lualib.h"15#include "lualib.h"
15 16
16 17
@@ -23,7 +24,7 @@ struct lbuff { · 6 unmodified lines
23static struct lbuff lbuffer = {NULL, 0, 0};24static struct lbuff lbuffer = {NULL, 0, 0};
24 25
25 26
26static char *lua_strbuffer (unsigned long size)27static char *strbuffer (unsigned long size)
27{28{
28 if (size > lbuffer.max) {29 if (size > lbuffer.max) {
29 /* ANSI "realloc" doesn't need this test, but some machines (Sun!)30 /* ANSI "realloc" doesn't need this test, but some machines (Sun!)
@@ -38,55 +39,24 @@ static char *lua_strbuffer (unsigned long size) · 8 unmodified lines
38 39
39static char *openspace (unsigned long size)40static char *openspace (unsigned long size)
40{41{
41 char *buff = lua_strbuffer(lbuffer.size+size);42 char *buff = strbuffer(lbuffer.size+size);
42 return buff+lbuffer.size;43 return buff+lbuffer.size;
43}44}
44 45
45void lua_arg_check(int cond, char *funcname)
46{
47 if (!cond) {
48 char buff[100];
49 sprintf(buff, "incorrect argument to function `%s'", funcname);
50 lua_error(buff);
51 }
52}
53
54char *lua_check_string (int numArg, char *funcname)
55{
56 lua_Object o = lua_getparam(numArg);
57 lua_arg_check(lua_isstring(o), funcname);
58 return lua_getstring(o);
59}
60
61char *lua_opt_string (int numArg, char *def, char *funcname)
62{
63 return (lua_getparam(numArg) == LUA_NOOBJECT) ? def :
64 lua_check_string(numArg, funcname);
65}
66
67double lua_check_number (int numArg, char *funcname)
68{
69 lua_Object o = lua_getparam(numArg);
70 lua_arg_check(lua_isnumber(o), funcname);
71 return lua_getnumber(o);
72}
73
74long lua_opt_number (int numArg, long def, char *funcname)
75{
76 return (lua_getparam(numArg) == LUA_NOOBJECT) ? def :
77 (long)lua_check_number(numArg, funcname);
78}
79
80char *luaI_addchar (int c)46char *luaI_addchar (int c)
81{47{
82 if (lbuffer.size >= lbuffer.max)48 if (lbuffer.size >= lbuffer.max)
83 lua_strbuffer(lbuffer.max == 0 ? 100 : lbuffer.max*2);49 strbuffer(lbuffer.max == 0 ? 100 : lbuffer.max*2);
84 lbuffer.b[lbuffer.size++] = c;50 lbuffer.b[lbuffer.size++] = c;
85 if (c == 0)
86 lbuffer.size = 0; /* prepare for next string */
87 return lbuffer.b;51 return lbuffer.b;
88}52}
89 53
54void luaI_emptybuff (void)
55{
56 lbuffer.size = 0; /* prepare for next string */
57}
58
59
90static void addnchar (char *s, int n)60static void addnchar (char *s, int n)
91{61{
92 char *b = openspace(n);62 char *b = openspace(n);
@@ -99,35 +69,13 @@ static void addstr (char *s) · 6 unmodified lines
99 addnchar(s, strlen(s));69 addnchar(s, strlen(s));
100}70}
101 71
102/*
103** Interface to strtok
104*/
105static void str_tok (void)
106{
107 char *s1 = lua_check_string(1, "strtok");
108 char *del = lua_check_string(2, "strtok");
109 lua_Object t = lua_createtable();
110 int i = 1;
111 /* As strtok changes s1, and s1 is "constant", make a copy of it */
112 s1 = strcpy(lua_strbuffer(strlen(s1+1)), s1);
113 while ((s1 = strtok(s1, del)) != NULL) {
114 lua_pushobject(t);
115 lua_pushnumber(i++);
116 lua_pushstring(s1);
117 lua_storesubscript();
118 s1 = NULL; /* prepare for next strtok */
119 }
120 lua_pushobject(t);
121 lua_pushnumber(i-1); /* total number of tokens */
122}
123
124 72
125/*73/*
126** Return the string length74** Return the string length
127*/75*/
128static void str_len (void)76static void str_len (void)
129{77{
130 lua_pushnumber(strlen(lua_check_string(1, "strlen")));78 lua_pushnumber(strlen(luaL_check_string(1)));
131}79}
132 80
133/*81/*
@@ -135,15 +83,18 @@ static void str_len (void) · 1 unmodified line
135*/83*/
136static void str_sub (void)84static void str_sub (void)
137{85{
138 char *s = lua_check_string(1, "strsub");86 char *s = luaL_check_string(1);
139 long start = (long)lua_check_number(2, "strsub");87 long l = strlen(s);
140 long end = lua_opt_number(3, strlen(s), "strsub");88 long start = (long)luaL_check_number(2);
141 if (1 <= start && start <= end && end <= strlen(s)) {89 long end = (long)luaL_opt_number(3, -1);
142 luaI_addchar(0);90 if (start < 0) start = l+start+1;
91 if (end < 0) end = l+end+1;
92 if (1 <= start && start <= end && end <= l) {
93 luaI_emptybuff();
143 addnchar(s+start-1, end-start+1);94 addnchar(s+start-1, end-start+1);
144 lua_pushstring(luaI_addchar(0));95 lua_pushstring(luaI_addchar(0));
145 }96 }
146 else lua_pushliteral("");97 else lua_pushstring("");
147}98}
148 99
149/*100/*
@@ -151,10 +102,10 @@ static void str_sub (void) · 1 unmodified line
151*/102*/
152static void str_lower (void)103static void str_lower (void)
153{104{
154 char *s = lua_check_string(1, "strlower");105 char *s;
155 luaI_addchar(0);106 luaI_emptybuff();
156 while (*s)107 for (s = luaL_check_string(1); *s; s++)
157 luaI_addchar(tolower(*s++));108 luaI_addchar(tolower((unsigned char)*s));
158 lua_pushstring(luaI_addchar(0));109 lua_pushstring(luaI_addchar(0));
159}110}
160 111
@@ -163,18 +114,18 @@ static void str_lower (void) · 2 unmodified lines
163*/114*/
164static void str_upper (void)115static void str_upper (void)
165{116{
166 char *s = lua_check_string(1, "strupper");117 char *s;
167 luaI_addchar(0);118 luaI_emptybuff();
168 while (*s)119 for (s = luaL_check_string(1); *s; s++)
169 luaI_addchar(toupper(*s++));120 luaI_addchar(toupper((unsigned char)*s));
170 lua_pushstring(luaI_addchar(0));121 lua_pushstring(luaI_addchar(0));
171}122}
172 123
173static void str_rep (void)124static void str_rep (void)
174{125{
175 char *s = lua_check_string(1, "strrep");126 char *s = luaL_check_string(1);
176 int n = (int)lua_check_number(2, "strrep");127 int n = (int)luaL_check_number(2);
177 luaI_addchar(0);128 luaI_emptybuff();
178 while (n-- > 0)129 while (n-- > 0)
179 addstr(s);130 addstr(s);
180 lua_pushstring(luaI_addchar(0));131 lua_pushstring(luaI_addchar(0));
@@ -185,9 +136,9 @@ static void str_rep (void) · 4 unmodified lines
185*/136*/
186static void str_ascii (void)137static void str_ascii (void)
187{138{
188 char *s = lua_check_string(1, "ascii");139 char *s = luaL_check_string(1);
189 long pos = lua_opt_number(2, 1, "ascii") - 1;140 long pos = (long)luaL_opt_number(2, 1) - 1;
190 lua_arg_check(0<=pos && pos<strlen(s), "ascii");141 luaL_arg_check(0<=pos && pos<strlen(s), 2, "out of range");
191 lua_pushnumber((unsigned char)s[pos]);142 lua_pushnumber((unsigned char)s[pos]);
192}143}
193 144
@@ -195,23 +146,23 @@ static void str_ascii (void) · 1 unmodified line
195/* pattern matching */146/* pattern matching */
196 147
197#define ESC '%'148#define ESC '%'
198#define SPECIALS "^$*?.([%"149#define SPECIALS "^$*?.([%-"
199 150
200static char *bracket_end (char *p)151static char *bracket_end (char *p)
201{152{
202 return (*p == 0) ? NULL : strchr((*p=='^') ? p+2 : p+1, ']');153 return (*p == 0) ? NULL : strchr((*p=='^') ? p+2 : p+1, ']');
203}154}
204 155
205char *item_end (char *p)156char *luaL_item_end (char *p)
206{157{
207 switch (*p++) {158 switch (*p++) {
208 case '\0': return p-1;159 case '\0': return p-1;
209 case ESC:160 case ESC:
210 if (*p == 0) lua_error("incorrect pattern");161 if (*p == 0) luaL_verror("incorrect pattern (ends with `%c')", ESC);
211 return p+1;162 return p+1;
212 case '[': {163 case '[': {
213 char *end = bracket_end(p);164 char *end = bracket_end(p);
214 if (end == NULL) lua_error("incorrect pattern");165 if (end == NULL) lua_error("incorrect pattern (missing `]')");
215 return end+1;166 return end+1;
216 }167 }
217 default:168 default:
@@ -222,21 +173,21 @@ char *item_end (char *p) · 4 unmodified lines
222static int matchclass (int c, int cl)173static int matchclass (int c, int cl)
223{174{
224 int res;175 int res;
225 switch (tolower(cl)) {176 switch (tolower((unsigned char)cl)) {
226 case 'a' : res = isalpha(c); break;177 case 'a' : res = isalpha((unsigned char)c); break;
227 case 'c' : res = iscntrl(c); break;178 case 'c' : res = iscntrl((unsigned char)c); break;
228 case 'd' : res = isdigit(c); break;179 case 'd' : res = isdigit((unsigned char)c); break;
229 case 'l' : res = islower(c); break;180 case 'l' : res = islower((unsigned char)c); break;
230 case 'p' : res = ispunct(c); break;181 case 'p' : res = ispunct((unsigned char)c); break;
231 case 's' : res = isspace(c); break;182 case 's' : res = isspace((unsigned char)c); break;
232 case 'u' : res = isupper(c); break;183 case 'u' : res = isupper((unsigned char)c); break;
233 case 'w' : res = isalnum(c); break;184 case 'w' : res = isalnum((unsigned char)c); break;
234 default: return (cl == c);185 default: return (cl == c);
235 }186 }
236 return (islower(cl) ? res : !res);187 return (islower((unsigned char)cl) ? res : !res);
237}188}
238 189
239int singlematch (int c, char *p)190int luaL_singlematch (int c, char *p)
240{191{
241 if (c == 0) return 0;192 if (c == 0) return 0;
242 switch (*p) {193 switch (*p) {
@@ -333,7 +284,7 @@ static char *match (char *s, char *p, int level) · 90 unmodified lines
333 return res;284 return res;
334 }285 }
335 case ESC:286 case ESC:
336 if (isdigit(*(p+1))) { /* capture */287 if (isdigit((unsigned char)(*(p+1)))) { /* capture */
337 int l = check_cap(*(p+1), level);288 int l = check_cap(*(p+1), level);
338 if (strncmp(capture[l].init, s, capture[l].len) == 0) {289 if (strncmp(capture[l].init, s, capture[l].len) == 0) {
339 /* return match(p+2, s+capture[l].len, level); */290 /* return match(p+2, s+capture[l].len, level); */
@@ -358,8 +309,8 @@ static char *match (char *s, char *p, int level) · 18 unmodified lines
358 }309 }
359 else goto dflt;310 else goto dflt;
360 default: dflt: { /* it is a pattern item */311 default: dflt: { /* it is a pattern item */
361 int m = singlematch(*s, p);312 int m = luaL_singlematch(*s, p);
362 char *ep = item_end(p); /* get what is next */313 char *ep = luaL_item_end(p); /* get what is next */
363 switch (*ep) {314 switch (*ep) {
364 case '*': { /* repetition */315 case '*': { /* repetition */
365 char *res;316 char *res;
@@ -367,6 +318,17 @@ static char *match (char *s, char *p, int level) · 1 unmodified line
367 return res;318 return res;
368 p=ep+1; goto init; /* else return match(s, ep+1, level); */319 p=ep+1; goto init; /* else return match(s, ep+1, level); */
369 }320 }
321 case '-': { /* repetition */
322 char *res;
323 if ((res = match(s, ep+1, level)) != 0)
324 return res;
325 else if (m) {
326 s++;
327 goto init; /* return match(s+1, p, level); */
328 }
329 else
330 return NULL;
331 }
370 case '?': { /* optional */332 case '?': { /* optional */
371 char *res;333 char *res;
372 if (m && (res = match(s+1, ep+1, level)))334 if (m && (res = match(s+1, ep+1, level)))
@@ -383,10 +345,10 @@ static char *match (char *s, char *p, int level) · 10 unmodified lines
383 345
384static void str_find (void)346static void str_find (void)
385{347{
386 char *s = lua_check_string(1, "strfind");348 char *s = luaL_check_string(1);
387 char *p = lua_check_string(2, "strfind");349 char *p = luaL_check_string(2);
388 long init = lua_opt_number(3, 1, "strfind") - 1;350 long init = (long)luaL_opt_number(3, 1) - 1;
389 lua_arg_check(0 <= init && init <= strlen(s), "strfind");351 luaL_arg_check(0 <= init && init <= strlen(s), 3, "out of range");
390 if (lua_getparam(4) != LUA_NOOBJECT || 352 if (lua_getparam(4) != LUA_NOOBJECT ||
391 strpbrk(p, SPECIALS) == NULL) { /* no special caracters? */353 strpbrk(p, SPECIALS) == NULL) { /* no special caracters? */
392 char *s2 = strstr(s+init, p);354 char *s2 = strstr(s+init, p);
@@ -410,12 +372,12 @@ static void str_find (void) · 17 unmodified lines
410 }372 }
411}373}
412 374
413static void add_s (lua_Object newp)375static void add_s (lua_Object newp, lua_Object table, int n)
414{376{
415 if (lua_isstring(newp)) {377 if (lua_isstring(newp)) {
416 char *news = lua_getstring(newp);378 char *news = lua_getstring(newp);
417 while (*news) {379 while (*news) {
418 if (*news != ESC || !isdigit(*++news))380 if (*news != ESC || !isdigit((unsigned char)*++news))
419 luaI_addchar(*news++);381 luaI_addchar(*news++);
420 else {382 else {
421 int l = check_cap(*news++, num_captures);383 int l = check_cap(*news++, num_captures);
@@ -426,41 +388,50 @@ static void add_s (lua_Object newp) · 4 unmodified lines
426 else if (lua_isfunction(newp)) {388 else if (lua_isfunction(newp)) {
427 lua_Object res;389 lua_Object res;
428 struct lbuff oldbuff;390 struct lbuff oldbuff;
391 int status;
429 lua_beginblock();392 lua_beginblock();
393 if (lua_istable(table)) {
394 lua_pushobject(table);
395 lua_pushnumber(n);
396 }
430 push_captures();397 push_captures();
431 /* function may use lbuffer, so save it and create a new one */398 /* function may use lbuffer, so save it and create a new one */
432 oldbuff = lbuffer;399 oldbuff = lbuffer;
433 lbuffer.b = NULL; lbuffer.max = lbuffer.size = 0;400 lbuffer.b = NULL; lbuffer.max = lbuffer.size = 0;
434 lua_callfunction(newp);401 status = lua_callfunction(newp);
435 /* restore old buffer */402 /* restore old buffer */
436 free(lbuffer.b);403 free(lbuffer.b);
437 lbuffer = oldbuff;404 lbuffer = oldbuff;
405 if (status != 0)
406 lua_error(NULL);
438 res = lua_getresult(1);407 res = lua_getresult(1);
439 addstr(lua_isstring(res) ? lua_getstring(res) : "");408 addstr(lua_isstring(res) ? lua_getstring(res) : "");
440 lua_endblock();409 lua_endblock();
441 }410 }
442 else lua_arg_check(0, "gsub");411 else luaL_arg_check(0, 3, NULL);
443}412}
444 413
445static void str_gsub (void)414static void str_gsub (void)
446{415{
447 char *src = lua_check_string(1, "gsub");416 char *src = luaL_check_string(1);
448 char *p = lua_check_string(2, "gsub");417 char *p = luaL_check_string(2);
449 lua_Object newp = lua_getparam(3);418 lua_Object newp = lua_getparam(3);
450 int max_s = lua_opt_number(4, strlen(src), "gsub");419 lua_Object table = lua_getparam(4);
420 int max_s = (int)luaL_opt_number(lua_istable(table)?5:4, strlen(src)+1);
451 int anchor = (*p == '^') ? (p++, 1) : 0;421 int anchor = (*p == '^') ? (p++, 1) : 0;
452 int n = 0;422 int n = 0;
453 luaI_addchar(0);423 luaI_emptybuff();
454 while (*src && n < max_s) {424 while (n < max_s) {
455 char *e;425 char *e = match(src, p, 0);
456 if ((e=match(src, p, 0)) == NULL)426 if (e) {
457 luaI_addchar(*src++);
458 else {
459 if (e == src) lua_error("empty pattern in substitution");
460 add_s(newp);
461 src = e;
462 n++;427 n++;
428 add_s(newp, table, n);
463 }429 }
430 if (e && e>src) /* non empty match? */
431 src = e; /* skip it */
432 else if (*src)
433 luaI_addchar(*src++);
434 else break;
464 if (anchor) break;435 if (anchor) break;
465 }436 }
466 addstr(src);437 addstr(src);
@@ -470,12 +441,12 @@ static void str_gsub (void) · 3 unmodified lines
470 441
471static void str_set (void)442static void str_set (void)
472{443{
473 char *item = lua_check_string(1, "strset");444 char *item = luaL_check_string(1);
474 int i;445 int i;
475 lua_arg_check(*item_end(item) == 0, "strset");446 luaL_arg_check(*luaL_item_end(item) == 0, 1, "wrong format");
476 luaI_addchar(0);447 luaI_emptybuff();
477 for (i=1; i<256; i++) /* 0 cannot be part of a set */448 for (i=1; i<256; i++) /* 0 cannot be part of a set */
478 if (singlematch(i, item))449 if (luaL_singlematch(i, item))
479 luaI_addchar(i);450 luaI_addchar(i);
480 lua_pushstring(luaI_addchar(0));451 lua_pushstring(luaI_addchar(0));
481}452}
@@ -497,8 +468,8 @@ void luaI_addquoted (char *s) · 15 unmodified lines
497static void str_format (void)468static void str_format (void)
498{469{
499 int arg = 1;470 int arg = 1;
500 char *strfrmt = lua_check_string(arg++, "format");471 char *strfrmt = luaL_check_string(arg++);
501 luaI_addchar(0); /* initialize */472 luaI_emptybuff(); /* initialize */
502 while (*strfrmt) {473 while (*strfrmt) {
503 if (*strfrmt != '%')474 if (*strfrmt != '%')
504 luaI_addchar(*strfrmt++);475 luaI_addchar(*strfrmt++);
@@ -510,26 +481,26 @@ static void str_format (void) · 5 unmodified lines
510 char *initf = strfrmt-1; /* -1 to include % */481 char *initf = strfrmt-1; /* -1 to include % */
511 strfrmt = match(strfrmt, "[-+ #]*(%d*)%.?(%d*)", 0);482 strfrmt = match(strfrmt, "[-+ #]*(%d*)%.?(%d*)", 0);
512 if (capture[0].len > 3 || capture[1].len > 3) /* < 1000? */483 if (capture[0].len > 3 || capture[1].len > 3) /* < 1000? */
513 lua_error("invalid format (width/precision too long)");484 lua_error("invalid format (width or precision too long)");
514 strncpy(form, initf, strfrmt-initf+1); /* +1 to include convertion */485 strncpy(form, initf, strfrmt-initf+1); /* +1 to include convertion */
515 form[strfrmt-initf+1] = 0;486 form[strfrmt-initf+1] = 0;
516 buff = openspace(1000); /* to store the formated value */487 buff = openspace(1000); /* to store the formated value */
517 switch (*strfrmt++) {488 switch (*strfrmt++) {
518 case 'q':489 case 'q':
519 luaI_addquoted(lua_check_string(arg++, "format"));490 luaI_addquoted(luaL_check_string(arg++));
520 continue;491 continue;
521 case 's': {492 case 's': {
522 char *s = lua_check_string(arg++, "format");493 char *s = luaL_check_string(arg++);
523 buff = openspace(strlen(s));494 buff = openspace(strlen(s));
524 sprintf(buff, form, s);495 sprintf(buff, form, s);
525 break;496 break;
526 }497 }
527 case 'c': case 'd': case 'i': case 'o':498 case 'c': case 'd': case 'i': case 'o':
528 case 'u': case 'x': case 'X':499 case 'u': case 'x': case 'X':
529 sprintf(buff, form, (int)lua_check_number(arg++, "format"));500 sprintf(buff, form, (int)luaL_check_number(arg++));
530 break;501 break;
531 case 'e': case 'E': case 'f': case 'g':502 case 'e': case 'E': case 'f': case 'g':
532 sprintf(buff, form, lua_check_number(arg++, "format"));503 sprintf(buff, form, luaL_check_number(arg++));
533 break;504 break;
534 default: /* also treat cases 'pnLlh' */505 default: /* also treat cases 'pnLlh' */
535 lua_error("invalid format option in function `format'");506 lua_error("invalid format option in function `format'");
@@ -541,16 +512,7 @@ static void str_format (void) · 5 unmodified lines
541}512}
542 513
543 514
544void luaI_openlib (struct lua_reg *l, int n)515static struct luaL_reg strlib[] = {
545{
546 int i;
547 for (i=0; i<n; i++)
548 lua_register(l[i].name, l[i].func);
549}
550
551
552static struct lua_reg strlib[] = {
553{"strtok", str_tok},
554{"strlen", str_len},516{"strlen", str_len},
555{"strsub", str_sub},517{"strsub", str_sub},
556{"strset", str_set},518{"strset", str_set},
@@ -569,5 +531,5 @@ static struct lua_reg strlib[] = { · 12 unmodified lines
569*/531*/
570void strlib_open (void)532void strlib_open (void)
571{533{
572 luaI_openlib(strlib, (sizeof(strlib)/sizeof(strlib[0])));534 luaL_openlib(strlib, (sizeof(strlib)/sizeof(strlib[0])));
573}535}
clients/lua/lua.c+73−3
@@ -3,12 +3,13 @@ · 2 unmodified lines
3** Linguagem para Usuarios de Aplicacao3** Linguagem para Usuarios de Aplicacao
4*/4*/
5 5
6char *rcs_lua="$Id: lua.c,v 1.14 1996/09/24 17:30:28 roberto Exp $";6char *rcs_lua="$Id: lua.c,v 1.18 1997/06/19 18:55:40 roberto Exp $";
7 7
8#include <stdio.h>8#include <stdio.h>
9#include <string.h>9#include <string.h>
10 10
11#include "lua.h"11#include "lua.h"
12#include "auxlib.h"
12#include "lualib.h"13#include "lualib.h"
13 14
14 15
@@ -19,6 +20,74 @@ char *rcs_lua="$Id: lua.c,v 1.14 1996/09/24 17:30:28 roberto Exp $"; · 4 unmodified lines
19#endif20#endif
20 21
21 22
23#define DEBUG 0
24
25static void testC (void)
26{
27#if DEBUG
28#define getnum(s) ((*s++) - '0')
29#define getname(s) (nome[0] = *s++, nome)
30
31 static int locks[10];
32 lua_Object reg[10];
33 char nome[2];
34 char *s = luaL_check_string(1);
35 nome[1] = 0;
36 while (1) {
37 switch (*s++) {
38 case '0': case '1': case '2': case '3': case '4':
39 case '5': case '6': case '7': case '8': case '9':
40 lua_pushnumber(*(s-1) - '0');
41 break;
42
43 case 'c': reg[getnum(s)] = lua_createtable(); break;
44
45 case 'P': reg[getnum(s)] = lua_pop(); break;
46
47 case 'g': { int n = getnum(s); reg[n] = lua_getglobal(getname(s)); break; }
48
49 case 'G': { int n = getnum(s);
50 reg[n] = lua_rawgetglobal(getname(s));
51 break;
52 }
53
54 case 'l': locks[getnum(s)] = lua_ref(1); break;
55 case 'L': locks[getnum(s)] = lua_ref(0); break;
56
57 case 'r': { int n = getnum(s); reg[n] = lua_getref(locks[getnum(s)]); break; }
58
59 case 'u': lua_unref(locks[getnum(s)]); break;
60
61 case 'p': { int n = getnum(s); reg[n] = lua_getparam(getnum(s)); break; }
62
63 case '=': lua_setglobal(getname(s)); break;
64
65 case 's': lua_pushstring(getname(s)); break;
66
67 case 'o': lua_pushobject(reg[getnum(s)]); break;
68
69 case 'f': lua_call(getname(s)); break;
70
71 case 'i': reg[getnum(s)] = lua_gettable(); break;
72
73 case 'I': reg[getnum(s)] = lua_rawgettable(); break;
74
75 case 't': lua_settable(); break;
76
77 case 'T': lua_rawsettable(); break;
78
79 default: luaL_verror("unknown command in `testC': %c", *(s-1));
80
81 }
82 if (*s == 0) return;
83 if (*s++ != ' ') lua_error("missing ` ' between commands in `testC'");
84 }
85#else
86 lua_error("`testC' not active");
87#endif
88}
89
90
22static void manual_input (void)91static void manual_input (void)
23{92{
24 if (isatty(0)) {93 if (isatty(0)) {
@@ -41,6 +110,7 @@ int main (int argc, char *argv[]) · 16 unmodified lines
41 iolib_open ();110 iolib_open ();
42 strlib_open ();111 strlib_open ();
43 mathlib_open ();112 mathlib_open ();
113 lua_register("testC", testC);
44 if (argc < 2)114 if (argc < 2)
45 manual_input();115 manual_input();
46 else for (i=1; i<argc; i++) {116 else for (i=1; i<argc; i++) {
@@ -59,8 +129,8 @@ int main (int argc, char *argv[]) · 12 unmodified lines
59 result = lua_dofile (argv[i]);129 result = lua_dofile (argv[i]);
60 if (result) {130 if (result) {
61 if (result == 2) {131 if (result == 2) {
62 fprintf(stderr, "lua: cannot execute file `%s' - ", argv[i]);132 fprintf(stderr, "lua: cannot execute file ");
63 perror(NULL);133 perror(argv[i]);
64 }134 }
65 return 1;135 return 1;
66 }136 }
config+5−5
@@ -2,31 +2,31 @@ · 1 unmodified line
2 2
3# you need an ANSI C compiler3# you need an ANSI C compiler
4CC= gcc4CC= gcc
5WARN= -ansi -Wall # -Wmissing-prototypes -Wshadow5WARN= -ansi -Wall
6 6
7# for SGI's with cc7# for SGI's with cc
8#CC= cc8#CC= cc
9#WARN= -ansi -fullwarn9#WARN= -ansi -fullwarn
10 10
11# in SunOs 4.1.x, uncomment the following line to avoid prototypes warnings11# in SunOs 4.1.x, uncomment the following line to avoid prototypes warnings
12# for standard functions12# for standard functions:
13#EXTRA_INCS= -I/usr/5include13#EXTRA_INCS= -I/usr/5include
14 14
15# if you don't have popen() in your C library, comment the following line:15# if you don't have popen() in your C library, comment the following line:
16POPEN= -DPOPEN16POPEN= -DPOPEN
17 17
18# if your C library is not POSIX compliant, comment the following line:18# if your C library is not POSIX compliant, comment the following line:
19POSIX= -DPOSIX19POSIX= -D_POSIX_SOURCE
20 20
21# if you don't have strerror() in your C library, uncomment the following line:21# if you don't have strerror() in your C library, uncomment the following line:
22#NOSTRERROR= -DNOSTRERROR22#NOSTRERROR= -DNOSTRERROR
23 23
24# if your system doesn't have ranlib, change "ranlib" to "true" 24# if your system doesn't have (or need) ranlib, change "ranlib" to "true":
25RANLIB=ranlib25RANLIB=ranlib
26 26
27### NO NEED TO CHANGE ANYTHING BELOW THIS LINE ================================27### NO NEED TO CHANGE ANYTHING BELOW THIS LINE ================================
28 28
29VERSION= 2.529VERSION= 3.0
30 30
31INC= $(LUA)/include31INC= $(LUA)/include
32LIB= $(LUA)/lib32LIB= $(LUA)/lib
doc/Makefile+0−23
@@ -1,23 +0,0 @@
1# makefile for lua distribution
2
3all:
4 rm -f manual.id
5 touch manual.id
6 latex manual.tex
7 latex manual.tex
8 makeindex manual
9 sort -df manual.idx | sed -e 's/_/\\_/g' >manual.id
10 latex manual.tex
11 dvips -o manual.ps manual.dvi
12 gzip manual.ps
13 mv manual.ps.gz refman.ps.gz
14 rm -f manual.*
15
16clean:
17 rm -f manual.tex
18
19co:
20 co -f -M manual.tex luac.man
21
22klean: clean
23 rm -f manual.tex manual.ps manual.dvi
doc/idx.html+241−0
@@ -0,0 +1,241 @@
1<HTML>
2<HEAD>
3<TITLE>Lua 3.0 Reference Manual - Word Index</TITLE>
4</HEAD>
5
6<BODY>
7
8<H1>Index</H1>
9
10<A HREF="manual.html#..">..</A><BR>
11<A HREF="manual.html#abs">abs</A><BR>
12<A HREF="manual.html#acos">acos</A><BR>
13<A HREF="manual.html#add event">add event</A><BR>
14<A HREF="manual.html#Adjustment">Adjustment</A><BR>
15<A HREF="manual.html#and">and</A><BR>
16<A HREF="manual.html#appendto">appendto</A><BR>
17<A HREF="manual.html#arg">arg</A><BR>
18<A HREF="manual.html#arguments">arguments</A><BR>
19<A HREF="manual.html#arithmetic operators">arithmetic operators</A><BR>
20<A HREF="manual.html#arrays">arrays</A><BR>
21<A HREF="manual.html#ascii">ascii</A><BR>
22<A HREF="manual.html#asin">asin</A><BR>
23<A HREF="manual.html#assert">assert</A><BR>
24<A HREF="manual.html#Assignment">Assignment</A><BR>
25<A HREF="manual.html#associative arrays">associative arrays</A><BR>
26<A HREF="manual.html#atan2">atan2</A><BR>
27<A HREF="manual.html#atan">atan</A><BR>
28<A HREF="manual.html#basic types">basic types</A><BR>
29<A HREF="manual.html#block">block</A><BR>
30<A HREF="manual.html#C pointers">C pointers</A><BR>
31<A HREF="manual.html#C2lua">C2lua</A><BR>
32<A HREF="manual.html#call">call</A><BR>
33<A HREF="manual.html#captures">captures</A><BR>
34<A HREF="manual.html#ceil">ceil</A><BR>
35<A HREF="manual.html#character class">character class</A><BR>
36<A HREF="manual.html#chunk">chunk</A><BR>
37<A HREF="manual.html#closing a file">closing a file</A><BR>
38<A HREF="manual.html#Coercion">Coercion</A><BR>
39<A HREF="manual.html#collectgarbage">collectgarbage</A><BR>
40<A HREF="manual.html#Comments">Comments</A><BR>
41<A HREF="manual.html#concatenation event">concatenation event</A><BR>
42<A HREF="manual.html#concatenation">concatenation</A><BR>
43<A HREF="manual.html#condition expression">condition expression</A><BR>
44<A HREF="manual.html#constructors">constructors</A><BR>
45<A HREF="manual.html#cos">cos</A><BR>
46<A HREF="manual.html#date">date</A><BR>
47<A HREF="manual.html#debug pragma">debug pragma</A><BR>
48<A HREF="manual.html#div event">div event</A><BR>
49<A HREF="manual.html#dofile">dofile</A><BR>
50<A HREF="manual.html#dostring">dostring</A><BR>
51<A HREF="manual.html#error method">error method</A><BR>
52<A HREF="manual.html#error">error</A><BR>
53<A HREF="manual.html#event">event</A><BR>
54<A HREF="manual.html#execute">execute</A><BR>
55<A HREF="manual.html#exit">exit</A><BR>
56<A HREF="manual.html#exponentiation">exponentiation</A><BR>
57<A HREF="manual.html#Expressions">Expressions</A><BR>
58<A HREF="manual.html#file handles">file handles</A><BR>
59<A HREF="manual.html#floor">floor</A><BR>
60<A HREF="manual.html#format">format</A><BR>
61<A HREF="manual.html#function call">function call</A><BR>
62<A HREF="manual.html#Function Definitions">Function Definitions</A><BR>
63<A HREF="manual.html#function event">function event</A><BR>
64<A HREF="manual.html#function">function</A><BR>
65<A HREF="manual.html#gc event">gc event</A><BR>
66<A HREF="manual.html#ge event">ge event</A><BR>
67<A HREF="manual.html#getenv">getenv</A><BR>
68<A HREF="manual.html#getglobal event">getglobal event</A><BR>
69<A HREF="manual.html#getglobal">getglobal</A><BR>
70<A HREF="manual.html#gettable event">gettable event</A><BR>
71<A HREF="manual.html#gettagmethod">gettagmethod</A><BR>
72<A HREF="manual.html#gettagmethod">gettagmethod</A><BR>
73<A HREF="manual.html#global environment">global environment</A><BR>
74<A HREF="manual.html#Global variables">Global variables</A><BR>
75<A HREF="manual.html#gsub">gsub</A><BR>
76<A HREF="manual.html#gt event">gt event</A><BR>
77<A HREF="manual.html#Identifiers">Identifiers</A><BR>
78<A HREF="manual.html#if-then-else">if-then-else</A><BR>
79<A HREF="manual.html#index event">index event</A><BR>
80<A HREF="manual.html#_INPUT">_INPUT</A><BR>
81<A HREF="manual.html#le event">le event</A><BR>
82<A HREF="manual.html#Literal strings">Literal strings</A><BR>
83<A HREF="manual.html#Local variables">Local variables</A><BR>
84<A HREF="manual.html#log10">log10</A><BR>
85<A HREF="manual.html#log">log</A><BR>
86<A HREF="manual.html#logical operators">logical operators</A><BR>
87<A HREF="manual.html#lt event">lt event</A><BR>
88<A HREF="manual.html#Lua Stand-alone">Lua Stand-alone</A><BR>
89<A HREF="manual.html#lua2C">lua2C</A><BR>
90<A HREF="manual.html#LUA_ANYTAG">LUA_ANYTAG</A><BR>
91<A HREF="manual.html#luac">luac</A><BR>
92<A HREF="manual.html#luac">luac</A><BR>
93<A HREF="manual.html#lua_callfunction">lua_callfunction</A><BR>
94<A HREF="manual.html#lua_CFunction">lua_CFunction</A><BR>
95<A HREF="manual.html#lua_collectgarbage">lua_collectgarbage</A><BR>
96<A HREF="manual.html#lua_createtable">lua_createtable</A><BR>
97<A HREF="manual.html#lua_dofile">lua_dofile</A><BR>
98<A HREF="manual.html#lua_dostring">lua_dostring</A><BR>
99<A HREF="manual.html#lua_error">lua_error</A><BR>
100<A HREF="manual.html#lua_getcfunction">lua_getcfunction</A><BR>
101<A HREF="manual.html#lua_getglobal">lua_getglobal</A><BR>
102<A HREF="manual.html#lua_getnumber">lua_getnumber</A><BR>
103<A HREF="manual.html#lua_getparam">lua_getparam</A><BR>
104<A HREF="manual.html#lua_getref">lua_getref</A><BR>
105<A HREF="manual.html#lua_getresult">lua_getresult</A><BR>
106<A HREF="manual.html#lua_getstring">lua_getstring</A><BR>
107<A HREF="manual.html#lua_gettable">lua_gettable</A><BR>
108<A HREF="manual.html#lua_gettagmethod">lua_gettagmethod</A><BR>
109<A HREF="manual.html#lua_getuserdata">lua_getuserdata</A><BR>
110<A HREF="manual.html#lua_iscfunction">lua_iscfunction</A><BR>
111<A HREF="manual.html#lua_isfunction">lua_isfunction</A><BR>
112<A HREF="manual.html#lua_isnil">lua_isnil</A><BR>
113<A HREF="manual.html#lua_isnumber">lua_isnumber</A><BR>
114<A HREF="manual.html#lua_isstring">lua_isstring</A><BR>
115<A HREF="manual.html#lua_istable">lua_istable</A><BR>
116<A HREF="manual.html#lua_isuserdata">lua_isuserdata</A><BR>
117<A HREF="manual.html#lua_lua2C">lua_lua2C</A><BR>
118<A HREF="manual.html#lua_newtag">lua_newtag</A><BR>
119<A HREF="manual.html#LUA_NOOBJECT">LUA_NOOBJECT</A><BR>
120<A HREF="manual.html#lua_Object">lua_Object</A><BR>
121<A HREF="manual.html#lua_pop">lua_pop</A><BR>
122<A HREF="manual.html#lua_pushcfunction">lua_pushcfunction</A><BR>
123<A HREF="manual.html#lua_pushnil">lua_pushnil</A><BR>
124<A HREF="manual.html#lua_pushnumber">lua_pushnumber</A><BR>
125<A HREF="manual.html#lua_pushobject">lua_pushobject</A><BR>
126<A HREF="manual.html#lua_pushstring">lua_pushstring</A><BR>
127<A HREF="manual.html#lua_pushuserdata">lua_pushuserdata</A><BR>
128<A HREF="manual.html#lua_pushusertag">lua_pushusertag</A><BR>
129<A HREF="manual.html#lua_rawgetglobal">lua_rawgetglobal</A><BR>
130<A HREF="manual.html#lua_rawgetglobal">lua_rawgetglobal</A><BR>
131<A HREF="manual.html#lua_rawgetglobal">lua_rawgetglobal</A><BR>
132<A HREF="manual.html#lua_rawsettable">lua_rawsettable</A><BR>
133<A HREF="manual.html#lua_ref">lua_ref</A><BR>
134<A HREF="manual.html#lua_register">lua_register</A><BR>
135<A HREF="manual.html#lua_seterrormethod">lua_seterrormethod</A><BR>
136<A HREF="manual.html#lua_setglobal">lua_setglobal</A><BR>
137<A HREF="manual.html#lua_settable">lua_settable</A><BR>
138<A HREF="manual.html#lua_settag">lua_settag</A><BR>
139<A HREF="manual.html#lua_settagmethod">lua_settagmethod</A><BR>
140<A HREF="manual.html#lua_tag">lua_tag</A><BR>
141<A HREF="manual.html#lua_unref">lua_unref</A><BR>
142<A HREF="manual.html#max">max</A><BR>
143<A HREF="manual.html#methods">methods</A><BR>
144<A HREF="manual.html#min">min</A><BR>
145<A HREF="manual.html#mod">mod</A><BR>
146<A HREF="manual.html#mul event">mul event</A><BR>
147<A HREF="manual.html#multiple assignment">multiple assignment</A><BR>
148<A HREF="manual.html#newtag">newtag</A><BR>
149<A HREF="manual.html#next">next</A><BR>
150<A HREF="manual.html#nextvar">nextvar</A><BR>
151<A HREF="manual.html#nil">nil</A><BR>
152<A HREF="manual.html#not">not</A><BR>
153<A HREF="manual.html#number">number</A><BR>
154<A HREF="manual.html#Numerical constants">Numerical constants</A><BR>
155<A HREF="manual.html#Operator precedence">Operator precedence</A><BR>
156<A HREF="manual.html#or">or</A><BR>
157<A HREF="manual.html#_OUTPUT">_OUTPUT</A><BR>
158<A HREF="manual.html#packed results">packed results</A><BR>
159<A HREF="manual.html#pattern item">pattern item</A><BR>
160<A HREF="manual.html#pattern">pattern</A><BR>
161<A HREF="manual.html#piped input">piped input</A><BR>
162<A HREF="manual.html#piped output">piped output</A><BR>
163<A HREF="manual.html#popen">popen</A><BR>
164<A HREF="manual.html#popen">popen</A><BR>
165<A HREF="manual.html#pow event">pow event</A><BR>
166<A HREF="manual.html#pre-compilation">pre-compilation</A><BR>
167<A HREF="manual.html#predefined functions">predefined functions</A><BR>
168<A HREF="manual.html#Pre-processor">Pre-processor</A><BR>
169<A HREF="manual.html#print">print</A><BR>
170<A HREF="manual.html#random">random</A><BR>
171<A HREF="manual.html#randomseed">randomseed</A><BR>
172<A HREF="manual.html#rawgetglobal">rawgetglobal</A><BR>
173<A HREF="manual.html#rawgettable">rawgettable</A><BR>
174<A HREF="manual.html#rawsetglobal">rawsetglobal</A><BR>
175<A HREF="manual.html#rawsettable">rawsettable</A><BR>
176<A HREF="manual.html#read pattern">read pattern</A><BR>
177<A HREF="manual.html#read">read</A><BR>
178<A HREF="manual.html#readfrom">readfrom</A><BR>
179<A HREF="manual.html#records">records</A><BR>
180<A HREF="manual.html#reference">reference</A><BR>
181<A HREF="manual.html#reflexivity">reflexivity</A><BR>
182<A HREF="manual.html#relational operators">relational operators</A><BR>
183<A HREF="manual.html#remove">remove</A><BR>
184<A HREF="manual.html#rename">rename</A><BR>
185<A HREF="manual.html#repeat-until">repeat-until</A><BR>
186<A HREF="manual.html#reserved words">reserved words</A><BR>
187<A HREF="manual.html#return statement">return statement</A><BR>
188<A HREF="manual.html#return">return</A><BR>
189<A HREF="manual.html#self">self</A><BR>
190<A HREF="manual.html#setglobal event">setglobal event</A><BR>
191<A HREF="manual.html#setglobal">setglobal</A><BR>
192<A HREF="manual.html#settable event">settable event</A><BR>
193<A HREF="manual.html#settag">settag</A><BR>
194<A HREF="manual.html#settagmethod">settagmethod</A><BR>
195<A HREF="manual.html#settagmethod">settagmethod</A><BR>
196<A HREF="manual.html#short-cut evaluation">short-cut evaluation</A><BR>
197<A HREF="manual.html#Simple Expressions">Simple Expressions</A><BR>
198<A HREF="manual.html#sin">sin</A><BR>
199<A HREF="manual.html#skips">skips</A><BR>
200<A HREF="manual.html#sqrt">sqrt</A><BR>
201<A HREF="manual.html#statements">statements</A><BR>
202<A HREF="manual.html#_STDERR">_STDERR</A><BR>
203<A HREF="manual.html#_STDIN">_STDIN</A><BR>
204<A HREF="manual.html#_STDOUT">_STDOUT</A><BR>
205<A HREF="manual.html#strfind">strfind</A><BR>
206<A HREF="manual.html#string">string</A><BR>
207<A HREF="manual.html#strlen">strlen</A><BR>
208<A HREF="manual.html#strlower">strlower</A><BR>
209<A HREF="manual.html#strrep">strrep</A><BR>
210<A HREF="manual.html#strsub">strsub</A><BR>
211<A HREF="manual.html#strupper">strupper</A><BR>
212<A HREF="manual.html#sub event">sub event</A><BR>
213<A HREF="manual.html#table">table</A><BR>
214<A HREF="manual.html#Tag Methods">Tag Methods</A><BR>
215<A HREF="manual.html#tag">tag</A><BR>
216<A HREF="manual.html#tag">tag</A><BR>
217<A HREF="manual.html#tan">tan</A><BR>
218<A HREF="manual.html#tmpname">tmpname</A><BR>
219<A HREF="manual.html#tokens">tokens</A><BR>
220<A HREF="manual.html#tonumber">tonumber</A><BR>
221<A HREF="manual.html#tostring">tostring</A><BR>
222<A HREF="manual.html#type">type</A><BR>
223<A HREF="manual.html#Types and Tags">Types and Tags</A><BR>
224<A HREF="manual.html#unm event">unm event</A><BR>
225<A HREF="manual.html#userdata">userdata</A><BR>
226<A HREF="manual.html#vararg">vararg</A><BR>
227<A HREF="manual.html#version 1.1">version 1.1</A><BR>
228<A HREF="manual.html#version 2.1">version 2.1</A><BR>
229<A HREF="manual.html#version 2.2">version 2.2</A><BR>
230<A HREF="manual.html#version 2.4">version 2.4</A><BR>
231<A HREF="manual.html#version 2.5">version 2.5</A><BR>
232<A HREF="manual.html#while-do">while-do</A><BR>
233<A HREF="manual.html#write">write</A><BR>
234<A HREF="manual.html#writeto">writeto</A><BR>
235
236<HR>
237Last update:
238Tue Jul 1 07:55:45 EST 1997
239by <A HREF="http://www.tecgraf.puc-rio.br/~lhf/">lhf</A>.
240</BODY>
241</HTML>
doc/index.html+85−0
@@ -0,0 +1,85 @@
1<HTML>
2<HEAD>
3<TITLE>Lua 3.0 Reference Manual - Index</TITLE>
4</HEAD>
5
6<BODY>
7
8<H1>Reference Manual of the Programming Language Lua 3.0</H1>
9<P>
10<A HREF="http://www.inf.puc-rio.br/~roberto/">Roberto Ierusalimschy</A>,
11<A HREF="http://www2.lncc.br/~lhf/">Luiz Henrique de Figueiredo</A>,
12<A HREF="http://www.graphics.cornell.edu/~celes/">Waldemar Celes</A>
13<BR>
14<A HREF="mailto:lua@tecgraf.puc-rio.br">lua@tecgraf.puc-rio.br</A><BR>
15<A HREF="http://www.tecgraf.puc-rio.br">TeCGraf</A>,
16<A HREF="http://www.inf.puc-rio.br">Computer Science Department</A>,
17<A HREF="http://www.puc-rio.br">PUC-Rio</A>
18<P>
19
20<HR>
21<B>Abstract.</B>
22Lua is an extension programming language designed to be used
23as a configuration language for any program that needs one.
24This document describes version 3.0 of the Lua programming language and
25the API that allows interaction between Lua programs and their host C programs.
26<HR>
27
28<B>Sum�rio.</B>
29Lua � uma linguagem de extens�o projetada para ser usada como
30linguagem de configura��o em qualquer programa que precise de uma.
31Este documento descreve a vers�o 3.0 da linguagem de
32programa��o Lua e a Interface de Programa��o (API) que permite
33a intera��o entre programas Lua e programas C hospedeiros.
34<HR>
35<A NAME="index"></A>
36<UL>
37<LI><A HREF="manual.html#1.">1 - Introduction</A>
38<LI><A HREF="manual.html#2.">2 - Environment and Chunks</A>
39<LI><A HREF="manual.html#3.">3 - Types and Tags</A>
40<LI><A HREF="manual.html#4.">4 - The Language</A>
41 <UL>
42 <LI><A HREF="manual.html#4.1">4.1 - Lexical Conventions</A>
43 <LI><A HREF="manual.html#4.2">4.2 - The Pre-processor</A>
44 <LI><A HREF="manual.html#4.3">4.3 - Coercion</A>
45 <LI><A HREF="manual.html#4.4">4.4 - Adjustment</A>
46 <LI><A HREF="manual.html#4.5">4.5 - Statements</A>
47 <LI><A HREF="manual.html#4.6">4.6 - Expressions</A>
48 <LI><A HREF="manual.html#4.7">4.7 - Function Definitions</A>
49 <LI><A HREF="manual.html#4.8">4.8 - Tag Methods</A>
50 <LI><A HREF="manual.html#4.9">4.9 - Error Handling</A>
51 </UL>
52<LI><A HREF="manual.html#5.">5 - The Application Program Interface</A>
53 <UL>
54 <LI><A HREF="manual.html#5.1">5.1 - Exchanging Values between C and Lua</A>
55 <LI><A HREF="manual.html#5.2">5.2 - Executing Lua Code</A>
56 <LI><A HREF="manual.html#5.3">5.3 - Manipulating Lua Objects</A>
57 <LI><A HREF="manual.html#5.4">5.4 - Calling Lua Functions</A>
58 <LI><A HREF="manual.html#5.5">5.5 - C Functions</A>
59 <LI><A HREF="manual.html#5.6">5.6 - References to Lua Objects</A>
60 </UL>
61<LI><A HREF="manual.html#6.">6 - Predefined Functions and Libraries</A>
62 <UL>
63 <LI><A HREF="manual.html#6.1">6.1 - Predefined Functions</A>
64 <LI><A HREF="manual.html#6.2">6.2 - String Manipulation</A>
65 <LI><A HREF="manual.html#6.3">6.3 - Mathematical Functions</A>
66 <LI><A HREF="manual.html#6.4">6.4 - I/O Facilities</A>
67 </UL>
68<LI><A HREF="manual.html#7.">7 - The Debugger Interface</A>
69 <UL>
70 <LI><A HREF="manual.html#7.1">7.1 - Stack and Function Information</A>
71 <LI><A HREF="manual.html#7.2">7.2 - Manipulating Local Variables</A>
72 <LI><A HREF="manual.html#7.3">7.3 - Hooks</A>
73 </UL>
74<LI><A HREF="manual.html#8.">8 - Lua Stand-alone</A>
75<LI><A HREF="manual.html#Acknowledgments">Acknowledgments</A>
76<LI><A HREF="manual.html#Incompatibilities">Incompatibilities with Previous Versions</A>
77<LI><A HREF="idx.html">Index</A>
78</UL>
79
80<HR>
81Last update:
82Tue Jul 1 07:55:45 EST 1997
83by <A HREF="http://www.tecgraf.puc-rio.br/~lhf/">lhf</A>.
84</BODY>
85</HTML>
doc/luac.html+88−0
@@ -0,0 +1,88 @@
1<!-- manual page source format generated by RosettaMan, -->
2<!-- available via anonymous ftp from ftp.cs.berkeley.edu:/ucb/people/phelps/tcltk/rman.tar.Z -->
3<HTML>
4<HEADER>
5<TITLE>luac manual page</TITLE>
6</HEADER>
7<BODY>
8<A HREF="#toc">Table of Contents</A><P>
9
10<A NAME="sect0" HREF="#toc0"><H2>NAME</H2></A>
11luac - Lua compiler<P>
12
13<A NAME="sect1" HREF="#toc1"><H2>SYNOPSIS</H2></A>
14luac [ -c | -u ] [ -d ] [ -l ] [ -p ] [ -q ] [ -v ] [ -o <I>outputfile</I> ] <I>sourcefile</I> ...<P>
15
16<A NAME="sect2" HREF="#toc2"><H2>DESCRIPTION</H2></A>
17luac is the Lua compiler. It translates programs written in the Lua programming language into binary files that can be loaded and executed with lua_dofile in C or dofile in Lua.<P>
18luac produces a single output file containing the bytecode for all named source files. By default, the output file is named luac.out, but you can change this with the -o option.<P>
19You can use &quot;-&quot; to indicate stdin as a source file.<P>
20luac can also load and list binary files.<P>
21
22<A NAME="sect3" HREF="#toc3"><H2>OPTIONS</H2></A>
23<dl>
24<dt>-c <dd> compile (this is the default).<P>
25</dd>
26</dl>
27<dl>
28<dt>-u <dd> undump.<P>
29</dd>
30</dl>
31<dl>
32<dt>-d <dd> turns debugging on.<P>
33</dd>
34</dl>
35<dl>
36<dt>-l <dd> produces a listing of the compiled bytecode for Lua's virtual machine. This is the default when undumping.<P>
37</dd>
38</dl>
39<dl>
40<dt>-p <dd> parses sources files but does not generate any output file.<P>
41</dd>
42</dl>
43<dl>
44<dt>-q <dd> quiet; procudes no listing. This is the default when compiling.<P>
45</dd>
46</dl>
47<dl>
48<dt>-v <dd> prints version information.<P>
49</dd>
50</dl>
51<dl>
52<dt>-o <I>outputfile</I><dd> Name the output file <I>output</I>, instead of the default luac.out. The output file cannot be a source file.<P>
53</dd>
54</dl>
55
56<A NAME="sect4" HREF="#toc4"><H2>FILES</H2></A>
57<dl>
58<dt>luac.out <dd> default output file<P>
59</dd>
60</dl>
61
62<A NAME="sect5" HREF="#toc5"><H2>SEE ALSO</H2></A>
63<A HREF="http://localhost/cgi-bin/man2html?lua?1">lua(1)</A><P>
64<I>Reference</I> <I>Manual</I> <I>of</I> <I>the</I> <I>Programming</I> <I>Language</I> <I>Lua</I><P>
65
66<A NAME="sect6" HREF="#toc6"><H2>DIAGNOSTICS</H2></A>
67Error messages should be self explanatory.<P>
68
69<A NAME="sect7" HREF="#toc7"><H2>BUGS</H2></A>
70Inherits any bugs from Lua, but Lua has no bugs...<P>
71
72<A NAME="sect8" HREF="#toc8"><H2>AUTHORS</H2></A>
73W. Celes, R. Ierusalimschy &amp; L. H. de Figueiredo (lua@tecgraf.puc-rio.br)<P>
74
75<HR><P>
76<A NAME="toc"><B>Table of Contents</B></A><P>
77<UL>
78<LI><A NAME="toc0" HREF="#sect0">NAME</A></LI>
79<LI><A NAME="toc1" HREF="#sect1">SYNOPSIS</A></LI>
80<LI><A NAME="toc2" HREF="#sect2">DESCRIPTION</A></LI>
81<LI><A NAME="toc3" HREF="#sect3">OPTIONS</A></LI>
82<LI><A NAME="toc4" HREF="#sect4">FILES</A></LI>
83<LI><A NAME="toc5" HREF="#sect5">SEE ALSO</A></LI>
84<LI><A NAME="toc6" HREF="#sect6">DIAGNOSTICS</A></LI>
85<LI><A NAME="toc7" HREF="#sect7">BUGS</A></LI>
86<LI><A NAME="toc8" HREF="#sect8">AUTHORS</A></LI>
87</UL>
88</BODY></HTML>
doc/luac.man+0−75
@@ -1,75 +0,0 @@
1.\" $Id: luac.man,v 1.3 1996/03/28 20:24:55 lhf Exp $
2.TH LUAC 1 "12 March 1996"
3.SH NAME
4luac \- Lua compiler
5.SH SYNOPSIS
6.B luac
7[
8.B \-dlpv
9]
10[
11.B \-o
12.I outputfile
13]
14.I sourcefile
15\&.\|.\|.
16.SH DESCRIPTION
17.B luac
18is the Lua compiler.
19It translates programs written in the Lua programming language
20into binary files that can be loaded and executed with
21.B lua_dofile
22in C or
23.B dofile
24in Lua.
25
26.BR luac
27produces a single output file containing the bytecode
28for all named source files.
29By default,
30the output file is named
31.BR luac.out ,
32but you can change this with the
33.B \-o
34option.
35
36You can use "-" to indicate stdin as a source file.
37.SH OPTIONS
38.LP
39.TP 1i
40.B \-d
41turns debugging on.
42.TP
43.B \-l
44produces a listing of the compiled bytecode for Lua's virtual machine.
45.TP
46.B \-p
47parses sources files but does not generate any output file.
48.TP
49.B \-v
50prints version information.
51.TP
52.BI \-o " outputfile"
53Name the output file
54.IR output ,
55instead of the default
56.BR luac.out .
57The output file cannot be a source file.
58.SH FILES
59.PD 0
60.TP 20
61.B luac.out
62default output file
63.PD
64.SH "SEE ALSO"
65.BR lua (1)
66.LP
67.IR "Reference Manual of the Programming Language Lua"
68.SH DIAGNOSTICS
69Error messages should be self explanatory.
70.SH BUGS
71Inherits any bugs from Lua,
72but Lua has no bugs...
73.SH AUTHORS
74W. Celes, R. Ierusalimschy & L. H. de Figueiredo
75(lua@icad.puc-rio.br)
doc/luac.ps+0−246
@@ -1,246 +0,0 @@
1%!PS-Adobe-3.0
2%%Creator: groff version 1.09
3%%CreationDate: Fri Mar 29 10:45:53 1996
4%%DocumentNeededResources: font Times-Roman
5%%+ font Times-Bold
6%%+ font Times-Italic
7%%DocumentSuppliedResources: procset grops 1.09 0
8%%Pages: 1
9%%PageOrder: Ascend
10%%Orientation: Portrait
11%%EndComments
12%%BeginProlog
13%%BeginResource: procset grops 1.09 0
14/setpacking where{
15pop
16currentpacking
17true setpacking
18}if
19/grops 120 dict dup begin
20/SC 32 def
21/A/show load def
22/B{0 SC 3 -1 roll widthshow}bind def
23/C{0 exch ashow}bind def
24/D{0 exch 0 SC 5 2 roll awidthshow}bind def
25/E{0 rmoveto show}bind def
26/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def
27/G{0 rmoveto 0 exch ashow}bind def
28/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
29/I{0 exch rmoveto show}bind def
30/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def
31/K{0 exch rmoveto 0 exch ashow}bind def
32/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
33/M{rmoveto show}bind def
34/N{rmoveto 0 SC 3 -1 roll widthshow}bind def
35/O{rmoveto 0 exch ashow}bind def
36/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def
37/Q{moveto show}bind def
38/R{moveto 0 SC 3 -1 roll widthshow}bind def
39/S{moveto 0 exch ashow}bind def
40/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def
41/SF{
42findfont exch
43[exch dup 0 exch 0 exch neg 0 0]makefont
44dup setfont
45[exch/setfont cvx]cvx bind def
46}bind def
47/MF{
48findfont
49[5 2 roll
500 3 1 roll
51neg 0 0]makefont
52dup setfont
53[exch/setfont cvx]cvx bind def
54}bind def
55/level0 0 def
56/RES 0 def
57/PL 0 def
58/LS 0 def
59/PLG{
60gsave newpath clippath pathbbox grestore
61exch pop add exch pop
62}bind def
63/BP{
64/level0 save def
651 setlinecap
661 setlinejoin
6772 RES div dup scale
68LS{
6990 rotate
70}{
710 PL translate
72}ifelse
731 -1 scale
74}bind def
75/EP{
76level0 restore
77showpage
78}bind def
79/DA{
80newpath arcn stroke
81}bind def
82/SN{
83transform
84.25 sub exch .25 sub exch
85round .25 add exch round .25 add exch
86itransform
87}bind def
88/DL{
89SN
90moveto
91SN
92lineto stroke
93}bind def
94/DC{
95newpath 0 360 arc closepath
96}bind def
97/TM matrix def
98/DE{
99TM currentmatrix pop
100translate scale newpath 0 0 .5 0 360 arc closepath
101TM setmatrix
102}bind def
103/RC/rcurveto load def
104/RL/rlineto load def
105/ST/stroke load def
106/MT/moveto load def
107/CL/closepath load def
108/FL{
109currentgray exch setgray fill setgray
110}bind def
111/BL/fill load def
112/LW/setlinewidth load def
113/RE{
114findfont
115dup maxlength 1 index/FontName known not{1 add}if dict begin
116{
1171 index/FID ne{def}{ pop pop}ifelse
118}forall
119/Encoding exch def
120dup/FontName exch def
121currentdict end definefont pop
122}bind def
123/DEFS 0 def
124/EBEGIN{
125moveto
126DEFS begin
127}bind def
128/EEND/end load def
129/CNT 0 def
130/level1 0 def
131/PBEGIN{
132/level1 save def
133translate
134div 3 1 roll div exch scale
135neg exch neg exch translate
1360 setgray
1370 setlinecap
1381 setlinewidth
1390 setlinejoin
14010 setmiterlimit
141[] 0 setdash
142/setstrokeadjust where{
143pop
144false setstrokeadjust
145}if
146/setoverprint where{
147pop
148false setoverprint
149}if
150newpath
151/CNT countdictstack def
152userdict begin
153/showpage{} def
154}bind def
155/PEND{
156clear
157countdictstack CNT sub{end}repeat
158level1 restore
159}bind def
160end def
161/setpacking where{
162pop
163setpacking
164}if
165%%EndResource
166%%IncludeResource: font Times-Roman
167%%IncludeResource: font Times-Bold
168%%IncludeResource: font Times-Italic
169grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72
170def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron
171/scaron/zcaron/Ydieresis/trademark/quotesingle/.notdef/.notdef/.notdef
172/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
173/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
174/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent
175/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen
176/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon
177/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
178/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex
179/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y
180/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft
181/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl
182/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut
183/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash
184/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen
185/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft
186/logicalnot/minus/registered/macron/degree/plusminus/twosuperior
187/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior
188/ordmasculine/guilsinglright/onequarter/onehalf/threequarters
189/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
190/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex
191/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis
192/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
193/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
194/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
195/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash
196/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
197/Times-Italic@0 ENC0/Times-Italic RE/Times-Bold@0 ENC0/Times-Bold RE
198/Times-Roman@0 ENC0/Times-Roman RE
199%%EndProlog
200%%Page: 1 1
201%%BeginPageSetup
202BP
203%%EndPageSetup
204/F0 10/Times-Roman@0 SF(LU)72 48 Q -.034 -.4(AC \( 1 \))-.4 H
205(User Commands)157.852 E(LU)157.452 E -.034 -.4(AC \( 1 \))-.4 H/F1 9
206/Times-Bold@0 SF -.18(NA)72 96 S(ME).18 E F0(luac \255 Lua compiler)108
207108 Q F1(SYNOPSIS)72 124.8 Q/F2 10/Times-Bold@0 SF(luac)108 136.8 Q F0
208([)3.75 E F2(\255dlpv)3.75 E F0 3.75(][)3.75 G F2<ad6f>A/F3 10
209/Times-Italic@0 SF(output\214le)3.75 E F0(])3.75 E F3(sour)3.75 E
210(ce\214le)-.37 E F0 1.666(...)3.75 G F1(DESCRIPTION)72 153.6 Q F2(luac)
211108 165.6 Q F0 .371(is the Lua compiler)2.871 F 5.371(.I)-.55 G 2.871
212(tt)-5.371 G .37(ranslates programs written in the Lua programming lang\
213uage into binary \214les)-2.871 F(that can be loaded and e)108 177.6 Q
214-.15(xe)-.15 G(cuted with).15 E F2(lua_do\214le)2.5 E F0(in C or)2.5 E
215F2(do\214le)2.5 E F0(in Lua.)2.5 E F2(luac)108 201.6 Q F0 .159(produces\
216 a single output \214le containing the bytecode for all named source \
217\214les.)2.658 F .159(By def)5.159 F .159(ault, the output)-.1 F
218(\214le is named)108 213.6 Q F2(luac.out)2.5 E F0 2.5(,b)C
219(ut you can change this with the)-2.7 E F2<ad6f>2.5 E F0(option.)2.5 E
220-1.1(Yo)108 237.6 S 2.5(uc)1.1 G
221(an use "-" to indicate stdin as a source \214le.)-2.5 E F1(OPTIONS)72
222254.4 Q F2<ad64>108 266.4 Q F0(turns deb)60.74 E(ugging on.)-.2 E F2
223<ad6c>108 283.2 Q F0
224(produces a listing of the compiled bytecode for Lua')63.52 E 2.5(sv)
225-.55 G(irtual machine.)-2.5 E F2<ad70>108 300 Q F0
226(parses sources \214les b)60.74 E(ut does not generate an)-.2 E 2.5(yo)
227-.15 G(utput \214le.)-2.5 E F2<ad76>108 316.8 Q F0(prints v)61.3 E
228(ersion information.)-.15 E F2<ad6f>108 333.6 Q F3(output\214le)2.5 E F0
229.657(Name the output \214le)21.02 F F3(output)3.157 E F0 3.157(,i)C .657
230(nstead of the def)-3.157 F(ault)-.1 E F2(luac.out)3.157 E F0 5.657(.T)C
231.656(he output \214le cannot be a)-5.657 F(source \214le.)180 345.6 Q F1
232(FILES)72 362.4 Q F2(luac.out)108 374.4 Q F0(def)65.83 E
233(ault output \214le)-.1 E F1(SEE ALSO)72 391.2 Q F2(lua)108 403.2 Q F0
234(\(1\))A F3(Refer)108 420 Q(ence Manual of the Pr)-.37 E -.1(og)-.45 G
235-.15(ra).1 G(mming Langua).15 E .2 -.1(ge L)-.1 H(ua).1 E F1(DIA)72
236436.8 Q(GNOSTICS)-.495 E F0(Error messages should be self e)108 448.8 Q
237(xplanatory)-.15 E(.)-.65 E F1 -.09(BU)72 465.6 S(GS).09 E F0
238(Inherits an)108 477.6 Q 2.5(yb)-.15 G(ugs from Lua, b)-2.7 E
239(ut Lua has no b)-.2 E(ugs...)-.2 E F1 -.45(AU)72 494.4 S(THORS).45 E F0
2401.84 -.92(W. C)108 506.4 T(eles, R. Ierusalimsch).92 E 2.5(y&L)-.05 G
2412.5(.H)-2.5 G 2.5(.d)-2.5 G 2.5(eF)-2.5 G
242(igueiredo \(lua@icad.puc-rio.br\))-2.5 E(29 March 1996)72 768 Q
243(12 March 1996)142.35 E(1)198.45 E EP
244%%Trailer
245end
246%%EOF
doc/luac.txt+0−66
@@ -1,66 +0,0 @@
1
2
3
4LUAC(1) User Commands LUAC(1)
5
6
7
8NAME
9 luac - Lua compiler
10
11SYNOPSIS
12 luac [ -dlpv ] [ -o outputfile ] sourcefile ...
13
14DESCRIPTION
15 luac is the Lua compiler. It translates programs written in
16 the Lua programming language into binary files that can be
17 loaded and executed with lua_dofile in C or dofile in Lua.
18
19 luac produces a single output file containing the bytecode
20 for all named source files. By default, the output file is
21 named luac.out, but you can change this with the -o option.
22
23 You can use "-" to indicate stdin as a source file.
24
25OPTIONS
26 -d turns debugging on.
27
28 -l produces a listing of the compiled bytecode for
29 Lua's virtual machine.
30
31 -p parses sources files but does not generate any
32 output file.
33
34 -v prints version information.
35
36 -o outputfile
37 Name the output file output, instead of the
38 default luac.out. The output file cannot be a
39 source file.
40
41FILES
42 luac.out default output file
43
44SEE ALSO
45 lua(1)
46
47 Reference Manual of the Programming Language Lua
48
49DIAGNOSTICS
50 Error messages should be self explanatory.
51
52BUGS
53 Inherits any bugs from Lua, but Lua has no bugs...
54
55AUTHORS
56 W. Celes, R. Ierusalimschy & L. H. de Figueiredo
57 (lua@icad.puc-rio.br)
58
59
60
61
62
63Formatted 96/03/29 12 March 1996 1
64
65
66
doc/manual.html+2545−0
@@ -0,0 +1,2545 @@
1<HEAD>
2<TITLE>Lua 3.0 Reference Manual</TITLE>
3</HEAD>
4<BODY>
5<h1>Lua 3.0 Reference Manual</h1>
6
7<!-- ====================================================================== -->
8<HR>
9<A NAME="1."></A>
10<H1>1 - Introduction</H1>
11<P>
12Lua is an extension programming language designed to support
13general procedural programming with data description
14facilities.
15It is intended to be used as a light-weight, but powerful,
16configuration language for any program that needs one.
17Lua has been designed and implemented by
18W.&nbsp;Celes,
19R.&nbsp;Ierusalimschy and
20L.&nbsp;H.&nbsp;de Figueiredo.
21<P>
22Lua is implemented as a library, written in C.
23Being an extension language, Lua has no notion of a ``main'' program:
24it only works <EM>embedded</EM> in a host client,
25called the <EM>embedding</EM> program.
26This host program can invoke functions to execute a piece of
27code in Lua, can write and read Lua variables,
28and can register C functions to be called by Lua code.
29Through the use of C functions, Lua can be augmented to cope with
30a wide range of different domains,
31thus creating customized programming languages sharing a syntactical framework.
32<P>
33Lua is free-distribution software,
34and provided as usual with no guarantees,
35as stated in the copyright notice in the front page of this manual.
36The implementation described in this manual is available
37at the following URL's:
38<LISTING>
39 <A HREF="http://www.tecgraf.puc-rio.br/lua/">http://www.tecgraf.puc-rio.br/lua/</A>
40 <A HREF="ftp://ftp.tecgraf.puc-rio.br/pub/lua/lua.tar.gz">ftp://ftp.tecgraf.puc-rio.br/pub/lua/lua.tar.gz</A>
41</LISTING>
42<P>
43<P>
44<!-- ====================================================================== -->
45<HR>
46<A NAME="2."></A>
47<H1>2 - Environment and Chunks</H1>
48<P>
49All statements in Lua are executed in a <A NAME="global environment"><EM>global environment</EM></A>.
50This environment, which keeps all global variables and functions,
51is initialized at the beginning of the embedding program and
52persists until its end.
53<P>
54The global environment can be manipulated by Lua code or
55by the embedding program,
56which can read and write global variables
57using functions in the library that implements Lua.
58<P>
59<A NAME="Global variables">Global variables</A> do not need declaration.
60Any variable is assumed to be global unless explicitly declared local
61(see Section&nbsp;<A HREF="#localvar">4.5.5</A>).
62Before the first assignment, the value of a global variable is <B>nil</B>;
63this default can be changed (see Section&nbsp;<A HREF="#tag-method">4.8</A>).
64<P>
65The unit of execution of Lua is called a <A NAME="chunk"><EM>chunk</EM></A>.
66The syntax
67\footnote{As usual, {<EM>a</EM>} means 0 or more <EM>a</EM>'s,
68[<EM>a</EM>] means an optional <EM>a</EM> and ('<EM>a</EM>)+ means
69one or more <EM>a</EM>'s.}
70for chunks is:
71<LISTING>
72chunk ::= {stat | function} [ret]
73</LISTING>
74A chunk may contain statements and function definitions,
75and may be in a file or in a string inside the host program.
76A chunk may optionally end with a <CODE>return</CODE> statement (see Section&nbsp;<A HREF="#return">4.5.3</A>).
77When a chunk is executed, first all its functions and statements are compiled,
78then the statements are executed in sequential order.
79All modifications a chunk effects on the global environment persist
80after its end.
81Those include modifications to global variables and definitions
82of new functions
83\footnote{Actually, a function definition is an
84assignment to a global variable (see Section&nbsp;<A HREF="#TypesSec">3</A>).}.
85<P>
86Chunks may be pre-compiled into binary form;
87see program <A NAME="luac"><TT>luac</TT></A> for details.
88Text files with chunks and their binary pre-compiled forms
89are interchangeable.
90Lua automatically detects the file type and acts accordingly.
91<A NAME="pre-compilation"></A>
92<P>
93<A NAME="TypesSec"></A>
94<!-- ====================================================================== -->
95<HR>
96<A NAME="3."></A>
97<H1>3 - Types and Tags</H1>
98<P>
99Lua is a dynamically typed language.
100Variables do not have types; only values do.
101Therefore, there are no type definitions in the language.
102All values carry their own type.
103Besides a type, all values also have a <A NAME="tag">tag</A>.
104<P>
105There are six <A NAME="basic types">basic types</A> in Lua: <A NAME="nil"><EM>nil</EM></A>, <A NAME="number"><EM>number</EM></A>,
106<A NAME="string"><EM>string</EM></A>, <A NAME="function"><EM>function</EM></A>, <A NAME="userdata"><EM>userdata</EM></A>, and <A NAME="table"><EM>table</EM></A>.
107<EM>Nil</EM> is the type of the value <B>nil</B>,
108whose main property is to be different from any other value.
109<EM>Number</EM> represents real (floating-point) numbers,
110while <EM>string</EM> has the usual meaning.
111The function <CODE>type</CODE> returns a string describing the type
112of a given value (see Section&nbsp;<A HREF="#pdf-type">6.1</A>).
113<P>
114Functions are considered first-class values in Lua.
115This means that functions can be stored in variables,
116passed as arguments to other functions and returned as results.
117When a function is defined in Lua, its body is compiled and stored
118in a given variable.
119Lua can call (and manipulate) functions written in Lua and
120functions written in C.
121They can be distinguished by their tags:
122all Lua functions have the same tag,
123and all C functions have the same tag,
124which is different from the tag of a Lua function.
125<P>
126The type <EM>userdata</EM> is provided to allow
127arbitrary <A NAME="C pointers">C pointers</A> to be stored in Lua variables.
128It corresponds to a <CODE>void*</CODE> and has no pre-defined operations in Lua,
129besides assignment and equality test.
130However, by using <EM>tag methods</EM>,
131the programmer may define operations for <EM>userdata</EM> values
132(see Section&nbsp;<A HREF="#tag-method">4.8</A>).
133<P>
134The type <EM>table</EM> implements <A NAME="associative arrays">associative arrays</A>,
135that is, <A NAME="arrays">arrays</A> that can be indexed not only with numbers,
136but with any value (except <B>nil</B>).
137Therefore, this type may be used not only to represent ordinary arrays,
138but also symbol tables, sets, records, etc.
139To represent <A NAME="records">records</A>, Lua uses the field name as an index.
140The language supports this representation by
141providing <CODE>a.name</CODE> as syntactic sugar for <CODE>a["name"]</CODE>.
142Tables may also carry methods.
143Because functions are first class values,
144table fields may contain functions.
145The form <CODE>t:f(x)</CODE> is syntactic sugar for <CODE>t.f(t,x)</CODE>,
146which calls the method <CODE>f</CODE> from the table <CODE>t</CODE> passing
147itself as the first parameter (see Section&nbsp;<A HREF="#func-def">4.7</A>).
148<P>
149It is important to notice that tables are <EM>objects</EM>, and not values.
150Variables cannot contain tables, only <EM>references</EM> to them.
151Assignment, parameter passing and returns always manipulate references
152to tables, and do not imply any kind of copy.
153Moreover, tables must be explicitly created before used
154(see Section&nbsp;<A HREF="#tableconstructor">4.6.7</A>).
155<P>
156Tags are mainly used to select tag methods when
157some events occur (see Section&nbsp;<A HREF="#tag-method">4.8</A>).
158Each of the types nil, number and string has a different tag.
159All values of each of these types have this same pre-defined tag.
160Values of type function can have two different tags,
161depending on whether they are Lua or C functions.
162Finally,
163values of type userdata and table can have
164as many different tags as needed (see Section&nbsp;<A HREF="#tag-method">4.8</A>).
165Tags are created with the function <CODE>newtag</CODE>,
166and the function <CODE>tag</CODE> returns the tag of a given value.
167To change the tag of a given table,
168there is the function <CODE>settag</CODE> (see Section&nbsp;<A HREF="#pdf-newtag">6.1</A>).
169<P>
170<P>
171<!-- ====================================================================== -->
172<HR>
173<A NAME="4."></A>
174<H1>4 - The Language</H1>
175<P>
176This section describes the lexis, the syntax and the semantics of Lua.
177<P>
178<P>
179<A NAME="lexical"></A>
180<A NAME="4.1"></A>
181<H2>4.1 - Lexical Conventions</H2>
182<P>
183Lua is a case-sensitive language.
184<A NAME="Identifiers">Identifiers</A> can be any string of letters, digits, and underscores,
185not beginning with a digit.
186The following words are reserved, and cannot be used as identifiers:
187<A NAME="reserved words"></A>
188<LISTING>
189 and do else elseif
190 end function if local
191 nil not or repeat
192 return then until while
193</LISTING>
194<P>
195The following strings denote other <A NAME="tokens">tokens</A>:
196<LISTING>
197 ~= &lt;= &gt;= &lt; &gt; == = .. + - * /
198 % ( ) { } [ ] ; , . ...
199</LISTING>
200<P>
201<A NAME="Literal strings">Literal strings</A> can be delimited by matching single or double quotes,
202and can contain the C-like escape sequences
203<CODE>'\n'</CODE>, <CODE>'\t'</CODE> and <CODE>'\r'</CODE>.
204Literal strings can also be delimited by matching <CODE>[[ ... ]]</CODE>.
205Literals in this bracketed form may run for several lines,
206may contain nested <CODE>[[ ... ]]</CODE> pairs,
207and do not interpret escape sequences.
208This form is specially convenient for
209handling strings that contain program pieces or
210other quoted strings.
211<P>
212<A NAME="Comments">Comments</A> start anywhere outside a string with a
213double hyphen (<CODE>--</CODE>) and run until the end of the line.
214Moreover,
215the first line of a chunk file is skipped if it starts with <CODE>#</CODE>
216\footnote{This facility allows the use of Lua as a script interpreter
217in Unix systems (see Section&nbsp;<A HREF="#lua-sa">8</A>).}.
218<P>
219<A NAME="Numerical constants">Numerical constants</A> may be written with an optional decimal part,
220and an optional decimal exponent.
221Examples of valid numerical constants are:
222<LISTING>
223 4 4.0 0.4 4.57e-3 0.3e12
224</LISTING>
225<P>
226<A NAME="pre-processor"></A>
227<A NAME="4.2"></A>
228<H2>4.2 - The Pre-processor</H2>
229<P>
230All lines that start with a <CODE>$</CODE> are handled by a pre-processor.
231The <CODE>$</CODE> can be followed by any of the following directives:
232<DL>
233<DT><B><TT>debug</TT></B><DD> - turn on some debugging facilities (see Section&nbsp;<A HREF="#pragma">4.9</A>).
234<DT><B><TT>nodebug</TT></B><DD> - turn off some debugging facilities (see Section&nbsp;<A HREF="#pragma">4.9</A>).
235<DT><B><TT>if <EM>cond</TT></EM></B><DD> - starts a conditional part.
236If <EM>cond</EM> is false, then this part is skipped by the lexical analyzer.
237<DT><B><TT>ifnot <EM>cond</TT></EM></B><DD> - starts a conditional part.
238If <EM>cond</EM> is true, then this part is skipped by the lexical analyzer.
239<DT><B><TT>end</TT></B><DD> - ends a conditional part.
240<DT><B><TT>else</TT></B><DD> - starts an ``else'' conditional part,
241switching the ``skip'' status.
242<DT><B><TT>endinput</TT></B><DD> - ends the lexical parse of the file.
243</DL>
244<P>
245Directives can be freely nested.
246Particularly, a <CODE>$endinput</CODE> may occur inside a <CODE>$if</CODE>;
247in that case, even the matching <CODE>$end</CODE> is not parsed.
248<P>
249A <EM>cond</EM> part may be:
250<DL>
251<DT><B><TT>nil</TT></B><DD> - always false.
252<DT><B><TT>1</TT></B><DD> - always true.
253<DT><B><EM>name</EM></B><DD> - true if the value of the
254global variable <EM>name</EM> is different from <B>nil</B>.
255Notice that <EM>name</EM> is evaluated before the chunk starts its execution.
256Therefore, actions in a chunk do not affect its own conditional directives.
257</DL>
258<P>
259<A NAME="coercion"></A>
260<A NAME="4.3"></A>
261<H2>4.3 - Coercion</H2>
262<P>
263Lua provides some automatic conversions between values.
264Any arithmetic operation applied to a string tries to convert
265that string to a number, following the usual rules.
266Conversely, whenever a number is used when a string is expected,
267that number is converted to a string, according to the following rule:
268if the number is an integer, it is written without exponent or decimal point;
269otherwise, it is formatted following the <CODE>%g</CODE>
270conversion specification of the <CODE>printf</CODE> function in the
271standard C library.
272For complete control on how numbers are converted to strings,
273use the <CODE>format</CODE> function (see Section&nbsp;<A HREF="#format">6.2</A>).
274<P>
275<P>
276<A NAME="adjust"></A>
277<A NAME="4.4"></A>
278<H2>4.4 - Adjustment</H2>
279<P>
280Functions in Lua can return many values.
281Because there are no type declarations,
282the system does not know how many values a function will return,
283or how many parameters it needs.
284Therefore, sometimes, a list of values must be <EM>adjusted</EM>, at run time,
285to a given length.
286If there are more values than are needed, then the last values are thrown away.
287If there are more needs than values, then the list is extended with as
288many <B>nil</B>'s as needed.
289Adjustment occurs in multiple assignment and function calls.
290<P>
291<P>
292<A NAME="4.5"></A>
293<H2>4.5 - Statements</H2>
294<P>
295Lua supports an almost conventional set of <A NAME="statements">statements</A>,
296similar to those in Pascal or C.
297The conventional commands include
298assignment, control structures and procedure calls.
299Non-conventional commands include table constructors
300(see Section&nbsp;<A HREF="#tableconstructor">4.6.7</A>),
301and local variable declarations (see Section&nbsp;<A HREF="#localvar">4.5.5</A>).
302<P>
303<H3>4.5.1 - Blocks</H3>
304A <A NAME="block">block</A> is a list of statements, which are executed sequentially.
305Any statement can be optionally followed by a semicolon:
306<LISTING>
307block ::= {stat sc} [ret]
308sc ::= ['<B>;</B>']
309</LISTING>
310For syntactic reasons, a <A NAME="return"><TT>return</TT></A> statement can only be written
311as the last statement of a block.
312This restriction also avoids some ``statement not reached'' conditions.
313<P>
314<A NAME="assignment"></A>
315<H3>4.5.2 - <A NAME="Assignment</H3>">Assignment</H3></A>
316The language allows <A NAME="multiple assignment">multiple assignment</A>.
317Therefore, the syntax for assignment
318defines a list of variables on the left side,
319and a list of expressions on the right side.
320Both lists have their elements separated by commas:
321<LISTING>
322stat ::= varlist1 '<B>=</B>' explist1
323varlist1 ::= var {'<B>,</B>' var}
324</LISTING>
325This statement first evaluates all values on the right side
326and eventual indices on the left side,
327and then makes the assignments.
328Therefore, it can be used to exchange two values, as in
329<LISTING>
330 x, y = y, x
331</LISTING>
332The two lists may have different lengths.
333Before the assignment, the list of values is <EM>adjusted</EM> to
334the length of the list of variables (see Section&nbsp;<A HREF="#adjust">4.4</A>).
335<P>
336A single name can denote a global or a local variable,
337or a formal parameter:
338<LISTING>
339var ::= name
340</LISTING>
341Square brackets are used to index a table:
342<LISTING>
343var ::= var '<B>[</B>' exp1 '<B>]</B>'
344</LISTING>
345The <CODE>var</CODE> should result in a table value,
346where the field indexed by the expression value gets the assigned value.
347<P>
348The meaning of assignments and evaluations of global variables and
349indexed variables can be changed by tag methods (see Section&nbsp;<A HREF="#tag-method">4.8</A>).
350Actually,
351an assignment <CODE>x = val</CODE>, where <CODE>x</CODE> is a global variable,
352is equivalent to a call <CODE>setglobal('x', val)</CODE>;
353an assignment <CODE>t[i] = val</CODE> is equivalent to
354<CODE>settable_event(t, i, val)</CODE>.
355See Section&nbsp;<A HREF="#tag-method">4.8</A> for a description of these functions
356\footnote{Function <CODE>setglobal</CODE> is pre-defined in Lua.
357Function <TT>settable_event</TT> is used only for explanation purposes.}.
358<P>
359The syntax <CODE>var.NAME</CODE> is just syntactic sugar for
360<CODE>var["NAME"]</CODE>:
361<LISTING>
362var ::= var '<B>.</B>' name
363</LISTING>
364<P>
365<H3>4.5.3 - Control Structures</H3>
366The <A NAME="condition expression">condition expression</A> of a control structure may return any value.
367All values different from <B>nil</B> are considered true;
368only <B>nil</B> is considered false.
369<TT>if</TT>'s, <TT>while</TT>'s and <TT>repeat</TT>'s have the usual meaning.
370<P>
371<A NAME="while-do"></A><A NAME="repeat-until"></A><A NAME="if-then-else"></A>
372<LISTING>
373stat ::= <B>while</B> exp1 <B>do</B> block <B>end</B> <BR> | <B>repeat</B> block <B>until</B> exp1 <BR> | <B>if</B> exp1 <B>then</B> block {elseif} [<B>else</B> block] <B>end</B>
374elseif ::= <B>elseif</B> exp1 <B>then</B> block
375</LISTING>
376<P>
377A <TT>return</TT> is used to return values from a function or a chunk.
378<A NAME="return"></A>
379
380Because they may return more than one value,
381the syntax for a <A NAME="return statement">return statement</A> is:
382<LISTING>
383ret ::= <B>return</B> [explist1] [sc]
384</LISTING>
385<P>
386<A NAME="funcstat"></A>
387<H3>4.5.4 - Function Calls as Statements</H3>
388Because of possible side-effects,
389function calls can be executed as statements:
390<LISTING>
391stat ::= functioncall
392</LISTING>
393In this case, returned values are thrown away.
394Function calls are explained in Section&nbsp;<A HREF="#functioncall">4.6.8</A>.
395<P>
396<A NAME="localvar"></A>
397<H3>4.5.5 - Local Declarations</H3>
398<A NAME="Local variables">Local variables</A> may be declared anywhere inside a block.
399Their scope begins after the declaration and lasts until the
400end of the block.
401The declaration may include an initial assignment:
402<LISTING>
403stat ::= <B>local</B> declist [init]
404declist ::= name {'<B>,</B>' name}
405init ::= '<B>=</B>' explist1
406</LISTING>
407If present, an initial assignment has the same semantics
408of a multiple assignment.
409Otherwise, all variables are initialized with <B>nil</B>.
410<P>
411<P>
412<A NAME="4.6"></A>
413<H2>4.6 - Expressions</H2>
414<P>
415<H3>4.6.1 - <A NAME="Simple Expressions</H3>">Simple Expressions</H3></A>
416Simple expressions are:
417<LISTING>
418exp ::= '<B>(</B>' exp '<B>)</B>'
419exp ::= <B>nil</B>
420exp ::= '<B>number</B>'
421exp ::= '<B>literal</B>'
422exp ::= var
423</LISTING>
424Numbers (numerical constants) and
425string literals are explained in Section&nbsp;<A HREF="#lexical">4.1</A>.
426Variables are explained in Section&nbsp;<A HREF="#assignment">4.5.2</A>.
427<P>
428An access to a global variable <CODE>x</CODE> is equivalent to a
429call <CODE>getglobal('x')</CODE>;
430an access to an indexed variable <CODE>t[i]</CODE> is equivalent to
431a call <CODE>gettable_event(t, i)</CODE>.
432See Section&nbsp;<A HREF="#tag-method">4.8</A> for a description of these functions
433\footnote{Function <CODE>getglobal</CODE> is pre-defined in Lua.
434Function <TT>gettable_event</TT> is used only for explanation purposes.}.
435<P>
436The non-terminal <EM>exp1</EM> is used to indicate that the values
437returned by an expression must be adjusted to one single value:
438<LISTING>
439exp1 ::= exp
440</LISTING>
441<P>
442<H3>4.6.2 - Arithmetic Operators</H3>
443Lua supports the usual <A NAME="arithmetic operators">arithmetic operators</A>:
444the binary <CODE>+</CODE> (addition),
445<CODE>-</CODE> (subtraction), <CODE>*</CODE> (multiplication),
446<CODE>/</CODE> (division) and <CODE>^</CODE> (exponentiation),
447and unary <CODE>-</CODE> (negation).
448If the operands are numbers, or strings that can be converted to
449numbers, according to the rules given in Section&nbsp;<A HREF="#coercion">4.3</A>,
450then all operations except exponentiation have the usual meaning.
451Otherwise, an appropriate tag method is called (see Section&nbsp;<A HREF="#tag-method">4.8</A>).
452An exponentiation always calls a tag method.
453The standard mathematical library redefines this method for numbers,
454giving the expected meaning to <A NAME="exponentiation">exponentiation</A>
455(see Section&nbsp;<A HREF="#mathlib">6.3</A>).
456<P>
457<H3>4.6.3 - Relational Operators</H3>
458Lua provides the following <A NAME="relational operators">relational operators</A>:
459<LISTING>
460 &lt; &gt; &lt;= &gt;= ~= ==
461</LISTING>
462All these return <B>nil</B> as false and a value different from <B>nil</B> as true.
463<P>
464Equality first compares the types of its operands.
465If they are different, then the result is <B>nil</B>.
466Otherwise, their values are compared.
467Numbers and strings are compared in the usual way.
468Tables, userdata and functions are compared by reference,
469that is, two tables are considered equal only if they are the same table.
470The operator <CODE>~=</CODE> is exactly the negation of equality (<CODE>==</CODE>).
471Note that the conversion rules of Section&nbsp;<A HREF="#coercion">4.3</A>
472<EM>do not</EM> apply to equality comparisons.
473Thus, <CODE>"0"==0</CODE> evaluates to false.
474<P>
475The other operators work as follows.
476If both arguments are numbers, then they are compared as such.
477Otherwise, if both arguments are strings,
478their values are compared using lexicographical order.
479Otherwise, the ``order'' tag method is called (see Section&nbsp;<A HREF="#tag-method">4.8</A>).
480<P>
481<H3>4.6.4 - Logical Operators</H3>
482Like control structures, all logical operators
483consider <B>nil</B> as false and anything else as true.
484The <A NAME="logical operators">logical operators</A> are:
485<A NAME="and"></A><A NAME="or"></A><A NAME="not"></A>
486<LISTING>
487 and or not
488</LISTING>
489The operator <CODE>and</CODE> returns <B>nil</B> if its first argument is <B>nil</B>;
490otherwise, it returns its second argument.
491The operator <CODE>or</CODE> returns its first argument
492if it is different from <B>nil</B>;
493otherwise, it returns its second argument.
494Both <CODE>and</CODE> and <CODE>or</CODE> use <A NAME="short-cut evaluation">short-cut evaluation</A>,
495that is,
496the second operand is evaluated only when necessary.
497<P>
498<H3>4.6.5 - Concatenation</H3>
499Lua offers a string <A NAME="concatenation">concatenation</A> operator,
500denoted by ``<A NAME=".."><TT>..</TT></A>''.
501If operands are strings or numbers, then they are converted to
502strings according to the rules in Section&nbsp;<A HREF="#coercion">4.3</A>.
503Otherwise, the ``concat'' tag method is called (see Section&nbsp;<A HREF="#tag-method">4.8</A>).
504<P>
505<H3>4.6.6 - Precedence</H3>
506<A NAME="Operator precedence">Operator precedence</A> follows the table below,
507from the lower to the higher priority:
508<LISTING>
509 and or
510 &lt; &gt; &lt;= &gt;= ~= ==
511 ..
512 + -
513 * /
514 not - (unary)
515 ^
516</LISTING>
517All binary operators are left associative,
518except for <CODE>^</CODE> (exponentiation),
519which is right associative.
520<P>
521<A NAME="tableconstructor"></A>
522<H3>4.6.7 - Table Constructors</H3>
523Table <A NAME="constructors">constructors</A> are expressions that create tables;
524every time a constructor is evaluated, a new table is created.
525Constructors can be used to create empty tables,
526or to create a table and initialize some fields.
527<P>
528The general syntax for constructors is:
529<LISTING>
530tableconstructor ::= '<B>{</B>' fieldlist '<B>}</B>'
531fieldlist ::= lfieldlist | ffieldlist | lfieldlist '<B>;</B>' ffieldlist
532lfieldlist ::= [lfieldlist1]
533ffieldlist ::= [ffieldlist1]
534</LISTING>
535<P>
536The form <EM>lfieldlist1</EM> is used to initialize lists.
537<LISTING>
538lfieldlist1 ::= exp {'<B>,</B>' exp} ['<B>,</B>']
539</LISTING>
540The expressions in the list are assigned to consecutive numerical indices,
541starting with 1.
542For example:
543<LISTING>
544 a = {"v1", "v2", 34}
545</LISTING>
546is essentially equivalent to:
547<LISTING>
548 temp = {}
549 temp[1] = "v1"
550 temp[2] = "v2"
551 temp[3] = 34
552 a = temp
553</LISTING>
554<P>
555The form <EM>ffieldlist1</EM> initializes other fields in a table:
556<LISTING>
557ffieldlist1 ::= ffield {'<B>,</B>' ffield} ['<B>,</B>']
558ffield ::= '<B>[</B>' exp '<B>]</B>' \ter {= exp | name '<B>=</B>' exp}
559</LISTING>
560For example:
561<LISTING>
562 a = {[f(k)] = g(y), x = 1, y = 3, [0] = b+c}
563</LISTING>
564is essentially equivalent to:
565<LISTING>
566 temp = {}
567 temp[f(k)] = g(y)
568 temp.x = 1 -- or temp["x"] = 1
569 temp.y = 3 -- or temp["y"] = 3
570 temp[0] = b+c
571 a = temp
572</LISTING>
573An expression like <CODE>{x = 1, y = 4}</CODE> is
574in fact syntactic sugar for <CODE>{["x"] = 1, ["y"] = 4}</CODE>.
575<P>
576<A NAME="functioncall"></A>
577<H3>4.6.8 - Function Calls</H3>
578A <A NAME="function call">function call</A> has the following syntax:
579<LISTING>
580functioncall ::= var realParams
581</LISTING>
582Here, <EM>var</EM> can be any variable (global, local, indexed, etc).
583If its value has type <EM>function</EM>,
584then this function is called.
585Otherwise, the ``function'' tag method is called,
586having as first parameter the value of <EM>var</EM>,
587and then the original call parameters.
588<P>
589The form:
590<LISTING>
591functioncall ::= var '<B>:</B>' name realParams
592</LISTING>
593can be used to call ``methods''.
594A call <CODE>var:name(...)</CODE>
595is syntactic sugar for
596<LISTING>
597 var.name(var, ...)
598</LISTING>
599except that <CODE>var</CODE> is evaluated only once.
600<P>
601<LISTING>
602realParams ::= '<B>(</B>' [explist1] '<B>)</B>'
603realParams ::= tableconstructor
604explist1 ::= exp1 {'<B>,</B>' exp1}
605</LISTING>
606All argument expressions are evaluated before the call.
607A call of the form <CODE>f{...}</CODE> is syntactic sugar for
608<CODE>f({...})</CODE>, that is,
609the parameter list is a single new table.
610<P>
611Because a function can return any number of results
612(see Section&nbsp;<A HREF="#return">4.5.3</A>),
613the number of results must be adjusted before used.
614If the function is called as a statement (see Section&nbsp;<A HREF="#funcstat">4.5.4</A>),
615then its return list is adjusted to&nbsp;0,
616thus discarding all returned values.
617If the function is called in a place that needs a single value
618(syntactically denoted by the non-terminal <EM>exp1</EM>),
619then its return list is adjusted to&nbsp;1,
620thus discarding all returned values but the first one.
621If the function is called in a place that can hold many values
622(syntactically denoted by the non-terminal <EM>exp</EM>),
623then no adjustment is made.
624<P>
625<P>
626<A NAME="func-def"></A>
627<A NAME="4.7"></A>
628<H2>4.7 - Function Definitions</H2>
629<P>
630Functions in Lua can be defined anywhere in the global level of a chunk.
631The syntax for function definition is:
632<LISTING>
633function ::= <B>function</B> var '<B>(</B>' [parlist1] '<B>)</B>' block <B>end</B>
634</LISTING>
635<P>
636When Lua pre-compiles a chunk,
637all its function bodies are pre-compiled, too.
638Then, when Lua ``executes'' the function definition,
639its body is stored, with type <EM>function</EM>,
640into the variable <CODE>var</CODE>.
641It is in this sense that
642a function definition is an assignment to a global variable.
643<P>
644Parameters act as local variables,
645initialized with the argument values.
646<LISTING>
647parlist1 ::= '<B>...</B>'
648parlist1 ::= name {'<B>,</B>' name} ['<B>,</B>' '<B>...</B>']
649</LISTING>
650<A NAME="vararg"></A>
651
652When a function is called,
653the list of <A NAME="arguments">arguments</A> is adjusted to
654the length of the list of parameters (see Section&nbsp;<A HREF="#adjust">4.4</A>),
655unless the function is a <A NAME="vararg"><EM>vararg</EM></A> function,
656indicated by the dots (...) at the end of its parameter list.
657A vararg function does not adjust its argument list;
658instead, it collects any extra arguments in an implicit parameter,
659called <A NAME="arg"><EM>arg</EM></A>.
660This parameter is always initialized as a table,
661with a field <CODE>n</CODE> with the number of extra arguments,
662and the extra arguments at positions 1, 2, ...
663<P>
664As an example, suppose definitions like:
665<LISTING>
666 function f(a, b) end
667 function g(a, b, ...) end
668</LISTING>
669Then, we have the following mapping from arguments to parameters:
670<LISTING>
671 CALL PARAMETERS
672<P>
673 f(3) a=3, b=nil
674 f(3, 4) a=3, b=4
675 f(3, 4, 5) a=3, b=4
676<P>
677 g(3) a=3, b=nil, arg={n=0}
678 g(3, 4) a=3, b=4, arg={n=0}
679 g(3, 4, 5, 8) a=3, b=4, arg={5, 8; n=2}
680</LISTING>
681<P>
682Results are returned using the <CODE>return</CODE> statement (see Section&nbsp;<A HREF="#return">4.5.3</A>).
683If control reaches the end of a function without a return instruction,
684then the function returns with no results.
685<P>
686There is a special syntax for defining <A NAME="methods">methods</A>,
687that is, functions that have an extra parameter <A NAME="self"><EM>self</EM></A>.
688<LISTING>
689function ::= <B>function</B> var '<B>:</B>' name '<B>(</B>' [parlist1] '<B>)</B>' block <B>end</B>
690</LISTING>
691Thus, a declaration like
692<LISTING>
693function v:f (...)
694 ...
695end
696</LISTING>
697is equivalent to
698<LISTING>
699function v.f (self, ...)
700 ...
701end
702</LISTING>
703that is, the function gets an extra formal parameter called <CODE>self</CODE>.
704Notice that
705the variable <CODE>v</CODE> must have been
706previously initialized with a table value.
707<P>
708<P>
709<A NAME="tag-method"></A>
710<A NAME="4.8"></A>
711<H2>4.8 - Tag Methods</H2>
712<P>
713Lua provides a powerful mechanism to extend its semantics,
714called <A NAME="Tag Methods"><EM>Tag Methods</EM></A>.
715A tag method (TM) is a programmer-defined function
716that can be called at many key points of the evaluation of a program,
717allowing a programmer to change the standard Lua behavior at these points.
718Each of these points is called an <A NAME="event"><EM>event</EM></A>.
719<P>
720The tag method called for any specific event is selected
721according to the tag of the values involved
722in the event (see Section&nbsp;<A HREF="#TypesSec">3</A>).
723The function <A NAME="settagmethod"><TT>settagmethod</TT></A> changes the tag method
724associated with a given pair <EM>&lt;tag, event&gt;</EM>.
725Its first parameter is the tag, the second the event name
726(a string, see below),
727and the third parameter is the new method (a function),
728or <B>nil</B> to restore the default behavior.
729The function returns the previous tag method.
730Another function, <A NAME="gettagmethod"><TT>gettagmethod</TT></A>,
731receives a tag and an event name and returns the
732current method associated with the pair.
733<P>
734Tag methods are called in the following events,
735identified by the given names.
736The semantics of tag methods is better explained by a Lua function
737describing the behavior of the interpreter at each event.
738The function not only shows when a tag method is called,
739but also its arguments, its results and the default behavior.
740Please notice that the code shown here is only illustrative;
741the real behavior is hard coded in the interpreter,
742and it is much more efficient than this simulation.
743All functions used in these descriptions
744(<CODE>rawgetglobal</CODE>, <CODE>tonumber</CODE>, <CODE>call</CODE>, etc)
745are described in Section&nbsp;<A HREF="#predefined">6.1</A>.
746<P>
747<DL>
748<P>
749<DT><B>``add'':</B><DD><A NAME="add event"></A>
750called when a <CODE>+</CODE> operation is applied to non numerical operands.
751<P>
752The function <CODE>getbinmethod</CODE> defines how Lua chooses a tag method
753for a binary operation.
754First Lua tries the first operand.
755If its tag does not define a tag method for the operation,
756then Lua tries the second operand.
757If it also fails, then it gets a tag method from tag&nbsp;0:
758<LISTING>
759 function getbinmethod (op1, op2, event)
760 return gettagmethod(tag(op1), event) or
761 gettagmethod(tag(op2), event) or
762 gettagmethod(0, event)
763 end
764</LISTING>
765<LISTING>
766 function add_event (op1, op2)
767 local o1, o2 = tonumber(op1), tonumber(op2)
768 if o1 and o2 then -- both operands are numeric
769 return o1+o2 -- '+' here is the primitive 'add'
770 else -- at least one of the operands is not numeric.
771 local tm = getbinmethod(op1, op2, "add")
772 if tm then
773 -- call the method with both operands and an extra
774 -- argument with the event name
775 return tm(op1, op2, "add")
776 else -- no tag method available: Default behavior
777 error("unexpected type at arithmetic operation")
778 end
779 end
780 end
781</LISTING>
782<P>
783<DT><B>``sub'':</B><DD><A NAME="sub event"></A>
784called when a <CODE>-</CODE> operation is applied to non numerical operands.
785Behavior similar to <CODE>"add"</CODE> event.
786<P>
787<DT><B>``mul'':</B><DD><A NAME="mul event"></A>
788called when a <CODE>*</CODE> operation is applied to non numerical operands.
789Behavior similar to <CODE>"add"</CODE> event.
790<P>
791<DT><B>``div'':</B><DD><A NAME="div event"></A>
792called when a <CODE>/</CODE> operation is applied to non numerical operands.
793Behavior similar to <CODE>"add"</CODE> event.
794<P>
795<DT><B>``pow'':</B><DD><A NAME="pow event"></A>
796called when a <CODE>^</CODE> operation is applied.
797<LISTING>
798 function pow_event (op1, op2)
799 local tm = getbinmethod(op1, op2, "pow")
800 if tm then
801 -- call the method with both operands and an extra
802 -- argument with the event name
803 return tm(op1, op2, "pow")
804 else -- no tag method available: Default behavior
805 error("unexpected type at arithmetic operation")
806 end
807 end
808</LISTING>
809<P>
810<DT><B>``unm'':</B><DD><A NAME="unm event"></A>
811called when an unary <CODE>-</CODE> operation is applied to a non numerical operand.
812<LISTING>
813 function unm_event (op)
814 local o = tonumber(op)
815 if o then -- operand is numeric
816 return -o -- '-' here is the primitive 'unm'
817 else -- the operand is not numeric.
818 -- Try to get a tag method from the operand;
819 -- if it does not have one, try a "global" one (tag 0)
820 local tm = gettagmethod(tag(op), "unm") or
821 gettagmethod(0, "unm")
822 if tm then
823 -- call the method with the operand, nil, and an extra
824 -- argument with the event name
825 return tm(op, nil, "unm")
826 else -- no tag method available: Default behavior
827 error("unexpected type at arithmetic operation")
828 end
829 end
830 end
831</LISTING>
832<P>
833<DT><B>``lt'':</B><DD><A NAME="lt event"></A>
834called when a <CODE>&lt;</CODE> operation is applied to non numerical
835or non string operands.
836<LISTING>
837 function lt_event (op1, op2)
838 if type(op1) == "number" and type(op2) == "number" then
839 return op1 &lt; op2 -- numeric comparison
840 elseif type(op1) == "string" and type(op2) == "string" then
841 return op1 &lt; op2 -- lexicographic comparison
842 else
843 local tm = getbinmethod(op1, op2, "lt")
844 if tm then
845 return tm(op1, op2, "lt")
846 else
847 error("unexpected type at comparison");
848 end
849 end
850 end
851</LISTING>
852<P>
853<DT><B>``gt'':</B><DD><A NAME="gt event"></A>
854called when a <CODE>&gt;</CODE> operation is applied to non numerical
855or non string operands.
856Behavior similar to <CODE>"lt"</CODE> event.
857<P>
858<DT><B>``le'':</B><DD><A NAME="le event"></A>
859called when a <CODE>&lt;=</CODE> operation is applied to non numerical
860or non string operands.
861Behavior similar to <CODE>"lt"</CODE> event.
862<P>
863<DT><B>``ge'':</B><DD><A NAME="ge event"></A>
864called when a <CODE>&gt;=</CODE> operation is applied to non numerical
865or non string operands.
866Behavior similar to <CODE>"lt"</CODE> event.
867<P>
868<DT><B>``concat'':</B><DD><A NAME="concatenation event"></A>
869called when a concatenation is applied to non string operands.
870<LISTING>
871 function concat_event (op1, op2)
872 if (type(op1) == "string" or type(op1) == "number") and
873 (type(op2) == "string" or type(op2) == "number") then
874 return op1..op2 -- primitive string concatenation
875 else
876 local tm = getbinmethod(op1, op2, "concat")
877 if tm then
878 return tm(op1, op2, "concat")
879 else
880 error("unexpected type for concatenation")
881 end
882 end
883 end
884</LISTING>
885<P>
886<DT><B>``index'':</B><DD><A NAME="index event"></A>
887called when Lua tries to retrieve the value of an index
888not present in a table.
889See event <CODE>"gettable"</CODE> for its semantics.
890<P>
891<DT><B>``getglobal'':</B><DD><A NAME="getglobal event"></A>
892called whenever Lua accesses a global variable.
893This method can only be set for <B>nil</B> and for tags
894created by <CODE>newtag</CODE>.
895<LISTING>
896 function getglobal (varname)
897 local value = rawgetglobal(varname)
898 local tm = gettagmethod(tag(value), "getglobal")
899 if not tm then
900 return value
901 else
902 return tm(varname, value)
903 end
904 end
905</LISTING>
906Notice: the function <CODE>getglobal</CODE> is pre-defined in Lua (see Section&nbsp;<A HREF="#predefined">6.1</A>).
907<P>
908<DT><B>``setglobal'':</B><DD><A NAME="setglobal event"></A>
909called whenever Lua assigns to a global variable.
910This method cannot be set for numbers, strings, and tables and
911userdata with default tags.
912<LISTING>
913 function setglobal (varname, newvalue)
914 local oldvalue = rawgetglobal(varname)
915 local tm = gettagmethod(tag(oldvalue), "setglobal")
916 if not tm then
917 return rawsetglobal(varname, newvalue)
918 else
919 return tm(varname, oldvalue, newvalue)
920 end
921 end
922</LISTING>
923Notice: the function <CODE>setglobal</CODE> is pre-defined in Lua (see Section&nbsp;<A HREF="#predefined">6.1</A>).
924<P>
925<DT><B>``gettable'':</B><DD><A NAME="gettable event"></A>
926called whenever Lua accesses an indexed variable.
927This method cannot be set for tables with default tag.
928<LISTING>
929 function gettable_event (table, index)
930 local tm = gettagmethod(tag(table), "gettable")
931 if tm then
932 return tm(table, index)
933 elseif type(table) ~= "table" then
934 error("indexed expression not a table");
935 else
936 local v = rawgettable(table, index)
937 tm = gettagmethod(tag(table), "index")
938 if (v == nil) and tm then
939 return tm(table, index)
940 else
941 return v
942 end
943 end
944 end
945</LISTING>
946<P>
947<DT><B>``settable'':</B><DD><A NAME="settable event"></A>
948called when Lua assigns to an indexed variable.
949This method cannot be set for tables with default tag.
950<LISTING>
951 function settable_event (table, index, value)
952 local tm = gettagmethod(tag(table), "settable")
953 if tm then
954 tm(table, index, value)
955 elseif type(table) ~= "table" then
956 error("indexed expression not a table")
957 else
958 rawsettable(table, index, value)
959 end
960 end
961</LISTING>
962<P>
963<DT><B>``function'':</B><DD><A NAME="function event"></A>
964called when Lua tries to call a non function value.
965<LISTING>
966 function function_event (func, ...)
967 if type(func) == "function" then
968 return call(func, arg)
969 else
970 local tm = gettagmethod(tag(func), "function")
971 if tm then
972 local i = arg.n
973 while i &gt; 0 do
974 arg[i+1] = arg[i]
975 i = i-1
976 end
977 arg.n = arg.n+1
978 arg[1] = func
979 return call(tm, arg)
980 else
981 error("call expression not a function")
982 end
983 end
984 end
985</LISTING>
986<P>
987<DT><B>``gc'':</B><DD><A NAME="gc event"></A>
988called when Lua is garbage collecting an object.
989This method cannot be set for strings, numbers, functions,
990and userdata with default tag.
991For each object to be collected,
992Lua does the equivalent of the following function:
993<LISTING>
994 function gc_event (obj)
995 local tm = gettagmethod(tag(obj), "gc")
996 if tm then
997 tm(obj)
998 end
999 end
1000</LISTING>
1001Moreover, at the end of a garbage collection cycle,
1002Lua does the equivalent of the call <CODE>gc_event(nil)</CODE>.
1003<P>
1004</DL>
1005<P>
1006<P>
1007<P>
1008<A NAME="error"></A>
1009<A NAME="4.9"></A>
1010<H2>4.9 - Error Handling</H2>
1011<P>
1012Because Lua is an extension language,
1013all Lua actions start from C code calling a function from the Lua library.
1014Whenever an error occurs during Lua compilation or execution,
1015the <A NAME="error method"><EM>error method</EM></A> is called,
1016and then the corresponding function from the library
1017(<CODE>lua_dofile</CODE>, <CODE>lua_dostring</CODE>, or <CODE>lua_callfunction</CODE>)
1018is terminated returning an error condition.
1019<P>
1020The only argument to the error method is a string
1021describing the error.
1022The default method prints this message in <CODE>stderr</CODE>.
1023If needed, it is possible to change the error method with the
1024function <CODE>seterrormethod</CODE>,
1025which gets the new error handler as its only parameter
1026(see Section&nbsp;<A HREF="#pdf-seterrormethod">6.1</A>).
1027The standard I/O library uses this facility to redefine the error method,
1028using the debug facilities (see Section&nbsp;<A HREF="#debugI">7</A>),
1029in order to print some extra information,
1030like the call stack.
1031<P>
1032To provide more information about errors,
1033Lua programs should include the compilation pragma <CODE>$debug</CODE>.
1034<A NAME="pragma"></A>
1035<A NAME="debug pragma"></A>
1036When an error occurs in a program compiled with this option,
1037the I/O error routine is able to print the number of the
1038lines where the calls (and the error) were made.
1039<P>
1040Lua code can explicitly generate an error by calling the built-in
1041function <CODE>error</CODE> (see Section&nbsp;<A HREF="#pdf-error">6.1</A>).
1042<P>
1043<P>
1044<!-- ====================================================================== -->
1045<HR>
1046<A NAME="5."></A>
1047<H1>5 - The Application Program Interface</H1>
1048<P>
1049This section describes the API for Lua, that is,
1050the set of C functions available to the host program to communicate
1051with the Lua library.
1052The API functions can be classified in the following categories:
1053<OL>
1054<LI>exchanging values between C and Lua;
1055<LI>executing Lua code;
1056<LI>manipulating (reading and writing) Lua objects;
1057<LI>calling Lua functions;
1058<LI>C functions to be called by Lua;
1059<LI>manipulating references to Lua Objects.
1060</OL>
1061All API functions and related types and constants
1062are declared in the header file <CODE>lua.h</CODE>.
1063<P>
1064<A NAME="valuesCLua"></A>
1065<A NAME="5.1"></A>
1066<H2>5.1 - Exchanging Values between C and Lua</H2>
1067Because Lua has no static type system,
1068all values passed between Lua and C have type
1069<CODE>lua_Object</CODE><A NAME="lua_Object"></A>,
1070which works like an abstract type in C that can hold any Lua value.
1071Values of type <CODE>lua_Object</CODE> have no meaning outside Lua;
1072for instance,
1073the comparison of two <CODE>lua_Object's</CODE> is undefined.
1074<P>
1075To check the type of a <CODE>lua_Object</CODE>,
1076the following functions are available:
1077<A NAME="lua_isnil"></A><A NAME="lua_isnumber"></A><A NAME="lua_isstring"></A>
1078<A NAME="lua_istable"></A><A NAME="lua_iscfunction"></A><A NAME="lua_isuserdata"></A>
1079<A NAME="lua_isfunction"></A>
1080<LISTING>
1081int lua_isnil (lua_Object object);
1082int lua_isnumber (lua_Object object);
1083int lua_isstring (lua_Object object);
1084int lua_istable (lua_Object object);
1085int lua_isfunction (lua_Object object);
1086int lua_iscfunction (lua_Object object);
1087int lua_isuserdata (lua_Object object);
1088</LISTING>
1089All macros return 1 if the object is compatible with the given type,
1090and 0 otherwise.
1091The function <CODE>lua_isnumber</CODE> accepts numbers and numerical strings,
1092whereas
1093<CODE>lua_isstring</CODE> accepts strings and numbers (see Section&nbsp;<A HREF="#coercion">4.3</A>),
1094and <CODE>lua_isfunction</CODE> accepts Lua and C functions.
1095<P>
1096To check the tag of a <CODE>lua_Object</CODE>,
1097the following function is available:
1098<A NAME="lua_tag"></A>
1099<LISTING>
1100int lua_tag (lua_Object object);
1101</LISTING>
1102<P>
1103To translate a value from type <CODE>lua_Object</CODE> to a specific C type,
1104the programmer can use:
1105<A NAME="lua_getnumber"></A><A NAME="lua_getstring"></A>
1106<A NAME="lua_getcfunction"></A><A NAME="lua_getuserdata"></A>
1107<LISTING>
1108float lua_getnumber (lua_Object object);
1109char *lua_getstring (lua_Object object);
1110lua_CFunction lua_getcfunction (lua_Object object);
1111void *lua_getuserdata (lua_Object object);
1112</LISTING>
1113<P>
1114<CODE>lua_getnumber</CODE> converts a <CODE>lua_Object</CODE> to a floating-point number.
1115This <CODE>lua_Object</CODE> must be a number or a string convertible to number
1116(see Section&nbsp;<A HREF="#coercion">4.3</A>); otherwise, the function returns&nbsp;0.
1117<P>
1118<CODE>lua_getstring</CODE> converts a <CODE>lua_Object</CODE> to a string (<CODE>char*</CODE>).
1119This <CODE>lua_Object</CODE> must be a string or a number;
1120otherwise, the function returns&nbsp;0 (the <CODE>NULL</CODE> pointer).
1121This function does not create a new string,
1122but returns a pointer to a string inside the Lua environment.
1123Because Lua has garbage collection,
1124there is no guarantee that such pointer will be valid after the block ends
1125(see below).
1126<P>
1127<CODE>lua_getcfunction</CODE> converts a <CODE>lua_Object</CODE> to a C function.
1128This <CODE>lua_Object</CODE> must have type <EM>CFunction</EM>;
1129otherwise, the function returns 0 (the <CODE>NULL</CODE> pointer).
1130The type <CODE>lua_CFunction</CODE> is explained in Section&nbsp;<A HREF="#LuacallC">5.5</A>.
1131<P>
1132<CODE>lua_getuserdata</CODE> converts a <CODE>lua_Object</CODE> to <CODE>void*</CODE>.
1133This <CODE>lua_Object</CODE> must have type <EM>userdata</EM>;
1134otherwise, the function returns 0 (the <CODE>NULL</CODE> pointer).
1135<P>
1136Because Lua has automatic memory management and garbage collection,
1137a <CODE>lua_Object</CODE> has a limited scope,
1138and is only valid inside the <EM>block</EM> where it was created.
1139A C function called from Lua is a block,
1140and its parameters are valid only until its end.
1141It is good programming practice to convert Lua objects to C values
1142as soon as they are available,
1143and never to store <CODE>lua_Object</CODE>s in C global variables.
1144<P>
1145A garbage collection cycle can be forced by:
1146<A NAME="lua_collectgarbage"></A>
1147<LISTING>
1148long lua_collectgarbage (long limit);
1149</LISTING>
1150This function returns the number of objects collected.
1151The argument <CODE>limit</CODE> makes the next cycle occur only
1152when that number of new objects have been created.
1153If <CODE>limit</CODE>=0, then Lua uses an adaptable heuristics to set this limit.
1154<P>
1155<P>
1156All communication between Lua and C is done through two
1157abstract data types, called <A NAME="lua2C"><EM>lua2C</EM></A> and <A NAME="C2lua"><EM>C2lua</EM></A>.
1158The first one, as the name implies, is used to pass values
1159from Lua to C: parameters when Lua calls C and results when C calls Lua.
1160The structure C2lua is used in the reverse direction:
1161parameters when C calls Lua and results when Lua calls C.
1162<P>
1163The structure lua2C is an abstract array,
1164which can be indexed with the function:
1165<A NAME="lua_lua2C"></A>
1166<LISTING>
1167lua_Object lua_lua2C (int number);
1168</LISTING>
1169where <CODE>number</CODE> starts with 1.
1170When called with a number larger than the array size,
1171this function returns <CODE>LUA_NOOBJECT</CODE><A NAME="LUA_NOOBJECT"></A>.
1172In this way, it is possible to write C functions that receive
1173a variable number of parameters,
1174and to call Lua functions that return a variable number of results.
1175Notice that the structure lua2C cannot be directly modified by C code.
1176<P>
1177The second structure, C2lua, is a stack.
1178Pushing elements into this stack
1179is done with the following functions:
1180<A NAME="lua_pushnumber"></A><A NAME="lua_pushstring"></A>
1181<A NAME="lua_pushcfunction"></A><A NAME="lua_pushusertag"></A>
1182<A NAME="lua_pushnil"></A><A NAME="lua_pushobject"></A>
1183<A NAME="pushing"></A>
1184<A NAME="lua_pushuserdata"></A>
1185<LISTING>
1186void lua_pushnumber (double n);
1187void lua_pushstring (char *s);
1188void lua_pushcfunction (lua_CFunction f);
1189void lua_pushusertag (void *u, int tag);
1190void lua_pushnil (void);
1191void lua_pushobject (lua_Object object);
1192</LISTING>
1193All of them receive a C value,
1194convert it to a corresponding <CODE>lua_Object</CODE>,
1195and leave the result on the top of C2lua.
1196The function
1197<A NAME="lua_pop"></A>
1198<LISTING>
1199lua_Object lua_pop (void);
1200</LISTING>
1201returns a reference to the object at the top of the C2lua stack,
1202and pops it.
1203<P>
1204As a general rule, all API functions pop from the stack
1205all elements that they use.
1206<P>
1207Because userdata are objects,
1208the function <CODE>lua_pushusertag</CODE> may create a new userdata.
1209If Lua has a userdata with the given value (<CODE>void*</CODE>) and tag,
1210that userdata is pushed.
1211Otherwise, a new userdata is created, with the given value and tag.
1212If this function is called with
1213<CODE>tag</CODE>=<CODE>LUA_ANYTAG</CODE><A NAME="LUA_ANYTAG"></A>,
1214then Lua will try to find any userdata with the given value,
1215no matter its tag.
1216If there is no userdata with that value, then a new one is created,
1217with tag=0.
1218<P>
1219Userdata can have different tags,
1220whose semantics are only known to the host program.
1221Tags are created with the function:
1222<A NAME="lua_newtag"></A>
1223<LISTING>
1224int lua_newtag (void);
1225</LISTING>
1226The function <CODE>lua_settag</CODE> changes the tag of
1227the object on the top of C2lua (and pops it);
1228the object must be a userdata or a table.
1229<A NAME="lua_settag"></A>
1230<LISTING>
1231void lua_settag (int tag);
1232</LISTING>
1233<CODE>tag</CODE> must be a value created with <CODE>lua_newtag</CODE>.
1234<P>
1235When C code calls Lua repeatedly, as in a loop,
1236objects returned by these calls can accumulate,
1237and may cause a stack overflow.
1238To avoid this,
1239nested blocks can be defined with the functions:
1240<LISTING>
1241void lua_beginblock (void);
1242void lua_endblock (void);
1243</LISTING>
1244After the end of the block,
1245all <CODE>lua_Object</CODE>'s created inside it are released.
1246The use of explicit nested blocks is strongly encouraged.
1247<P>
1248<A NAME="5.2"></A>
1249<H2>5.2 - Executing Lua Code</H2>
1250A host program can execute Lua chunks written in a file or in a string
1251using the following functions:
1252<A NAME="lua_dofile"></A><A NAME="lua_dostring"></A>
1253<LISTING>
1254int lua_dofile (char *filename);
1255int lua_dostring (char *string);
1256</LISTING>
1257Both functions return an error code:
12580, in case of success; non zero, in case of errors.
1259More specifically, <CODE>lua_dofile</CODE> returns 2 if for any reason
1260it could not open the file.
1261The function <CODE>lua_dofile</CODE>, if called with argument <CODE>NULL</CODE>,
1262executes the <CODE>stdin</CODE> stream.
1263Function <CODE>lua_dofile</CODE> is also able to execute pre-compiled chunks.
1264It automatically detects whether the file is text or binary,
1265and loads it accordingly (see program <A NAME="luac"><TT>luac</TT></A>).
1266<P>
1267These functions return, in structure lua2C,
1268any values eventually returned by the chunks.
1269They also empty the stack C2lua.
1270<P>
1271<P>
1272<A NAME="5.3"></A>
1273<H2>5.3 - Manipulating Lua Objects</H2>
1274To read the value of any global Lua variable,
1275one uses the function:
1276<A NAME="lua_getglobal"></A>
1277<LISTING>
1278lua_Object lua_getglobal (char *varname);
1279</LISTING>
1280As in Lua, this function may trigger a tag method.
1281To read the real value of any global variable,
1282without invoking any tag method,
1283this function has a <EM>raw</EM> version:
1284<A NAME="lua_rawgetglobal"></A>
1285<LISTING>
1286lua_Object lua_rawgetglobal (char *varname);
1287</LISTING>
1288<P>
1289To store a value previously pushed onto C2lua in a global variable,
1290there is the function:
1291<A NAME="lua_setglobal"></A>
1292<LISTING>
1293void lua_setglobal (char *varname);
1294</LISTING>
1295As in Lua, this function may trigger a tag method.
1296To set the real value of any global variable,
1297without invoking any tag method,
1298this function has a <EM>raw</EM> version:
1299<A NAME="lua_rawgetglobal"></A>
1300<LISTING>
1301void lua_rawsetglobal (char *varname);
1302</LISTING>
1303<P>
1304Tables can also be manipulated via the API.
1305The function
1306<A NAME="lua_gettable"></A>
1307<LISTING>
1308lua_Object lua_gettable (void);
1309</LISTING>
1310pops from the stack C2lua a table and an index,
1311and returns the contents of the table at that index.
1312As in Lua, this operation may trigger a tag method.
1313To get the real value of any table index,
1314without invoking any tag method,
1315this function has a <EM>raw</EM> version:
1316<A NAME="lua_rawgetglobal"></A>
1317<LISTING>
1318lua_Object lua_rawgettable (void);
1319</LISTING>
1320<P>
1321To store a value in an index,
1322the program must push the table, the index,
1323and the value onto C2lua,
1324and then call the function:
1325<A NAME="lua_settable"></A>
1326<LISTING>
1327void lua_settable (void);
1328</LISTING>
1329Again, the tag method for ``settable'' may be called.
1330To set the real value of any table index,
1331without invoking any tag method,
1332this function has a <EM>raw</EM> version:
1333<A NAME="lua_rawsettable"></A>
1334<LISTING>
1335void lua_rawsettable (void);
1336</LISTING>
1337<P>
1338Finally, the function
1339<A NAME="lua_createtable"></A>
1340<LISTING>
1341lua_Object lua_createtable (void);
1342</LISTING>
1343creates and returns a new, empty table.
1344<P>
1345<P>
1346<A NAME="5.4"></A>
1347<H2>5.4 - Calling Lua Functions</H2>
1348Functions defined in Lua by a chunk executed with
1349<CODE>dofile</CODE> or <CODE>dostring</CODE> can be called from the host program.
1350This is done using the following protocol:
1351first, the arguments to the function are pushed onto C2lua
1352(see Section&nbsp;<A HREF="#pushing">5.1</A>), in direct order, i.e., the first argument is pushed first.
1353<P>
1354Then, the function is called using
1355<A NAME="lua_callfunction"></A>
1356<LISTING>
1357int lua_callfunction (lua_Object function);
1358</LISTING>
1359This function returns an error code:
13600, in case of success; non zero, in case of errors.
1361Finally, the results (a Lua function may return many values)
1362are returned in structure lua2C,
1363and can be retrieved with the macro <CODE>lua_getresult</CODE>,
1364<A NAME="lua_getresult"></A>
1365which is just another name to the function <CODE>lua_lua2C</CODE>.
1366Notice that the function <CODE>lua_callfunction</CODE>
1367pops all elements from the C2lua stack.
1368<P>
1369The following example shows how a C program may do the
1370equivalent to the Lua code:
1371<LISTING>
1372 a = f("how", t.x, 4)
1373</LISTING>
1374<LISTING>
1375 lua_pushstring("how"); /* 1st argument */
1376 lua_pushobject(lua_getglobal("t")); /* push value of global 't' */
1377 lua_pushstring("x"); /* push the string 'x' */
1378 lua_pushobject(lua_gettable()); /* push result of t.x (= t['x']) */
1379 lua_pushnumber(4); /* 3th argument */
1380 lua_callfunction(lua_getglobal("f")); /* call Lua function */
1381 lua_pushobject(lua_getresult(1)); /* push first result of the call */
1382 lua_setglobal("a"); /* sets global variable 'a' */
1383</LISTING>
1384<P>
1385Some special Lua functions have exclusive interfaces.
1386A C function can generate a Lua error calling the function
1387<A NAME="lua_error"></A>
1388<LISTING>
1389void lua_error (char *message);
1390</LISTING>
1391This function never returns.
1392If the C function has been called from Lua,
1393then the corresponding Lua execution terminates,
1394as if an error had occurred inside Lua code.
1395Otherwise, the whole program terminates with a call to <CODE>exit(1)</CODE>.
1396<P>
1397The error handler method (see Section&nbsp;<A HREF="#error">4.9</A>) can be changed with:
1398<A NAME="lua_seterrormethod"></A>
1399<LISTING>
1400lua_Object lua_seterrormethod (void);
1401</LISTING>
1402This function sets the object at the top of C2lua
1403as the new error method,
1404and returns the old error method value.
1405<P>
1406Tag methods can be changed with:
1407<A NAME="lua_settagmethod"></A>
1408<LISTING>
1409lua_Object lua_settagmethod (int tag, char *event);
1410</LISTING>
1411The first parameter is the tag,
1412the second is the event name (see Section&nbsp;<A HREF="#tag-method">4.8</A>);
1413the new method is pushed from C2lua.
1414This function returns a <CODE>lua_Object</CODE>,
1415which is the old tag method value.
1416To get just the current value of a tag method,
1417there is the function
1418<A NAME="lua_gettagmethod"></A>
1419<LISTING>
1420lua_Object lua_gettagmethod (int tag, char *event);
1421</LISTING>
1422<P>
1423<P>
1424<A NAME="LuacallC"></A>
1425<A NAME="5.5"></A>
1426<H2>5.5 - C Functions</H2>
1427To register a C function to Lua,
1428there is the following macro:
1429<A NAME="lua_register"></A>
1430<LISTING>
1431#define lua_register(n,f) (lua_pushcfunction(f), lua_setglobal(n))
1432/* char *n; */
1433/* lua_CFunction f; */
1434</LISTING>
1435which receives the name the function will have in Lua,
1436and a pointer to the function.
1437This pointer must have type <CODE>lua_CFunction</CODE>,
1438which is defined as
1439<A NAME="lua_CFunction"></A>
1440<LISTING>
1441typedef void (*lua_CFunction) (void);
1442</LISTING>
1443that is, a pointer to a function with no parameters and no results.
1444<P>
1445In order to communicate properly with Lua,
1446a C function must follow a protocol,
1447which defines the way parameters and results are passed.
1448<P>
1449A C function receives its arguments in structure lua2C;
1450to access them, it uses the macro <CODE>lua_getparam</CODE>, <A NAME="lua_getparam"></A>
1451again just another name to <CODE>lua_lua2C</CODE>.
1452To return values, a C function just pushes them onto the stack C2lua,
1453in direct order (see Section&nbsp;<A HREF="#valuesCLua">5.1</A>).
1454Like a Lua function, a C function called by Lua can also return
1455many results.
1456<P>
1457For some examples, see files <CODE>strlib.c</CODE>,
1458<CODE>iolib.c</CODE> and <CODE>mathlib.c</CODE> in Lua distribution.
1459<P>
1460<A NAME="5.6"></A>
1461<H2>5.6 - References to Lua Objects</H2>
1462<P>
1463As noted in Section&nbsp;<A HREF="#LuacallC">5.5</A>, <CODE>lua_Object</CODE>s are volatile.
1464If the C code needs to keep a <CODE>lua_Object</CODE>
1465outside block boundaries,
1466then it must create a <A NAME="reference"><EM>reference</EM></A> to the object.
1467The routines to manipulate references are the following:
1468<A NAME="lua_ref"></A><A NAME="lua_getref"></A>
1469<A NAME="lua_unref"></A>
1470<LISTING>
1471int lua_ref (int lock);
1472lua_Object lua_getref (int ref);
1473void lua_unref (int ref);
1474</LISTING>
1475The function <CODE>lua_ref</CODE> creates a reference
1476to the object that is on the top of the stack,
1477and returns this reference.
1478If <CODE>lock</CODE> is true, the object is <EM>locked</EM>:
1479this means the object will not be garbage collected.
1480Notice that an unlocked reference may be garbage collected.
1481Whenever the referenced object is needed,
1482a call to <CODE>lua_getref</CODE>
1483returns a handle to it;
1484if the object has been collected,
1485<CODE>lua_getref</CODE> returns <CODE>LUA_NOOBJECT</CODE>.
1486<P>
1487When a reference is no longer needed,
1488it can be freed with a call to <CODE>lua_unref</CODE>.
1489<P>
1490<P>
1491<P>
1492<!-- ====================================================================== -->
1493<HR>
1494<A NAME="6."></A>
1495<H1>6 - Predefined Functions and Libraries</H1>
1496<P>
1497The set of <A NAME="predefined functions">predefined functions</A> in Lua is small but powerful.
1498Most of them provide features that allow some degree of
1499<A NAME="reflexivity">reflexivity</A> in the language.
1500Some of these features cannot be simulated with the rest of the
1501language nor with the standard Lua API.
1502Others are just convenient interfaces to common API functions.
1503<P>
1504The libraries, on the other hand, provide useful routines
1505that are implemented directly through the standard API.
1506Therefore, they are not necessary to the language,
1507and are provided as separate C modules.
1508Currently there are three standard libraries:
1509<UL>
1510<LI>string manipulation;
1511<LI>mathematical functions (sin, log, etc);
1512<LI>input and output (plus some system facilities).
1513</UL>
1514In order to have access to these libraries,
1515the host program must call the functions
1516<CODE>strlib_open</CODE>, <CODE>mathlib_open</CODE>, and <CODE>iolib_open</CODE>,
1517declared in <CODE>lualib.h</CODE>.
1518<P>
1519<P>
1520<A NAME="predefined"></A>
1521<A NAME="6.1"></A>
1522<H2>6.1 - Predefined Functions</H2>
1523<P>
1524<h3> <TT>call (func, arg, [retmode])</TT></h3><A NAME="call"></A>
1525This function calls function <CODE>func</CODE> with
1526the arguments given by the table <CODE>arg</CODE>.
1527The call is equivalent to
1528<LISTING>
1529 func(arg[1], arg[2], ..., arg[arg.n])
1530</LISTING>
1531If <CODE>arg.n</CODE> is not defined,
1532then Lua stops getting arguments at the first nil value.
1533<P>
1534If <CODE>retmode</CODE> is absent,
1535all results from <CODE>func</CODE> are just returned by the call.
1536If <CODE>retmode</CODE> is equal to <CODE>"pack"</CODE>,
1537the results are <EM>packed</EM> in a single table.<A NAME="packed results"></A>
1538That is, <CODE>call</CODE> returns just one table;
1539at index <CODE>n</CODE>, the table has the total number of results
1540from the call;
1541the first result is at index 1, etc.
1542For instance, the following calls produce the following results:
1543<LISTING>
1544a = call(sin, {5}) --&gt; a = 0.0871557 = sin(5)
1545a = call(max, {1,4,5; n=2}) --&gt; a = 4 (only 1 and 4 are arguments)
1546t = {x=1}
1547a = call(next, {t,nil;n=2}, "pack") --&gt; a={"x", 1; n=2}
1548</LISTING>
1549<P>
1550<h3> <TT>collectgarbage ([limit])</TT></h3><A NAME="collectgarbage"></A>
1551Forces a garbage collection cycle.
1552Returns the number of objects collected.
1553An optional argument, <CODE>limit</CODE>, is a number that
1554makes the next cycle occur when that number of new
1555objects have been created.
1556If absent, Lua uses an adaptable algorithm to set
1557this limit.
1558<CODE>collectgarbage</CODE> is equivalent to
1559the API function <CODE>lua_collectgarbage</CODE>.
1560<P>
1561<h3> <TT>dofile (filename)</TT></h3><A NAME="dofile"></A>
1562This function receives a file name,
1563opens it, and executes its contents as a Lua chunk,
1564or as pre-compiled chunks.
1565When called without arguments,
1566it executes the contents of the standard input (<CODE>stdin</CODE>).
1567If there is any error executing the file,
1568then <CODE>dofile</CODE> returns <B>nil</B>.
1569Otherwise, it returns the values returned by the chunk,
1570or a non <B>nil</B> value if the chunk returns no values.
1571It issues an error when called with a non string argument.
1572<CODE>dofile</CODE> is equivalent to the API function <CODE>lua_dofile</CODE>.
1573<P>
1574<h3> <TT>dostring (string [, errmethod])</TT></h3><A NAME="dostring"></A>
1575This function executes a given string as a Lua chunk.
1576If there is any error executing the string, it returns <B>nil</B>.
1577Otherwise, it returns the values returned by the chunk,
1578or a non <B>nil</B> value if the chunk returns no values.
1579If provided, <CODE>errmethod</CODE> is temporarily set as the error method,
1580while <CODE>string</CODE> runs.
1581As a particular case, if <CODE>errmethod</CODE> is <B>nil</B>,
1582no error messages will be issued during the execution of the string.
1583<P>
1584<A NAME="pdf-newtag"></A>
1585<h3> <TT>newtag ()</TT></h3><A NAME="newtag"></A>
1586Returns a new tag.
1587<CODE>newtag</CODE> is equivalent to the API function <CODE>lua_newtag</CODE>.
1588<P>
1589<h3> <TT>next (table, index)</TT></h3><A NAME="next"></A>
1590This function allows a program to traverse all fields of a table.
1591Its first argument is a table and its second argument
1592is an index in this table.
1593It returns the next index of the table and the
1594value associated with the index.
1595When called with <B>nil</B> as its second argument,
1596the function returns the first index
1597of the table (and its associated value).
1598When called with the last index, or with <B>nil</B> in an empty table,
1599it returns <B>nil</B>.
1600<P>
1601In Lua there is no declaration of fields;
1602semantically, there is no difference between a
1603field not present in a table or a field with value <B>nil</B>.
1604Therefore, the function only considers fields with non <B>nil</B> values.
1605The order in which the indices are enumerated is not specified,
1606<EM>not even for numeric indices</EM>
1607(to traverse a table in numeric order,
1608use a counter).
1609If the table is modified in any way during a traversal,
1610the semantics of <CODE>next</CODE> is undefined.
1611<P>
1612This function cannot be written with the standard API.
1613<P>
1614<h3> <TT>nextvar (name)</TT></h3><A NAME="nextvar"></A>
1615This function is similar to the function <CODE>next</CODE>,
1616but iterates over the global variables.
1617Its single argument is the name of a global variable,
1618or <B>nil</B> to get a first name.
1619Similarly to <CODE>next</CODE>, it returns the name of another variable
1620and its value,
1621or <B>nil</B> if there are no more variables.
1622There can be no assignments to global variables during the traversal;
1623otherwise the semantics of <CODE>nextvar</CODE> is undefined.
1624<P>
1625This function cannot be written with the standard API.
1626<P>
1627<h3> <TT>tostring (e)</TT></h3><A NAME="tostring"></A>
1628This function receives an argument of any type and
1629converts it to a string in a reasonable format.
1630<P>
1631<h3> <TT>print (e1, e2, ...)</TT></h3><A NAME="print"></A>
1632This function receives any number of arguments,
1633and prints their values in a reasonable format.
1634Each value is printed in a new line.
1635This function is not intended for formatted output,
1636but as a quick way to show a value,
1637for instance for error messages or debugging.
1638See Section&nbsp;<A HREF="#libio">6.4</A> for functions for formatted output.
1639<P>
1640<h3> <TT>tonumber (e)</TT></h3><A NAME="tonumber"></A>
1641This function receives one argument,
1642and tries to convert it to a number.
1643If the argument is already a number or a string convertible
1644to a number (see Section&nbsp;<A HREF="#coercion">4.3</A>), then it returns that number;
1645otherwise, it returns <B>nil</B>.
1646<P>
1647<A NAME="pdf-type"></A>
1648<h3> <TT>type (v)</TT></h3><A NAME="type"></A>
1649This function allows Lua to test the type of a value.
1650It receives one argument, and returns its type, coded as a string.
1651The possible results of this function are
1652<CODE>"nil"</CODE> (a string, not the value <B>nil</B>),
1653<CODE>"number"</CODE>,
1654<CODE>"string"</CODE>,
1655<CODE>"table"</CODE>,
1656<CODE>"function"</CODE>,
1657and <CODE>"userdata"</CODE>.
1658<CODE>type</CODE> is equivalent to the API function <CODE>lua_type</CODE>.
1659<P>
1660<h3> <TT>tag (v)</TT></h3><A NAME="tag"></A>
1661This function allows Lua to test the tag of a value (see Section&nbsp;<A HREF="#TypesSec">3</A>).
1662It receives one argument, and returns its tag (a number).
1663<CODE>tag</CODE> is equivalent to the API function <CODE>lua_tag</CODE>.
1664<P>
1665<h3> <TT>settag (t, tag)</TT></h3><A NAME="settag"></A>
1666This function sets the tag of a given table (see Section&nbsp;<A HREF="#TypesSec">3</A>).
1667<CODE>tag</CODE> must be a value created with <CODE>newtag</CODE>
1668(see Section&nbsp;<A HREF="#pdf-newtag">6.1</A>).
1669For security reasons,
1670it is impossible to change the tag of a userdata from Lua.
1671<P>
1672<h3> <TT>assert (v)</TT></h3><A NAME="assert"></A>
1673This function issues an <EM>``assertion failed!''</EM> error
1674when its argument is <B>nil</B>.
1675<P>
1676<A NAME="pdf-error"></A>
1677<h3> <TT>error (message)</TT></h3><A NAME="error"></A>
1678This function issues an error message and terminates
1679the last called function from the library
1680(<CODE>lua_dofile</CODE>, <CODE>lua_dostring</CODE>, or <CODE>lua_callfunction</CODE>).
1681It never returns.
1682<CODE>error</CODE> is equivalent to the API function <CODE>lua_error</CODE>.
1683<P>
1684<h3> <TT>rawgettable (table, index)</TT></h3><A NAME="rawgettable"></A>
1685Gets the real value of <CODE>table[index]</CODE>,
1686without invoking any tag method.
1687<CODE>table</CODE> must be a table,
1688and <CODE>index</CODE> is any value different from <B>nil</B>.
1689<P>
1690<h3> <TT>rawsettable (table, index, value)</TT></h3><A NAME="rawsettable"></A>
1691Sets the real value <CODE>table[index]=value</CODE>,
1692without invoking any tag method.
1693<CODE>table</CODE> must be a table,
1694<CODE>index</CODE> is any value different from <B>nil</B>,
1695and <CODE>value</CODE> is any Lua value.
1696<P>
1697<h3> <TT>rawsetglobal (name, value)</TT></h3><A NAME="rawsetglobal"></A>
1698This function assigns the given value to a global variable.
1699The string <CODE>name</CODE> does not need to be a syntactically valid variable name.
1700Therefore, this function can set global variables with strange names like
1701<CODE>"m v 1"</CODE> or <CODE>34</CODE>.
1702It returns the value of its second argument.
1703<P>
1704<h3> <TT>setglobal (name, value)</TT></h3><A NAME="setglobal"></A>
1705This function assigns the given value to a global variable,
1706or calls a tag method.
1707Its full semantics is explained in Section&nbsp;<A HREF="#tag-method">4.8</A>.
1708<P>
1709<h3> <TT>rawgetglobal (name)</TT></h3><A NAME="rawgetglobal"></A>
1710This function retrieves the value of a global variable.
1711The string <CODE>name</CODE> does not need to be a
1712syntactically valid variable name.
1713<P>
1714<h3> <TT>getglobal (name)</TT></h3><A NAME="getglobal"></A>
1715This function retrieves the value of a global variable,
1716or calls a tag method.
1717Its full semantics is explained in Section&nbsp;<A HREF="#tag-method">4.8</A>.
1718<P>
1719<h3> <TT>seterrormethod (newmethod)</TT></h3>
1720<A NAME="pdf-seterrormethod"></A>
1721
1722Sets the error handler (see Section&nbsp;<A HREF="#error">4.9</A>).
1723<CODE>newmethod</CODE> must be a function or <B>nil</B>,
1724in which case the error handler does nothing.
1725Returns the old error handler.
1726<P>
1727<h3> <TT>settagmethod (tag, event, newmethod)</TT></h3>
1728<A NAME="settagmethod"></A>
1729This function sets a new tag method to the given pair <EM>&lt;tag, event&gt;</EM>.
1730It returns the old method.
1731If <CODE>newmethod</CODE> is <B>nil</B>,
1732it restores the default behavior for the given event.
1733<P>
1734<h3> <TT>gettagmethod (tag, event)</TT></h3>
1735<A NAME="gettagmethod"></A>
1736This function returns the current tag method
1737for a given pair <EM>&lt;tag, event&gt;</EM>.
1738<P>
1739<P>
1740<A NAME="6.2"></A>
1741<H2>6.2 - String Manipulation</H2>
1742This library provides generic functions for string manipulation,
1743such as finding and extracting substrings and pattern matching.
1744When indexing a string, the first character is at position&nbsp;1,
1745not&nbsp;0, as in C.
1746<P>
1747<h3> <TT>strfind (str, pattern [, init [, plain]])</TT></h3>
1748<A NAME="strfind"></A>
1749This function looks for the first <EM>match</EM> of
1750<CODE>pattern</CODE> in <CODE>str</CODE>.
1751If it finds one, then it returns the indices on <CODE>str</CODE>
1752where this occurrence starts and ends;
1753otherwise, it returns <B>nil</B>.
1754If the pattern specifies captures,
1755the captured strings are returned as extra results.
1756A third optional numerical argument specifies where to start the search;
1757its default value is 1.
1758A value of 1 as a fourth optional argument
1759turns off the pattern matching facilities,
1760so the function does a plain ``find substring'' operation,
1761with no characters in <CODE>pattern</CODE> being considered ``magic''.
1762<P>
1763<h3> <TT>strlen (s)</TT></h3><A NAME="strlen"></A>
1764Receives a string and returns its length.
1765<P>
1766<h3> <TT>strsub (s, i [, j])</TT></h3><A NAME="strsub"></A>
1767Returns another string, which is a substring of <CODE>s</CODE>,
1768starting at <CODE>i</CODE> and running until <CODE>j</CODE>.
1769If <CODE>i</CODE> or <CODE>j</CODE> are negative,
1770they are replaced by the length of the string minus their
1771absolute value plus 1.
1772Therefore, -1 points to the last character of <CODE>s</CODE>
1773and -2 to the previous one.
1774If <CODE>j</CODE> is absent, it is assumed to be equal to -1
1775(which is the same as the string length).
1776In particular,
1777the call <CODE>strsub(s,1,j)</CODE> returns a prefix of <CODE>s</CODE>
1778with length <CODE>j</CODE>,
1779and the call <CODE>strsub(s, -i)</CODE> returns a suffix of <CODE>s</CODE>
1780with length <CODE>i</CODE>.
1781<P>
1782<h3> <TT>strlower (s)</TT></h3><A NAME="strlower"></A>
1783Receives a string and returns a copy of that string with all
1784upper case letters changed to lower case.
1785All other characters are left unchanged.
1786<P>
1787<h3> <TT>strupper (s)</TT></h3><A NAME="strupper"></A>
1788Receives a string and returns a copy of that string with all
1789lower case letters changed to upper case.
1790All other characters are left unchanged.
1791<P>
1792<h3> <TT>strrep (s, n)</TT></h3><A NAME="strrep"></A>
1793Returns a string which is the concatenation of <CODE>n</CODE> copies of
1794the string <CODE>s</CODE>.
1795<P>
1796<h3> <TT>ascii (s [, i])</TT></h3><A NAME="ascii"></A>
1797Returns the ASCII code of the character <CODE>s[i]</CODE>.
1798If <CODE>i</CODE> is absent, then it is assumed to be 1.
1799<P>
1800<h3> <TT>format (formatstring, e1, e2, ...)</TT></h3><A NAME="format"></A>
1801<A NAME="format"></A>
1802
1803This function returns a formated version of its variable number of arguments
1804following the description given in its first argument (which must be a string).
1805The format string follows the same rules as the <CODE>printf</CODE> family of
1806standard C functions.
1807The only differences are that the options/modifiers
1808<CODE>*</CODE>, <CODE>l</CODE>, <CODE>L</CODE>, <CODE>n</CODE>, <CODE>p</CODE>,
1809and <CODE>h</CODE> are not supported,
1810and there is an extra option, <CODE>q</CODE>.
1811This option formats a string in a form suitable to be safely read
1812back by the Lua interpreter;
1813that is,
1814the string is written between double quotes,
1815and all double quotes, returns and backslashes in the string
1816are correctly escaped when written.
1817For instance, the call
1818<LISTING>
1819format('%q', 'a string with "quotes" and \n new line')
1820</LISTING>
1821will produce the string:
1822<LISTING>
1823"a string with \"quotes\" and \
1824 new line"
1825</LISTING>
1826<P>
1827The options <CODE>c</CODE>, <CODE>d</CODE>, <CODE>E</CODE>, <CODE>e</CODE>, <CODE>f</CODE>,
1828<CODE>g</CODE> <CODE>i</CODE>, <CODE>o</CODE>, <CODE>u</CODE>, <CODE>X</CODE>, and <CODE>x</CODE> all
1829expect a number as argument,
1830whereas <CODE>q</CODE> and <CODE>s</CODE> expect a string.
1831Note that the <CODE>*</CODE> modifier can be simulated by building
1832the appropriate format string.
1833For example, <CODE>"%*g"</CODE> can be simulated with
1834<CODE>"%"..width.."g"</CODE>.
1835<P>
1836<h3> <TT>gsub (s, pat, repl [, table] [, n])</TT></h3>
1837<A NAME="gsub"></A>
1838Returns a copy of <CODE>s</CODE>,
1839where all occurrences of the pattern <CODE>pat</CODE> have been
1840replaced by a replacement string specified by <CODE>repl</CODE>.
1841This function also returns, as a second value,
1842the total number of substitutions made.
1843<P>
1844If <CODE>repl</CODE> is a string, then its value is used for replacement.
1845Any sequence in <CODE>repl</CODE> of the form <CODE>%n</CODE>
1846with <CODE>n</CODE> between 1 and 9
1847stands for the value of the n-th captured substring.
1848<P>
1849If <CODE>repl</CODE> is a function, then this function is called every time a
1850match occurs, with the following arguments:
1851If <CODE>table</CODE> is present, then the first argument is this table
1852and the second one is a match counter (1 for the first call).
1853Independently of these two optional arguments,
1854all captured substrings are passed as arguments,
1855in order (see below);
1856If the value returned by this function is a string,
1857then it is used as the replacement string;
1858otherwise, the replacement string is the empty string.
1859<P>
1860A last optional parameter <CODE>n</CODE> limits
1861the maximum number of substitutions to occur.
1862For instance, when <CODE>n</CODE> is 1 only the first occurrence of
1863<CODE>pat</CODE> is replaced.
1864<P>
1865See some examples below:
1866<LISTING>
1867 x = gsub("hello world", "(%w%w*)", "%1 %1", 1)
1868 --&gt; x="hello hello world"
1869<P>
1870 x = gsub("home = $HOME, user = $USER", "$(%w%w*)", getenv)
1871 --&gt; x="home = /home/roberto, user = roberto" (for instance)
1872<P>
1873 x = gsub("4+5 = $return 4+5$", "$(.-)%$", dostring)
1874 --&gt; x="4+5 = 9"
1875<P>
1876 function f(t, i, v) return t[v] end
1877 t = {name="lua", version="3.0"}
1878 x = gsub("$name - $version", "$(%w%w*)", f, t)
1879 --&gt; x="lua - 3.0"
1880<P>
1881 t = {"apple", "orange", "lime"}
1882 x = gsub("x and x and x", "x", rawgettable, t)
1883 --&gt; x="apple and orange and lime"
1884<P>
1885 t = {}
1886 dummy, t.n = gsub("first second word", "(%w%w*)", rawsettable, t)
1887 --&gt; t={"first", "second", "word"; n=3}
1888</LISTING>
1889<P>
1890<P>
1891<A NAME="pm"></A>
1892<h3>Patterns</h3>
1893<P>
1894<H4>Character Class:</H4>
1895a <A NAME="character class"><EM>character class</EM></A> is used to represent a set of characters.
1896The following combinations are allowed in describing a character class:
1897<DL>
1898<DT><B><EM>x</EM></B><DD> (where <EM>x</EM> is any character not in the list <CODE>()%.[*-?</CODE>)
1899- represents the character <EM>x</EM> itself.
1900<DT><B><TT>.</TT></B><DD> - represents all characters.
1901<DT><B><TT>%a</TT></B><DD> - represents all letters.
1902<DT><B><TT>%A</TT></B><DD> - represents all non letter characters.
1903<DT><B><TT>%d</TT></B><DD> - represents all digits.
1904<DT><B><TT>%D</TT></B><DD> - represents all non digits.
1905<DT><B><TT>%l</TT></B><DD> - represents all lower case letters.
1906<DT><B><TT>%L</TT></B><DD> - represents all non lower case letter characters.
1907<DT><B><TT>%s</TT></B><DD> - represents all space characters.
1908<DT><B><TT>%S</TT></B><DD> - represents all non space characters.
1909<DT><B><TT>%u</TT></B><DD> - represents all upper case letters.
1910<DT><B><TT>%U</TT></B><DD> - represents all non upper case letter characters.
1911<DT><B><TT>%w</TT></B><DD> - represents all alphanumeric characters.
1912<DT><B><TT>%W</TT></B><DD> - represents all non alphanumeric characters.
1913<DT><B><TT>%<EM>x</TT></EM></B><DD> (where <EM>x</EM> is any non alphanumeric character) -
1914represents the character <EM>x</EM>.
1915This is the standard way to escape the magic characters <CODE>()%.[*-?</CODE>.
1916<DT><B><TT>[char-set]</TT></B><DD> -
1917Represents the class which is the union of all
1918characters in char-set.
1919To include a <CODE>]</CODE> in char-set, it must be the first character.
1920A range of characters may be specified by
1921separating the end characters of the range with a <CODE>-</CODE>;
1922e.g., <CODE>A-Z</CODE> specifies the upper case characters.
1923If <CODE>-</CODE> appears as the first or last character of char-set,
1924then it represents itself.
1925All classes <CODE>%</CODE><EM>x</EM> described above can also be used as
1926components in a char-set.
1927All other characters in char-set represent themselves.
1928<DT><B><TT>[^char-set]</TT></B><DD> -
1929represents the complement of char-set,
1930where char-set is interpreted as above.
1931</DL>
1932<P>
1933<H4>Pattern Item:</H4>
1934a <A NAME="pattern item"><EM>pattern item</EM></A> may be:
1935<UL>
1936<LI>
1937a single character class,
1938which matches any single character in the class;
1939<LI>
1940a single character class followed by <CODE>*</CODE>,
1941which matches 0 or more repetitions of characters in the class.
1942These repetition items will always match the longest possible sequence.
1943<LI>
1944a single character class followed by <CODE>-</CODE>,
1945which also matches 0 or more repetitions of characters in the class.
1946Unlike <CODE>*</CODE>,
1947these repetition items will always match the shortest possible sequence.
1948<LI>
1949a single character class followed by <CODE>?</CODE>,
1950which matches 0 or 1 occurrence of a character in the class;
1951<LI>
1952<TT>%<EM>n</TT></EM>, for <EM>n</EM> between 1 and 9;
1953such item matches a sub-string equal to the n-th captured string
1954(see below);
1955<LI>
1956<TT>%b<EM>xy</TT></EM>, where <EM>x</EM> and <EM>y</EM> are two distinct characters;
1957such item matches strings that start with <EM>x</EM>, end with <EM>y</EM>,
1958and where the <EM>x</EM> and <EM>y</EM> are <EM>balanced</EM>.
1959That means that, if one reads the string from left to write,
1960counting plus 1 for an <EM>x</EM> and minus 1 for a <EM>y</EM>,
1961the ending <EM>y</EM> is the first where the count reaches 0.
1962For instance, the item <CODE>%b()</CODE> matches expressions with
1963balanced parentheses.
1964</UL>
1965<P>
1966<H4>Pattern:</H4>
1967a <A NAME="pattern"><EM>pattern</EM></A> is a sequence of pattern items.
1968A <CODE>^</CODE> at the beginning of a pattern anchors the match at the
1969beginning of the subject string.
1970A <CODE>$</CODE> at the end of a pattern anchors the match at the
1971end of the subject string.
1972<P>
1973<H4>Captures:</H4>
1974a pattern may contain sub-patterns enclosed in parentheses,
1975that describe <A NAME="captures"><EM>captures</EM></A>.
1976When a match succeeds, the sub-strings of the subject string
1977that match captures are stored (<EM>captured</EM>) for future use.
1978Captures are numbered according to their left parentheses.
1979For instance, in the pattern <CODE>"(a*(.)%w(%s*))"</CODE>,
1980the part of the string matching <CODE>"a*(.)%w(%s*)"</CODE> is
1981stored as the first capture (and therefore has number 1);
1982the character matching <CODE>.</CODE> is captured with number 2,
1983and the part matching <CODE>%s*</CODE> has number 3.
1984<P>
1985<A NAME="mathlib"></A>
1986<A NAME="6.3"></A>
1987<H2>6.3 - Mathematical Functions</H2>
1988<P>
1989This library is an interface to some functions of the standard C math library.
1990In addition, it registers a tag method for the binary operator <CODE>^</CODE> that
1991returns <I>x^y</I> when applied to numbers <CODE>x^y</CODE>.
1992<P>
1993The library provides the following functions:
1994<A NAME="abs"></A><A NAME="acos"></A><A NAME="asin"></A><A NAME="atan"></A>
1995<A NAME="atan2"></A><A NAME="ceil"></A><A NAME="cos"></A><A NAME="floor"></A>
1996<A NAME="log"></A><A NAME="log10"></A><A NAME="max"></A><A NAME="min"></A>
1997<A NAME="mod"></A><A NAME="sin"></A><A NAME="sqrt"></A><A NAME="tan"></A>
1998<A NAME="random"></A><A NAME="randomseed"></A>
1999<LISTING>
2000abs acos asin atan atan2 ceil cos floor log log10
2001max min mod sin sqrt tan random randomseed
2002</LISTING>
2003Most of them
2004are only interfaces to the homonymous functions in the C library,
2005except that, for the trigonometric functions,
2006all angles are expressed in <EM>degrees</EM>, not radians.
2007<P>
2008The function <CODE>max</CODE> returns the maximum
2009value of its numeric arguments.
2010Similarly, <CODE>min</CODE> computes the minimum.
2011Both can be used with an unlimited number of arguments.
2012<P>
2013The functions <CODE>random</CODE> and <CODE>randomseed</CODE> are interfaces to
2014the simple random generator functions <CODE>rand</CODE> and <CODE>srand</CODE>,
2015provided by ANSI C.
2016The function <CODE>random</CODE> returns pseudo-random numbers in the
2017range <I>[0,1)</I>.
2018<P>
2019<P>
2020<A NAME="libio"></A>
2021<A NAME="6.4"></A>
2022<H2>6.4 - I/O Facilities</H2>
2023<P>
2024All input and output operations in Lua are done over two
2025<A NAME="file handles"><EM>file handles</EM></A>, one for reading and one for writing.
2026These handles are stored in two Lua global variables,
2027called <CODE>_INPUT</CODE> and <CODE>_OUTPUT</CODE>.
2028The global variables
2029<CODE>_STDIN</CODE>, <CODE>_STDOUT</CODE> and <CODE>_STDERR</CODE>
2030are initialized with file descriptors for
2031<CODE>stdin</CODE>, <CODE>stdout</CODE> and <CODE>stderr</CODE>.
2032Initially, <CODE>_INPUT=_STDIN</CODE> and <CODE>_OUTPUT=_STDOUT</CODE>.
2033<A NAME="_INPUT"></A><A NAME="_OUTPUT"></A>
2034<A NAME="_STDIN"></A><A NAME="_STDOUT"></A><A NAME="_STDERR"></A>
2035<P>
2036A file handle is a userdata containing the file stream <CODE>FILE*</CODE>,
2037and with a distinctive tag created by the I/O library.
2038<P>
2039<P>
2040Unless otherwise stated,
2041all I/O functions return <B>nil</B> on failure and
2042some value different from <B>nil</B> on success.
2043<P>
2044<h3> <TT>readfrom (filename)</TT></h3><A NAME="readfrom"></A>
2045<P>
2046This function may be called in two ways.
2047When called with a file name, it opens the named file,
2048sets its handle as the value of <CODE>_INPUT</CODE>,
2049and returns this value.
2050It does not close the current input file.
2051When called without parameters,
2052it closes the <CODE>_INPUT</CODE> file,
2053and restores <CODE>stdin</CODE> as the value of <CODE>_INPUT</CODE>.
2054<P>
2055If this function fails, it returns <B>nil</B>,
2056plus a string describing the error.
2057<P>
2058<CITE>
2059<EM>System dependent</EM>: if <CODE>filename</CODE> starts with a <CODE>|</CODE>,
2060then a <A NAME="piped input">piped input</A> is open, via function <A NAME="popen"><TT>popen</TT></A>.
2061Not all systems implement pipes.
2062Moreover,
2063the number of files that can be open at the same time is
2064usually limited and depends on the system.
2065</CITE>
2066<P>
2067<h3> <TT>writeto (filename)</TT></h3><A NAME="writeto"></A>
2068<P>
2069This function may be called in two ways.
2070When called with a file name,
2071it opens the named file,
2072sets its handle as the value of <CODE>_OUTPUT</CODE>,
2073and returns this value.
2074It does not close the current output file.
2075Notice that, if the file already exists,
2076then it will be <EM>completely erased</EM> with this operation.
2077When called without parameters,
2078this function closes the <CODE>_OUTPUT</CODE> file,
2079and restores <CODE>stdout</CODE> as the value of <CODE>_OUTPUT</CODE>.
2080<A NAME="closing a file"></A>
2081<P>
2082If this function fails, it returns <B>nil</B>,
2083plus a string describing the error.
2084<P>
2085<CITE>
2086<EM>System dependent</EM>: if <CODE>filename</CODE> starts with a <CODE>|</CODE>,
2087then a <A NAME="piped output">piped output</A> is open, via function <A NAME="popen"><TT>popen</TT></A>.
2088Not all systems implement pipes.
2089Moreover,
2090the number of files that can be open at the same time is
2091usually limited and depends on the system.
2092</CITE>
2093<P>
2094<h3> <TT>appendto (filename)</TT></h3><A NAME="appendto"></A>
2095<P>
2096This function opens a file named <CODE>filename</CODE> and sets it as the
2097value of <CODE>_OUTPUT</CODE>.
2098Unlike the <CODE>writeto</CODE> operation,
2099this function does not erase any previous content of the file.
2100If this function fails, it returns <B>nil</B>,
2101plus a string describing the error.
2102<P>
2103Notice that function <CODE>writeto</CODE> is available to close an output file.
2104<P>
2105<h3> <TT>remove (filename)</TT></h3><A NAME="remove"></A>
2106<P>
2107This function deletes the file with the given name.
2108If this function fails, it returns <B>nil</B>,
2109plus a string describing the error.
2110<P>
2111<h3> <TT>rename (name1, name2)</TT></h3><A NAME="rename"></A>
2112<P>
2113This function renames file named <CODE>name1</CODE> to <CODE>name2</CODE>.
2114If this function fails, it returns <B>nil</B>,
2115plus a string describing the error.
2116<P>
2117<h3> <TT>tmpname ()</TT></h3><A NAME="tmpname"></A>
2118<P>
2119This function returns a string with a file name that can safely
2120be used for a temporary file.
2121The file must be explicitly removed when no longer needed.
2122<P>
2123<h3> <TT>read ([readpattern])</TT></h3><A NAME="read"></A>
2124<P>
2125This function reads the file <CODE>_INPUT</CODE>
2126according to a read pattern, that specifies how much to read;
2127characters are read from the current input file until
2128the read pattern fails or ends.
2129The function <CODE>read</CODE> returns a string with the characters read,
2130even if the pattern succeeds only partially,
2131or <B>nil</B> if the read pattern fails <EM>and</EM>
2132the result string would be empty.
2133When called without parameters,
2134it uses a default pattern that reads the next line
2135(see below).
2136<P>
2137A <A NAME="read pattern"><EM>read pattern</EM></A> is a sequence of read pattern items.
2138An item may be a single character class
2139or a character class followed by <CODE>?</CODE> or by <CODE>*</CODE>.
2140A single character class reads the next character from the input
2141if it belongs to the class, otherwise it fails.
2142A character class followed by <CODE>?</CODE> reads the next character
2143from the input if it belongs to the class;
2144it never fails.
2145A character class followed by <CODE>*</CODE> reads until a character that
2146does not belong to the class, or end of file;
2147since it can match a sequence of zero characters, it never fails.
2148\footnote{
2149Notice that the behavior of read patterns is different from
2150the regular pattern matching behavior,
2151where a <CODE>*</CODE> expands to the maximum length <EM>such that</EM>
2152the rest of the pattern does not fail.
2153With the read pattern behavior
2154there is no need for backtracking the reading.
2155}
2156<P>
2157A pattern item may contain sub-patterns enclosed in curly brackets,
2158that describe <A NAME="skips"><EM>skips</EM></A>.
2159Characters matching a skip are read,
2160but are not included in the resulting string.
2161<P>
2162Following are some examples of read patterns and their meanings:
2163<UL>
2164<LI><CODE>"."</CODE> returns the next character, or <B>nil</B> on end of file.
2165<LI><CODE>".*"</CODE> reads the whole file.
2166<LI><CODE>"[^\n]*{\n}"</CODE> returns the next line
2167(skipping the end of line), or <B>nil</B> on end of file.
2168This is the default pattern.
2169<LI><CODE>"{%s*}%S%S*"</CODE> returns the next word
2170(maximal sequence of non white-space characters),
2171skipping spaces if necessary,
2172or <B>nil</B> on end of file.
2173<LI><CODE>"{%s*}[+-]?%d%d*"</CODE> returns the next integer
2174or <B>nil</B> if the next characters do not conform to an integer format.
2175</UL>
2176<P>
2177<h3> <TT>write (value1, ...)</TT></h3><A NAME="write"></A>
2178<P>
2179This function writes the value of each of its arguments to the
2180file <CODE>_OUTPUT</CODE>.
2181The arguments must be strings or numbers.
2182To write other values,
2183use <CODE>tostring</CODE> or <CODE>format</CODE> before <CODE>write</CODE>.
2184If this function fails, it returns <B>nil</B>,
2185plus a string describing the error.
2186<P>
2187<h3> <TT>date ([format])</TT></h3><A NAME="date"></A>
2188<P>
2189This function returns a string containing date and time
2190formatted according to the given string <CODE>format</CODE>,
2191following the same rules of the ANSI C function <CODE>strftime</CODE>.
2192When called without arguments,
2193it returns a reasonable date and time representation that depends on
2194the host system.
2195<P>
2196<h3> <TT>exit ([code])</TT></h3><A NAME="exit"></A>
2197<P>
2198This function calls the C function <CODE>exit</CODE>,
2199with an optional <CODE>code</CODE>,
2200to terminate the program.
2201The default value for <CODE>code</CODE> is 1.
2202<P>
2203<h3> <TT>getenv (varname)</TT></h3><A NAME="getenv"></A>
2204<P>
2205Returns the value of the environment variable <CODE>varname</CODE>,
2206or <B>nil</B> if the variable is not defined.
2207<P>
2208<h3> <TT>execute (command)</TT></h3><A NAME="execute"></A>
2209<P>
2210This function is equivalent to the C function <CODE>system</CODE>.
2211It passes <CODE>command</CODE> to be executed by an operating system shell.
2212It returns an error code, which is system-dependent.
2213<P>
2214<P>
2215<A NAME="debugI"></A>
2216<!-- ====================================================================== -->
2217<HR>
2218<A NAME="7."></A>
2219<H1>7 - The Debugger Interface</H1>
2220<P>
2221Lua has no built-in debugging facilities.
2222Instead, it offers a special interface,
2223by means of functions and <EM>hooks</EM>,
2224which allows the construction of different
2225kinds of debuggers, profilers, and other tools
2226that need ``inside information'' from the interpreter.
2227This interface is declared in the header file <CODE>luadebug.h</CODE>.
2228<P>
2229<A NAME="7.1"></A>
2230<H2>7.1 - Stack and Function Information</H2>
2231<P>
2232The main function to get information about the interpreter stack
2233is
2234<LISTING>
2235lua_Function lua_stackedfunction (int level);
2236</LISTING>
2237It returns a handle (<CODE>lua_Function</CODE>) to the <EM>activation record</EM>
2238of the function executing at a given level.
2239Level&nbsp;0 is the current running function,
2240while level <I>n+1</I> is the function that has called level <I>n</I>.
2241When called with a level greater than the stack depth,
2242<CODE>lua_stackedfunction</CODE> returns <CODE>LUA_NOOBJECT</CODE>.
2243<P>
2244The type <CODE>lua_Function</CODE> is just another name
2245to <CODE>lua_Object</CODE>.
2246Although, in this library,
2247a <CODE>lua_Function</CODE> can be used wherever a <CODE>lua_Object</CODE> is required,
2248when a parameter has type <CODE>lua_Function</CODE>
2249it accepts only a handle returned by
2250<CODE>lua_stackedfunction</CODE>.
2251<P>
2252Three other functions produce extra information about a function:
2253<LISTING>
2254void lua_funcinfo (lua_Object func, char **filename, int *linedefined);
2255int lua_currentline (lua_Function func);
2256char *lua_getobjname (lua_Object o, char **name);
2257</LISTING>
2258<CODE>lua_funcinfo</CODE> gives the file name and the line where the
2259given function has been defined.
2260If the ``function'' is in fact the main code of a chunk,
2261then <CODE>linedefined</CODE> is 0.
2262If the function is a C function,
2263then <CODE>linedefined</CODE> is -1, and <CODE>filename</CODE> is <CODE>"(C)"</CODE>.
2264<P>
2265The function <CODE>lua_currentline</CODE> gives the current line where
2266a given function is executing.
2267It only works if the function has been compiled with debug
2268information (see Section&nbsp;<A HREF="#pragma">4.9</A>).
2269When no line information is available, it returns -1.
2270<P>
2271Function <CODE>lua_getobjname</CODE> tries to find a reasonable name for
2272a given function.
2273Because functions in Lua are first class values,
2274they do not have a fixed name:
2275Some functions may be the value of many global variables,
2276while others may be stored only in a table field.
2277Function <CODE>lua_getobjname</CODE> first checks whether the given
2278function is a tag method.
2279If so, it returns the string <CODE>"tag-method"</CODE>,
2280and <CODE>name</CODE> is set to point to the event name.
2281Otherwise, if the given function is the value of a global variable,
2282then <CODE>lua_getobjname</CODE> returns the string <CODE>"global"</CODE>,
2283and <CODE>name</CODE> points to the variable name.
2284If the given function is neither a tag method nor a global variable,
2285then <CODE>lua_getobjname</CODE> returns the empty string,
2286and <CODE>name</CODE> is set to <CODE>NULL</CODE>.
2287<P>
2288<A NAME="7.2"></A>
2289<H2>7.2 - Manipulating Local Variables</H2>
2290<P>
2291The following functions allow the manipulation of the
2292local variables of a given activation record.
2293They only work if the function has been compiled with debug
2294information (see Section&nbsp;<A HREF="#pragma">4.9</A>).
2295<LISTING>
2296lua_Object lua_getlocal (lua_Function func, int local_number, char **name);
2297int lua_setlocal (lua_Function func, int local_number);
2298</LISTING>
2299<CODE>lua_getlocal</CODE> returns the value of a local variable,
2300and sets <CODE>name</CODE> to point to the variable name.
2301<CODE>local_number</CODE> is an index for local variables.
2302The first parameter has index 1, and so on, until the
2303last active local variable.
2304When called with a <CODE>local_number</CODE> greater than the
2305number of active local variables,
2306or if the activation record has no debug information,
2307<CODE>lua_getlocal</CODE> returns <CODE>LUA_NOOBJECT</CODE>.
2308Formal parameters are the first local variables.
2309<P>
2310The function <CODE>lua_setlocal</CODE> sets the local variable
2311<CODE>local_number</CODE> to the value previously pushed on the stack
2312(see Section&nbsp;<A HREF="#valuesCLua">5.1</A>).
2313If the function succeeds, then it returns 1.
2314If <CODE>local_number</CODE> is greater than the number
2315of active local variables,
2316or if the activation record has no debug information,
2317then this function fails and returns 0.
2318<P>
2319<A NAME="7.3"></A>
2320<H2>7.3 - Hooks</H2>
2321<P>
2322The Lua interpreter offers two hooks for debugging purposes:
2323<LISTING>
2324typedef void (*lua_CHFunction) (lua_Function func, char *file, int line);
2325extern lua_CHFunction lua_callhook;
2326<P>
2327typedef void (*lua_LHFunction) (int line);
2328extern lua_LHFunction lua_linehook;
2329</LISTING>
2330The first one is called whenever the interpreter enters or leaves a
2331function.
2332When entering a function,
2333its parameters are a handle to the function activation record,
2334plus the file and the line where the function is defined (the same
2335information which is provided by <CODE>lua_funcinfo</CODE>);
2336when leaving a function, <CODE>func</CODE> is <CODE>LUA_NOOBJECT</CODE>,
2337<CODE>file</CODE> is <CODE>"(return)"</CODE>, and <CODE>line</CODE> is 0.
2338<P>
2339The other hook is called every time the interpreter changes
2340the line of code it is executing.
2341Its only parameter is the line number
2342(the same information which is provided by the call
2343<CODE>lua_currentline(lua_stackedfunction(0))</CODE>).
2344This second hook is only called if the active function
2345has been compiled with debug information (see Section&nbsp;<A HREF="#pragma">4.9</A>).
2346<P>
2347A hook is disabled when its value is <CODE>NULL</CODE>,
2348which is the initial value of both hooks.
2349<P>
2350<P>
2351<P>
2352<A NAME="lua-sa"></A>
2353<!-- ====================================================================== -->
2354<HR>
2355<A NAME="8."></A>
2356<H1>8 - Lua Stand-alone</H1>
2357<P>
2358Although Lua has been designed as an extension language,
2359the language can also be used as a stand-alone interpreter.
2360An implementation of such an interpreter,
2361called simply <CODE>lua</CODE>,
2362is provided with the standard distribution.
2363This program can be called with any sequence of the following arguments:
2364<DL>
2365<DT><B><TT>-v</TT></B><DD> prints version information.
2366<DT><B><TT>-</TT></B><DD> runs interactively, accepting commands from standard input
2367until an <CODE>EOF</CODE>.
2368<DT><B><TT>-e stat</TT></B><DD> executes <CODE>stat</CODE> as a Lua chunk.
2369<DT><B><TT>var=exp</TT></B><DD> executes <CODE>var=exp</CODE> as a Lua chunk.
2370<DT><B><TT>filename</TT></B><DD> executes file <CODE>filename</CODE> as a Lua chunk.
2371</DL>
2372All arguments are handled in order.
2373For instance, an invocation like
2374<LISTING>
2375$ lua - a=1 prog.lua
2376</LISTING>
2377will first interact with the user until an <CODE>EOF</CODE>,
2378then will set <CODE>a</CODE> to 1,
2379and finally will run file <CODE>prog.lua</CODE>.
2380<P>
2381Please notice that the interaction with the shell may lead to
2382unintended results.
2383For instance, a call like
2384<LISTING>
2385$ lua a="name" prog.lua
2386</LISTING>
2387will <EM>not</EM> set <CODE>a</CODE> to the string <CODE>"name"</CODE>.
2388Instead, the quotes will be handled by the shell,
2389lua will get only <CODE>a=name</CODE> to run,
2390and <CODE>a</CODE> will finish with <B>nil</B>,
2391because the global variable <CODE>name</CODE> has not been initialized.
2392Instead, one should write
2393<LISTING>
2394$ lua 'a="name"' prog.lua
2395</LISTING>
2396<P>
2397<HR>
2398<A NAME="Acknowledgments"></A>
2399<h1>Acknowledgments</h1>
2400<P>
2401The authors would like to thank CENPES/PETROBRAS which,
2402jointly with TeCGraf, used extensively early versions of
2403this system and gave valuable comments.
2404The authors would also like to thank Carlos Henrique Levy,
2405who found the name of the game.
2406Lua means <EM>moon</EM> in Portuguese.
2407<P>
2408<P>
2409<P>
2410<P>
2411<HR>
2412<A NAME="Incompatibilities"></A>
2413<h1>Incompatibilities with Previous Versions</h1>
2414<P>
2415Although great care has been taken to avoid incompatibilities with
2416the previous public versions of Lua,
2417some differences had to be introduced.
2418Here is a list of all these incompatibilities.
2419<P>
2420<h2>Incompatibilities with <A NAME="version 2.5</h2>">version 2.5</h2></A>
2421<UL>
2422<LI>
2423The whole fallback mechanism has been replaced by tag methods.
2424Nevertheless, the function <CODE>setfallback</CODE> has been rewritten in
2425a way that uses tag methods to fully emulate the old behavior
2426of fallbacks.
2427<LI>
2428Tags now must be created with the function <CODE>newtag</CODE>.
2429Nevertheless, old user defined tags are still accepted
2430(user defined tags must be positive;
2431<CODE>newtag</CODE> uses negative numbers).
2432Tag methods cannot be set for such user defined tags,
2433and fallbacks do not affect tags created by <CODE>newtag</CODE>.
2434<LI>
2435Lua 2.5 accepts mixed comparisons of strings and numbers,
2436like <CODE>2&lt;"12"</CODE>, giving weird results.
2437Now this is an error.
2438<LI>
2439Character <CODE>"-"</CODE> (hyphen) now is ``magic'' in pattern matching.
2440<LI>
2441Some API functions have been rewritten as macros.
2442</UL>
2443<P>
2444<h2>Incompatibilities with <A NAME="version 2.4</h2>">version 2.4</h2></A>
2445The whole I/O facilities have been rewritten.
2446We strongly encourage programmers to adapt their code
2447to this new version.
2448The incompatibilities between the new and the old libraries are:
2449<UL>
2450<LI>The format facility of function <CODE>write</CODE> has been supersed by
2451function <CODE>format</CODE>;
2452therefore this facility has been dropped.
2453<LI>Function <CODE>read</CODE> now uses <EM>read patterns</EM> to specify
2454what to read;
2455this is incompatible with the old format options.
2456<LI>Function <CODE>strfind</CODE> now accepts patterns,
2457so it may have a different behavior when the pattern includes
2458special characters.
2459</UL>
2460<P>
2461<h2>Incompatibilities with <A NAME="version 2.2</h2>">version 2.2</h2></A>
2462<UL>
2463<LI>
2464Functions <CODE>date</CODE> and <CODE>time</CODE> (from <CODE>iolib</CODE>)
2465have been superseded by the new, more powerful version of function <CODE>date</CODE>.
2466<LI>
2467Function <CODE>append</CODE> (from <CODE>iolib</CODE>) now returns 1 whenever it succeeds,
2468whether the file is new or not.
2469<LI>
2470Function <CODE>int2str</CODE> (from <CODE>strlib</CODE>) has been superseded by new
2471function <CODE>format</CODE>, with parameter <CODE>"%c"</CODE>.
2472<LI>
2473The API lock mechanism has been superseded by the reference mechanism.
2474However, <CODE>lua.h</CODE> provides compatibility macros,
2475so there is no need to change programs.
2476<LI>
2477The API function <CODE>lua_pushliteral</CODE> now is just a macro to
2478<CODE>lua_pushstring</CODE>.
2479</UL>
2480<P>
2481<h2>Incompatibilities with <A NAME="version 2.1</h2>">version 2.1</h2></A>
2482<UL>
2483<LI>
2484The function <CODE>type</CODE> now returns the string <CODE>"function"</CODE>
2485both for C and Lua functions.
2486Because Lua functions and C functions are compatible,
2487this behavior is usually more useful.
2488When needed, the second result of function <TT>type</TT> may be used
2489to distinguish between Lua and C functions.
2490<LI>
2491A function definition only assigns the function value to the
2492given variable at execution time.
2493</UL>
2494<P>
2495<h2>Incompatibilities with <A NAME="version 1.1</h2>">version 1.1</h2></A>
2496<UL>
2497<LI>
2498The equality test operator now is denoted by <CODE>==</CODE>,
2499instead of <CODE>=</CODE>.
2500<LI>
2501The syntax for table construction has been greatly simplified.
2502The old <CODE>@(size)</CODE> has been substituted by <CODE>{}</CODE>.
2503The list constructor (formerly <CODE>@[...]</CODE>) and the record
2504constructor (formerly <CODE>@{...}</CODE>) now are both coded like
2505<CODE>{...}</CODE>.
2506When the construction involves a function call,
2507like in <CODE>@func{...}</CODE>,
2508the new syntax does not use the <CODE>@</CODE>.
2509More important, {\em a construction function must now
2510explicitly return the constructed table}.
2511<LI>
2512The function <CODE>lua_call</CODE> no longer has the parameter <CODE>nparam</CODE>.
2513<LI>
2514The function <CODE>lua_pop</CODE> is no longer available,
2515since it could lead to strange behavior.
2516In particular,
2517to access results returned from a Lua function,
2518the new macro <CODE>lua_getresult</CODE> should be used.
2519<LI>
2520The old functions <CODE>lua_storefield</CODE> and <CODE>lua_storeindexed</CODE>
2521have been replaced by
2522<LISTING>
2523int lua_storesubscript (void);
2524</LISTING>
2525with the parameters explicitly pushed on the stack.
2526<LI>
2527The functionality of the function <CODE>lua_errorfunction</CODE> has been
2528replaced by the <EM>fallback</EM> mechanism (see Section&nbsp;<A HREF="#error">4.9</A>).
2529<LI>
2530When calling a function from the Lua library,
2531parameters passed through the stack
2532must be pushed just before the corresponding call,
2533with no intermediate calls to Lua.
2534Special care should be taken with macros like
2535<CODE>lua_getindexed</CODE> and <CODE>lua_getfield</CODE>.
2536</UL>
2537<P>
2538<P>
2539
2540<HR>
2541Last update:
2542Tue Jul 1 07:55:45 EST 1997
2543by <A HREF="http://www.tecgraf.puc-rio.br/~lhf/">lhf</A>.
2544</BODY>
2545</HTML>
doc/refman.ps+0−7807
@@ -1,7807 +0,0 @@
1%!PS-Adobe-2.0
2%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software
3%%Title: manual.dvi
4%%Pages: 39
5%%PageOrder: Ascend
6%%BoundingBox: 0 0 612 792
7%%DocumentPaperSizes: Letter
8%%EndComments
9%DVIPSCommandLine: /visgraf/pub/teTeX/bin/sun4/dvips manual
10%DVIPSParameters: dpi=600, comments removed
11%DVIPSSource: TeX output 1996.11.18:1940
12%%BeginProcSet: tex.pro
13/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
14/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
15mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
16ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
17isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
18hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
19TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
20forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
21/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
22/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
23/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
24string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
25end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
26/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
27N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
28length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
29128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
30get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
31dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
32/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
33/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
340 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
35setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
36.1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}
37if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
38length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
39cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
400 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
41add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
42/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
43known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
44/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
4565781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
460]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
47{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
48getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
49ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
50RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
51false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
52round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
53rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
54{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
55B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
564 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
57p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
58a}B /bos{/SS save N}B /eos{SS restore}B end
59%%EndProcSet
60TeXDict begin 40258431 52099146 1000 600 600 (manual.dvi)
61@start /Fa 7 115 df<000000FFF00000000FFFFF8000003FFFFFF00000FFFFFFFC0001
62FFFFFFFC0007FFFFFFFC000FFF803FF8001FFC0003F8003FF00000F8007FC000003800FF
638000001801FF0000000003FE0000000003FC0000000007FC0000000007F8000000000FF0
64000000000FF0000000001FE0000000001FE0000000003FC0000000003FC0000000003FC0
65000000007F80000000007F80000000007F80000000007F8000000000FF0000000000FF00
6600000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00
6700000000FF0000000000FF0000000000FF0000000000FF0000000000FF00000000007F80
68000000007F80000000007F80000000007F80000000003FC0000000003FC0000000003FC0
69000000001FE0000000001FE0000000000FF0000000000FF00000000007F80000000007FC
700000000003FC0000000003FE0000000001FF0000000400FF8000000C007FC000003C003F
71F000007C001FFC0001FE000FFF801FFE0007FFFFFFFE0001FFFFFFFC0000FFFFFFF00000
723FFFFFC000000FFFFF00000000FFF0002F437AC03A>67 D<000000FFF000000007FFFF00
7300003FFFFFE00000FFFFFFF80001FFFFFFFE0007FFFFFFFE000FFF803FFE001FFC0003FC
74003FF00000FC007FE000003C00FF8000001C01FF0000000C01FE0000000003FC00000000
7507FC0000000007F8000000000FF0000000000FF0000000001FE0000000001FE000000000
763FC0000000003FC0000000003FC0000000007F80000000007F80000000007F8000000000
777F8000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000
78FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF000007FFFF
79FF000007FFFFFF000007FFFF7F800007FFFF7F800007FFFF7F800007FFFF7F800000007F
803FC00000007F3FC00000007F3FC00000007F1FE00000007F1FE00000007F0FF00000007F
810FF00000007F07F80000007F07FC0000007F03FC0000007F01FE0000007F01FF0000007F
8200FF8000007F007FE000007F003FF000007F001FFC0001FF000FFF801FFF0007FFFFFFFF
830001FFFFFFFF0000FFFFFFFC00003FFFFFF0000007FFFF00000000FFF00030437AC03D>
8471 D<FFFFFFFFFFFFFEFFFFFFFFFFFFFEFFFFFFFFFFFFFEFFFFFFFFFFFFFEFFFFFFFFFF
85FFFEFFFFFFFFFFFFFE000000FF000000000000FF000000000000FF000000000000FF0000
8600000000FF000000000000FF000000000000FF000000000000FF000000000000FF000000
87000000FF000000000000FF000000000000FF000000000000FF000000000000FF00000000
880000FF000000000000FF000000000000FF000000000000FF000000000000FF0000000000
8900FF000000000000FF000000000000FF000000000000FF000000000000FF000000000000
90FF000000000000FF000000000000FF000000000000FF000000000000FF000000000000FF
91000000000000FF000000000000FF000000000000FF000000000000FF000000000000FF00
920000000000FF000000000000FF000000000000FF000000000000FF000000000000FF0000
9300000000FF000000000000FF000000000000FF000000000000FF000000000000FF000000
94000000FF000000000000FF000000000000FF000000000000FF000000000000FF00000000
950000FF000000000000FF000000000000FF000000000000FF000000000000FF0000000000
9600FF000000373E7DBD3E>84 D<000FF80000FFFF0003FFFF800FFFFFE01FFFFFF01FFFFF
97F01FF00FF81F8003FC1E0001FC180001FE100000FE000000FF0000007F0000007F000000
987F0000007F0000007F0000007F0000007F00007FFF000FFFFF007FFFFF01FFFFFF07FFFF
99FF0FFFF07F3FFC007F3FC0007F7F00007FFE00007FFC00007FFC00007FFC00007FFC0000
100FFFE0000FFFE0001FF7F8007FF7FE01FFF3FFFFFFF3FFFFFFF1FFFFF7F0FFFFC7F07FFF0
1017F01FF0000202B7CA92C>97 D<0003F80000001FFF0000007FFFC00000FFFFE00001FFFF
102F00003FFFFF80007FE07F8000FF801FC000FE000FE001FC0007E003FC0003E003F80003F
103003F00001F007F00001F007E00001F007E00000F80FFFFFFFF80FFFFFFFF80FFFFFFFF80
104FFFFFFFF80FFFFFFFF80FFFFFFFF80FC00000000FC00000000FC00000000FE000000007E
105000000007E000000007F000000007F000000003F800000003F800000001FC00000001FE0
1060000800FF000038007FC001F8007FF00FF8003FFFFFF8001FFFFFF80007FFFFF00003FFF
107FC00000FFFE0000001FF0000212B7DA928>101 D<00001FF00000FFFC0001FFFC0007FF
108FC000FFFFC000FFFFC001FE03C003F8004003F0000007F0000007E000000FE000000FE00
1090000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00
1100000FE000000FE0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000FE00
1110000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00
1120000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00
1130000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00
1140000FE000000FE000000FE000000FE000000FE000000FE00001E407FBF1C>I<FC007CFC
11503FCFC0FFCFC1FFCFC3FFCFC7FFCFCFFC0FDFE00FFF800FFF000FFE000FFC000FFC000FF
1168000FF8000FF0000FF0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
1170000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
1180000FE0000FE0000FE0000162979A81F>114 D E /Fb 7 121 df<001FFC00000000FFFF
11980000003FFFFE0000007FFFFF000000FFFFFFC00001FFFFFFE00001FF007FF00001FE001
120FF00001FE000FF80001FE0003F80000FC0003FC0000780001FC0000000001FE000000000
1210FE0000000000FE0000000000FE0000000000FE0000000000FE00000000FFFE0000001FF
122FFE000001FFFFFE000007FFFFFE00001FFFFFFE00007FFFF0FE0000FFFC00FE0001FFC00
1230FE0003FF0000FE0007FC0000FE0007F80000FE000FF00000FE000FE00000FE000FE0000
1240FE000FE00000FE000FE00000FE000FE00000FE000FF00001FE0007F00001FE0007F8000
1257FE0003FE000FFF0003FF807FFFFF01FFFFFFFFFF80FFFFFFFFFF807FFFFF3FFF803FFFF
126C1FFF800FFFF003FF0001FF00000002D2E7BAC33>97 D<0000FF80000007FFF000001FFF
127FC00003FFFFE0000FFFFFF0001FFFFFF8003FF80FFC007FE003FE007F8000FF00FF00007
128F01FE00007F81FC00003F83FC00003FC3F800001FC7F800001FC7F000001FC7F000001FE
1297F000000FEFF000000FEFE000000FEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFF
130FFFFFFFEFFFFFFFFFCFE00000000FF000000007F000000007F000000007F000000003F80
1310000003F8000007C1FC00000FE1FE00000FE0FF00000FE0FF80001FE07FC0003FC03FF00
1320FFC01FFC03FF800FFFFFFF0007FFFFFE0003FFFFFC0000FFFFF000003FFFC0000007FE0
13300272E7BAC33>101 D<000001FF00003FFC07FFC0007FFE1FFFF000FFFE7FFFF800FFFE
134FFFFF8007FFFFFFFFC003FFFFF07FE0000FFF801FE0000FFF000FE0000FFE000FF0000FF
135C0007F0000FF80007F0000FF80007F0000FF00007F0000FF00007F0000FF00007F0000FE
13600007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE
13700007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE
13800007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE
13900007F0000FE00007F0000FE00007F0000FE00007F003FFFF80FFFFC7FFFFC1FFFFEFFFF
140FE3FFFFFFFFFFE3FFFFF7FFFFC1FFFFE3FFFF80FFFFC302C7FAB33>110
141D<00000003FE007FFF801FFF80FFFFC07FFFE0FFFFC1FFFFE0FFFFC3FFFFF0FFFFC7FFFF
142F07FFFCFFE0FF0001FDFF00FF0001FFFC007E0001FFF8003C0001FFF000000001FFE0000
14300001FFC000000001FF8000000001FF8000000001FF0000000001FF0000000001FE00000
14400001FE0000000001FE0000000001FC0000000001FC0000000001FC0000000001FC00000
14500001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00000
14600001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00000
14700001FC0000000001FC00000007FFFFFFE0000FFFFFFFF0000FFFFFFFF0000FFFFFFFF00
14800FFFFFFFF00007FFFFFFE00002C2C7DAB33>114 D<0003C00000000007E0000000000F
149E0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000F
150E0000000000FE0000000000FE0000000000FE00000003FFFFFFFFC007FFFFFFFFE00FFFF
151FFFFFE00FFFFFFFFFE00FFFFFFFFFE007FFFFFFFFC00000FE0000000000FE0000000000F
152E0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000F
153E0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000F
154E0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000F
155E0000000000FE0001F00000FE0003F80000FE0003F80000FE0003F80000FE0003F80000F
156E0003F80000FE0007F80000FF0007F000007F000FF000007F801FF000007FE07FE000003
157FFFFFC000001FFFFF8000000FFFFF00000007FFFE00000001FFF8000000007FC00002938
1587EB633>116 D<3FFFC00FFFF07FFFE01FFFF8FFFFF03FFFFCFFFFF03FFFFC7FFFE01FFF
159F83FFFC00FFFF001F800007E0001FC0000FE0000FC0000FC0000FC0000FC0000FE0001FC
16000007E0001F800007E0001F800007F0003F800003F0003F000003F0003F000003F8007F0
16100001F8007E000001F8007E000001FC00FE000000FC00FC000000FC00FC000000FC00FC0
162000007E01F80000007E01F80000007E01F80000007F03F80000003F03F00000003F03F00
163000003F87F00000001F87E00000001F87E00000001FCFE00000000FCFC00000000FCFC00
164000000FFFC000000007FF8000000007FF8000000007FF8000000003FF0000000003FF000
1650000001FE0000000000FC000002E2B7EAA33>118 D<3FFFC07FFF807FFFE0FFFFC0FFFF
166F1FFFFE0FFFFF1FFFFE07FFFE0FFFFC03FFFC07FFF8000FE000FE000007F001FC000003F
167801FC000003F803F8000001FC07F0000000FE07E00000007F0FE00000007F1FC00000003
168FBF800000001FFF800000000FFF000000000FFE0000000007FC0000000003FC000000000
1691F80000000003F80000000003FC0000000007FE000000000FFE000000001FBF000000001
170F9F800000003F1FC00000007E0FC00000007E07E0000000FC07F0000001FC03F8000003F
171801F8000003F001FC000007F000FE00000FE0007F00001FC0003F0007FFFC03FFFE0FFFF
172E07FFFF0FFFFE07FFFF0FFFFE07FFFF0FFFFE07FFFF07FFFC03FFFE02C2B7DAA33>120
173D E /Fc 1 43 df<000F0000001F8000001F8000001F8000001F8000001F8000001F8000
174781F81E0FE1F87F0FF1F8FF0FFDFBFF07FFFFFE03FFFFFC00FFFFF0003FFFC0000FFF000
17500FFF00003FFFC000FFFFF003FFFFFC07FFFFFE0FFDFBFF0FF1F8FF0FE1F87F0781F81E0
176001F8000001F8000001F8000001F8000001F8000001F8000000F00001C207BA627>42
177D E /Fd 1 122 df<01E0000007F8000E0E3C001F1C3E003F383E003E303E003E703E00
1783E607E007EE07C007CC07C007CC0FC007C80F800FC00F800F801F800F801F000F801F001
179F803F001F003E001F003E001F003E003F007E003E007C003E007C003E007C007E007C007
180C003C00FC003E01FC003E03FC001F07F80007FEF80001F8F8000001F8000001F0000001F
181003E003E003E003E007E007C007E00F8007C01F0007003E0003007C0003C0F80000FFE00
1820003F00000202C7E9D23>121 D E /Fe 3 121 df<1E007F80FF80FFC0FFC0FFE0FFE0FF
183E07FE01E60006000600060006000E000C000C000C001C001800380030007000E001C0018
18400380030000B1C798919>59 D<01F0000FF0000007FC003FFE00000F1F00F01F00000E1F
18503C00F80001E0F87000FC0001C0F8E0007C0003C0FDC0007E000380FF80007E000380FF0
1860007E000781FF00007E000701FE00007E000701FC00007E000701FC00007E000F01F8000
1870FE000F03F80000FC000003F00000FC000003F00000FC000003F00001FC000007F00001F
1888000007E00001F8000007E00003F8000007E00003F000000FE00003F000000FC00007F00
1890000FC00007E000000FC00007E000001FC0000FE038001F80000FC038001F80000FC0380
19001F80001FC078003F80001F8070003F00001F8070003F00001F80F0003F00001F00E0007
191F00001F01E0007E00001F01C0007E00001F0380007E00001F078000FE00000F8F0000FC0
19200007FC000038000001F000031297EA737>110 D<0001F8003F000007FE00FFE0001E0F
19383C0F0003807C780F8007003CF03F800E003FE03F801C003FC07F803C003FC07F8038003
194F807F8070003F807F0070003F801C00E0003F000000E0003F000001E0007F000001E0007
195F00000000007E00000000007E0000000000FE0000000000FC0000000000FC0000000000F
196C0000000001FC0000000001F80000000001F80000000001F80000000003F80000000003F
1970001C000003F0001C000003F0001C000007F0003C01E007F0003803F007E0007807F80FE
1980007007F80FE000F00FF81FE001E00FF01DF001C00FE03DF0038007C078F80F0003C0F07
199C1E0001FFC03FF800007F0007E00002D297EA734>120 D E /Ff
20051 121 df<0000000FFF0000000001FFFFC00000000FFFFFF00000007FFFFFF8000001FF
201F803FC000003FFC000FE00000FFF0003FE00001FFE0007FF00003FFC000FFF00003FF800
2020FFF00007FF0000FFF00007FF0001FFF8000FFF0000FFF0000FFE0000FFF0000FFE0000F
203FF0000FFE0000FFF0000FFE00007FE0000FFE00001F80000FFE00000000000FFE0000000
2040000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE000000000
20500FFE001FFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80FF
206FFFFFFFFFF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FF
207E00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE0
2080003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE000
20903FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003
210FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF
2118000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF80
21200FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF807FFFFFC1FFFFFF7F
213FFFFC1FFFFFF7FFFFFC1FFFFFF7FFFFFC1FFFFFF7FFFFFC1FFFFFF38467EC53E>12
214D<07C01FF03FF87FFCFFFEFFFEFFFEFFFEFFFEFFFEFFFE7FFC3FF81FF007C00F0F788E1F
215>46 D<0000000001C00000000003E00000000007E00000000007E0000000000FE0000000
216000FC0000000001FC0000000001F80000000001F80000000003F80000000003F00000000
217007F00000000007E00000000007E0000000000FE0000000000FC0000000001FC00000000
21801F80000000001F80000000003F80000000003F00000000003F00000000007F000000000
21907E0000000000FE0000000000FC0000000000FC0000000001FC0000000001F8000000000
2203F80000000003F00000000003F00000000007F00000000007E0000000000FE0000000000
221FC0000000000FC0000000001FC0000000001F80000000003F80000000003F00000000003
222F00000000007F00000000007E0000000000FE0000000000FC0000000000FC0000000001F
223C0000000001F80000000003F80000000003F00000000003F00000000007F00000000007E
22400000000007E0000000000FE0000000000FC0000000001FC0000000001F80000000001F8
2250000000003F80000000003F00000000007F00000000007E00000000007E0000000000FE0
226000000000FC0000000001FC0000000001F80000000001F80000000003F80000000003F00
227000000007F00000000007E00000000007E0000000000FE0000000000FC0000000001FC00
22800000001F80000000001F80000000003F80000000003F00000000003F00000000007F000
22900000007E0000000000FE0000000000FC0000000000FC0000000001FC0000000001F8000
2300000003F80000000003F00000000003F00000000007F00000000007E0000000000FE0000
231000000FC0000000000FC0000000000F800000000007800000000002B647ACA38>I<0000
2323FF800000001FFFF0000000FFFFFE000003FFFFFF800007FF01FFC0000FFC007FE0001FF
2330001FF0003FE0000FF8007FE0000FFC007FC00007FC00FFC00007FE00FF800003FE01FF8
23400003FF01FF800003FF03FF800003FF83FF800003FF83FF000001FF87FF000001FFC7FF0
23500001FFC7FF000001FFC7FF000001FFC7FF000001FFC7FF000001FFCFFF000001FFEFFF0
23600001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF0
23700001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF0
23800001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF0
23900001FFEFFF000001FFE7FF000001FFC7FF000001FFC7FF000001FFC7FF000001FFC7FF0
24000001FFC3FF800003FF83FF800003FF83FF800003FF81FF800003FF01FF800003FF00FF8
24100003FE00FFC00007FE007FC00007FC007FE0000FFC003FF0001FF8001FF8003FF0000FF
242C007FE00007FF01FFC00003FFFFFF800000FFFFFE0000003FFFF800000003FF800002F42
2437CC038>I<000003C000000007C00000001FC00000007FC0000003FFC000003FFFC000FF
244FFFFC000FFFFFFC000FFFFFFC000FFFFFFC000FFC3FFC0000003FFC0000003FFC0000003
245FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FF
246C0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0
247000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC000
2480003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC00000
24903FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003
250FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FF
251C0000003FFC0000003FFC0000003FFC000FFFFFFFFFCFFFFFFFFFCFFFFFFFFFCFFFFFFFF
252FCFFFFFFFFFC264177C038>I<0000FFE00000000FFFFE0000003FFFFF800000FFFFFFE0
2530003FFFFFFF80007FC03FFFE000FE0007FFF001F80003FFF803F00000FFFC07F000007FF
254C07FC00007FFE07FF00003FFE0FFF00001FFF0FFF80001FFF0FFF80001FFF8FFF80000FF
255F8FFF80000FFF8FFF80000FFF8FFF80000FFF87FF00000FFF83FE00000FFF81FC00000FF
256F800000000FFF800000000FFF000000001FFF000000001FFF000000001FFE000000003FF
257E000000003FFC000000007FF800000000FFF000000000FFF000000001FFC000000003FF8
258000000003FF0000000007FE000000000FFC000000001FF0000000003FE0000000007FC00
2590000000FF0000000001FE0000000003F80000000007F0000780000FE0000780001FC0000
260780003F80000F80007E00000F0000FC00000F0001F800000F0003F000000F0007C000001
261F000F8000003F001FFFFFFFFF003FFFFFFFFE007FFFFFFFFE00FFFFFFFFFE01FFFFFFFFF
262E03FFFFFFFFFE07FFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFF
263C0FFFFFFFFFFC02D417BC038>I<0000FFF000000007FFFF0000001FFFFFC000007FFFFF
264F00000FF007FF80003F8003FFE0007E0001FFF0007E0000FFF000FF80007FF800FFE0007
265FF801FFE0007FFC01FFF0007FFC01FFF0007FFC01FFF0007FFC01FFF0007FFC01FFF0007
266FFC01FFF0007FFC00FFE0007FFC007FC0007FF8003F8000FFF800000000FFF000000001F
267FF000000001FFE000000003FFC000000007FF800000000FFF000000001FFE00000000FFF
26880000007FFFE00000007FFF800000007FFFF00000007FFFFC000000000FFF0000000003F
269FC000000000FFE000000000FFF8000000007FF8000000003FFC000000003FFE000000003
270FFE000000001FFF000000001FFF000000001FFF800000001FFF800000001FFF80FC00001
271FFF83FF00001FFF87FF80001FFF87FF80001FFF8FFFC0001FFF8FFFC0001FFF8FFFC0001
272FFF0FFFC0001FFF0FFFC0003FFF0FFFC0003FFE07FF80003FFE07FF00007FFC07FE00007
273FFC03F80000FFF801FF0001FFF000FFE00FFFE0007FFFFFFF80001FFFFFFF000007FFFFF
274C000001FFFFE00000001FFE000002D427BC038>I<000000003F0000000000003F000000
2750000007F000000000000FF000000000001FF000000000003FF000000000003FF00000000
2760007FF00000000000FFF00000000001FFF00000000003FFF00000000003FFF0000000000
2777FFF0000000000FFFF0000000001F7FF0000000003E7FF0000000007E7FF0000000007C7
278FF000000000F87FF000000001F07FF000000003E07FF000000007E07FF000000007C07FF
27900000000F807FF00000001F007FF00000003E007FF00000007E007FF00000007C007FF00
28000000F8007FF0000001F0007FF0000003E0007FF0000007C0007FF0000007C0007FF0000
28100F80007FF000001F00007FF000003E00007FF000007C00007FF00000FC00007FF00000F
282800007FF00001F000007FF00003E000007FF00007C000007FF0000FC000007FF0000FFFF
283FFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80000000
2840FFF00000000000FFF00000000000FFF00000000000FFF00000000000FFF00000000000F
285FF00000000000FFF00000000000FFF00000000000FFF00000000000FFF00000000000FFF
28600000000000FFF000000007FFFFFFF8000007FFFFFFF8000007FFFFFFF8000007FFFFFFF
2878000007FFFFFFF8031417DC038>I<07000000030007E000003F0007FF0007FF0007FFFF
288FFFF0007FFFFFFFE0007FFFFFFFC0007FFFFFFF80007FFFFFFF00007FFFFFFE00007FFFF
289FF800007FFFFFE000007FFFFFC000007FFFFE0000007FFFF00000007C00000000007C000
29000000007C00000000007C00000000007C00000000007C00000000007C00000000007C000
29100000007C00000000007C00000000007C03FF0000007C1FFFF000007C7FFFFC00007DFFF
292FFF00007FFE03FFC0007FF000FFE0007FC0007FF0007F00003FF8007E00003FFC007C000
29301FFC003800001FFE000000001FFE000000000FFF000000000FFF000000000FFF0000000
29400FFF800000000FFF800000000FFF800000000FFF80F800000FFF83FE00000FFF87FF000
29500FFF8FFF00000FFF8FFF80000FFF8FFF80000FFF8FFF80000FFF8FFF80000FFF0FFF000
29600FFF0FFF00001FFF07FE00001FFE07FC00001FFE07E000003FFC03E000003FFC03F0000
29707FF801FC0000FFF000FF0001FFE0007FE00FFFC0003FFFFFFF00000FFFFFFE000003FFF
298FF8000000FFFFC00000001FFC000002D427BC038>I<000001FF800000001FFFF0000000
2997FFFFC000001FFFFFF000007FF807F80000FFC001F80003FF0001FC0007FE0007FC000FF
300C000FFE001FF8001FFE003FF8001FFE003FF0001FFE007FE0001FFE00FFE0001FFE00FFE
3010001FFE01FFC0000FFC01FFC00007F801FFC00001E003FFC000000003FFC000000003FF8
302000000007FF8000000007FF8000000007FF807FC00007FF81FFF8000FFF87FFFE000FFF8
303FFFFF800FFF9F01FFC00FFFBC007FE00FFFF8003FF00FFFF8003FF80FFFF0001FFC0FFFE
3040001FFC0FFFE0000FFE0FFFE0000FFE0FFFC0000FFF0FFFC0000FFF0FFFC0000FFF0FFFC
3050000FFF8FFF80000FFF8FFF80000FFF8FFF80000FFF8FFF80000FFF87FF80000FFF87FF8
3060000FFF87FF80000FFF87FF80000FFF87FF80000FFF83FF80000FFF83FF80000FFF83FF8
3070000FFF03FFC0000FFF01FFC0000FFF01FFC0000FFF00FFC0001FFE00FFC0001FFE007FE
3080001FFC007FF0003FF8003FF8003FF0001FFC007FE0000FFE01FFC00007FFFFFF800001F
309FFFFF0000007FFFFC0000001FFFF000000003FF000002D427BC038>I<1E00000000001F
31000000000001FFC000000001FFFFFFFFFFE1FFFFFFFFFFE1FFFFFFFFFFE1FFFFFFFFFFE3F
311FFFFFFFFFE3FFFFFFFFFFC3FFFFFFFFFF83FFFFFFFFFF03FFFFFFFFFE03FFFFFFFFFC03F
312FFFFFFFFC07FFFFFFFFF807E0000003F007C0000007E007C000000FC0078000000F80078
313000001F80078000003F000F8000007E000F000000FC000F000000F8000F000001F800000
31400003F00000000007E0000000000FC0000000000FC0000000001F80000000003F8000000
3150003F00000000007F0000000000FE0000000000FE0000000001FE0000000001FC0000000
316003FC0000000003FC0000000007FC0000000007F8000000000FF8000000000FF80000000
31701FF8000000001FF8000000001FF8000000003FF8000000003FF0000000003FF00000000
31803FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF00000000
3190FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF00000000
3200FFF000000000FFF000000000FFF000000000FFF0000000007FE0000000003FC00000000
32101F80000002F447AC238>I<00007FF000000003FFFF0000000FFFFFC000003FFFFFF000
322007F801FFC0001FC0003FE0003F80001FF0003F00000FF0007E000007F8007E000003F80
3230FC000003FC00FC000003FC01FC000001FC01FC000001FC01FE000001FC01FE000001FC0
3241FF000001FC01FF800001FC01FFE00003FC01FFF00003F801FFFC0007F801FFFF0007F00
3250FFFFC00FF000FFFFE01FE0007FFFF83FC0007FFFFE7F80003FFFFFFE00001FFFFFFC000
32600FFFFFF0000007FFFFFC000003FFFFFE000000FFFFFF800000FFFFFFC00003FFFFFFE00
32700FFFFFFFF0001FF3FFFFF8007FC0FFFFFC00FF803FFFFE01FF000FFFFE01FE0007FFFF0
3283FE0001FFFF07FC00007FFF07F800003FFF87F800000FFF8FF8000007FF8FF0000003FF8
329FF0000001FF8FF0000000FF8FF0000000FF8FF00000007F8FF00000007F8FF00000007F8
330FF80000007F07F80000007F07F8000000FF07FC000000FE03FE000001FE03FF000003FC0
3311FF800007F800FFE0001FF0007FFC00FFE0003FFFFFFFC0000FFFFFFF000003FFFFFC000
332000FFFFF00000000FFF000002D427BC038>I<00007FF000000007FFFE0000001FFFFF80
33300007FFFFFE00000FFE03FF00001FF800FF80003FF0007FC0007FE0007FE000FFC0003FF
334001FFC0001FF003FFC0001FF803FFC0001FF807FF80001FFC07FF80000FFC07FF80000FF
335E07FF80000FFE0FFF80000FFE0FFF80000FFF0FFF80000FFF0FFF80000FFF0FFF80000FF
336F0FFF80000FFF0FFF80000FFF0FFF80000FFF8FFF80000FFF8FFF80000FFF8FFF80000FF
337F8FFF80001FFF87FF80001FFF87FF80001FFF87FF80001FFF83FF80003FFF83FF80003FF
338F81FFC0003FFF81FFC0007FFF80FFE000FFFF807FE000FFFF803FF001EFFF801FFC07CFF
339F800FFFFF8FFF8003FFFF0FFF8000FFFC0FFF00001FF00FFF000000000FFF000000000FF
340F000000000FFE000000001FFE000000001FFE003C00001FFE00FF00001FFC01FF80001FF
341C03FFC0003FF803FFC0003FF803FFC0003FF003FFC0007FE003FFC000FFE003FFC000FFC
342003FF8001FF8001FF0003FF0001FC000FFE0000FF003FFC00007FFFFFF800003FFFFFE00
3430001FFFFF80000007FFFE000000007FE0000002D427BC038>I<000000001F8000000000
344000000001F8000000000000000003FC000000000000000003FC000000000000000007FE0
34500000000000000007FE000000000000000007FE00000000000000000FFF0000000000000
3460000FFF00000000000000001FFF80000000000000001FFF80000000000000001FFF80000
347000000000003FFFC0000000000000003FFFC0000000000000007FFFE0000000000000007
348FFFE0000000000000007FFFE000000000000000FFFFF000000000000000F9FFF00000000
3490000001F9FFF800000000000001F1FFF800000000000001F0FFF800000000000003F0FFF
350C00000000000003E07FFC00000000000007E07FFE00000000000007C07FFE00000000000
351007C03FFE0000000000000FC03FFF0000000000000F801FFF0000000000001F801FFF800
3520000000001F001FFF8000000000001F000FFF8000000000003F000FFFC000000000003E0
353007FFC000000000007E0007FFE000000000007C0007FFE000000000007C0003FFE000000
35400000FC0003FFF00000000000F80001FFF00000000001F80001FFF80000000001F00000F
355FF80000000001F00000FFF80000000003F00000FFFC0000000003E000007FFC000000000
3567E000007FFE0000000007FFFFFFFFFE0000000007FFFFFFFFFE000000000FFFFFFFFFFF0
35700000000FFFFFFFFFFF000000001FFFFFFFFFFF800000001F0000000FFF800000001F000
3580000FFF800000003F0000000FFFC00000003E00000007FFC00000007E00000007FFE0000
3590007C00000003FFE00000007C00000003FFE0000000F800000003FFF0000000F80000000
3601FFF0000001F800000001FFF8000001F000000000FFF8000003F000000000FFFC000003E
361000000000FFFC000007E0000000007FFC000FFFFFF00000FFFFFFFF0FFFFFF00000FFFFF
362FFF0FFFFFF00000FFFFFFFF0FFFFFF00000FFFFFFFF0FFFFFF00000FFFFFFFF04C457CC4
36355>65 D<00000000FFF00000700000001FFFFF0000F0000001FFFFFFE001F0000007FFFF
364FFF803F000003FFFFFFFFE07F00000FFFFE001FF0FF00001FFFE00003F9FF00007FFF000
365000FFFF0000FFFC0000007FFF0001FFF00000003FFF0003FFE00000001FFF0007FFC0000
3660000FFF000FFF8000000007FF001FFF0000000003FF003FFE0000000001FF007FFE00000
36700001FF007FFC0000000000FF00FFF80000000000FF00FFF800000000007F01FFF000000
368000007F01FFF000000000003F03FFF000000000003F03FFE000000000003F03FFE000000
369000003F07FFE000000000001F07FFE000000000001F07FFE000000000001F07FFC000000
37000000000FFFC00000000000000FFFC00000000000000FFFC00000000000000FFFC000000
37100000000FFFC00000000000000FFFC00000000000000FFFC00000000000000FFFC000000
37200000000FFFC00000000000000FFFC00000000000000FFFC00000000000000FFFC000000
37300000000FFFC00000000000000FFFC000000000000007FFC000000000000007FFE000000
374000000007FFE000000000000F07FFE000000000000F03FFE000000000000F03FFE000000
375000000F03FFF000000000000F01FFF000000000001F01FFF000000000001E00FFF800000
376000001E00FFF800000000003E007FFC00000000003C007FFE00000000007C003FFE00000
377000007C001FFF0000000000F8000FFF8000000001F00007FFC000000003F00003FFE0000
37800007E00001FFF80000000FC00000FFFC0000001F8000007FFF0000007F0000001FFFE00
379001FE0000000FFFFF001FF800000003FFFFFFFFF0000000007FFFFFFFC0000000001FFFF
380FFF000000000001FFFFF80000000000000FFF800000044467AC451>67
381D<FFFFFFFFFFFF00000000FFFFFFFFFFFFF0000000FFFFFFFFFFFFFE000000FFFFFFFFFF
382FFFF800000FFFFFFFFFFFFFFE00000003FFE00001FFFF80000003FFE000001FFFC000000
3833FFE0000003FFF0000003FFE0000000FFF8000003FFE00000007FFC000003FFE00000003
384FFE000003FFE00000001FFF000003FFE00000000FFF000003FFE000000007FF800003FFE
385000000003FFC00003FFE000000003FFC00003FFE000000001FFE00003FFE000000001FFE
38600003FFE000000000FFF00003FFE000000000FFF00003FFE000000000FFF80003FFE0000
38700000FFF80003FFE0000000007FF80003FFE0000000007FFC0003FFE0000000007FFC000
3883FFE0000000007FFC0003FFE0000000007FFC0003FFE0000000007FFC0003FFE00000000
38907FFE0003FFE0000000007FFE0003FFE0000000007FFE0003FFE0000000007FFE0003FFE
3900000000007FFE0003FFE0000000007FFE0003FFE0000000007FFE0003FFE0000000007FF
391E0003FFE0000000007FFE0003FFE0000000007FFE0003FFE0000000007FFE0003FFE0000
392000007FFE0003FFE0000000007FFE0003FFE0000000007FFC0003FFE0000000007FFC000
3933FFE0000000007FFC0003FFE0000000007FFC0003FFE0000000007FFC0003FFE00000000
39407FF80003FFE000000000FFF80003FFE000000000FFF80003FFE000000000FFF00003FFE
395000000001FFF00003FFE000000001FFE00003FFE000000003FFE00003FFE000000003FFC
39600003FFE000000007FF800003FFE00000000FFF800003FFE00000000FFF000003FFE0000
3970001FFE000003FFE00000007FFC000003FFE0000000FFF8000003FFE0000003FFF000000
3983FFE000001FFFE0000003FFE00000FFFF80000FFFFFFFFFFFFFFF00000FFFFFFFFFFFFFF
399C00000FFFFFFFFFFFFFE000000FFFFFFFFFFFFF0000000FFFFFFFFFFFF000000004B447C
400C356>I<FFFFFFFFFFFFFFF800FFFFFFFFFFFFFFF800FFFFFFFFFFFFFFF800FFFFFFFFFF
401FFFFF800FFFFFFFFFFFFFFFC00001FFF000001FFFC00001FFF0000003FFC00001FFF0000
402000FFC00001FFF00000003FC00001FFF00000001FC00001FFF00000000FC00001FFF0000
4030000FC00001FFF000000007E00001FFF000000003E00001FFF000000003E00001FFF0000
40400003E00001FFF000000001E00001FFF000000001E00001FFF000078001E00001FFF0000
40578001E00001FFF000078000F00001FFF000078000F00001FFF000078000F00001FFF0000
40678000F00001FFF0000F8000000001FFF0000F8000000001FFF0000F8000000001FFF0001
407F8000000001FFF0003F8000000001FFF001FF8000000001FFFFFFFF8000000001FFFFFFF
408F8000000001FFFFFFFF8000000001FFFFFFFF8000000001FFFFFFFF8000000001FFF001F
409F8000000001FFF0003F8000000001FFF0001F8000000001FFF0000F8000000001FFF0000
410F8000000001FFF0000F80001E0001FFF0000780001E0001FFF0000780001E0001FFF0000
411780003C0001FFF0000780003C0001FFF0000780003C0001FFF0000780003C0001FFF0000
412000003C0001FFF0000000007C0001FFF0000000007C0001FFF000000000780001FFF0000
41300000780001FFF000000000F80001FFF000000000F80001FFF000000001F80001FFF0000
41400001F80001FFF000000003F80001FFF000000007F00001FFF00000000FF00001FFF0000
4150001FF00001FFF00000007FF00001FFF0000001FFF00001FFF000001FFFF00FFFFFFFFFF
416FFFFFF00FFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFE00FFFFFFFFFF
417FFFFFE0043447DC34A>I<FFFFFFFFFFFFFF80FFFFFFFFFFFFFF80FFFFFFFFFFFFFF80FF
418FFFFFFFFFFFF80FFFFFFFFFFFFFFC0003FFE00001FFFC0003FFE000001FFC0003FFE0000
419007FC0003FFE0000003FC0003FFE0000001FC0003FFE0000000FC0003FFE00000007C000
4203FFE00000007E0003FFE00000003E0003FFE00000003E0003FFE00000003E0003FFE0000
4210001E0003FFE00000001E0003FFE00000001E0003FFE0001E001E0003FFE0001E000F000
4223FFE0001E000F0003FFE0001E000F0003FFE0001E000F0003FFE0001E00000003FFE0003
423E00000003FFE0003E00000003FFE0003E00000003FFE0007E00000003FFE000FE0000000
4243FFE007FE00000003FFFFFFFE00000003FFFFFFFE00000003FFFFFFFE00000003FFFFFFF
425E00000003FFFFFFFE00000003FFE007FE00000003FFE000FE00000003FFE0007E0000000
4263FFE0003E00000003FFE0003E00000003FFE0003E00000003FFE0001E00000003FFE0001
427E00000003FFE0001E00000003FFE0001E00000003FFE0001E00000003FFE0001E0000000
4283FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000
429000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE000000000000
4303FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000
431000000003FFE0000000000FFFFFFFFF0000000FFFFFFFFF0000000FFFFFFFFF0000000FF
432FFFFFFF0000000FFFFFFFFF00000003C447CC346>I<FFFFFFFF8003FFFFFFFEFFFFFFFF
4338003FFFFFFFEFFFFFFFF8003FFFFFFFEFFFFFFFF8003FFFFFFFEFFFFFFFF8003FFFFFFFE
434003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE000000
43500FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003F
436FE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FF
437F800003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00
438000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800
439003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE000000
44000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003F
441FFFFFFFFFFFFF800003FFFFFFFFFFFFFF800003FFFFFFFFFFFFFF800003FFFFFFFFFFFFF
442F800003FFFFFFFFFFFFFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00
443000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800
444003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE000000
44500FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003F
446FE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FF
447F800003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00
448000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800
449003FFE00000000FFF800003FFE00000000FFF800003FFE00000000FFF800003FFE000000
45000FFF800FFFFFFFF8003FFFFFFFEFFFFFFFF8003FFFFFFFEFFFFFFFF8003FFFFFFFEFFFF
451FFFF8003FFFFFFFEFFFFFFFF8003FFFFFFFE4F447CC358>72 D<FFFFFFFFE0FFFFFFFFE0
452FFFFFFFFE0FFFFFFFFE0FFFFFFFFE0001FFF0000001FFF0000001FFF0000001FFF000000
4531FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001F
454FF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF
4550000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF00
45600001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000
457001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF000000
4581FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001F
459FF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF
4600000001FFF0000001FFF0000001FFF0000FFFFFFFFE0FFFFFFFFE0FFFFFFFFE0FFFFFFFF
461E0FFFFFFFFE023447DC32A>I<FFFFFFFFF0000000FFFFFFFFF0000000FFFFFFFFF00000
46200FFFFFFFFF0000000FFFFFFFFF0000000003FFE0000000000003FFE0000000000003FFE
4630000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE00000000
46400003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE
4650000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE00000000
46600003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE
4670000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE00000000
46800003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE
4690000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE00000000
47000003FFE0000000000003FFE0000000780003FFE0000000780003FFE0000000780003FFE
4710000000780003FFE0000000F80003FFE0000000F00003FFE0000000F00003FFE0000000F
47200003FFE0000000F00003FFE0000001F00003FFE0000001F00003FFE0000001F00003FFE
4730000003F00003FFE0000003F00003FFE0000007E00003FFE0000007E00003FFE000000FE
47400003FFE000001FE00003FFE000003FE00003FFE000007FE00003FFE00001FFE00003FFE
47500007FFE00003FFE0003FFFE00FFFFFFFFFFFFFC00FFFFFFFFFFFFFC00FFFFFFFFFFFFFC
47600FFFFFFFFFFFFFC00FFFFFFFFFFFFFC0039447CC343>76 D<FFFFFE0000000000007FFF
477FF80FFFFFF000000000000FFFFFF80FFFFFF000000000000FFFFFF80FFFFFF8000000000
47801FFFFFF80FFFFFF800000000001FFFFFF80003FFF800000000001FFFE0000003DFFC000
47900000003DFFE0000003DFFC00000000003DFFE0000003CFFE000000000079FFE0000003C
480FFE000000000079FFE0000003C7FF0000000000F1FFE0000003C7FF0000000000F1FFE00
48100003C3FF8000000001E1FFE0000003C3FF8000000001E1FFE0000003C1FFC000000003C
4821FFE0000003C1FFC000000003C1FFE0000003C1FFC000000003C1FFE0000003C0FFE0000
4830000781FFE0000003C0FFE00000000781FFE0000003C07FF00000000F01FFE0000003C07
484FF00000000F01FFE0000003C03FF80000001E01FFE0000003C03FF80000001E01FFE0000
485003C01FFC0000003C01FFE0000003C01FFC0000003C01FFE0000003C01FFC0000003C01F
486FE0000003C00FFE0000007801FFE0000003C00FFE0000007801FFE0000003C007FF00000
4870F001FFE0000003C007FF000000F001FFE0000003C003FF800001E001FFE0000003C003F
488F800001E001FFE0000003C001FFC00003C001FFE0000003C001FFC00003C001FFE000000
4893C001FFC00003C001FFE0000003C000FFE000078001FFE0000003C000FFE000078001FFE
4900000003C0007FF0000F0001FFE0000003C0007FF0000F0001FFE0000003C0003FF8001E0
491001FFE0000003C0003FF8001E0001FFE0000003C0001FFC003C0001FFE0000003C0001FF
492C003C0001FFE0000003C0000FFE00780001FFE0000003C0000FFE00780001FFE0000003C
4930000FFE00780001FFE0000003C00007FF00F00001FFE0000003C00007FF00F00001FFE00
49400003C00003FF81E00001FFE0000003C00003FF81E00001FFE0000003C00001FFC3C0000
4951FFE0000003C00001FFC3C00001FFE0000003C00000FFE7800001FFE0000003C00000FFE
4967800001FFE0000003C00000FFE7800001FFE0000003C000007FFF000001FFE0000003C00
4970007FFF000001FFE0000003C000003FFE000001FFE0000003C000003FFE000001FFE0000
498003C000001FFC000001FFE0000003C000001FFC000001FFE0000003C000000FF8000001F
499FE0000003C000000FF8000001FFE0000FFFFFF0000FF80007FFFFFFF80FFFFFF00007F00
500007FFFFFFF80FFFFFF00007F00007FFFFFFF80FFFFFF00003E00007FFFFFFF80FFFFFF00
501001C00007FFFFFFF8061447CC36A>I<00000007FFC0000000000000FFFFFE0000000000
50207FFFFFFC0000000001FFFFFFFF0000000007FFE00FFFC00000001FFF0001FFF00000007
503FF800003FFC000000FFF000001FFE000001FFC0000007FF000003FF80000003FF800007F
504F00000001FFC0000FFF00000001FFE0001FFE00000000FFF0003FFC000000007FF8003FF
505C000000007FF8007FF8000000003FFC007FF8000000003FFC00FFF0000000001FFE00FFF
5060000000001FFE01FFF0000000001FFF01FFE0000000000FFF03FFE0000000000FFF83FFE
5070000000000FFF83FFE0000000000FFF87FFE0000000000FFFC7FFC00000000007FFC7FFC
50800000000007FFC7FFC00000000007FFC7FFC00000000007FFCFFFC00000000007FFEFFFC
50900000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC
51000000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC
51100000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFE7FFC
51200000000007FFC7FFE0000000000FFFC7FFE0000000000FFFC7FFE0000000000FFFC3FFE
5130000000000FFF83FFE0000000000FFF83FFF0000000001FFF81FFF0000000001FFF01FFF
5140000000001FFF01FFF8000000003FFF00FFF8000000003FFE00FFF8000000003FFE007FF
515C000000007FFC003FFC000000007FF8003FFE00000000FFF8001FFF00000001FFF0000FF
516F80000003FFE00007FFC0000007FFC00003FFE000000FFF800001FFF000001FFF000000F
517FFC00007FFE0000007FFF0001FFFC0000001FFFE00FFFF00000000FFFFFFFFFE00000000
5183FFFFFFFF80000000007FFFFFFC00000000000FFFFFE00000000000007FFC00000004746
5197AC454>79 D<FFFFFFFFFFFF000000FFFFFFFFFFFFF00000FFFFFFFFFFFFFE0000FFFFFF
520FFFFFFFF8000FFFFFFFFFFFFFFE000001FFF00000FFFF000001FFF000001FFF800001FFF
5210000007FFC00001FFF0000003FFE00001FFF0000001FFF00001FFF0000000FFF80001FFF
5220000000FFF80001FFF0000000FFFC0001FFF00000007FFC0001FFF00000007FFC0001FFF
52300000007FFE0001FFF00000007FFE0001FFF00000007FFE0001FFF00000007FFE0001FFF
52400000007FFE0001FFF00000007FFE0001FFF00000007FFE0001FFF00000007FFE0001FFF
52500000007FFE0001FFF00000007FFC0001FFF00000007FFC0001FFF0000000FFF80001FFF
5260000000FFF80001FFF0000000FFF00001FFF0000001FFF00001FFF0000003FFE00001FFF
5270000007FFC00001FFF000001FFF800001FFF00000FFFF000001FFFFFFFFFFFC000001FFF
528FFFFFFFF0000001FFFFFFFFFFC0000001FFFFFFFFFC00000001FFF000000000000001FFF
529000000000000001FFF000000000000001FFF000000000000001FFF000000000000001FFF
530000000000000001FFF000000000000001FFF000000000000001FFF000000000000001FFF
531000000000000001FFF000000000000001FFF000000000000001FFF000000000000001FFF
532000000000000001FFF000000000000001FFF000000000000001FFF000000000000001FFF
533000000000000001FFF000000000000001FFF000000000000001FFF000000000000001FFF
534000000000000001FFF000000000000001FFF000000000000001FFF000000000000FFFFFF
535FFE000000000FFFFFFFFE000000000FFFFFFFFE000000000FFFFFFFFE000000000FFFFFF
536FFE00000000043447DC34D>I<FFFFFFFFFFF800000000FFFFFFFFFFFFC0000000FFFFFF
537FFFFFFF8000000FFFFFFFFFFFFFE000000FFFFFFFFFFFFFF800000001FFF00003FFFE000
53800001FFF000003FFF00000001FFF000000FFF80000001FFF0000007FFC0000001FFF0000
539003FFE0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000001FFF800000
5401FFF0000000FFF8000001FFF0000000FFF8000001FFF0000000FFFC000001FFF0000000F
541FFC000001FFF0000000FFFC000001FFF0000000FFFC000001FFF0000000FFFC000001FFF
5420000000FFFC000001FFF0000000FFFC000001FFF0000000FFF8000001FFF0000000FFF80
54300001FFF0000001FFF0000001FFF0000001FFF0000001FFF0000003FFE0000001FFF0000
544003FFC0000001FFF0000007FFC0000001FFF000001FFF00000001FFF000007FFE0000000
5451FFF00003FFF800000001FFFFFFFFFFF000000001FFFFFFFFFF8000000001FFFFFFFFFE0
546000000001FFFFFFFFFF8000000001FFF0000FFFC000000001FFF00003FFF000000001FFF
54700000FFF800000001FFF000007FFC00000001FFF000003FFE00000001FFF000003FFE000
54800001FFF000001FFF00000001FFF000001FFF00000001FFF000000FFF80000001FFF0000
54900FFF80000001FFF000000FFF80000001FFF000000FFF80000001FFF000000FFF8000000
5501FFF000000FFF80000001FFF000000FFF80000001FFF000000FFFC0000001FFF000000FF
551FC0000001FFF000000FFFC0000001FFF000000FFFC0000001FFF000000FFFC0000001FFF
552000000FFFC0000001FFF000000FFFC000F001FFF000000FFFE000F001FFF000000FFFE00
5530F001FFF0000007FFE000F001FFF0000007FFF001F001FFF0000003FFF001EFFFFFFFFE0
554001FFF803EFFFFFFFFE0000FFFE0FCFFFFFFFFE00007FFFFF8FFFFFFFFE00001FFFFF0FF
555FFFFFFE000007FFFE00000000000000007FF8050457DC354>82 D<0000FFE0001C000007
556FFFE003C00003FFFFF807C0000FFFFFFE0FC0001FFFFFFF9FC0003FF801FFFFC0007FC00
55701FFFC000FF800007FFC001FF000003FFC003FE000000FFC003FC0000007FC007FC00000
55803FC007F80000003FC007F80000001FC007F80000000FC00FF80000000FC00FF80000000
5597C00FF800000007C00FFC00000007C00FFC00000007C00FFE00000003C00FFF00000003C
56000FFF80000003C00FFFC00000000007FFE00000000007FFFE0000000007FFFFE00000000
5613FFFFFF00000003FFFFFFF0000001FFFFFFFE000001FFFFFFFFC00000FFFFFFFFE000007
562FFFFFFFF800003FFFFFFFFC00001FFFFFFFFE000007FFFFFFFF000001FFFFFFFF8000007
563FFFFFFFC000000FFFFFFFC0000000FFFFFFE00000000FFFFFE0000000007FFFF00000000
564007FFF00000000003FFF00000000000FFF800000000007FF800000000003FF80F0000000
56503FF80F000000001FF80F000000001FF80F000000000FF80F000000000FF80F800000000
566FF80F800000000FF80F800000000FF00FC00000000FF00FC00000000FF00FE00000001FF
56700FF00000001FE00FF80000003FE00FFC0000003FC00FFE0000007FC00FFF800000FF800
568FFFF00003FF000FFFFF800FFE000FE7FFFFFFFC000FC1FFFFFFF0000F807FFFFFC0000F0
56900FFFFF00000E00007FF80000031467AC43E>I<3FFFFFFFFFFFFFFFE03FFFFFFFFFFFFF
570FFE03FFFFFFFFFFFFFFFE03FFFFFFFFFFFFFFFE03FFFFFFFFFFFFFFFE03FFE000FFF8003
571FFE07FE0000FFF80003FF07FC0000FFF80001FF07F00000FFF800007F07F00000FFF8000
57207F07E00000FFF800003F07C00000FFF800001F07C00000FFF800001F07C00000FFF8000
57301F07800000FFF800000F07800000FFF800000F07800000FFF800000F07800000FFF8000
57400F0F800000FFF800000F8F000000FFF80000078F000000FFF80000078F000000FFF8000
5750078F000000FFF80000078F000000FFF800000780000000FFF800000000000000FFF8000
57600000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
57700000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
57800000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
57900000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
58000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
58100000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
58200000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
58300000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
58400000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF8000
58500000007FFFFFFFFFF00000007FFFFFFFFFF00000007FFFFFFFFFF00000007FFFFFFFFFF
58600000007FFFFFFFFFF000045437CC24E>I<FFFFFFFF000000FFFFFFFFFFFFFF000000FF
587FFFFFFFFFFFF000000FFFFFFFFFFFFFF000000FFFFFFFFFFFFFF000000FFFFFF003FFE00
58800000000FC00003FFF0000000000FC00001FFF0000000000F800001FFF8000000001F800
589000FFF8000000001F000000FFFC000000001F000000FFFC000000003F0000007FFC00000
5900003E0000007FFE000000007E0000003FFE000000007C0000003FFF00000000FC0000001
591FFF00000000F80000001FFF80000000F80000001FFF80000001F80000000FFFC0000001F
59200000000FFFC0000003F000000007FFC0000003E000000007FFE0000007E000000003FFE
5930000007C000000003FFF0000007C000000003FFF000000FC000000001FFF800000F80000
59400001FFF800001F8000000000FFF800001F0000000000FFFC00003F00000000007FFC000
59503E00000000007FFE00003E00000000007FFE00007E00000000003FFF00007C000000000
59603FFF0000FC00000000001FFF0000F800000000001FFF8001F800000000000FFF8001F00
5970000000000FFFC003F0000000000007FFC003E0000000000007FFE003E0000000000007F
598FE007E0000000000003FFE007C0000000000003FFF00FC0000000000001FFF00F8000000
5990000001FFF81F80000000000000FFF81F00000000000000FFFC1F00000000000000FFFC3
600F000000000000007FFC3E000000000000007FFE7E000000000000003FFE7C00000000000
6010003FFFFC000000000000001FFFF8000000000000001FFFF8000000000000001FFFF8000
602000000000000FFFF0000000000000000FFFF00000000000000007FFE0000000000000000
6037FFE00000000000000003FFC00000000000000003FFC00000000000000003FFC00000000
604000000001FF800000000000000001FF800000000000000000FF000000000000000000FF0
605000000000000000007E0000000000000000007E00000000050457EC355>86
606D<0001FFE0000000001FFFFE000000007FFFFF80000001FFFFFFE0000003FE007FF80000
60707FC001FFC000007FE000FFE00000FFF0007FF00000FFF0007FF00000FFF0003FF80000F
608FF0003FF80000FFF0003FF80000FFF0001FFC00007FE0001FFC00003FC0001FFC00000F0
6090001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000000003
610FFFFC0000000FFFFFFC0000007FFFFFFC000003FFFF1FFC00000FFFC01FFC00003FFE001
611FFC0000FFF8001FFC0001FFE0001FFC0003FFC0001FFC0003FF80001FFC0007FF80001FF
612C0007FF00001FFC000FFF00001FFC000FFE00001FFC000FFE00001FFC000FFE00001FFC0
61300FFE00003FFC000FFE00003FFC000FFF00007FFC0007FF8000FFFC0007FF8001FFFF000
6143FFE003EFFFFC01FFF80FC7FFFC007FFFFF87FFFC003FFFFE01FFFC0007FFF8007FFC000
6150FFC00000000322F7DAD36>97 D<007FC000000000FFFFC000000000FFFFC000000000FF
616FFC000000000FFFFC000000000FFFFC00000000003FFC00000000001FFC00000000001FF
617C00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0
6180000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000
61900000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000
620000001FFC00FF8000001FFC0FFFF800001FFC3FFFFE00001FFCFFFFFF80001FFDFC03FFC
6210001FFFF000FFE0001FFFC0003FF0001FFF80001FF8001FFF00001FFC001FFE00000FFE0
62201FFC00000FFE001FFC000007FF001FFC000007FF001FFC000007FF801FFC000003FF801
623FFC000003FF801FFC000003FF801FFC000003FFC01FFC000003FFC01FFC000003FFC01FF
624C000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC0
62500003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FF801FFC000
626003FF801FFC000007FF801FFC000007FF001FFC000007FF001FFC000007FF001FFC00000
627FFE001FFE00000FFC001FFF00001FFC001FFF80003FF8001FF7C0007FF0001FE3E000FFE
6280001FC1FC07FFC0001F80FFFFFF00001F003FFFFC00001E000FFFF00000000001FF00000
62936467DC43E>I<00003FFC00000001FFFFC000000FFFFFF000003FFFFFFC00007FF003FE
6300000FFC001FF0003FF8003FF0007FF0007FF8007FE0007FF800FFE0007FF801FFC0007FF
631801FFC0007FF803FF80007FF803FF80003FF007FF80001FE007FF8000078007FF0000000
632007FF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000
63300FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000
63400FFF0000000007FF8000000007FF8000000007FF8000000003FF8000000003FFC000003
635C03FFC000003C01FFE000007C00FFE000007800FFF00000F8007FF80001F0003FFC0003E
6360001FFF0007C00007FFC03F800003FFFFFF000000FFFFFC0000003FFFF000000003FF800
637002A2F7CAD32>I<0000000003FE0000000007FFFE0000000007FFFE0000000007FFFE00
63800000007FFFE0000000007FFFE00000000001FFE00000000000FFE00000000000FFE0000
6390000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE000000
64000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000000
641000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE0000003FE0
6420FFE000003FFFC0FFE00000FFFFF8FFE00003FFFFFCFFE0000FFF807FFFE0001FFC001FF
643FE0003FF80007FFE0007FF00003FFE000FFE00001FFE000FFC00000FFE001FFC00000FFE
644003FF800000FFE003FF800000FFE003FF800000FFE007FF800000FFE007FF000000FFE00
6457FF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FF
646F000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF0
64700000FFE00FFF000000FFE00FFF000000FFE007FF000000FFE007FF000000FFE007FF000
648000FFE007FF800000FFE003FF800000FFE003FF800000FFE001FFC00001FFE001FFC0000
6491FFE000FFE00003FFE0007FE00007FFE0003FF0000FFFF0001FFC003FFFFFC00FFF01FEF
650FFFC007FFFFF8FFFFC001FFFFE0FFFFC0007FFF80FFFFC00007FC00FF80036467CC43E>
651I<00003FF800000003FFFF8000000FFFFFE000003FFFFFF000007FF83FF80000FFC007FC
6520001FF8003FE0003FF0001FF0007FE0000FF800FFC0000FF801FFC00007FC01FF800007F
653C03FF800003FE03FF800003FE07FF800003FE07FF000003FE07FF000003FF07FF000001F
654F0FFF000001FF0FFF000001FF0FFFFFFFFFFF0FFFFFFFFFFF0FFFFFFFFFFF0FFFFFFFFFF
655F0FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000007FF0000000
656007FF0000000007FF8000000007FF8000000003FF8000000003FF8000000F01FFC000000
657F01FFC000001F00FFE000001E007FF000003E003FF800007C001FFC0000F8000FFF0003F
65800007FFE01FE00001FFFFFFC000007FFFFF0000001FFFFC00000001FFE00002C2F7DAD33
659>I<000000FF8000000FFFE000007FFFF00001FFFFF80003FF8FFC000FFE0FFE001FFC1F
660FE001FF81FFE003FF81FFE007FF01FFE007FF01FFE007FF00FFC00FFE00FFC00FFE003F0
66100FFE000C000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000
662FFE0000000FFE0000000FFE0000000FFE0000000FFE00000FFFFFFF800FFFFFFF800FFFF
663FFF800FFFFFFF800FFFFFFF80000FFE0000000FFE0000000FFE0000000FFE0000000FFE0
664000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE000
6650000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE00000
66600FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000
667FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FF
668E000007FFFFFE0007FFFFFE0007FFFFFE0007FFFFFE0007FFFFFE00027467DC522>I<00
66900FFE0007E00000FFFFE03FF80003FFFFF8FFF8000FFFFFFFFFFC001FFC07FFF3FC003FF
670001FF83FC007FE000FFC3FC00FFC0007FE1F801FFC0007FF0F001FF80003FF00001FF800
67103FF00003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003
672FF80003FF80003FF80003FF80003FF80003FF80003FF80001FF80003FF00001FF80003FF
67300001FFC0007FF00000FFC0007FE000007FE000FFC000003FF001FF8000001FFC07FF000
6740003FFFFFFE0000003FFFFFF800000078FFFFE0000000780FFE00000000F800000000000
6750F8000000000000F8000000000000F8000000000000FC000000000000FE000000000000F
676F000000000000FFFFFFFC000000FFFFFFFFC000007FFFFFFFF800007FFFFFFFFE00003FF
677FFFFFFF00001FFFFFFFFFC0000FFFFFFFFFC0003FFFFFFFFFE000FFFFFFFFFFF001FF000
678007FFF003FC0000007FF007F80000001FF807F80000000FF80FF00000000FF80FF000000
679007F80FF000000007F80FF000000007F80FF000000007F80FF80000000FF807F80000000
680FF007FC0000001FF003FE0000003FE001FF0000007FC000FFE00003FF80007FFC001FFF0
6810001FFFFFFFFC000007FFFFFFF0000000FFFFFF8000000007FFF00000032427DAC38>I<
682007FC000000000FFFFC000000000FFFFC000000000FFFFC000000000FFFFC000000000FF
683FFC00000000003FFC00000000001FFC00000000001FFC00000000001FFC00000000001FF
684C00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0
6850000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000
68600000001FFC00000000001FFC00000000001FFC00000000001FFC007FE000001FFC03FFF
687800001FFC0FFFFE00001FFC1FFFFF80001FFC7F03FFC0001FFCF801FFC0001FFDF000FFE
6880001FFDE000FFE0001FFFC000FFE0001FFF80007FF0001FFF00007FF0001FFF00007FF00
68901FFE00007FF0001FFE00007FF0001FFE00007FF0001FFC00007FF0001FFC00007FF0001
690FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FF
691C00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC0
6920007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC000
69307FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007
694FF0001FFC00007FF0001FFC00007FF00FFFFFF83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFF
695FEFFFFFF83FFFFFEFFFFFF83FFFFFE37457CC43E>I<007C0001FF0003FF8007FFC007FF
696C00FFFE00FFFE00FFFE00FFFE00FFFE007FFC007FFC003FF8001FF00007C000000000000
69700000000000000000000000000000000000000000000000000007FC07FFFC07FFFC07FFF
698C07FFFC07FFFC003FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FF
699C001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FF
700C001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FF
701C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18467CC520>I<000003E000000FF800001FFC00
702003FFE00003FFE00007FFF00007FFF00007FFF00007FFF00007FFF00003FFE00003FFE00
703001FFC00000FF8000003E000000000000000000000000000000000000000000000000000
704000000000000000000000000000000000001FF0003FFFF0003FFFF0003FFFF0003FFFF00
70503FFFF00000FFF000007FF000007FF000007FF000007FF000007FF000007FF000007FF00
7060007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF00
7070007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF00
7080007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF00
7090007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF1F
7108007FF3FC007FF7FE007FFFFF007FFFFF00FFEFFF00FFEFFF00FFCFFF01FFCFFE01FF87F
711E03FF03FC0FFE01FFFFF800FFFFF0003FFFC0000FFC000205A86C522>I<007FC0000000
71200FFFFC000000000FFFFC000000000FFFFC000000000FFFFC000000000FFFFC000000000
71303FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001
714FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FF
715C00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0
7160000000001FFC00000000001FFC00000000001FFC00000000001FFC0007FFFE001FFC000
7177FFFE001FFC0007FFFE001FFC0007FFFE001FFC0007FFFE001FFC0000FE00001FFC0001F
718C00001FFC0003F000001FFC0007E000001FFC000FC000001FFC003F8000001FFC007E000
7190001FFC00FC0000001FFC01F80000001FFC07F00000001FFC0FE00000001FFC1FC000000
72001FFC3FE00000001FFC7FE00000001FFDFFF00000001FFFFFF80000001FFFFFFC0000001
721FFFFFFC0000001FFF9FFE0000001FFE1FFF0000001FFC0FFF8000001FF807FF8000001FF
722803FFC000001FF803FFE000001FF801FFF000001FF800FFF000001FF8007FF800001FF80
72307FFC00001FF8003FFE00001FF8001FFE00001FF8000FFF00001FF8000FFF80001FF8000
7247FFC0001FF80003FFC00FFFFFF03FFFFF8FFFFFF03FFFFF8FFFFFF03FFFFF8FFFFFF03FF
725FFF8FFFFFF03FFFFF835457DC43B>I<007FC000FFFFC000FFFFC000FFFFC000FFFFC000
726FFFFC00003FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
72701FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
72801FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
72901FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
73001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
73101FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
73201FFC00001FFC00001FFC00001FFC00001FFC000FFFFFF80FFFFFF80FFFFFF80FFFFFF80
733FFFFFF8019457CC420>I<007F8007FE00000FFC0000FFFF803FFFC0007FFF8000FFFF80
734FFFFF001FFFFE000FFFF81FFFFF803FFFFF000FFFF87F01FFC0FE03FF800FFFF8FC00FFE
7351F801FFC0003FF9F000FFF3E001FFE0001FF9E0007FF3C000FFE0001FFBC0007FF78000F
736FE0001FFF80003FFF00007FF0001FFF80003FFF00007FF0001FFF00003FFE00007FF0001
737FFE00003FFC00007FF0001FFE00003FFC00007FF0001FFE00003FFC00007FF0001FFC000
73803FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF80
7390007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF
7400001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FF
741C00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003
742FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF8000
74307FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF00
74401FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC0
7450003FF800007FF0001FFC00003FF800007FF00FFFFFF81FFFFFF03FFFFFEFFFFFF81FFFF
746FF03FFFFFEFFFFFF81FFFFFF03FFFFFEFFFFFF81FFFFFF03FFFFFEFFFFFF81FFFFFF03FF
747FFFE572D7CAC5E>I<007F8007FE0000FFFF803FFF8000FFFF80FFFFE000FFFF81FFFFF8
74800FFFF87F03FFC00FFFF8F801FFC0003FF9F000FFE0001FF9E000FFE0001FFBC000FFE00
74901FFF80007FF0001FFF00007FF0001FFF00007FF0001FFE00007FF0001FFE00007FF0001
750FFE00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FF
751C00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC0
7520007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC000
75307FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007
754FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF
75500FFFFFF83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFFFE
756372D7CAC3E>I<00001FFC0000000001FFFFC000000007FFFFF00000001FFFFFFC000000
7577FF80FFF000000FFC001FF800001FF8000FFC00003FE00003FE00007FE00003FF0000FFC
75800001FF8000FF800000FF8001FF800000FFC001FF800000FFC003FF800000FFE003FF000
7590007FE007FF0000007FF007FF0000007FF007FF0000007FF007FF0000007FF00FFF00000
76007FF80FFF0000007FF80FFF0000007FF80FFF0000007FF80FFF0000007FF80FFF0000007
761FF80FFF0000007FF80FFF0000007FF80FFF0000007FF80FFF0000007FF807FF0000007FF
762007FF0000007FF007FF0000007FF007FF0000007FF003FF800000FFE003FF800000FFE00
7631FF800000FFC001FFC00001FFC000FFC00001FF80007FE00003FF00007FE00003FF00003
764FF8000FFE00001FFC001FFC000007FF80FFF0000003FFFFFFE0000000FFFFFF800000001
765FFFFC0000000001FFC000000312F7DAD38>I<007FC00FF80000FFFFC0FFFF8000FFFFC3
766FFFFE000FFFFCFFFFFF800FFFFDFC03FFC00FFFFFF001FFE0003FFFC0007FF0001FFF800
76703FF8001FFF00003FFC001FFE00001FFE001FFC00001FFE001FFC00000FFF001FFC00000
768FFF001FFC000007FF801FFC000007FF801FFC000007FF801FFC000007FF801FFC000003F
769FC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC
77001FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01
771FFC000003FFC01FFC000007FF801FFC000007FF801FFC000007FF801FFC000007FF001FF
772C00000FFF001FFC00000FFF001FFC00001FFE001FFE00001FFC001FFF00003FFC001FFF8
7730007FF8001FFFC000FFF0001FFFE001FFE0001FFDFC07FFC0001FFCFFFFFF00001FFC3FF
774FFC00001FFC0FFFF000001FFC01FF0000001FFC00000000001FFC00000000001FFC00000
775000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0000000
7760001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000000000
777FFFFFF80000000FFFFFF80000000FFFFFF80000000FFFFFF80000000FFFFFF8000000036
778407DAC3E>I<007F807F00FFFF81FFE0FFFF83FFF0FFFF8FFFF8FFFF8F8FFCFFFF9F1FFE
77903FFBE1FFE01FFBC1FFE01FFF81FFE01FFF81FFE01FFF01FFE01FFF00FFC01FFE007F801
780FFE001E001FFE0000001FFE0000001FFE0000001FFC0000001FFC0000001FFC0000001FF
781C0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0
782000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC000
7830001FFC0000001FFC0000001FFC0000001FFC0000001FFC00000FFFFFFE000FFFFFFE000
784FFFFFFE000FFFFFFE000FFFFFFE000272D7DAC2E>114 D<001FFC038000FFFF878003FF
785FFFF800FFFFFFF801FF003FF803FC000FF803F80003F807F00001F807E00001F80FE0000
7860F80FE00000F80FE00000780FF00000780FF00000780FF80000780FFE0000000FFFE0000
787007FFFF000007FFFFF00003FFFFFC0003FFFFFF0001FFFFFFC000FFFFFFE0003FFFFFF00
78801FFFFFF80007FFFFF80000FFFFFC000003FFFC0000003FFE0000000FFE0F000003FE0F0
78900003FE0F800001FE0F800000FE0F800000FE0FC00000FE0FC00000FE0FE00000FC0FF00
790001FC0FF00001FC0FF80003F80FFE0007F00FFF803FE00FFFFFFFC00FCFFFFF800F03FFF
791E000E007FE0000232F7CAD2C>I<0001E000000001E000000001E000000001E000000001
792E000000003E000000003E000000003E000000003E000000007E000000007E00000000FE0
7930000000FE00000001FE00000001FE00000003FE00000007FE0000000FFE0000003FFE000
794000FFFFFFF80FFFFFFFF80FFFFFFFF80FFFFFFFF80FFFFFFFF8000FFE0000000FFE00000
79500FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000
796FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FF
797E0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE001E000FFE001E000FFE0
79801E000FFE001E000FFE001E000FFE001E000FFE001E000FFE001E000FFE001E000FFE003
799E000FFF003C0007FF003C0007FF007C0003FF80F80001FFC1F00000FFFFF000007FFFC00
8000001FFF80000003FE00023407EBE2C>I<007FC00001FF00FFFFC003FFFF00FFFFC003FF
801FF00FFFFC003FFFF00FFFFC003FFFF00FFFFC003FFFF0003FFC0000FFF0001FFC00007FF
8020001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF00
80301FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001
804FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FF
805C00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC0
8060007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC000
8070FFF0001FFC0000FFF0001FFC0001FFF0001FFC0001FFF0001FFC0003FFF0000FFC0003F
808FF0000FFE0007FFF80007FE001F7FFFE007FF807E7FFFE003FFFFFC7FFFE000FFFFF07FF
809FE0003FFFE07FFFE00007FF007FC00372E7CAC3E>I<FFFFFF0003FFFCFFFFFF0003FFFC
810FFFFFF0003FFFCFFFFFF0003FFFCFFFFFF0003FFFC01FFE000003E0000FFE000003C0000
811FFF000003C00007FF000007800007FF800007800007FF80000F800003FF80000F000003F
812FC0001F000001FFC0001E000001FFE0003E000000FFE0003C000000FFF0007C0000007FF
813000780000007FF800F80000003FF800F00000003FFC00F00000003FFC01F00000001FFE0
8141E00000001FFE03E00000000FFE03C00000000FFF07C000000007FF078000000007FF8F8
815000000003FF8F0000000003FFDF0000000001FFDE0000000001FFFE0000000000FFFC000
8160000000FFFC0000000000FFFC00000000007FF800000000007FF800000000003FF000000
817000003FF000000000001FE000000000001FE000000000000FC000000000000FC00000000
818000078000000362C7EAB3B>I<FFFFFE1FFFFF801FFFF0FFFFFE1FFFFF801FFFF0FFFFFE
8191FFFFF801FFFF0FFFFFE1FFFFF801FFFF0FFFFFE1FFFFF801FFFF001FFC0003FE000007C
8200001FFC0003FF00000780001FFE0003FF00000F80000FFE0001FF80000F00000FFF0001F
821F80001F000007FF0000FFC0001E000007FF0000FFC0001E000007FF8001FFC0003E00000
8223FF8001FFE0003C000003FFC003FFE0007C000001FFC003FFF00078000001FFC003FFF00
823078000001FFE0079FF000F8000000FFE0079FF800F0000000FFF00F9FF801F00000007FF
82400F0FFC01E00000007FF80F0FFC01E00000003FF81E07FC03C00000003FF81E07FE03C00
825000003FFC3E07FE07C00000001FFC3C03FF07800000001FFE7C03FF07800000000FFE780
8261FF0F000000000FFE7801FF8F000000000FFFF801FF9F0000000007FFF000FFDE0000000
827007FFF000FFFE0000000003FFE0007FFC0000000003FFE0007FFC0000000003FFE0007FF
828C0000000001FFC0003FF80000000001FFC0003FF80000000000FF80001FF00000000000F
829F80001FF00000000000FF00000FF000000000007F00000FE000000000007F00000FE0000
83000000003E000007C000000000003C000003C0000004C2C7EAB51>I<FFFFFE003FFFF0FF
831FFFE003FFFF0FFFFFE003FFFF0FFFFFE003FFFF0FFFFFE003FFFF000FFF00003E000007F
832F80007C000003FF8000F8000001FFC001F0000001FFE003F0000000FFF007E00000007FF
833807C00000003FFC0F800000001FFC1F000000001FFE3E000000000FFF7C0000000007FFF
83480000000003FFF80000000001FFF00000000001FFE00000000000FFF000000000007FF80
8350000000003FFC00000000003FFC00000000007FFE0000000000FFFF0000000000FFFF800
8360000001F3FFC000000003E1FFC000000007C1FFE00000000F80FFF00000001F007FF8000
8370003F003FFC0000007E001FFC0000007C001FFE000000F8000FFF000001F00007FF80000
8383E00003FFC00007E00001FFC00FFFFE000FFFFFCFFFFE000FFFFFCFFFFE000FFFFFCFFFF
839E000FFFFFCFFFFE000FFFFFC362C7EAB3B>I E /Fg 6 118 df<0003F000000FF800003E
8401C60007C0FF000F807F001F007F003E007F007E003E00FC003E00FC003E01F8007E01F80
84107C03F0007C03F0007C03F000FC07F000F807E000F807E000F807E001F80FE001F00FC00
8421F00FC001F06FC003F07FC003E0FFC003E0EFC007E0E7C007E1E7C00FE1C7C01FC1C3C03
843FC3C3E07BE381F0E1E7807FC0FF001F003C0202278A027>97 D<0000FC000007FF00001F
8440780003E03C000FC01C001F803C003F007C007E00FC007C00FC00FC00FC01F8007001F80
84500003F0000003F0000003F0000007F0000007E0000007E0000007E000000FE000000FC00
8460000FC000000FC000000FC0000007C0000C07C0001E07C0001E07C0003C03E000F803E00
8471F001F007C000F81F00003FFC00000FE00001B2278A023>99 D<000FC0000003FFC00000
84803FFC0000003FF800000001F800000001F800000001F800000001F000000001F00000000
8493F000000003F000000003E000000003E000000007E000000007E000000007C000000007C
85000000000FC00000000FC00000000F83F800000F8FFE00001FBE0F00001FF80F80001FF00
851780001FE007C0003FC007C0003F8007C0003F0007C0003F0007C0007E000FC0007E000F8
8520007C000F80007C000F8000FC001F8000FC001F0000F8001F0000F8001F0001F8003F000
8531F8003E0001F0007E0001F0007C0C03F0007C1E03F000FC1C03E000F81C03E000F81C07E
854000F83C07E000F03807C000F07807C000F0700FC000F0E00FC000F1E00F80007F8007000
85501F00023357BB327>104 D<0003F0001FFC003C1E00780F00F00701E00701E00F03E01F
85603C01F03C01F03E00403E00003F00003FF8003FFE001FFF000FFF8007FFC0007FC0000FE
85700007E00003E38003EFC003CFC003CFC003CFC007CF00078E000F0F001F07803E03C0F80
8581FFE0003F80018227AA01F>115 D<000300000F80000F80000F80001F80001F80001F00
859001F00003F00003F00003E00003E00007E00007E00007C007FFFF87FFFF8FFFFF800F800
86000F80001F80001F80001F00001F00003F00003F00003E00003E00007E00007E00007C000
86107C0000FC0000FC0000F80000F80601F80F01F80E01F00E01F01E01F01C01F03C01E0380
8621E07001E0F000F1E0007F80001E00015307AAE19>I<01F000000003FC0007000F1E000F
863000E1E001F001C1E001F003C1E001F00381E003F00783E003E00703E003E00703E003E00
864707E007E00F07C007C0060FC007C0000F8007C0000F800FC0001F800F80001F000F80001
865F000F80001F001F80003F001F00003E001F00003E001F06003E003F07003E003E0F007C0
86603E0E007C003E0E003C007E1E003C007E1C003E00FC1C003E01FC3C001E03FE38001F071
867E780007FE0FF00001F803C0024227AA029>I E /Fh 2 104 df<000007E000003FE00000
868FE000003F8000007F000000FE000000FC000001FC000001F8000001F8000001F8000001F
8698000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F
8708000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F
8718000001F8000003F8000003F0000007E000000FC000003F800007FE00000FF0000007FE0
872000003F8000000FC0000007E0000003F0000003F8000001F8000001F8000001F8000001F
8738000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F
8748000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F
8758000001F8000001FC000000FC000000FE0000007F0000003F8000000FE0000003FE00000
87607E01B4B7BB726>102 D<FC000000FFC0000007F0000001FC000000FE0000007F000000
8773F0000003F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
8781F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
8791F8000001F8000001F8000001F8000001F8000001F8000001F8000001FC000000FC00000
88007E0000003F0000001FC0000007FC000001FE000007FC00001FC000003F0000007E00000
8810FC000001FC000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
8821F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800000
8831F8000001F8000001F8000001F8000001F8000001F8000001F8000003F8000003F000000
8847F000000FE000001FC000007F00000FFC00000FC0000001B4B7BB726>I
885E /Fi 38 122 df<00003FE00FE00001FFF83FF80007E01EF83C001F800FF07E003F001F
886E0FE007E003FE0FE00FC003FC0FE01F8003FC0FE01F8003FC03803F0001F800003F0001F
887800003F0001F800003F0001F800003F0001F800003F0001F800003F0001F800003F0001F
888800003F0001F800003F0001F800003F0001F800003F0001F8000FFFFFFFFFFC0FFFFFFFF
889FFC0FFFFFFFFFFC003F0001F800003F0001F800003F0001F800003F0001F800003F0001F
890800003F0001F800003F0001F800003F0001F800003F0001F800003F0001F800003F0001F
891800003F0001F800003F0001F800003F0001F800003F0001F800003F0001F800003F0001F
892800003F0001F800003F0001F800003F0001F800003F0001F800003F0001F800003F0001F
893800003F0001F800003F0001F800007F8003FC000FFFF83FFFF00FFFF83FFFF00FFFF83FF
894FF002F357FB42D>11 D<00001FE0000000FFFC000003F01E00000FC00780001F80078000
8953F000FC0007E001FC000FC001FC000FC001FC001F8001FC001F8000F8001F800000001F8
89600000001F800000001F800000001F800000001F800000001F800000001F800000001F800
897000001F8000FC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC001F8001FC001F8000FC001F8000F
898C001F8000FC001F8000FC001F8000FC001F8000FC001F8000FC001F8000FC001F8000FC0
89901F8000FC001F8000FC001F8000FC001F8000FC001F8000FC001F8000FC001F8000FC001
900F8000FC001F8000FC001F8000FC001F8000FC001F8000FC001F8000FC001F8000FC001F8
901000FC003FC001FE07FFFC1FFFF7FFFC1FFFF7FFFC1FFFF28357FB42B>I<3C007E00FF00
902FF00FF80FF807F803D800180018001800180038003000300070006000E000C001C003800
9037000600009177AB315>39 D<3C007E00FF00FF00FF80FF807F803D800180018001800180
904038003000300070006000E000C001C0038007000600009177A8715>44
905D<3C7EFFFFFFFF7E3C08087A8715>46 D<000FE000007FFC0000F83E0003E00F8007C007
906C0078003C00F8003E01F0001F01F0001F03F0001F83F0001F83E0000F87E0000FC7E0000
907FC7E0000FC7E0000FC7E0000FCFE0000FEFE0000FEFE0000FEFE0000FEFE0000FEFE0000
908FEFE0000FEFE0000FEFE0000FEFE0000FEFE0000FEFE0000FEFE0000FEFE0000FEFE0000
909FEFE0000FEFE0000FEFE0000FE7E0000FC7E0000FC7E0000FC7E0000FC7E0000FC3F0001
910F83F0001F83F0001F81F0001F01F0001F00F8003E007C007C007C007C003E00F8000F83E
91100007FFC00000FE0001F347DB126>48 D<001FE00000FFFC0001FFFF0007E03F800F001F
912C01E000FE01C0007F03F0007F03F8007F83F8003F83FC003F83F8003F83F8003F81F0007
913F8000007F8000007F0000007F000000FE000000FC000001FC000003F8000007E000001F8
91400007FE000007FFC0000003F0000001FC000000FE0000007F0000007F8000003F8000003
915FC000001FC000001FE000001FE000001FE7E0001FEFF0001FEFF0001FEFF0001FEFF0001
916FEFF0001FCFE0003FC780003FC700007F8380007F03C000FF01F001FE00FE03F8003FFFF
9170000FFFC00001FE0001F347DB126>51 D<3C7EFFFFFFFF7E3C0000000000000000000000
91800000000003C7EFEFFFFFF7F3F03030303070606060E0C1C38307060082F7A9F15>59
919D<000000E0000000000000E0000000000000E0000000000001F0000000000001F0000000
920000003F8000000000003F8000000000003F8000000000007FC000000000007FC00000000
9210007FC00000000000DFE00000000000CFE00000000000CFE0000000000187F0000000000
922187F0000000000187F0000000000303F8000000000303F8000000000703FC00000000060
9231FC000000000601FC000000000E01FE000000000C00FE000000000C00FE000000001800F
924F0000000018007F0000000018007F0000000030003F8000000030003F8000000030003F8
925000000060001FC000000060001FC0000000E0001FE0000000FFFFFFE0000000FFFFFFE00
92600001FFFFFFF0000001800007F0000001800007F0000003000007F8000003000003F8000
927003000003F8000006000001FC000006000001FC000006000001FC00000C000000FE00000
928C000000FE00001C000000FF00001C0000007F00003E0000007F0001FF000000FF800FFFE
9290001FFFFE0FFFE0001FFFFE0FFFE0001FFFFE033367DB53A>65 D<FFFFFE000000FFFFFE
930000000FFFFFE00000003FE0000000001FC0000000001FC0000000001FC0000000001FC00
93100000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00
93200000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00
93300000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00
93400000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00
93500018001FC0000018001FC0000018001FC0000018001FC0000038001FC0000030001FC00
93600030001FC0000030001FC0000030001FC0000070001FC0000070001FC00000F0001FC00
937001F0001FC00003F0001FC00007F0001FC0000FE0003FC0007FE00FFFFFFFFFE00FFFFFF
938FFFE00FFFFFFFFFE0029337DB230>76 D<FFFE00001FFFF8FFFF00001FFFF8FFFF80001F
939FFF800FF800000FF0000FFC000003C0000DFE00000180000CFF00000180000CFF0000018
9400000C7F80000180000C3FC0000180000C3FC0000180000C1FE0000180000C0FF00001800
94100C07F8000180000C07F8000180000C03FC000180000C01FE000180000C01FE000180000
942C00FF000180000C007F800180000C003FC00180000C003FC00180000C001FE00180000C0
94300FF00180000C000FF00180000C0007F80180000C0003FC0180000C0001FE0180000C000
9441FE0180000C0000FF0180000C00007F8180000C00007F8180000C00003FC180000C00001
945FE180000C00000FF180000C00000FF180000C000007F980000C000003FD80000C000003F
946D80000C000001FF80000C000000FF80000C0000007F80000C0000007F80000C0000003F8
9470000C0000001F80000C0000001F80001E0000000F80007F80000007800FFFFC000003800
948FFFFC000003800FFFFC00000180035337EB23A>78 D<001FE00300007FFC070001FFFF07
9490007F01FCF000F8003FF001F0000FF003E00007F003E00003F007C00001F007C00001F00
9507800000F00F800000700F800000700F800000700F800000700FC00000300FC00000300FE
95100000300FE000000007F000000007FC00000003FF00000003FFF0000001FFFF000000FFF
952FF000007FFFFC00003FFFFF00000FFFFF800003FFFFC000003FFFE0000003FFF00000003
953FF00000000FF800000007F800000003F800000001FC00000000FC0C000000FC0C000000F
954C0C0000007C0C0000007C0C0000007C0E0000007C0E0000007C0F000000F80F000000F80
955F800000F00FC00001F00FE00003E00FF00007E00FFC000FC00F1FC03F800E0FFFFE000E0
9561FFF8000C003FE000022377CB42B>83 D<7FFFFFFFFFFE7FFFFFFFFFFE7FFFFFFFFFFE7F
9578007F001FE7C0007F0003E780007F0001E700007F0000E700007F0000E600007F00006E0
9580007F00007E00007F00007E00007F00007C00007F00003C00007F00003C00007F00003C0
9590007F00003C00007F00003C00007F00003000007F00000000007F00000000007F0000000
9600007F00000000007F00000000007F00000000007F00000000007F00000000007F0000000
9610007F00000000007F00000000007F00000000007F00000000007F00000000007F0000000
9620007F00000000007F00000000007F00000000007F00000000007F00000000007F0000000
9630007F00000000007F00000000007F00000000007F00000000007F00000000007F0000000
9640007F00000000007F0000000000FF80000001FFFFFFC00001FFFFFFC00001FFFFFFC0030
965337DB237>I<FFFFFE001FFFF8FFFFFE001FFFF8FFFFFE001FFFF801FF000000FF0000FE
9660000003C0000FE000000180000FE000000180000FE000000180000FE000000180000FE00
9670000180000FE000000180000FE000000180000FE000000180000FE000000180000FE0000
96800180000FE000000180000FE000000180000FE000000180000FE000000180000FE000000
969180000FE000000180000FE000000180000FE000000180000FE000000180000FE00000018
9700000FE000000180000FE000000180000FE000000180000FE000000180000FE0000001800
97100FE000000180000FE000000180000FE000000180000FE000000180000FE000000180000
972FE000000180000FE000000180000FE000000180000FE0000003800007F0000003000007F
9730000003000007F0000007000003F8000006000001F800000E000001FC00001C000000FC0
9740003C0000007E0000780000003F0000F00000001FC001E00000000FF00FC000000003FFF
975F0000000000FFFC00000000001FF00000035357EB23A>I<FFF0FFF0FFF0FFF0F000F000
976F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
977F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
978F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
979F000F000F000F000F000F000F000F000F000F000F000FFF0FFF0FFF0FFF00C4B79B715>
98091 D<FFF0FFF0FFF0FFF000F000F000F000F000F000F000F000F000F000F000F000F000
981F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
982F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
983F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
984F0FFF0FFF0FFF0FFF00C4B7FB715>93 D<007F80000003FFF000000F80FC00001C003E00
985003F003F00003F801F80003F800FC0003F800FC0003F8007E0001F0007E000000007E000
986000007E000000007E000000007E0000001FFE000001FFFE00000FF87E00003FC07E0000F
987F007E0001FC007E0003F8007E0007F8007E0007F0007E000FF0007E0C0FE0007E0C0FE00
98807E0C0FE0007E0C0FE000FE0C0FE000FE0C0FF001FE0C07F003BE0C03F8071F1801FC1E1
989FF8007FFC0FF0000FE003C0022237DA126>97 D<03F0000000FFF0000000FFF0000000FF
990F000000007F000000003F000000003F000000003F000000003F000000003F000000003F0
99100000003F000000003F000000003F000000003F000000003F000000003F000000003F000
992000003F000000003F03F800003F0FFE00003F3C0F80003F7007E0003FE003F0003FC001F
9938003F8000FC003F0000FC003F00007E003F00007F003F00007F003F00003F003F00003F8
99403F00003F803F00003F803F00003F803F00003F803F00003F803F00003F803F00003F803
995F00003F803F00003F803F00003F003F00007F003F00007E003F00007E003F0000FC003F8
996000FC003FC001F8003EC003F0003CF007C00038381F8000301FFE00000007F000025357E
997B32B>I<0007F800003FFF0000FC07C001F000E003E003F007C007F00FC007F01F8007F0
9983F8007F03F0003E07F0000007F0000007E000000FE000000FE000000FE000000FE000000
999FE000000FE000000FE000000FE000000FE000000FE0000007F0000007F0000003F000018
10003F8000181F8000381FC000300FC0007007E000E003F001C000FC0F80003FFE000007F000
10011D237EA122>I<0000003F0000000FFF0000000FFF0000000FFF000000007F000000003F
1002000000003F000000003F000000003F000000003F000000003F000000003F000000003F00
10030000003F000000003F000000003F000000003F000000003F000000003F000007F03F0000
10043FFC3F0000FC0F3F0001F003BF0007E001FF000FC000FF001F80007F001F80003F003F00
1005003F003F00003F007F00003F007E00003F00FE00003F00FE00003F00FE00003F00FE0000
10063F00FE00003F00FE00003F00FE00003F00FE00003F00FE00003F00FE00003F007E00003F
1007007F00003F007F00003F003F00003F001F80007F001F80007F000FC000FF0007E001FF80
100803F007BFFC00F81E3FFC003FFC3FFC000FE03F0026357DB32B>I<000FE000007FFC0000
1009F83F0003F00F8007E00FC00FC007E01F8003E01F8003F03F0003F03F0001F07F0001F87E
10100001F87E0001F8FE0001F8FE0001F8FFFFFFF8FFFFFFF8FE000000FE000000FE000000FE
1011000000FE0000007E0000007F0000007F0000003F0000183F0000181F8000380F8000300F
1012C0007007E000E001F003C000FC0F00003FFE000007F0001D237EA122>I<0001FC000007
1013FF00001F0780003E0FC0007C1FC000FC1FC001F81FC001F81FC003F8070003F0000003F0
1014000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0
1015000003F00000FFFFF000FFFFF000FFFFF00003F0000003F0000003F0000003F0000003F0
1016000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0
1017000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0
1018000003F0000003F0000007F800007FFFE0007FFFE0007FFFE0001A357FB417>I<000000
10191F00001FC07F8000FFF8E3C001F07FC7C007E03F03C00FC01F83800F800F80001F800FC0
1020001F0007C0003F0007E0003F0007E0003F0007E0003F0007E0003F0007E0003F0007E000
10211F0007C0001F800FC0000F800F80000FC01F800007E03F000007F07C00000EFFF800000C
10221FC000001C000000001C000000001C000000001E000000001E000000001F000000000FFF
1023FE00000FFFFFC00007FFFFF00003FFFFFC0007FFFFFE001F0001FE003E00007F007C0000
10243F007C00001F80F800000F80F800000F80F800000F80F800000F80F800000F80FC00001F
1025807C00001F003E00003E001F00007C000FC001F80003F007E00000FFFF8000001FFC0000
102622337EA126>I<03F0000000FFF0000000FFF0000000FFF000000007F000000003F00000
10270003F000000003F000000003F000000003F000000003F000000003F000000003F0000000
102803F000000003F000000003F000000003F000000003F000000003F000000003F01FC00003
1029F07FF00003F1E0FC0003F3807C0003F7007E0003FE007E0003FC003F0003FC003F0003F8
1030003F0003F8003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F000
10313F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F
10320003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0007F8007F80
1033FFFFC7FFFCFFFFC7FFFCFFFFC7FFFC26347EB32B>I<07800FC01FE01FE01FE01FE00FC0
10340780000000000000000000000000000000000000000007E0FFE0FFE0FFE00FE007E007E0
103507E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E0
103607E007E007E007E00FF0FFFFFFFFFFFF10337EB215>I<07E0FFE0FFE0FFE00FE007E007
1037E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007
1038E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007
1039E007E007E007E007E007E00FF0FFFFFFFFFFFF10347EB315>108
1040D<03F01FE000FF0000FFF07FF803FFC000FFF1E07C0F03E000FFF3803E1C01F00007F700
10413F3801F80003FE003F7001F80003FC001FE000FC0003FC001FE000FC0003F8001FC000FC
10420003F8001FC000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F000
10431F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC
10440003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F000
10451F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC0003F0001F8000FC
10460003F0001F8000FC0003F0001F8000FC0007F8003FC001FE00FFFFC7FFFE3FFFF0FFFFC7
1047FFFE3FFFF0FFFFC7FFFE3FFFF03C217EA041>I<03F01FC000FFF07FF000FFF1E0FC00FF
1048F3807C0007F7007E0003FE007E0003FC003F0003FC003F0003F8003F0003F8003F0003F0
1049003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F000
10503F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F
10510003F0003F0003F0003F0003F0003F0003F0003F0007F8007F80FFFFC7FFFCFFFFC7FFFC
1052FFFFC7FFFC26217EA02B>I<0007F00000003FFE000000FC1F800001F007C00003C001E0
10530007C001F0000F8000F8001F00007C001F00007C003F00007E003E00003E007E00003F00
10547E00003F007E00003F00FE00003F80FE00003F80FE00003F80FE00003F80FE00003F80FE
105500003F80FE00003F80FE00003F807E00003F007E00003F007E00003F003F00007E003F00
1056007E001F00007C001F8000FC000FC001F80007C001F00003F007E00000FC1F8000003FFE
105700000007F0000021237EA126>I<03F03F8000FFF0FFE000FFF3C0F800FFF7007E0007FE
1058003F0003FC001F8003F8001FC003F0000FC003F0000FE003F00007F003F00007F003F000
105907F003F00003F803F00003F803F00003F803F00003F803F00003F803F00003F803F00003
1060F803F00003F803F00003F803F00007F803F00007F003F00007F003F00007E003F0000FE0
106103F0000FC003F8001FC003FC003F8003FC003F0003FF00FC0003F381F80003F1FFE00003
1062F07F000003F000000003F000000003F000000003F000000003F000000003F000000003F0
106300000003F000000003F000000003F000000007F8000000FFFFC00000FFFFC00000FFFFC0
1064000025307EA02B>I<03E07C00FFE1FF00FFE38F80FFE71FC007EE1FC003EC1FC003EC1F
1065C003FC0F8003F8000003F8000003F8000003F0000003F0000003F0000003F0000003F000
10660003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F000
10670003F0000003F0000003F0000003F0000007F80000FFFFE000FFFFE000FFFFE0001A217F
1068A01E>114 D<00FF060007FFCE001F00FE003C003E0078001E0078000E00F0000E00F000
10690600F0000600F8000600F8000600FE000000FF8000007FFC00003FFFC0003FFFF0000FFF
1070F80007FFFC0000FFFE00000FFF000000FF0000003F80C0001F80C0000F80E0000780E000
10710780E0000780F0000780F0000700F8000F00FC000E00FE001C00F7807800E1FFE000C07F
1072800019237EA11E>I<00300000300000300000300000300000700000700000700000F000
107300F00001F00001F00003F00007F0001FFFFEFFFFFEFFFFFE03F00003F00003F00003F000
107403F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F003
107503F00303F00303F00303F00303F00303F00303F00303F00701F80601F80600FC0E007E1C
1076001FF80007E0182F7FAD1E>I<03F0003F00FFF00FFF00FFF00FFF00FFF00FFF0007F000
10777F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F
10780003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F00
107903F0003F0003F0003F0003F0003F0003F0003F0003F0003F0003F0007F0003F0007F0003
1080F0007F0003F000FF0001F000FF0001F801FF8000F803BFFC007E073FFC001FFE3FFC0007
1081F83F0026227EA02B>I<FFFF00FFF0FFFF00FFF0FFFF00FFF00FF0003F8007F0001F0003
1082F0000E0003F0000C0003F8001C0001F800180001F800180000FC00300000FC00300000FE
1083007000007E006000007F006000003F00C000003F00C000001F818000001F818000001FC3
10848000000FC30000000FC300000007E600000007E600000007FE00000003FC00000003FC00
1085000001F800000001F800000001F800000000F000000000F00000000060000024217E9F29
1086>I<FFFF1FFF81FFF0FFFF1FFF81FFF0FFFF1FFF81FFF007F801FC003F8007F001F8001E
10870003F000F8001C0003F000FC001C0001F8007C00180001F8007C00180001FC007E003800
108800FC00FE00300000FC00FE003000007E01FF006000007E019F006000007E019F80600000
10893F030F80C000003F030F80C000003F030FC0C000001F8607C18000001F8607C18000001F
1090C607E38000000FCC03E30000000FCC03E300000007FC03F600000007F801F600000007F8
109101FE00000003F000FC00000003F000FC00000003F000FC00000001E0007800000001E000
10927800000001E0007800000000C00030000034217F9F37>I<FFFF01FFF8FFFF01FFF8FFFF
109301FFF803FE00FF8001FC007C0000FC007800007E007000007F00E000003F81C000001F83
10948000000FC300000007E600000007FE00000003FC00000001F800000000FC00000000FE00
1095000000FF00000001FF000000039F800000071FC00000060FE000000C07E000001C03F000
1096003801F800007001FC0000F000FC0001F000FE000FF000FF80FFFC03FFFCFFFC03FFFCFF
1097FC03FFFC26207F9F29>I<7FFF807FF87FFF807FF87FFF807FF807F8001FC003F8000F80
109801F800070001F800060000FC000C0000FC000C0000FE001C00007E001800007E00180000
10993F003000003F003000003F807000001F806000001FC0E000000FC0C000000FC0C0000007
1100E180000007E180000007F380000003F300000003FB00000001FE00000001FE00000000FC
110100000000FC00000000FC0000000078000000007800000000300000000030000000006000
11020000006000000000E000000000C000000000C0000000018000007801800000FC03000000
1103FC03000000FC06000000FC0E000000701C00000078380000001FF00000000FC000000025
1104307F9F29>I E /Fj 5 53 df<0000380000000038000000003800000000380000000038
1105000000003800000000380000000038000000003800000000380000000038000000003800
110600000038000000003800000000380000000038000000003800000000380000FFFFFFFFFE
1107FFFFFFFFFEFFFFFFFFFE0000380000000038000000003800000000380000000038000000
1108003800000000380000000038000000003800000000380000000038000000003800000000
11093800000000380000000038000000003800000000380000000038000027277C9F2F>43
1110D<00E00001E00007E000FFE000F9E00001E00001E00001E00001E00001E00001E00001E0
11110001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E0
11120001E00001E00001E00001E00001E00001E00003F000FFFFC0FFFFC012217AA01E>49
1113D<01FC0007FF801C0FC03003E06001F06000F8F800F8FC00FCFC00FCFC007C78007C3000
1114FC0000FC0000F80000F80001F00003E00003C0000780000F00001E0000380000700000E0
11150001C00C03800C0600180C00181800183FFFF87FFFF8FFFFF0FFFFF016217CA01E>I<00
1116FF0003FFC00F03E01C00F01C00F83E00FC3E007C3E007C1E00FC0C00FC0000F80000F800
111701F00003E0000FC001FF0001FF000003E00000F000007800007C00003E00003F30003F78
1118003FFC003FFC003FFC003EF8007E60007C3800F81E03F00FFFC001FF0018227DA01E>I<
11190000E00001E00001E00003E00007E00007E0000DE0001DE00039E00031E00061E000E1E0
112000C1E00181E00381E00701E00601E00C01E01C01E01801E03001E07001E0E001E0FFFFFF
1121FFFFFF0001E00001E00001E00001E00001E00001E00003F0003FFF003FFF18227DA11E>
1122I E /Fk 5 107 df<000FFC0000003FFF000000FFFFC00003FFFFF00007FFFFF8000FFF
1123FFFC001FFFFFFE003FFFFFFF003FFFFFFF007FFFFFFF807FFFFFFF807FFFFFFF80FFFFFF
1124FFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFF
1125C0FFFFFFFFC0FFFFFFFFC07FFFFFFF807FFFFFFF807FFFFFFF803FFFFFFF003FFFFFFF00
11261FFFFFFE000FFFFFFC0007FFFFF80003FFFFF00000FFFFC000003FFF0000000FFC000022
1127227BA72D>15 D<0000000000000030000000000000000000780000000000000000007800
112800000000000000007C0000000000000000003C0000000000000000003C00000000000000
112900003E0000000000000000001E0000000000000000001E0000000000000000001F000000
11300000000000000F8000000000000000000F80000000000000000007C00000000000000000
113103E0000000000000000003E0000000000000000001F0000000000000000000F800000000
113200000000007C0000000000000000007E0000000000000000001F8000000000000000000F
1133C0000000000000000007F07FFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
1134FFFFFFFFFF7FFFFFFFFFFFFFFFFFFC000000000000000007F000000000000000000FC000
1135000000000000001F8000000000000000007E0000000000000000007C0000000000000000
113600F8000000000000000001F0000000000000000003E0000000000000000003E000000000
11370000000007C000000000000000000F8000000000000000000F8000000000000000001F00
113800000000000000001E0000000000000000001E0000000000000000003E00000000000000
113900003C0000000000000000003C0000000000000000007C00000000000000000078000000
11400000000000007800000000000000000030000050307BAE5B>33 D<0000003F000003FF00
1141000FE000003F8000007E000001FC000001F8000003F0000003F0000007E0000007E00000
114207E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E00000
114307E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E00000
114407E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000000FE00000
11450FC000001FC000003F8000003F000000FE000003F800007FE00000FF0000007FE0000003
1146F8000000FE0000003F0000003F8000001FC000000FC000000FE0000007E0000007E00000
114707E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E00000
114807E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E00000
114907E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000003F00000
115003F0000001F8000001FC0000007E0000003F8000000FE0000003FF0000003F205B7AC32D
1151>102 D<FC000000FFC0000007F0000001FC0000007E0000003F8000001F8000000FC000
1152000FC0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000
11530007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000
11540007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000
11550007E0000007E0000007F0000003F0000003F8000001FC000000FC0000007F0000001FC0
1156000007FE000000FF000007FE00001FC000007F000000FC000001FC000003F8000003F000
11570007F0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000
11580007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000
11590007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000
11600007E0000007E000000FC000000FC000001F8000003F8000007E000001FC000007F00000
1161FFC00000FC000000205B7AC32D>I<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
1162F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
1163F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F060045B
116476C319>106 D E /Fl 4 53 df<000C00003C00007C0003FC00FFFC00FC7C00007C0000
11657C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0000
11667C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0000
11677C00007C00007C00007C00007C00007C00007C00007C00007C00007C0000FE007FFFFE7F
1168FFFE172C7AAB23>49 D<007F800001FFF0000780FC000E003F001C001F8038000FC07000
11690FC0600007E0F00007E0FC0007F0FE0007F0FE0003F0FE0003F0FE0003F07C0007F00000
117007F0000007F0000007E000000FE000000FC000001FC000001F8000003F0000007E000000
11717C000000F8000001F0000003E0000007C000000F8000001E0000003C00000078000000F0
1172003000E0003001C0003003800060070000600E0000E01FFFFFE03FFFFFE07FFFFFC0FFFF
1173FFC0FFFFFFC01C2C7DAB23>I<003FC00001FFF00007C0FC000E007E001C003F001C001F
1174803F001FC03F001FC03F800FC03F000FC03F000FC00C001FC000001FC000001F8000001F
11758000003F0000003E0000007C000000F8000003F00000FFC00000FFF0000000FC0000003F
11760000001F8000001FC000000FC000000FE000000FE0000007F0000007F0380007F07C0007
1177F0FE0007F0FE0007F0FE0007F0FE000FE0F8000FE060000FC070001FC038001F801E003F
1178000780FC0001FFF000007FC0001C2D7DAB23>I<00000E0000000E0000001E0000003E00
117900003E0000007E000000FE000000FE000001BE000003BE0000033E0000063E00000E3E00
1180000C3E0000183E0000383E0000303E0000603E0000E03E0000C03E0001803E0003803E00
118103003E0006003E000E003E000C003E0018003E0038003E0030003E0060003E00E0003E00
1182FFFFFFFCFFFFFFFC00003E0000003E0000003E0000003E0000003E0000003E0000003E00
118300003E0000003E0000007F00001FFFFC001FFFFC1E2D7EAC23>I
1184E /Fm 52 122 df<000000FFF8000000000FFFFF000000007FFFFF80000001FFFFFFE000
11850007FFC01FF000000FFE0007F000001FF8000FF800003FE0001FF800007FC0003FFC0000
1186FFC0003FFC0000FF80003FFC0001FF80003FFC0001FF00003FFC0001FF00003FFC0001FF
118700001FF80001FF00000FF00001FF000003C00001FF000000000001FF000000000001FF00
11880000000001FF000000000001FF000000000001FF000000000001FF000003FC00FFFFFFFF
1189FFFC00FFFFFFFFFFFC00FFFFFFFFFFFC00FFFFFFFFFFFC00FFFFFFFFFFFC0001FF80001F
1190FC0001FF80000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC
11910001FF80000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC00
119201FF80000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC0001
1193FF80000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC0001FF
119480000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC0001FF80
1195000FFC0001FF80000FFC0001FF80000FFC0001FF80000FFC007FFFFE03FFFFF07FFFFE03
1196FFFFF07FFFFE03FFFFF07FFFFE03FFFFF07FFFFE03FFFFF034407EBF3A>12
1197D<0FC0001F801FE0003FC03FF0007FE07FF800FFF0FFFC01FFF8FFFC01FFF8FFFC01FFF8
1198FFFE01FFFCFFFE01FFFCFFFE01FFFC7FFE00FFFC3FFE007FFC1FFE003FFC0FDE001FBC00
11991E00003C001E00003C003E00007C003C000078003C000078007C0000F800780000F00078
12000000F000F80001F001F00003E001F00003E003E00007C007C0000F800F80001F001F8000
12013F003F00007E003E00007C001C0000380026207DBE37>34 D<FFFFFFE0FFFFFFE0FFFFFF
1202E0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE01B097F9823>45
1203D<0FC01FE03FF07FF8FFFCFFFCFFFCFFFCFFFCFFFC7FF83FF01FE00FC00E0E798D1D>I<
12040000FFE000000007FFFC0000001FFFFF0000007FFFFFC00000FFE0FFE00001FF803FF000
120503FE000FF80007FC0007FC0007FC0007FC000FF80003FE001FF80003FF001FF80003FF00
12061FF80003FF003FF00001FF803FF00001FF803FF00001FF807FF00001FFC07FF00001FFC0
12077FF00001FFC07FF00001FFC07FF00001FFC0FFF00001FFE0FFF00001FFE0FFF00001FFE0
1208FFF00001FFE0FFF00001FFE0FFF00001FFE0FFF00001FFE0FFF00001FFE0FFF00001FFE0
1209FFF00001FFE0FFF00001FFE0FFF00001FFE0FFF00001FFE0FFF00001FFE0FFF00001FFE0
1210FFF00001FFE0FFF00001FFE0FFF00001FFE0FFF00001FFE0FFF00001FFE07FF00001FFC0
12117FF00001FFC07FF00001FFC07FF00001FFC07FF00001FFC03FF00001FF803FF80003FF80
12123FF80003FF801FF80003FF001FF80003FF000FF80003FE000FFC0007FE0007FE000FFC00
121303FF001FF80001FF803FF00000FFE0FFE000007FFFFFC000001FFFFF00000007FFFC0000
12140000FFE000002B3D7CBB34>48 D<00000F000000003F000000007F00000001FF0000000F
1215FF000001FFFF0000FFFFFF0000FFFFFF0000FFFFFF0000FFF7FF0000FE07FF00000007FF
121600000007FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF00
1217000007FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF0000
12180007FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF000000
121907FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007
1220FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF
122100000007FF00000007FF00000007FF00000007FF00000007FF00000007FF00000007FF00
122200FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0243C78BB34>I<0003FF
1223800000003FFFF8000000FFFFFE000003FFFFFF800007FFFFFFC0000FF80FFFE0001FC003
1224FFF0003F8000FFF8007FC0007FFC007FE0003FFE00FFF0003FFE00FFF8001FFF00FFF800
12251FFF00FFF8000FFF80FFF8000FFF80FFF8000FFF80FFF8000FFF807FF0000FFF803FE000
12260FFF801FC0000FFF800700000FFF800000000FFF800000001FFF000000001FFF00000000
12271FFE000000003FFE000000003FFC000000007FF8000000007FF800000000FFF000000000
1228FFE000000001FFC000000003FF8000000007FE0000000007FC000000000FF8000000001F
1229E0000000003FC0000000007F8000000000FF000F800001FC000F800003F8000F800007F0
1230001F00000FE0001F00001F80001F00003F00001F00007E00003F0000FC00003F0001FFFF
1231FFFF0003FFFFFFFE0007FFFFFFFE000FFFFFFFFE001FFFFFFFFE003FFFFFFFFE007FFFFF
1232FFFE00FFFFFFFFFE00FFFFFFFFFC00FFFFFFFFFC00FFFFFFFFFC00FFFFFFFFFC00293C7B
1233BB34>I<0001FFE00000000FFFFE0000003FFFFF800000FFFFFFE00001FF81FFF00003FC
1234007FF80007F0003FFC0007F0003FFE000FFC001FFE000FFE001FFF001FFE001FFF001FFF
1235001FFF001FFF001FFF001FFF001FFF001FFF001FFF001FFF001FFF000FFE001FFF000FFE
1236001FFE0007FC003FFE0001F0003FFC000000003FFC000000007FF8000000007FF0000000
123700FFE000000001FFC00000000FFF80000007FFFE00000007FFF800000007FFFE00000007
1238FFFFC000000001FFF0000000007FF8000000003FFC000000001FFE000000000FFF000000
1239000FFF800000000FFF8000000007FFC000000007FFC000000007FFE00FC00007FFE01FE0
12400007FFE03FF00007FFE07FF80007FFE0FFFC0007FFE0FFFC0007FFE0FFFC0007FFE0FFFC
12410007FFC0FFFC0007FFC0FFFC000FFFC0FFF8000FFF807FF8000FFF807FF0001FFF003FC0
1242003FFE001FE0007FFC000FFE01FFF80007FFFFFFF00003FFFFFFE00000FFFFFF8000003F
1243FFFE00000003FFE000002B3D7CBB34>I<00000001F80000000003F80000000007F80000
1244000007F8000000000FF8000000001FF8000000003FF8000000003FF8000000007FF80000
12450000FFF800000001FFF800000003FFF800000003FFF800000007FFF80000000FFFF80000
1246001FBFF80000003F3FF80000003E3FF80000007C3FF8000000FC3FF8000001F83FF80000
124701F03FF8000003E03FF8000007E03FF800000FC03FF800001F803FF800001F003FF80000
12483E003FF800007E003FF80000FC003FF80001F8003FF80001F0003FF80003E0003FF80007
1249E0003FF8000FC0003FF8000F80003FF8001F00003FF8003F00003FF8007E00003FF800FC
125000003FF800FFFFFFFFFFF8FFFFFFFFFFF8FFFFFFFFFFF8FFFFFFFFFFF8FFFFFFFFFFF800
125100007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF80000
125200007FF8000000007FF8000000007FF8000000007FF8000001FFFFFFF80001FFFFFFF800
125301FFFFFFF80001FFFFFFF80001FFFFFFF82D3C7DBB34>I<0700000038000FE00001F800
12540FFE003FF8000FFFFFFFF8000FFFFFFFF0000FFFFFFFE0000FFFFFFFC0000FFFFFFF8000
12550FFFFFFF00000FFFFFFE00000FFFFFF800000FFFFFF000000FFFFFC000000FFFFE000000
12560F80000000000F80000000000F80000000000F80000000000F80000000000F8000000000
12570F80000000000F80000000000F80000000000F80FFC000000F87FFFC00000F9FFFFF0000
12580FFFFFFF80000FFF01FFE0000FF8007FF0000FF0003FF8000FC0001FFC000F80001FFC00
12590700001FFE000000000FFE000000000FFF000000000FFF000000000FFF000000000FFF80
12600000000FFF800700000FFF801FC0000FFF803FE0000FFF807FF0000FFF80FFF0000FFF80
1261FFF8000FFF80FFF8000FFF80FFF8000FFF00FFF8000FFF00FFF0000FFF00FFF0001FFE00
12627FE0001FFE007F80001FFC003F00003FFC003F80007FF8001FE000FFF0000FFC07FFE000
126307FFFFFFC00003FFFFFF000000FFFFFC0000003FFFF000000007FF000000293D7BBB34>
1264I<000007FF000000003FFFC0000001FFFFF0000007FFFFF800000FFF03FC00003FF800FC
126500007FE001FE0000FFC003FE0001FF8007FF0003FF000FFF0003FF000FFF0007FE000FFF
1266000FFE000FFF000FFE000FFF001FFC000FFF001FFC0007FE003FFC0003FC003FFC0001F8
1267003FFC000000007FF8000000007FF8000000007FF8020000007FF83FFE0000FFF87FFF80
126800FFF9FFFFE000FFFBFFFFF000FFFBE03FF800FFFF800FFC00FFFF0007FE00FFFF0007FF
126900FFFE0007FF00FFFE0003FF80FFFC0003FFC0FFFC0003FFC0FFFC0003FFC0FFFC0003FF
1270E0FFF80003FFE0FFF80003FFE0FFF80003FFE0FFF80003FFE07FF80003FFE07FF80003FF
1271E07FF80003FFE07FF80003FFE07FF80003FFE03FF80003FFE03FF80003FFE03FFC0003FF
1272C01FFC0003FFC01FFC0003FFC00FFC0007FF800FFE0007FF0007FE0007FF0003FF000FFE
12730001FF801FFC0000FFE07FF800007FFFFFF000003FFFFFE000001FFFFF80000007FFFE00
1274000000FFF000002B3D7CBB34>I<1F00000000001F80000000001FF8000000001FFFFFFF
1275FFF01FFFFFFFFFF01FFFFFFFFFF01FFFFFFFFFF03FFFFFFFFFF03FFFFFFFFFE03FFFFFFF
1276FFC03FFFFFFFFF803FFFFFFFFF003FFFFFFFFE003FFFFFFFFC007FFFFFFFFC007E000001
1277F8007E000003F0007C000007E0007C00000FC0007C00001F80007C00001F0000F800003F
12780000F800007E0000F80000FC0000000001F80000000003F00000000003F00000000007E0
1279000000000FE0000000000FC0000000001FC0000000003FC0000000003F80000000007F80
1280000000007F8000000000FF8000000000FF0000000001FF0000000001FF0000000003FF00
128100000003FF0000000003FF0000000007FE0000000007FE0000000007FE000000000FFE00
12820000000FFE000000000FFE000000000FFE000000000FFE000000001FFE000000001FFE00
12830000001FFE000000001FFE000000001FFE000000001FFE000000001FFE000000001FFE00
12840000001FFE000000001FFE000000000FFC0000000007F80000000003F00000002C3F7ABD
128534>I<0000FFF000000007FFFE0000001FFFFF8000007FFFFFE00000FFC07FF00001FE00
12861FF80003FC000FFC0007F80007FE0007F80003FE000FF00003FE000FF00003FF000FF000
128701FF001FF00001FF001FF00001FF001FF80001FF001FFC0001FF001FFE0001FF001FFF00
128803FF001FFFC003FE001FFFF003FE000FFFF807FC000FFFFE0FF8000FFFFF9FF00007FFFF
1289FFE00003FFFFFFC00003FFFFFF800001FFFFFF000000FFFFFF8000007FFFFFE000001FFF
1290FFF000003FFFFFF80000FFFFFFFC0001FFFFFFFE0007FE3FFFFF000FFC1FFFFF801FF807
1291FFFF801FF001FFFFC03FE0007FFFC07FE0003FFFC07FC0000FFFE07FC00003FFE0FF8000
129201FFE0FF800000FFE0FF8000007FE0FF8000007FE0FF8000003FE0FF8000003FE0FF8000
1293003FE0FFC000003FC07FC000003FC07FC000007F807FE000007F803FF00000FF001FF800
129401FF001FFE0007FE000FFFC03FFC0007FFFFFFF80001FFFFFFE000007FFFFFC000001FFF
1295FE00000001FFF000002B3D7CBB34>I<0001FFE00000000FFFFC0000003FFFFF000000FF
1296FFFFC00001FFE0FFE00003FF003FF00007FE001FF8000FFE000FFC001FFC000FFC001FFC
12970007FE003FFC0007FE007FF80007FF007FF80003FF007FF80003FF80FFF80003FF80FFF8
12980003FF80FFF80003FFC0FFF80003FFC0FFF80003FFC0FFF80003FFC0FFF80003FFC0FFF8
12990003FFE0FFF80003FFE0FFF80003FFE0FFF80003FFE07FF80007FFE07FF80007FFE07FF8
13000007FFE07FF80007FFE03FF8000FFFE01FFC000FFFE01FFC001FFFE00FFE001FFFE007FE
1301003FFFE003FF80FBFFE001FFFFFBFFE0007FFFF3FFE0003FFFC3FFE0000FFF83FFC00000
13020803FFC000000003FFC000000003FFC000000007FF8003F00007FF8007F80007FF800FFC
13030007FF001FFE0007FF001FFE000FFE001FFE000FFE001FFE000FFC001FFE001FFC001FFE
1304003FF8001FFC003FF0000FF800FFE0000FF001FFC00007FC0FFF800003FFFFFF000001FF
1305FFFC000000FFFFF00000007FFFC00000000FFE0000002B3D7CBB34>I<0FC01FE03FF07F
1306F8FFFCFFFCFFFCFFFCFFFCFFFC7FF83FF01FE00FC0000000000000000000000000000000
13070000000000000000000FC01FE03FF07FF8FFFCFFFCFFFCFFFCFFFCFFFC7FF83FF01FE00F
1308C00E2879A71D>I<00000000FC0000000000000000FC0000000000000001FE0000000000
1309000001FE0000000000000003FF0000000000000003FF0000000000000003FF0000000000
1310000007FF8000000000000007FF800000000000000FFFC00000000000000FFFC000000000
131100000FFFC00000000000001FFFE00000000000001FFFE00000000000003FFFF000000000
131200003FFFF00000000000003FFFF00000000000007FFFF80000000000007CFFF800000000
13130000FCFFFC000000000000F87FFC000000000000F87FFC000000000001F87FFE00000000
13140001F03FFE000000000003F03FFF000000000003E01FFF000000000007E01FFF80000000
13150007C01FFF800000000007C00FFF80000000000FC00FFFC0000000000F8007FFC0000000
1316001F8007FFE0000000001F0007FFE0000000001F0003FFE0000000003F0003FFF0000000
1317003E0001FFF0000000007E0001FFF8000000007C0000FFF8000000007C0000FFF8000000
131800FC0000FFFC00000000F800007FFC00000001FFFFFFFFFE00000001FFFFFFFFFE000000
131901FFFFFFFFFE00000003FFFFFFFFFF00000003FFFFFFFFFF00000007E000001FFF800000
132007C000000FFF8000000FC000000FFFC000000F8000000FFFC000000F80000007FFC00000
13211F80000007FFE000001F00000003FFE000003F00000003FFF000003E00000003FFF00000
13223E00000001FFF000007E00000001FFF800007C00000000FFF800FFFFFC0000FFFFFFFCFF
1323FFFC0000FFFFFFFCFFFFFC0000FFFFFFFCFFFFFC0000FFFFFFFCFFFFFC0000FFFFFFFC46
13243F7CBE4F>65 D<FFFFFFFFFFF80000FFFFFFFFFFFF8000FFFFFFFFFFFFF000FFFFFFFFFF
1325FFFC00FFFFFFFFFFFFFE00003FFC00003FFF00003FFC00000FFF80003FFC000007FFC000
13263FFC000003FFE0003FFC000001FFE0003FFC000001FFF0003FFC000001FFF0003FFC0000
132700FFF8003FFC000000FFF8003FFC000000FFF8003FFC000000FFF8003FFC000000FFF800
13283FFC000000FFF8003FFC000000FFF8003FFC000000FFF0003FFC000001FFF0003FFC0000
132901FFF0003FFC000003FFE0003FFC000003FFC0003FFC000007FF80003FFC00000FFF0000
13303FFC00003FFE00003FFC0001FFF800003FFFFFFFFFE000003FFFFFFFFF8000003FFFFFFF
1331FFF800003FFFFFFFFFFE00003FFC00000FFF80003FFC000003FFC0003FFC000001FFE000
13323FFC000000FFF0003FFC000000FFF8003FFC0000007FFC003FFC0000007FFC003FFC0000
1333003FFE003FFC0000003FFE003FFC0000003FFF003FFC0000003FFF003FFC0000003FFF00
13343FFC0000001FFF003FFC0000003FFF003FFC0000003FFF003FFC0000003FFF003FFC0000
1335003FFF003FFC0000003FFE003FFC0000007FFE003FFC0000007FFE003FFC000000FFFC00
13363FFC000001FFF8003FFC000003FFF8003FFC000007FFF0003FFC00003FFFE0FFFFFFFFFF
1337FFFFC0FFFFFFFFFFFFFF00FFFFFFFFFFFFFC00FFFFFFFFFFFFF000FFFFFFFFFFFF000040
13383E7DBD4A>I<00000007FFC0000E000000FFFFFC001E000007FFFFFF003E00003FFFFFFF
1339C07E0000FFFFFFFFE1FE0003FFFF803FFBFE0007FFF80003FFFE000FFFC00000FFFE003F
1340FF0000007FFE007FFE0000001FFE00FFF80000000FFE01FFF000000007FE03FFE0000000
134107FE03FFC000000003FE07FFC000000001FE0FFF8000000001FE0FFF8000000000FE1FFF
13420000000000FE1FFF00000000007E3FFF00000000007E3FFE00000000007E3FFE00000000
1343003E7FFE00000000003E7FFE00000000003E7FFE00000000003E7FFC000000000000FFFC
1344000000000000FFFC000000000000FFFC000000000000FFFC000000000000FFFC00000000
13450000FFFC000000000000FFFC000000000000FFFC000000000000FFFC000000000000FFFC
1346000000000000FFFC000000000000FFFC0000000000007FFC0000000000007FFE00000000
134700007FFE00000000003E7FFE00000000003E3FFE00000000003E3FFE00000000003E3FFF
134800000000003E1FFF00000000007E1FFF00000000007C0FFF80000000007C0FFF80000000
134900FC07FFC000000000F803FFE000000001F803FFE000000001F001FFF000000003F000FF
1350F800000007E0007FFE0000000FC0003FFF0000003F80000FFFC00000FF000007FFF80003
1351FE000003FFFF801FFC000000FFFFFFFFF80000003FFFFFFFE000000007FFFFFF80000000
135200FFFFFC000000000007FFC000003F407ABE4C>I<FFFFFFFFFFF8000000FFFFFFFFFFFF
1353800000FFFFFFFFFFFFF00000FFFFFFFFFFFFFC0000FFFFFFFFFFFFFF0000003FFC00007F
1354FFC000003FFC000007FFE000003FFC000001FFF000003FFC0000007FF800003FFC000000
13553FFC00003FFC0000001FFE00003FFC0000000FFF00003FFC00000007FF80003FFC000000
135607FF80003FFC00000003FFC0003FFC00000003FFC0003FFC00000001FFE0003FFC000000
135701FFE0003FFC00000001FFF0003FFC00000000FFF0003FFC00000000FFF0003FFC000000
135800FFF8003FFC00000000FFF8003FFC00000000FFF8003FFC00000000FFF8003FFC000000
135900FFFC003FFC00000000FFFC003FFC00000000FFFC003FFC00000000FFFC003FFC000000
136000FFFC003FFC000000007FFC003FFC000000007FFC003FFC000000007FFC003FFC000000
136100FFFC003FFC00000000FFFC003FFC00000000FFFC003FFC00000000FFFC003FFC000000
136200FFFC003FFC00000000FFF8003FFC00000000FFF8003FFC00000000FFF8003FFC000000
136300FFF8003FFC00000000FFF0003FFC00000000FFF0003FFC00000001FFF0003FFC000000
136401FFE0003FFC00000001FFE0003FFC00000003FFC0003FFC00000003FFC0003FFC000000
136507FF80003FFC0000000FFF00003FFC0000001FFF00003FFC0000003FFE00003FFC000000
13667FFC00003FFC000001FFF800003FFC000007FFE000003FFC00007FFFC000FFFFFFFFFFFF
1367FF8000FFFFFFFFFFFFFE0000FFFFFFFFFFFFF80000FFFFFFFFFFFFC00000FFFFFFFFFFF8
1368000000463E7DBD50>I<FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFF
1369FFFFFFFFFF00FFFFFFFFFFFFFF80003FFE00003FFF80003FFE000007FF80003FFE000001
1370FF80003FFE000000FF80003FFE0000003F80003FFE0000003F80003FFE0000001F80003F
1371FE0000000FC0003FFE0000000FC0003FFE0000000FC0003FFE00000007C0003FFE0007C0
137207C0003FFE0007C007C0003FFE0007C007C0003FFE0007C003E0003FFE0007C003E0003F
1373FE0007C003E0003FFE000FC003E0003FFE000FC00000003FFE001FC00000003FFE003FC0
13740000003FFE00FFC00000003FFFFFFFC00000003FFFFFFFC00000003FFFFFFFC00000003F
1375FFFFFFC00000003FFFFFFFC00000003FFE00FFC00000003FFE003FC00000003FFE001FC0
13760000003FFE000FC0007C003FFE000FC0007C003FFE0007C0007C003FFE0007C000F8003F
1377FE0007C000F8003FFE0007C000F8003FFE0007C000F8003FFE0007C000F8003FFE000000
137801F8003FFE00000001F8003FFE00000001F0003FFE00000003F0003FFE00000003F0003F
1379FE00000007F0003FFE00000007F0003FFE0000000FF0003FFE0000001FE0003FFE000000
13803FE0003FFE000000FFE0003FFE000003FFE0003FFE00003FFFE0FFFFFFFFFFFFFFE0FFFF
1381FFFFFFFFFFE0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC03E3D7DBC45>
1382I<FFFFFFFFFFFFFE00FFFFFFFFFFFFFE00FFFFFFFFFFFFFE00FFFFFFFFFFFFFE00FFFFFF
1383FFFFFFFF00003FFE00007FFF00003FFE00000FFF00003FFE000003FF00003FFE000000FF
138400003FFE0000007F00003FFE0000007F00003FFE0000003F00003FFE0000001F80003FFE
13850000001F80003FFE0000001F80003FFE0000000F80003FFE0000000F80003FFE0007C00F
138680003FFE0007C00F80003FFE0007C007C0003FFE0007C007C0003FFE0007C007C0003FFE
13870007C007C0003FFE000FC00000003FFE000FC00000003FFE001FC00000003FFE003FC000
138800003FFE00FFC00000003FFFFFFFC00000003FFFFFFFC00000003FFFFFFFC00000003FFF
1389FFFFC00000003FFFFFFFC00000003FFE00FFC00000003FFE003FC00000003FFE001FC000
139000003FFE000FC00000003FFE000FC00000003FFE0007C00000003FFE0007C00000003FFE
13910007C00000003FFE0007C00000003FFE0007C00000003FFE0007C00000003FFE00000000
139200003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE
13930000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE00000000
139400003FFE0000000000003FFE0000000000FFFFFFFFE0000000FFFFFFFFE0000000FFFFFF
1395FFE0000000FFFFFFFFE0000000FFFFFFFFE00000003A3D7DBC42>I<FFFFFFFF80FFFFFF
1396FF80FFFFFFFF80FFFFFFFF80FFFFFFFF80003FFE0000003FFE0000003FFE0000003FFE00
139700003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000
1398003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE000000
13993FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003F
1400FE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE
14010000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE00
140200003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000
1403003FFE0000003FFE0000003FFE0000003FFE0000003FFE0000FFFFFFFF80FFFFFFFF80FF
1404FFFFFF80FFFFFFFF80FFFFFFFF80213E7DBD28>73 D<FFFFFFFFE00000FFFFFFFFE00000
1405FFFFFFFFE00000FFFFFFFFE00000FFFFFFFFE00000003FFE00000000003FFE0000000000
14063FFE00000000003FFE00000000003FFE00000000003FFE00000000003FFE00000000003F
1407FE00000000003FFE00000000003FFE00000000003FFE00000000003FFE00000000003FFE
140800000000003FFE00000000003FFE00000000003FFE00000000003FFE00000000003FFE00
1409000000003FFE00000000003FFE00000000003FFE00000000003FFE00000000003FFE0000
14100000003FFE00000000003FFE00000000003FFE00000000003FFE00000000003FFE000000
141100003FFE00000000003FFE00000000003FFE00000000003FFE0000003E003FFE0000003E
1412003FFE0000003E003FFE0000003E003FFE0000007E003FFE0000007C003FFE0000007C00
14133FFE0000007C003FFE0000007C003FFE000000FC003FFE000000FC003FFE000001FC003F
1414FE000001FC003FFE000003F8003FFE000003F8003FFE000007F8003FFE00000FF8003FFE
141500001FF8003FFE00007FF8003FFE0001FFF8003FFE000FFFF8FFFFFFFFFFFFF8FFFFFFFF
1416FFFFF0FFFFFFFFFFFFF0FFFFFFFFFFFFF0FFFFFFFFFFFFF0373E7DBD3F>76
1417D<0000003FFF00000000000003FFFFF000000000001FFFFFFE00000000007FFFFFFF8000
1418000001FFF807FFE000000007FFC000FFF80000000FFF00003FFC0000003FFC00000FFF00
141900007FF8000007FF800000FFF0000003FFC00001FFE0000001FFE00001FFC0000000FFE0
14200003FFC0000000FFF00007FF800000007FF80007FF800000007FF8000FFF000000003FFC
1421001FFF000000003FFE001FFF000000003FFE001FFE000000001FFE003FFE000000001FFF
1422003FFE000000001FFF003FFE000000001FFF007FFC000000000FFF807FFC000000000FFF
1423807FFC000000000FFF807FFC000000000FFF80FFFC000000000FFFC0FFFC000000000FFF
1424C0FFFC000000000FFFC0FFFC000000000FFFC0FFFC000000000FFFC0FFFC000000000FFF
1425C0FFFC000000000FFFC0FFFC000000000FFFC0FFFC000000000FFFC0FFFC000000000FFF
1426C0FFFC000000000FFFC0FFFC000000000FFFC0FFFC000000000FFFC07FFC000000000FFF
1427807FFE000000001FFF807FFE000000001FFF807FFE000000001FFF803FFE000000001FFF
1428003FFE000000001FFF003FFF000000003FFF001FFF000000003FFE001FFF000000003FFE
1429000FFF800000007FFC000FFF800000007FFC0007FFC0000000FFF80003FFE0000001FFF0
14300003FFE0000001FFF00001FFF0000003FFE00000FFF8000007FFC000007FFC00000FFF80
143100003FFF00003FFF0000001FFFC000FFFE00000007FFF807FFF800000001FFFFFFFFE000
1432000000FFFFFFFFC0000000001FFFFFFE000000000003FFFFF00000000000003FFF000000
14330042407ABE4F>79 D<FFFFFFFFFFF00000FFFFFFFFFFFF0000FFFFFFFFFFFFC000FFFFFF
1434FFFFFFF000FFFFFFFFFFFFFC00003FFC0000FFFE00003FFC00001FFF00003FFC00000FFF
143580003FFC000007FFC0003FFC000003FFE0003FFC000003FFE0003FFC000001FFF0003FFC
1436000001FFF0003FFC000001FFF0003FFC000001FFF8003FFC000001FFF8003FFC000001FF
1437F8003FFC000001FFF8003FFC000001FFF8003FFC000001FFF8003FFC000001FFF8003FFC
1438000001FFF8003FFC000001FFF0003FFC000001FFF0003FFC000001FFF0003FFC000003FF
1439E0003FFC000003FFC0003FFC000007FFC0003FFC00000FFF80003FFC00003FFF00003FFC
14400000FFFE00003FFFFFFFFFF800003FFFFFFFFFF000003FFFFFFFFF8000003FFFFFFFFC00
144100003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE
14420000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE00000000
144300003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE
14440000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE00000000
144500003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000FFFFFF
1446FF80000000FFFFFFFF80000000FFFFFFFF80000000FFFFFFFF80000000FFFFFFFF800000
1447003D3E7DBD47>I<FFFFFFFFFF8000000000FFFFFFFFFFFC00000000FFFFFFFFFFFF8000
14480000FFFFFFFFFFFFF0000000FFFFFFFFFFFFF8000000003FFC0001FFFE000000003FFC00
1449003FFF000000003FFC00000FFF800000003FFC000007FFC00000003FFC000003FFE00000
1450003FFC000003FFE00000003FFC000003FFF00000003FFC000001FFF00000003FFC000001
1451FFF80000003FFC000001FFF80000003FFC000001FFF80000003FFC000001FFF80000003F
1452FC000001FFF80000003FFC000001FFF80000003FFC000001FFF80000003FFC000001FFF0
14530000003FFC000001FFF00000003FFC000003FFF00000003FFC000003FFE00000003FFC00
14540003FFC00000003FFC000007FF800000003FFC00000FFF000000003FFC00003FFE000000
1455003FFC0001FFFC000000003FFFFFFFFFF0000000003FFFFFFFFFC0000000003FFFFFFFFE
145600000000003FFFFFFFFF80000000003FFC000FFFC0000000003FFC0001FFF0000000003F
1457FC0000FFF8000000003FFC00007FFC000000003FFC00007FFC000000003FFC00003FFE00
14580000003FFC00003FFE000000003FFC00001FFF000000003FFC00001FFF000000003FFC00
1459001FFF000000003FFC00001FFF000000003FFC00001FFF000000003FFC00001FFF000000
1460003FFC00001FFF800000003FFC00001FFF800000003FFC00001FFF800000003FFC00001F
1461FF800000003FFC00001FFF800000003FFC00001FFF800000003FFC00001FFF8007C0003F
1462FC00001FFFC007C0003FFC00001FFFC007C0003FFC00000FFFC00FC0003FFC00000FFFE0
14630F80FFFFFFFF0007FFF01F80FFFFFFFF0003FFFC3F00FFFFFFFF0001FFFFFF00FFFFFFFF
146400007FFFFE00FFFFFFFF00001FFFF80000000000000001FFE0004A3F7DBD4E>82
1465D<0003FFC001C0001FFFF803C0007FFFFE07C001FFFFFF8FC003FFFFFFDFC007FF00FFFF
1466C00FF8000FFFC01FF00003FFC01FE00001FFC03FC000007FC07FC000007FC07F8000003F
1467C07F8000001FC0FF8000001FC0FF8000000FC0FF8000000FC0FFC000000FC0FFC0000007
1468C0FFC0000007C0FFE0000007C0FFF0000007C0FFFC00000000FFFF800000007FFFF80000
1469007FFFFFC000003FFFFFFC00003FFFFFFF80001FFFFFFFE0001FFFFFFFF8000FFFFFFFFC
14700007FFFFFFFE0003FFFFFFFF0001FFFFFFFF80007FFFFFFFC0003FFFFFFFC00007FFFFFF
1471E000007FFFFFE0000007FFFFF00000003FFFF000000003FFF000000000FFF8000000007F
1472F8000000003FF8780000003FF8F80000001FF8F80000001FF8F80000000FF8F80000000F
1473F8FC0000000FF8FC0000000FF8FC0000000FF0FE0000000FF0FE0000001FF0FF0000001F
1474E0FF8000003FE0FFE000003FC0FFF800007F80FFFE0001FF80FFFFE007FF00FEFFFFFFFE
147500FC7FFFFFF800F81FFFFFF000F003FFFFC000E0003FFE00002D407ABE3A>I<3FFFFFFF
1476FFFFFFFC3FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFC
14773FFE003FFE003FFC7FF0003FFE000FFE7FC0003FFE0003FE7F80003FFE0001FE7F00003F
1478FE0000FE7F00003FFE00007E7E00003FFE00007E7E00003FFE00007E7C00003FFE00003E
14797C00003FFE00003E7C00003FFE00003E7C00003FFE00003EFC00003FFE00003FF800003F
1480FE00001FF800003FFE00001FF800003FFE00001FF800003FFE00001FF800003FFE00001F
14810000003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003F
1482FE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE000000
14830000003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003F
1484FE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE000000
14850000003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003F
1486FE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE000000
14870000003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003F
1488FE0000000000003FFE000000000FFFFFFFFFF800000FFFFFFFFFF800000FFFFFFFFFF800
1489000FFFFFFFFFF800000FFFFFFFFFF800403D7CBC49>I<00700000E000F80001F001F800
149003F003F00007E003E00007C007C0000F800F80001F001F00003E001F00003E003E00007C
1491003C000078003C000078007C0000F800780000F000780000F000F80001F000F00001E000
1492F00001E000F7E001EFC0FFF001FFE0FFF801FFF0FFFC01FFF8FFFE01FFFCFFFE01FFFCFF
1493FE01FFFC7FFE00FFFC7FFE00FFFC7FFE00FFFC3FFC007FF81FF8003FF00FF0001FE007E0
1494000FC0262073BE37>92 D<0007FFC00000003FFFF8000001FFFFFF000003FFFFFF800007
1495FE03FFC0000FF800FFE0000FFC003FF0001FFE003FF8001FFE001FFC001FFE001FFC001F
1496FE001FFC001FFE000FFE001FFE000FFE000FFC000FFE0007F8000FFE0001E0000FFE0000
149700000FFE000000003FFE000000FFFFFE00000FFFFFFE00007FFFFFFE0001FFFE0FFE0003
1498FFE00FFE000FFF800FFE001FFE000FFE003FFC000FFE003FF8000FFE007FF0000FFE00FF
1499F0000FFE00FFE0000FFE00FFE0000FFE00FFE0000FFE00FFE0000FFE00FFE0001FFE00FF
1500F0001FFE007FF0003FFE007FF8007BFF803FFC00FBFFFE1FFF07F3FFFE0FFFFFE1FFFE03
1501FFFF80FFFE00FFFF003FFE001FF80000002F2B7DA933>97 D<00FF0000000000FFFF0000
1502000000FFFF0000000000FFFF0000000000FFFF0000000000FFFF000000000007FF000000
1503000003FF000000000003FF000000000003FF000000000003FF000000000003FF00000000
15040003FF000000000003FF000000000003FF000000000003FF000000000003FF0000000000
150503FF000000000003FF000000000003FF000000000003FF000000000003FF000000000003
1506FF00FFE0000003FF07FFFC000003FF1FFFFF800003FF7FFFFFC00003FFFF81FFF00003FF
1507FC003FF80003FFF0001FFC0003FFE0000FFE0003FFC00007FE0003FF800007FF0003FF80
15080003FF8003FF800003FF8003FF800003FFC003FF800001FFC003FF800001FFC003FF8000
150901FFC003FF800001FFE003FF800001FFE003FF800001FFE003FF800001FFE003FF800001
1510FFE003FF800001FFE003FF800001FFE003FF800001FFE003FF800001FFE003FF800001FF
1511E003FF800001FFC003FF800001FFC003FF800003FFC003FF800003FF8003FF800003FF80
151203FF800003FF0003FF800007FF0003FFC00007FE0003FFE0000FFC0003FFF0001FF80003
1513FFFC007FF00003FCFF01FFE00003F87FFFFFC00003F01FFFFF000003E007FFFC00000000
151401FFC0000033407DBE3A>I<00007FF0000007FFFF00001FFFFFC0007FFFFFE000FFF01F
1515F001FF800FF803FF001FF807FE003FFC0FFE003FFC1FFC003FFC1FFC003FFC3FF8003FFC
15163FF8003FFC7FF8001FF87FF0000FF07FF00003C0FFF0000000FFF0000000FFF0000000FF
1517F0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0
15180000007FF00000007FF80000007FF80000007FF80000003FF800003E3FFC00003E1FFC00
1519007E0FFE00007C07FF0000FC07FF8001F803FFC003F000FFF81FE0007FFFFFC0001FFFFF
1520800007FFFE0000007FF000272B7DA92E>I<0000000007F80000000007FFF80000000007
1521FFF80000000007FFF80000000007FFF80000000007FFF800000000003FF800000000001F
1522F800000000001FF800000000001FF800000000001FF800000000001FF800000000001FF8
152300000000001FF800000000001FF800000000001FF800000000001FF800000000001FF800
1524000000001FF800000000001FF800000000001FF800000000001FF80000007FF01FF80000
152507FFFE1FF800001FFFFF9FF800007FFFFFDFF80000FFF01FFFF80001FFC003FFF80003FF
15260001FFF80007FE00007FF8000FFC00007FF8001FFC00003FF8001FF800003FF8003FF800
1527003FF8003FF800003FF8007FF800003FF8007FF000003FF8007FF000003FF800FFF00000
15283FF800FFF000003FF800FFF000003FF800FFF000003FF800FFF000003FF800FFF000003F
1529F800FFF000003FF800FFF000003FF800FFF000003FF800FFF000003FF8007FF000003FF8
1530007FF000003FF8007FF000003FF8007FF800003FF8003FF800003FF8003FF800003FF800
15311FFC00007FF8000FFC00007FF8000FFE0000FFF80007FF0003FFFC0003FF8007FFFFE001
1532FFF03FFFFFE0007FFFFFBFFFE0003FFFFF3FFFE00007FFFC3FFFE00000FFE03FE0003340
15337DBE3A>I<0000FFF000000007FFFE0000001FFFFF8000007FFFFFC00000FFE07FE00001
1534FF801FF00003FF000FF80007FE0007FC000FFC0003FE001FFC0003FE001FF80001FE003F
1535F80001FF003FF80001FF007FF00001FF007FF00000FF807FF00000FF80FFF00000FF80FF
1536F00000FF80FFFFFFFFFF80FFFFFFFFFF80FFFFFFFFFF80FFFFFFFFFF80FFF000000000FF
1537F000000000FFF000000000FFF000000000FFF0000000007FF0000000007FF0000000007F
1538F8000000003FF8000000003FF800000F801FFC00000F801FFC00001F800FFE00001F0007
1539FF00003F0003FF80007E0001FFE001FC0000FFF80FF800003FFFFFF000001FFFFFC00000
154003FFFF000000007FF80000292B7DA930>I<000007FE0000007FFF800001FFFFC00007FF
1541FFE0000FFE3FF0001FF03FF0003FE07FF8007FC07FF800FFC07FF800FF807FF800FF807F
1542F801FF003FF001FF001FE001FF000FC001FF00000001FF00000001FF00000001FF000000
154301FF00000001FF00000001FF00000001FF00000001FF00000001FF000000FFFFFFE000FF
1544FFFFE000FFFFFFE000FFFFFFE000FFFFFFE00001FF80000001FF80000001FF80000001FF
154580000001FF80000001FF80000001FF80000001FF80000001FF80000001FF80000001FF80
1546000001FF80000001FF80000001FF80000001FF80000001FF80000001FF80000001FF8000
15470001FF80000001FF80000001FF80000001FF80000001FF80000001FF80000001FF800000
154801FF80000001FF80000001FF80000001FF80000001FF8000007FFFFF80007FFFFF80007F
1549FFFF80007FFFFF80007FFFFF800025407DBF20>I<0003FF8007F0003FFFF83FF8007FFF
1550FCFFFC01FFFFFFFFFE03FF83FFF9FE07FC007FC3FE0FF8003FE1FE1FF8003FF1FC1FF000
15511FF0F81FF0001FF0003FF0001FF8003FF0001FF8003FF0001FF8003FF0001FF8003FF000
15521FF8003FF0001FF8003FF0001FF8001FF0001FF0001FF0001FF0001FF8003FF0000FF800
15533FE00007FC007FC00003FF83FF800003FFFFFF000007FFFFFC000007BFFFF800000F03FF
15548000000F00000000000F00000000001F80000000001F80000000001FC0000000001FF000
15550000000FFFFFFF00000FFFFFFFF0000FFFFFFFFC0007FFFFFFFF0007FFFFFFFF8003FFFF
1556FFFFC001FFFFFFFFE007FFFFFFFFE01FFFFFFFFFF03FE00003FFF07FC000003FF07F8000
1557001FF8FF8000000FF8FF00000007F8FF00000007F8FF00000007F8FF00000007F8FF0000
15580007F87F8000000FF07FC000001FF03FC000001FE03FF000007FE01FFC0001FFC007FF80
15590FFF0003FFFFFFFE0000FFFFFFF800003FFFFFE0000001FFFC00002F3D7DA834>I<00FF
15600000000000FFFF0000000000FFFF0000000000FFFF0000000000FFFF0000000000FFFF00
15610000000007FF000000000003FF000000000003FF000000000003FF000000000003FF0000
156200000003FF000000000003FF000000000003FF000000000003FF000000000003FF000000
1563000003FF000000000003FF000000000003FF000000000003FF000000000003FF00000000
15640003FF000000000003FF001FF8000003FF00FFFE000003FF03FFFF800003FF07FFFFC000
156503FF0FE0FFE00003FF1F007FE00003FF3C007FF00003FF78007FF00003FFF0003FF80003
1566FFE0003FF80003FFE0003FF80003FFC0003FF80003FFC0003FF80003FFC0003FF80003FF
156780003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80
1568003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF8000
15693FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003F
1570F80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF8
15710003FF80003FF800FFFFFE0FFFFFE0FFFFFE0FFFFFE0FFFFFE0FFFFFE0FFFFFE0FFFFFE0
1572FFFFFE0FFFFFE0333F7CBE3A>I<01F80003FC0007FE000FFF001FFF801FFF801FFF801F
1573FF801FFF801FFF800FFF0007FE0003FC0001F80000000000000000000000000000000000
1574000000000000000000000000FF00FFFF00FFFF00FFFF00FFFF00FFFF0007FF0003FF0003
1575FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003
1576FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003
1577FF0003FF0003FF0003FF00FFFFF8FFFFF8FFFFF8FFFFF8FFFFF815407CBF1D>I<00FF00
157800000000FFFF0000000000FFFF0000000000FFFF0000000000FFFF0000000000FFFF0000
157900000007FF000000000003FF000000000003FF000000000003FF000000000003FF000000
1580000003FF000000000003FF000000000003FF000000000003FF000000000003FF00000000
15810003FF000000000003FF000000000003FF000000000003FF000000000003FF0000000000
158203FF000000000003FF000000000003FF000FFFFE0003FF000FFFFE0003FF000FFFFE0003
1583FF000FFFFE0003FF000FFFFE0003FF0001FE000003FF0003FC000003FF0007F0000003FF
1584001FE0000003FF003FC0000003FF007F80000003FF00FF00000003FF03FC00000003FF07
1585F800000003FF0FF000000003FF1FF000000003FF7FF800000003FFFFFC00000003FFFFFC
158600000003FFFFFE00000003FFFFFF00000003FFE7FF80000003FFC3FFC0000003FF81FFC0
1587000003FF00FFE0000003FF00FFF0000003FF007FF8000003FF003FFC000003FF001FFC00
15880003FF000FFE000003FF000FFF000003FF0007FF800003FF0003FFC00003FF0001FFC000
158903FF0000FFE000FFFFFC07FFFFC0FFFFFC07FFFFC0FFFFFC07FFFFC0FFFFFC07FFFFC0FF
1590FFFC07FFFFC0323F7DBE37>107 D<00FF00FFFF00FFFF00FFFF00FFFF00FFFF0007FF00
159103FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00
159203FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00
159303FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00
159403FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00
159503FF0003FF0003FF00FFFFFCFFFFFCFFFFFCFFFFFCFFFFFC163F7CBE1D>I<00FF001FF8
15960000FFC00000FFFF00FFFF0007FFF80000FFFF03FFFFC01FFFFE0000FFFF07FFFFE03FFF
1597FF0000FFFF0FE0FFF07F07FF8000FFFF1F003FF0F801FF800007FF3E003FF9F001FFC000
159803FF78003FFBC001FFC00003FFF0001FFF8000FFE00003FFF0001FFF8000FFE00003FFE0
1599001FFF0000FFE00003FFC0001FFE0000FFE00003FFC0001FFE0000FFE00003FFC0001FFE
16000000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FF
1601E00003FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE00003
1602FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF8000
16031FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC00
160400FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE0
16050003FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF
160680001FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE000FFFFFE07FF
1607FFF03FFFFF80FFFFFE07FFFFF03FFFFF80FFFFFE07FFFFF03FFFFF80FFFFFE07FFFFF03F
1608FFFF80FFFFFE07FFFFF03FFFFF8051297CA858>I<00FF001FF80000FFFF00FFFE0000FF
1609FF03FFFF8000FFFF07FFFFC000FFFF0FE0FFE000FFFF1F007FE00007FF3C007FF00003FF
161078007FF00003FFF0003FF80003FFE0003FF80003FFE0003FF80003FFC0003FF80003FFC0
1611003FF80003FFC0003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF8000
16123FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003F
1613F80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF8
16140003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF800
161503FF80003FF80003FF80003FF80003FF80003FF800FFFFFE0FFFFFE0FFFFFE0FFFFFE0FF
1616FFFE0FFFFFE0FFFFFE0FFFFFE0FFFFFE0FFFFFE033297CA83A>I<00007FF000000003FF
1617FE0000001FFFFFC000007FFFFFF00000FFE03FF80001FF800FFC0003FE0003FE0007FC00
161801FF000FFC0001FF801FF80000FFC01FF80000FFC03FF80000FFE03FF000007FE07FF000
1619007FF07FF000007FF07FF000007FF07FF000007FF0FFF000007FF8FFF000007FF8FFF000
1620007FF8FFF000007FF8FFF000007FF8FFF000007FF8FFF000007FF8FFF000007FF8FFF000
1621007FF8FFF000007FF87FF000007FF07FF000007FF07FF000007FF07FF000007FF03FF800
162200FFE03FF80000FFE01FF80000FFC00FFC0001FF800FFC0001FF8007FE0003FF0003FF80
16230FFE0001FFE03FFC00007FFFFFF000001FFFFFC0000007FFFF000000007FF000002D2B7D
1624A934>I<00FF00FFE00000FFFF07FFFC0000FFFF1FFFFF8000FFFF7FFFFFC000FFFFFF81
1625FFF000FFFFFC007FF80003FFF0003FFC0003FFE0001FFE0003FFC0000FFE0003FF800007
1626FF0003FF800007FF8003FF800007FF8003FF800003FFC003FF800003FFC003FF800003FF
1627C003FF800001FFC003FF800001FFE003FF800001FFE003FF800001FFE003FF800001FFE0
162803FF800001FFE003FF800001FFE003FF800001FFE003FF800001FFE003FF800001FFE003
1629FF800001FFE003FF800003FFC003FF800003FFC003FF800003FFC003FF800003FF8003FF
1630800007FF8003FF800007FF0003FF80000FFF0003FFC0000FFE0003FFE0001FFC0003FFF0
1631003FF80003FFFC00FFF00003FFFF03FFE00003FFFFFFFFC00003FF9FFFFF000003FF87FF
1632FC000003FF81FFC0000003FF800000000003FF800000000003FF800000000003FF800000
1633000003FF800000000003FF800000000003FF800000000003FF800000000003FF80000000
16340003FF800000000003FF800000000003FF8000000000FFFFFE00000000FFFFFE00000000
1635FFFFFE00000000FFFFFE00000000FFFFFE00000000333B7DA83A>I<01FE01FE00FFFE07
1636FF80FFFE0FFFE0FFFE1FFFF0FFFE3F1FF0FFFE7C3FF807FEF83FF803FEF03FF803FFE03F
1637F803FFE03FF803FFC01FF003FFC00FE003FF8007C003FF80000003FF80000003FF800000
163803FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003
1639FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF
164000000003FF00000003FF00000003FF00000003FF00000003FF000000FFFFFF0000FFFFFF
16410000FFFFFF0000FFFFFF0000FFFFFF000025297DA82B>114 D<003FFC1E0001FFFFBE00
164207FFFFFE000FFFFFFE001FF00FFE003F8001FE007F0000FE007E00007E007E00007E00FE
164300003E00FE00003E00FF00003E00FF80003E00FFC0000000FFF8000000FFFFE000007FFF
1644FF00007FFFFFC0003FFFFFF0001FFFFFF8000FFFFFFC0007FFFFFE0003FFFFFF0000FFFF
1645FF80001FFFFF800000FFFF80000007FFC0000000FFC07800007FC0F800003FC0F800001F
1646C0FC00001FC0FC00001FC0FE00001FC0FE00001F80FF00003F80FF80003F00FFE000FF00
1647FFF803FE00FFFFFFFC00FFFFFFF000F87FFFC000E00FFE0000222B7DA929>I<0007C000
16480007C0000007C0000007C0000007C000000FC000000FC000000FC000000FC000001FC000
1649001FC000001FC000003FC000007FC000007FC00000FFC00001FFC00007FFC0001FFFFFFE
1650FFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFE01FFC00001FFC00001FFC00001FFC00001FFC000
165101FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
165201FFC00001FFC00001FFC00001FFC00001FFC00001FFC01F01FFC01F01FFC01F01FFC01F
165301FFC01F01FFC01F01FFC01F01FFC01F01FFC01F00FFE03E00FFE03E007FE07E007FF8FC
1654003FFFF8001FFFF00007FFE00000FF80203B7EB929>I<00FF80000FF800FFFF800FFFF8
165500FFFF800FFFF800FFFF800FFFF800FFFF800FFFF800FFFF800FFFF80007FF80007FF800
165603FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003
1657FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF
165880003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80
1659003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF8000
16603FF80003FF80003FF80003FF80003FF80003FF80007FF80003FF80007FF80003FF80007F
1661F80003FF8000FFF80001FF8001FFF80001FF8003FFFC0000FFC007DFFFE000FFF01F9FFF
1662E0007FFFFF1FFFE0003FFFFE1FFFE0000FFFF81FFFE00001FFE01FE000332A7CA83A>I<
1663FFFFFC003FFFC0FFFFFC003FFFC0FFFFFC003FFFC0FFFFFC003FFFC0FFFFFC003FFFC001
1664FFC00003E00001FFE00007E00001FFE00007E00000FFE00007C00000FFF0000FC000007F
1665F0000F8000007FF8001F8000003FF8001F0000003FFC003F0000001FFC003E0000001FFE
1666007E0000000FFE007C0000000FFF00FC0000000FFF00FC00000007FF00F800000007FF81
1667F800000003FF81F000000003FFC3F000000001FFC3E000000001FFE7E000000000FFE7C0
166800000000FFFFC0000000007FFF80000000007FFF80000000007FFF80000000003FFF0000
16690000003FFF00000000001FFE00000000001FFE00000000000FFC00000000000FFC000000
1670000007F8000000000007F8000000000003F0000000000003F000000032287EA737>I<FF
1671FFFC3FFFFC03FFFEFFFFFC3FFFFC03FFFEFFFFFC3FFFFC03FFFEFFFFFC3FFFFC03FFFEFF
1672FFFC3FFFFC03FFFE03FF8000FFC0000F8003FFC000FFC0001F8001FFC0007FC0001F0001
1673FFE000FFE0003F0000FFE000FFE0003E0000FFE000FFF0003E0000FFF001FFF0007E0000
16747FF001FFF0007C00007FF803FFF800FC00003FF803EFF800F800003FF803EFFC00F80000
16753FFC07EFFC01F800001FFC07C7FC01F000001FFE0FC7FE03F000000FFE0F83FE03E00000
16760FFE0F83FF03E000000FFF1F83FF07E0000007FF1F01FF07C0000007FFBF01FF8FC00000
167703FFBE00FF8F80000003FFBE00FFCF80000003FFFE00FFDF80000001FFFC007FDF000000
167801FFFC007FFF00000000FFF8003FFE00000000FFF8003FFE00000000FFF8003FFE000000
1679007FF0001FFC000000007FF0001FFC000000003FE0000FF8000000003FE0000FF8000000
1680003FE0000FF8000000001FC00007F0000000001FC00007F0000000000F800003E0000047
1681287EA74C>I<FFFFFC03FFFF80FFFFFC03FFFF80FFFFFC03FFFF80FFFFFC03FFFF80FFFF
1682FC03FFFF8000FFE0007F000000FFF000FE0000007FF800FC0000003FFC01F80000001FFE
168303F00000000FFE07F000000007FF0FE000000007FF9FC000000003FFFF8000000001FFFF
16840000000000FFFE00000000007FFC00000000007FFC00000000003FFC00000000001FFE00
1685000000000FFE00000000000FFF00000000001FFF80000000003FFFC0000000007FFFE000
1686000000FEFFF000000001FC7FF000000003F83FF800000003F03FFC00000007E01FFE0000
1687000FC00FFF0000001FC007FF0000003F8003FF8000007F0003FFC00000FE0001FFE000FF
1688FFC007FFFFC0FFFFC007FFFFC0FFFFC007FFFFC0FFFFC007FFFFC0FFFFC007FFFFC03228
16897EA737>I<FFFFFC003FFFC0FFFFFC003FFFC0FFFFFC003FFFC0FFFFFC003FFFC0FFFFFC
1690003FFFC001FFC00003E00001FFE00007E00001FFE00007E00000FFE00007C00000FFF000
16910FC000007FF0000F8000007FF8001F8000003FF8001F0000003FFC003F0000001FFC003E
16920000001FFE007E0000000FFE007C0000000FFF00FC0000000FFF00FC00000007FF00F800
1693000007FF81F800000003FF81F000000003FFC3F000000001FFC3E000000001FFE7E00000
16940000FFE7C000000000FFFFC0000000007FFF80000000007FFF80000000007FFF80000000
1695003FFF00000000003FFF00000000001FFE00000000001FFE00000000000FFC0000000000
16960FFC000000000007F8000000000007F8000000000003F0000000000003F0000000000003
1697F0000000000003E0000000000007E0000000000007C00000000E000FC00000003F800F80
16980000007FC01F80000000FFE01F00000000FFE03F00000000FFE03E00000000FFE07E0000
16990000FFE0FC00000000FFC1F8000000007FC3F0000000007E0FE0000000003FFFC0000000
1700001FFF80000000000FFE000000000003F80000000000323B7EA737>I
1701E /Fn 88 127 df<1C007F00FF80FF80FF80FF80FF80FF80FF80FF80FF80FF80FF80FF80
1702FF80FF80FF80FF80FF80FF80FF807F007F007F007F007F007F007F007F007F007F007F00
17037F007F007F007F007F007F007F003E00000000000000000000000000000000001C007F00
17047F00FF80FF80FF807F007F001C0009396DB830>33 D<100004007C001F00FE003F80FE00
17053F80FF007F80FF007F80FE003F80FE003F80FE003F80FE003F80FE003F80FE003F80FE00
17063F80FE003F80FE003F80FE003F80FE003F80FE003F80FE003F80FE003F80FE003F80FE00
17073F80FE003F80FE003F807E003F007C001F003C001E0010000400191C75B830>I<0007C0
170807C0000007C007C000000FE00FE000000FE00FE000000FE00FE000000FE00FE000000FE0
17090FE000000FE00FE000000FE00FE000000FE00FE000001FE01FE000001FE01FE000001FC0
17101FC000001FC01FC000001FC01FC0007FFFFFFFFF007FFFFFFFFF00FFFFFFFFFF80FFFFFF
1711FFFF80FFFFFFFFFF807FFFFFFFFF003FFFFFFFFE00007F807F8000007F807F8000007F00
17127F0000007F007F0000007F007F0000007F007F0000007F007F0000007F007F0000007F00
17137F0000007F007F0000007F007F000000FF00FF000000FF00FF00003FFFFFFFFE007FFFFF
1714FFFF00FFFFFFFFFF80FFFFFFFFFF80FFFFFFFFFF807FFFFFFFFF007FFFFFFFFF0001FC01
1715FC000001FC01FC000001FC01FC000003FC03FC000003FC03FC000003F803F8000003F803
1716F8000003F803F8000003F803F8000003F803F8000003F803F8000003F803F8000001F001
1717F0000001F001F0000029387DB730>I<000038000000007C00000000FC00000000FC0000
17180000FC00000000FC00000003FF0000001FFFE00000FFFFFC0001FFFFFE0007FFFFFF000F
1719FFFFFF801FFEFDFFC01FF0FC3FE03FC0FC1FE07F80FC0FF07F00FC07F07E00FC07F8FE00
1720FC03F8FC00FC03F8FC00FC07F8FC00FC07F8FC00FC07F8FE00FC03F0FE00FC03F07F00FC
172100007F80FC00007FC0FC00003FF0FC00001FFEFC00001FFFFC00000FFFFF000007FFFFE0
17220001FFFFF800007FFFFC00001FFFFE000003FFFF000000FFFF800000FDFFC00000FC7FE0
17230000FC1FE00000FC0FF00000FC07F01800FC03F87E00FC03F87E00FC01F8FF00FC01F8FF
172400FC01F8FF00FC01F8FE00FC01F8FE00FC01F8FF00FC03F07F00FC03F07F80FC07F07F80
1725FC0FE03FC0FC1FE03FF0FC7FC01FFEFFFF800FFFFFFF0007FFFFFE0003FFFFFC0000FFFF
1726F000003FFFC0000007FE00000000FC00000000FC00000000FC00000000FC00000000FC00
17270000007C0000000038000025477BBE30>I<03C00001E0000FF00003E0001FF80007F000
17283FFC0007F0003FFC000FF0007FFE000FF0007E7E001FE000FE7F001FE000FE7F001FC000
1729FC3F003FC000FC3F003FC000FC3F003F8000FC3F007F8000FC3F007F8000FC3F00FF0000
1730FE7F00FF0000FE7F00FE00007E7E01FE00007FFE01FE00003FFC01FC00003FFC03FC0000
17311FF803FC00000FF007F8000003C007F80000000007F0000000000FF0000000000FF00000
173200000FE0000000001FE0000000001FE0000000003FC0000000003FC0000000003F800000
173300007F80000000007F80000000007F0000000000FF0000000000FF0000000001FE000000
17340001FE0000000001FC0000000003FC0000000003FC0000000003F80000000007F8000000
17350007F8000000000FF001E000000FF007F800000FE00FFC00001FE01FFE00001FE01FFE00
1736001FC03FFF00003FC03FFF00003FC03F3F00007F807F3F80007F807E1F80007F007E1F80
173700FF007E1F8000FF007E1F8000FE007E1F8001FE007E1F8001FE007E1F8003FC007F3F80
173803FC003F3F0003F8003FFF0007F8003FFF0007F8001FFE0007F0001FFE0007F0000FFC00
173903E00007F80001E00001E00029477DBE30>I<0007E0000000001FF8000000003FFC0000
174000007FFC00000000FFFE00000000FFFF00000001FC7F00000001F83F00000001F83F8000
17410003F81F80000003F01F80000003F01F80000003F01F80000003F01F80000003F01F8000
17420003F01F80000003F03F80000003F03F00000003F07F0FFF0003F87E1FFF8001F8FE1FFF
17438001F9FC1FFF8001FBFC1FFF8001FBF80FFF0001FFF00FC00000FFE00FC00000FFE01FC0
17440000FFC01F8000007F801F800000FF003F800001FF003F000003FF007F000007FF807E00
1745000FFF807E00000FFF80FE00001FDFC0FC00003F8FE0FC00003F8FE1FC00007F07F1F800
1746007F03F3F80000FE03FBF00000FE01FFF00000FE01FFE00000FE00FFE00000FE00FFC006
174700FE007FC00F00FE003F801F80FE003FC01F80FF007FC01F807F00FFE01F807F01FFF83F
1748807F87FFFC3F003FFFFBFFFF001FFFF1FFFE001FFFE0FFFE000FFFC03FFC0003FF001FF8
17490001FC0007E000293A7DB830>I<07C00FF01FF81FF81FFC1FFC1FFE0FFE07FE007E007E
1750007E007E007E00FE00FC00FC01FC01F803F807F00FF01FE07FE0FFC0FF80FF007C003800
17510F1D70B730>I<00001E00007F0000FF0001FF0003FE0007FC000FF0001FE0003FC0007F
17528000FF0001FE0001FC0003FC0003F80007F0000FF0000FE0000FE0001FC0001FC0003FC0
1753003F80003F80007F80007F00007F00007F00007F0000FE0000FE0000FE0000FE0000FE00
175400FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00007F00007F00007F00007F00
1755007F80003F80003F80003FC0001FC0001FC0000FE0000FE0000FF00007F00003F80003FC
17560001FC0001FE0000FF00007F80003FC0001FE0000FF00007FC0003FE0001FF0000FF0000
17577F00001E184771BE30>I<780000FE0000FF0000FF80007FC0003FE0000FF00007F80003
1758FC0001FE0000FF00007F80003F80003FC0001FC0000FE0000FF00007F00007F00003F800
175903F80003FC0001FC0001FC0001FE0000FE0000FE0000FE0000FE00007F00007F00007F00
1760007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0000FE0000FE00
176100FE0000FE0001FE0001FC0001FC0003FC0003F80003F80007F00007F0000FF0000FE000
17621FC0003FC0003F80007F8000FF0001FE0003FC0007F8000FF0003FE0007FC000FF8000FF
17630000FE0000780000184778BE30>I<0000E000000001F000000003F800000003F8000000
176403F800000003F800000003F800000003F800003803F803807E03F80FC0FF83F83FE0FFC3
1765F87FE0FFF3F9FFE07FFBFBFFC03FFFFFFF800FFFFFFE0003FFFFF80001FFFFF000007FFF
1766C000001FFF0000007FFFC00001FFFFF00003FFFFF8000FFFFFFE003FFFFFFF807FFBFBFF
1767C0FFF3F9FFE0FFC3F87FE0FF83F83FE07E03F80FC03803F803800003F800000003F80000
17680003F800000003F800000003F800000003F800000001F000000000E0000023277AAE30>
1769I<00003E00000000003E00000000007F00000000007F00000000007F00000000007F0000
17700000007F00000000007F00000000007F00000000007F00000000007F00000000007F0000
17710000007F00000000007F00000000007F00000000007F00000000007F0000007FFFFFFFFF
1772007FFFFFFFFF00FFFFFFFFFF80FFFFFFFFFF80FFFFFFFFFF807FFFFFFFFF007FFFFFFFFF
17730000007F00000000007F00000000007F00000000007F00000000007F00000000007F0000
17740000007F00000000007F00000000007F00000000007F00000000007F00000000007F0000
17750000007F00000000007F00000000007F00000000003E00000000003E00000029297DAF30
1776>I<03E00FF01FF81FFC3FFE3FFE3FFF3FFF1FFF1FFF0FFF03FF007F007F007E00FE01FC
177703FC07F83FF07FF0FFE07F807F003C001019708B30>I<7FFFFFFFF07FFFFFFFF0FFFFFF
1778FFF8FFFFFFFFF8FFFFFFFFF87FFFFFFFF07FFFFFFFF025077B9E30>I<0F003FC07FE07F
1779E0FFF0FFF0FFF0FFF07FE07FE03FC00F000C0C6E8B30>I<00000000F000000001F00000
17800003F800000003F800000007F800000007F80000000FF00000000FF00000001FE0000000
17811FE00000003FC00000003FC00000007F800000007F80000000FF00000000FF00000001FE
178200000001FE00000001FC00000003FC00000003FC00000007F800000007F80000000FF000
178300000FF00000001FE00000001FE00000003FC00000003FC00000007F800000007F800000
178400FF00000000FF00000001FE00000001FE00000001FC00000003FC00000003FC00000007
1785F800000007F80000000FF00000000FF00000001FE00000001FE00000003FC00000003FC0
17860000007F800000007F80000000FF00000000FF00000001FE00000001FE00000001FC0000
17870003FC00000003FC00000007F800000007F80000000FF00000000FF00000001FE0000000
17881FE00000003FC00000003FC00000007F800000007F80000000FF00000000FF00000000FE
178900000000FE000000007C000000007C0000000025477BBE30>I<0000FE00000007FFC000
1790000FFFE000003FFFF800007FFFFC0000FFFFFE0001FF83FF0003FE00FF8003FC007F8007
1791F8003FC00FF0001FE00FE0000FE01FE0000FF01FC00007F01FC00007F03F800003F83F80
17920003F83F000001F87F000001FC7F000001FC7F000001FC7F000001FCFE000000FEFE0000
179300FEFE000000FEFE000000FEFE000000FEFE000000FEFE000000FEFE000000FEFE000000
1794FEFE000000FEFE000000FEFE000000FEFE000000FEFF000001FE7F000001FC7F000001FC
17957F000001FC7F800003FC3F800003F83F800003F83FC00007F81FC00007F01FC00007F01F
1796E0000FF00FF0001FE00FF0001FE007F8003FC003FC007F8003FE00FF8001FF83FF0000FF
1797FFFE00007FFFFC00003FFFF800000FFFE0000007FFC0000000FE0000273A7CB830>I<00
179803C0000007E0000007E000000FE000000FE000001FE000001FE000003FE000007FE00000
1799FFE00003FFE0003FFFE000FFFFE000FFFFE000FFEFE000FF8FE0007E0FE000000FE00000
18000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00000
18010FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00000
18020FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00000
18030FE000000FE000000FE000000FE000000FE000000FE0003FFFFFF87FFFFFFCFFFFFFFEFF
1804FFFFFE7FFFFFFC3FFFFFF81F3977B830>I<0007FC0000003FFFC00000FFFFF00003FFFF
1805F80007FFFFFE000FFFFFFF001FF80FFF803FE001FFC03FC0007FC07F80003FE07F00001F
1806E07F00000FF0FF000007F0FE000007F0FF000007F8FF000003F8FF000003F8FF000003F8
18077E000003F818000003F800000003F800000003F800000007F800000007F00000000FF000
180800000FE00000001FE00000001FC00000003FC00000007F80000000FF80000001FF000000
180901FE00000007FC0000000FF80000001FF00000003FE00000007FC0000000FF80000001FF
181000000003FE00000007FC0000000FF00000003FE00000007FC0000000FF80000001FF0000
18110003FE0001F007FC0003F80FF80003F81FE00003F83FFFFFFFF8FFFFFFFFF8FFFFFFFFF8
1812FFFFFFFFF87FFFFFFFF83FFFFFFFF025397BB830>I<0003FF0000003FFFE00000FFFFF8
18130001FFFFFE0003FFFFFF0007FFFFFF800FFE01FFC00FF0007FC01FE0001FE01FE0000FE0
18141FE0000FF01FE00007F01FE00007F00FC00007F007800007F000000007F00000000FF000
181500000FE00000000FE00000001FE00000003FC00000007FC0000000FF80000007FF000007
1816FFFE00000FFFFC00000FFFF800000FFFFC00000FFFFF000007FFFF80000001FFC0000000
18173FE00000001FF000000007F800000003F800000003FC00000001FC00000001FE00000000
1818FE00000000FE18000000FE7E000000FEFF000000FEFF000000FEFF000001FEFF000001FC
1819FE000003FCFF000003F87F800007F87FC0001FF03FF0003FF01FFE01FFE00FFFFFFFC007
1820FFFFFF8003FFFFFE0000FFFFFC00003FFFF0000003FF8000273A7CB830>I<000003FC00
182100000007FE000000000FFE000000001FFE000000001FFE000000003FFE000000007FFE00
18220000007F7E00000000FE7E00000000FE7E00000001FC7E00000003F87E00000003F87E00
1823000007F07E00000007F07E0000000FE07E0000001FC07E0000001FC07E0000003F807E00
182400003F807E0000007F007E000000FE007E000000FE007E000001FC007E000003F8007E00
18250003F8007E000007F0007E000007F0007E00000FE0007E00001FC0007E00001FC0007E00
1826003F80007E00003F80007E00007F00007E0000FE00007E0000FFFFFFFFFF00FFFFFFFFFF
182780FFFFFFFFFF80FFFFFFFFFF80FFFFFFFFFF807FFFFFFFFF000000007E00000000007E00
1828000000007E00000000007E00000000007E00000000007E00000000007E00000000007E00
1829000000007E00000000007E000000007FFFFE000000FFFFFF000000FFFFFF000000FFFFFF
1830000000FFFFFF0000007FFFFE0029397DB830>I<0FFFFFFF801FFFFFFFC03FFFFFFFC03F
1831FFFFFFC03FFFFFFFC03FFFFFFF803F800000003F800000003F800000003F800000003F80
18320000003F800000003F800000003F800000003F800000003F800000003F800000003F8000
183300003F800000003F800000003F83FF00003F9FFFC0003FFFFFF0003FFFFFFC003FFFFFFE
1834003FFFFFFF003FFE03FF803FF0007FC03FE0003FC03F80001FE01F00000FE00E00000FF0
183500000007F000000007F000000007F800000003F800000003F800000003F818000003F87E
1836000003F87E000003F8FF000003F8FF000007F8FF000007F0FE00000FF0FF00000FE07F00
1837001FE07F80003FC07FC0007FC03FE001FF801FFC0FFF000FFFFFFE0007FFFFFC0003FFFF
1838F80001FFFFE000007FFF8000000FFC000025397BB730>I<7C00000000FFFFFFFFFCFFFF
1839FFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFCFE00000FF8FE00000FF0FE0000
18401FE07C00003FC00000007F80000000FF00000000FF00000001FE00000003FC00000003F8
184100000007F800000007F00000000FF00000000FE00000001FC00000001FC00000003F8000
184200003F800000007F000000007F00000000FF00000000FE00000001FE00000001FC000000
184301FC00000003FC00000003F800000003F800000007F800000007F000000007F000000007
1844F000000007F00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0
18450000001FE00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC000
184600001FC00000001FC00000001FC00000000F8000000007000000273A7CB830>55
1847D<0F003FC07FE07FE0FFF0FFF0FFF0FFF07FE07FE03FC00F000000000000000000000000
1848000000000000000000000000000000000000000F003FC07FE07FE0FFF0FFF0FFF0FFF07F
1849E07FE03FC00F000C276EA630>58 D<03C00FF01FF81FF83FFC3FFC3FFC3FFC1FF81FF80F
1850F003C000000000000000000000000000000000000000000000000000000000000003C00F
1851F01FF01FF83FF83FFC3FFC3FFC1FFC1FFC0FFC03FC00FC01FC01F803F803F007F01FE03F
1852E07FC0FF807F007E0038000E3470A630>I<00000000F000000003F000000007F8000000
18531FF80000007FF8000000FFF0000003FFF0000007FFC000001FFF8000003FFE000000FFF8
1854000001FFF0000007FFC000000FFF8000003FFE0000007FFC000001FFF0000003FFE00000
18550FFF8000001FFF0000007FFC0000007FF8000000FFE0000000FFC0000000FFE00000007F
1856F80000007FFC0000001FFF0000000FFF80000003FFE0000001FFF00000007FFC0000003F
1857FE0000000FFF80000007FFC0000001FFF0000000FFF80000003FFE0000001FFF80000007
1858FFC0000003FFF0000000FFF00000007FF80000001FF800000007F800000003F000000000
1859F0252F7BB230>I<7FFFFFFFFF007FFFFFFFFF00FFFFFFFFFF80FFFFFFFFFF80FFFFFFFF
1860FF807FFFFFFFFF003FFFFFFFFE0000000000000000000000000000000000000000000000
186100000000000000000000000000000000000000003FFFFFFFFE007FFFFFFFFF00FFFFFFFF
1862FF80FFFFFFFFFF80FFFFFFFFFF807FFFFFFFFF007FFFFFFFFF0029157DA530>I<780000
186300007E00000000FF00000000FFC0000000FFE00000007FF80000007FFE0000001FFF0000
1864000FFFC0000003FFE0000001FFF80000007FFC0000001FFF0000000FFF80000003FFE000
18650001FFF00000007FFC0000003FFE0000000FFF80000007FFC0000001FFF0000000FFF000
186600003FF80000001FF80000003FF8000000FFF0000001FFF0000007FFC000000FFF800000
18673FFE0000007FFC000001FFF0000003FFE000000FFF8000001FFF0000007FFC000001FFF8
1868000003FFE000000FFFC000001FFF0000007FFE0000007FF8000000FFE0000000FFC00000
186900FF000000007E000000007800000000252F7BB230>I<001FFE000000FFFFE00003FFFF
1870F8000FFFFFFE001FFFFFFF003FFFFFFF807FF803FFC07FC0007FC0FF00001FC0FF00001F
1871E0FF00000FE0FF00000FE0FF00000FE07E00000FE07E00001FE01800007FC0000000FFC0
1872000003FF80000007FF0000000FFE0000001FF80000003FF00000007FC0000000FF800000
187300FF00000001FE00000001FE00000003FC00000003F800000003F800000007F800000007
1874F000000007F000000007F000000007F000000007F000000007F000000007F000000007F0
187500000003E000000000000000000000000000000000000000000000000000000000000000
187600000000000000000000000001C000000007F000000007F00000000FF80000000FF80000
1877000FF800000007F000000007F000000001C0000023397AB830>I<00001FE0000000FFF8
1878000003FFFE00000FFFFF00001FFFFF80003FFFFFC0007FF03FE000FF800FE001FF0007F0
187903FC0003F007F801FBF807F007FFF80FE01FFFF80FE03FFFFC1FC03FFFFC1F807FFFFC3F
188080FF0FFC3F00FE07FC3F01FC03FE7F01F801FE7E03F801FE7E03F000FE7E03F000FEFE07
1881F000FEFC07E0007EFC07E0007EFC07E0007EFC07E0007EFC07E0007EFC07E0007EFC07E0
1882007EFC07E0007EFC07E0007EFC07E0007EFE07F000FE7E03F000FC7E03F000FC7E03F801
1883FC7F01F801F83F01FC03F83F00FE07F03F80FF0FF01F807FFFE01FC03FFFC00FE03FFFC0
18840FE01FFF8007F007FE0007F801F80003FC00007C01FF0000FE00FF8003FE007FF01FFE00
18853FFFFFFC001FFFFFF8000FFFFFE00003FFFFC00000FFFE0000001FF000273A7CB830>I<
188600007F0000000000FF8000000000FF8000000001FFC000000001FFC000000001FFC00000
18870001FFC000000003FFE000000003F7E000000003F7E000000003F7E000000003F7E00000
18880007F7F000000007E3F000000007E3F000000007E3F00000000FE3F80000000FE3F80000
1889000FE3F80000000FC1F80000000FC1F80000001FC1FC0000001FC1FC0000001FC1FC0000
1890001FC1FC0000003F80FE0000003F80FE0000003F80FE0000003F80FE0000003F80FE0000
1891007F007F0000007F007F0000007F007F0000007F007F000000FF007F800000FE003F8000
189200FFFFFF800000FFFFFF800000FFFFFF800001FFFFFFC00001FFFFFFC00001FFFFFFC000
189301FC001FC00003FC001FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE000
189407F8000FF00007F00007F00007F00007F0007FFF007FFF00FFFF80FFFF80FFFF80FFFF80
1895FFFF80FFFF80FFFF80FFFF807FFF007FFF0029397DB830>I<7FFFFFF00000FFFFFFFE00
189600FFFFFFFF8000FFFFFFFFC000FFFFFFFFE0007FFFFFFFF00003F8001FF80003F80007F8
18970003F80003FC0003F80001FC0003F80001FC0003F80000FE0003F80000FE0003F80000FE
18980003F80000FE0003F80000FE0003F80000FE0003F80001FE0003F80001FC0003F80001FC
18990003F80003F80003F80007F80003F8001FF00003F8007FE00003FFFFFFC00003FFFFFF80
19000003FFFFFE000003FFFFFF800003FFFFFFE00003FFFFFFF00003F8000FF80003F80003FC
19010003F80001FE0003F80000FE0003F800007F0003F800007F0003F800007F0003F800003F
19028003F800003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800007F
19038003F800007F0003F800007F0003F80000FF0003F80001FE0003F80003FE0003F8001FFC
1904007FFFFFFFFC00FFFFFFFFF800FFFFFFFFF000FFFFFFFFC000FFFFFFFF80007FFFFFFC00
19050029387EB730>I<00007F803C0003FFF03E0007FFFC7E001FFFFE7E003FFFFFFE007FFF
1906FFFE00FFE07FFE01FF801FFE03FE000FFE07FC0007FE07F80007FE0FF00003FE0FF00003
1907FE1FE00001FE1FC00001FE3FC00001FE3F800000FE3F800000FE7F800000FE7F000000FE
19087F0000007C7F00000000FF00000000FE00000000FE00000000FE00000000FE00000000FE
190900000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00
1910000000FF000000007F000000007F000000007F0000007C7F800000FE3F800000FE3F8000
191100FE3FC00000FE1FC00000FE1FE00001FE0FF00001FC0FF00001FC07F80003F807FC0007
1912F803FE000FF001FF801FF000FFE07FE0007FFFFFC0003FFFFF80001FFFFF000007FFFC00
19130003FFF00000007FC000273A7CB830>I<3FFFFFE000007FFFFFFC0000FFFFFFFE0000FF
1914FFFFFF80007FFFFFFFC0003FFFFFFFE00003F8007FF00003F8001FF80003F8000FF80003
1915F80007FC0003F80003FE0003F80001FE0003F80000FF0003F80000FF0003F800007F8003
1916F800007F8003F800003F8003F800003FC003F800001FC003F800001FC003F800001FC003
1917F800001FC003F800000FE003F800000FE003F800000FE003F800000FE003F800000FE003
1918F800000FE003F800000FE003F800000FE003F800000FE003F800000FE003F800000FE003
1919F800000FE003F800001FE003F800001FC003F800001FC003F800001FC003F800003FC003
1920F800003F8003F800003F8003F800007F8003F800007F0003F80000FF0003F80001FE0003
1921F80003FE0003F80007FC0003F8000FFC0003F8001FF80003F8007FF0003FFFFFFFE0007F
1922FFFFFFC000FFFFFFFF8000FFFFFFFF00007FFFFFFC00003FFFFFE000002B387FB730>I<
19237FFFFFFFFF00FFFFFFFFFF80FFFFFFFFFF80FFFFFFFFFF80FFFFFFFFFF807FFFFFFFFF80
192403F800003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800003F80
192503F800003F8003F800003F8003F800001F0003F80000000003F80000000003F800000000
192603F80000000003F8007C000003F800FE000003F800FE000003F800FE000003F800FE0000
192703FFFFFE000003FFFFFE000003FFFFFE000003FFFFFE000003FFFFFE000003FFFFFE0000
192803F800FE000003F800FE000003F800FE000003F800FE000003F8007C000003F800000000
192903F80000000003F80000000003F80000000003F80000000003F8000007C003F800000FE0
193003F800000FE003F800000FE003F800000FE003F800000FE003F800000FE003F800000FE0
193103F800000FE003F800000FE07FFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFE0
1932FFFFFFFFFFE07FFFFFFFFFC02B387EB730>I<3FFFFFFFFF807FFFFFFFFFC0FFFFFFFFFF
1933C0FFFFFFFFFFC07FFFFFFFFFC03FFFFFFFFFC001FC00001FC001FC00001FC001FC00001F
1934C001FC00001FC001FC00001FC001FC00001FC001FC00001FC001FC00001FC001FC00000F
19358001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC003E00
19360001FC007F000001FC007F000001FC007F000001FC007F000001FFFFFF000001FFFFFF00
19370001FFFFFF000001FFFFFF000001FFFFFF000001FFFFFF000001FC007F000001FC007F00
19380001FC007F000001FC007F000001FC003E000001FC0000000001FC0000000001FC000000
19390001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
19400001FC0000000001FC0000000001FC0000000001FC0000000001FC000000003FFFF80000
1941007FFFFC000000FFFFFC000000FFFFFC0000007FFFFC0000003FFFF80000002A387EB730
1942>I<0000FF00F0000003FFC0F800000FFFF1F800003FFFFDF800007FFFFFF80000FFFFFF
1943F80001FFC1FFF80001FF007FF80003FE003FF80007FC001FF80007F8000FF8000FF0000F
1944F8000FE00007F8001FE00007F8001FC00007F8003FC00007F8003F800003F8003F800003
1945F8007F800003F8007F000003F8007F000001F0007F0000000000FF0000000000FE000000
19460000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE000000
19470000FE0000000000FE0000FFFF00FE0001FFFF80FE0003FFFF80FE0003FFFF80FF0001FF
1948FF807F0000FFFF007F000003F8007F000003F8007F800003F8003F800007F8003F800007
1949F8003FC00007F8001FC00007F8001FE0000FF8000FE0000FF8000FF0000FF80007F8001F
1950F80007F8001FF80003FE003FF80001FF007FF80001FFC1FFF80000FFFFFFF800007FFFFF
1951F800003FFFFBF800000FFFF3F8000003FFC1F0000000FF000000293A7DB830>I<3FFF80
19520FFFE07FFFC01FFFF0FFFFE03FFFF8FFFFE03FFFF87FFFC01FFFF03FFF800FFFE003F800
195300FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F800
195400FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F800
195500FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003FFFF
1956FFFE0003FFFFFFFE0003FFFFFFFE0003FFFFFFFE0003FFFFFFFE0003FFFFFFFE0003F800
195700FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F800
195800FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F800
195900FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F80000FE0003F800
196000FE0003F80000FE003FFF800FFFE07FFFC01FFFF0FFFFE03FFFF8FFFFE03FFFF87FFFC0
19611FFFF03FFF800FFFE02D387FB730>I<7FFFFFFF00FFFFFFFF80FFFFFFFF80FFFFFFFF80
1962FFFFFFFF807FFFFFFF000007F000000007F000000007F000000007F000000007F0000000
196307F000000007F000000007F000000007F000000007F000000007F000000007F000000007
1964F000000007F000000007F000000007F000000007F000000007F000000007F000000007F0
196500000007F000000007F000000007F000000007F000000007F000000007F000000007F000
1966000007F000000007F000000007F000000007F000000007F000000007F000000007F00000
19670007F000000007F000000007F000000007F000000007F000000007F000000007F0000000
196807F000000007F000000007F000007FFFFFFF00FFFFFFFF80FFFFFFFF80FFFFFFFF80FFFF
1969FFFF807FFFFFFF00213879B730>I<0001FFFFF00003FFFFF80007FFFFF80007FFFFF800
197003FFFFF80001FFFFF0000000FE00000000FE00000000FE00000000FE00000000FE000000
197100FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000
1972FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE
197300000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00
1974000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000
19750000FE00000000FE00000000FE003C0000FE007E0000FE00FF0000FE00FF0000FE00FF00
197601FC00FF0003FC00FF8007FC007FF01FF8003FFFFFF0003FFFFFE0001FFFFFC00007FFFF
1977800001FFFE0000003FF0000025397AB730>I<3FFFF80000007FFFFC000000FFFFFE0000
197800FFFFFE0000007FFFFC0000003FFFF800000001FC0000000001FC0000000001FC000000
19790001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
19800001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
19810001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
19820001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
19830001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
19840001FC0000000001FC00000F8001FC00001FC001FC00001FC001FC00001FC001FC00001F
1985C001FC00001FC001FC00001FC001FC00001FC001FC00001FC001FC00001FC03FFFFFFFFF
1986C07FFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC07FFFFFFFFFC03FFFFFFFFF802A387EB730
1987>76 D<3FF80000FFE07FFC0001FFF0FFFE0003FFF8FFFE0003FFF87FFE0003FFF03FFF00
198807FFE007FF0007FF0007EF0007BF0007EF800FBF0007EF800FBF0007EF800FBF0007E7C0
19891F3F0007E7C01F3F0007E7C01F3F0007E7C01F3F0007E7E03F3F0007E3E03E3F0007E3E0
19903E3F0007E3F07E3F0007E3F07E3F0007E1F07C3F0007E1F07C3F0007E1F8FC3F0007E1F8
1991FC3F0007E0F8F83F0007E0F8F83F0007E0FDF83F0007E07DF03F0007E07DF03F0007E07D
1992F03F0007E07FF03F0007E03FE03F0007E03FE03F0007E03FE03F0007E01FC03F0007E01F
1993C03F0007E007003F0007E000003F0007E000003F0007E000003F0007E000003F0007E000
1994003F0007E000003F0007E000003F0007E000003F0007E000003F0007E000003F0007E000
1995003F0007E000003F0007E000003F003FFC0001FFE07FFE0003FFF0FFFF0007FFF8FFFF00
199607FFF87FFE0003FFF03FFC0001FFE02D387FB730>I<3FFC001FFF807FFE003FFFC0FFFF
1997007FFFE0FFFF007FFFE07FFF803FFFC03FFF801FFF8003FF8001F80003F7C001F80003F7
1998C001F80003F7C001F80003F3E001F80003F3E001F80003F3E001F80003F3F001F80003F1
1999F001F80003F1F001F80003F1F801F80003F1F801F80003F0F801F80003F0FC01F80003F0
2000FC01F80003F07C01F80003F07E01F80003F07E01F80003F03E01F80003F03F01F80003F0
20013F01F80003F01F01F80003F01F01F80003F01F81F80003F01F81F80003F00F81F80003F0
20020FC1F80003F00FC1F80003F007C1F80003F007E1F80003F007E1F80003F003E1F80003F0
200303F1F80003F003F1F80003F001F1F80003F001F1F80003F001F9F80003F000F9F80003F0
200400F9F80003F000F9F80003F0007DF80003F0007DF80003F0007DF80003F0003FF8003FFF
2005003FF8007FFF803FF800FFFFC01FF800FFFFC01FF8007FFF800FF8003FFF0007F0002B38
20067EB730>I<003FFFE00001FFFFFC0007FFFFFF000FFFFFFF801FFFFFFFC03FFFFFFFE03F
2007F800FFE03FE0003FE07F80000FF07F80000FF07F000007F07F000007F07F000007F07F00
20080007F0FF000007F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE0000
200903F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003
2010F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8
2011FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FF
2012000007F8FF000007F87F000007F07F000007F07F000007F07F80000FF07F80000FF07FC0
2013001FF03FE0003FE03FF800FFE03FFFFFFFE01FFFFFFFC00FFFFFFF8007FFFFFF0001FFFF
2014FC00003FFFE000253A7BB830>I<7FFFFFF00000FFFFFFFE0000FFFFFFFF8000FFFFFFFF
2015E000FFFFFFFFF0007FFFFFFFF80003F8003FF80003F8000FFC0003F80003FE0003F80001
2016FE0003F80000FF0003F80000FF0003F800007F0003F800007F8003F800003F8003F80000
20173F8003F800003F8003F800003F8003F800003F8003F800003F8003F800007F8003F80000
20187F0003F80000FF0003F80000FF0003F80001FE0003F80003FE0003F8000FFC0003F8003F
2019F80003FFFFFFF80003FFFFFFF00003FFFFFFE00003FFFFFF800003FFFFFE000003FFFFF0
2020000003F80000000003F80000000003F80000000003F80000000003F80000000003F80000
2021000003F80000000003F80000000003F80000000003F80000000003F80000000003F80000
2022000003F80000000003F80000000003F80000000003F8000000007FFFC0000000FFFFE000
20230000FFFFE0000000FFFFE0000000FFFFE00000007FFFC000000029387EB730>I<3FFFFF
20248000007FFFFFF00000FFFFFFFC0000FFFFFFFF00007FFFFFFF80003FFFFFFFC00003F801
2025FFE00003F8003FF00003F8001FF00003F8000FF80003F80007F80003F80003F80003F800
202603FC0003F80001FC0003F80001FC0003F80001FC0003F80001FC0003F80001FC0003F800
202703FC0003F80003F80003F80007F80003F8000FF80003F8001FF00003F8003FF00003F801
2028FFE00003FFFFFFC00003FFFFFF800003FFFFFF000003FFFFFE000003FFFFFF000003FFFF
2029FF800003F800FFC00003F8003FE00003F8001FE00003F8000FE00003F8000FF00003F800
203007F00003F80007F00003F80007F00003F80007F00003F80007F00003F80007F00003F800
203107F00003F80007F00003F80007F0F803F80007F1FC03F80007F1FC03F80007F1FC03F800
203207F1FC03F80007F1FC3FFF8003FBFC7FFFC003FFF8FFFFE001FFF8FFFFE001FFF07FFFC0
203300FFE03FFF80007FC0000000001F002E397FB730>82 D<000FF803C0007FFF03E001FFFF
2034C7E003FFFFF7E007FFFFFFE00FFFFFFFE01FF80FFFE03FE001FFE03FC000FFE07F80007F
2035E07F00003FE0FF00003FE0FE00001FE0FE00001FE0FE00000FE0FE00000FE0FE00000FE0
2036FF00000FE0FF000007C07F000000007F800000007FC00000003FF00000001FFE0000001F
2037FFF000000FFFFF000007FFFFE00001FFFFF80000FFFFFC00001FFFFF000003FFFF800000
20383FFFC0000001FFC00000007FE00000001FE00000000FF00000000FF000000007F8000000
203907F87C000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FF000007
2040F8FF000007F0FF800007F0FFC0000FE0FFE0001FE0FFF8003FC0FFFF00FFC0FFFFFFFF80
2041FFFFFFFF00FDFFFFFE00FC7FFFF800F81FFFF0007801FF8000253A7BB830>I<3FFFFFFF
2042FFC07FFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFE0FE003F80
20430FE0FE003F800FE0FE003F800FE0FE003F800FE0FE003F800FE0FE003F800FE0FE003F80
20440FE0FE003F800FE07C003F8007C000003F80000000003F80000000003F80000000003F80
2045000000003F80000000003F80000000003F80000000003F80000000003F80000000003F80
2046000000003F80000000003F80000000003F80000000003F80000000003F80000000003F80
2047000000003F80000000003F80000000003F80000000003F80000000003F80000000003F80
2048000000003F80000000003F80000000003F80000000003F80000000003F80000000003F80
2049000000003F80000000003F80000000003F80000000003F80000000003F80000000003F80
2050000000003F800000001FFFFF0000003FFFFF8000003FFFFF8000003FFFFF8000003FFFFF
20518000001FFFFF00002B387EB730>I<7FFFC007FFFCFFFFE00FFFFEFFFFE00FFFFEFFFFE0
20520FFFFEFFFFE00FFFFE7FFFC007FFFC03F800003F8003F800003F8003F800003F8003F800
2053003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800
2054003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800
2055003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800
2056003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800
2057003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800003F8003F800
2058003F8003F800003F8003FC00007F8001FC00007F0001FC00007F0001FC00007F0000FE00
205900FE0000FF0001FE00007F0001FC00007F8003FC00003FE00FF800001FF83FF000000FFF
2060FFE0000007FFFFC0000003FFFF80000001FFFF000000007FFC000000001FF000002F3980
2061B730>I<7FFE000FFFC0FFFF001FFFE0FFFF803FFFE0FFFF803FFFE0FFFF001FFFE07FFE
2062000FFFC007F00001FC0007F00001FC0007F80003FC0003F80003F80003F80003F80003F8
20630003F80003F80003F80001FC0007F00001FC0007F00001FC0007F00001FC0007F00000FE
2064000FE00000FE000FE00000FE000FE00000FE000FE00000FF001FE000007F001FC000007F
2065001FC000007F001FC000007F803FC000003F803F8000003F803F8000003F803F8000003F
2066803F8000001FC07F0000001FC07F0000001FC07F0000001FC07F0000000FE0FE0000000F
2067E0FE0000000FE0FE0000000FE0FE00000007E0FC00000007F1FC00000007F1FC00000007
2068F1FC00000003F1F800000003F1F800000003F1F800000003FBF800000001FBF000000001
2069FBF000000001FBF000000001FFF000000001FFF000000000FFE000000000FFE000000000
2070FFE000000000FFE0000000007FC0000000003F8000002B397EB730>I<3FFC0001FFE07F
2071FE0003FFF0FFFE0003FFF8FFFE0003FFF87FFE0003FFF03FFC0001FFE01FC000001FC00F
2072C000001F800FC000001F800FC000001F800FC000001F800FC000001F800FC000001F800F
2073C000001F800FE000003F8007E000003F0007E000003F0007E000003F0007E000003F0007
2074E000003F0007E000003F0007E000003F0003E00F803E0003F01FC07E0003F03FE07E0003
2075F03FE07E0003F03FE07E0003F07FF07E0003F07FF07E0003F07DF07E0001F07DF07C0001
2076F07DF07C0001F8FDF8FC0001F8FDF8FC0001F8FDF8FC0001F8F8F8FC0001F8F8F8FC0001
2077F8F8F8FC0000F8F8F8F80000F9F8FCF80000F9F8FCF80000F9F07CF80000F9F07CF80000
2078FDF07DF80000FDF07DF800007DF07DF000007DE03DF000007DE03DF000007DE03DF00000
20797FE03FF000007FE03FF000007FC01FF000007FC01FF000003FC01FE000003FC01FE00000
20803F800FE000001F0007C0002D397FB730>I<3FFF01FFF8007FFF83FFFC007FFFC7FFFE00
20817FFFC7FFFE007FFF83FFFC003FFF01FFF80001FC007F800001FE007F000000FE00FF0000
208200FF00FE0000007F01FE0000007F81FC0000003F83FC0000003FC3FC0000001FC3F80000
2083001FE7F80000000FE7F00000000FFFF000000007FFE000000007FFE000000003FFC00000
20840003FFC000000001FF8000000001FF8000000000FF0000000000FF0000000000FF000000
20850000FF0000000001FF8000000001FF8000000003FFC000000003FFC000000003FFE00000
20860007FFE000000007FFF00000000FE7F00000000FE7F80000001FC3F80000001FC3FC0000
2087003F81FC0000003F81FE0000007F00FE0000007F00FF000000FF007F000000FE007F8000
208801FE003F800001FC003FC00003FC001FC00003F8001FE00007F8000FE0007FFE007FFF00
2089FFFF00FFFF80FFFF80FFFF80FFFF80FFFF80FFFF00FFFF807FFE007FFF0029387DB730>
2090I<1FFFFFFFFC3FFFFFFFFE7FFFFFFFFE7FFFFFFFFE7FFFFFFFFE7FFFFFFFFE7F000003FC
20917F000007F87F000007F07F00000FF07F00001FE07F00001FC07F00003FC07F00007F803E
209200007F00000000FF00000001FE00000001FC00000003FC00000007F800000007F0000000
20930FF00000001FE00000001FC00000003FC00000007F800000007F00000000FF00000001FE
209400000001FC00000003FC00000007F800000007F00000000FF00000001FE00000001FC000
209500003FC00000007F800000007F00000000FF00000001FE00007C01FC0000FE03FC0000FE
209607F80000FE07F00000FE0FF00000FE1FE00000FE1FC00000FE3FC00000FE7F800000FE7F
2097FFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFE7FFFFFFFFC27387CB730>90
2098D<7FFFFF00FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF00FE000000FE000000FE0000
209900FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000
210000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000
210100FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000
210200FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000
210300FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000
210400FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000
210500FE000000FE000000FFFFFF00FFFFFF80FFFFFF80FFFFFF80FFFFFF807FFFFF0019476D
2106BE30>I<7C000000007C00000000FE00000000FE00000000FF00000000FF000000007F80
21070000007F800000003FC00000003FC00000001FE00000001FE00000000FF00000000FF000
2108000007F800000007F800000003FC00000003FC00000001FC00000001FE00000001FE0000
21090000FF00000000FF000000007F800000007F800000003FC00000003FC00000001FE00000
2110001FE00000000FF00000000FF000000007F800000007F800000003FC00000003FC000000
211101FC00000001FE00000001FE00000000FF00000000FF000000007F800000007F80000000
21123FC00000003FC00000001FE00000001FE00000000FF00000000FF000000007F800000007
2113F800000003FC00000003FC00000001FC00000001FE00000001FE00000000FF00000000FF
2114000000007F800000007F800000003FC00000003FC00000001FE00000001FE00000000FF0
21150000000FF000000007F800000007F800000003F800000003F800000001F000000000F025
2116477BBE30>I<7FFFFF00FFFFFF80FFFFFF80FFFFFF80FFFFFF807FFFFF8000003F800000
21173F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800000
21183F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800000
21193F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800000
21203F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800000
21213F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800000
21223F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800000
21233F8000003F8000003F8000003F807FFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF807FFF
2124FF0019477DBE30>I<00070000001FC000007FF00000FFF80003FFFE000FFFFF803FFFFF
2125E07FFDFFF0FFF07FF8FFC01FF8FF800FF8FE0003F87C0001F0100000401D0E77B730>I<
21267FFFFFFFF07FFFFFFFF0FFFFFFFFF8FFFFFFFFF8FFFFFFFFF87FFFFFFFF07FFFFFFFF025
2127077B7D30>I<0038007C01FE03FE07FE0FFC0FF01FE01FC03F803F007F007E007E00FE00
2128FC00FC00FC00FC00FC00FFC0FFE0FFF07FF07FF03FF03FF01FE007C00F1D70BE30>I<00
21293FFC00000001FFFF80000003FFFFE0000007FFFFF000000FFFFFF800001FFFFFFC00001F
2130F00FFE00001FE001FF00001FE000FF00001FE0007F80000FC0003F80000780003FC00000
213100001FC0000000001FC0000000001FC0000000001FC0000000FFFFC000000FFFFFC00000
21327FFFFFC00001FFFFFFC00007FFFFFFC0000FFFFFFFC0001FFFC01FC0003FFC001FC0007F
2133E0001FC0007F80001FC000FF00001FC000FE00001FC000FE00001FC000FE00001FC000FE
213400001FC000FF00003FC000FF00003FC0007F80007FC0007FC001FFC0003FF80FFFFFC01F
2135FFFFFFFFE01FFFFFFFFFE007FFFFF7FFE003FFFFC3FFE000FFFF00FFC0003FF00000002B
21362A7CA830>I<3FFC000000007FFE00000000FFFE00000000FFFE000000007FFE00000000
21373FFE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE00000000
213800FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE03FE0000
213900FE1FFF800000FE7FFFE00000FEFFFFF00000FFFFFFFC0000FFFFFFFE0000FFFE07FE00
214000FFF001FF0000FFE000FF8000FFC0007F8000FF80003FC000FF00001FC000FE00001FE0
214100FE00000FE000FE00000FE000FE00000FF000FE000007F000FE000007F000FE000007F0
214200FE000007F000FE000007F000FE000007F000FE000007F000FE000007F000FE00000FF0
214300FE00000FF000FE00000FE000FF00000FE000FF00001FE000FF80003FC000FF80003FC0
214400FFC0007F8000FFE000FF8000FFF003FF0000FFFC0FFE0000FFFFFFFC0000FFFFFFF800
214500FEFFFFF000007E7FFFC000003C1FFF0000000003FC00002C3980B730>I<0000FFE000
21460007FFFC00001FFFFE00007FFFFF0000FFFFFF8001FFFFFFC003FF807FC007FC003FC00F
2147F8003FC01FF0003FC01FE0001F803FC0000F003F800000007F800000007F000000007F00
2148000000FF00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000
21490000FE00000000FE00000000FF000000007F000000007F000000007F800000003F800007
2150C03FC0000FE01FE0000FE01FF0001FE00FF8001FC007FE003FC007FFC0FF8003FFFFFF80
215100FFFFFF00007FFFFE00001FFFF8000007FFF0000001FF8000232A7AA830>I<000001FF
2152E000000003FFF000000007FFF000000007FFF000000003FFF000000001FFF00000000007
2153F00000000007F00000000007F00000000007F00000000007F00000000007F00000000007
2154F00000000007F00000000007F00000000007F0000003FE07F000001FFF87F000003FFFE7
2155F00000FFFFFFF00001FFFFFFF00003FFFFFFF00007FF03FFF0000FFC00FFF0001FF0003F
2156F0001FE0001FF0003FC0001FF0003FC0000FF0007F800007F0007F000007F0007F000007
2157F000FF000007F000FF000007F000FE000007F000FE000007F000FE000007F000FE000007
2158F000FE000007F000FE000007F000FE000007F000FE000007F000FF000007F0007F00000F
2159F0007F00000FF0007F80000FF0003F80001FF0003FC0003FF0001FE0003FF0001FF0007F
2160F0000FF801FFF00007FE07FFFFC003FFFFFFFFE001FFFFFFFFF000FFFFF7FFF0007FFFC7
2161FFE0001FFF03FFC00007FC0000002C397DB730>I<0001FF00000007FFE000001FFFF800
2162007FFFFC0000FFFFFE0001FFFFFF0003FF81FF8007FC007FC00FF8003FC01FE0001FE01F
2163E0000FE03FC0000FF03F800007F07F800007F07F000007F07F000003F8FF000003F8FE00
21640003F8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF0FE0000
21650000FF000000007F000000007F000000007F800000003F800001F03FC00003F81FE00003
2166F80FF00003F80FF80007F807FE001FF003FFC07FE001FFFFFFE000FFFFFFC0003FFFFF80
2167001FFFFE000007FFF8000000FFC000252A7CA830>I<000000FF80000007FFE000001FFF
2168F000003FFFF000007FFFF80000FFFFF80001FF87F80003FE07F80003FC03F00007F800C0
21690007F000000007F000000007F000000007F000000007F000000007F000000007F0000000
217007F000003FFFFFFFC07FFFFFFFE0FFFFFFFFE0FFFFFFFFE0FFFFFFFFE07FFFFFFFC00007
2171F000000007F000000007F000000007F000000007F000000007F000000007F000000007F0
217200000007F000000007F000000007F000000007F000000007F000000007F000000007F000
2173000007F000000007F000000007F000000007F000000007F000000007F000000007F00000
21740007F000000007F000000007F000000007F000000007F000003FFFFFFE007FFFFFFF00FF
2175FFFFFF80FFFFFFFF807FFFFFFF003FFFFFFE0025397DB830>I<0003FC00FF00001FFF87
2176FFC0003FFFDFFFC000FFFFFFFFE001FFFFFFFFE003FFFFFFFFE007FE07FF8FE007F801FE
217707C00FF000FF00000FF000FF00000FE0007F00001FE0007F80001FC0003F80001FC0003F
217880001FC0003F80001FC0003F80001FC0003F80001FE0007F80000FE0007F00000FF000FF
217900000FF000FF000007F801FE000007FE07FE000007FFFFFC000007FFFFF800000FFFFFF0
218000000FFFFFC000000FDFFF8000000FC3FC0000000FC0000000000FC0000000000FC00000
218100000FE0000000000FF00000000007FFFFF0000007FFFFFF000003FFFFFFC00007FFFFFF
2182F0000FFFFFFFF8001FFFFFFFFC003FE0001FFE003F800001FE007F0000007F007E000000
21833F00FE0000003F80FC0000001F80FC0000001F80FC0000001F80FC0000001F80FC000000
21841F80FE0000003F807F0000007F007F800000FF003FC00001FE003FF00007FE001FFF007F
2185FC000FFFFFFFF80007FFFFFFF00001FFFFFFC000007FFFFF0000001FFFFC00000001FFC0
218600002B3E7DA730>I<3FFC000000007FFE00000000FFFE00000000FFFE000000007FFE00
21870000003FFE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE00
218800000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE01
2189FE000000FE0FFF800000FE3FFFE00000FEFFFFF00000FFFFFFF80000FFFFFFF80000FFFE
219007FC0000FFF803FC0000FFE001FE0000FFC001FE0000FF8000FE0000FF8000FE0000FF00
219100FE0000FF0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
219200FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
219300FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
219400FE0000FE0000FE0000FE0000FE0000FE0000FE003FFFF81FFFF87FFFFC3FFFFCFFFFFE
21953FFFFEFFFFFE3FFFFE7FFFFC3FFFFC3FFFF81FFFF82F3880B730>I<0000E000000003F8
219600000003F800000007FC00000007FC00000007FC00000003F800000003F800000000E000
2197000000000000000000000000000000000000000000000000000000000000000000000000
2198000000000000000000001FFFF800003FFFFC00007FFFFC00007FFFFC00003FFFFC00001F
2199FFFC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001
2200FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC
220100000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00
2202000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00003FFFFFFFC0
22037FFFFFFFE0FFFFFFFFE0FFFFFFFFE07FFFFFFFE03FFFFFFFC023397AB830>I<000001C0
2204000007F0000007F000000FF800000FF800000FF8000007F0000007F0000001C000000000
2205000000000000000000000000000000000000000000000000000000000000000000FFFFF0
220601FFFFF801FFFFF801FFFFF801FFFFF800FFFFF8000003F8000003F8000003F8000003F8
2207000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8
2208000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8
2209000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8
2210000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8
2211000003F8000007F0000007F03C0007F07E000FE0FF001FE0FF003FC0FF007FC0FFFFFF80
22127FFFFF007FFFFE003FFFFC000FFFF00003FFC0001D4E7CB830>I<7FF800000000FFFC00
2213000000FFFC00000000FFFC00000000FFFC000000007FFC0000000000FC0000000000FC00
221400000000FC0000000000FC0000000000FC0000000000FC0000000000FC0000000000FC00
221500000000FC0000000000FC0000000000FC0000000000FC03FFFF8000FC07FFFFC000FC07
2216FFFFE000FC07FFFFE000FC07FFFFC000FC03FFFF8000FC001FE00000FC003FC00000FC00
22177F800000FC00FF000000FC01FE000000FC03FC000000FC0FF8000000FC1FF0000000FC3F
2218E0000000FC7FC0000000FCFF80000000FDFFC0000000FFFFE0000000FFFFF0000000FFF7
2219F0000000FFE3F8000000FFC1FC000000FF81FE000000FF00FF000000FE007F000000FC00
22203F800000FC001FC00000FC001FE00000FC000FF00000FC0007F00000FC0003F80000FC00
222101FC007FFFF81FFFE0FFFFFC3FFFF0FFFFFC3FFFF8FFFFFC3FFFF8FFFFFC3FFFF07FFFF8
22221FFFE02D387FB730>I<7FFFF80000FFFFFC0000FFFFFC0000FFFFFC0000FFFFFC00007F
2223FFFC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001
2224FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC
222500000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00
2226000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC0000
22270001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC000000
222801FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001
2229FC00000001FC00007FFFFFFFF0FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF87FFFFF
2230FFF025387BB730>I<0000FC007E00007FC3FF01FF8000FFEFFF87FFC000FFFFFFCFFFE0
223100FFFFFFDFFFE000FFFFFFFFFFF0007FFF0FFF87F00007FE07FF03F80007FC07FE03F800
223207F803FC01F80007F803FC01F80007F003F801F80007F003F801F80007F003F801F80007
2233E003F001F80007E003F001F80007E003F001F80007E003F001F80007E003F001F80007E0
223403F001F80007E003F001F80007E003F001F80007E003F001F80007E003F001F80007E003
2235F001F80007E003F001F80007E003F001F80007E003F001F80007E003F001F80007E003F0
223601F80007E003F001F80007E003F001F80007E003F001F80007E003F001F8007FFE0FFF07
2237FF80FFFF1FFF8FFFC0FFFF1FFF8FFFC0FFFF1FFF8FFFC0FFFF1FFF8FFFC07FFE0FFF07FF
223880322881A730>I<000001FE00003FFC0FFF80007FFE3FFFE000FFFEFFFFF000FFFFFFFF
2239F8007FFFFFFFF8003FFFFE07FC0000FFF803FC0000FFE001FE0000FFC001FE0000FF8000
2240FE0000FF8000FE0000FF0000FE0000FF0000FE0000FE0000FE0000FE0000FE0000FE0000
2241FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000
2242FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000
2243FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE003FFFF81F
2244FFF87FFFFC3FFFFCFFFFFE3FFFFEFFFFFE3FFFFE7FFFFC3FFFFC3FFFF81FFFF82F2880A7
224530>I<0001FF0000000FFFE000003FFFF800007FFFFC0000FFFFFE0003FFFFFF8003FF01
2246FF8007FC007FC00FF8003FE01FE0000FF01FE0000FF03FC00007F83F800003F87F800003
2247FC7F000001FC7F000001FC7F000001FCFE000000FEFE000000FEFE000000FEFE000000FE
2248FE000000FEFE000000FEFE000000FEFE000000FEFF000001FE7F000001FC7F000001FC7F
2249800003FC3F800003F83FC00007F83FE0000FF81FF0001FF00FF8003FE00FFC007FE007FF
225001FFC003FFFFFF8001FFFFFF00007FFFFC00003FFFF800000FFFE0000001FF0000272A7C
2251A830>I<000003FE00003FFC1FFF80007FFE7FFFE000FFFEFFFFF000FFFFFFFFFC007FFF
2252FFFFFE003FFFFE07FE0000FFF001FF0000FFE000FF8000FFC0007F8000FF80003FC000FF
225300001FC000FE00001FE000FE00000FE000FE00000FE000FE00000FF000FE000007F000FE
2254000007F000FE000007F000FE000007F000FE000007F000FE000007F000FE000007F000FE
2255000007F000FE00000FF000FE00000FF000FE00000FE000FF00000FE000FF00001FE000FF
225680003FC000FF80003FC000FFC0007F8000FFE000FF8000FFF003FF0000FFFC0FFE0000FF
2257FFFFFC0000FFFFFFF80000FEFFFFF00000FE7FFFC00000FE1FFF000000FE03FC000000FE
22580000000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE
22590000000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE
2260000000003FFFF80000007FFFFC000000FFFFFE000000FFFFFE0000007FFFFC0000003FFF
2261F80000002C3C80A730>I<0001FF00F800000FFFC1FC00003FFFF1FC00007FFFFDFC0001
2262FFFFFFFC0003FFFFFFFC0007FF81FFFC000FFC007FFC000FF8001FFC001FF0000FFC001F
2263E00007FC003FC00007FC003F800003FC007F800003FC007F000003FC007F000001FC00FF
2264000001FC00FE000001FC00FE000001FC00FE000001FC00FE000001FC00FE000001FC00FE
2265000001FC00FE000001FC00FF000001FC007F000001FC007F000003FC007F800003FC007F
2266800003FC003FC00007FC003FC0000FFC001FE0001FFC000FF0003FFC000FFC007FFC0007
2267FF01FFFC0003FFFFFFFC0001FFFFFDFC0000FFFFF9FC00003FFFF1FC00000FFFC1FC0000
226803FE01FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000
2269000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000
2270000001FC0000000001FC00000000FFFFF8000001FFFFFC000001FFFFFC000001FFFFFC00
22710001FFFFFC000000FFFFF82E3C7DA730>I<00000007F8003FFF803FFF007FFFC0FFFF80
2272FFFFC3FFFF80FFFFCFFFFFC07FFFDFFFFFC03FFFFFFC3FC0001FFFE03FC0001FFF801F80
2273001FFF000F00001FFE000000001FFC000000001FF8000000001FF0000000001FF0000000
2274001FE0000000001FE0000000001FE0000000001FE0000000001FC0000000001FC0000000
2275001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000
2276001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000
2277001FC00000003FFFFFFC00007FFFFFFE0000FFFFFFFF0000FFFFFFFF00007FFFFFFE0000
22783FFFFFFC00002A287EA730>I<001FFC1E0001FFFF9F0007FFFFFF000FFFFFFF001FFFFF
2279FF003FFFFFFF007FF007FF007F8001FF00FE0000FF00FC00007F00FC00007F00FC00007F
228000FC00007F00FE00003E007F000000007FE00000003FFF0000001FFFFC00000FFFFF8000
228107FFFFE00001FFFFF800007FFFFC000003FFFE0000000FFF00000000FF807C00007F80FE
228200001FC0FE00001FC0FE00000FC0FF00000FC0FF00000FC0FF80000FC0FF80001FC0FFC0
2283003F80FFE0007F80FFFC03FF00FFFFFFFF00FFFFFFFE00FFFFFFFC00FCFFFFF000F83FFF
2284C000780FFE0000222A79A830>I<0007800000000FC00000001FC00000001FC00000001F
2285C00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC000003FFFFF
2286FFE07FFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF07FFFFFFFE0001FC00000001FC000
228700001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000
2288001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC0000000
22891FC00000001FC00000001FC000F8001FC001FC001FC001FC001FC001FC001FC001FC001F
2290C001FC001FE003FC000FE007F8000FF007F8000FFC1FF00007FFFFE00003FFFFC00003FF
2291FF800001FFFF0000007FFC0000001FF00026337EB130>I<3FFC003FFC007FFE007FFE00
2292FFFE00FFFE00FFFE00FFFE007FFE007FFE003FFE003FFE0000FE0000FE0000FE0000FE00
229300FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
229400FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
229500FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
229600FE0000FE0000FE0000FE0000FE0001FE0000FE0001FE0000FE0003FE0000FE0007FE00
229700FF000FFE00007FC07FFFF8007FFFFFFFFC003FFFFFFFFE001FFFFFFFFE000FFFFEFFFC
22980007FFF87FF80000FFC000002F2880A630>I<3FFFC07FFF807FFFE0FFFFC0FFFFE0FFFF
2299E0FFFFE0FFFFE07FFFE0FFFFC03FFFC07FFF8001F80003F00001F80003F00001FC0007F0
23000000FC0007E00000FC0007E00000FE000FE000007E000FC000007E000FC000007F001FC0
230100003F001F8000003F001F8000003F803F8000001F803F0000001F803F0000001FC07F00
230200000FC07E0000000FC07E0000000FE0FE00000007E0FC00000007E0FC00000007F1FC00
2303000003F1F800000003F1F800000003F1F800000001FBF000000001FBF000000001FBF000
2304000001FFF000000000FFE000000000FFE000000000FFE0000000007FC0000000003F8000
2305002B277EA630>I<3FFFC01FFFE07FFFE03FFFF0FFFFE03FFFF8FFFFE03FFFF87FFFE03F
2306FFF03FFFC01FFFE007E000003F0007E000003F0007F000007F0003F000007E0003F00000
23077E0003F000007E0003F000007E0003F000007E0003F80000FE0001F80000FC0001F80F80
2308FC0001F81FC0FC0001F83FE0FC0001F83FE0FC0001F83FE0FC0000FC7FF1F80000FC7FF1
2309F80000FC7DF1F80000FC7DF1F80000FCFDF9F800007CFDF9F000007CF8F9F000007CF8F9
2310F000007CF8F9F000007EF8FBF000007EF8FBF000003FF07FE000003FF07FE000003FF07F
2311E000003FE03FE000003FE03FE000001FE03FC000000F800F80002D277FA630>I<3FFF81
2312FFFC007FFFC3FFFE00FFFFC3FFFF00FFFFC3FFFF007FFFC3FFFE003FFF81FFFC0000FE00
23137F0000007F007F0000007F80FE0000003F81FC0000001FC3F80000000FE3F80000000FE7
2314F000000007FFE000000003FFC000000001FFC000000000FF8000000000FF00000000007E
231500000000007F0000000000FF0000000001FF8000000001FFC000000003F7E000000007E7
2316E00000000FE3F00000000FC1F80000001F81FC0000003F80FE0000007F007E0000007E00
23177F000000FE003F800001FC001FC0007FFF80FFFF00FFFFC1FFFF80FFFFE3FFFF80FFFFE3
2318FFFF80FFFFC1FFFF807FFF80FFFF0029277DA630>I<3FFFC07FFF807FFFE0FFFFC0FFFF
2319E0FFFFE0FFFFE0FFFFE07FFFE0FFFFC03FFFC07FFF8001FC0003F00001FC0003F00000FC
23200007F00000FE0007E000007E0007E000007E000FE000007F000FC000003F000FC000003F
2321001FC000001F801F8000001F801F8000001FC01F8000000FC03F0000000FC03F0000000F
2322E03F00000007E07E00000007E07E00000003F07E00000003F07C00000003F0FC00000001
2323F8FC00000001F8F800000001F8F800000000F9F800000000FDF0000000007DF000000000
23247FF0000000007FF0000000003FE0000000003FE0000000003FE0000000001FC000000000
23251FC0000000001FC0000000001F80000000001F80000000003F80000000003F0000000000
23263F00000000007F00000000007E00000000007E0000000F00FE0000001F80FC0000003FC1
2327FC0000003FC3F80000003F87F80000003F8FF00000003FFFE00000001FFFC00000001FFF
2328800000000FFF0000000007FE0000000001F0000000002B3C7EA630>I<1FFFFFFFFC3FFF
2329FFFFFE7FFFFFFFFE7FFFFFFFFE7FFFFFFFFE7FFFFFFFFC7F00000FF87F00001FF07F0000
23303FE07F00007FC07F0000FF803E0001FF00000003FE00000007FC0000000FF80000001FF0
23310000003FE00000007FC0000000FF80000001FF00000003FE00000007FC0000000FF80000
2332001FF00000003FE00000007FC0000000FF80003E01FF00007F03FE00007F07FC00007F0F
2333F800007F1FF000007F3FE000007F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
2334FFFFFF7FFFFFFFFE28277DA630>I<0000003FF0000003FFF800000FFFF800001FFFF800
2335007FFFF800007FFFF00000FFF0000000FF00000001FE00000001FC00000001FC00000001
2336FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC
233700000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00
2338000001FC00000001FC00000001FC00000003FC00000007F80000003FF800003FFFF00000
2339FFFFE00000FFFFC00000FFFF000000FFFFC00000FFFFE000003FFFF00000003FF8000000
234007F800000003FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001
2341FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC
234200000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00
2343000001FE00000000FF00000000FFF00000007FFFF000007FFFF800001FFFF800000FFFF8
2344000003FFF80000003FF025477BBE30>I<7C7CFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
2345FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
2346FEFEFEFEFEFEFEFEFEFEFEFEFEFE7C7C07476CBE30>I<7FE0000000FFFE000000FFFF80
23470000FFFFC00000FFFFF000007FFFF00000007FF800000007F800000003FC00000001FC00
2348000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC0000
23490001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC000000
235001FC00000001FC00000001FC00000001FC00000001FC00000001FE00000000FF00000000
2351FFE00000007FFFE000003FFFF800001FFFF8000007FFF800001FFFF800003FFFF800007F
2352FFE00000FFE0000000FF00000001FE00000001FC00000001FC00000001FC00000001FC00
2353000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC0000
23540001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC000000
235501FC00000001FC00000003FC00000007F80000007FF800007FFFF00000FFFFF00000FFFF
2356C00000FFFF800000FFFE0000007FE000000025477BBE30>I<007C003801FF007C03FF80
2357FE07FFC1FE0FFFC3FE1FFFEFFC7FEFFFF0FF87FFE0FF07FFC0FE03FF807C01FF0038007C
2358001F0C78B730>I E /Fo 39 122 df<0000000007FF80000000003FFFE000000000FE00
2359F800000001F0003E00000007E0000E0000000FC0001F0000000F80007F0000001F8000FF
23600000003F0000FF0000003F0000FF0000003F0000FE0000007E0000FE0000007E00007800
236100007E000000000000FE000000000000FC000000000000FC000000000000FC0000000000
236201FC000000000001FC000000000001F8000000000001F8000000000001F8000000000001
2363F8000000000003F80000000003FFFFFFFFF00003FFFFFFFFF00003FFFFFFFFE0000003F0
23640007E0000007F0000FE0000007E0000FC0000007E0000FC0000007E0000FC0000007E000
23651FC000000FE0001F8000000FC0001F8000000FC0001F8000000FC0003F8000000FC0003F
23660000001FC0003F0000001F80003F0000001F80007F0000001F80007E0000001F80007E00
236700003F80007E0000003F0000FE0000003F0000FC0000003F0000FC0000003F0000FC0000
2368007F0001FC0000007E0001F81C00007E0001F81C00007E0001F81C00007E0003F81C0000
2369FE0003F03C0000FC0003F0380000FC0003F0380000FC0003F0780000FC0003F0700001FC
23700003F0700001F80001F0F00001F80001F0E00001F80000F1C00001F800007F800003F000
2371001F000003F0000000000003F0000000000003F0000000000003E0000000000007E00000
237200000007E0000000001E07C0000000007F07C0000000007F0FC000000000FF0F80000000
237300FF0F8000000000FF1F0000000000FE1F0000000000F81E0000000000703C0000000000
2374787800000000001FF0000000000007C00000000000385383BF33>12
2375D<0000000007FC00007FF800000000003FFF8003FFFF0000000000FC03C00FE007C00000
23760003F001E03F0001F000000007E001F07C0000700000000FC007F0F80000F80000000F80
23770FF1F80003F80000001F800FF3F00007F80000001F800FF3F00007F80000003F000FF7E0
23780007F80000003F000FE7E00007F00000003F00038FC00007F00000007E00000FC00003C0
23790000007E00000FC00000000000007E00000FC00000000000007E00001FC0000000000000
2380FE00001F80000000000000FC00001F80000000000000FC00001F80000000000000FC0000
23813F80000000000000FC00003F80000000000001FC00003F00000000000001F800003F0000
23820000000001F800003F00000000000001F800003F000000000001FFFFFFFFFFFFFFFF8000
238303FFFFFFFFFFFFFFFF800003FFFFFFFFFFFFFFFF00000003F000007E00003F00000003F0
238400007E00007F00000003F00000FE00007E00000007F00000FC00007E00000007E00000FC
238500007E00000007E00000FC0000FE00000007E00000FC0000FC00000007E00001FC0000FC
23860000000FE00001F80000FC0000000FC00001F80001FC0000000FC00001F80001F8000000
23870FC00001F80001F80000000FC00003F80001F80000001FC00003F00003F80000001F8000
238803F00003F00000001F800003F00003F00000001F800003F00003F00000001F800007F000
238907F00000003F800007E00007E00000003F800007E00007E00000003F000007E00007E000
239000003F000007E0000FE00000003F00000FE0000FC0E000003F00000FC0000FC0E000007F
239100000FC0000FC0E000007E00000FC0001FC0E000007E00000FC0001F81E000007E00000F
2392C0001F81C000007E00001FC0001F81C00000FE00001F80001F83C00000FC00001F80001F
239383800000FC00001F80001F83800000FC00003F80000F87800000FC00003F00000F870000
239401F800003F0000078E000001F800003F000003FC000001F800003F000000F8000001F800
2395007E00000000000003F000007E00000000000003F000007E00000000000003F000007C00
2396000000000003F00000FC00000000000003E00000FC00000000001E07E07800F800000000
2397007F07E1FC01F800000000007F07C1FC01F80000000000FF0FC3FC01F00000000000FF0F
239883FC03E00000000000FF0F83FC07E00000000000FE1F03F807C00000000000F81E03E00F
2399800000000000703C01C01E000000000000787800F07C0000000000001FF0007FF0000000
240000000007C0001FC0000000000000555383BF50>14 D<00003C0000FE0001FF0003FF0003
2401FF0003FF0003FF0003FE0007FE0007FE0007FC0007FC0007FC0007F8000FF8000FF8000F
2402F0000FF0000FF0000FE0001FE0001FE0001FC0001FC0001FC0001F80003F80003F80003F
240300003F00003F00003E00007E00007E00007C00007C00007C0000780000F80000F80000F0
24040000F00000F00000E00001E00001E00000C0000000000000000000000000000000000000
2405000000000000000F00003FC0007FC0007FC000FFC000FFC000FFC000FF80007F00003C00
240600184177C01C>33 D<01E000F007F803FC0FF807FC0FFC07FE1FFC0FFE1FFC0FFE1FFC0F
2407FE1FFC0FFE0FFC07FE03D801EC0018000C0018000C0038001C0030001800700038006000
24083000E0007000C0006001C000E0038001C003000180070003800E0007001C000E0038001C
24090070003800E0007000C00060001F1C70BE2F>I<0F003FC07FC07FC0FFC0FFC0FFC0FF80
24107F003C000A0A77891C>46 D<00000003000000070000000F0000001F0000001E0000003E
24110000007E000001FE000003FC000007FC00001FFC0001FFFC000FFBF8001FC3F8000E07F8
2412000007F8000007F0000007F000000FF000000FF000000FE000000FE000001FE000001FE0
241300001FC000001FC000003FC000003FC000003F8000003F8000007F8000007F8000007F00
241400007F000000FF000000FF000000FE000000FE000001FE000001FE000001FC000001FC00
24150003FC000003FC000003F8000003F8000007F8000007F8000007F0000007F000000FF000
2416000FF000000FE000000FE000001FE000001FE000001FC000007FE000FFFFFFF0FFFFFFF0
2417FFFFFFE0203D77BC2E>49 D<0000000FE00000007FF8000001F01C000007C00E00001F80
24180F00003E000700007C001F0000F8007F0001F000FF0003F000FF0007E000FF000FC000FE
2419001FC000FE003F800078003F000000007F00000000FE00000000FE00000001FC00000001
2420FC00000003FC00000003F800000007F81FC00007F87FF0000FF1E07C000FF3803E000FF7
2421003E001FFE001F001FFC001F801FF8001F801FF0000FC03FF0000FC03FE0000FC03FE000
24221FC03FC0001FE07FC0001FE07FC0001FE07F80001FE07F80003FC07F80003FC0FF00003F
2423C0FF00003FC0FF00007FC0FF00007F80FE00007F80FE00007F80FE0000FF80FE0000FF00
2424FE0000FF00FE0001FE00FE0001FE00FC0001FC007C0003F8007C0003F8007E0007F0007E
2425000FE0003E001FC0003F003F80001F807E00000FC1FC000007FFF8000003FFE00000007F
2426000000283F76BC2E>54 D<0000007F00000001FFE0000007C0F000001F007C00003C003C
2427000078003E0000F0001F0001F0001F0003E0001F0003C0001F0007C0001F0007C0001F00
24280F80001F000F80001F000F80003F001F80003E001F80003E001F80007E001FC0007C001F
2429C000F8001FE001F8001FF001F0001FF803E0001FFC07C0000FFE0F00000FFFBE000007FF
2430F8000003FFF0000001FFF0000000FFF8000000FFFC000003FFFE00000F9FFF00001F0FFF
243180007C07FFC000F803FFC001F001FFE003E0007FE007C0003FE00F80001FE01F80000FE0
24321F00000FE03E000007E03E000007E07E000007E07C000007E07C000007E0FC000007C0F8
2433000007C0F8000007C0F800000F80F800000F80F800001F00F800003E007C00003C007C00
2434007C007E0000F8003F0003F0001F8007C0000FE03F800007FFFE000001FFF80000003FC0
24350000283F78BC2E>56 D<001E00003F80007F8000FFC001FFC001FFC001FF8000FF0000FE
243600003C000000000000000000000000000000000000000000000000000000000000000000
2437000000000000000000000000000000000000000000000000000F00003FC0007FC0007FC0
243800FFC000FFC000FFC000FF80007F00003C0000122777A61C>58 D<00000000FF8001C000
243900000FFFE001C00000003FFFF80380000000FF807E0780000003FC001F0F8000000FF000
2440071F8000001FC00007BF0000007F800003FF000000FF000001FF000001FE000001FF0000
244103F8000000FE000007F0000000FE00000FF0000000FE00001FE00000007E00003FC00000
2442007C00007F800000007C0000FF800000007C0000FF000000007C0001FE00000000780003
2443FE00000000780003FC00000000780007FC00000000780007F80000000070000FF8000000
24440070000FF80000000070001FF00000000070001FF00000000000003FE00000000000003F
2445E00000000000003FE00000000000007FE00000000000007FC00000000000007FC0000000
24460000007FC0000000000000FFC0000000000000FF80000000000000FF80000000000000FF
244780000000000000FF80000000000000FF00000000000000FF00000000000000FF00000000
24480F0000FF000000000F0000FF000000000E0000FF000000000E0000FF000000001E0000FF
2449000000001C0000FF000000003C0000FF00000000380000FF000000007800007F00000000
24507000007F80000000F000007F80000001E000003F80000001C000003FC0000003C000001F
2451C00000078000001FE000000F0000000FE000001E00000007F000003C00000003F80000F8
245200000001FC0001F000000000FE0007C0000000007FC03F80000000001FFFFE0000000000
245307FFF0000000000000FF80000000003A4272BF41>67 D<0001FFFFFFFFFFF00001FFFFFF
2454FFFFF00001FFFFFFFFFFF0000003FE00003FF0000003FE00000FF0000003FC000003F000
24550003FC000003F0000003FC000001E0000007FC000001E0000007F8000001E0000007F800
24560001E0000007F8000001E000000FF8000001E000000FF0000001E000000FF0000001C000
2457000FF0000001C000001FF0000001C000001FE0000001C000001FE0007001C000001FE000
2458F003C000003FE000E0038000003FC000E0000000003FC000E0000000003FC001E0000000
2459007FC001C0000000007F8003C0000000007F8003C0000000007F8007C000000000FF801F
24608000000000FFFFFF8000000000FFFFFF8000000000FFFFFF8000000001FF003F00000000
246101FE001F0000000001FE000F0000000001FE000F0000000003FE000E0000000003FC000E
24620000000003FC000E0000000003FC001E0000000007FC001C0000000007F8001C00000000
246307F8001C0000000007F80000000000000FF80000000000000FF00000000000000FF00000
2464000000000FF00000000000001FF00000000000001FE00000000000001FE0000000000000
24651FE00000000000003FE00000000000003FC00000000000003FC00000000000007FC00000
2466000000007FC00000000000007F80000000000000FFC00000000000FFFFFFE000000000FF
2467FFFFE000000000FFFFFFE0000000003C3E7BBD3B>70 D<0001FFFE00000FFFFF0003FFFF
246800001FFFFF0003FFFF00001FFFFF000001FF800000FFC0000003FF8000003F00000003FF
24698000003E00000003FFC000001C00000003FFC000003C00000007BFC000003C000000073F
2470E0000038000000071FE0000038000000071FE00000780000000F1FF00000780000000E0F
2471F00000700000000E0FF80000700000000E0FF80000F00000001E07F80000F00000001C07
2472FC0000E00000001C07FC0000E00000001C03FC0001E00000003C03FE0001E00000003801
2473FE0001C00000003801FE0001C00000003801FF0003C00000007800FF0003C00000007000
2474FF8003800000007000FF80038000000070007F800780000000F0007FC00780000000E000
24753FC00700000000E0003FC00700000000E0003FE00F00000001E0001FE00F00000001C000
24761FF00E00000001C0001FF00E00000001C0000FF01E00000003C0000FF81E000000038000
24770FF81C00000003800007F81C00000003800007FC3C00000007800003FC3C000000070000
247803FC3800000007000003FE3800000007000001FE780000000F000001FF780000000E0000
247901FF700000000E000000FF700000000E000000FFF00000001E000000FFF00000001C0000
2480007FE00000001C0000007FE00000001C0000003FE00000003C0000003FE0000000380000
2481003FC0000000380000001FC0000000780000001FC0000000F80000001FC0000001FC0000
2482000F80000007FE0000000F800000FFFFF0000007800000FFFFF0000007800000FFFFF000
24830007000000483E7BBD44>78 D<0001FFFFFFFF80000001FFFFFFFFF0000001FFFFFFFFFC
248400000003FE0003FE00000003FE0000FF00000003FC00007F80000003FC00003FC0000007
2485FC00001FC0000007FC00001FE0000007F800001FE0000007F800001FE000000FF800001F
2486F000000FF800001FF000000FF000001FF000000FF000001FF000001FF000001FF000001F
2487F000003FE000001FE000003FE000001FE000003FE000003FE000003FC000003FE000007F
2488C000003FC000007F8000003FC000007F8000007FC00000FF0000007FC00000FE0000007F
2489800001FC0000007F800003F8000000FF800007F0000000FF80000FE0000000FF00003FC0
2490000000FF0001FF00000001FFFFFFFC00000001FFFFFFE000000001FE00000000000001FE
249100000000000003FE00000000000003FE00000000000003FC00000000000003FC00000000
2492000007FC00000000000007FC00000000000007F800000000000007F80000000000000FF8
24930000000000000FF80000000000000FF00000000000000FF00000000000001FF000000000
249400001FF00000000000001FE00000000000001FE00000000000003FE00000000000003FE0
24950000000000003FC00000000000003FC00000000000007FC00000000000007FC000000000
249600007F80000000000000FFC00000000000FFFFFF8000000000FFFFFF8000000000FFFFFF
249780000000003C3E7BBD3E>80 D<0000000FF001C00000007FFE01C0000001FFFF03800000
249807F80FC78000000FC003EF8000001F8001FF8000003F0000FF0000007E00007F000000FC
249900007F000001F800007F000003F000003E000003F000003E000007E000003E000007E000
2500003E00000FE000003C00000FC000003C00000FC000003C00000FC000003C00001FC00000
25013800001FC000003800001FC000003800001FE000003800001FE000000000001FF0000000
250200001FF000000000001FFC00000000000FFF00000000000FFFF0000000000FFFFE000000
25030007FFFFC000000003FFFFF000000001FFFFFC00000000FFFFFE000000003FFFFE000000
2504000FFFFF0000000001FFFF80000000001FFF800000000003FF800000000000FFC0000000
250500007FC000000000003FC000000000003FC000000000001FC000000000001FC000070000
2506001FC0000F0000001FC0000F0000001F80000E0000001F80000E0000001F80001E000000
25073F80001E0000003F00001E0000003F00001E0000003E00003E0000007E00003E0000007C
250800003F000000FC00003F000001F800007F800001F000007F800003E000007FC00007C000
2509007DE0001F800000F8F8003F000000F87F00FE000000F03FFFF8000000E00FFFE0000000
2510C000FF0000000032427ABF33>83 D<000C0006001C000E0078003C00E0007001C000E001
25118000C0038001C0070003800E0007000C0006001C000E0018000C0038001C003000180070
25120038006000300060003000E0007000CF006780FFC07FE0FFC07FE0FFC07FE0FFC07FE0FF
2513C07FE0FFC07FE0FF807FC07F003F803C001E001F1C69BE2F>92 D<00007E00000001FF80
2514000007C1C380001F80EFC0003F00FFC0007E007FC000FC007F8001F8003F8003F0003F80
251503F0003F8007E0003F000FE0003F000FC0003F001FC0007F001FC0007E003F80007E003F
251680007E003F8000FE007F8000FC007F0000FC007F0000FC007F0001FC00FF0001F800FE00
251701F800FE0001F800FE0003F800FE0003F038FC0003F038FC0003F038FC0007F038FC0007
2518E078FC000FE0707C000FE0707C001FE0F07E003FE0E03E007FE0E03E00F3E1E01F01E3E1
2519C00F8781E38003FF00FF0000FC003E00252977A72E>97 D<001FC0000FFFC0000FFF8000
25200FFF8000003F8000003F8000003F0000003F0000007F0000007F0000007E0000007E0000
252100FE000000FE000000FC000000FC000001FC000001FC000001F8000001F8000003F80000
252203F8000003F0000003F07E0007F1FF8007F783E007EF01F007FE01F00FF800F80FF800F8
25230FF000FC0FE0007C1FC0007C1FC0007E1F80007E1F8000FE3F8000FE3F8000FE3F0000FE
25243F0000FE7F0001FE7F0001FC7E0001FC7E0001FC7E0003FCFE0003F8FC0003F8FC0003F8
2525FC0007F0FC0007F0FC0007E0F8000FE0F8000FC0F8001FC0F8001F8078003F007C003F00
25267C007E003C00FC003E01F8001E03E0000F07C00007FF000001F800001F4076BE2A>I<00
2527001FE0000000FFF8000003F03E000007C00F00001F800700003F000780007E001F8000FC
2528007F8001F8007F8003F0007F8007F0007F0007E0007F000FE0007E001FC00000001FC000
252900003F800000003F800000003F800000007F800000007F000000007F000000007F000000
253000FF00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000
2531FC000003007E000007007E00000F007E00001E003E00003C003E000078001F0000F0001F
25320003E0000F800F800003E07E000001FFF80000003FC00000212977A72A>I<000000003F
2533800000001FFF800000001FFF000000001FFF00000000007F00000000007F00000000007E
253400000000007E0000000000FE0000000000FE0000000000FC0000000000FC0000000001FC
25350000000001FC0000000001F80000000001F80000000003F80000000003F80000000003F0
25360000000003F00000000007F00000000007F00000000007E00000007E07E0000001FF8FE0
2537000007C1CFE000001F80EFC000003F00FFC000007E007FC00000FC007FC00001F8003F80
25380003F0003F800003F0003F800007E0003F80000FE0003F00000FC0003F00001FC0007F00
2539001FC0007F00003F80007E00003F80007E00003F8000FE00007F8000FE00007F0000FC00
2540007F0000FC00007F0001FC0000FF0001FC0000FE0001F80000FE0001F80000FE0003F800
254100FE0003F83800FC0003F03800FC0003F03800FC0007F03800FC0007F07800FC000FE070
2542007C000FE070007C001FE0F0007E003FE0E0003E007FE0E0003E00F3E1E0001F01E3E1C0
2543000F8781E3800003FF00FF000000FC003E0000294077BE2E>I<00003F800001FFE00007
2544E0F8001F803C003E003C00FC001E01F8001E03F0001E07F0001E0FE0003E0FC0003C1FC0
2545003C3F80007C3F8000F83F8003F07F000FE07F00FF80FFFFFC00FFFFC000FE000000FE00
25460000FE000000FE000000FC000000FC000000FC000000FC000000FC000000FC000000FC00
25470006FC00000EFC00001E7C00003C7C0000783E0000F03E0001E01F0007C00F801F0007C0
2548FC0001FFF000007F80001F2976A72A>I<000000007C0000000001FF0000000007C78000
254900000F83C00000001F87C00000001F1FC00000003F3FC00000003F3FC00000007E3FC000
255000007E3FC00000007E3F800000007E0E00000000FC0000000000FC0000000000FC000000
25510000FC0000000001FC0000000001F80000000001F80000000001F80000000001F8000000
25520003F80000000003F00000000003F00000000003F000000003FFFFF8000003FFFFF80000
255303FFFFF800000007E00000000007E00000000007E0000000000FE0000000000FC0000000
2554000FC0000000000FC0000000000FC0000000000FC0000000001FC0000000001F80000000
2555001F80000000001F80000000001F80000000003F80000000003F00000000003F00000000
2556003F00000000003F00000000007F00000000007E00000000007E00000000007E00000000
2557007E0000000000FE0000000000FC0000000000FC0000000000FC0000000000FC00000000
255801FC0000000001F80000000001F80000000001F80000000001F80000000003F000000000
255903F00000000003F00000000003F00000000007E00000000007E00000000007E000000000
256007E0000000000FC00000001E0FC00000007F0FC00000007F0F80000000FF0F80000000FF
25611F00000000FF1F00000000FE1E00000000F83C00000000703C000000007878000000003F
2562E0000000000F80000000002A5383BF1C>I<000003F00000000FFC0000003E0E1C0000FC
2563077E0001F003FE0003F003FE0007E001FE000FC001FC001F8001FC001F8001FC003F0001
2564FC007F0001F8007E0001F800FE0003F800FE0003F801FC0003F001FC0003F001FC0007F0
256503FC0007F003F80007E003F80007E003F8000FE007F8000FE007F0000FC007F0000FC007
2566F0001FC007F0001FC007F0001F8007E0001F8007E0003F8003E0003F8003E0007F0003F0
256700FF0003F000FF0001F001FF0000F003FE0000F80F7E00007C1EFE00001FF8FE000007E0
2568FC00000000FC00000001FC00000001FC00000001F800000001F800000003F800000003F8
256900000003F0001C0007F0007F0007E000FF000FE000FF000FC000FF001F8000FF003F0000
2570FE007E0000F800FC00007C03F000001FFFC0000003FE000000273B7CA72A>I<0001FC00
25710000FFFC000000FFF8000000FFF800000003F800000003F800000003F000000003F00000
25720007F000000007F000000007E000000007E00000000FE00000000FE00000000FC0000000
25730FC00000001FC00000001FC00000001F800000001F800000003F800000003F800000003F
2574000000003F03F800007F0FFE00007F3E0F80007E780FC0007EE007C000FFC007E000FF80
257507E000FF0007E000FF0007E001FE0007E001FC0007E001FC0007E001F80007E003F8000F
2576E003F8000FC003F0000FC003F0000FC007F0001FC007F0001F8007E0001F8007E0001F80
25770FE0003F800FE0003F000FC0003F000FC0007F001FC0007E001FC000FE071F8000FC071F
25788000FC073F8001FC0F3F8001F80E3F0001F80E3F0001F81E7F0001F01C7F0001F01C7E00
257901F0387E0001F038FE0001F070FE0000F0E0FC00007FC03800001F0028407ABE2E>I<00
258000780001FC0001FC0003FC0003FC0003FC0003F80000E000000000000000000000000000
25810000000000000000000000000000000000000000000000000000007C0001FF00038F8007
258207800E07C01E07C01C07C03C0FC0380FC0380FC0781FC0701F80701F80F03F80F03F0000
25833F00007F00007E0000FE0000FC0000FC0001FC0001F80001F80003F80003F00003F03807
2584F03807E0380FE0780FC0700FC0700FC0F00F80E00F80E00F81C00F83C00F838007870003
2585FE0000F800163E79BC1C>I<00000007000000001FC00000001FC00000003FC00000003F
2586C00000003FC00000003F800000000E000000000000000000000000000000000000000000
2587000000000000000000000000000000000000000000000000000000000000000000000000
2588000000000000000000000007C00000003FF000000078F8000000E07C000001C07C000003
2589C07C000003807E000007007E000007007E00000E00FE00000E00FC00001E00FC00001C00
2590FC00003C01FC00003C01FC00000001F800000001F800000003F800000003F800000003F0
259100000003F000000007F000000007F000000007E000000007E00000000FE00000000FE000
259200000FC00000000FC00000001FC00000001FC00000001F800000001F800000003F800000
2593003F800000003F000000003F000000007F000000007F000000007E000000007E00000000
2594FE00000000FE00000000FC00000000FC00000001FC00000001F800000001F800001C01F8
259500007F03F00000FF03F00000FF07E00000FF07C00000FF0F800000FE1F000000F83E0000
259600707C0000003FF00000000FC0000000225083BC1C>I<0001FC000000FFFC000000FFF8
2597000000FFF800000003F800000003F800000003F000000003F000000007F000000007F000
2598000007E000000007E00000000FE00000000FE00000000FC00000000FC00000001FC00000
2599001FC00000001F800000001F800000003F800000003F800000003F000000003F0003E000
26007F000FF8007F003C3C007E00707C007E00E1FC00FE01C1FC00FE0383FC00FC0703FC00FC
26010E03FC01FC1C03F801FC3800E001F870000001F860000003F8E0000003F9C0000003F780
2602000003FE00000007FE00000007FFE0000007E7F8000007E0FE00000FE07F00000FE03F80
2603000FC01F80000FC00FC0001FC00FC0001FC00FC0701F800FC0701F800FC0703F800FC0F0
26043F801FC0E03F001F80E03F001F80E07F001F81E07F001F81C07E000F83C07E000F8380FE
2605000F8780FE00078F00FC0003FE00380000F80026407ABE2A>I<0007F003FFF003FFE003
2606FFE0000FE0000FE0000FC0000FC0001FC0001FC0001F80001F80003F80003F80003F0000
26073F00007F00007F00007E00007E0000FE0000FE0000FC0000FC0001FC0001FC0001F80001
2608F80003F80003F80003F00003F00007F00007F00007E00007E0000FE0000FE0000FC0000F
2609C0001FC0001FC0001F80001F80003F80003F80003F00003F00007F00007F07007E07007E
26100700FE0F00FE0E00FC0E00FC0E00FC1E00FC1C00FC1C007C38007C78003C70001FE00007
26118000144079BE17>I<01F0003F80007F000007FC01FFE003FFC0000F3E07C1F80F83F000
26120E1F0F00FC1E01F8001E1F1C007C3800F8001C1F38007E7000FC003C1FF0007EE000FC00
2613381FF0007FE000FC00381FE0007FC000FC00783FC0007F8000FC00703FC0007F8000FC00
2614703F80007F0000FC00703F00007E0000FC00F03F0000FE0001FC00F07F0000FC0001F800
2615007E0000FC0001F800007E0000FC0001F800007E0001FC0003F80000FE0001FC0003F000
261600FC0001F80003F00000FC0001F80003F00000FC0003F80007F00001FC0003F80007E000
261701F80003F00007E00001F80003F0000FE00001F80007F0000FC00003F80007F0001FC0E0
261803F00007E0001F80E003F00007E0001F80E003F0000FE0003F81E007F0000FE0003F01C0
261907E0000FC0003F01C007E0000FC0003F01C007E0001FC0003E03800FE0001FC0003E0380
26200FC0001F80003E07000FC0001F80003E07000FC0003F80003E0E001FC0003F80001E1C00
26211F80003F00000FF8000700000E000003E000432979A74A>I<01F0003F800007FC01FFE0
2622000F3E07C1F8000E1F0F00FC001E1F1C007C001C1F38007E003C1FF0007E00381FF0007E
262300381FE0007E00783FC0007E00703FC0007E00703F80007E00703F00007E00F03F0000FE
262400F07F0000FC00007E0000FC00007E0000FC00007E0001FC0000FE0001F80000FC0001F8
26250000FC0001F80000FC0003F80001FC0003F00001F80003F00001F80007F00001F80007E0
26260003F8000FE07003F0000FC07003F0000FC07003F0001FC0F007F0001F80E007E0001F80
2627E007E0001F81E007E0001F01C00FE0001F01C00FC0001F03800FC0001F03800FC0001F07
2628001FC0000F0E001F800007FC0007000001F0002C2979A733>I<00001FC0000000FFF800
26290003F07C00000FC01F00001F801F00003F000F80007E000FC000FC0007C001F80007E003
2630F00007E007F00007E007E00007E00FE00007F01FC00007F01FC00007F03F800007F03F80
26310007F03F80000FE07F80000FE07F00000FE07F00000FE07F00001FE0FF00001FC0FE0000
26321FC0FE00001FC0FE00003F80FE00003F80FE00007F00FE00007F00FC00007E007C0000FC
2633007E0001FC007E0001F8007E0003F0003E0007E0001F000FC0001F001F80000F803E0000
263407C0FC000001FFF00000003F800000242977A72E>I<0003E001F800000FF807FE00001E
26357C1E0F80001C3E3C07C0003C3E7807C000383EE003E000783FE003E000703FC003F00070
26363F8001F000F07F0001F000E07F0001F800E07E0001F800E07E0003F801E0FE0003F801E0
2637FE0003F80000FC0003F80000FC0003F80001FC0007F80001FC0007F00001F80007F00001
2638F80007F00003F8000FF00003F8000FE00003F0000FE00003F0000FE00007F0001FC00007
2639F0001FC00007E0001F800007E0003F80000FE0003F00000FE0007F00000FE0007E00000F
2640E000FC00001FE000FC00001FE001F800001FF003F000001FF007E000003FB80F8000003F
26419C1F0000003F0FFC0000003F03E00000007F00000000007F00000000007E00000000007E
26420000000000FE0000000000FE0000000000FC0000000000FC0000000001FC0000000001FC
26430000000001F80000000001F80000000003F80000000003F8000000007FFFE0000000FFFF
2644E0000000FFFFE00000002D3A80A72E>I<01F000FC0007FC07FF800F3E0F03C00E1F1C03
2645E01E1F380FE01C1F700FE03C1FE01FE0381FE01FE0381FC01FE0783FC01FC0703F800700
2646703F800000703F000000F03F000000F07F000000007E000000007E000000007E00000000
2647FE00000000FC00000000FC00000000FC00000001FC00000001F800000001F800000001F8
264800000003F800000003F000000003F000000003F000000007F000000007E000000007E000
2649000007E00000000FE00000000FC00000000FC00000000FC00000001FC00000001F800000
2650000700000000232979A726>114 D<00007F800001FFE00007C0F8001F003C003E001C00
26513C001E007C003E00F8007E00F800FE00F800FE01F800FC01F800FC01F8007001FC000001
2652FE000001FFC00001FFFC0000FFFF0000FFFF80007FFFC0003FFFE0000FFFF00000FFF000
2653000FF0000007F0000003F00C0003F03F0003F07F8001F07F8003F0FF0003E0FF0003E0FF
26540003E0FC0007C0F0000F8070000F8078001F003C003C001F01F80007FFE00000FF00001F
2655297AA725>I<0001C0000003F0000007F0000007F0000007E0000007E000000FE000000F
2656E000000FC000000FC000001FC000001FC000001F8000001F8000003F8000003F8000003F
26570000003F00007FFFFF80FFFFFF80FFFFFF00007E000000FE000000FE000000FC000000FC
2658000001FC000001FC000001F8000001F8000003F8000003F8000003F0000003F0000007F0
2659000007F0000007E0000007E000000FE000000FE000000FC000000FC000001FC000001FC0
26601C001F801C001F801C003F803C003F8038003F0078003F0070003F00F0003F00E0003F01
2661C0001F03C0001F0780000F0F000007FC000001F00000193A78B81E>I<007C0000000001
2662FF00001C00038F80007E00070780007E000E07C0007E001E07C000FE001C07C000FE003C
26630FC000FC00380FC000FC00380FC001FC00781FC001FC00701F8001F800701F8001F800F0
26643F8003F800F03F0003F800003F0003F000007F0003F000007E0007F000007E0007F00000
2665FE0007E00000FC0007E00000FC000FE00001FC000FE00001F8000FC00001F8000FC00001
2666F8001FC00003F8001FC1C003F0001F81C003F0001F81C003F0003F81C003F0003F83C003
2667F0003F038003F0003F038003F0007F078001F000FF070001F001FF070001F801DF0F0000
2668F8079F0E00007C0F0F1C00001FFC07F8000007F001F0002A2979A731>I<007C0001C001
2669FF0007F0038F8007F007078007F00E07C007F81E07C007F81C07C003F83C0FC003F8380F
2670C001F0380FC001F0781FC000F0701F8000F0701F8000F0F03F8000F0F03F0000E0003F00
267100E0007F0000E0007E0001E0007E0001C000FE0001C000FC0001C000FC0003C001FC0003
26728001F800038001F800038001F800070003F800070003F0000F0003F0000E0003F0000E00
267303F0001C0003F0001C0003F000380003F000780001F000700001F800E00000F801C00000
2674FC038000007E0F0000001FFE00000003F00000252979A72A>I<007C000000007001FF00
2675007001FC038F8001F801FC07078001F801FC0E07C001F801FE1E07C003F801FE1C07C003
2676F000FE3C0FC003F000FE380FC003F0007C380FC007F0007C781FC007E0003C701F8007E0
2677003C701F8007E0003CF03F800FE0003CF03F000FC00038003F000FC00038007F000FC000
267838007E001FC00078007E001F80007000FE001F80007000FC001F80007000FC003F8000F0
267901FC003F0000E001F8003F0000E001F8003F0000E001F8003F0001E003F8007F0001C003
2680F0007E0001C003F0007E0003C003F0007E00038003F0007E00038003F0007E00070003F0
268100FE00070003F000FE000E0001F001FE001E0001F801FF001C0000F8039F00380000FC07
26829F807000003E0F07C1E000001FFC03FFC0000003F0007F0000372979A73C>I<0003F001
2683F800000FFC07FE00003C1E0E0F0000780F1C0F8000F00FB83F8001E00FF83F8001C007F0
26847F80038007F07F80078007E07F8007000FE07F000F000FE01C000E000FC000000E000FC0
268500001E001FC000001E001FC0000000001F80000000001F80000000003F80000000003F00
2686000000003F00000000003F00000000007F00000000007E00000000007E00000000007E00
268700000000FE0000000000FC001C000000FC001C000000FC001C000001FC003C001E01FC00
268838003F01F80078007F81F80070007F83F800F000FF83F800E000FF077801C000FE0F7C03
2689C0007C0E3C078000783C1E1E00001FF80FFC000007E003F0000029297CA72A>I<007C00
2690000001FF000038038F8000FC07078000FC0E07C000FC1E07C001FC1C07C001F83C0FC001
2691F8380FC001F8380FC003F8781FC003F0701F8003F0701F8003F0F03F8007F0F03F0007E0
2692003F0007E0007F0007E0007E000FE0007E000FC000FE000FC000FC000FC000FC001FC001
2693FC001FC001F8001F8001F8001F8001F8003F8003F8003F0003F0003F0003F0003F0003F0
2694007F0003F0007E0003F0007E0003F0007E0003F000FE0003F000FC0001F001FC0001F803
2695FC0000F807FC00007C1FF800003FF9F8000007E1F800000003F800000003F000000003F0
269600000007F0000E0007E0003F8007E0007F800FC0007F800FC0007F801F8000FF001F0000
2697FF003E00007C007E00007000FC00007801F000003803E000001E0FC000000FFF00000003
2698F8000000263B79A72C>I E /Fp 78 125 df<000001FF000FE00000001FFFE03FFC0000
2699007F00F8FC1E000001FC003FF03F000007F0007FE07F80000FE000FFE0FF80001FC001FF
2700C0FF80003F8001FF80FF80007F8001FF80FF80007F0001FF807F00007F0001FF003E0000
2701FE0000FF00000000FE00007F00000000FE00007F00000000FE00007F00000000FE00007F
270200000000FE00007F00000000FE00007F00000000FE00007F00000000FE00007F00000000
2703FE00007F00000000FE00007F00000000FE00007F00000000FE00007F00000000FE00007F
2704000000FFFFFFFFFFFF8000FFFFFFFFFFFF8000FFFFFFFFFFFF800000FE00007F00000000
2705FE00007F00000000FE00007F00000000FE00007F00000000FE00007F00000000FE00007F
270600000000FE00007F00000000FE00007F00000000FE00007F00000000FE00007F00000000
2707FE00007F00000000FE00007F00000000FE00007F00000000FE00007F00000000FE00007F
270800000000FE00007F00000000FE00007F00000000FE00007F00000000FE00007F00000000
2709FE00007F00000000FE00007F00000000FE00007F00000000FE00007F00000000FE00007F
271000000000FE00007F00000000FE00007F00000000FE00007F00000000FE00007F00000000
2711FE00007F00000000FE00007F00000000FE00007F00000000FE00007F00000001FF0000FF
27128000007FFFFC3FFFFF80007FFFFC3FFFFF80007FFFFC3FFFFF800039407FBF35>11
2713D<000001FF000000001FFFC00000007F01F0000001FC0078000007F0001C00000FE0003E
271400001FC000FF00003F8001FF00007F8001FF00007F0001FF00007F0001FF0000FE0001FF
27150000FE0000FE0000FE0000380000FE0000000000FE0000000000FE0000000000FE000000
27160000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE000000
27170000FE00007F00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF0000FE0001FF0000FE0000FF
27180000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F
27190000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F
27200000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F
27210000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F
27220000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F
27230001FF0000FF807FFFFC3FFFFE7FFFFC3FFFFE7FFFFC3FFFFE2F407FBF33>I<000001FF
2724800000001FFFF70000007F00FF000001F800FF000007F001FF00000FE001FF00001FC001
2725FF00003F8001FF00007F8001FF00007F0001FF00007F0000FF0000FE00007F0000FE0000
27267F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE0000
27277F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE0000
27287F00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF0000FE00007F0000FE00007F0000FE0000
27297F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE0000
27307F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE0000
27317F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE0000
27327F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE0000
27337F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0001FF0000
2734FF807FFFFC3FFFFE7FFFFC3FFFFE7FFFFC3FFFFE2F407FBF33>I<000001FF0000FF8000
273500001FFFC00FFFE00000007F01F03F80F8000001F80078FE003C000007F0003FF8000E00
2736000FE0007FF0001F00001FC000FFE0007F80003F8001FFC000FF80007F8001FFC000FF80
2737007F0001FF8000FF80007F0001FF8000FF8000FE0001FF0000FF8000FE0000FF00007F00
273800FE00007F00001C0000FE00007F0000000000FE00007F0000000000FE00007F00000000
273900FE00007F0000000000FE00007F0000000000FE00007F0000000000FE00007F00000000
274000FE00007F0000000000FE00007F0000000000FE00007F0000000000FE00007F00003F80
2741FFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF8000FE00007F0000FF80
274200FE00007F00007F8000FE00007F00003F8000FE00007F00003F8000FE00007F00003F80
274300FE00007F00003F8000FE00007F00003F8000FE00007F00003F8000FE00007F00003F80
274400FE00007F00003F8000FE00007F00003F8000FE00007F00003F8000FE00007F00003F80
274500FE00007F00003F8000FE00007F00003F8000FE00007F00003F8000FE00007F00003F80
274600FE00007F00003F8000FE00007F00003F8000FE00007F00003F8000FE00007F00003F80
274700FE00007F00003F8000FE00007F00003F8000FE00007F00003F8000FE00007F00003F80
274800FE00007F00003F8000FE00007F00003F8000FE00007F00003F8000FE00007F00003F80
274900FE00007F00003F8000FE00007F00003F8000FE00007F00003F8001FF0000FF80007FC0
27507FFFFC3FFFFE1FFFFF7FFFFC3FFFFE1FFFFF7FFFFC3FFFFE1FFFFF48407FBF4C>I<003E
2751003F007F00FF00FF01FE03FC07F807F00FE01FC01F803E007C00F8007000200010116EBE
27522D>19 D<1E000F007F803FC0FF807FC0FFC07FE0FFC07FE0FFE07FF0FFE07FF0FFE07FF0
27537FE03FF01E600F300060003000600030006000300060003000E0007000C0006000C00060
275400C0006001C000E0018000C0038001C003000180070003800E0007001C000E0018000C00
275538001C00300018001C1C7DBE2D>34 D<1E007F80FF80FFC0FFC0FFE0FFE0FFE07FE01E60
2756006000600060006000E000C000C000C001C001800380030007000E001C00180038003000
27570B1C79BE19>39 D<0000300000700000E00001C0000380000780000F00001E00003E0000
27583C0000780000F80000F00001F00001E00003E00003E00007C00007C0000FC0000F80000F
275980001F80001F00001F00003F00003F00003F00003E00007E00007E00007E00007E00007E
276000007E00007C0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC
27610000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC00007C00007E00007E00007E
276200007E00007E00007E00003E00003F00003F00003F00001F00001F00001F80000F80000F
276380000FC00007C00007C00003E00003E00001E00001F00000F00000F800007800003C0000
27643E00001E00000F000007800003800001C00000E0000070000030145A77C323>I<C00000
2765E000007000003800001C00001E00000F000007800007C00003C00001E00001F00000F000
276600F800007800007C00007C00003E00003E00003F00001F00001F00001F80000F80000F80
2767000FC0000FC0000FC00007C00007E00007E00007E00007E00007E00007E00003E00003F0
27680003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0
27690003F00003F00003F00003F00003F00003E00007E00007E00007E00007E00007E00007E0
27700007C0000FC0000FC0000FC0000F80000F80001F80001F00001F00003F00003E00003E00
2771007C00007C0000780000F80000F00001F00001E00003C00007C0000780000F00001E0000
27721C0000380000700000E00000C00000145A7BC323>I<00000006000000000000000F0000
277300000000000F000000000000000F000000000000000F000000000000000F000000000000
2774000F000000000000000F000000000000000F000000000000000F000000000000000F0000
277500000000000F000000000000000F000000000000000F000000000000000F000000000000
2776000F000000000000000F000000000000000F000000000000000F000000000000000F0000
277700000000000F000000000000000F000000000000000F000000000000000F000000000000
2778000F000000000000000F000000000000000F000000000000000F000000007FFFFFFFFFFF
2779FFE0FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF07FFFFFFFFFFFFFE00000000F000000000000
2780000F000000000000000F000000000000000F000000000000000F000000000000000F0000
278100000000000F000000000000000F000000000000000F000000000000000F000000000000
2782000F000000000000000F000000000000000F000000000000000F000000000000000F0000
278300000000000F000000000000000F000000000000000F000000000000000F000000000000
2784000F000000000000000F000000000000000F000000000000000F000000000000000F0000
278500000000000F000000000000000F000000000000000F0000000000000006000000003C3C
27867BB447>43 D<1E007F80FF80FFC0FFC0FFE0FFE0FFE07FE01E60006000600060006000E0
278700C000C000C001C001800380030007000E001C001800380030000B1C798919>I<FFFFFE
2788FFFFFEFFFFFEFFFFFEFFFFFEFFFFFE17067F961E>I<1E007F807F80FFC0FFC0FFC0FFC0
27897F807F801E000A0A798919>I<000000018000000003C000000007C000000007C0000000
279007800000000F800000000F800000000F000000001F000000001F000000001E000000003E
2791000000003E000000003C000000007C000000007C000000007800000000F800000000F800
2792000000F000000001F000000001F000000001E000000003E000000003E000000003C00000
27930007C000000007C000000007800000000F800000000F800000001F000000001F00000000
27941E000000003E000000003E000000003C000000007C000000007C000000007800000000F8
279500000000F800000000F000000001F000000001F000000001E000000003E000000003E000
2796000003C000000007C000000007C000000007800000000F800000000F800000000F000000
2797001F000000001F000000001E000000003E000000003E000000007C000000007C00000000
27987800000000F800000000F800000000F000000001F000000001F000000001E000000003E0
279900000003E000000003C000000007C000000007C000000007800000000F800000000F8000
280000000F000000001F000000001F000000001E000000003E000000003E000000003C000000
2801007C000000007C000000007800000000F800000000F800000000F0000000006000000000
2802225B7BC32D>I<0001FE0000000FFFC000003F03F000007C00F80000F8007C0001F0003E
28030003E0001F0007C0000F8007C0000F800FC0000FC01F800007E01F800007E01F800007E0
28043F800007F03F800007F03F000003F07F000003F87F000003F87F000003F87F000003F87F
2805000003F87F000003F8FF000003FCFF000003FCFF000003FCFF000003FCFF000003FCFF00
28060003FCFF000003FCFF000003FCFF000003FCFF000003FCFF000003FCFF000003FCFF0000
280703FCFF000003FCFF000003FCFF000003FCFF000003FCFF000003FCFF000003FCFF000003
2808FC7F000003F87F000003F87F000003F87F000003F87F000003F83F800007F03F800007F0
28093F800007F01F800007E01F800007E01F800007E00FC0000FC00FC0000FC007E0001F8003
2810E0001F0001F0003E0000F8007C00007C00F800003F03F000000FFFC0000001FE0000263F
28117DBC2D>I<0001C0000003C0000007C000001FC000007FC00007FFC000FFFFC000FF9FC0
281200F81FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0
281300001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0
281400001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0
281500001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0
281600001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0
281700001FC000001FC000001FC000001FC000007FF000FFFFFFF8FFFFFFF8FFFFFFF81D3D78
2818BC2D>I<0007FC0000003FFF800000FFFFE00003F01FF80007C007FC000F0001FE001E00
281900FF001C0000FF803C00007FC07800007FC07800003FE07000003FE0FF00003FE0FF8000
28201FF0FFC0001FF0FFC0001FF0FFC0001FF0FFC0001FF0FFC0001FF07F80001FF03F00001F
2821F00C00001FF00000001FE00000003FE00000003FE00000003FC00000007FC00000007F80
2822000000FF80000000FF00000001FE00000001FC00000003F800000007F000000007E00000
2823000FC00000001F800000003F000000007E000000007C00000000F800000001F000000003
2824E000000007C00000000F800000001F000070003E000070003C000070007800007000F000
282500E001E00000E003C00000E007800000E00F000001E01FFFFFFFE01FFFFFFFE03FFFFFFF
2826E07FFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0243D7CBC2D>I<0007FC0000003FFF
2827800000F80FE00001E003F800078001FC000F0001FE000E0000FF001E0000FF801F80007F
2828803FC0007FC03FE0007FC03FE0007FC03FF0007FC03FE0007FC03FE0007FC01FE0007FC0
28290FC0007FC00000007F80000000FF80000000FF00000000FF00000001FE00000001FE0000
28300003FC00000003F800000007E00000000FC00000003F0000001FFC0000001FFF80000000
28310FE000000007F800000003FC00000001FE00000000FF00000000FF800000007FC0000000
28327FC00000007FE00000003FE00000003FE00000003FF00000003FF00C00003FF03F00003F
2833F07F80003FF0FFC0003FF0FFC0003FF0FFC0003FF0FFC0003FE0FFC0003FE0FF80007FE0
28347F00007FC07800007FC0780000FF803C0000FF801E0001FF000F0003FE0007C007FC0003
2835F80FF00000FFFFE000003FFF80000007F80000243F7CBC2D>I<0000000E000000001E00
28360000003E000000003E000000007E000000007E00000000FE00000001FE00000001FE0000
28370003FE000000077E000000067E0000000E7E0000001C7E0000001C7E000000387E000000
2838707E000000707E000000E07E000001C07E000001C07E000003807E000007007E00000700
28397E00000E007E00001C007E00001C007E000038007E000070007E000070007E0000E0007E
28400000C0007E0001C0007E000380007E000300007E000700007E000E00007E000C00007E00
28411C00007E003800007E003800007E007000007E00E000007E00FFFFFFFFFFFFFFFFFFFFFF
2842FFFFFFFF000000FE00000000FE00000000FE00000000FE00000000FE00000000FE000000
284300FE00000000FE00000000FE00000000FE00000000FE00000000FE00000001FF000001FF
2844FFFF0001FFFFFF0001FFFFFF283E7EBD2D>I<06000003000780001F0007F800FE0007FF
2845FFFE0007FFFFFC0007FFFFF80007FFFFF00007FFFFC00007FFFF000007FFFC0000073FE0
2846000007000000000700000000070000000007000000000700000000070000000007000000
284700070000000007000000000700000000070000000007000000000701FE0000070FFF8000
2848073E03E000077001F80007E000FC0007C0007E000780003F000700003F800600001F8000
284900001FC00000001FC00000001FE00000000FE00000000FE00000000FE00000000FF00000
2850000FF00000000FF00C00000FF07F00000FF07F80000FF0FF80000FF0FF80000FF0FF8000
28510FF0FF80000FF0FF80000FE0FF00001FE0FC00001FE07000001FC07800001FC03800003F
2852803C00003F801E00007F001F0000FE000F8001FC0007C003F80003F80FE00000FFFFC000
2853003FFF00000007F80000243F7CBC2D>I<00001FE0000000FFF8000003F03E00000FC00F
285400001F000780003E000780007E001FC000FC003FC001F8007FC003F8007FC003F0007FC0
285507F0007FC00FE0003F800FE0001F001FE00000001FC00000001FC00000003FC00000003F
2856C00000003FC00000007F800000007F800000007F80FE00007F87FF8000FF8F07E000FF9C
285701F000FFB800FC00FFB0007E00FFF0007E00FFE0003F00FFE0003F80FFC0003FC0FFC000
28583FC0FFC0001FE0FFC0001FE0FFC0001FE0FF80001FF0FF80001FF0FF80001FF0FF80001F
2859F0FF80001FF07F80001FF07F80001FF07F80001FF07F80001FF07F80001FF07F80001FF0
28603F80001FF03FC0001FE03FC0001FE01FC0001FE01FC0003FC01FC0003FC00FE0003F800F
2861E0003F8007E0007F0003F0007E0001F800FC0000FC01F800007E07F000003FFFE000000F
2862FF80000003FC0000243F7CBC2D>I<38000000003C000000003F000000003FFFFFFFFC3F
2863FFFFFFFC3FFFFFFFFC3FFFFFFFF87FFFFFFFF87FFFFFFFF07FFFFFFFE078000001E07000
28640003C0700000078070000007007000000F00E000001E00E000001C00E000003C00E00000
286578000000007000000000F000000001E000000001C000000003C000000007800000000700
28660000000F000000001E000000001E000000003C000000003C000000007C00000000780000
28670000F800000000F800000001F800000001F000000003F000000003F000000003F0000000
286807F000000007F000000007F00000000FF00000000FE00000000FE00000001FE00000001F
2869E00000001FE00000001FE00000001FE00000001FE00000003FE00000003FE00000003FE0
28700000003FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE000
287100001FC00000000700000026407BBD2D>I<0003FC0000001FFF8000007C07E00000F001
2872F80001E0007C0003C0003E000780001F000F00001F000F00000F801E00000F801E00000F
2873C03E000007C03E000007C03E000007C03E000007C03F000007C03F000007C03F80000F80
28743FC0000F801FE0001F801FF0001F001FFC003E000FFE007C000FFF80780007FFC0F00003
2875FFF3E00001FFFF800000FFFF0000003FFF0000001FFFC000000FFFE000003FFFF8000078
2876FFFC0001F07FFE0003E01FFF0007C00FFF800F8003FFC01F0001FFC03F00007FE03E0000
28773FE07E00001FE07C00000FF07C000007F0F8000003F0F8000003F0F8000003F0F8000001
2878F0F8000001F0F8000001F0F8000001F0FC000001E07C000003E07C000003E07E000003C0
28793F000007C01F00000F801F80001F000FC0003E0007F0007C0001FC03F80000FFFFE00000
28801FFF80000003FC0000243F7CBC2D>I<0003FC0000001FFF0000007E07C00000FC03F000
288101F801F80003F000FC0007E0007C000FE0007E001FC0007F001FC0003F003FC0003F803F
288280003F807F80003FC07F80003FC07F80001FC0FF80001FC0FF80001FE0FF80001FE0FF80
2883001FE0FF80001FE0FF80001FE0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF8000
28841FF07F80001FF07F80003FF07F80003FF07F80003FF03FC0003FF03FC0003FF01FC0007F
2885F00FC0007FF007E000FFF007F000DFF003F001DFF000F8039FF0007E0F1FF0001FFE1FE0
28860007F01FE00000001FE00000001FE00000003FC00000003FC00000003FC00000003FC000
288700003F800000007F800F80007F001FC0007F003FE000FE003FE000FE003FE001FC003FE0
288801F8003FC003F0003F8007F0001E000FE0001F001FC0000FC07F000003FFFE000001FFF8
28890000003FC00000243F7CBC2D>I<1E007F807F80FFC0FFC0FFC0FFC07F807F801E000000
2890000000000000000000000000000000000000000000000000000000000000000000000000
28911E007F807F80FFC0FFC0FFC0FFC07F807F801E000A2779A619>I<1E007F807F80FFC0FF
2892C0FFC0FFC07F807F801E0000000000000000000000000000000000000000000000000000
2893000000000000000000000000001E007F00FF80FF80FFC0FFC0FFC0FFC07FC01EC000C000
2894C000C000C001C001800180018003800300070006000E000C001C003800300030000A3979
2895A619>I<7FFFFFFFFFFFFFE0FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF07FFFFFFFFFFFFFE0
2896000000000000000000000000000000000000000000000000000000000000000000000000
2897000000000000000000000000000000000000000000000000000000000000000000000000
2898000000000000000000000000000000000000000000000000000000000000000000000000
2899000000007FFFFFFFFFFFFFE0FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF07FFFFFFFFFFFFFE0
29003C167BA147>61 D<00000007000000000000000F800000000000000F800000000000000F
2901800000000000001FC00000000000001FC00000000000001FC00000000000003FE0000000
29020000003FE00000000000003FE00000000000007FF00000000000007FF00000000000007F
2903F0000000000000FFF8000000000000E7F8000000000000E7F8000000000001C7FC000000
2904000001C3FC000000000001C3FC00000000000381FE00000000000381FE00000000000381
2905FE00000000000700FF00000000000700FF00000000000700FF00000000000E007F800000
290600000E007F80000000000E007F80000000001C003FC0000000001C003FC0000000001C00
29073FC00000000038001FE00000000038001FE00000000038001FE00000000070000FF00000
2908000070000FF00000000070000FF000000000E00007F800000000E00007F800000000E000
290907F800000001C00003FC00000001FFFFFFFC00000001FFFFFFFC00000003FFFFFFFE0000
29100003800001FE00000003800001FE00000007000000FF00000007000000FF0000000F0000
291100FF8000000E0000007F8000000E0000007F8000001E0000007FC000001C0000003FC000
2912001C0000003FC000003C0000003FE00000380000001FE00000380000001FE00000780000
2913001FF00000780000000FF00000FC0000000FF00003FC0000001FF8000FFF0000003FFC00
2914FFFFF0000FFFFFF8FFFFF0000FFFFFF8FFFFF0000FFFFFF83D417DC044>65
2915D<FFFFFFFFFC0000FFFFFFFFFF8000FFFFFFFFFFF00001FF80000FF800007F000003FE00
2916007F000001FF00007F000000FF80007F0000007FC0007F0000003FE0007F0000003FE000
29177F0000001FF0007F0000001FF0007F0000001FF8007F0000001FF8007F0000001FF8007F
29180000000FF8007F0000001FF8007F0000001FF8007F0000001FF8007F0000001FF0007F00
291900001FF0007F0000003FE0007F0000007FE0007F0000007FC0007F000000FF80007F0000
292001FF00007F000003FC00007F00000FF800007F00007FE000007FFFFFFF0000007FFFFFFF
2921E000007F000007FC00007F000001FE00007F000000FF80007F0000007FC0007F0000003F
2922E0007F0000001FF0007F0000001FF8007F0000000FF8007F0000000FFC007F00000007FC
2923007F00000007FC007F00000007FE007F00000007FE007F00000007FE007F00000007FE00
29247F00000007FE007F00000007FE007F00000007FE007F00000007FC007F0000000FFC007F
29250000000FFC007F0000001FF8007F0000001FF0007F0000003FF0007F0000007FE0007F00
29260000FFC0007F000003FF8001FF80000FFE00FFFFFFFFFFFC00FFFFFFFFFFE000FFFFFFFF
2927FF0000373E7DBD40>I<0000003FF00006000003FFFE000E00000FFFFF801E00003FF007
2928E03E0000FF8000F83E0003FE00007C7E0007F800001EFE000FF000000FFE003FE0000007
2929FE007FC0000003FE00FF80000003FE00FF00000001FE01FE00000000FE03FE00000000FE
293007FC000000007E07F8000000007E0FF8000000003E0FF8000000003E1FF0000000001E1F
2931F0000000001E3FF0000000001E3FE0000000001E3FE0000000000E7FE0000000000E7FE0
2932000000000E7FE0000000000E7FC00000000000FFC00000000000FFC00000000000FFC000
293300000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000
2934000000FFC00000000000FFC00000000000FFC00000000000FFC000000000007FC0000000
293500007FE000000000007FE0000000000E7FE0000000000E3FE0000000000E3FE000000000
29360E3FF0000000000E1FF0000000001E1FF0000000001C0FF8000000001C0FF8000000001C
293707F8000000003C07FC000000003803FE000000007801FE000000007000FF00000000F000
2938FF80000001E0007FC0000001C0003FE0000003C0000FF0000007800007F800001F000003
2939FE00003E000000FF8000F80000003FF007F00000000FFFFFC000000003FFFF0000000000
29403FF0000037427BBF42>I<FFFFFFFFFC000000FFFFFFFFFF800000FFFFFFFFFFE0000001
2941FFC0001FF80000007F800003FE0000007F800000FF0000007F8000007F8000007F800000
29423FC000007F8000000FE000007F8000000FF000007F80000007F800007F80000003FC0000
29437F80000001FC00007F80000001FE00007F80000000FF00007F80000000FF00007F800000
294400FF80007F800000007F80007F800000007FC0007F800000007FC0007F800000007FC000
29457F800000003FE0007F800000003FE0007F800000003FE0007F800000003FE0007F800000
2946003FE0007F800000003FF0007F800000003FF0007F800000003FF0007F800000003FF000
29477F800000003FF0007F800000003FF0007F800000003FF0007F800000003FF0007F800000
2948003FF0007F800000003FF0007F800000003FF0007F800000003FE0007F800000003FE000
29497F800000003FE0007F800000003FE0007F800000003FE0007F800000007FC0007F800000
2950007FC0007F800000007F80007F800000007F80007F80000000FF80007F80000000FF0000
29517F80000001FE00007F80000001FE00007F80000003FC00007F80000003F800007F800000
295207F800007F8000000FF000007F8000001FE000007F8000007FC000007F800000FF000000
29537F800003FE000001FFC0001FF80000FFFFFFFFFFF00000FFFFFFFFFF800000FFFFFFFFFC
29540000003C3E7DBD45>I<FFFFFFFFFFFFE0FFFFFFFFFFFFE0FFFFFFFFFFFFE001FFC00001
2955FFE0007F8000001FE0007F8000000FF0007F80000003F0007F80000003F0007F80000001
2956F0007F80000000F0007F80000000F0007F80000000F0007F8000000070007F8000000070
2957007F8000000070007F8000000070007F8000000038007F80001C0038007F80001C003800
29587F80001C0038007F80001C0038007F80001C0000007F80001C0000007F80003C0000007F
295980003C0000007F80007C0000007F8000FC0000007F8003FC0000007FFFFFFC0000007FFF
2960FFFC0000007FFFFFFC0000007F8003FC0000007F8000FC0000007F80007C0000007F8000
29613C0000007F80003C0000007F80001C0000007F80001C0000007F80001C0007007F80001C
29620007007F80001C0007007F80001C000E007F800000000E007F800000000E007F80000000
29630E007F800000000E007F800000001E007F800000001C007F800000001C007F800000003C
2964007F800000003C007F800000007C007F800000007C007F80000000F8007F80000001F800
29657F80000003F8007F80000007F8007F8000001FF801FFC00001FFF8FFFFFFFFFFFFF0FFFF
2966FFFFFFFFF0FFFFFFFFFFFFF0383E7DBD3E>I<FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFF
2967FFFFFF8001FFC00003FF80007F8000007F80007F8000001FC0007F8000000FC0007F8000
29680007C0007F80000007C0007F80000003C0007F80000003C0007F80000003C0007F800000
296901C0007F80000001C0007F80000001C0007F80000001C0007F80000000E0007F80000000
2970E0007F80003800E0007F80003800E0007F80003800E0007F8000380000007F8000380000
2971007F8000380000007F8000780000007F8000780000007F8000F80000007F8001F8000000
29727F8007F80000007FFFFFF80000007FFFFFF80000007FFFFFF80000007F8007F80000007F
29738001F80000007F8000F80000007F8000780000007F8000780000007F8000380000007F80
297400380000007F8000380000007F8000380000007F8000380000007F8000380000007F8000
2975000000007F8000000000007F8000000000007F8000000000007F8000000000007F800000
29760000007F8000000000007F8000000000007F8000000000007F8000000000007F80000000
297700007F8000000000007F8000000000007F8000000000007F800000000001FFE000000000
2978FFFFFFF0000000FFFFFFF0000000FFFFFFF0000000333E7DBD3B>I<0000003FE0000C00
2979000003FFFE001C0000001FFFFF803C0000007FF00FC07C000000FF0001F07C000003FC00
29800078FC000007F800003DFC00001FE000001FFC00003FC000000FFC00007F80000007FC00
298100FF80000003FC0001FF00000003FC0001FE00000001FC0003FC00000001FC0007FC0000
29820000FC0007F800000000FC000FF8000000007C000FF0000000007C001FF0000000003C00
29831FF0000000003C003FE0000000003C003FE0000000003C003FE0000000001C007FE00000
298400001C007FE0000000001C007FC0000000001C007FC0000000000000FFC0000000000000
2985FFC0000000000000FFC0000000000000FFC0000000000000FFC0000000000000FFC00000
298600000000FFC0000000000000FFC0000000000000FFC0000000000000FFC0000000000000
2987FFC0000000000000FFC000001FFFFFF07FC000001FFFFFF07FC000001FFFFFF07FE00000
2988000FFE007FE000000003FC003FE000000003FC003FE000000003FC003FF000000003FC00
29891FF000000003FC001FF000000003FC000FF800000003FC000FF800000003FC0007F80000
29900003FC0007FC00000003FC0003FC00000003FC0001FE00000003FC0001FF00000003FC00
299100FF80000003FC00007FC0000007FC00003FE0000007FC00001FF000000FFC000007F800
2992001EFC000003FE00003C7C000000FF8000F83C0000007FF007F01C0000001FFFFFC00C00
2993000003FFFF0000000000003FF00000003C427BBF47>I<FFFFFFC01FFFFFF8FFFFFFC01F
2994FFFFF8FFFFFFC01FFFFFF801FFE000003FFC00007F8000000FF000007F8000000FF00000
29957F8000000FF000007F8000000FF000007F8000000FF000007F8000000FF000007F800000
29960FF000007F8000000FF000007F8000000FF000007F8000000FF000007F8000000FF00000
29977F8000000FF000007F8000000FF000007F8000000FF000007F8000000FF000007F800000
29980FF000007F8000000FF000007F8000000FF000007F8000000FF000007F8000000FF00000
29997F8000000FF000007F8000000FF000007F8000000FF000007F8000000FF000007FFFFFFF
3000FFF000007FFFFFFFFFF000007FFFFFFFFFF000007F8000000FF000007F8000000FF00000
30017F8000000FF000007F8000000FF000007F8000000FF000007F8000000FF000007F800000
30020FF000007F8000000FF000007F8000000FF000007F8000000FF000007F8000000FF00000
30037F8000000FF000007F8000000FF000007F8000000FF000007F8000000FF000007F800000
30040FF000007F8000000FF000007F8000000FF000007F8000000FF000007F8000000FF00000
30057F8000000FF000007F8000000FF000007F8000000FF000007F8000000FF000007F800000
30060FF000007F8000000FF000007F8000000FF00001FFE000003FFC00FFFFFFC01FFFFFF8FF
3007FFFFC01FFFFFF8FFFFFFC01FFFFFF83D3E7DBD44>I<FFFFFFF0FFFFFFF0FFFFFFF000FF
3008F000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
3009C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
3010C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
3011C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
3012C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
3013C000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003F
3014C00000FFF000FFFFFFF0FFFFFFF0FFFFFFF01C3E7EBD21>I<001FFFFFFC001FFFFFFC00
30151FFFFFFC000007FF00000003FE00000001FE00000001FE00000001FE00000001FE000000
301601FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001
3017FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE
301800000001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE00
3019000001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE0000
30200001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE000000
302101FE00000001FE003F0001FE007F8001FE00FFC001FE00FFC001FE00FFC001FE00FFC001
3022FE00FFC003FC00FF8003FC007F0003F8007C0007F800380007F0003C000FE0001E001FC0
3023000F003F800003E07E000000FFF80000003FC0000026407CBD2F>I<FFFFFFF8000000FF
3024FFFFF8000000FFFFFFF800000001FFE000000000007F8000000000007F8000000000007F
30258000000000007F8000000000007F8000000000007F8000000000007F8000000000007F80
302600000000007F8000000000007F8000000000007F8000000000007F8000000000007F8000
3027000000007F8000000000007F8000000000007F8000000000007F8000000000007F800000
30280000007F8000000000007F8000000000007F8000000000007F8000000000007F80000000
302900007F8000000000007F8000000000007F8000000000007F8000000000007F8000000000
3030007F8000000000007F8000000000007F8000000000007F8000000000007F800000000000
30317F8000000000007F8000000380007F8000000380007F8000000380007F8000000380007F
30328000000380007F8000000780007F8000000700007F8000000700007F8000000700007F80
303300000700007F8000000F00007F8000000F00007F8000000F00007F8000001F00007F8000
3034001F00007F8000003F00007F8000007F00007F800000FF00007F800001FE00007F800007
3035FE0001FFC0003FFE00FFFFFFFFFFFE00FFFFFFFFFFFE00FFFFFFFFFFFE00313E7DBD39>
303676 D<FFFFC0000000003FFFF0FFFFC0000000003FFFF0FFFFC0000000003FFFF001FFE0
3037000000007FF800007FE0000000007FE0000077F000000000EFE0000077F000000000EFE0
3038000077F000000000EFE0000073F800000001CFE0000073F800000001CFE0000071FC0000
303900038FE0000071FC000000038FE0000071FC000000038FE0000070FE000000070FE00000
304070FE000000070FE0000070FF0000000E0FE00000707F0000000E0FE00000707F0000000E
30410FE00000703F8000001C0FE00000703F8000001C0FE00000703F8000001C0FE00000701F
3042C00000380FE00000701FC00000380FE00000700FE00000700FE00000700FE00000700FE0
30430000700FE00000700FE000007007F00000E00FE000007007F00000E00FE000007003F800
304401C00FE000007003F80001C00FE000007003F80001C00FE000007001FC0003800FE00000
30457001FC0003800FE000007001FC0003800FE000007000FE0007000FE000007000FE000700
30460FE0000070007F000E000FE0000070007F000E000FE0000070007F000E000FE000007000
30473F801C000FE0000070003F801C000FE0000070001FC038000FE0000070001FC038000FE0
3048000070001FC038000FE0000070000FE070000FE0000070000FE070000FE0000070000FE0
3049E0000FE00000700007F0E0000FE00000700007F0E0000FE00000700003F9C0000FE00000
3050700003F9C0000FE00000700003F9C0000FE00000700001FF80000FE00000700001FF8000
30510FE00000700000FF00000FE00000700000FF00000FE00000F80000FF00000FE00001FC00
3052007E00000FE00007FF00007E00003FF800FFFFF8003C001FFFFFF0FFFFF8003C001FFFFF
3053F0FFFFF8003C001FFFFFF04C3E7DBD53>I<FFFF800000FFFFF8FFFFC00000FFFFF8FFFF
3054E00000FFFFF8007FE0000007FF00007FF0000001FC00007FF8000000F800007FF8000000
305570000077FC00000070000073FE00000070000073FE00000070000071FF00000070000070
3056FF80000070000070FF800000700000707FC00000700000703FE00000700000703FE00000
3057700000701FF00000700000700FF80000700000700FF800007000007007FC000070000070
305803FE00007000007003FE00007000007001FF00007000007000FF80007000007000FF8000
305970000070007FC00070000070003FE00070000070003FE00070000070001FF00070000070
3060000FF80070000070000FF800700000700007FC00700000700003FE00700000700003FE00
3061700000700001FF00700000700000FF80700000700000FF807000007000007FC070000070
306200003FE07000007000003FE07000007000001FF07000007000000FF87000007000000FF8
306370000070000007FC70000070000003FE70000070000003FE70000070000001FF70000070
3064000000FFF0000070000000FFF00000700000007FF00000700000003FF00000700000003F
3065F00000700000001FF00000700000000FF00000700000000FF000007000000007F00000F8
306600000003F00001FC00000003F00007FF00000001F000FFFFF8000000F000FFFFF8000000
3067F000FFFFF800000070003D3E7DBD44>I<0000007FE0000000000007FFFE00000000001F
3068C03F80000000007E0007E000000001FC0003F800000007F00000FE0000000FE000007F00
306900001FC000003F8000003F8000001FC000007F0000000FE00000FE00000007F00001FE00
3070000007F80001FC00000003F80003FC00000003FC0007F800000001FE0007F800000001FE
3071000FF000000000FF000FF000000000FF001FF000000000FF801FE0000000007F803FE000
30720000007FC03FE0000000007FC03FE0000000007FC07FE0000000007FE07FC0000000003F
3073E07FC0000000003FE07FC0000000003FE0FFC0000000003FF0FFC0000000003FF0FFC000
30740000003FF0FFC0000000003FF0FFC0000000003FF0FFC0000000003FF0FFC0000000003F
3075F0FFC0000000003FF0FFC0000000003FF0FFC0000000003FF0FFC0000000003FF0FFC000
30760000003FF07FC0000000003FE07FE0000000007FE07FE0000000007FE07FE0000000007F
3077E07FE0000000007FE03FE0000000007FC03FE0000000007FC01FF000000000FF801FF000
3078000000FF801FF000000000FF800FF800000001FF000FF800000001FF0007FC00000003FE
30790003FC00000003FC0003FE00000007FC0001FE00000007F80000FF0000000FF000007F00
308000000FE000003F8000001FC000001FC000003F8000000FE000007F00000007F00000FE00
3081000001FC0003F8000000007F000FE0000000001FC03F800000000007FFFE000000000000
30827FE00000003C427BBF47>I<FFFFFFFFF80000FFFFFFFFFF8000FFFFFFFFFFE00001FFC0
3083003FF800007F800007FC00007F800001FE00007F800000FF00007F8000007F80007F8000
3084003FC0007F8000003FE0007F8000003FE0007F8000001FF0007F8000001FF0007F800000
30851FF8007F8000001FF8007F8000001FF8007F8000001FF8007F8000001FF8007F8000001F
3086F8007F8000001FF8007F8000001FF8007F8000001FF0007F8000001FF0007F8000003FE0
3087007F8000003FE0007F8000003FC0007F8000007F80007F800000FF00007F800001FE0000
30887F800007FC00007F80003FF000007FFFFFFFC000007FFFFFFE0000007F8000000000007F
30898000000000007F8000000000007F8000000000007F8000000000007F8000000000007F80
309000000000007F8000000000007F8000000000007F8000000000007F8000000000007F8000
3091000000007F8000000000007F8000000000007F8000000000007F8000000000007F800000
30920000007F8000000000007F8000000000007F8000000000007F8000000000007F80000000
309300007F8000000000007F8000000000007F800000000001FFE000000000FFFFFFC0000000
3094FFFFFFC0000000FFFFFFC0000000353E7DBD3E>I<FFFFFFFFC0000000FFFFFFFFFC0000
309500FFFFFFFFFF80000001FFC000FFE00000007F80001FF00000007F800007FC0000007F80
30960001FE0000007F800000FF0000007F800000FF8000007F8000007FC000007F8000007FC0
309700007F8000003FE000007F8000003FE000007F8000003FF000007F8000003FF000007F80
309800003FF000007F8000003FF000007F8000003FF000007F8000003FF000007F8000003FF0
309900007F8000003FE000007F8000007FE000007F8000007FC000007F8000007F8000007F80
31000000FF8000007F800000FF0000007F800001FC0000007F800007F80000007F80001FE000
310100007F8000FF800000007FFFFFFC000000007FFFFFF0000000007F8001FC000000007F80
3102003F000000007F80001FC00000007F80000FE00000007F800007F00000007F800007F800
310300007F800003F80000007F800003FC0000007F800001FC0000007F800001FE0000007F80
31040001FE0000007F800001FE0000007F800001FF0000007F800001FF0000007F800001FF00
310500007F800001FF0000007F800001FF8000007F800001FF8000007F800001FF8000007F80
31060001FF8000007F800001FFC004007F800001FFC00E007F800001FFC00E007F800000FFC0
31070E007F800000FFE00E007F8000007FE01E01FFE000007FE01CFFFFFFC0003FF01CFFFFFF
3108C0001FF838FFFFFFC00007F870000000000001FFE00000000000003F803F407DBD43>82
3109D<0007FC000C001FFF801C007FFFF03C01FC03F83C03F0007E7C07C0001FFC0F80000FFC
31101F800007FC3F000003FC3E000001FC7E000000FC7E000000FC7C0000007CFC0000007CFC
31110000007CFC0000003CFC0000003CFC0000003CFE0000001CFE0000001CFF0000001CFF00
311200001C7F800000007FC00000007FE00000003FF80000003FFF8000001FFFF800000FFFFF
3113800007FFFFF00003FFFFFC0001FFFFFF0000FFFFFFC0003FFFFFE00007FFFFF000007FFF
3114F0000007FFF80000007FFC0000000FFC00000007FE00000003FE00000001FE00000000FF
311500000000FFE00000007FE00000007FE00000007FE00000003FE00000003FF00000003FF0
31160000003FF00000003FF00000003EF80000003EF80000007EFC0000007CFE000000FCFF00
31170000F8FF800001F8FFC00003F0FFE00007E0F9FC000FC0F07F803F80F01FFFFE00E007FF
3118F800C0007FC00028427BBF33>I<3FFFFFFFFFFFFF803FFFFFFFFFFFFF803FFFFFFFFFFF
3119FF803FF0007FE001FF803F80003FC0003F807F00003FC0001FC07E00003FC00007C07C00
3120003FC00007C07800003FC00003C07800003FC00003C07800003FC00003C07000003FC000
312101C07000003FC00001C07000003FC00001C07000003FC00001C07000003FC00001C0E000
3122003FC00000E0E000003FC00000E0E000003FC00000E0E000003FC00000E0E000003FC000
312300E00000003FC00000000000003FC00000000000003FC00000000000003FC00000000000
3124003FC00000000000003FC00000000000003FC00000000000003FC00000000000003FC000
312500000000003FC00000000000003FC00000000000003FC00000000000003FC00000000000
3126003FC00000000000003FC00000000000003FC00000000000003FC00000000000003FC000
312700000000003FC00000000000003FC00000000000003FC00000000000003FC00000000000
3128003FC00000000000003FC00000000000003FC00000000000003FC00000000000003FC000
312900000000003FC00000000000003FC00000000000003FC00000000000003FC00000000000
3130003FC00000000000003FC00000000000003FC00000000000003FC00000000000007FE000
31310000000000FFF00000000007FFFFFFFE00000007FFFFFFFE00000007FFFFFFFE00003B3D
31327DBC42>I<FFFFFFC000FFFFF8FFFFFFC000FFFFF8FFFFFFC000FFFFF801FFE0000007FF
313300007F80000001FC00007F80000000F800007F800000007000007F800000007000007F80
31340000007000007F800000007000007F800000007000007F800000007000007F8000000070
313500007F800000007000007F800000007000007F800000007000007F800000007000007F80
31360000007000007F800000007000007F800000007000007F800000007000007F8000000070
313700007F800000007000007F800000007000007F800000007000007F800000007000007F80
31380000007000007F800000007000007F800000007000007F800000007000007F8000000070
313900007F800000007000007F800000007000007F800000007000007F800000007000007F80
31400000007000007F800000007000007F800000007000007F800000007000007F8000000070
314100007F800000007000007F800000007000007F800000007000007F800000007000007F80
31420000007000007F800000007000003F80000000F000003FC0000000E000003FC0000000E0
314300003FC0000001E000001FC0000001C000001FE0000001C000000FE0000003C000000FF0
314400000780000007F000000700000003F800000F00000001FC00001E00000000FE00003C00
31450000007F0000F8000000003F8001F0000000000FF00FE00000000003FFFF800000000000
3146FFFE0000000000001FF00000003D407DBD44>I<FFFFFF00000FFFFEFFFFFF00000FFFFE
3147FFFFFF00000FFFFE03FFE0000001FFE001FF800000007F8000FF800000003F00007F8000
314800003E00007F800000001C00007FC00000003C00003FC00000003800003FC00000003800
3149003FE00000007800001FE00000007000001FE00000007000000FF0000000E000000FF000
31500000E000000FF8000001E0000007F8000001C0000007F8000001C0000007FC000003C000
31510003FC00000380000003FC00000380000001FE00000700000001FE00000700000001FF00
3152000700000000FF00000E00000000FF00000E00000000FF80001E000000007F80001C0000
315300007F80001C000000007FC0003C000000003FC00038000000003FC00038000000001FE0
31540070000000001FE00070000000001FF000F0000000000FF000E0000000000FF000E00000
315500000FF801E00000000007F801C00000000007F801C00000000003FC03800000000003FC
315603800000000003FE07800000000001FE07000000000001FE07000000000001FF0F000000
3157000000FF0E000000000000FF0E0000000000007F9C0000000000007F9C0000000000007F
3158DC0000000000003FF80000000000003FF80000000000003FF80000000000001FF0000000
31590000001FF00000000000001FF00000000000000FE00000000000000FE000000000000007
3160C000000000000007C000000000000007C000000000000003800000003F407EBD44>I<FF
3161FFFE007FFFFF8007FFFFFFFFFE007FFFFF8007FFFFFFFFFE007FFFFF8007FFFF03FFC000
316201FFE00000FFF801FF000000FFC000003FE001FF0000007F8000000F8000FF0000007F80
316300000F8000FF0000007FC000000F0000FF8000003FC000000F00007F8000003FC000000E
316400007F8000003FE000000E00007F8000003FE000000E00003FC000003FE000001C00003F
3165C000003FE000001C00003FC000007FF000001C00001FE000007FF000003800001FE00000
31667FF000003800001FE00000E7F800003800000FF00000E7F800007000000FF00000E7F800
3167007000000FF00001C3FC00007000000FF80001C3FC0000F0000007F80001C3FC0000E000
31680007F80003C3FE0000E0000007FC000381FE0001E0000003FC000381FE0001C0000003FC
3169000781FF0001C0000003FC000700FF0001C0000001FE000700FF000380000001FE000700
3170FF000380000001FE000E007F800380000000FF000E007F800700000000FF000E007F8007
317100000000FF001C003FC007000000007F801C003FC00E000000007F801C003FC00E000000
3172007F8038001FE00E000000007FC038001FE01E000000003FC038001FE01C000000003FC0
317378001FF01C000000003FE070000FF03C000000001FE070000FF038000000001FE0F0000F
3174F838000000001FE0E00007F838000000000FF0E00007F870000000000FF0E00007F87000
31750000000FF1C00003FC700000000007F9C00003FCE00000000007F9C00003FCE000000000
317607FB800001FEE00000000003FF800001FFC00000000003FF800001FFC00000000003FF00
31770000FFC00000000003FF000000FFC00000000001FF000000FF800000000001FF000000FF
3178800000000001FE0000007F800000000000FE0000007F000000000000FE0000007F000000
3179000000FC0000003F0000000000007C0000003E0000000000007C0000003E000000000000
3180780000001E000000000000380000001C00000058407EBD5D>I<FFFCFFFCFFFCFFFCF000
3181F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
3182F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
3183F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
3184F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000
3185F000F000F000F000F000F000F000F000F000F000FFFCFFFCFFFCFFFC0E5B77C319>91
3186D<018000C0038001C003000180070003800E0007001C000E0018000C0038001C00300018
31870070003800600030006000300060003000E0007000C0006000C0006000C0006000C00060
318800CF006780FFC07FE0FFE07FF0FFE07FF0FFE07FF07FE03FF07FE03FF03FE01FF03FC01F
3189E00F0007801C1C73BE2D>I<FFFCFFFCFFFCFFFC003C003C003C003C003C003C003C003C
3190003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C
3191003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C
3192003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C
3193003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C003C
3194003C003C003CFFFCFFFCFFFCFFFC0E5B7FC319>I<000FF800000000FFFE00000003F01F
3195800000078007E000000F8003F000000FE001F800001FF001FC00001FF000FE00001FF000
3196FE00001FF000FE00001FF0007F00000FE0007F00000380007F00000000007F0000000000
31977F00000000007F00000000007F000000001FFF00000003FFFF0000001FF87F0000007F80
31987F000001FC007F000007F8007F00000FE0007F00001FC0007F00003F80007F00003F8000
31997F00007F00007F00007F00007F0380FE00007F0380FE00007F0380FE00007F0380FE0000
3200FF0380FE0000FF0380FE0000FF03807F0001FF03807F0003BF03803F80071F87001FC00E
32011FCF0007F03C0FFE0001FFF807FC00003FC001F000292A7DA82D>97
3202D<01FC00000000FFFC00000000FFFC00000000FFFC0000000007FC0000000003FC000000
32030001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
32040001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
32050001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC03FC00
32060001FC1FFF800001FC7C07E00001FDE001F00001FFC000FC0001FF80007E0001FF00003F
32070001FE00003F8001FC00001F8001FC00001FC001FC00000FE001FC00000FE001FC00000F
3208F001FC00000FF001FC000007F001FC000007F801FC000007F801FC000007F801FC000007
3209F801FC000007F801FC000007F801FC000007F801FC000007F801FC000007F801FC000007
3210F801FC000007F001FC000007F001FC00000FF001FC00000FF001FC00000FE001FC00001F
3211E001FC00001FC001FE00001F8001FE00003F0001FF00007F0001FF8000FE0001F3C001F8
32120001F1E003F00001E0780FC00001C03FFF0000000007F800002D407EBE33>I<0001FF00
321300000FFFE000003F00F800007C001E0001F8001F0003F0007F0007F000FF800FE000FF80
32140FC000FF801FC000FF801FC000FF803F80007F003F80001C007F800000007F800000007F
321500000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00
3216000000FF00000000FF00000000FF00000000FF000000007F800000007F800000007F8000
321700003F800001C03FC00001C01FC00003C01FC00003800FE000078007F000070003F0000E
32180001F8001E0000FC007800003F01F000000FFFC0000001FE0000222A7DA828>I<000000
321901FC00000000FFFC00000000FFFC00000000FFFC0000000007FC0000000003FC00000000
322001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00000000
322101FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00000000
322201FC0000000001FC0000000001FC0000000001FC0000000001FC000000FF01FC000007FF
3223E1FC00001F80F9FC00007E003DFC0000FC001FFC0003F80007FC0007F00007FC0007E000
322403FC000FC00001FC001FC00001FC003FC00001FC003F800001FC007F800001FC007F8000
322501FC007F000001FC007F000001FC00FF000001FC00FF000001FC00FF000001FC00FF0000
322601FC00FF000001FC00FF000001FC00FF000001FC00FF000001FC00FF000001FC00FF0000
322701FC007F000001FC007F800001FC007F800001FC003F800001FC003F800001FC001FC000
322801FC000FC00003FC000FE00003FC0007E00007FC0003F0000FFE0001F8001FFF00007C00
322979FFF8003F01F1FFF8000FFFC1FFF80001FE01FC002D407DBE33>I<0001FE0000000FFF
3230C000003F03F00000FC01F80001F800FC0003F0007E0007E0003F000FE0003F800FC0001F
3231801FC0001FC03F80000FC03F80000FC07F80000FC07F80000FE07F00000FE07F00000FE0
3232FF00000FE0FF00000FE0FFFFFFFFE0FFFFFFFFE0FF00000000FF00000000FF00000000FF
323300000000FF00000000FF000000007F000000007F000000007F800000003F800000003F80
32340000E01FC00000E01FC00001E00FC00001C007E00003C007F000078003F800070000FC00
32351E00007E003C00001F80F8000007FFE0000000FF0000232A7EA828>I<00001FC000007F
3236F80001F83C0007E07E000FC0FF001FC1FF003F81FF003F01FF007F01FF007F00FE00FE00
32377C00FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00
32380000FE000000FE000000FE000000FE000000FE0000FFFFFF00FFFFFF00FFFFFF0000FE00
32390000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00
32400000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00
32410000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE00
32420000FE000000FE000000FE000000FE000001FF00007FFFFF007FFFFF007FFFFF0020407E
3243BF1C>I<000000007C000003F801FF00001FFF078F80007E0FDE1F8000F803F81F8003F0
324401F81F8003F001F81F8007E000FC06000FE000FE00000FC0007E00001FC0007F00001FC0
3245007F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0007F00001FC0
3246007F00000FC0007E00000FE000FE000007E000FC000003F001F8000003F001F8000001F8
324703E0000003FE0FC00000071FFF0000000703F80000000600000000000E00000000000E00
3248000000000E00000000000F00000000000F00000000000F80000000000FC00000000007FF
3249FFE0000007FFFFFE000003FFFFFF800001FFFFFFE00000FFFFFFF00003FFFFFFF8000FC0
3250001FFC001F000001FE003E000000FE007C0000007E007C0000003F00F80000003F00F800
325100001F00F80000001F00F80000001F00F80000001F00FC0000003F007C0000003E007E00
325200007E003F000000FC001F800001F8000FC00003F00003F0000FC00000FE007F0000003F
3253FFFC00000003FFC00000293D7EA82D>I<01FC00000000FFFC00000000FFFC00000000FF
3254FC0000000007FC0000000003FC0000000001FC0000000001FC0000000001FC0000000001
3255FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001
3256FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001
3257FC0000000001FC0000000001FC01FE000001FC07FFC00001FC1E07E00001FC7803F00001
3258FCE001F80001FDC001FC0001FD8001FC0001FF8000FE0001FF0000FE0001FF0000FE0001
3259FE0000FE0001FE0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001
3260FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001
3261FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001
3262FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001
3263FC0000FE0001FC0000FE0003FE0001FF00FFFFF87FFFFCFFFFF87FFFFCFFFFF87FFFFC2E
32643F7DBE33>I<01E00007F80007F8000FFC000FFC000FFC000FFC0007F80007F80001E000
3265000000000000000000000000000000000000000000000000000000000000000000000000
326601FC007FFC007FFC007FFC0007FC0003FC0001FC0001FC0001FC0001FC0001FC0001FC00
326701FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00
326801FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00
326903FE00FFFFF0FFFFF0FFFFF0143E7DBD1A>I<0000780001FE0001FE0003FF0003FF0003
3270FF0003FF0001FE0001FE0000780000000000000000000000000000000000000000000000
32710000000000000000000000000000007F007FFF007FFF007FFF0001FF0000FF00007F0000
32727F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0000
32737F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0000
32747F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0000
32757F00007F00007F00007F3E007F7F007FFF807EFF80FEFF80FEFF80FCFF81F87F01F87C03
3276F01E07C00FFF8001FC00185185BD1C>I<01FC00000000FFFC00000000FFFC00000000FF
3277FC0000000007FC0000000003FC0000000001FC0000000001FC0000000001FC0000000001
3278FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001
3279FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001
3280FC0000000001FC0000000001FC0000000001FC00FFFF8001FC00FFFF8001FC00FFFF8001
3281FC003FFC0001FC003FE00001FC003F800001FC003F000001FC003C000001FC0078000001
3282FC00F0000001FC01E0000001FC07C0000001FC0F80000001FC1F00000001FC3E00000001
3283FC7F00000001FCFF80000001FDFF80000001FFDFC0000001FF9FE0000001FF0FE0000001
3284FE07F0000001FC07F8000001F803FC000001F801FC000001F801FE000001F800FF000001
3285F8007F000001F8007F800001F8003FC00001F8001FC00001F8001FE00001F8000FF00001
3286F8000FF00001F8000FF80003FC000FFE00FFFFF07FFFE0FFFFF07FFFE0FFFFF07FFFE02B
32873F7EBE30>I<01FC00FFFC00FFFC00FFFC0007FC0003FC0001FC0001FC0001FC0001FC00
328801FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00
328901FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00
329001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00
329101FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00
329201FC0003FE00FFFFF8FFFFF8FFFFF8153F7DBE1A>I<01F801FE0000FF0000FFF807FFC0
329303FFE000FFF81E07E00F03F000FFF87803F03C01F80007F8E001F87000FC0003F9C001FC
3294E000FE0001F98001FCC000FE0001FB8000FFC0007F0001FB0000FF80007F0001FF0000FF
329580007F0001FE0000FF00007F0001FE0000FF00007F0001FC0000FE00007F0001FC0000FE
329600007F0001FC0000FE00007F0001FC0000FE00007F0001FC0000FE00007F0001FC0000FE
329700007F0001FC0000FE00007F0001FC0000FE00007F0001FC0000FE00007F0001FC0000FE
329800007F0001FC0000FE00007F0001FC0000FE00007F0001FC0000FE00007F0001FC0000FE
329900007F0001FC0000FE00007F0001FC0000FE00007F0001FC0000FE00007F0001FC0000FE
330000007F0001FC0000FE00007F0001FC0000FE00007F0001FC0000FE00007F0001FC0000FE
330100007F0001FC0000FE00007F0001FC0000FE00007F0003FE0001FF0000FF80FFFFF87FFF
3302FC3FFFFEFFFFF87FFFFC3FFFFEFFFFF87FFFFC3FFFFE47287DA74C>I<01F801FE0000FF
3303F807FFC000FFF81E07E000FFF87803F00007F8E001F80003F9C001FC0001F98001FC0001
3304FB8000FE0001FB0000FE0001FF0000FE0001FE0000FE0001FE0000FE0001FC0000FE0001
3305FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001
3306FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001
3307FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001
3308FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0003FE0001FF00FF
3309FFF87FFFFCFFFFF87FFFFCFFFFF87FFFFC2E287DA733>I<0000FF00000007FFE000001F
331081F800007E007E0000F8001F0001F0000F8003E00007C007C00003E00FC00003F01F8000
331101F81F800001F83F800001FC3F800001FC7F000000FE7F000000FE7F000000FE7F000000
3312FEFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FF
3313FF000000FFFF000000FF7F000000FE7F000000FE7F000000FE3F800001FC3F800001FC3F
3314800001FC1F800001F80FC00003F00FC00003F007E00007E003F0000FC001F8001F80007E
3315007E00003F81FC00000FFFF0000000FF0000282A7EA82D>I<01FC03FC0000FFFC1FFF80
331600FFFC7C0FE000FFFDE003F00003FFC001FC0001FF8000FE0001FF00007F0001FE00003F
33178001FC00003F8001FC00001FC001FC00001FE001FC00001FE001FC00000FF001FC00000F
3318F001FC00000FF001FC000007F801FC000007F801FC000007F801FC000007F801FC000007
3319F801FC000007F801FC000007F801FC000007F801FC000007F801FC000007F801FC00000F
3320F001FC00000FF001FC00000FF001FC00000FF001FC00001FE001FC00001FE001FC00003F
3321C001FE00003F8001FE00007F0001FF00007F0001FF8000FE0001FFC001F80001FDE007F0
33220001FC780FC00001FC3FFF000001FC07F8000001FC0000000001FC0000000001FC000000
33230001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
33240001FC0000000001FC0000000001FC0000000001FC0000000003FE00000000FFFFF80000
332500FFFFF8000000FFFFF80000002D3A7EA733>I<0000FF001C000007FFC03C00001F80F0
33263C00007F00387C0000FC001C7C0003F8000E7C0007F0000FFC0007F00007FC000FE00003
3327FC001FE00003FC003FC00003FC003FC00001FC007F800001FC007F800001FC007F800001
3328FC007F800001FC00FF000001FC00FF000001FC00FF000001FC00FF000001FC00FF000001
3329FC00FF000001FC00FF000001FC00FF000001FC00FF000001FC00FF000001FC007F800001
3330FC007F800001FC007F800001FC003FC00001FC003FC00001FC001FC00003FC000FE00003
3331FC000FE00007FC0007F0000FFC0003F8000FFC0001FC003DFC00007E0079FC00003F81F1
3332FC00000FFFC1FC000001FE01FC0000000001FC0000000001FC0000000001FC0000000001
3333FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001
3334FC0000000001FC0000000001FC0000000001FC0000000003FE00000000FFFFF8000000FF
3335FFF8000000FFFFF82D3A7DA730>I<01F807E0FFF81FF8FFF8787CFFF8E1FE07F9C1FE03
3336F981FE01FB81FE01FB01FE01FB00FC01FF003001FE000001FE000001FE000001FC000001
3337FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001
3338FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001
3339FC000001FC000001FC000001FC000003FE0000FFFFFE00FFFFFE00FFFFFE001F287EA724
3340>I<003FC06001FFF8E007C03FE01F000FE03E0007E03C0003E07C0003E0780001E0F800
334101E0F80000E0F80000E0FC0000E0FE0000E0FF0000E0FF8000007FF800007FFFC0003FFF
3342F8001FFFFE000FFFFF0007FFFF8001FFFFC0003FFFE00003FFF000001FF000000FF8E000
334303F8E00003F8E00001F8F00001F8F00000F8F00000F8F80000F8F80000F0FC0000F0FC00
334401F0FE0001E0FF0003C0FF800780F3E01F00E0FFFC00C01FE0001D2A7DA824>I<001C00
334500001C0000001C0000001C0000001C0000001C0000003C0000003C0000003C0000003C00
334600007C0000007C000000FC000000FC000001FC000003FC000007FC00001FFFFFC0FFFFFF
3347C0FFFFFFC001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00
33480001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00
33490001FC000001FC000001FC000001FC00E001FC00E001FC00E001FC00E001FC00E001FC00
3350E001FC00E001FC00E001FC00E000FC00E000FE01C000FE01C0007F03C0003F0380001F87
3351000007FE000001F8001B397EB723>I<01FC0000FE00FFFC007FFE00FFFC007FFE00FFFC
3352007FFE0007FC0003FE0003FC0001FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC
33530000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC
33540000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC
33550000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC0000FE0001FC
33560000FE0001FC0000FE0001FC0001FE0001FC0001FE0001FC0001FE0001FC0003FE0000FC
33570003FE0000FC0007FE0000FE0006FF00007E000EFF80003F001CFFFC001FC078FFFC0007
3358FFE0FFFC0000FF80FE002E297DA733>I<FFFFE00FFFE0FFFFE00FFFE0FFFFE00FFFE007
3359FE0003FF0003FC0000FC0003FC0000F80001FC0000F00001FE0000F00000FE0000E00000
3360FE0000E00000FF0001E000007F0001C000007F0001C000003F80038000003F8003800000
33613FC0078000001FC0070000001FC0070000000FE00E0000000FE00E0000000FF01E000000
336207F01C00000007F01C00000003F83800000003F83800000003FC7800000001FC70000000
336301FC7000000001FEF000000000FEE000000000FEE0000000007FC0000000007FC0000000
3364007FC0000000003F80000000003F80000000001F00000000001F00000000001F00000000
3365000E0000002B287EA630>I<FFFFC3FFFE03FFF8FFFFC3FFFE03FFF8FFFFC3FFFE03FFF8
33660FFE003FE000FFC007FC001FC0003F8003F8001FC0003F0003FC000FC0001E0001FC000F
3367E0001C0001FC0007E0001C0001FE0007E0003C0000FE000FF000380000FE000FF0003800
3368007F000FF0007000007F001FF8007000007F001DF8007000003F801DF800E000003F803D
3369FC00E000003F8038FC00E000001FC038FC01C000001FC078FE01C000001FC0707E03C000
3370000FE0707F038000000FE0E03F038000000FF0E03F0780000007F0E03F8700000007F1C0
33711F8700000007F9C01F8F00000003F9C01FCE00000003FB800FCE00000003FF800FDE0000
33720001FF800FFC00000001FF0007FC00000000FF0007F800000000FF0007F800000000FE00
337303F8000000007E0003F0000000007E0003F0000000007C0001F0000000003C0001E00000
33740000380000E000003D287EA642>I<FFFFF01FFFE0FFFFF01FFFE0FFFFF01FFFE003FFC0
33750FFF0000FF8007F800007F0007E000007F8007C000003FC0078000001FC00F0000000FE0
33760E0000000FF01E00000007F83C00000003F87800000001FCF000000001FEE000000000FF
3377E0000000007FC0000000003F80000000003FC0000000001FC0000000001FE0000000003F
3378F0000000003FF8000000007BF800000000F1FC00000001E1FE00000001C0FF00000003C0
33797F00000007803F8000000F003FC000001E001FE000003E000FE000007C0007F00000FC00
338007F80001FE0007FC000FFE000FFE00FFFF803FFFF8FFFF803FFFF8FFFF803FFFF82D277F
3381A630>I<FFFFE00FFFE0FFFFE00FFFE0FFFFE00FFFE007FE0003FF0003FC0001FC0003FC
33820000F80001FC0000F00001FE0000F00000FE0000E00000FE0000E000007F0001C000007F
33830001C000007F8003C000003F80038000003F80038000001FC0070000001FC0070000001F
3384E00F0000000FE00E0000000FE00E00000007F01C00000007F01C00000007F83C00000003
3385F83800000003F83800000001FC7000000001FC7000000001FEF000000000FEE000000000
3386FEE0000000007FC0000000007FC0000000007FC0000000003F80000000003F8000000000
33873F80000000001F00000000001F00000000000E00000000000E00000000001E0000000000
33881C00000000003C0000000000380000000000380000000000780000001800700000007E00
338970000000FF00E0000000FF00E0000000FF01C0000000FF01C0000000FE03800000007E07
339000000000780E000000003C3C000000001FF80000000007E0000000002B3A7EA630>I<1F
3391FFFFFF801FFFFFFF801FE000FF801F8000FF001F0001FE001E0003FC001C0003FC001C00
339207F8003C000FF0003C001FF00038001FE00038003FC00038007FC00038007F80003800FF
339300000001FE00000001FE00000003FC00000007F80000000FF80000000FF00000001FE000
339400003FC00380003FC00380007F80038000FF00038001FF00038001FE00038003FC000780
339507FC00078007F80007000FF00007001FE0000F001FE0000F003FC0001F007F80007F00FF
33968001FF00FFFFFFFF00FFFFFFFF0021277EA628>I<FFFFFFFFFFFFFFFFFFFFFFC0FFFFFF
3397FFFFFFFFFFFFFFFFC05A0280985B>124 D E /Fq 45 122 df<00000000FFFC00000000
339800001FFFFF800000000001FFFFFFE00000000007FFFFFFF0000000001FFFC00FF8000000
3399007FFE0003FC00000000FFF00000FE00000001FFE00003FF00000003FF800007FF000000
340007FF00000FFF8000000FFE00001FFF8000000FFE00001FFF8000001FFC00001FFF800000
34011FFC00003FFFC000003FFC00001FFF8000003FF800001FFF8000003FF800001FFF800000
34023FF800001FFF8000003FF800000FFF0000003FF8000007FE0000003FF8000001F8000000
34033FF8000000000000003FF8000000000000003FF8000000000000003FF800000000000000
34043FF8000000000000003FF8000000000000003FF8000000000000003FF800000000000000
34053FF8000000000000003FF80003FFFFC000FFFFFFFFFFFFFFC000FFFFFFFFFFFFFFC000FF
3406FFFFFFFFFFFFC000FFFFFFFFFFFFFFC000FFFFFFFFFFFFFFC000003FFC000007FFC00000
34073FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC00000
34083FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC00000
34093FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC00000
34103FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC00000
34113FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC00000
34123FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC00000
34133FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC00000
34143FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC00000
34153FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC00000
34163FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC00000
34173FFC000003FFC000003FFC000003FFC0003FFFFFFC03FFFFFFC03FFFFFFC03FFFFFFC03F
3418FFFFFC03FFFFFFC03FFFFFFC03FFFFFFC03FFFFFFC03FFFFFFC042547DD34B>12
3419D<FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0
3420FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0240B7F9F2D>45
3421D<000000780000000000FC0000000003FC0000000007FC000000001FFC00000000FFFC00
342200000FFFFC000007FFFFFC0000FFFFFFFC0000FFFFFFFC0000FFFF7FFC0000FFF07FFC00
342300F8007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00
34240000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00
34250000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00
34260000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00
34270000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00
34280000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00
34290000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00
34300000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00
34310000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00
34320000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00
34330000007FFC00007FFFFFFFFFFE7FFFFFFFFFFE7FFFFFFFFFFE7FFFFFFFFFFE7FFFFFFFFF
3434FE2F4E76CD43>49 D<00003FFE0000000003FFFFE00000000FFFFFFC0000003FFFFFFF00
34350000FFFFFFFFC00001FFC07FFFE00003FE000FFFF80007F80003FFFC000FE00001FFFE00
34361FC00000FFFF003F8000007FFF003FF000007FFF807FF800003FFFC07FFC00003FFFC0FF
3437FE00001FFFE0FFFF00001FFFE0FFFF00001FFFE0FFFF00000FFFF0FFFF00000FFFF0FFFF
343800000FFFF0FFFF00000FFFF0FFFF00000FFFF07FFE00000FFFF07FFE00000FFFF03FFC00
3439000FFFF00FF000000FFFF003C000000FFFF0000000000FFFE0000000001FFFE000000000
34401FFFE0000000001FFFC0000000003FFFC0000000003FFF80000000003FFF80000000007F
3441FF00000000007FFE0000000000FFFC0000000001FFF80000000001FFF00000000003FFE0
34420000000003FFC00000000007FF80000000000FFF00000000001FFE00000000001FFC0000
34430000003FF800000000007FE00000000000FFC00000000001FF800000000003FE00000000
34440007FC000000000007F800000000000FF00001F000001FE00001F000003F800001F00000
34457F000001F00000FE000003E00001FC000003E00003F8000003E00007F0000003E0000FE0
3446000003E0001F80000007E0003F00000007E0003E0000000FE0007FFFFFFFFFE000FFFFFF
3447FFFFC001FFFFFFFFFFC003FFFFFFFFFFC007FFFFFFFFFFC00FFFFFFFFFFFC01FFFFFFFFF
3448FFC03FFFFFFFFFFFC07FFFFFFFFFFFC0FFFFFFFFFFFFC0FFFFFFFFFFFF80FFFFFFFFFFFF
344980FFFFFFFFFFFF80FFFFFFFFFFFF80344E79CD43>I<00000FFFC000000000FFFFFC0000
34500007FFFFFF8000001FFFFFFFE000003FF807FFF00000FF8001FFFC0001FE00007FFE0003
3451F800003FFF0003F000003FFF8007FC00001FFF800FFF00001FFFC00FFF80001FFFC01FFF
3452C0001FFFE01FFFC0001FFFE01FFFC0001FFFE01FFFC0001FFFE01FFFE0001FFFE01FFFC0
3453001FFFE01FFFC0001FFFE01FFFC0001FFFE00FFFC0001FFFC007FF80001FFFC003FF0000
34543FFFC001FC00003FFF80000000003FFF80000000007FFF00000000007FFE00000000007F
3455FE0000000000FFFC0000000001FFF80000000003FFF00000000007FFC0000000000FFF80
345600000000FFFE00000000FFFFF800000000FFFFE000000000FFFFFC00000000FFFFFF8000
345700000007FFE00000000001FFF800000000007FFE00000000003FFF00000000001FFF8000
34580000000FFFC0000000000FFFE00000000007FFF00000000007FFF00000000007FFF80000
3459000007FFF80000000003FFFC0000000003FFFC0000000003FFFE0000000003FFFE03E000
34600003FFFE0FF8000003FFFE1FFC000003FFFE3FFE000003FFFE7FFF000003FFFEFFFF8000
346103FFFEFFFF800003FFFEFFFF800003FFFEFFFF800003FFFCFFFF800003FFFCFFFF800007
3462FFFCFFFF800007FFF8FFFF000007FFF87FFF000007FFF07FFE00000FFFF03FFC00000FFF
3463E03FF000001FFFC01FE000003FFF800FF800007FFF0007FF0000FFFE0003FFF007FFFC00
346400FFFFFFFFF000007FFFFFFFE000001FFFFFFF80000003FFFFFC000000001FFF80000037
34654F7ACD43>I<00000000007C00000000000000FE00000000000000FE00000000000001FE
346600000000000003FE00000000000007FE0000000000000FFE0000000000000FFE00000000
346700001FFE0000000000003FFE0000000000007FFE0000000000007FFE000000000000FFFE
3468000000000001FFFE000000000003FFFE000000000003FFFE000000000007FFFE00000000
3469000FFFFE00000000001FBFFE00000000003F3FFE00000000003E3FFE00000000007C3FFE
34700000000000FC3FFE0000000001F83FFE0000000001F03FFE0000000003E03FFE00000000
347107E03FFE000000000FC03FFE000000000F803FFE000000001F003FFE000000003F003FFE
3472000000007E003FFE000000007C003FFE00000000F8003FFE00000001F8003FFE00000003
3473F0003FFE00000007E0003FFE00000007C0003FFE0000000F80003FFE0000001F80003FFE
34740000003F00003FFE0000003E00003FFE0000007C00003FFE000000FC00003FFE000001F8
347500003FFE000001F000003FFE000003E000003FFE000007E000003FFE00000FC000003FFE
347600001F8000003FFE00001F0000003FFE00003E0000003FFE00007E0000003FFE0000FC00
347700003FFE0000FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC0FFFFFFFFFFFF
3478FFC0FFFFFFFFFFFFFFC0000000007FFE0000000000007FFE0000000000007FFE00000000
347900007FFE0000000000007FFE0000000000007FFE0000000000007FFE0000000000007FFE
34800000000000007FFE0000000000007FFE0000000000007FFE0000000000007FFE00000000
348100007FFE0000000000007FFE0000000000007FFE000000000FFFFFFFFFC000000FFFFFFF
3482FFC000000FFFFFFFFFC000000FFFFFFFFFC000000FFFFFFFFFC03A4F7CCE43>I<038000
348300000E0007E00000007E0007FE000003FE0007FFF0007FFE0007FFFFFFFFFC0007FFFFFF
3484FFF80007FFFFFFFFF00007FFFFFFFFE00007FFFFFFFFC00007FFFFFFFF800007FFFFFFFF
3485000007FFFFFFFE000007FFFFFFFC000007FFFFFFF0000007FFFFFFC0000007FFFFFF0000
34860007FFFFF800000007E1FF0000000007E0000000000007E0000000000007E00000000000
348707E0000000000007E0000000000007E0000000000007E0000000000007E0000000000007
3488E0000000000007E0000000000007E0000000000007E00FFF00000007E07FFFF0000007E3
3489FFFFFE000007E7FFFFFF800007FFF807FFC00007FFC001FFE00007FE0000FFF80007FC00
3490007FFC0007F800003FFC0007F000003FFE0007E000001FFF0003C000001FFF8000000000
34911FFF80000000001FFFC0000000000FFFC0000000000FFFE0000000000FFFE0000000000F
3492FFE0000000000FFFE0000000000FFFF0000000000FFFF0000000000FFFF00FE000000FFF
3493F01FF000000FFFF03FF800000FFFF07FFC00000FFFF0FFFE00000FFFF0FFFE00000FFFF0
3494FFFE00000FFFF0FFFE00000FFFF0FFFE00000FFFE0FFFE00000FFFE0FFFE00000FFFE0FF
3495FC00000FFFE07FF800001FFFC07FF000001FFFC07FE000001FFF803E0000003FFF803F00
349600003FFF001F8000007FFE001FC000007FFC000FE00000FFF80007F80001FFF00003FE00
349707FFE00001FFC03FFFC00000FFFFFFFF8000003FFFFFFE0000001FFFFFF800000003FFFF
3498C0000000007FF8000000344F79CD43>I<0000000FFF0000000000FFFFE000000007FFFF
3499F00000001FFFFFFC0000007FFE03FE000001FFF0007F000003FFC0003F800007FF00001F
350080000FFE00007FC0001FFC0000FFC0003FF80001FFE0007FF00003FFE000FFF00007FFE0
350101FFE00007FFE001FFE00007FFE003FFC00007FFE007FFC00007FFE007FFC00007FFE00F
3502FFC00003FFC00FFF800001FF801FFF800000FF001FFF8000007E001FFF80000000003FFF
350380000000003FFF80000000003FFF00000000007FFF00000000007FFF00000000007FFF00
3504080000007FFF01FFF800007FFF07FFFF0000FFFF0FFFFFC000FFFF1FFFFFF000FFFF3F00
35057FF800FFFF3C003FFC00FFFF78001FFE00FFFFF0000FFF00FFFFF00007FF80FFFFE00007
3506FFC0FFFFE00007FFC0FFFFC00007FFE0FFFFC00003FFF0FFFF800003FFF0FFFF800003FF
3507F8FFFF800003FFF8FFFF800003FFF8FFFF800003FFF8FFFF000003FFFCFFFF000003FFFC
3508FFFF000003FFFC7FFF000003FFFC7FFF000003FFFC7FFF000003FFFC7FFF000003FFFC7F
3509FF000003FFFC7FFF000003FFFC3FFF000003FFFC3FFF000003FFFC3FFF000003FFFC3FFF
3510000003FFFC1FFF000003FFF81FFF800003FFF81FFF800003FFF80FFF800003FFF80FFF80
35110003FFF007FF800007FFF007FF800007FFE003FFC00007FFC001FFC00007FFC001FFE000
35120FFF8000FFF0000FFF00007FF8001FFE00003FFC007FFC00001FFF01FFF800000FFFFFFF
3513F0000003FFFFFFC0000000FFFFFF000000003FFFFC0000000007FFC00000364F7ACD43>
3514I<1F000000000000001F800000000000001FC00000000000001FFF8000000000001FFFFF
3515FFFFFFFF801FFFFFFFFFFFFF801FFFFFFFFFFFFF801FFFFFFFFFFFFF803FFFFFFFFFFFFF
3516803FFFFFFFFFFFFF003FFFFFFFFFFFFE003FFFFFFFFFFFFC003FFFFFFFFFFFF8003FFFFF
3517FFFFFFF8003FFFFFFFFFFFF0003FFFFFFFFFFFE0003FFFFFFFFFFFC0007FFFFFFFFFFF80
3518007F800000007F00007E00000000FF00007E00000001FE00007C00000003FC00007C0000
35190003F800007C00000007F000007C0000000FF000007C0000001FE00000F80000003FC000
352000F80000007F800000F80000007F000000F8000000FE00000000000001FE000000000000
352103FC00000000000003F800000000000007F00000000000000FF00000000000001FE00000
3522000000001FE00000000000003FC00000000000003FC00000000000007F80000000000000
3523FF80000000000000FF80000000000001FF00000000000001FF00000000000003FF000000
352400000003FE00000000000007FE00000000000007FE0000000000000FFE0000000000000F
3525FE0000000000000FFC0000000000001FFC0000000000001FFC0000000000003FFC000000
35260000003FFC0000000000003FFC0000000000003FFC0000000000007FFC0000000000007F
3527F80000000000007FF80000000000007FF8000000000000FFF8000000000000FFF8000000
3528000000FFF8000000000000FFF8000000000000FFF8000000000001FFF8000000000001FF
3529F8000000000001FFF8000000000001FFF8000000000001FFF8000000000001FFF8000000
3530000001FFF8000000000001FFF8000000000001FFF8000000000001FFF8000000000001FF
3531F8000000000001FFF8000000000000FFF0000000000000FFF00000000000003FC0000000
35320000001F8000000000395279D043>I<000007FFC0000000007FFFFC00000003FFFFFF80
353300000FFFFFFFE000001FFC01FFF800003FE0003FFC00007F80000FFE0000FF000007FF00
353401FE000003FF0003FC000001FF8007FC000001FFC007F8000000FFC00FF8000000FFC00F
3535F8000000FFE00FF80000007FE00FF80000007FE01FF80000007FE01FFC0000007FE01FFC
35360000007FE01FFE0000007FE01FFF0000007FE01FFF800000FFE01FFFE00000FFC01FFFF8
35370000FFC01FFFFE0001FF800FFFFF0001FF800FFFFFC003FF000FFFFFF007FE0007FFFFF8
353807FC0007FFFFFE1FF80003FFFFFFBFF00001FFFFFFFFE00001FFFFFFFF800000FFFFFFFE
35390000007FFFFFFF0000003FFFFFFF8000000FFFFFFFE0000007FFFFFFF0000001FFFFFFFC
3540000007FFFFFFFE00001FFFFFFFFF00003FFFFFFFFF8000FFE7FFFFFF8001FF81FFFFFFC0
354103FF007FFFFFE007FE001FFFFFF00FFC000FFFFFF01FF80003FFFFF01FF80000FFFFF83F
3542F000007FFFF83FF000001FFFF87FE0000007FFFC7FE0000001FFFC7FE0000000FFFCFFC0
35430000007FFCFFC00000003FFCFFC00000003FFCFFC00000001FFCFFC00000001FFCFFC000
354400000FFCFFC00000000FFCFFC00000000FF8FFC00000000FF8FFE00000000FF87FE00000
3545000FF07FF00000001FF07FF00000001FF03FF80000003FE01FF80000003FC01FFC000000
35467FC00FFE000000FF8007FF800003FF0003FFE0000FFE0001FFFC00FFFC00007FFFFFFFF0
354700003FFFFFFFE000000FFFFFFF80000001FFFFFC000000000FFFC00000364F7ACD43>I<
354800000FFF8000000000FFFFF800000003FFFFFE0000000FFFFFFF8000001FFF03FFC00000
35497FF800FFE00000FFF0003FF00001FFE0001FF80003FFC0001FFC0007FFC0000FFE000FFF
355080000FFF000FFF800007FF001FFF800007FF803FFF800007FF803FFF000007FFC07FFF00
35510007FFC07FFF000003FFE07FFF000003FFE07FFF000003FFF0FFFF000003FFF0FFFF0000
355203FFF0FFFF000003FFF0FFFF000003FFF8FFFF000003FFF8FFFF000003FFF8FFFF000003
3553FFF8FFFF000003FFF8FFFF000003FFF8FFFF000003FFFCFFFF000003FFFCFFFF000003FF
3554FCFFFF000003FFFC7FFF000007FFFC7FFF000007FFFC7FFF000007FFFC3FFF000007FFFC
35553FFF000007FFFC3FFF00000FFFFC1FFF80000FFFFC0FFF80001FFFFC0FFF80001FFFFC07
3556FF80003FFFFC03FFC0003FFFFC01FFE0007BFFFC00FFF000F3FFFC007FF803F3FFFC001F
3557FFFFE3FFFC000FFFFFC3FFFC0003FFFF83FFF800007FFE03FFF80000004003FFF8000000
35580003FFF80000000003FFF80000000003FFF00000000007FFF00000000007FFF000000000
355907FFF001F8000007FFE003FC000007FFE007FE000007FFC00FFF000007FFC01FFF80000F
3560FF801FFF80000FFF801FFF80000FFF001FFF80001FFF001FFF80001FFE001FFF80003FFC
3561001FFF00003FFC000FFE00007FF8000FFC0000FFF0000FF80001FFE00007F00003FFC000
356203FC000FFF800003FF807FFE000001FFFFFFFC0000007FFFFFF00000003FFFFFC0000000
35630FFFFE0000000000FFF0000000364F7ACD43>I<00000000001F00000000000000000000
3564003F80000000000000000000007FC0000000000000000000007FC0000000000000000000
356500FFE000000000000000000000FFE000000000000000000000FFE0000000000000000000
356601FFF000000000000000000001FFF000000000000000000003FFF8000000000000000000
356703FFF800000000000000000003FFF800000000000000000007FFFC000000000000000000
356807FFFC00000000000000000007FFFC0000000000000000000FFFFE000000000000000000
35690FFFFE0000000000000000001FFFFF0000000000000000001FFFFF000000000000000000
35701FFFFF0000000000000000003FFFFF8000000000000000003F7FFF800000000000000000
35717F7FFFC000000000000000007E7FFFC000000000000000007E3FFFC00000000000000000
3572FE3FFFE00000000000000000FC1FFFE00000000000000001FC1FFFF00000000000000001
3573F81FFFF00000000000000001F80FFFF00000000000000003F80FFFF80000000000000003
3574F007FFF80000000000000007F007FFFC0000000000000007E007FFFC0000000000000007
3575E003FFFC000000000000000FE003FFFE000000000000000FC001FFFE000000000000001F
3576C001FFFF000000000000001F8001FFFF000000000000001F8000FFFF000000000000003F
35778000FFFF800000000000003F00007FFF800000000000007F00007FFFC00000000000007E
357800007FFFC00000000000007E00003FFFC0000000000000FE00003FFFE0000000000000FC
357900001FFFE0000000000001FC00001FFFF0000000000001F800001FFFF0000000000001F8
358000000FFFF0000000000003F800000FFFF8000000000003F0000007FFF8000000000007F0
3581000007FFFC000000000007E0000007FFFC000000000007E0000003FFFC00000000000FFF
3582FFFFFFFFFE00000000000FFFFFFFFFFFFE00000000001FFFFFFFFFFFFF00000000001FFF
3583FFFFFFFFFF00000000001FFFFFFFFFFFFF00000000003F80000000FFFF80000000003F00
35840000007FFF80000000007F000000007FFFC0000000007F000000007FFFC0000000007E00
35850000003FFFC000000000FE000000003FFFE000000000FC000000001FFFE000000001FC00
35860000001FFFF000000001FC000000001FFFF000000001F8000000000FFFF000000003F800
35870000000FFFF800000003F00000000007FFF800000007F00000000007FFFC00000007F000
358800000007FFFC00000007E00000000003FFFC0000000FE00000000003FFFE0000000FC000
358900000003FFFE0000001FC00000000001FFFF000000FFFC0000000001FFFF0000FFFFFFF8
359000000FFFFFFFFFE0FFFFFFF800000FFFFFFFFFE0FFFFFFF800000FFFFFFFFFE0FFFFFFF8
359100000FFFFFFFFFE0FFFFFFF800000FFFFFFFFFE05B547BD366>65
3592D<0000000001FFFC000001C0000000007FFFFFC00003C000000007FFFFFFF80007C00000
3593003FFFFFFFFE001FC0000000FFFFFFFFFF803FC0000003FFFFE003FFC07FC000000FFFFC
359400003FF0FFC000003FFFE000000FF9FFC000007FFF80000003FFFFC00001FFFE00000000
3595FFFFC00003FFF8000000007FFFC00007FFF0000000003FFFC0000FFFE0000000001FFFC0
3596001FFFC0000000000FFFC0003FFF800000000007FFC0007FFF000000000003FFC000FFFE
3597000000000001FFC000FFFE000000000001FFC001FFFC000000000000FFC003FFF8000000
3598000000FFC003FFF80000000000007FC007FFF00000000000007FC00FFFF0000000000000
35993FC00FFFF00000000000003FC01FFFE00000000000001FC01FFFE00000000000001FC01F
3600FFE00000000000001FC03FFFC00000000000001FC03FFFC00000000000000FC03FFFC000
360100000000000FC07FFFC00000000000000FC07FFFC00000000000000FC07FFFC000000000
3602000000007FFF8000000000000000007FFF800000000000000000FFFF8000000000000000
360300FFFF800000000000000000FFFF800000000000000000FFFF800000000000000000FFFF
3604800000000000000000FFFF800000000000000000FFFF800000000000000000FFFF800000
3605000000000000FFFF800000000000000000FFFF800000000000000000FFFF800000000000
3606000000FFFF800000000000000000FFFF800000000000000000FFFF800000000000000000
36077FFF8000000000000000007FFF8000000000000000007FFFC000000000000000007FFFC0
360800000000000000007FFFC000000000000007C03FFFC000000000000007C03FFFC0000000
360900000007C03FFFC000000000000007C01FFFE000000000000007C01FFFE0000000000000
361007C01FFFE00000000000000FC00FFFF00000000000000F800FFFF00000000000000F8007
3611FFF00000000000001F8003FFF80000000000001F8003FFF80000000000001F0001FFFC00
361200000000003F0000FFFE0000000000007E0000FFFE0000000000007E00007FFF00000000
36130000FC00003FFF800000000001F800001FFFC00000000003F800000FFFE00000000007F0
3614000007FFF0000000000FE0000003FFFC000000001FC0000001FFFE000000007F80000000
36157FFF80000000FF000000003FFFE0000007FE000000000FFFFE00001FF80000000003FFFF
3616E001FFF00000000000FFFFFFFFFFC000000000003FFFFFFFFF00000000000007FFFFFFFC
3617000000000000007FFFFFE00000000000000001FFFC00000000525479D261>67
3618D<FFFFFFFFFFFFFF8000000000FFFFFFFFFFFFFFFC00000000FFFFFFFFFFFFFFFF800000
361900FFFFFFFFFFFFFFFFF0000000FFFFFFFFFFFFFFFFFC0000000007FFF000000FFFFF0000
3620000007FFF0000000FFFFC000000007FFF00000001FFFE000000007FFF000000007FFF800
3621000007FFF000000001FFFC00000007FFF000000000FFFE00000007FFF0000000007FFF00
3622000007FFF0000000003FFF80000007FFF0000000001FFFC0000007FFF0000000000FFFC0
3623000007FFF00000000007FFE0000007FFF00000000003FFF0000007FFF00000000003FFF8
3624000007FFF00000000001FFF8000007FFF00000000001FFFC000007FFF00000000000FFFC
3625000007FFF00000000000FFFE000007FFF00000000000FFFE000007FFF000000000007FFF
3626000007FFF000000000007FFF000007FFF000000000007FFF000007FFF000000000007FFF
3627800007FFF000000000003FFF800007FFF000000000003FFF800007FFF000000000003FFF
3628C00007FFF000000000003FFFC00007FFF000000000003FFFC00007FFF000000000003FFF
3629C00007FFF000000000003FFFC00007FFF000000000003FFFE00007FFF000000000003FFF
3630E00007FFF000000000003FFFE00007FFF000000000001FFFE00007FFF000000000001FFF
3631E00007FFF000000000001FFFE00007FFF000000000001FFFE00007FFF000000000001FFF
3632E00007FFF000000000001FFFE00007FFF000000000001FFFE00007FFF000000000001FFF
3633E00007FFF000000000001FFFE00007FFF000000000003FFFE00007FFF000000000003FFF
3634E00007FFF000000000003FFFE00007FFF000000000003FFFC00007FFF000000000003FFF
3635C00007FFF000000000003FFFC00007FFF000000000003FFFC00007FFF000000000003FFF
3636C00007FFF000000000003FFF800007FFF000000000003FFF800007FFF000000000007FFF
3637800007FFF000000000007FFF000007FFF000000000007FFF000007FFF000000000007FFF
3638000007FFF00000000000FFFE000007FFF00000000000FFFE000007FFF00000000000FFFC
3639000007FFF00000000001FFFC000007FFF00000000001FFF8000007FFF00000000003FFF0
3640000007FFF00000000007FFF0000007FFF00000000007FFE0000007FFF0000000000FFFC0
3641000007FFF0000000001FFF80000007FFF0000000003FFF00000007FFF000000000FFFE00
3642000007FFF000000001FFFC00000007FFF000000007FFF800000007FFF00000001FFFF000
3643000007FFF0000000FFFFC000000007FFF000000FFFFF000000FFFFFFFFFFFFFFFFFE0000
364400FFFFFFFFFFFFFFFFF0000000FFFFFFFFFFFFFFFFC0000000FFFFFFFFFFFFFFFC000000
364500FFFFFFFFFFFFFF80000000005B527CD167>I<FFFFFFFFFFFFFFFFFF80FFFFFFFFFFFF
3646FFFFFF80FFFFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFFFF800007
3647FFF8000001FFFFC00007FFF80000001FFFC00007FFF800000007FFC00007FFF800000001
3648FFC00007FFF800000000FFC00007FFF8000000007FC00007FFF8000000003FC00007FFF8
3649000000001FC00007FFF8000000001FC00007FFF8000000000FE00007FFF8000000000FE0
36500007FFF80000000007E00007FFF80000000007E00007FFF80000000007E00007FFF80000
3651000003E00007FFF80000000003E00007FFF80000000003E00007FFF80000F80003E00007
3652FFF80000F80003F00007FFF80000F80001F00007FFF80000F80001F00007FFF80000F800
365301F00007FFF80000F80001F00007FFF80000F80000000007FFF80001F80000000007FFF8
36540001F80000000007FFF80001F80000000007FFF80003F80000000007FFF80007F8000000
36550007FFF8000FF80000000007FFF8007FF80000000007FFFFFFFFF80000000007FFFFFFFF
3656F80000000007FFFFFFFFF80000000007FFFFFFFFF80000000007FFFFFFFFF80000000007
3657FFF8007FF80000000007FFF8000FF80000000007FFF80007F80000000007FFF80003F800
365800000007FFF80001F80000000007FFF80001F80000000007FFF80001F80000000007FFF8
36590000F80000000007FFF80000F800003E0007FFF80000F800003E0007FFF80000F800003E
36600007FFF80000F800007C0007FFF80000F800007C0007FFF80000F800007C0007FFF80000
36610000007C0007FFF800000000007C0007FFF80000000000FC0007FFF80000000000FC0007
3662FFF80000000000F80007FFF80000000000F80007FFF80000000001F80007FFF800000000
366301F80007FFF80000000001F80007FFF80000000003F80007FFF80000000003F00007FFF8
36640000000007F00007FFF8000000000FF00007FFF8000000000FF00007FFF8000000001FF0
36650007FFF8000000003FF00007FFF8000000007FE00007FFF800000001FFE00007FFF80000
36660007FFE00007FFF80000001FFFE00007FFF8000003FFFFE0FFFFFFFFFFFFFFFFFFE0FFFF
3667FFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFF
3668FFC04F517CD058>I<FFFFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFFFE00FFFFFFFFFFFFFF
3669FFFE00FFFFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFFFE000007FFF8000007FFFF000007FF
3670F80000007FFF000007FFF80000001FFF000007FFF800000007FF000007FFF800000003FF
3671000007FFF800000001FF000007FFF800000000FF000007FFF8000000007F000007FFF800
36720000003F000007FFF8000000003F800007FFF8000000003F800007FFF8000000001F8000
367307FFF8000000001F800007FFF8000000001F800007FFF8000000000F800007FFF8000000
3674000F800007FFF8000000000F800007FFF8000000000F800007FFF8000000000FC00007FF
3675F80000F80007C00007FFF80000F80007C00007FFF80000F80007C00007FFF80000F80007
3676C00007FFF80000F80000000007FFF80000F80000000007FFF80000F80000000007FFF800
367701F80000000007FFF80001F80000000007FFF80001F80000000007FFF80003F800000000
367807FFF80007F80000000007FFF8000FF80000000007FFF8007FF80000000007FFFFFFFFF8
36790000000007FFFFFFFFF80000000007FFFFFFFFF80000000007FFFFFFFFF80000000007FF
3680FFFFFFF80000000007FFF8007FF80000000007FFF8000FF80000000007FFF80007F80000
3681000007FFF80003F80000000007FFF80001F80000000007FFF80001F80000000007FFF800
368201F80000000007FFF80000F80000000007FFF80000F80000000007FFF80000F800000000
368307FFF80000F80000000007FFF80000F80000000007FFF80000F80000000007FFF80000F8
36840000000007FFF80000000000000007FFF80000000000000007FFF80000000000000007FF
3685F80000000000000007FFF80000000000000007FFF80000000000000007FFF80000000000
3686000007FFF80000000000000007FFF80000000000000007FFF80000000000000007FFF800
368700000000000007FFF80000000000000007FFF80000000000000007FFF800000000000000
368807FFF80000000000000007FFF80000000000000007FFF80000000000000007FFF8000000
36890000000007FFF8000000000000FFFFFFFFFFF800000000FFFFFFFFFFF800000000FFFFFF
3690FFFFF800000000FFFFFFFFFFF800000000FFFFFFFFFFF8000000004A517CD055>I<FFFF
3691FFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC00007FFF800000007
3692FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
3693FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
3694FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
3695FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
3696FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
3697FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
3698FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
3699FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
3700FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
3701FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
3702FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007
3703FFF800000007FFF800000007FFF800000007FFF800000007FFF80000FFFFFFFFFFC0FFFF
3704FFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC02A527CD132>73
3705D<FFFFFFFFFFF8000000FFFFFFFFFFF8000000FFFFFFFFFFF8000000FFFFFFFFFFF80000
370600FFFFFFFFFFF80000000007FFF800000000000007FFF800000000000007FFF800000000
3707000007FFF800000000000007FFF800000000000007FFF800000000000007FFF800000000
3708000007FFF800000000000007FFF800000000000007FFF800000000000007FFF800000000
3709000007FFF800000000000007FFF800000000000007FFF800000000000007FFF800000000
3710000007FFF800000000000007FFF800000000000007FFF800000000000007FFF800000000
3711000007FFF800000000000007FFF800000000000007FFF800000000000007FFF800000000
3712000007FFF800000000000007FFF800000000000007FFF800000000000007FFF800000000
3713000007FFF800000000000007FFF800000000000007FFF800000000000007FFF800000000
3714000007FFF800000000000007FFF800000000000007FFF800000000000007FFF800000000
3715000007FFF800000000000007FFF800000000000007FFF800000000000007FFF800000000
3716000007FFF800000000000007FFF800000000000007FFF800000000000007FFF800000000
3717000007FFF800000000000007FFF800000000000007FFF8000000007C0007FFF800000000
37187C0007FFF8000000007C0007FFF8000000007C0007FFF800000000FC0007FFF800000000
3719F80007FFF800000000F80007FFF800000000F80007FFF800000000F80007FFF800000000
3720F80007FFF800000001F80007FFF800000001F80007FFF800000001F80007FFF800000003
3721F80007FFF800000003F80007FFF800000007F80007FFF800000007F00007FFF80000000F
3722F00007FFF80000000FF00007FFF80000001FF00007FFF80000003FF00007FFF80000007F
3723F00007FFF8000000FFF00007FFF8000003FFF00007FFF8000007FFF00007FFF800003FFF
3724F00007FFF80001FFFFF0FFFFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFF
3725E0FFFFFFFFFFFFFFFFE0FFFFFFFFFFFFFFFFE046527CD151>76 D<FFFFFFFFFFFFFF0000
372600FFFFFFFFFFFFFFF80000FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFE000FFFFFFFFFF
3727FFFFFFF0000007FFF000001FFFFC000007FFF0000001FFFF000007FFF00000007FFF8000
372807FFF00000003FFFC00007FFF00000000FFFE00007FFF00000000FFFF00007FFF0000000
372907FFF00007FFF000000003FFF80007FFF000000003FFFC0007FFF000000003FFFC0007FF
3730F000000001FFFE0007FFF000000001FFFE0007FFF000000001FFFE0007FFF000000001FF
3731FE0007FFF000000001FFFF0007FFF000000001FFFF0007FFF000000001FFFF0007FFF000
3732000001FFFF0007FFF000000001FFFF0007FFF000000001FFFF0007FFF000000001FFFF00
373307FFF000000001FFFF0007FFF000000001FFFE0007FFF000000001FFFE0007FFF0000000
373401FFFE0007FFF000000001FFFC0007FFF000000003FFFC0007FFF000000003FFFC0007FF
3735F000000003FFF80007FFF000000007FFF00007FFF00000000FFFE00007FFF00000001FFF
3736E00007FFF00000003FFFC00007FFF00000007FFF000007FFF0000001FFFE000007FFF000
3737001FFFFC000007FFFFFFFFFFFFF0000007FFFFFFFFFFFFC0000007FFFFFFFFFFFE000000
373807FFFFFFFFFFE000000007FFF80000000000000007FFF80000000000000007FFF8000000
37390000000007FFF80000000000000007FFF80000000000000007FFF80000000000000007FF
3740F80000000000000007FFF80000000000000007FFF80000000000000007FFF80000000000
3741000007FFF80000000000000007FFF80000000000000007FFF80000000000000007FFF800
374200000000000007FFF80000000000000007FFF80000000000000007FFF800000000000000
374307FFF80000000000000007FFF80000000000000007FFF80000000000000007FFF8000000
37440000000007FFF80000000000000007FFF80000000000000007FFF80000000000000007FF
3745F80000000000000007FFF80000000000000007FFF80000000000000007FFF80000000000
3746000007FFF80000000000000007FFF80000000000000007FFF80000000000000007FFF800
37470000000000FFFFFFFFFFC000000000FFFFFFFFFFC000000000FFFFFFFFFFC000000000FF
3748FFFFFFFFC000000000FFFFFFFFFFC00000000050527CD15C>80 D<00000FFF8000070000
374900FFFFF8000F000007FFFFFF001F00001FFFFFFFC03F00003FFFFFFFF07F0000FFFC00FF
3750F8FF0001FFE0000FFDFF0003FF800001FFFF0007FE0000007FFF000FFC0000003FFF000F
3751F80000000FFF001FF800000007FF001FF000000003FF003FF000000003FF003FE0000000
375201FF007FE000000000FF007FE000000000FF007FE0000000007F00FFE0000000007F00FF
3753E0000000003F00FFE0000000003F00FFF0000000003F00FFF0000000003F00FFF8000000
3754001F00FFF8000000001F00FFFC000000001F00FFFE000000001F00FFFF000000000000FF
3755FFC000000000007FFFF000000000007FFFFF00000000007FFFFFF8000000003FFFFFFF80
37560000003FFFFFFFFC0000001FFFFFFFFFC000001FFFFFFFFFF000000FFFFFFFFFFC000007
3757FFFFFFFFFF000003FFFFFFFFFFC00001FFFFFFFFFFE00000FFFFFFFFFFF000007FFFFFFF
3758FFF800003FFFFFFFFFFC00000FFFFFFFFFFE000003FFFFFFFFFE000000FFFFFFFFFF0000
3759001FFFFFFFFF80000000FFFFFFFF800000000FFFFFFFC0000000007FFFFFC00000000007
3760FFFFE00000000000FFFFE000000000003FFFE000000000000FFFF0000000000007FFF000
37610000000003FFF0000000000003FFF0780000000001FFF0F80000000000FFF0F800000000
376200FFF0F80000000000FFF0F800000000007FF0F800000000007FF0FC00000000007FF0FC
376300000000007FF0FC00000000007FE0FE00000000007FE0FE00000000007FE0FF00000000
376400FFC0FF0000000000FFC0FF8000000000FFC0FFC000000001FF80FFE000000001FF00FF
3765F000000003FF00FFFC00000007FE00FFFF0000000FFC00FFFFC000001FF800FFFFF80000
37667FF000FF1FFFC003FFE000FE0FFFFFFFFFC000FC03FFFFFFFF0000F8007FFFFFFC0000F0
3767000FFFFFF00000E000007FFF0000003C5479D24B>83 D<3FFFFFFFFFFFFFFFFFFF803FFF
3768FFFFFFFFFFFFFFFF803FFFFFFFFFFFFFFFFFFF803FFFFFFFFFFFFFFFFFFF803FFFFFFFFF
3769FFFFFFFFFF803FFFC0003FFFC0007FFF803FFE00003FFFC00007FF807FF800003FFFC000
377001FFC07FE000003FFFC00000FFC07FC000003FFFC000007FC07F8000003FFFC000003FC0
37717F0000003FFFC000001FC07F0000003FFFC000001FC07E0000003FFFC000000FC07E0000
3772003FFFC000000FC07E0000003FFFC000000FC07C0000003FFFC0000007C07C0000003FFF
3773C0000007C07C0000003FFFC0000007C07C0000003FFFC0000007C07C0000003FFFC00000
377407C0FC0000003FFFC0000007E0F80000003FFFC0000003E0F80000003FFFC0000003E0F8
37750000003FFFC0000003E0F80000003FFFC0000003E0F80000003FFFC0000003E0F8000000
37763FFFC0000003E0000000003FFFC000000000000000003FFFC000000000000000003FFFC0
377700000000000000003FFFC000000000000000003FFFC000000000000000003FFFC0000000
377800000000003FFFC000000000000000003FFFC000000000000000003FFFC0000000000000
377900003FFFC000000000000000003FFFC000000000000000003FFFC000000000000000003F
3780FFC000000000000000003FFFC000000000000000003FFFC000000000000000003FFFC000
3781000000000000003FFFC000000000000000003FFFC000000000000000003FFFC000000000
3782000000003FFFC000000000000000003FFFC000000000000000003FFFC000000000000000
3783003FFFC000000000000000003FFFC000000000000000003FFFC000000000000000003FFF
3784C000000000000000003FFFC000000000000000003FFFC000000000000000003FFFC00000
37850000000000003FFFC000000000000000003FFFC000000000000000003FFFC00000000000
37860000003FFFC000000000000000003FFFC000000000000000003FFFC00000000000000000
37873FFFC000000000000000003FFFC000000000000000003FFFC000000000000000003FFFC0
378800000000000000003FFFC000000000000000003FFFC000000000000000003FFFC0000000
378900000000003FFFC000000000000000003FFFC000000000000000003FFFC0000000000000
379000003FFFC000000000000000003FFFC000000000000000003FFFC0000000000000FFFFFF
3791FFFFFFF000000000FFFFFFFFFFFFF000000000FFFFFFFFFFFFF000000000FFFFFFFFFFFF
3792F000000000FFFFFFFFFFFFF0000053517BD05E>I<FFFFFFFFFE0000001FFFFFFEFFFFFF
3793FFFE0000001FFFFFFEFFFFFFFFFE0000001FFFFFFEFFFFFFFFFE0000001FFFFFFEFFFFFF
3794FFFE0000001FFFFFFE001FFFF000000000003FFE00001FFFF0000000000007F000000FFF
3795F0000000000007E000000FFFF800000000000FE0000007FFF800000000000FC0000007FF
3796FC00000000000FC0000007FFFC00000000001FC0000003FFFE00000000001F80000003FF
3797FE00000000003F80000001FFFE00000000003F00000001FFFF00000000007F00000000FF
3798FF00000000007E00000000FFFF80000000007E00000000FFFF8000000000FE000000007F
3799FFC000000000FC000000007FFFC000000001FC000000003FFFE000000001F8000000003F
3800FFE000000003F8000000001FFFE000000003F0000000001FFFF000000007F0000000001F
3801FFF000000007F0000000000FFFF800000007E0000000000FFFF80000000FE00000000007
3802FFFC0000000FC00000000007FFFC0000001FC00000000003FFFC0000001F800000000003
3803FFFE0000003F800000000003FFFE0000003F800000000001FFFF0000003F000000000001
3804FFFF0000007F000000000000FFFF8000007E000000000000FFFF800000FE000000000000
38057FFF800000FC0000000000007FFFC00001FC0000000000007FFFC00001FC000000000000
38063FFFE00001F80000000000003FFFE00003F80000000000001FFFF00003F0000000000000
38071FFFF00007F00000000000000FFFF00007E00000000000000FFFF8000FE0000000000000
38080FFFF8000FE000000000000007FFFC000FC000000000000007FFFC001FC0000000000000
380903FFFE001F8000000000000003FFFE003F8000000000000001FFFE003F00000000000000
381001FFFF007F0000000000000001FFFF007F0000000000000000FFFF807E00000000000000
381100FFFF80FE00000000000000007FFFC0FC00000000000000007FFFC1FC00000000000000
3812003FFFC1F800000000000000003FFFE3F800000000000000001FFFE3F000000000000000
3813001FFFF3F000000000000000001FFFF7F000000000000000000FFFFFE000000000000000
3814000FFFFFE0000000000000000007FFFFC0000000000000000007FFFFC000000000000000
38150003FFFF80000000000000000003FFFF80000000000000000003FFFF8000000000000000
38160001FFFF00000000000000000001FFFF00000000000000000000FFFE0000000000000000
38170000FFFE000000000000000000007FFC000000000000000000007FFC0000000000000000
381800007FFC000000000000000000003FF8000000000000000000003FF80000000000000000
381900001FF0000000000000000000001FF0000000000000000000000FE00000000000000000
3820000007C000000000005F537DD166>86 D<00007FFF000000000007FFFFF0000000003FFF
3821FFFE00000000FFFFFFFF80000001FFE00FFFC0000003FE0001FFF0000007FF0000FFF800
38220007FF80003FFC00000FFF80003FFE00000FFFC0001FFE00000FFFC0001FFF00000FFFC0
3823000FFF80000FFFC0000FFF80000FFFC0000FFF800007FF800007FFC00007FF800007FFC0
38240003FF000007FFC00001FE000007FFC0000000000007FFC0000000000007FFC000000000
38250007FFC0000000000007FFC0000000000007FFC0000000000007FFC0000000007FFFFFC0
38260000000FFFFFFFC0000000FFFFFFFFC0000007FFFF87FFC000003FFFF007FFC000007FFF
38278007FFC00001FFFC0007FFC00003FFF00007FFC00007FFE00007FFC0000FFFC00007FFC0
3828001FFF800007FFC0003FFF000007FFC0007FFF000007FFC0007FFE000007FFC0007FFE00
38290007FFC000FFFC000007FFC000FFFC000007FFC000FFFC000007FFC000FFFC000007FFC0
383000FFFC00000FFFC000FFFC00000FFFC000FFFE00001FFFC0007FFE00001DFFC0007FFE00
3831003DFFC0003FFF000079FFE0001FFF8000F1FFF8000FFFC003E1FFFFE007FFF81FC0FFFF
3832F003FFFFFF807FFFF000FFFFFF001FFFF0001FFFFC0007FFE00001FFE0000000003C387C
3833B641>97 D<003FF0000000000000FFFFF0000000000000FFFFF0000000000000FFFFF000
38340000000000FFFFF0000000000000FFFFF000000000000003FFF000000000000000FFF000
3835000000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000
3836000000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000
3837000000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000
3838000000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000
3839000000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000
3840000000000000FFF000000000000000FFF001FFE000000000FFF00FFFFE00000000FFF03F
3841FFFFC0000000FFF0FFFFFFF0000000FFF3FF01FFF8000000FFF7F8003FFE000000FFFFE0
3842000FFF000000FFFF800007FF800000FFFF000003FFC00000FFFE000001FFE00000FFFC00
38430001FFF00000FFF8000000FFF80000FFF8000000FFF80000FFF80000007FFC0000FFF800
384400007FFC0000FFF80000007FFE0000FFF80000007FFE0000FFF80000007FFF0000FFF800
384500003FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF80000003FFF8000FFF800
384600003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF800
384700003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF800
384800003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF0000FFF800
384900003FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF80000007FFE0000FFF800
385000007FFE0000FFF80000007FFE0000FFF80000007FFC0000FFF8000000FFFC0000FFF800
38510000FFF80000FFFC000001FFF00000FFFC000001FFF00000FFFE000003FFE00000FFFF00
38520007FFC00000FFFF80000FFF800000FFCFC0001FFF000000FF87F0007FFC000000FF03FE
385303FFF8000000FE00FFFFFFE0000000FC007FFFFF80000000F8001FFFFC00000000000003
3854FFC000000041547BD24B>I<000001FFF8000000001FFFFF80000000FFFFFFF0000003FF
3855FFFFFC00000FFFC00FFE00001FFE0001FF00007FFC0003FF8000FFF00007FF8001FFF000
385607FFC003FFE0000FFFC003FFC0000FFFC007FFC0000FFFC00FFF80000FFFC00FFF80000F
3857FFC01FFF800007FF801FFF000007FF803FFF000003FF003FFF000001FE007FFF00000000
3858007FFE00000000007FFE00000000007FFE0000000000FFFE0000000000FFFE0000000000
3859FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FF
3860FE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE
386100000000007FFE00000000007FFF00000000007FFF00000000003FFF00000000003FFF00
3862000000003FFF00000003E01FFF80000003E01FFF80000007E00FFFC0000007C007FFC000
38630007C007FFE000000FC003FFE000001F8001FFF000003F0000FFF800007E00007FFE0000
3864FC00003FFF0003F800000FFFE01FF0000003FFFFFFE0000000FFFFFF800000003FFFFE00
386500000001FFE0000033387CB63C>I<000000000001FF80000000000007FFFF8000000000
38660007FFFF80000000000007FFFF80000000000007FFFF80000000000007FFFF8000000000
386700001FFF8000000000000007FF8000000000000007FF8000000000000007FF8000000000
3868000007FF8000000000000007FF8000000000000007FF8000000000000007FF8000000000
3869000007FF8000000000000007FF8000000000000007FF8000000000000007FF8000000000
3870000007FF8000000000000007FF8000000000000007FF8000000000000007FF8000000000
3871000007FF8000000000000007FF8000000000000007FF8000000000000007FF8000000000
3872000007FF8000000000000007FF8000000000000007FF8000000001FFE007FF800000001F
3873FFFC07FF80000000FFFFFF07FF80000003FFFFFFC7FF8000000FFFE03FE7FF8000001FFF
38740007F7FF8000007FFC0001FFFF800000FFF80000FFFF800001FFF000003FFF800003FFE0
387500001FFF800007FFC000001FFF800007FFC000000FFF80000FFF8000000FFF80001FFF80
387600000FFF80001FFF0000000FFF80003FFF0000000FFF80003FFF0000000FFF80003FFF00
387700000FFF80007FFE0000000FFF80007FFE0000000FFF80007FFE0000000FFF80007FFE00
387800000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE00
387900000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE00
388000000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE00
388100000FFF80007FFE0000000FFF80007FFE0000000FFF80007FFE0000000FFF80003FFF00
388200000FFF80003FFF0000000FFF80003FFF0000000FFF80001FFF0000000FFF80001FFF00
388300000FFF80000FFF8000000FFF80000FFF8000001FFF800007FFC000003FFF800003FFC0
388400003FFF800001FFE000007FFF800000FFF00001FFFF8000007FF80003FFFFE000003FFE
3885000FEFFFFF80000FFFC07FCFFFFF800007FFFFFF8FFFFF800001FFFFFE0FFFFF8000003F
3886FFF80FFFFF80000003FFC00FFE000041547CD24B>I<000003FFC0000000003FFFFC0000
38870001FFFFFF00000007FFFFFFC000000FFF81FFE000003FFC007FF800007FF8003FFC0000
3888FFF0001FFE0001FFE0000FFE0003FFC00007FF0007FFC00007FF800FFF800003FF800FFF
3889800003FFC01FFF800001FFC01FFF000001FFC03FFF000001FFE03FFF000001FFE07FFF00
38900000FFE07FFE000000FFE07FFE000000FFF07FFE000000FFF0FFFE000000FFF0FFFE0000
389100FFF0FFFE000000FFF0FFFE000000FFF0FFFFFFFFFFFFF0FFFFFFFFFFFFF0FFFFFFFFFF
3892FFF0FFFFFFFFFFFFE0FFFE0000000000FFFE0000000000FFFE0000000000FFFE00000000
389300FFFE0000000000FFFE00000000007FFE00000000007FFE00000000007FFF0000000000
38943FFF00000000003FFF00000000003FFF00000000E01FFF00000001F01FFF80000003F00F
3895FF80000003F007FFC0000007E007FFC0000007E003FFE000000FC001FFF000001FC000FF
3896F800003F80007FFC0000FF00001FFE0003FE00000FFFC03FF8000003FFFFFFF0000000FF
3897FFFFC00000001FFFFE0000000001FFF0000034387CB63D>I<0000003FFC00000003FFFF
38980000000FFFFFC000003FFFFFE00000FFF81FF00001FFC03FF80003FF807FF80007FF00FF
3899FC000FFE00FFFC001FFC00FFFC001FFC00FFFC003FF800FFFC003FF800FFFC003FF8007F
3900F8007FF0007FF8007FF0003FF0007FF0000FC0007FF0000000007FF0000000007FF00000
390100007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF00000
390200007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000FFFFFFFFE0
390300FFFFFFFFE000FFFFFFFFE000FFFFFFFFE000FFFFFFFFE000007FF8000000007FF80000
390400007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF80000
390500007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF80000
390600007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF80000
390700007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF80000
390800007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF80000
390900007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF80000
391000007FF8000000007FF8000000007FF8000000007FF8000000007FF80000007FFFFFFE00
3911007FFFFFFE00007FFFFFFE00007FFFFFFE00007FFFFFFE00002E547CD329>I<00003FFF
39120000FF000003FFFFF007FFC0000FFFFFFC1FFFE0003FFFFFFF7FFFE0007FFC0FFFFF9FF0
391300FFE001FFF83FF001FFC000FFE03FF003FF80007FF01FF007FF00003FF81FE00FFF0000
39143FFC0FC00FFF00003FFC07801FFE00001FFE00001FFE00001FFE00003FFE00001FFF0000
39153FFE00001FFF00003FFE00001FFF00003FFE00001FFF00003FFE00001FFF00003FFE0000
39161FFF00003FFE00001FFF00003FFE00001FFF00003FFE00001FFF00001FFE00001FFE0000
39171FFE00001FFE00000FFF00003FFC00000FFF00003FFC000007FF00003FF8000003FF8000
39187FF0000001FFC000FFE0000000FFE001FFC0000000FFFC0FFF80000001FFFFFFFF000000
391903EFFFFFFC00000003C3FFFFF000000007C03FFF0000000007C000000000000007C00000
3920000000000FC00000000000000FC00000000000000FC00000000000000FE0000000000000
39210FE00000000000000FF80000000000000FFE0000000000000FFFFFFFFF00000007FFFFFF
3922FFF8000007FFFFFFFFFF000007FFFFFFFFFFC00003FFFFFFFFFFE00001FFFFFFFFFFF000
392300FFFFFFFFFFF800007FFFFFFFFFFC00007FFFFFFFFFFE0001FFFFFFFFFFFF0007FFFFFF
3924FFFFFF000FFE000003FFFF801FF80000003FFF803FF000000007FF807FE000000003FFC0
39257FE000000001FFC0FFC000000001FFC0FFC000000000FFC0FFC000000000FFC0FFC00000
39260000FFC0FFC000000000FFC0FFC000000000FFC0FFE000000001FFC07FE000000001FF80
39277FF000000003FF803FF000000003FF001FF800000007FE000FFE0000001FFC0007FF8000
3928007FF80003FFE00001FFF00001FFFE001FFFE000007FFFFFFFFF8000000FFFFFFFFC0000
39290001FFFFFFE0000000000FFFFC0000003C4F7CB543>I<003FF0000000000000FFFFF000
39300000000000FFFFF0000000000000FFFFF0000000000000FFFFF0000000000000FFFFF000
3931000000000003FFF000000000000000FFF000000000000000FFF000000000000000FFF000
3932000000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000
3933000000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000
3934000000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000
3935000000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000
3936000000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000
39371FFC00000000FFF000FFFFC0000000FFF003FFFFF0000000FFF00FFFFFF8000000FFF01F
3938E07FFC000000FFF03F001FFE000000FFF07C001FFF000000FFF0F0000FFF000000FFF1E0
3939000FFF800000FFF3C0000FFF800000FFF7800007FF800000FFF7800007FFC00000FFFF00
39400007FFC00000FFFE000007FFC00000FFFE000007FFC00000FFFC000007FFC00000FFFC00
39410007FFC00000FFFC000007FFC00000FFFC000007FFC00000FFF8000007FFC00000FFF800
39420007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
39430007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
39440007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
39450007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
39460007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
39470007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
39480007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
39490007FFC000FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF8
395007FFFFFFC0FFFFFFF807FFFFFFC042537BD24B>I<007F000000FF800003FFE00007FFF0
39510007FFF0000FFFF8000FFFF8000FFFF8000FFFF8000FFFF8000FFFF8000FFFF80007FFF0
39520007FFF00003FFE00000FF8000007F000000000000000000000000000000000000000000
3953000000000000000000000000000000000000000000000000000000000000000000003FF0
395400FFFFF000FFFFF000FFFFF000FFFFF000FFFFF00001FFF00000FFF00000FFF00000FFF0
39550000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
39560000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
39570000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
39580000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
39590000FFF00000FFF00000FFF000FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE0FFFFFFE01B547B
3960D325>I<003FF00000000000FFFFF00000000000FFFFF00000000000FFFFF00000000000
3961FFFFF00000000000FFFFF0000000000003FFF0000000000000FFF0000000000000FFF000
39620000000000FFF0000000000000FFF0000000000000FFF0000000000000FFF00000000000
396300FFF0000000000000FFF0000000000000FFF0000000000000FFF0000000000000FFF000
39640000000000FFF0000000000000FFF0000000000000FFF0000000000000FFF00000000000
396500FFF0000000000000FFF0000000000000FFF0000000000000FFF0000000000000FFF000
39660000000000FFF0000000000000FFF0000000000000FFF0000000000000FFF00001FFFFF8
396700FFF00001FFFFF800FFF00001FFFFF800FFF00001FFFFF800FFF00001FFFFF800FFF000
3968003FFE0000FFF000001FF00000FFF000003FC00000FFF000007F800000FFF00000FF0000
396900FFF00003FE000000FFF00007F8000000FFF0000FF0000000FFF0001FE0000000FFF000
39707FC0000000FFF000FF00000000FFF001FE00000000FFF003FC00000000FFF00FF8000000
397100FFF01FE000000000FFF03FF000000000FFF07FF800000000FFF1FFF800000000FFF3FF
3972FC00000000FFF7FFFE00000000FFFFFFFF00000000FFFFFFFF80000000FFFF9FFF800000
397300FFFF0FFFC0000000FFFE0FFFE0000000FFF807FFF0000000FFF003FFF0000000FFF001
3974FFF8000000FFF000FFFC000000FFF000FFFE000000FFF0007FFF000000FFF0003FFF0000
397500FFF0001FFF800000FFF0001FFFC00000FFF0000FFFE00000FFF00007FFF00000FFF000
397603FFF00000FFF00001FFF80000FFF00001FFFC0000FFF00000FFFE0000FFF000007FFE00
397700FFF000003FFF0000FFF000007FFFC0FFFFFFF003FFFFFFFFFFFFF003FFFFFFFFFFFFF0
397803FFFFFFFFFFFFF003FFFFFFFFFFFFF003FFFFFF40537CD247>107
3979D<003FF000FFFFF000FFFFF000FFFFF000FFFFF000FFFFF00001FFF00000FFF00000FFF0
39800000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
39810000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
39820000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
39830000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
39840000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
39850000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
39860000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0
39870000FFF00000FFF00000FFF00000FFF00000FFF00000FFF000FFFFFFF0FFFFFFF0FFFFFF
3988F0FFFFFFF0FFFFFFF01C537BD225>I<003FF0001FFC000000FFE00000FFFFF000FFFFC0
39890007FFFE0000FFFFF003FFFFF0001FFFFF8000FFFFF00FFFFFF8007FFFFFC000FFFFF01F
3990E07FFC00FF03FFE000FFFFF03F001FFE01F800FFF00003FFF07C001FFF03E000FFF80000
3991FFF0F0000FFF0780007FF80000FFF1E0000FFF8F00007FFC0000FFF3C0000FFF9E00007F
3992FC0000FFF7800007FFBC00003FFC0000FFF7800007FFFC00003FFE0000FFFF000007FFF8
399300003FFE0000FFFE000007FFF000003FFE0000FFFE000007FFF000003FFE0000FFFC0000
399407FFE000003FFE0000FFFC000007FFE000003FFE0000FFFC000007FFE000003FFE0000FF
3995FC000007FFE000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE
39960000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000
3997003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007
3998FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8
3999000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE00
400000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC00000
40013FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FF
4002C000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF800
40030007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000
4004FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003F
4005FE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC0
400600003FFE00FFFFFFF807FFFFFFC03FFFFFFEFFFFFFF807FFFFFFC03FFFFFFEFFFFFFF807
4007FFFFFFC03FFFFFFEFFFFFFF807FFFFFFC03FFFFFFEFFFFFFF807FFFFFFC03FFFFFFE6736
40087BB570>I<003FF0001FFC000000FFFFF000FFFFC00000FFFFF003FFFFF00000FFFFF00F
4009FFFFF80000FFFFF01FE07FFC0000FFFFF03F001FFE000003FFF07C001FFF000000FFF0F0
4010000FFF000000FFF1E0000FFF800000FFF3C0000FFF800000FFF7800007FF800000FFF780
40110007FFC00000FFFF000007FFC00000FFFE000007FFC00000FFFE000007FFC00000FFFC00
40120007FFC00000FFFC000007FFC00000FFFC000007FFC00000FFFC000007FFC00000FFF800
40130007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
40140007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
40150007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
40160007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
40170007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
40180007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
40190007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800
40200007FFC00000FFF8000007FFC000FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF8
402107FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC042367BB54B>I<000001FFE000
4022000000001FFFFE0000000000FFFFFFC000000003FFFFFFF00000000FFF807FFC0000001F
4023FC000FFE0000007FF80007FF800000FFF00003FFC00001FFE00001FFE00003FFC00000FF
4024F00003FF8000007FF00007FF8000007FF8000FFF0000003FFC000FFF0000003FFC001FFF
40250000003FFE001FFF0000003FFE003FFE0000001FFF003FFE0000001FFF003FFE0000001F
4026FF007FFE0000001FFF807FFE0000001FFF807FFE0000001FFF807FFE0000001FFF80FFFE
40270000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001F
4028FFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE
40290000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC07FFE0000001FFF807FFE0000001F
4030FF807FFE0000001FFF803FFE0000001FFF003FFF0000003FFF003FFF0000003FFF001FFF
40310000003FFE001FFF0000003FFE000FFF0000003FFC000FFF8000007FFC0007FF8000007F
4032F80003FFC00000FFF00001FFE00001FFE00000FFF00003FFC000007FF80007FF8000003F
4033FE001FFF0000000FFF807FFC00000007FFFFFFF800000000FFFFFFC0000000003FFFFF00
40340000000001FFE00000003A387CB643>I<003FF001FFE0000000FFFFF00FFFFE000000FF
4035FFF03FFFFFC00000FFFFF0FFFFFFF00000FFFFF3FF01FFF80000FFFFF7F8007FFE000003
4036FFFFE0001FFF000000FFFF80000FFF800000FFFF000007FFC00000FFFE000007FFE00000
4037FFFC000003FFF00000FFF8000001FFF80000FFF8000001FFF80000FFF8000000FFFC0000
4038FFF8000000FFFC0000FFF8000000FFFE0000FFF80000007FFE0000FFF80000007FFF0000
4039FFF80000007FFF0000FFF80000007FFF0000FFF80000007FFF0000FFF80000003FFF8000
4040FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000
4041FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000
4042FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF0000
4043FFF80000007FFF0000FFF80000007FFF0000FFF80000007FFF0000FFF80000007FFE0000
4044FFF8000000FFFE0000FFF8000000FFFE0000FFF8000000FFFC0000FFF8000001FFFC0000
4045FFF8000001FFF80000FFFC000003FFF00000FFFC000003FFF00000FFFE000007FFE00000
4046FFFF00000FFFC00000FFFF80001FFF800000FFFFC0003FFF000000FFFFF000FFFC000000
4047FFFBFE07FFF8000000FFF8FFFFFFE0000000FFF87FFFFF80000000FFF81FFFFC00000000
4048FFF803FFC000000000FFF800000000000000FFF800000000000000FFF800000000000000
4049FFF800000000000000FFF800000000000000FFF800000000000000FFF800000000000000
4050FFF800000000000000FFF800000000000000FFF800000000000000FFF800000000000000
4051FFF800000000000000FFF800000000000000FFF800000000000000FFF800000000000000
4052FFF800000000000000FFF8000000000000FFFFFFF80000000000FFFFFFF80000000000FF
4053FFFFF80000000000FFFFFFF80000000000FFFFFFF80000000000414D7BB54B>I<007FE0
405403FE00FFFFE00FFF80FFFFE03FFFE0FFFFE07FFFF0FFFFE0FE1FF8FFFFE1F83FFC03FFE3
4055E03FFE00FFE3C07FFE00FFE7807FFE00FFEF807FFE00FFEF007FFE00FFEE007FFE00FFFE
4056003FFC00FFFC003FFC00FFFC001FF800FFFC000FF000FFF800000000FFF800000000FFF8
405700000000FFF800000000FFF800000000FFF000000000FFF000000000FFF000000000FFF0
405800000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0
405900000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0
406000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0
406100000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0
4062000000FFFFFFFC0000FFFFFFFC0000FFFFFFFC0000FFFFFFFC0000FFFFFFFC00002F367C
4063B537>114 D<0003FFF00F00003FFFFE1F0000FFFFFFFF0003FFFFFFFF0007FF003FFF00
40640FF80007FF001FE00001FF003FC00000FF003F8000007F007F8000007F007F0000003F00
40657F0000003F00FF0000001F00FF0000001F00FF8000001F00FF8000001F00FFC000001F00
4066FFF000000000FFFC00000000FFFFC00000007FFFFF0000007FFFFFF800003FFFFFFF0000
40673FFFFFFFC0001FFFFFFFF0000FFFFFFFF80007FFFFFFFC0003FFFFFFFE0000FFFFFFFF00
4068003FFFFFFF80000FFFFFFFC00000FFFFFFC0000007FFFFE00000003FFFE000000007FFF0
406900000001FFF0780000007FF0F80000003FF0F80000001FF0FC0000001FF0FC0000000FF0
4070FC0000000FF0FE0000000FF0FE0000000FE0FF0000000FE0FF8000001FE0FF8000001FC0
4071FFC000001FC0FFE000003F80FFF800007F00FFFE0001FE00FFFFC00FFC00FF7FFFFFF800
4072FC1FFFFFE000F807FFFF8000F000FFF800002C387CB635>I<00003E00000000003E0000
40730000003E00000000003E00000000003E00000000003E00000000007E00000000007E0000
40740000007E00000000007E0000000000FE0000000000FE0000000001FE0000000001FE0000
4075000001FE0000000003FE0000000007FE0000000007FE000000000FFE000000001FFE0000
407600003FFE00000000FFFE00000001FFFE0000000FFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF
407700FFFFFFFFFF00FFFFFFFFFF00003FFE000000003FFE000000003FFE000000003FFE0000
407800003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE0000
407900003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE0000
408000003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE0000
408100003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE0007
4082C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE0007
4083C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE0007C0001FFE000F80001FFF000F
408480001FFF000F80000FFF001F00000FFF801F000007FFC03E000003FFF0FC000001FFFFF8
40850000007FFFF00000001FFFE000000003FF80002A4D7ECB34>I<003FF8000001FFC000FF
4086FFF80007FFFFC000FFFFF80007FFFFC000FFFFF80007FFFFC000FFFFF80007FFFFC000FF
4087FFF80007FFFFC00003FFF800001FFFC00000FFF8000007FFC00000FFF8000007FFC00000
4088FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000
4089FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000
4090FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000
4091FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000
4092FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000
4093FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000
4094FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000
4095FFF8000007FFC00000FFF8000007FFC00000FFF800000FFFC00000FFF800000FFFC00000
4096FFF800000FFFC00000FFF800001FFFC00000FFF800001FFFC000007FF800003FFFC00000
40977FF800003BFFC000007FF800007BFFC000003FFC0000F3FFC000003FFC0001E3FFF00000
40981FFE0007C3FFFFC0000FFFC03F83FFFFC00007FFFFFF03FFFFC00001FFFFFE03FFFFC000
4099007FFFF803FFFFC0000007FFE003FF000042377BB54B>I<FFFFFFF00007FFFFFFFFFFF0
41000007FFFFFFFFFFF00007FFFFFFFFFFF00007FFFFFFFFFFF00007FFFF01FFF80000007FE0
410100FFFC0000003F0000FFFC0000003F00007FFC0000003E00007FFE0000007E00003FFE00
410200007C00003FFF000000FC00001FFF000000F800001FFF800001F800000FFF800001F000
4103000FFFC00001F000000FFFC00003F0000007FFC00003E0000007FFE00007E0000003FFE0
41040007C0000003FFF0000FC0000001FFF0000F80000001FFF8001F80000000FFF8001F0000
41050000FFFC001F00000000FFFC003F000000007FFE003E000000007FFE007E000000003FFE
4106007C000000003FFF00FC000000001FFF00F8000000001FFF81F8000000000FFF81F00000
410700000FFFC3F0000000000FFFC3F00000000007FFE3E00000000007FFE7E00000000003FF
4108E7C00000000003FFFFC00000000001FFFF800000000001FFFF800000000000FFFF000000
4109000000FFFF0000000000007FFE0000000000007FFE0000000000007FFE0000000000003F
4110FC0000000000003FFC0000000000001FF80000000000001FF80000000000000FF0000000
41110000000FF000000000000007E000000000000003C000000040367DB447>I<FFFFFFE07F
4112FFFFC003FFFFC0FFFFFFE07FFFFFC003FFFFC0FFFFFFE07FFFFFC003FFFFC0FFFFFFE07F
4113FFFFC003FFFFC0FFFFFFE07FFFFFC003FFFFC001FFF00000FFF000001FF80001FFF80000
41147FF0000007E00000FFF800007FF8000007C00000FFF800007FF8000007C00000FFFC0000
41153FF800000FC000007FFC00003FFC00000F8000007FFC00003FFC00000F8000007FFE0000
41163FFC00001F8000003FFE00007FFE00001F0000003FFF00007FFE00003F0000001FFF0000
41177FFF00003E0000001FFF0000FFFF00003E0000001FFF8000FFFF00007E0000000FFF8001
4118FFFF80007C0000000FFFC001F3FF8000FC00000007FFC001F3FFC000F800000007FFC003
4119F3FFC000F800000007FFE003E1FFC001F800000003FFE007E1FFE001F000000003FFF007
4120C0FFE001F000000001FFF007C0FFF003E000000001FFF00FC0FFF003E000000001FFF80F
4121807FF007E000000000FFF80F807FF807C000000000FFF81F003FF807C000000000FFFC1F
4122003FF80FC0000000007FFC3F003FFC0F80000000007FFE3E001FFC1F80000000003FFE3E
4123001FFE1F00000000003FFE7E001FFE1F00000000003FFF7C000FFE3F00000000001FFFFC
4124000FFF3E00000000001FFFF80007FF7E00000000000FFFF80007FFFC00000000000FFFF8
41250007FFFC00000000000FFFF00003FFFC000000000007FFF00003FFF8000000000007FFE0
41260001FFF8000000000003FFE00001FFF0000000000003FFE00001FFF0000000000003FFC0
41270000FFF0000000000001FFC00000FFE0000000000001FF8000007FE0000000000001FF80
412800007FE0000000000000FF8000007FC0000000000000FF0000003FC00000000000007F00
412900003F800000000000007F0000003F800000000000003E0000001F000000005A367DB461
4130>I<7FFFFFF0007FFFFE007FFFFFF0007FFFFE007FFFFFF0007FFFFE007FFFFFF0007FFF
4131FE007FFFFFF0007FFFFE00007FFE00000FFF0000003FFF000007F80000001FFF800007F0
41320000000FFFC0000FE000000007FFC0001FC000000007FFE0003F8000000003FFF0003F00
413300000001FFF8007E0000000000FFFC00FC00000000007FFE01FC00000000007FFE03F800
4134000000003FFF07F000000000001FFF8FE000000000000FFFCFC0000000000007FFFF8000
41350000000003FFFF00000000000003FFFF00000000000001FFFE00000000000000FFFC0000
413600000000007FFE000000000000003FFF000000000000003FFF000000000000001FFF8000
413700000000001FFFC00000000000003FFFE00000000000007FFFF0000000000000FFFFF000
41380000000001FDFFF8000000000001F8FFFC000000000003F07FFE000000000007E03FFF00
4139000000000FE01FFF00000000001FC01FFF80000000003F800FFFC0000000007F0007FFE0
414000000000FE0003FFF000000000FC0001FFF800000001F80001FFF800000003F00000FFFC
414100000007F000007FFE0000000FE000003FFF0000001FC000001FFF800000FFF000001FFF
41428000FFFFFE0001FFFFFFC0FFFFFE0001FFFFFFC0FFFFFE0001FFFFFFC0FFFFFE0001FFFF
4143FFC0FFFFFE0001FFFFFFC042357EB447>I<FFFFFFF00007FFFFFFFFFFF00007FFFFFFFF
4144FFF00007FFFFFFFFFFF00007FFFFFFFFFFF00007FFFF00FFF80000007FE000FFFC000000
41453F0000FFFC0000003F00007FFE0000003E00007FFE0000007E00003FFE0000007C00003F
4146FF000000FC00001FFF000000F800001FFF800001F800000FFF800001F000000FFFC00003
4147F0000007FFC00003E0000007FFE00003E0000007FFE00007E0000003FFF00007C0000003
4148FFF0000FC0000001FFF8000F80000001FFF8001F80000000FFF8001F00000000FFFC003F
4149000000007FFC003E000000007FFE007E000000003FFE007C000000003FFF00FC00000000
41503FFF00FC000000001FFF80F8000000001FFF81F8000000000FFFC1F0000000000FFFC3F0
41510000000007FFC3E00000000007FFE7E00000000003FFE7C00000000003FFFFC000000000
415201FFFF800000000001FFFF800000000000FFFF000000000000FFFF000000000000FFFF00
415300000000007FFE0000000000007FFE0000000000003FFC0000000000003FFC0000000000
4154001FF80000000000001FF80000000000000FF00000000000000FF000000000000007E000
4155000000000007E000000000000007E000000000000007C00000000000000FC00000000000
4156000F800000000000001F800000000000001F000000000000003F000000001FC0003E0000
415700003FE0007E000000007FF0007C00000000FFF800FC00000000FFF800F800000000FFF8
415801F800000000FFF801F000000000FFF803F000000000FFF807E0000000007FF00FC00000
415900007FE01F80000000003FC07F00000000003F81FE00000000001FFFFC00000000000FFF
4160F0000000000003FFE0000000000000FF000000000000404D7DB447>I
4161E /Fr 42 127 df<00000FF8000000007FFE00000001F80780000007E001C000001F8000
4162E000003F0007E000007E000FF000007E000FF00000FC000FF00000FC000FF00001F8000F
4163F00001F80007E00001F80001800001F80000000001F80000000001F80000000001F80000
4164000001F80000000001F80000000001F80000000001F80000000001F80000000001F80003
4165F000FFFFFFFFF000FFFFFFFFF000FFFFFFFFF00001F8000FF00001F80003F00001F80003
4166F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003
4167F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003
4168F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003
4169F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003
4170F00001F80003F00001F80003F00003FC0007F8007FFFE0FFFFC07FFFE0FFFFC07FFFE0FF
4171FFC02A3B7FBA2E>12 D<03F000FFF000FFF000FFF00007F00003F00003F00003F00003F0
41720003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0
41730003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0
41740007F800FFFFC0FFFFC0FFFFC012257EA417>16 D<003C007E007E00FE01FE03FC03F007
4175E00FC01F801E003C007800F000C0000F0F6FB92A>19 D<03F00003F00003F00003FE0000
41763F80001FC0000FE00007E00007E00007E0000FE0001FC000FF80FFFE00FFE000130F757D
417725>24 D<0000600000E00001C0000380000700000E00001E00003C0000780000780000F0
41780001E00001E00003C00003C00007C0000780000F80000F00000F00001F00001E00001E00
4179003E00003E00003E00007C00007C00007C00007C00007C00007C0000F80000F80000F800
418000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F800
418100F80000F80000F800007C00007C00007C00007C00007C00007C00003E00003E00003E00
4182001E00001E00001F00000F00000F00000F800007800007C00003C00003C00001E00001E0
41830000F000007800007800003C00001E00000E000007000003800001C00000E00000601352
418478BD20>40 D<C00000E000007000003800001C00000E00000F000007800003C00003C000
418501E00000F00000F000007800007800007C00003C00003E00001E00001E00001F00000F00
4186000F00000F80000F80000F800007C00007C00007C00007C00007C00007C00003E00003E0
41870003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0
41880003E00003E00003E00003E00007C00007C00007C00007C00007C00007C0000F80000F80
4189000F80000F00000F00001F00001E00001E00003E00003C00007C0000780000780000F000
419000F00001E00003C00003C0000780000F00000E00001C0000380000700000E00000C00000
419113527CBD20>I<1C007F00FF80FF80FF80FF80FF807F001C000909798817>46
4192D<000FF00000007FFE000001FFFF800003E03FE0000F000FF0000E0007F8001C0003FC00
4193380001FE00300001FE00700000FF00600000FF00FC0000FF00FF00007F80FF80007F80FF
419480007F80FF80007F80FF80007F80FF80007F807F00007F801C00007F800000007F800000
419500FF00000000FF00000000FF00000001FE00000001FC00000003FC00000003F800000007
4196F000000007E00000000FE00000001FC00000003F800000003F000000007C00000000F800
4197000001F000000003E000000007C00000000F800000000F000000001E000180003C000180
4198007800018000F000038001E000030003C000030007800003000E000007000FFFFFFF001F
4199FFFFFF003FFFFFFF007FFFFFFE00FFFFFFFE00FFFFFFFE00FFFFFFFE0021387CB72A>50
4200D<0600000C000780003C0007F003F80007FFFFF80007FFFFF00007FFFFE00007FFFF8000
420107FFFF000007FFFC0000067FE00000060000000006000000000600000000060000000006
4202000000000600000000060000000006000000000600000000060000000006000000000607
4203F80000063FFE000006780F800007E007E000078003F000070001F800060001F800060000
4204FC00000000FE00000000FE00000000FF000000007F000000007F000000007F800000007F
4205800000007F800000007F803E00007F807F00007F80FF80007F80FF80007F80FF80007F80
4206FF80007F80FF00007F00FE0000FF00E00000FF00600000FE00700000FE00300001FC0038
42070001F8001C0003F8001E0007F0000F800FE00007E03F800001FFFF0000007FFC0000001F
4208E00000213A7CB72A>53 D<0000003800000000000038000000000000380000000000007C
42090000000000007C0000000000007C000000000000FE000000000000FE000000000000FE00
42100000000001FF000000000001FF000000000001FF0000000000037F8000000000037F8000
4211000000077FC000000000063FC000000000063FC0000000000E3FE0000000000C1FE00000
421200000C1FE0000000001C1FF000000000180FF000000000180FF000000000380FF8000000
4213003007F8000000003007F8000000007007FC000000006003FC000000006003FC00000000
4214C003FE00000000C001FE00000000C001FE000000018001FF000000018000FF0000000180
421500FF000000030000FF8000000300007F8000000300007F8000000600007FC0000007FFFF
4216FFC0000007FFFFFFC000000FFFFFFFE000000C00001FE000000C00001FE000001800000F
4217F000001800000FF000001800000FF0000030000007F8000030000007F8000030000007F8
4218000060000003FC000060000003FC0000E0000003FC0000E0000001FE0001E0000001FE00
421903F0000001FF000FFC000007FF80FFFF8000FFFFFEFFFF8000FFFFFEFFFF8000FFFFFE37
42203C7DBB3E>65 D<000001FF80018000000FFFE0038000007FFFF803800001FF807E078000
422103FC000F0F80000FF000039F80001FE00001DF80003F800000FF80007F0000007F8000FE
42220000003F8001FE0000003F8003FC0000001F8007F80000000F8007F80000000F800FF000
4223000007800FF000000007801FE000000007801FE000000003803FE000000003803FC00000
42240003807FC000000001807FC000000001807FC000000001807F800000000180FF80000000
42250000FF800000000000FF800000000000FF800000000000FF800000000000FF8000000000
422600FF800000000000FF800000000000FF800000000000FF800000000000FF800000000000
4227FF800000000000FF8000000000007F8000000000007FC000000001807FC000000001807F
4228C000000001803FC000000001803FE000000001801FE000000003801FE000000003000FF0
422900000003000FF0000000070007F8000000070007F8000000060003FC0000000E0001FE00
423000001C0000FE0000001800007F0000003800003F8000007000001FE00000E000000FF000
423103C0000003FC000F80000001FF803F000000007FFFFC000000000FFFF00000000001FF80
42320000313D7BBA3C>67 D<FFFFFFFFFFFC00FFFFFFFFFFFC00FFFFFFFFFFFC0001FF80000F
4233FC0000FF000001FC0000FF0000007E0000FF0000003E0000FF0000001E0000FF0000000E
42340000FF0000000E0000FF0000000E0000FF000000060000FF000000060000FF0000000600
423500FF000000070000FF000000030000FF0000C0030000FF0000C0030000FF0000C0030000
4236FF0000C0000000FF0000C0000000FF0000C0000000FF0001C0000000FF0001C0000000FF
42370003C0000000FF000FC0000000FFFFFFC0000000FFFFFFC0000000FFFFFFC0000000FF00
42380FC0000000FF0003C0000000FF0001C0000000FF0001C0000000FF0000C0000000FF0000
4239C0000000FF0000C0006000FF0000C0006000FF0000C0006000FF0000C000E000FF000000
424000C000FF00000000C000FF00000000C000FF00000000C000FF00000001C000FF00000001
4241C000FF00000001C000FF000000038000FF000000038000FF000000078000FF0000000780
424200FF0000000F8000FF0000003F8000FF0000007F8001FF800007FF00FFFFFFFFFFFF00FF
4243FFFFFFFFFF00FFFFFFFFFFFF0033397DB839>69 D<FFFFFFC0FFFFFFC0FFFFFFC000FFC0
424400007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80
424500007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80
424600007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80
424700007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80
424800007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F80
424900007F8000007F8000007F8000007F800000FFC000FFFFFFC0FFFFFFC0FFFFFFC01A397E
4250B81E>73 D<FFFFFFE00000FFFFFFE00000FFFFFFE0000001FFC000000000FF0000000000
4251FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000
4252FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000
4253FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000
4254FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000
4255FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000
4256FF0000001800FF0000001800FF0000001800FF0000001800FF0000001800FF0000003800
4257FF0000003000FF0000003000FF0000003000FF0000007000FF0000007000FF0000007000
4258FF000000F000FF000000F000FF000001F000FF000003F000FF00000FF000FF00001FE001
4259FF8000FFE0FFFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFE02D397DB834>76
4260D<000003FF00000000001FFFE000000000FE01FC00000001F8007E00000007E0001F8000
4261000FC0000FC000003F800007F000007F000003F80000FE000001FC0001FC000000FE0001
4262F80000007E0003F80000007F0007F00000003F8007F00000003F800FE00000001FC00FE0
42630000001FC01FE00000001FE01FC00000000FE03FC00000000FF03FC00000000FF03FC000
426400000FF07FC00000000FF87F8000000007F87F8000000007F87F8000000007F8FF800000
42650007FCFF8000000007FCFF8000000007FCFF8000000007FCFF8000000007FCFF80000000
426607FCFF8000000007FCFF8000000007FCFF8000000007FCFF8000000007FCFF8000000007
4267FCFF8000000007FC7F8000000007F87FC00000000FF87FC00000000FF87FC00000000FF8
42683FC00000000FF03FC00000000FF01FE00000001FE01FE00000001FE01FE00000001FE00F
4269F00000003FC007F00000003F8007F80000007F8003F80000007F0001FC000000FE0001FC
4270000000FE0000FE000001FC00007F000003F800003F800007F000001FC0000FE0000007E0
4271001F80000003F8007F00000000FE01FC000000001FFFE00000000003FF000000363D7BBA
427241>79 D<FFFFFFFFC000FFFFFFFFF800FFFFFFFFFE0001FF8001FF8000FF00003FC000FF
427300000FE000FF000007F000FF000003F800FF000003FC00FF000003FE00FF000001FE00FF
4274000001FE00FF000001FF00FF000001FF00FF000001FF00FF000001FF00FF000001FF00FF
4275000001FF00FF000001FF00FF000001FE00FF000001FE00FF000003FC00FF000003FC00FF
4276000007F800FF000007F000FF00000FE000FF00003FC000FF0001FF0000FFFFFFFC0000FF
4277FFFFF00000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF
42780000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF
42790000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF
42800000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000001FF
428180000000FFFFFF000000FFFFFF000000FFFFFF00000030397DB839>I<3FFFFFFFFFFFE0
42823FFFFFFFFFFFE03FFFFFFFFFFFE03FC003FF001FE03E0001FE0003E07C0001FE0001F078
42830001FE0000F0700001FE000070700001FE000070700001FE000070600001FE0000306000
428401FE000030600001FE000030600001FE000030E00001FE000038C00001FE000018C00001
4285FE000018C00001FE000018C00001FE000018000001FE000000000001FE000000000001FE
4286000000000001FE000000000001FE000000000001FE000000000001FE000000000001FE00
42870000000001FE000000000001FE000000000001FE000000000001FE000000000001FE0000
428800000001FE000000000001FE000000000001FE000000000001FE000000000001FE000000
4289000001FE000000000001FE000000000001FE000000000001FE000000000001FE00000000
42900001FE000000000001FE000000000001FE000000000001FE000000000001FE0000000000
429101FE000000000001FE000000000001FE000000000001FE000000000001FE000000000001
4292FE000000000007FF800000001FFFFFFFE000001FFFFFFFE000001FFFFFFFE00035397DB8
42933C>84 D<001FE0000000FFFC000003E03F000007000F80000F8007E0001FC003F0001FE0
429403F0001FE001F8001FE001F8001FE000FC000FC000FC00078000FC00000000FC00000000
4295FC00000000FC00000000FC0000007FFC000007FFFC00003FE0FC0000FE00FC0003F800FC
4296000FF000FC001FC000FC003FC000FC007F8000FC007F0000FC007F0000FC0CFE0000FC0C
4297FE0000FC0CFE0000FC0CFE0001FC0CFE0001FC0CFF0003FC0C7F00077C0C7F80063E183F
4298C01E3E180FE0781FF003FFF00FE0007F8007C026277DA52A>97 D<03F0000000FFF00000
429900FFF0000000FFF00000000FF000000003F000000003F000000003F000000003F0000000
430003F000000003F000000003F000000003F000000003F000000003F000000003F000000003
4301F000000003F000000003F000000003F000000003F000000003F01FE00003F07FF80003F1
4302E03E0003F3801F8003F7000FC003FE0007E003FC0003F003F80001F803F00001F803F000
430300FC03F00000FC03F00000FE03F00000FE03F000007E03F000007F03F000007F03F00000
43047F03F000007F03F000007F03F000007F03F000007F03F000007F03F000007F03F000007F
430503F000007E03F00000FE03F00000FE03F00000FC03F00001FC03F80001F803F80003F003
4306FC0003F003EE0007E003C6000FC003C7801F000381E07E000300FFF80000001FC000283B
43077EB92E>I<0003FC00001FFF80007E03E001F8007003F000F807E001FC0FC003FC0FC003
4308FC1F8003FC3F8003FC3F0001F87F0000F07F0000007F0000007E000000FE000000FE0000
430900FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000007E0000
4310007F0000007F0000003F0000063F8000061F80000E1FC0000C0FC0001C07E0003803F000
43117001F800E0007C07C0001FFF000007F8001F277DA525>I<0000000FC0000003FFC00000
431203FFC0000003FFC00000003FC00000000FC00000000FC00000000FC00000000FC0000000
43130FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000F
4314C00000000FC00000000FC00000000FC00000000FC00003F80FC0001FFF0FC0007E078FC0
431500F801EFC003F0007FC007E0003FC00FC0001FC00FC0001FC01F80000FC03F80000FC03F
431600000FC07F00000FC07F00000FC07E00000FC0FE00000FC0FE00000FC0FE00000FC0FE00
4317000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC07E0000
43180FC07F00000FC07F00000FC03F00000FC03F00000FC01F80001FC01F80001FC00FC0003F
4319C007E0007FC003F000EFF001F801CFFF007C078FFF001FFE0FFF0007F80FC0283B7DB92E
4320>I<0007F800001FFF00007C0FC001F803E003F001F007E001F80FC000F81F80007C1F80
4321007C3F00007E3F00003E7F00003E7F00003F7E00003FFE00003FFE00003FFE00003FFFFF
4322FFFFFFFFFFFFFE000000FE000000FE000000FE000000FE0000007E0000007E0000007F00
432300007F0000003F0000033F8000031F8000070FC0000607C0000E07E0001C01F0003800F8
43240070007E03E0001FFF800003FC0020277EA525>I<00007E000003FF80000FC1E0001F87
4325E0003F0FF0007E0FF0007E0FF000FC0FF000FC0FF001F803C001F8000001F8000001F800
43260001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800
43270001F80000FFFFFC00FFFFFC00FFFFFC0001F8000001F8000001F8000001F8000001F800
43280001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800
43290001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800
43300001F8000001F8000001F8000001F8000001F8000001F8000003FC00007FFFF8007FFFF8
4331007FFFF8001C3B7FBA19>I<00000003F0000FF00FF8003FFC3C3C00F81F707C01F00FE0
43327C03E007C07C07C003E0100FC003F0000FC003F0001F8001F8001F8001F8001F8001F800
43331F8001F8001F8001F8001F8001F8001F8001F8001F8001F8000FC003F0000FC003F00007
4334C003E00003E007C00003F00F800003F81F0000073FFC0000060FF000000E000000000E00
43350000000E000000000E000000000F000000000F000000000FC000000007FFFFC00007FFFF
4336F80003FFFFFE0001FFFFFF8003FFFFFFC00F80007FE01F00000FF03E000003F07C000001
4337F07C000001F8F8000000F8F8000000F8F8000000F8F8000000F8F8000000F8FC000001F8
43387C000001F03E000003E03F000007E00F80000F8007E0003F0001FC01FC00007FFFF00000
433907FF000026387EA52A>I<03F000000000FFF000000000FFF000000000FFF0000000000F
4340F00000000003F00000000003F00000000003F00000000003F00000000003F00000000003
4341F00000000003F00000000003F00000000003F00000000003F00000000003F00000000003
4342F00000000003F00000000003F00000000003F00000000003F00000000003F00FF0000003
4343F03FFC000003F0F03F000003F1C01F800003F3800FC00003F7000FC00003FE000FC00003
4344FC0007E00003FC0007E00003F80007E00003F80007E00003F80007E00003F00007E00003
4345F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003
4346F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003
4347F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003
4348F00007E00003F00007E00007F8000FF000FFFFC1FFFF80FFFFC1FFFF80FFFFC1FFFF8029
43493A7EB92E>I<0380000FE0001FF0001FF0001FF0001FF0001FF0000FE000038000000000
435000000000000000000000000000000000000000000000000000000003F000FFF000FFF000
4351FFF00007F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F000
435203F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F000
435303F00003F00003F00003F00003F00003F00007F800FFFFC0FFFFC0FFFFC012387EB717>
4354I<0001C00007F0000FF8000FF8000FF8000FF8000FF80007F00001C00000000000000000
4355000000000000000000000000000000000000000000000001F800FFF800FFF800FFF80007
4356F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001
4357F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001
4358F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001
4359F80001F80001F83C01F87E01F8FF01F0FF03F0FF03F0FF03E0FE07C07C07C03C0F000FFE
43600003F800154984B719>I<03F000FFF000FFF000FFF0000FF00003F00003F00003F00003
4361F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003
4362F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003
4363F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003
4364F00003F00003F00003F00003F00003F00003F00003F00003F00003F00007F800FFFFC0FF
4365FFC0FFFFC0123A7EB917>108 D<03F00FF0001FE000FFF03FFC007FF800FFF0F03F01E0
43667E00FFF1C01F83803F000FF3800FC7001F8003F7000FCE001F8003FE000FDC001F8003FC
43670007F8000FC003FC0007F8000FC003F80007F0000FC003F80007F0000FC003F80007F000
43680FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F0
43690007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E000
43700FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F0
43710007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E000
43720FC003F00007E0000FC003F00007E0000FC003F00007E0000FC007F8000FF0001FE0FFFF
4373C1FFFF83FFFFFFFFC1FFFF83FFFFFFFFC1FFFF83FFFF40257EA445>I<03F00FF00000FF
4374F03FFC0000FFF0F03F0000FFF1C01F80000FF3800FC00003F7000FC00003FE000FC00003
4375FC0007E00003FC0007E00003F80007E00003F80007E00003F80007E00003F00007E00003
4376F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003
4377F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003
4378F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003
4379F00007E00003F00007E00007F8000FF000FFFFC1FFFF80FFFFC1FFFF80FFFFC1FFFF8029
4380257EA42E>I<0003FE0000000FFF8000003E03E00000F800F80001F0007C0003E0003E00
438107C0001F000F80000F801F80000FC01F000007C03F000007E03F000007E07E000003F07E
4382000003F07E000003F07E000003F0FE000003F8FE000003F8FE000003F8FE000003F8FE00
43830003F8FE000003F8FE000003F8FE000003F8FE000003F87E000003F07E000003F07F0000
438407F03F000007E03F000007E01F80000FC00F80000F800FC0001F8007E0003F0003F0007E
43850000F800F800007E03F000001FFFC0000003FE000025277EA52A>I<03F01FE000FFF07F
4386F800FFF1E07E00FFF3801F8007F7000FC003FE0007E003FC0003F003F80003F803F00001
4387F803F00001FC03F00000FC03F00000FE03F00000FE03F00000FE03F000007F03F000007F
438803F000007F03F000007F03F000007F03F000007F03F000007F03F000007F03F000007F03
4389F000007F03F00000FE03F00000FE03F00000FE03F00001FC03F00001FC03F80003F803F8
43900003F003FC0007F003FE000FE003F6000FC003F7803F0003F1E07E0003F0FFF80003F01F
4391C00003F000000003F000000003F000000003F000000003F000000003F000000003F00000
43920003F000000003F000000003F000000003F000000007F8000000FFFFC00000FFFFC00000
4393FFFFC0000028357EA42E>I<0003F800C0001FFE01C0007E0781C000FC01C3C003F000E3
4394C007F00077C00FE00037C00FC0003FC01FC0001FC03F80001FC03F80000FC07F00000FC0
43957F00000FC07F00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE
439600000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC07F00000FC07F00000FC07F00
4397000FC03F00000FC03F80001FC01F80001FC01FC0003FC00FC0003FC007E0007FC003F000
4398EFC001F801CFC0007E078FC0001FFE0FC00007F80FC00000000FC00000000FC00000000F
4399C00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC0
44000000000FC00000001FE0000003FFFF000003FFFF000003FFFF28357DA42C>I<07E01F00
4401FFE07FC0FFE1E3E0FFE387F00FE707F003E607F003EE07F003EC03E003FC008003F80000
440203F8000003F8000003F8000003F0000003F0000003F0000003F0000003F0000003F00000
440303F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F00000
440403F0000003F0000003F0000003F0000003F0000007F80000FFFFF000FFFFF000FFFFF000
44051C257EA421>I<00FF030003FFE7000F80FF001E003F003C001F0078000F0070000700F0
4406000700F0000700F0000300F8000300F8000300FC000300FF0000007FE000007FFF00003F
4407FFE0001FFFF8000FFFFC0003FFFE0000FFFF000007FF8000007F8000001F80C0000FC0C0
44080007C0C00007C0E00003C0E00003C0E00003C0F00003C0F0000380F8000780FC000780FC
4409000F00FF001E00F3C07C00E1FFF000C03F80001A277DA521>I<00180000001800000018
44100000001800000018000000380000003800000038000000780000007800000078000000F8
4411000001F8000003F8000007F800001FFFFF00FFFFFF00FFFFFF0001F8000001F8000001F8
4412000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8
4413000001F8000001F8000001F8000001F8000001F8000001F8000001F800C001F800C001F8
441400C001F800C001F800C001F800C001F800C001F800C001F800C000FC01C000FC0180007C
44150380007E0300003F0700000FFE000001F8001A347FB220>I<03F00007E000FFF001FFE0
441600FFF001FFE000FFF001FFE0000FF0001FE00003F00007E00003F00007E00003F00007E0
44170003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E0
44180003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E0
44190003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E0
44200003F00007E00003F0000FE00003F0000FE00003F0000FE00003F0001FE00001F0001FE0
44210001F8003FE00000F80077F80000FC00E7FF80003F03C7FF80001FFF87FF800003FC07E0
44220029267EA42E>I<FFFF803FFEFFFF803FFEFFFF803FFE0FF8000FF007F00007E003F000
442303C003F800038001F800030001F800030000FC00060000FC00060000FE000E00007E000C
442400007E000C00003F001800003F001800003F803800001F803000001F803000000FC06000
4425000FC06000000FE060000007E0C0000007E0C0000003F180000003F180000003F1800000
442601FB00000001FB00000001FF00000000FE00000000FE000000007C000000007C00000000
44277C00000000380000000038000027257EA32C>I<FFFF1FFFE03FFEFFFF1FFFE03FFEFFFF
44281FFFE03FFE0FF800FF000FF807F0007E0003E007F0007E0003C003F0003E00018003F000
44293E00018001F8003F00030001F8003F00030001F8003F00030000FC003F80060000FC006F
443080060000FC006F800600007E00EFC00C00007E00C7C00C00007E00C7C00C00003F01C7E0
44311800003F0183E01800003F8183F03800001F8383F03000001F8301F03000001FC301F870
443200000FC600F86000000FC600F860000007E600FCC0000007EC007CC0000007EC007CC000
44330003FC007F80000003F8003F80000003F8003F80000001F8003F00000001F0001F000000
443401F0001F00000000F0001E00000000E0000E0000000060000C000037257EA33C>I<FFFF
4435807FFF00FFFF807FFF00FFFF807FFF0003FE003FF00001FE001F800000FE001F0000007E
4436001C0000003F00180000001F80300000001FC0700000000FC0E000000007E0C000000007
4437F18000000003FB8000000001FF0000000000FE0000000000FE00000000007F0000000000
44383F00000000007F80000000007FC000000000CFC000000001C7E00000000383F000000007
443903F80000000601F80000000C00FC0000001C007E00000038007F00000078003F000000F0
4440001F800001F8001FC0000FF8003FF000FFFE00FFFF80FFFE00FFFF80FFFE00FFFF802924
44417FA32C>I<FFFF803FFEFFFF803FFEFFFF803FFE0FF8000FF007F00007C003F000038001
4442F800038001F800030001FC00030000FC00060000FC000600007E000C00007E000C00007F
4443000C00003F001800003F001800001F803000001F803000001FC07000000FC06000000FC0
444460000007E0C0000007E0C0000007F1C0000003F180000003F180000001FB00000001FB00
4445000001FF00000000FE00000000FE000000007C000000007C000000007C00000000380000
44460000380000000030000000003000000000700000000060000000006000000000C0000000
444700C000007C01C00000FE01800000FE03800000FE03000000FE06000000FC0E000000701C
444800000038380000001FF00000000FC000000027357EA32C>I<01E0004007F800E00FFE01
4449C01FFF87803C3FFF00700FFE00E003FC004000F0001B0879B62A>126
4450D E /Fs 13 118 df<000F00003F80003FC0007FE000FFE001FFE003FFE007FFE007FFC0
44510FFF801FFE003FF8007FE000FF80007E000038000013106DBA30>19
4452D<00000003E00000000000000007F00000000000000007F0000000000000000FF8000000
4453000000000FF8000000000000000FF8000000000000001FFC000000000000001FFC000000
4454000000003FFE000000000000003FFE000000000000003FFE000000000000007FFF000000
4455000000007FFF00000000000000FFFF80000000000000FFFF80000000000000FFFF800000
445600000001FFFFC0000000000001F3FFC0000000000003F3FFE0000000000003E1FFE00000
445700000003E1FFE0000000000007E1FFF0000000000007C0FFF000000000000FC0FFF80000
44580000000F807FF800000000000F807FF800000000001F807FFC00000000001F003FFC0000
44590000003F003FFE00000000003E001FFE00000000003E001FFE00000000007E001FFF0000
44600000007C000FFF0000000000FC000FFF8000000000F80007FF8000000000F80007FF8000
4461000001F80007FFC000000001F00003FFC000000003FFFFFFFFE000000003FFFFFFFFE000
4462000003FFFFFFFFE000000007FFFFFFFFF000000007C00000FFF00000000FC00000FFF800
446300000F8000007FF80000000F8000007FF80000001F8000007FFC0000001F0000003FFC00
446400003F0000003FFE0000003E0000001FFE0000003E0000001FFE0000007E0000001FFF00
446500007C0000000FFF000000FE0000000FFF8000FFFFF80007FFFFFF80FFFFF80007FFFFFF
446680FFFFF80007FFFFFF80FFFFF80007FFFFFF80413A7DB948>65 D<0007FF000E00003FFF
4467E01E0000FFFFF83E0003FFFFFE7E0007FC01FFFE000FF0001FFE001FE0000FFE003FC000
446803FE003F800001FE007F800000FE007F000000FE007F0000007E00FF0000007E00FF0000
4469003E00FF0000003E00FF8000003E00FF8000001E00FFC000001E00FFE000001E00FFF000
4470000000FFFC000000007FFFE00000007FFFFE0000007FFFFFF000003FFFFFFE00003FFFFF
4471FF80001FFFFFFFC0000FFFFFFFF00007FFFFFFF80003FFFFFFFC0000FFFFFFFE00003FFF
4472FFFE00000FFFFFFF000001FFFFFF0000000FFFFF800000007FFF800000000FFFC0000000
447303FFC000000001FFC000000000FFC0F00000007FC0F00000007FC0F00000007FC0F00000
4474003FC0F00000003FC0F80000003FC0F80000003F80FC0000003F80FC0000007F80FE0000
4475007F00FF0000007F00FF800000FE00FFE00001FC00FFF80003FC00FFFF801FF800FCFFFF
4476FFE000F83FFFFFC000F007FFFE0000E0007FF000002A3B7BB935>83
4477D<003FFE00000003FFFFE000000FFFFFF800001FF00FFE00003FF003FF00003FF801FF80
4478003FF800FFC0003FF800FFC0003FF8007FE0003FF8007FE0001FF0007FE0000FE0007FE0
4479000380007FE0000000007FE0000000007FE00000003FFFE000000FFFFFE000007FFFFFE0
44800001FFF87FE00007FF807FE0000FFE007FE0003FF8007FE0003FF0007FE0007FE0007FE0
448100FFE0007FE000FFC0007FE000FFC0007FE000FFC0007FE000FFC0007FE000FFC000FFE0
448200FFE001FFE0007FE001FFE0003FF007FFF8001FFC1FBFFFC00FFFFE1FFFC003FFF80FFF
4483C0003FE003FFC02A257DA42E>97 D<00FF00000000FFFF00000000FFFF00000000FFFF00
4484000000FFFF0000000007FF0000000003FF0000000003FF0000000003FF0000000003FF00
448500000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF00
448600000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF01
4487FF800003FF0FFFF00003FF3FFFFC0003FFFE03FF0003FFF000FF8003FFE0007FC003FF80
4488003FE003FF00003FF003FF00001FF803FF00001FF803FF00001FFC03FF00000FFC03FF00
4489000FFC03FF00000FFE03FF00000FFE03FF00000FFE03FF00000FFE03FF00000FFE03FF00
4490000FFE03FF00000FFE03FF00000FFE03FF00000FFE03FF00000FFE03FF00000FFC03FF00
4491000FFC03FF00000FFC03FF00001FF803FF00001FF803FF00001FF003FF80003FF003FFC0
4492007FE003FFE0007FC003FDF001FF8003F8FC07FE0003F03FFFF80003E00FFFE00003C003
4493FF00002F3A7EB935>I<0001FFC000000FFFFC00007FFFFF0000FF80FF8003FE00FFC007
4494FC01FFC00FF801FFC01FF801FFC01FF001FFC03FF001FFC03FF000FF807FE0007F007FE0
4495001C007FE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE000
44960000FFE0000000FFE0000000FFE00000007FE00000007FE00000007FF00000003FF00000
4497003FF00001E01FF80001E01FF80003E00FFC0007C007FE00078003FF001F8000FFC07E00
4498007FFFFC00000FFFF0000001FF800023257DA42A>I<01F00007FC000FFE000FFE001FFF
4499001FFF001FFF001FFF001FFF000FFE000FFE0007FC0001F0000000000000000000000000
45000000000000000000000000000000000000FF007FFF007FFF007FFF007FFF0007FF0003FF
45010003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF
45020003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF
45030003FF0003FF00FFFFF8FFFFF8FFFFF8FFFFF8153B7DBA1B>105
4504D<00FE007FE0000FFC0000FFFE01FFFC003FFF8000FFFE07FFFF00FFFFE000FFFE1F81FF
450583F03FF000FFFE3C00FF87801FF00007FE7800FFCF001FF80003FEF000FFDE001FF80003
4506FFE0007FFC000FFC0003FFC0007FF8000FFC0003FFC0007FF8000FFC0003FF80007FF000
45070FFC0003FF80007FF0000FFC0003FF00007FE0000FFC0003FF00007FE0000FFC0003FF00
4508007FE0000FFC0003FF00007FE0000FFC0003FF00007FE0000FFC0003FF00007FE0000FFC
45090003FF00007FE0000FFC0003FF00007FE0000FFC0003FF00007FE0000FFC0003FF00007F
4510E0000FFC0003FF00007FE0000FFC0003FF00007FE0000FFC0003FF00007FE0000FFC0003
4511FF00007FE0000FFC0003FF00007FE0000FFC0003FF00007FE0000FFC0003FF00007FE000
45120FFC0003FF00007FE0000FFC0003FF00007FE0000FFC0003FF00007FE0000FFC0003FF00
4513007FE0000FFC00FFFFFC1FFFFF83FFFFF0FFFFFC1FFFFF83FFFFF0FFFFFC1FFFFF83FFFF
4514F0FFFFFC1FFFFF83FFFFF04C257DA451>109 D<0001FFC00000000FFFF80000007FFFFF
4515000000FF80FF800003FE003FE00007FC001FF0000FF8000FF8001FF00007FC001FF00007
4516FC003FF00007FE003FE00003FE007FE00003FF007FE00003FF007FE00003FF00FFE00003
4517FF80FFE00003FF80FFE00003FF80FFE00003FF80FFE00003FF80FFE00003FF80FFE00003
4518FF80FFE00003FF80FFE00003FF807FE00003FF007FE00003FF007FE00003FF003FE00003
4519FE003FF00007FE001FF00007FC001FF00007FC000FF8000FF80007FC001FF00003FE003F
4520E00001FF80FFC000007FFFFF0000001FFFFC00000001FFC0000029257DA430>111
4521D<00FE03F000FFFE0FFE00FFFE3FFF00FFFE7C7F80FFFEF8FFC007FEF0FFC003FFE0FFC0
452203FFC0FFC003FFC0FFC003FF807F8003FF803F0003FF800C0003FF80000003FF00000003
4523FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF
452400000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00
4525000003FF00000003FF00000003FF00000003FF000000FFFFFE0000FFFFFE0000FFFFFE00
452600FFFFFE000022257EA427>114 D<003FF03803FFFEF80FFFFFF81FC00FF83F0003F87E
45270001F87C0000F8FC0000F8FC000078FE000078FF000078FF800000FFFC0000FFFFE0007F
4528FFFC007FFFFF803FFFFFC01FFFFFF00FFFFFF803FFFFF800FFFFFC001FFFFC00007FFE00
45290007FEF00001FEF00000FEF80000FEF800007EFC00007EFC00007CFE0000FCFF0000F8FF
45308001F8FFF007F0FFFFFFC0F8FFFF00E01FF8001F257DA426>I<000F0000000F0000000F
45310000000F0000000F0000001F0000001F0000001F0000001F0000003F0000003F0000007F
4532000000FF000000FF000001FF000007FF00001FFFFFE0FFFFFFE0FFFFFFE0FFFFFFE003FF
4533000003FF000003FF000003FF000003FF000003FF000003FF000003FF000003FF000003FF
4534000003FF000003FF000003FF000003FF000003FF000003FF000003FF000003FF000003FF
4535007803FF007803FF007803FF007803FF007803FF007803FF007803FF007803FF00F801FF
453680F001FF81F000FFC3E0003FFFC0001FFF800003FE001D357EB425>I<00FF00003FC0FF
4537FF003FFFC0FFFF003FFFC0FFFF003FFFC0FFFF003FFFC007FF0001FFC003FF0000FFC003
4538FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003
4539FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003
4540FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003
4541FF0000FFC003FF0000FFC003FF0001FFC003FF0001FFC003FF0003FFC003FF0003FFC001
4542FF0007FFC001FF800FFFE000FFC03EFFFF007FFFFCFFFF001FFFF0FFFF0003FF80FFFF30
4543257DA435>I E /Ft 7 115 df<0000003FFE0000000003FFFFF00000000FFFFFFE000000
45443FFFFFFF800000FFFFFFFF800001FFFFFFFF800003FFE007FF00000FFF0000FF00001FFC
454500001F00003FF800000700007FE000000300007FC00000000000FF800000000001FF0000
454600000003FF000000000003FE000000000007FC000000000007FC00000000000FF8000000
454700000FF800000000001FF000000000001FF000000000003FE000000000003FE000000000
4548003FE000000000007FC000000000007FC000000000007FC000000000007FC00000000000
45497FC00000000000FF800000000000FF800000000000FF800000000000FF800000000000FF
4550800000000000FF800000000000FF800000000000FF800000000000FF800000000000FF80
45510000000000FF800000000000FF800000000000FF8000000000007FC000000000007FC000
4552000000007FC000000000007FC000000000007FC000000000003FE000000000003FE00000
45530000003FE000000000001FF000000000001FF000000000000FF800000000000FF8000000
4554000007FC000000000007FC000000000003FE000000000003FF000000000001FF00000000
45550000FF8000000080007FC000000180007FE000000380003FF800000F80001FFC00001FC0
4556000FFF00007FC00003FFE003FFC00001FFFFFFFF800000FFFFFFFE0000003FFFFFFC0000
4557000FFFFFF000000003FFFFC0000000003FFC000032497AC63E>67
4558D<0000003FFC0000000001FFFFE00000000FFFFFF80000003FFFFFFF000000FFFFFFFFC0
45590001FFFFFFFFE00003FFE007FFE00007FF00007FE0001FFC00001FC0003FF8000007C000
45603FF0000003C0007FC0000001C000FF80000000C001FF800000000003FF000000000003FE
4561000000000007FC000000000007FC00000000000FF800000000000FF800000000001FF000
4562000000001FF000000000003FE000000000003FE000000000003FE000000000007FC00000
45630000007FC000000000007FC000000000007FC000000000007FC00000000000FF80000000
45640000FF800000000000FF800000000000FF800000000000FF800000000000FF8000000000
456500FF800000000000FF800000000000FF800000000000FF800000000000FF800001FFFFF0
4566FF800001FFFFF0FF800001FFFFF07FC00001FFFFF07FC00001FFFFF07FC00001FFFFF07F
4567C00000000FF07FC00000000FF03FE00000000FF03FE00000000FF03FE00000000FF01FF0
45680000000FF01FF00000000FF00FF80000000FF00FF80000000FF007FC0000000FF007FC00
456900000FF003FE0000000FF003FF0000000FF001FF8000000FF000FF8000000FF0007FC000
4570000FF0003FF000000FF0003FF800000FF0001FFC00000FF00007FF00003FF00003FFE007
4571FFF00001FFFFFFFFF00000FFFFFFFFE000003FFFFFFF0000000FFFFFFC00000001FFFFE0
4572000000003FFC000034497AC641>71 D<FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF0FFFFFFFF
4573FFFFFFF0FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF00000003FE0000000
45740000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003F
4575E00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000
45760000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003F
4577E00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000
45780000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003F
4579E00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000
45800000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003F
4581E00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000
45820000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003F
4583E00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000
45840000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003F
4585E00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000
45860000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003F
4587E00000000000003FE00000000000003FE00000000000003FE00000003C457DC443>84
4588D<0007FE0000007FFFC00003FFFFE0000FFFFFF8001FFFFFFC001FFFFFFE001FF803FF00
45891F8001FF001E0000FF801800007F801000003FC00000003FC00000003FE00000001FE000
459000001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE00000
45917FFFE0000FFFFFE0003FFFFFE001FFFFFFE003FFFFFFE00FFFF01FE01FFE001FE03FF800
45921FE07FE0001FE07FC0001FE0FF80001FE0FF00001FE0FF00001FE0FF00001FE0FF00001F
4593E0FF00003FE0FF80003FE07FC0007FE07FE001FFE07FF80FFFE03FFFFFFFE01FFFFFFFE0
45941FFFFFDFE00FFFFF1FE003FFF81FE000FF800000232F7CAD2F>97
4595D<0001FE00000007FFC000001FFFF000007FFFF80000FFFFFC0001FFFFFE0003FF03FF00
459607FC00FF000FF8007F800FF0003F801FE0001FC01FE0000FC03FC0000FE03F800007E07F
4597800007E07F800007E07F000007E07F000003F0FFFFFFFFF0FFFFFFFFF0FFFFFFFFF0FFFF
4598FFFFF0FFFFFFFFF0FFFFFFFFF0FE00000000FE00000000FE00000000FF00000000FF0000
459900007F000000007F000000007F800000003F800000003FC00000003FC00000001FE00000
4600001FF00000100FF800007007FC0001F003FE0007F003FF803FF001FFFFFFF000FFFFFFE0
4601003FFFFF80001FFFFE000007FFF8000000FFC000242F7DAD2B>101
4602D<00001FF00000FFFE0001FFFE0007FFFE000FFFFE001FFFFE003FF01E003FC002007F80
460300007F000000FE000000FE000001FE000001FE000001FE000001FE000001FE000001FE00
46040001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE0000FFFFFF
460580FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF8001FE000001FE000001FE000001FE00
46060001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE00
46070001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE00
46080001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE000001FE00
46090001FE000001FE000001FE000001FE000001FE000001FE000001FE00001F467EC51E>I<
461000001FFE00FFFE03FFFE07FFFE1FFFFE3FFFFE7FFFFEFFF0FEFF80FFFE00FFFC00FFF800
4611FFF000FFE000FFC000FFC000FF8000FF8000FF8000FF0000FF0000FF0000FF0000FF0000
4612FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000
4613FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000182D79AC21>114
4614D E /Fu 25 118 df<7FFFFFFF00FFFFFFFF80FFFFFFFF80FFFFFFFF80FFFFFFFF807FFF
4615FFFF0021067B9B2C>45 D<1F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F000B0B70
46168A2C>I<00000007000000000F800000001F800000001F800000003F800000003F000000
4617007F000000007E00000000FE00000000FC00000001FC00000001F800000003F800000003
4618F000000003F000000007F000000007E00000000FE00000000FC00000001FC00000001F80
46190000003F800000003F000000007F000000007E00000000FE00000000FC00000000FC0000
46200001FC00000001F800000003F800000003F000000007F000000007E00000000FE0000000
46210FC00000001FC00000001F800000001F800000003F800000003F000000007F000000007E
462200000000FE00000000FC00000001FC00000001F800000003F800000003F000000007F000
4623000007E000000007E00000000FE00000000FC00000001FC00000001F800000003F800000
4624003F000000007F000000007E00000000FE00000000FC00000000FC00000000F800000000
4625780000000021417BB92C>I<00070000000F8000000F8000001F8000001F8000003F8000
4626007F800000FF800001FF800007FF80007FFF8000FFFF8000FFDF8000FF9F80007C1F8000
4627001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000
4628001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000
4629001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000
4630001F8000001F8000001F8000001F8000001F80007FFFFFE0FFFFFFF0FFFFFFF0FFFFFFF0
46317FFFFFE01C3477B32C>49 D<000FF80000007FFF800001FFFFE00007FFFFF0000FFFFFFC
4632001FF80FFE003FE001FF003F80007F007F00003F807E00001F80FE00001FC0FE00000FC0
4633FF00000FE0FF000007E0FF000007E0FF000007E07E000007E03C000007E000000007E000
4634000007E00000000FE00000000FC00000001FC00000001F800000003F800000003F000000
4635007F00000000FE00000001FC00000003FC00000007F80000000FF00000001FE00000003F
4636C0000000FF80000001FE00000003FC00000007F80000000FF00000003FE00000007F8000
46370000FF00000001FE00000003FC0003C007F80007E01FE00007E03FC00007E07FFFFFFFE0
4638FFFFFFFFE0FFFFFFFFE0FFFFFFFFE07FFFFFFFC023347CB32C>I<000007F00000000FF8
46390000001FF80000003FF80000003FF80000007EF80000007EF8000000FCF8000001F8F800
46400001F8F8000003F0F8000007E0F8000007E0F800000FC0F800001F80F800001F80F80000
46413F00F800007E00F800007E00F80000FC00F80001F800F80001F800F80003F000F80003E0
464200F80007E000F8000FC000F8000FC000F8001F8000F8003F0000F8003F0000F8007E0000
4643F800FC0000F800FFFFFFFFFCFFFFFFFFFEFFFFFFFFFEFFFFFFFFFE7FFFFFFFFC000000F8
464400000000F800000000F800000000F800000000F800000000F800000000F800000000F800
4645000000F800000000F80000007FFFF00000FFFFF80000FFFFF80000FFFFF800007FFFF027
4646347EB32C>52 D<00003FC0000001FFF8000007FFFC00001FFFFE00003FFFFF00007FE07F
46470000FF003F8001FE007F8003F8007F8007F0007F8007E0007F800FE0003F001FC0001E00
46481F800000003F800000003F000000003F000000007F000000007E000000007E03FE00007E
46491FFF8000FC7FFFE000FDFFFFF000FFFFFFF800FFFE07FC00FFF001FE00FFC0007F00FF80
4650003F80FF00001F80FF00001FC0FE00000FC0FE00000FE0FE000007E0FE000007E0FE0000
465107E07E000007E07E000007E07E000007E07E000007E03F000007E03F00000FE03F80000F
4652C01F80001FC01FC0001F800FC0003F800FE0007F0007F801FE0003FE07FC0001FFFFF800
465300FFFFF000007FFFE000001FFF80000007FC000023357CB32C>54
4654D<7800000000FFFFFFFFC0FFFFFFFFE0FFFFFFFFE0FFFFFFFFE0FFFFFFFFC0FC00003F80
4655FC00007F00FC0000FE00780000FC00000001FC00000003F800000007F000000007E00000
4656000FE00000000FC00000001F800000003F800000003F000000007F000000007E00000000
4657FE00000000FC00000001FC00000001F800000001F800000003F000000003F000000007F0
465800000007E000000007E000000007E00000000FC00000000FC00000000FC00000000FC000
465900001F800000001F800000001F800000001F800000001F800000003F800000003F000000
4660003F000000003F000000003F000000003F000000003F000000003F000000003F00000000
46613F000000003F000000001E00000023357CB32C>I<0007FC0000003FFF800000FFFFE000
466203FFFFF80007FFFFFC000FFC07FE001FF001FF001FC0007F003F80003F803F00001F807F
466300001FC07E00000FC07E00000FC07E00000FC07E00000FC07E00000FC03F00001F803F00
4664001F801F80003F001FC0007F000FF001FE0003FC07F80001FFFFF000007FFFC0000007FC
46650000007FFFC00001FFFFF00003FC07F8000FF001FE001FC0007F001F80003F003F00001F
4666807E00000FC07E00000FC0FC000007E0FC000007E0FC000007E0FC000007E0FC000007E0
4667FC000007E0FC000007E07E00000FC07E00000FC07F00001FC03F80003F801FC0007F001F
4668F001FF000FFC07FE0007FFFFFC0003FFFFF80000FFFFE000003FFF80000007FC00002335
46697CB32C>I<0007FC0000003FFF000000FFFFC00001FFFFE00003FFFFF00007FC07F8000F
4670F001FC001FE000FE003F80007E003F80007F007F00003F007E00001F80FE00001F80FC00
4671001F80FC00000FC0FC00000FC0FC00000FC0FC00000FC0FC00000FE0FC00000FE0FC0000
46720FE0FE00000FE07E00000FE07F00001FE03F00001FE03F80003FE01FC0007FE00FF001FF
4673E007FC0FFFE003FFFFFFE001FFFFF7E000FFFFC7E0003FFF0FE0000FF80FC00000000FC0
46740000000FC00000001FC00000001F800000003F800000003F000F00007F001F80007E003F
4675C000FE003FC001FC003FC003F8003FC007F8003F801FF0001FE07FE0001FFFFFC0000FFF
4676FF000007FFFE000001FFF80000007FC0000023357CB32C>I<1F003F807FC0FFE0FFE0FF
4677E0FFE0FFE07FC03F801F0000000000000000000000000000000000000000000000000000
46780000001F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F000B2470A32C>I<00007F80
4679000003FFE000000FFFF000003FFFF800007FFFFC0000FFC0FE0001FE007F0003F8003F00
468007F0001F8007E00FCF800FC03FFF801F807FFFC01F80FFFFC03F01FFFFC03E03F87FC03E
468107F03FE07E07E01FE07C0FC00FE07C0F8007E07C0F8007E0FC1F8007E0F81F0003E0F81F
46820003E0F81F0003E0F81F0003E0F81F0003E0F81F0003E0F81F0003E0F81F0003E0F81F00
468303E0FC1F8007E07C0F8007C07C0F8007C07C0FC00FC07E07E01F803E07F03F803E03F87F
4684003F01FFFE001F80FFFC001F807FF8000FC03FF00007E00FC00007F00007C003F8000FE0
468501FE001FE000FFC0FFE0007FFFFFC0003FFFFF80000FFFFE000003FFF80000007FC00023
4686337CB22C>64 D<7FFFFF0000FFFFFFC000FFFFFFF000FFFFFFF8007FFFFFFC0007E003FE
46870007E000FF0007E0007F8007E0003F8007E0001FC007E0000FE007E0000FE007E00007E0
468807E00007F007E00003F007E00003F807E00001F807E00001F807E00001F807E00001F807
4689E00000FC07E00000FC07E00000FC07E00000FC07E00000FC07E00000FC07E00000FC07E0
46900000FC07E00000FC07E00000FC07E00000FC07E00000FC07E00001F807E00001F807E000
469101F807E00003F807E00003F007E00003F007E00007F007E00007E007E0000FE007E0001F
4692C007E0003FC007E0007F8007E000FF0007E003FE007FFFFFFC00FFFFFFF800FFFFFFF000
4693FFFFFFC0007FFFFF000026337EB22C>68 D<01FFF0000007FFFE00001FFFFF80001FFFFF
4694E0003FFFFFF0003FC01FF8003FC007F8003FC001FC001F8000FC00060000FE000000007E
4695000000007E000000007E000000FFFE00001FFFFE0000FFFFFE0003FFFFFE000FFFFFFE00
46961FFF807E003FF8007E007FC0007E007F00007E00FE00007E00FC00007E00FC00007E00FC
469700007E00FC00007E00FE00007E007F0000FE007F8003FE003FE01FFE001FFFFFFFFC0FFF
4698FFFFFE07FFFFBFFE01FFFE1FFE003FF007FC27247CA32C>97 D<7FF0000000FFF8000000
4699FFF8000000FFF80000007FF800000001F800000001F800000001F800000001F800000001
4700F800000001F800000001F800000001F800000001F800000001F800000001F81FE00001F8
4701FFF80001FBFFFE0001FFFFFF0001FFFFFF8001FFF07FC001FF801FE001FF0007F001FE00
470203F801FC0003F801FC0001FC01F80000FC01F80000FC01F80000FE01F800007E01F80000
47037E01F800007E01F800007E01F800007E01F800007E01F800007E01F800007E01F80000FE
470401FC0000FC01FC0000FC01FC0001F801FE0003F801FF0007F001FF000FF001FF801FE001
4705FFE07FC001FFFFFF8001FFFFFF0001FBFFFE0001F8FFF80000F03FC00027337FB22C>I<
47060003FFE000001FFFF800007FFFFE0001FFFFFE0003FFFFFF0007FE00FF000FF000FF001F
4707E000FF001FC0007E003F800018003F000000007F000000007E000000007E00000000FC00
4708000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC0000
470900007E000000007E000000007F000000003F00000F003F80001F801FC0001F801FE0003F
4710800FF0007F0007FE03FF0003FFFFFE0001FFFFFC00007FFFF800001FFFE0000003FF0000
471121247AA32C>I<00000FFE0000001FFF0000001FFF0000001FFF0000000FFF000000003F
4712000000003F000000003F000000003F000000003F000000003F000000003F000000003F00
47130000003F000000003F000007F83F00003FFE3F0000FFFFBF0001FFFFFF0003FFFFFF0007
4714FC0FFF000FF003FF001FE001FF001FC000FF003F80007F003F00007F007E00003F007E00
4715003F00FE00003F00FC00003F00FC00003F00FC00003F00FC00003F00FC00003F00FC0000
47163F00FC00003F00FC00003F00FE00003F007E00007F007E00007F007F0000FF003F8000FF
4717003F8001FF001FC003FF000FF007FF0007FC1FFF0003FFFFFFFC01FFFFBFFE00FFFF3FFE
4718003FFC3FFE000FF01FFC27337DB22C>I<0003FE0000001FFFC000007FFFF00001FFFFF8
47190003FFFFFC0007FE03FE000FF800FF001FE0003F801FC0003F803F80001FC03F00000FC0
47207F00000FC07E00000FE07E000007E0FC000007E0FFFFFFFFE0FFFFFFFFE0FFFFFFFFE0FF
4721FFFFFFE0FFFFFFFFC0FC00000000FE000000007E000000007E000000007F000000003F00
47220003C03F800007E01FC00007E00FF0000FE007F8003FC007FF00FFC001FFFFFF8000FFFF
4723FF00003FFFFC00000FFFF0000001FF800023247CA32C>I<00070000001FC000001FC000
4724003FE000003FE000003FE000001FC000001FC00000070000000000000000000000000000
4725000000000000000000000000000000007FFFC0007FFFE000FFFFE0007FFFE0007FFFE000
47260007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000
47270007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000
47280007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0007FFFFFFC
4729FFFFFFFEFFFFFFFEFFFFFFFE7FFFFFFC1F3479B32C>105 D<7FFFE00000FFFFF00000FF
4730FFF00000FFFFF000007FFFF000000003F000000003F000000003F000000003F000000003
4731F000000003F000000003F000000003F000000003F000000003F000000003F000000003F0
473200000003F000000003F000000003F000000003F000000003F000000003F000000003F000
4733000003F000000003F000000003F000000003F000000003F000000003F000000003F00000
47340003F000000003F000000003F000000003F000000003F000000003F000000003F0000000
473503F000000003F000000003F000000003F000000003F000000003F000000003F000000003
4736F000007FFFFFFF80FFFFFFFFC0FFFFFFFFC0FFFFFFFFC07FFFFFFF8022337BB22C>108
4737D<0007FC0000001FFF0000007FFFC00001FFFFF00003FFFFF80007FC07FC000FF001FE00
47381FE000FF001F80003F003F80003F803F00001F807E00000FC07E00000FC07E00000FC0FC
4739000007E0FC000007E0FC000007E0FC000007E0FC000007E0FC000007E0FC000007E0FE00
4740000FE07E00000FC07E00000FC07F00001FC03F00001F803F80003F801FC0007F001FE000
4741FF000FF001FE0007FC07FC0003FFFFF80001FFFFF000007FFFC000001FFF00000007FC00
47420023247CA32C>111 D<7FF01FE000FFF8FFF800FFFBFFFE00FFFFFFFF007FFFFFFF8001
4743FFF07FC001FF801FE001FF0007F001FE0003F801FC0003F801FC0001FC01F80000FC01F8
47440000FC01F80000FE01F800007E01F800007E01F800007E01F800007E01F800007E01F800
4745007E01F800007E01F800007E01F80000FE01FC0000FC01FC0000FC01FC0001F801FE0003
4746F801FF0007F001FF000FF001FF801FE001FFE07FC001FFFFFF8001FFFFFF0001FBFFFE00
474701F8FFF80001F83FC00001F800000001F800000001F800000001F800000001F800000001
4748F800000001F800000001F800000001F800000001F800000001F800000001F800000001F8
47490000007FFFE00000FFFFF00000FFFFF00000FFFFF000007FFFE0000027367FA32C>I<7F
4750FE003FC0FFFF01FFF0FFFF07FFF8FFFF1FFFFC7FFF3FFFFC003F7FE1FC003FFF01FC003F
4751FC00F8003FF80070003FF00000003FE00000003FE00000003FC00000003F800000003F80
47520000003F800000003F000000003F000000003F000000003F000000003F000000003F0000
475300003F000000003F000000003F000000003F000000003F000000003F000000003F000000
4754003F000000003F0000007FFFFFE000FFFFFFF000FFFFFFF000FFFFFFF0007FFFFFE00026
4755247EA32C>114 D<001E000000003F000000003F000000003F000000003F000000003F00
47560000003F000000003F000000003F000000003F0000007FFFFFFF00FFFFFFFF80FFFFFFFF
475780FFFFFFFF807FFFFFFF00003F000000003F000000003F000000003F000000003F000000
4758003F000000003F000000003F000000003F000000003F000000003F000000003F00000000
47593F000000003F000000003F000000003F000000003F000000003F0003C0003F0007E0003F
47600007E0003F0007E0003F0007E0003F0007E0003F800FE0001F801FC0001FE07FC0000FFF
4761FF80000FFFFF000003FFFE000001FFF80000003FE000232E7EAD2C>116
4762D<7FF003FF8000FFF807FFC000FFF807FFC000FFF807FFC0007FF803FFC00001F8000FC0
47630001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC0
47640001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC0
47650001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC00001F8000FC0
47660001F8000FC00001F8000FC00001F8001FC00001F8001FC00001F8003FC00001FC007FC0
47670000FE03FFC00000FFFFFFFF00007FFFFFFF80003FFFFFFF80001FFFCFFF800003FE07FF
47680029247FA32C>I E /Fv 34 125 df<001F00001F80003F80007F80007F8000FF0001FE
47690003FC0003F80007F0000FE0000F80001F00003E00003C0000780000E000004000001112
47706CC431>19 D<FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC01A067F9721>
477145 D<0000000FFE000060000000FFFFC000E0000003FFFFF000E000000FFC01FC01E000
4772003FC0003E01E00000FF00000F83E00003FC000003C7E00007F8000001E7E0000FF00000
477300FFE0001FE00000007FE0003FC00000003FE0007F800000001FE000FF000000000FE001
4774FE000000000FE001FC0000000007E003FC0000000007E007F80000000003E007F8000000
47750003E00FF00000000001E00FF00000000001E01FE00000000000E01FE00000000000E03F
4776E00000000000E03FE00000000000E03FC00000000000607FC00000000000607FC0000000
47770000607FC00000000000607FC0000000000000FF80000000000000FF80000000000000FF
477880000000000000FF80000000000000FF80000000000000FF80000000000000FF80000000
4779000000FF80000000000000FF80000000000000FF80000000000000FF80000000000000FF
478080000000000000FF80000000000000FF800000000000007FC00000000000007FC0000000
47810000007FC00000000000607FC00000000000603FC00000000000603FE00000000000603F
4782E00000000000601FE00000000000E01FF00000000000E00FF00000000000C00FF0000000
47830000C007F80000000001C007F800000000018003FC00000000038001FC00000000038001
4784FE00000000070000FF000000000600007F800000000E00003FC00000001C00001FE00000
4785003800000FF000000078000007F8000000F0000003FC000001E0000000FF000007800000
4786003FC0001F000000000FFC00FC0000000003FFFFF00000000000FFFFC000000000000FFE
47870000003B487BC546>67 D<FFFFFFFFFF00000000FFFFFFFFFFF0000000FFFFFFFFFFFC00
4788000001FFC00007FF00000000FF8000007FC00000007F8000001FE00000007F80000007F0
47890000007F80000003FC0000007F80000001FE0000007F80000000FF0000007F800000007F
47900000007F800000003F8000007F800000001FC000007F800000000FE000007F800000000F
4791E000007F8000000007F000007F8000000007F800007F8000000003F800007F8000000003
4792FC00007F8000000003FC00007F8000000001FC00007F8000000001FE00007F8000000001
4793FE00007F8000000001FE00007F8000000001FF00007F8000000000FF00007F8000000000
4794FF00007F8000000000FF00007F8000000000FF80007F8000000000FF80007F8000000000
4795FF80007F8000000000FF80007F8000000000FF80007F8000000000FF80007F8000000000
4796FF80007F8000000000FF80007F8000000000FF80007F8000000000FF80007F8000000000
4797FF80007F8000000000FF80007F8000000000FF80007F8000000000FF00007F8000000000
4798FF00007F8000000000FF00007F8000000001FF00007F8000000001FE00007F8000000001
4799FE00007F8000000001FE00007F8000000001FC00007F8000000003FC00007F8000000003
4800F800007F8000000007F800007F8000000007F000007F800000000FF000007F800000000F
4801E000007F800000001FC000007F800000003FC000007F800000003F8000007F800000007F
48020000007F80000000FE0000007F80000003FC0000007F80000007F80000007F8000001FE0
4803000000FF8000007FC0000001FFC00007FF000000FFFFFFFFFFFC000000FFFFFFFFFFF000
48040000FFFFFFFFFF0000000041447CC34B>I<FFFFFFFFFFFFF0FFFFFFFFFFFFF0FFFFFFFF
4805FFFFF001FFC000007FF0007F8000000FF8007F80000003F8007F80000001F8007F800000
480600F8007F8000000078007F8000000038007F8000000038007F800000001C007F80000000
48071C007F800000001C007F800000000C007F800000000C007F800000000C007F800000000C
4808007F800000000E007F8000000006007F80000C0006007F80000C0006007F80000C000000
48097F80000C0000007F80000C0000007F80000C0000007F80000C0000007F80001C0000007F
481080001C0000007F80003C0000007F80007C0000007F8001FC0000007FFFFFFC0000007FFF
4811FFFC0000007FFFFFFC0000007F8001FC0000007F80007C0000007F80003C0000007F8000
48121C0000007F80001C0000007F80000C0000007F80000C0000007F80000C0000007F80000C
48130000007F80000C0000007F80000C0000007F80000C0000007F8000000000007F80000000
481400007F8000000000007F8000000000007F8000000000007F8000000000007F8000000000
4815007F8000000000007F8000000000007F8000000000007F8000000000007F800000000000
48167F8000000000007F8000000000007F8000000000007F8000000000007FC00000000001FF
4817E000000000FFFFFFF8000000FFFFFFF8000000FFFFFFF800000037447CC340>70
4818D<FFFFFFC003FFFFFFFFFFFFC003FFFFFFFFFFFFC003FFFFFF01FFE0000007FF80007F80
4819000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE
482000007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80
4821000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE
482200007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80
4823000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE
482400007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007FFF
4825FFFFFFFE00007FFFFFFFFFFE00007FFFFFFFFFFE00007F80000001FE00007F80000001FE
482600007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80
4827000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE
482800007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80
4829000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE
483000007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80
4831000001FE00007F80000001FE00007F80000001FE00007F80000001FE00007F80000001FE
483200007F80000001FE0001FFE0000007FF80FFFFFFC003FFFFFFFFFFFFC003FFFFFFFFFFFF
4833C003FFFFFF40447CC349>72 D<FFFFFFF0FFFFFFF0FFFFFFF000FFF000007FE000003FC0
483400003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0
483500003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0
483600003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0
483700003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0
483800003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0
483900003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0
484000003FC000003FC000003FC000007FE00000FFF000FFFFFFF0FFFFFFF0FFFFFFF01C447D
4841C323>I<FFFFFFF8000000FFFFFFF8000000FFFFFFF800000001FFE000000000007FC000
4842000000007F8000000000007F8000000000007F8000000000007F8000000000007F800000
48430000007F8000000000007F8000000000007F8000000000007F8000000000007F80000000
484400007F8000000000007F8000000000007F8000000000007F8000000000007F8000000000
4845007F8000000000007F8000000000007F8000000000007F8000000000007F800000000000
48467F8000000000007F8000000000007F8000000000007F8000000000007F8000000000007F
48478000000000007F8000000000007F8000000000007F8000000000007F8000000000007F80
484800000000007F8000000000007F8000000000007F8000000000007F8000000000007F8000
4849000000007F8000000000007F8000000030007F8000000030007F8000000030007F800000
48500030007F8000000070007F8000000060007F8000000060007F8000000060007F80000000
485160007F8000000060007F80000000E0007F80000000E0007F80000000E0007F80000001C0
4852007F80000001C0007F80000003C0007F80000007C0007F80000007C0007F8000000FC000
48537F8000003FC0007F8000007FC0007F800001FFC001FFC0001FFF80FFFFFFFFFFFF80FFFF
4854FFFFFFFF80FFFFFFFFFFFF8034447CC33D>76 D<FFFFFFFFFC0000FFFFFFFFFFC000FFFF
4855FFFFFFF80001FFC0000FFC00007F800001FF00007F8000007F80007F8000001FE0007F80
485600000FE0007F80000007F0007F80000007F8007F80000003FC007F80000003FC007F8000
48570003FE007F80000001FE007F80000001FE007F80000001FF007F80000001FF007F800000
485801FF007F80000001FF007F80000001FF007F80000001FF007F80000001FF007F80000001
4859FE007F80000001FE007F80000003FE007F80000003FC007F80000003FC007F80000007F8
4860007F80000007F0007F8000000FE0007F8000001FC0007F8000007F80007F800001FE0000
48617F80000FFC00007FFFFFFFF000007FFFFFFF8000007F8000000000007F8000000000007F
48628000000000007F8000000000007F8000000000007F8000000000007F8000000000007F80
486300000000007F8000000000007F8000000000007F8000000000007F8000000000007F8000
4864000000007F8000000000007F8000000000007F8000000000007F8000000000007F800000
48650000007F8000000000007F8000000000007F8000000000007F8000000000007F80000000
486600007F8000000000007F8000000000007F8000000000007F8000000000007F8000000000
486701FFE000000000FFFFFFC0000000FFFFFFC0000000FFFFFFC000000038447CC342>80
4868D<FFFFFFFFE000000000FFFFFFFFFF00000000FFFFFFFFFFC000000001FFC0003FF80000
486900007F800003FC000000007F800000FF000000007F8000007F800000007F8000003FC000
487000007F8000001FE00000007F8000000FF00000007F80000007F80000007F80000007F800
487100007F80000007FC0000007F80000003FC0000007F80000003FE0000007F80000003FE00
487200007F80000003FE0000007F80000003FE0000007F80000003FE0000007F80000003FE00
487300007F80000003FE0000007F80000003FC0000007F80000003FC0000007F80000007FC00
487400007F80000007F80000007F8000000FF00000007F8000000FF00000007F8000001FE000
487500007F8000003FC00000007F8000007F000000007F800001FE000000007F800007F80000
487600007F80003FE0000000007FFFFFFF00000000007FFFFFFC00000000007F80007F800000
487700007F80000FE0000000007F800007F0000000007F800003FC000000007F800001FE0000
487800007F800000FE000000007F800000FF000000007F8000007F800000007F8000007F8000
487900007F8000003FC00000007F8000003FC00000007F8000003FC00000007F8000003FC000
488000007F8000003FC00000007F8000003FC00000007F8000003FC00000007F8000003FE000
488100007F8000003FE00000007F8000003FE00000007F8000003FE00000007F8000003FE000
488200007F8000003FE00000007F8000003FE00000007F8000003FE00060007F8000003FF000
488360007F8000001FF00060007F8000001FF00060007F8000001FF000E0007F8000000FF800
4884C001FFE0000007F801C0FFFFFFC00007F80180FFFFFFC00001FC0380FFFFFFC00000FE07
4885000000000000003FFE0000000000000007F80043467CC348>82 D<FFFFFFC0000FFFFFFF
4886FFFFC0000FFFFFFFFFFFC0000FFFFF01FFE0000000FFF0007F800000001F80007F800000
4887000F00007F800000000F00007F800000000600007F800000000600007F80000000060000
48887F800000000600007F800000000600007F800000000600007F800000000600007F800000
4889000600007F800000000600007F800000000600007F800000000600007F80000000060000
48907F800000000600007F800000000600007F800000000600007F800000000600007F800000
4891000600007F800000000600007F800000000600007F800000000600007F80000000060000
48927F800000000600007F800000000600007F800000000600007F800000000600007F800000
4893000600007F800000000600007F800000000600007F800000000600007F80000000060000
48947F800000000600007F800000000600007F800000000600007F800000000600007F800000
4895000600007F800000000600007F800000000600007F800000000600007F80000000060000
48967F800000000600007F800000000600007F800000000600007F800000000600007F800000
4897000E00003FC00000000C00003FC00000000C00003FC00000001C00001FC00000001C0000
48981FE00000001800000FE00000003800000FE000000030000007F000000070000007F00000
489900E0000003F8000001E0000001FC000001C0000000FE000007800000007F00000F000000
4900003F80001E000000001FE0007C0000000007FC03F00000000001FFFFE000000000007FFF
490180000000000007FC00000040467CC349>85 D<FFFFFF0007FFFFF8000FFFFEFFFFFF0007
4902FFFFF8000FFFFEFFFFFF0007FFFFF8000FFFFE03FFE000001FFF000000FFF001FF800000
49030FFC0000003FC001FF00000007F80000001F0000FF00000007F80000000F0000FF000000
490407F80000000E00007F80000003FC0000000E00007F80000003FC0000000C00007F800000
490503FC0000000C00003FC0000003FE0000001800003FC0000003FE0000001800003FC00000
490603FE0000001800003FE0000006FF0000003800001FE0000006FF0000003000001FE00000
490706FF0000003000001FF000000EFF8000007000000FF000000C7F8000006000000FF00000
49080C7F8000006000000FF800001C7FC0000060000007F80000183FC00000C0000007F80000
4909183FC00000C0000007F80000183FE00000C0000003FC0000301FE0000180000003FC0000
4910301FE0000180000003FC0000301FE0000180000001FE0000600FF0000300000001FE0000
4911600FF0000300000001FE0000600FF0000300000000FF0000C007F8000600000000FF0000
4912C007F8000600000000FF0000C007F8000600000000FF8001C007FC000E000000007F8001
49138003FC000C000000007F80018003FC000C000000007FC0038003FE000C000000003FC003
49140001FE0018000000003FC0030001FE0018000000003FE0030001FF0018000000001FE006
49150000FF0030000000001FE0060000FF0030000000001FE0060000FF0030000000000FF00C
491600007F8060000000000FF00C00007F8060000000000FF00C00007F80600000000007F818
491700003FC0C00000000007F81800003FC0C00000000007F81800003FC0C00000000007FC30
491800001FE1C00000000003FC3000001FE1800000000003FC3000001FE1800000000003FE70
491900001FF3800000000001FE6000000FF3000000000001FE6000000FF3000000000001FFE0
492000000FFB000000000000FFC0000007FE000000000000FFC0000007FE000000000000FFC0
4921000007FE0000000000007F80000003FC0000000000007F80000003FC0000000000007F80
4922000003FC0000000000003F00000001F80000000000003F00000001F80000000000003F00
4923000001F80000000000001E00000000F00000000000001E00000000F00000000000001E00
4924000000F00000000000001E00000000F00000000000000C00000000600000005F467EC364
4925>87 D<0007FC000000003FFF80000000F80FE0000003C003F00000070001F800000E0000
4926FC00000FC0007E00001FE0007F00001FF0003F80001FF0003F80001FF0003F80001FF000
49271FC0001FF0001FC0000FE0001FC0000380001FC0000000001FC0000000001FC000000000
49281FC0000000001FC00000000FFFC0000001FFFFC000000FFE1FC000003FC01FC00000FF00
49291FC00003FC001FC00007F8001FC0000FF0001FC0001FE0001FC0003FC0001FC0007FC000
49301FC0007F80001FC0007F80001FC060FF00001FC060FF00001FC060FF00001FC060FF0000
49313FC060FF00003FC060FF00003FC060FF80007FC0607F8000EFC0607FC000C7E0C03FC001
4932C7E0C01FE00783F1C007F81E03FF8001FFFC01FF00001FE0007C002B2E7CAC31>97
4933D<01FC00000000FFFC00000000FFFC00000000FFFC0000000007FC0000000003FC000000
49340001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
49350001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
49360001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
49370001FC0000000001FC03FC000001FC0FFF800001FC3C07E00001FC7001F80001FDE0007E
49380001FD80003F0001FF80001F8001FF00001FC001FE00000FE001FC000007E001FC000007
4939F001FC000007F001FC000003F801FC000003F801FC000003FC01FC000003FC01FC000001
4940FC01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001
4941FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001
4942FC01FC000003FC01FC000003FC01FC000003F801FC000003F801FC000007F001FC000007
4943F001FE00000FE001FE00000FC001FF00001FC001FB00003F8001F380007E0001E1C000FC
49440001E0F001F80001C03C07E00001801FFF8000000003FC00002F467DC436>I<00007F80
4945000003FFF000000FC07C00003F000F0000FC00038001F80001C003F8000FC007F0001FE0
494607E0003FE00FE0003FE01FC0003FE01FC0003FE03F80003FE03F80001FC07F800007007F
4947800000007F800000007F00000000FF00000000FF00000000FF00000000FF00000000FF00
4948000000FF00000000FF00000000FF00000000FF00000000FF00000000FF000000007F0000
494900007F800000007F800000003F800000003F800000303FC00000301FC00000700FE00000
4950600FE00000E007F00000C003F80001C001F800038000FC000700003F001E00001FC07800
49510007FFF0000000FF8000242E7DAC2B>I<000000007F000000003FFF000000003FFF0000
495200003FFF0000000001FF0000000000FF00000000007F00000000007F00000000007F0000
49530000007F00000000007F00000000007F00000000007F00000000007F00000000007F0000
49540000007F00000000007F00000000007F00000000007F00000000007F00000000007F0000
49550000007F00000000007F00000000007F00000000007F0000007F807F000003FFF07F0000
49560FC07C7F00003F000E7F00007E00077F0000FC0003FF0003F80001FF0007F00000FF0007
4957E00000FF000FE000007F001FC000007F001FC000007F003F8000007F003F8000007F007F
49588000007F007F8000007F007F0000007F00FF0000007F00FF0000007F00FF0000007F00FF
49590000007F00FF0000007F00FF0000007F00FF0000007F00FF0000007F00FF0000007F00FF
49600000007F00FF0000007F007F0000007F007F8000007F007F8000007F003F8000007F003F
49618000007F001FC000007F001FC000007F000FC00000FF000FE00000FF0007F00001FF0003
4962F00003FF0001F800077F8000FC000E7FC0003F001C7FFE000FC0F87FFE0003FFE07FFE00
4963007F007F002F467DC436>I<0001FE00000007FFC000001F03F000007E00FC0000FC007E
49640001F8003F0003F0003F0007E0001F800FE0001FC00FC0000FC01FC0000FC03F80000FE0
49653F800007E03F800007E07F800007F07F000007F07F000007F0FF000007F0FF000007F0FF
4966000007F0FFFFFFFFF0FFFFFFFFF0FF00000000FF00000000FF00000000FF00000000FF00
4967000000FF000000007F000000007F000000007F800000007F800000003F800000003F8000
496800301FC00000301FC00000700FC00000600FE00000E007F00000C003F00001C001F80003
49698000FC000700003E001E00001F80F8000003FFE0000000FF0000242E7DAC2B>I<00000F
4970E00000007FF8000001F81E000003F03F00000FE07F80001FC0FF80001F80FF80003F80FF
497180007F00FF80007F00FF80007F007F0000FE001C0000FE00000000FE00000000FE000000
497200FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000
4973FE00000000FE00000000FE00000000FE00000000FE000000FFFFFF8000FFFFFF8000FFFF
4974FF800000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00
4975000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000
49760000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE000000
497700FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000
4978FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE
497900000001FF8000007FFFFF00007FFFFF00007FFFFF000021467EC51E>I<000000000F80
49800001FC007FE0000FFF81F0F0003F07E381F000FC01FF03F001F800FE01F003F0007E01E0
498107F0007F000007E0003F00000FE0003F80000FC0001F80001FC0001FC0001FC0001FC000
49821FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC000
49831FC0001FC0000FC0001F80000FE0003F800007E0003F000007F0007F000003F0007E0000
498401F800FC000001FC01F8000003BF07E00000030FFF8000000701FC000000070000000000
49850700000000000F00000000000F00000000000F00000000000F800000000007C000000000
498607E00000000007FFFFF8000003FFFFFF000003FFFFFFE00001FFFFFFF800007FFFFFFC00
498701FFFFFFFE0007C0000FFF000F800000FF003F0000003F803E0000001F807C0000000FC0
49887C0000000FC0F800000007C0F800000007C0F800000007C0F800000007C0F800000007C0
4989FC0000000FC07C0000000F807E0000001F803E0000001F001F0000003E000F8000007C00
499007E00001F80001F80007E000007F003F8000001FFFFE00000001FFE000002C427DAC31>
4991I<01FC00000000FFFC00000000FFFC00000000FFFC0000000007FC0000000003FC000000
49920001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
49930001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
49940001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
49950001FC0000000001FC01FE000001FC07FFC00001FC1E07F00001FC3801F80001FC7001FC
49960001FCE000FC0001FDC000FE0001FD8000FE0001FF80007F0001FF00007F0001FF00007F
49970001FE00007F0001FE00007F0001FE00007F0001FC00007F0001FC00007F0001FC00007F
49980001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F
49990001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F

2808 more lines aren’t shown here.

include/Makefile+1−1
@@ -4,7 +4,7 @@ LUA= .. · 3 unmodified lines
4 4
5include $(LUA)/config5include $(LUA)/config
6 6
7SRCS= lua.h lualib.h luadebug.h7SRCS= lua.h lualib.h luadebug.h auxlib.h
8 8
9all:9all:
10 10
include/auxlib.h+30−0
@@ -0,0 +1,30 @@
1/*
2** $Id: auxlib.h,v 1.3 1997/04/07 14:48:53 roberto Exp $
3*/
4
5#ifndef auxlib_h
6#define auxlib_h
7
8#include "lua.h"
9
10struct luaL_reg {
11 char *name;
12 lua_CFunction func;
13};
14
15void luaL_openlib (struct luaL_reg *l, int n);
16void luaL_arg_check(int cond, int numarg, char *extramsg);
17char *luaL_check_string (int numArg);
18char *luaL_opt_string (int numArg, char *def);
19double luaL_check_number (int numArg);
20double luaL_opt_number (int numArg, double def);
21void luaL_verror (char *fmt, ...);
22
23
24
25/* -- private part (only for Lua modules */
26
27int luaI_findstring (char *name, char *list[]);
28
29
30#endif
include/lua.h+74−49
@@ -1,61 +1,50 @@
1/*1/*
2** LUA - Linguagem para Usuarios de Aplicacao2** LUA - An Extensible Extension Language
3** Grupo de Tecnologia em Computacao Grafica3** TeCGraf: Grupo de Tecnologia em Computacao Grafica, PUC-Rio, Brazil
4** TeCGraf - PUC-Rio4** e-mail: lua@tecgraf.puc-rio.br
5** $Id: lua.h,v 3.32 1996/11/20 13:49:32 roberto Exp $5** $Id: lua.h,v 4.11 1997/06/23 18:27:53 roberto Exp $
6*/6*/
7 7
8 8
9#ifndef lua_h9#ifndef lua_h
10#define lua_h10#define lua_h
11 11
12#define LUA_VERSION "Lua 2.5.1"12#define LUA_VERSION "Lua 3.0"
13#define LUA_COPYRIGHT "Copyright (C) 1994-1996 TeCGraf"13#define LUA_COPYRIGHT "Copyright (C) 1994-1997 TeCGraf"
14#define LUA_AUTHORS "W. Celes, R. Ierusalimschy & L. H. de Figueiredo"14#define LUA_AUTHORS "W. Celes, R. Ierusalimschy & L. H. de Figueiredo"
15 15
16 16
17/* Private Part */
18
19typedef enum
20{
21 LUA_T_NIL = -1,
22 LUA_T_NUMBER = -2,
23 LUA_T_STRING = -3,
24 LUA_T_ARRAY = -4,
25 LUA_T_FUNCTION = -5,
26 LUA_T_CFUNCTION= -6,
27 LUA_T_MARK = -7,
28 LUA_T_CMARK = -8,
29 LUA_T_LINE = -9,
30 LUA_T_USERDATA = 0
31} lua_Type;
32
33
34/* Public Part */
35
36#define LUA_NOOBJECT 017#define LUA_NOOBJECT 0
37 18
19#define LUA_ANYTAG (-1)
20
38typedef void (*lua_CFunction) (void);21typedef void (*lua_CFunction) (void);
39typedef unsigned int lua_Object;22typedef unsigned int lua_Object;
40 23
41lua_Object lua_setfallback (char *name, lua_CFunction fallback);24lua_Object lua_settagmethod (int tag, char *event); /* In: new method */
25lua_Object lua_gettagmethod (int tag, char *event);
26lua_Object lua_seterrormethod (void); /* In: new method */
27
28int lua_newtag (void);
29void lua_settag (int tag); /* In: object */
42 30
43void lua_error (char *s);31void lua_error (char *s);
44int lua_dofile (char *filename);32int lua_dofile (char *filename); /* Out: returns */
45int lua_dostring (char *string);33int lua_dostring (char *string); /* Out: returns */
46int lua_callfunction (lua_Object function);34int lua_callfunction (lua_Object f);
47int lua_call (char *funcname);35 /* In: parameters; Out: returns */
48 36
49void lua_beginblock (void);37void lua_beginblock (void);
50void lua_endblock (void);38void lua_endblock (void);
51 39
52lua_Object lua_getparam (int number);40lua_Object lua_lua2C (int number);
53#define lua_getresult(_) lua_getparam(_)41#define lua_getparam(_) lua_lua2C(_)
42#define lua_getresult(_) lua_lua2C(_)
54 43
55#define lua_isnil(_) (lua_type(_)==LUA_T_NIL)44int lua_isnil (lua_Object object);
56#define lua_istable(_) (lua_type(_)==LUA_T_ARRAY)45int lua_istable (lua_Object object);
57#define lua_isuserdata(_) (lua_type(_)>=LUA_T_USERDATA)46int lua_isuserdata (lua_Object object);
58#define lua_iscfunction(_) (lua_type(_)==LUA_T_CFUNCTION)47int lua_iscfunction (lua_Object object);
59int lua_isnumber (lua_Object object);48int lua_isnumber (lua_Object object);
60int lua_isstring (lua_Object object);49int lua_isstring (lua_Object object);
61int lua_isfunction (lua_Object object);50int lua_isfunction (lua_Object object);
@@ -63,42 +52,73 @@ int lua_isfunction (lua_Object object); · 1 unmodified line
63float lua_getnumber (lua_Object object);52float lua_getnumber (lua_Object object);
64char *lua_getstring (lua_Object object);53char *lua_getstring (lua_Object object);
65lua_CFunction lua_getcfunction (lua_Object object);54lua_CFunction lua_getcfunction (lua_Object object);
66void *lua_getuserdata (lua_Object object);55void *lua_getuserdata (lua_Object object);
56
67 57
68void lua_pushnil (void);58void lua_pushnil (void);
69void lua_pushnumber (float n);59void lua_pushnumber (float n);
70void lua_pushstring (char *s);60void lua_pushstring (char *s);
71void lua_pushcfunction (lua_CFunction fn);61void lua_pushcfunction (lua_CFunction fn);
72void lua_pushusertag (void *u, int tag);62void lua_pushusertag (void *u, int tag);
73void lua_pushobject (lua_Object object);63void lua_pushobject (lua_Object object);
74 64
65lua_Object lua_pop (void);
66
75lua_Object lua_getglobal (char *name);67lua_Object lua_getglobal (char *name);
76void lua_storeglobal (char *name);68lua_Object lua_rawgetglobal (char *name);
69void lua_setglobal (char *name); /* In: value */
70void lua_rawsetglobal (char *name); /* In: value */
77 71
78void lua_storesubscript (void);72void lua_settable (void); /* In: table, index, value */
79lua_Object lua_getsubscript (void);73void lua_rawsettable (void); /* In: table, index, value */
74lua_Object lua_gettable (void); /* In: table, index */
75lua_Object lua_rawgettable (void); /* In: table, index */
80 76
81int lua_type (lua_Object object);77int lua_tag (lua_Object object);
82 78
83 79
84int lua_ref (int lock);80int lua_ref (int lock); /* In: value */
85lua_Object lua_getref (int ref);81lua_Object lua_getref (int ref);
86void lua_pushref (int ref);
87void lua_unref (int ref);82void lua_unref (int ref);
88 83
89lua_Object lua_createtable (void);84lua_Object lua_createtable (void);
90 85
86long lua_collectgarbage (long limit);
87
91 88
89/* =============================================================== */
92/* some useful macros */90/* some useful macros */
93 91
92#define lua_call(name) lua_callfunction(lua_getglobal(name))
93
94#define lua_pushref(ref) lua_pushobject(lua_getref(ref))
95
94#define lua_refobject(o,l) (lua_pushobject(o), lua_ref(l))96#define lua_refobject(o,l) (lua_pushobject(o), lua_ref(l))
95 97
96#define lua_register(n,f) (lua_pushcfunction(f), lua_storeglobal(n))98#define lua_register(n,f) (lua_pushcfunction(f), lua_setglobal(n))
99
100#define lua_pushuserdata(u) lua_pushusertag(u, 0)
97 101
98#define lua_pushuserdata(u) lua_pushusertag(u, LUA_T_USERDATA)
99 102
100 103
101/* for compatibility with old versions. Avoid using these macros */104
105/* ==========================================================================
106** for compatibility with old versions. Avoid using these macros/functions
107** If your program does not use any of these, define LUA_COMPAT2_5 to 0
108*/
109
110#ifndef LUA_COMPAT2_5
111#define LUA_COMPAT2_5 1
112#endif
113
114
115#if LUA_COMPAT2_5
116
117
118lua_Object lua_setfallback (char *event, lua_CFunction fallback);
119
120#define lua_storeglobal lua_setglobal
121#define lua_type lua_tag
102 122
103#define lua_lockobject(o) lua_refobject(o,1)123#define lua_lockobject(o) lua_refobject(o,1)
104#define lua_lock() lua_ref(1)124#define lua_lock() lua_ref(1)
@@ -108,9 +128,14 @@ lua_Object lua_createtable (void); · 3 unmodified lines
108 128
109#define lua_pushliteral(o) lua_pushstring(o)129#define lua_pushliteral(o) lua_pushstring(o)
110 130
111#define lua_getindexed(o,n) (lua_pushobject(o), lua_pushnumber(n), lua_getsubscript())131#define lua_getindexed(o,n) (lua_pushobject(o), lua_pushnumber(n), lua_gettable())
112#define lua_getfield(o,f) (lua_pushobject(o), lua_pushliteral(f), lua_getsubscript())132#define lua_getfield(o,f) (lua_pushobject(o), lua_pushstring(f), lua_gettable())
113 133
114#define lua_copystring(o) (strdup(lua_getstring(o)))134#define lua_copystring(o) (strdup(lua_getstring(o)))
115 135
136#define lua_getsubscript lua_gettable
137#define lua_storesubscript lua_settable
138
139#endif
140
116#endif141#endif
include/lualib.h+5−14
@@ -2,7 +2,7 @@ · 1 unmodified line
2** Libraries to be used in LUA programs2** Libraries to be used in LUA programs
3** Grupo de Tecnologia em Computacao Grafica3** Grupo de Tecnologia em Computacao Grafica
4** TeCGraf - PUC-Rio4** TeCGraf - PUC-Rio
5** $Id: lualib.h,v 1.10 1996/08/05 20:55:24 roberto Exp $5** $Id: lualib.h,v 1.13 1997/03/26 22:23:15 roberto Exp $
6*/6*/
7 7
8#ifndef lualib_h8#ifndef lualib_h
@@ -15,24 +15,15 @@ void strlib_open (void); · 6 unmodified lines
15void mathlib_open (void);15void mathlib_open (void);
16 16
17 17
18
18/* auxiliar functions (private) */19/* auxiliar functions (private) */
19 20
20struct lua_reg {
21 char *name;
22 lua_CFunction func;
23};
24
25void luaI_openlib (struct lua_reg *l, int n);
26void lua_arg_check(int cond, char *funcname);
27char *lua_check_string (int numArg, char *funcname);
28char *lua_opt_string (int numArg, char *def, char *funcname);
29double lua_check_number (int numArg, char *funcname);
30long lua_opt_number (int numArg, long def, char *funcname);
31char *luaI_addchar (int c);21char *luaI_addchar (int c);
22void luaI_emptybuff (void);
32void luaI_addquoted (char *s);23void luaI_addquoted (char *s);
33 24
34char *item_end (char *p);25char *luaL_item_end (char *p);
35int singlematch (int c, char *p);26int luaL_singlematch (int c, char *p);
36 27
37#endif28#endif
38 29
src/Makefile+12−6
@@ -4,19 +4,23 @@ LUA= .. · 3 unmodified lines
4 4
5include $(LUA)/config5include $(LUA)/config
6 6
7OBJS= fallback.o\7OBJS= auxlib.o\
8 fallback.o\
8 func.o\9 func.o\
9 hash.o\10 hash.o\
10 inout.o\11 inout.o\
11 lex.o\12 lex.o\
12 mem.o\13 luamem.o\
13 opcode.o\14 opcode.o\
14 parser.o\15 parser.o\
15 table.o\16 table.o\
16 tree.o\17 tree.o\
17 undump.o18 undump.o\
19 zio.o
18 20
19SRCS= fallback.c\21SRCS= auxlib.c\
22 auxlib.h\
23 fallback.c\
20 fallback.h\24 fallback.h\
21 func.c\25 func.c\
22 func.h\26 func.h\
@@ -26,8 +30,8 @@ SRCS= fallback.c\ · 3 unmodified lines
26 inout.h\30 inout.h\
27 lex.c\31 lex.c\
28 lex.h\32 lex.h\
29 mem.c\33 luamem.c\
30 mem.h\34 luamem.h\
31 opcode.c\35 opcode.c\
32 opcode.h\36 opcode.h\
33 parser.c\37 parser.c\
@@ -39,6 +43,8 @@ SRCS= fallback.c\ · 5 unmodified lines
39 types.h\43 types.h\
40 undump.c\44 undump.c\
41 undump.h\45 undump.h\
46 zio.c\
47 zio.h\
42 lua.stx48 lua.stx
43 49
44SLIB= $(LIB)/liblua.a50SLIB= $(LIB)/liblua.a
src/auxlib.c+81−0
@@ -0,0 +1,81 @@
1char *rcs_auxlib="$Id: auxlib.c,v 1.5 1997/04/14 15:30:03 roberto Exp $";
2
3#include <stdio.h>
4#include <stdarg.h>
5#include <string.h>
6
7#include "lua.h"
8#include "auxlib.h"
9#include "luadebug.h"
10
11
12
13int luaI_findstring (char *name, char *list[])
14{
15 int i;
16 for (i=0; list[i]; i++)
17 if (strcmp(list[i], name) == 0)
18 return i;
19 return -1; /* name not found */
20}
21
22
23void luaL_arg_check(int cond, int numarg, char *extramsg)
24{
25 if (!cond) {
26 char *funcname;
27 lua_getobjname(lua_stackedfunction(0), &funcname);
28 if (funcname == NULL)
29 funcname = "???";
30 if (extramsg == NULL)
31 luaL_verror("bad argument #%d to function `%s'", numarg, funcname);
32 else
33 luaL_verror("bad argument #%d to function `%s' (%s)",
34 numarg, funcname, extramsg);
35 }
36}
37
38char *luaL_check_string (int numArg)
39{
40 lua_Object o = lua_getparam(numArg);
41 luaL_arg_check(lua_isstring(o), numArg, "string expected");
42 return lua_getstring(o);
43}
44
45char *luaL_opt_string (int numArg, char *def)
46{
47 return (lua_getparam(numArg) == LUA_NOOBJECT) ? def :
48 luaL_check_string(numArg);
49}
50
51double luaL_check_number (int numArg)
52{
53 lua_Object o = lua_getparam(numArg);
54 luaL_arg_check(lua_isnumber(o), numArg, "number expected");
55 return lua_getnumber(o);
56}
57
58
59double luaL_opt_number (int numArg, double def)
60{
61 return (lua_getparam(numArg) == LUA_NOOBJECT) ? def :
62 luaL_check_number(numArg);
63}
64
65void luaL_openlib (struct luaL_reg *l, int n)
66{
67 int i;
68 for (i=0; i<n; i++)
69 lua_register(l[i].name, l[i].func);
70}
71
72
73void luaL_verror (char *fmt, ...)
74{
75 char buff[1000];
76 va_list argp;
77 va_start(argp, fmt);
78 vsprintf(buff, fmt, argp);
79 va_end(argp);
80 lua_error(buff);
81}
src/auxlib.h+30−0
@@ -0,0 +1,30 @@
1/*
2** $Id: auxlib.h,v 1.3 1997/04/07 14:48:53 roberto Exp $
3*/
4
5#ifndef auxlib_h
6#define auxlib_h
7
8#include "lua.h"
9
10struct luaL_reg {
11 char *name;
12 lua_CFunction func;
13};
14
15void luaL_openlib (struct luaL_reg *l, int n);
16void luaL_arg_check(int cond, int numarg, char *extramsg);
17char *luaL_check_string (int numArg);
18char *luaL_opt_string (int numArg, char *def);
19double luaL_check_number (int numArg);
20double luaL_opt_number (int numArg, double def);
21void luaL_verror (char *fmt, ...);
22
23
24
25/* -- private part (only for Lua modules */
26
27int luaI_findstring (char *name, char *list[]);
28
29
30#endif
src/fallback.c+286−109
@@ -3,130 +3,37 @@ · 2 unmodified lines
3** TecCGraf - PUC-Rio3** TecCGraf - PUC-Rio
4*/4*/
5 5
6char *rcs_fallback="$Id: fallback.c,v 1.25 1996/04/25 14:10:00 roberto Exp $";6char *rcs_fallback="$Id: fallback.c,v 2.9 1997/06/23 18:27:53 roberto Exp $";
7 7
8#include <stdio.h>8#include <stdio.h>
9#include <string.h>9#include <string.h>
10 10
11#include "mem.h"11#include "auxlib.h"
12#include "luamem.h"
12#include "fallback.h"13#include "fallback.h"
13#include "opcode.h"14#include "opcode.h"
14#include "lua.h"15#include "lua.h"
15#include "table.h"16#include "table.h"
17#include "tree.h"
18#include "hash.h"
16 19
17 20
18static void errorFB (void);
19static void indexFB (void);
20static void gettableFB (void);
21static void arithFB (void);
22static void concatFB (void);
23static void orderFB (void);
24static void GDFB (void);
25static void funcFB (void);
26 21
27 22/* -------------------------------------------
28/*
29** Warning: This list must be in the same order as the #define's
30*/
31struct FB luaI_fallBacks[] = {
32{"error", {LUA_T_CFUNCTION, {errorFB}}, 1, 0},
33{"index", {LUA_T_CFUNCTION, {indexFB}}, 2, 1},
34{"gettable", {LUA_T_CFUNCTION, {gettableFB}}, 2, 1},
35{"arith", {LUA_T_CFUNCTION, {arithFB}}, 3, 1},
36{"order", {LUA_T_CFUNCTION, {orderFB}}, 3, 1},
37{"concat", {LUA_T_CFUNCTION, {concatFB}}, 2, 1},
38{"settable", {LUA_T_CFUNCTION, {gettableFB}}, 3, 0},
39{"gc", {LUA_T_CFUNCTION, {GDFB}}, 1, 0},
40{"function", {LUA_T_CFUNCTION, {funcFB}}, -1, -1},
41 /* no fixed number of params or results */
42{"getglobal", {LUA_T_CFUNCTION, {indexFB}}, 1, 1}
43 /* same default behavior of index FB */
44};
45
46#define N_FB (sizeof(luaI_fallBacks)/sizeof(struct FB))
47
48void luaI_setfallback (void)
49{
50 int i;
51 char *name = lua_getstring(lua_getparam(1));
52 lua_Object func = lua_getparam(2);
53 if (name == NULL || !lua_isfunction(func))
54 lua_error("incorrect argument to function `setfallback'");
55 for (i=0; i<N_FB; i++)
56 {
57 if (strcmp(luaI_fallBacks[i].kind, name) == 0)
58 {
59 luaI_pushobject(&luaI_fallBacks[i].function);
60 luaI_fallBacks[i].function = *luaI_Address(func);
61 return;
62 }
63 }
64 /* name not found */
65 lua_error("incorrect argument to function `setfallback'");
66}
67
68
69static void errorFB (void)
70{
71 lua_Object o = lua_getparam(1);
72 if (lua_isstring(o))
73 fprintf (stderr, "lua: %s\n", lua_getstring(o));
74 else
75 fprintf(stderr, "lua: unknown error\n");
76}
77
78
79static void indexFB (void)
80{
81 lua_pushnil();
82}
83
84
85static void gettableFB (void)
86{
87 lua_error("indexed expression not a table");
88}
89
90
91static void arithFB (void)
92{
93 lua_error("unexpected type at conversion to number");
94}
95
96static void concatFB (void)
97{
98 lua_error("unexpected type at conversion to string");
99}
100
101
102static void orderFB (void)
103{
104 lua_error("unexpected type at comparison");
105}
106
107static void GDFB (void) { }
108
109static void funcFB (void)
110{
111 lua_error("call expression not a function");
112}
113
114
115/*
116** Reference routines23** Reference routines
117*/24*/
118 25
119static struct ref {26static struct ref {
120 Object o;27 TObject o;
121 enum {LOCK, HOLD, FREE, COLLECTED} status;28 enum {LOCK, HOLD, FREE, COLLECTED} status;
122} *refArray = NULL;29} *refArray = NULL;
123static int refSize = 0;30static int refSize = 0;
124 31
125int luaI_ref (Object *object, int lock)32int luaI_ref (TObject *object, int lock)
126{33{
127 int i;34 int i;
128 int oldSize;35 int oldSize;
129 if (tag(object) == LUA_T_NIL)36 if (ttype(object) == LUA_T_NIL)
130 return -1; /* special ref for nil */37 return -1; /* special ref for nil */
131 for (i=0; i<refSize; i++)38 for (i=0; i<refSize; i++)
132 if (refArray[i].status == FREE)39 if (refArray[i].status == FREE)
@@ -151,9 +58,9 @@ void lua_unref (int ref) · 18 unmodified lines
151}58}
152 59
153 60
154Object *luaI_getref (int ref)61TObject *luaI_getref (int ref)
155{62{
156 static Object nul = {LUA_T_NIL, {0}};63 static TObject nul = {LUA_T_NIL, {0}};
157 if (ref == -1)64 if (ref == -1)
158 return &nul;65 return &nul;
159 if (ref >= 0 && ref < refSize &&66 if (ref >= 0 && ref < refSize &&
@@ -164,7 +71,7 @@ Object *luaI_getref (int ref) · 4 unmodified lines
164}71}
165 72
166 73
167void luaI_travlock (int (*fn)(Object *))74void luaI_travlock (int (*fn)(TObject *))
168{75{
169 int i;76 int i;
170 for (i=0; i<refSize; i++)77 for (i=0; i<refSize; i++)
@@ -181,11 +88,281 @@ void luaI_invalidaterefs (void) · 10 unmodified lines
181 refArray[i].status = COLLECTED;88 refArray[i].status = COLLECTED;
182}89}
183 90
184char *luaI_travfallbacks (int (*fn)(Object *))91
92/* -------------------------------------------
93* Internal Methods
94*/
95
96char *luaI_eventname[] = { /* ORDER IM */
97 "gettable", "settable", "index", "getglobal", "setglobal", "add",
98 "sub", "mul", "div", "pow", "unm", "lt", "le", "gt", "ge",
99 "concat", "gc", "function",
100 NULL
101};
102
103
104
105static int luaI_checkevent (char *name, char *list[])
106{
107 int e = luaI_findstring(name, list);
108 if (e < 0)
109 luaL_verror("`%s' is not a valid event name", name);
110 return e;
111}
112
113
114struct IM *luaI_IMtable = NULL;
115
116static int IMtable_size = 0;
117static int last_tag = LUA_T_NIL; /* ORDER LUA_T */
118
119
120/* events in LUA_T_LINE are all allowed, since this is used as a
121* 'placeholder' for "default" fallbacks
122*/
123static char validevents[NUM_TYPES][IM_N] = { /* ORDER LUA_T, ORDER IM */
124{1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1}, /* LUA_T_USERDATA */
125{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* LUA_T_LINE */
126{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* LUA_T_CMARK */
127{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* LUA_T_MARK */
128{1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, /* LUA_T_CFUNCTION */
129{1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, /* LUA_T_FUNCTION */
130{0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, /* LUA_T_ARRAY */
131{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, /* LUA_T_STRING */
132{1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, /* LUA_T_NUMBER */
133{1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} /* LUA_T_NIL */
134};
135
136static int validevent (lua_Type t, int e)
137{ /* ORDER LUA_T */
138 return (t < LUA_T_NIL) ? 1 : validevents[-t][e];
139}
140
141
142static void init_entry (int tag)
185{143{
186 int i;144 int i;
187 for (i=0; i<N_FB; i++)145 for (i=0; i<IM_N; i++)
188 if (fn(&luaI_fallBacks[i].function))146 ttype(luaI_getim(tag, i)) = LUA_T_NIL;
189 return luaI_fallBacks[i].kind;147}
148
149void luaI_initfallbacks (void)
150{
151 if (luaI_IMtable == NULL) {
152 int i;
153 IMtable_size = NUM_TYPES+10;
154 luaI_IMtable = newvector(IMtable_size, struct IM);
155 for (i=LUA_T_NIL; i<=LUA_T_USERDATA; i++)
156 init_entry(i);
157 }
158}
159
160int lua_newtag (void)
161{
162 --last_tag;
163 if ((-last_tag) >= IMtable_size) {
164 luaI_initfallbacks();
165 IMtable_size = growvector(&luaI_IMtable, IMtable_size,
166 struct IM, memEM, MAX_INT);
167 }
168 init_entry(last_tag);
169 return last_tag;
170}
171
172
173static void checktag (int tag)
174{
175 if (!(last_tag <= tag && tag <= 0))
176 luaL_verror("%d is not a valid tag", tag);
177}
178
179void luaI_realtag (int tag)
180{
181 if (!(last_tag <= tag && tag < LUA_T_NIL))
182 luaL_verror("tag %d is not result of `newtag'", tag);
183}
184
185
186void luaI_settag (int tag, TObject *o)
187{
188 luaI_realtag(tag);
189 switch (ttype(o)) {
190 case LUA_T_ARRAY:
191 o->value.a->htag = tag;
192 break;
193 case LUA_T_USERDATA:
194 o->value.ts->tag = tag;
195 break;
196 default:
197 luaL_verror("cannot change the tag of a %s", luaI_typenames[-ttype(o)]);
198 }
199}
200
201
202int luaI_efectivetag (TObject *o)
203{
204 lua_Type t = ttype(o);
205 if (t == LUA_T_USERDATA) {
206 int tag = o->value.ts->tag;
207 return (tag >= 0) ? LUA_T_USERDATA : tag;
208 }
209 else if (t == LUA_T_ARRAY)
210 return o->value.a->htag;
211 else return t;
212}
213
214
215void luaI_gettagmethod (void)
216{
217 int t = (int)luaL_check_number(1);
218 int e = luaI_checkevent(luaL_check_string(2), luaI_eventname);
219 checktag(t);
220 if (validevent(t, e))
221 luaI_pushobject(luaI_getim(t,e));
222}
223
224
225void luaI_settagmethod (void)
226{
227 int t = (int)luaL_check_number(1);
228 int e = luaI_checkevent(luaL_check_string(2), luaI_eventname);
229 lua_Object func = lua_getparam(3);
230 checktag(t);
231 if (!validevent(t, e))
232 luaL_verror("cannot change internal method `%s' for tag %d",
233 luaI_eventname[e], t);
234 luaL_arg_check(lua_isnil(func) || lua_isfunction(func),
235 3, "function expected");
236 luaI_pushobject(luaI_getim(t,e));
237 *luaI_getim(t, e) = *luaI_Address(func);
238}
239
240
241static void stderrorim (void)
242{
243 lua_Object s = lua_getparam(1);
244 if (lua_isstring(s))
245 fprintf(stderr, "lua: %s\n", lua_getstring(s));
246}
247
248static TObject errorim = {LUA_T_CFUNCTION, {stderrorim}};
249
250
251TObject *luaI_geterrorim (void)
252{
253 return &errorim;
254}
255
256void luaI_seterrormethod (void)
257{
258 lua_Object func = lua_getparam(1);
259 luaL_arg_check(lua_isnil(func) || lua_isfunction(func),
260 1, "function expected");
261 luaI_pushobject(&errorim);
262 errorim = *luaI_Address(func);
263}
264
265char *luaI_travfallbacks (int (*fn)(TObject *))
266{
267 int e;
268 if (fn(&errorim))
269 return "error";
270 for (e=IM_GETTABLE; e<=IM_FUNCTION; e++) { /* ORDER IM */
271 int t;
272 for (t=0; t>=last_tag; t--)
273 if (fn(luaI_getim(t,e)))
274 return luaI_eventname[e];
275 }
190 return NULL;276 return NULL;
191}277}
278
279
280/*
281* ===================================================================
282* compatibility with old fallback system
283*/
284#if LUA_COMPAT2_5
285
286static void errorFB (void)
287{
288 lua_Object o = lua_getparam(1);
289 if (lua_isstring(o))
290 fprintf (stderr, "lua: %s\n", lua_getstring(o));
291 else
292 fprintf(stderr, "lua: unknown error\n");
293}
294
295
296static void nilFB (void) { }
297
298
299static void typeFB (void)
300{
301 lua_error("unexpected type");
302}
303
304
305static void fillvalids (IMS e, TObject *func)
306{
307 int t;
308 for (t=LUA_T_NIL; t<=LUA_T_USERDATA; t++)
309 if (validevent(t, e))
310 *luaI_getim(t, e) = *func;
311}
312
313
314void luaI_setfallback (void)
315{
316 static char *oldnames [] = {"error", "getglobal", "arith", "order", NULL};
317 TObject oldfunc;
318 lua_CFunction replace;
319 char *name = luaL_check_string(1);
320 lua_Object func = lua_getparam(2);
321 luaI_initfallbacks();
322 luaL_arg_check(lua_isfunction(func), 2, "function expected");
323 switch (luaI_findstring(name, oldnames)) {
324 case 0: /* old error fallback */
325 oldfunc = errorim;
326 errorim = *luaI_Address(func);
327 replace = errorFB;
328 break;
329 case 1: /* old getglobal fallback */
330 oldfunc = *luaI_getim(LUA_T_NIL, IM_GETGLOBAL);
331 *luaI_getim(LUA_T_NIL, IM_GETGLOBAL) = *luaI_Address(func);
332 replace = nilFB;
333 break;
334 case 2: { /* old arith fallback */
335 int i;
336 oldfunc = *luaI_getim(LUA_T_NUMBER, IM_POW);
337 for (i=IM_ADD; i<=IM_UNM; i++) /* ORDER IM */
338 fillvalids(i, luaI_Address(func));
339 replace = typeFB;
340 break;
341 }
342 case 3: { /* old order fallback */
343 int i;
344 oldfunc = *luaI_getim(LUA_T_LINE, IM_LT);
345 for (i=IM_LT; i<=IM_GE; i++) /* ORDER IM */
346 fillvalids(i, luaI_Address(func));
347 replace = typeFB;
348 break;
349 }
350 default: {
351 int e;
352 if ((e = luaI_findstring(name, luaI_eventname)) >= 0) {
353 oldfunc = *luaI_getim(LUA_T_LINE, e);
354 fillvalids(e, luaI_Address(func));
355 replace = (e == IM_GC || e == IM_INDEX) ? nilFB : typeFB;
356 }
357 else {
358 luaL_verror("`%s' is not a valid fallback name", name);
359 replace = NULL; /* to avoid warnings */
360 }
361 }
362 }
363 if (oldfunc.ttype != LUA_T_NIL)
364 luaI_pushobject(&oldfunc);
365 else
366 lua_pushcfunction(replace);
367}
368#endif
src/fallback.h+50−22
@@ -1,5 +1,5 @@
1/*1/*
2** $Id: fallback.h,v 1.13 1996/04/25 14:10:00 roberto Exp $2** $Id: fallback.h,v 1.23 1997/04/24 22:59:57 roberto Exp $
3*/3*/
4 4
5#ifndef fallback_h5#ifndef fallback_h
@@ -8,30 +8,58 @@ · 2 unmodified lines
8#include "lua.h"8#include "lua.h"
9#include "opcode.h"9#include "opcode.h"
10 10
11extern struct FB {11/*
12 char *kind;12* WARNING: if you change the order of this enumeration,
13 Object function;13* grep "ORDER IM"
14 int nParams;14*/
15 int nResults;15typedef enum {
16} luaI_fallBacks[];16 IM_GETTABLE = 0,
17 17 IM_SETTABLE,
18#define FB_ERROR 018 IM_INDEX,
19#define FB_INDEX 119 IM_GETGLOBAL,
20#define FB_GETTABLE 220 IM_SETGLOBAL,
21#define FB_ARITH 321 IM_ADD,
22#define FB_ORDER 422 IM_SUB,
23#define FB_CONCAT 523 IM_MUL,
24#define FB_SETTABLE 624 IM_DIV,
25#define FB_GC 725 IM_POW,
26#define FB_FUNCTION 826 IM_UNM,
27#define FB_GETGLOBAL 927 IM_LT,
28 IM_LE,
29 IM_GT,
30 IM_GE,
31 IM_CONCAT,
32 IM_GC,
33 IM_FUNCTION
34} IMS;
35
36#define IM_N 18
37
38
39extern struct IM {
40 TObject int_method[IM_N];
41} *luaI_IMtable;
42
43extern char *luaI_eventname[];
44
45#define luaI_getim(tag,event) (&luaI_IMtable[-(tag)].int_method[event])
46#define luaI_getimbyObj(o,e) (luaI_getim(luaI_efectivetag(o),(e)))
28 47
29void luaI_setfallback (void);48void luaI_setfallback (void);
30int luaI_ref (Object *object, int lock);49int luaI_ref (TObject *object, int lock);
31Object *luaI_getref (int ref);50TObject *luaI_getref (int ref);
32void luaI_travlock (int (*fn)(Object *));51void luaI_travlock (int (*fn)(TObject *));
33void luaI_invalidaterefs (void);52void luaI_invalidaterefs (void);
34char *luaI_travfallbacks (int (*fn)(Object *));53char *luaI_travfallbacks (int (*fn)(TObject *));
54
55void luaI_settag (int tag, TObject *o);
56void luaI_realtag (int tag);
57TObject *luaI_geterrorim (void);
58int luaI_efectivetag (TObject *o);
59void luaI_settagmethod (void);
60void luaI_gettagmethod (void);
61void luaI_seterrormethod (void);
62void luaI_initfallbacks (void);
35 63
36#endif64#endif
37 65
src/func.c+26−16
@@ -2,9 +2,10 @@ · 1 unmodified line
2 2
3#include "luadebug.h"3#include "luadebug.h"
4#include "table.h"4#include "table.h"
5#include "mem.h"5#include "luamem.h"
6#include "func.h"6#include "func.h"
7#include "opcode.h"7#include "opcode.h"
8#include "inout.h"
8 9
9 10
10static TFunc *function_root = NULL;11static TFunc *function_root = NULL;
@@ -23,7 +24,7 @@ void luaI_initTFunc (TFunc *f) · 12 unmodified lines
23 f->size = 0;24 f->size = 0;
24 f->code = NULL;25 f->code = NULL;
25 f->lineDefined = 0;26 f->lineDefined = 0;
26 f->fileName = NULL;27 f->fileName = lua_parsedfile;
27 f->locvars = NULL;28 f->locvars = NULL;
28}29}
29 30
@@ -49,47 +50,56 @@ void luaI_freefunc (TFunc *f) · 19 unmodified lines
49 luaI_free (f);50 luaI_free (f);
50}51}
51 52
53
54void luaI_funcfree (TFunc *l)
55{
56 while (l) {
57 TFunc *next = l->next;
58 luaI_freefunc(l);
59 l = next;
60 }
61}
62
52/*63/*
53** Garbage collection function.64** Garbage collection function.
54** This function traverse the function list freeing unindexed functions
55*/65*/
56Long luaI_funccollector (void)66TFunc *luaI_funccollector (long *acum)
57{67{
58 TFunc *curr = function_root;68 TFunc *curr = function_root;
59 TFunc *prev = NULL;69 TFunc *prev = NULL;
60 Long counter = 0;70 TFunc *frees = NULL;
61 while (curr)71 long counter = 0;
62 {72 while (curr) {
63 TFunc *next = curr->next;73 TFunc *next = curr->next;
64 if (!curr->marked)74 if (!curr->marked) {
65 {
66 if (prev == NULL)75 if (prev == NULL)
67 function_root = next;76 function_root = next;
68 else77 else
69 prev->next = next;78 prev->next = next;
70 luaI_freefunc (curr);79 curr->next = frees;
80 frees = curr;
71 ++counter;81 ++counter;
72 }82 }
73 else83 else {
74 {
75 curr->marked = 0;84 curr->marked = 0;
76 prev = curr;85 prev = curr;
77 } 86 }
78 curr = next;87 curr = next;
79 }88 }
80 return counter;89 *acum += counter;
90 return frees;
81}91}
82 92
83 93
84void lua_funcinfo (lua_Object func, char **filename, int *linedefined)94void lua_funcinfo (lua_Object func, char **filename, int *linedefined)
85{95{
86 Object *f = luaI_Address(func);96 TObject *f = luaI_Address(func);
87 if (f->tag == LUA_T_MARK || f->tag == LUA_T_FUNCTION)97 if (f->ttype == LUA_T_MARK || f->ttype == LUA_T_FUNCTION)
88 {98 {
89 *filename = f->value.tf->fileName;99 *filename = f->value.tf->fileName;
90 *linedefined = f->value.tf->lineDefined;100 *linedefined = f->value.tf->lineDefined;
91 }101 }
92 else if (f->tag == LUA_T_CMARK || f->tag == LUA_T_CFUNCTION)102 else if (f->ttype == LUA_T_CMARK || f->ttype == LUA_T_CFUNCTION)
93 {103 {
94 *filename = "(C)";104 *filename = "(C)";
95 *linedefined = -1;105 *linedefined = -1;
src/func.h+3−2
@@ -1,5 +1,5 @@
1/*1/*
2** $Id: func.h,v 1.8 1996/03/14 15:54:20 roberto Exp $2** $Id: func.h,v 1.9 1997/05/14 18:38:29 roberto Exp $
3*/3*/
4 4
5#ifndef func_h5#ifndef func_h
@@ -30,7 +30,8 @@ typedef struct TFunc · 24 unmodified lines
30 LocVar *locvars;30 LocVar *locvars;
31} TFunc;31} TFunc;
32 32
33Long luaI_funccollector (void);33TFunc *luaI_funccollector (long *cont);
34void luaI_funcfree (TFunc *l);
34void luaI_insertfunction (TFunc *f);35void luaI_insertfunction (TFunc *f);
35 36
36void luaI_initTFunc (TFunc *f);37void luaI_initTFunc (TFunc *f);
src/hash.c+147−134
@@ -3,14 +3,15 @@ · 2 unmodified lines
3** hash manager for lua3** hash manager for lua
4*/4*/
5 5
6char *rcs_hash="$Id: hash.c,v 2.32 1996/11/18 13:48:44 roberto Exp $";6char *rcs_hash="$Id: hash.c,v 2.43 1997/05/14 18:38:29 roberto Exp $";
7 7
8 8
9#include "mem.h"9#include "luamem.h"
10#include "opcode.h"10#include "opcode.h"
11#include "hash.h"11#include "hash.h"
12#include "table.h"12#include "table.h"
13#include "lua.h"13#include "lua.h"
14#include "auxlib.h"
14 15
15 16
16#define nhash(t) ((t)->nhash)17#define nhash(t) ((t)->nhash)
@@ -24,13 +25,15 @@ char *rcs_hash="$Id: hash.c,v 2.32 1996/11/18 13:48:44 roberto Exp $"; · 7 unmodified lines
24 25
25#define REHASH_LIMIT 0.70 /* avoid more than this % full */26#define REHASH_LIMIT 0.70 /* avoid more than this % full */
26 27
28#define TagDefault LUA_T_ARRAY;
29
27 30
28static Hash *listhead = NULL;31static Hash *listhead = NULL;
29 32
30 33
31/* hash dimensions values */34/* hash dimensions values */
32static Long dimensions[] = 35static Long dimensions[] =
33 {3L, 5L, 7L, 11L, 23L, 47L, 97L, 197L, 397L, 797L, 1597L, 3203L, 6421L,36 {5L, 11L, 23L, 47L, 97L, 197L, 397L, 797L, 1597L, 3203L, 6421L,
34 12853L, 25717L, 51437L, 102811L, 205619L, 411233L, 822433L,37 12853L, 25717L, 51437L, 102811L, 205619L, 411233L, 822433L,
35 1644817L, 3289613L, 6579211L, 13158023L, MAX_INT};38 1644817L, 3289613L, 6579211L, 13158023L, MAX_INT};
36 39
@@ -46,16 +49,32 @@ int luaI_redimension (int nhash) · 9 unmodified lines
46 return 0; /* to avoid warnings */49 return 0; /* to avoid warnings */
47}50}
48 51
49static int hashindex (Hash *t, Object *ref) /* hash function */52
53int lua_equalObj (TObject *t1, TObject *t2)
54{
55 if (ttype(t1) != ttype(t2)) return 0;
56 switch (ttype(t1))
57 {
58 case LUA_T_NIL: return 1;
59 case LUA_T_NUMBER: return nvalue(t1) == nvalue(t2);
60 case LUA_T_STRING: case LUA_T_USERDATA: return svalue(t1) == svalue(t2);
61 case LUA_T_ARRAY: return avalue(t1) == avalue(t2);
62 case LUA_T_FUNCTION: return t1->value.tf == t2->value.tf;
63 case LUA_T_CFUNCTION: return fvalue(t1) == fvalue(t2);
64 default:
65 lua_error("internal error in `lua_equalObj'");
66 return 0; /* UNREACHEABLE */
67 }
68}
69
70
71static long int hashindex (TObject *ref)
50{72{
51 long int h;73 long int h;
52 switch (tag(ref)) {74 switch (ttype(ref)) {
53 case LUA_T_NIL:
54 lua_error ("unexpected type to index table");
55 h = 0; /* UNREACHEABLE */
56 case LUA_T_NUMBER:75 case LUA_T_NUMBER:
57 h = (long int)nvalue(ref); break;76 h = (long int)nvalue(ref); break;
58 case LUA_T_STRING:77 case LUA_T_STRING: case LUA_T_USERDATA:
59 h = tsvalue(ref)->hash; break;78 h = tsvalue(ref)->hash; break;
60 case LUA_T_FUNCTION:79 case LUA_T_FUNCTION:
61 h = (IntPoint)ref->value.tf; break;80 h = (IntPoint)ref->value.tf; break;
@@ -63,38 +82,29 @@ static int hashindex (Hash *t, Object *ref) /* hash function */ · 1 unmodified line
63 h = (IntPoint)fvalue(ref); break;82 h = (IntPoint)fvalue(ref); break;
64 case LUA_T_ARRAY:83 case LUA_T_ARRAY:
65 h = (IntPoint)avalue(ref); break;84 h = (IntPoint)avalue(ref); break;
66 default: /* user data */85 default:
67 h = (IntPoint)uvalue(ref); break;86 lua_error ("unexpected type to index table");
87 h = 0; /* UNREACHEABLE */
68 }88 }
69 if (h < 0) h = -h;89 if (h < 0) h = -h;
70 return h%nhash(t); /* make it a valid index */90 return h;
71}91}
72 92
73int lua_equalObj (Object *t1, Object *t2)93
94static int present (Hash *t, TObject *key)
74{95{
75 if (tag(t1) != tag(t2)) return 0;96 long int h = hashindex(key);
76 switch (tag(t1))97 int tsize = nhash(t);
77 {98 int h1 = h%tsize;
78 case LUA_T_NIL: return 1;99 TObject *rf = ref(node(t, h1));
79 case LUA_T_NUMBER: return nvalue(t1) == nvalue(t2);100 if (ttype(rf) != LUA_T_NIL && !lua_equalObj(key, rf)) {
80 case LUA_T_STRING: return svalue(t1) == svalue(t2);101 int h2 = h%(tsize-2) + 1;
81 case LUA_T_ARRAY: return avalue(t1) == avalue(t2);102 do {
82 case LUA_T_FUNCTION: return t1->value.tf == t2->value.tf;103 h1 = (h1+h2)%tsize;
83 case LUA_T_CFUNCTION: return fvalue(t1) == fvalue(t2);104 rf = ref(node(t, h1));
84 default: return uvalue(t1) == uvalue(t2);105 } while (ttype(rf) != LUA_T_NIL && !lua_equalObj(key, rf));
85 }106 }
86}107 return h1;
87
88static int present (Hash *t, Object *ref)
89{
90 int h = hashindex(t, ref);
91 while (tag(ref(node(t, h))) != LUA_T_NIL)
92 {
93 if (lua_equalObj(ref, ref(node(t, h))))
94 return h;
95 h = (h+1) % nhash(t);
96 }
97 return h;
98}108}
99 109
100 110
@@ -106,7 +116,7 @@ static Node *hashnodecreate (int nhash) · 5 unmodified lines
106 int i;116 int i;
107 Node *v = newvector (nhash, Node);117 Node *v = newvector (nhash, Node);
108 for (i=0; i<nhash; i++)118 for (i=0; i<nhash; i++)
109 tag(ref(&v[i])) = LUA_T_NIL;119 ttype(ref(&v[i])) = LUA_T_NIL;
110 return v;120 return v;
111}121}
112 122
@@ -121,6 +131,7 @@ static Hash *hashcreate (int nhash) · 8 unmodified lines
121 nhash(t) = nhash;131 nhash(t) = nhash;
122 nuse(t) = 0;132 nuse(t) = 0;
123 markarray(t) = 0;133 markarray(t) = 0;
134 t->htag = TagDefault;
124 return t;135 return t;
125}136}
126 137
@@ -146,7 +157,7 @@ void lua_hashmark (Hash *h) · 19 unmodified lines
146 for (i=0; i<nhash(h); i++)157 for (i=0; i<nhash(h); i++)
147 {158 {
148 Node *n = node(h,i);159 Node *n = node(h,i);
149 if (tag(ref(n)) != LUA_T_NIL)160 if (ttype(ref(n)) != LUA_T_NIL)
150 {161 {
151 lua_markobject(&n->ref);162 lua_markobject(&n->ref);
152 lua_markobject(&n->val);163 lua_markobject(&n->val);
@@ -156,49 +167,50 @@ void lua_hashmark (Hash *h) · 3 unmodified lines
156}167}
157 168
158 169
159static void call_fallbacks (void)170void luaI_hashcallIM (Hash *l)
160{171{
161 Hash *curr_array;172 TObject t;
162 Object t;173 ttype(&t) = LUA_T_ARRAY;
163 tag(&t) = LUA_T_ARRAY;174 for (; l; l=l->next) {
164 for (curr_array = listhead; curr_array; curr_array = curr_array->next)175 avalue(&t) = l;
165 if (markarray(curr_array) != 1)176 luaI_gcIM(&t);
166 {177 }
167 avalue(&t) = curr_array;
168 luaI_gcFB(&t);
169 }
170 tag(&t) = LUA_T_NIL;
171 luaI_gcFB(&t); /* end of list */
172}178}
173 179
174 180
175/*181void luaI_hashfree (Hash *frees)
176** Garbage collection to arrays
177** Delete all unmarked arrays.
178*/
179Long lua_hashcollector (void)
180{182{
181 Hash *curr_array = listhead, *prev = NULL;183 while (frees) {
182 Long counter = 0;184 Hash *next = frees->next;
183 call_fallbacks();185 hashdelete(frees);
184 while (curr_array != NULL)186 frees = next;
185 {
186 Hash *next = curr_array->next;
187 if (markarray(curr_array) != 1)
188 {
189 if (prev == NULL) listhead = next;
190 else prev->next = next;
191 hashdelete(curr_array);
192 ++counter;
193 }187 }
194 else188}
195 {189
196 markarray(curr_array) = 0;190
197 prev = curr_array;191Hash *luaI_hashcollector (long *acum)
192{
193 Hash *curr_array = listhead, *prev = NULL, *frees = NULL;
194 long counter = 0;
195 while (curr_array != NULL) {
196 Hash *next = curr_array->next;
197 if (markarray(curr_array) != 1) {
198 if (prev == NULL)
199 listhead = next;
200 else
201 prev->next = next;
202 curr_array->next = frees;
203 frees = curr_array;
204 ++counter;
205 }
206 else {
207 markarray(curr_array) = 0;
208 prev = curr_array;
209 }
210 curr_array = next;
198 }211 }
199 curr_array = next;212 *acum += counter;
200 }213 return frees;
201 return counter;
202}214}
203 215
204 216
@@ -220,32 +232,45 @@ Hash *lua_createarray (int nhash) · 15 unmodified lines
220 232
221 233
222/*234/*
223** Re-hash235** Rehash:
236** Check if table has deleted slots. It it has, it does not need to
237** grow, since rehash will reuse them.
224*/238*/
239static int emptyslots (Hash *t)
240{
241 int i;
242 for (i=nhash(t)-1; i>=0; i--) {
243 Node *n = node(t, i);
244 if (ttype(ref(n)) != LUA_T_NIL && ttype(val(n)) == LUA_T_NIL)
245 return 1;
246 }
247 return 0;
248}
249
225static void rehash (Hash *t)250static void rehash (Hash *t)
226{251{
227 int i;252 int nold = nhash(t);
228 int nold = nhash(t);253 Node *vold = nodevector(t);
229 Node *vold = nodevector(t);254 int i;
230 nhash(t) = luaI_redimension(nhash(t));255 if (!emptyslots(t))
231 nodevector(t) = hashnodecreate(nhash(t));256 nhash(t) = luaI_redimension(nhash(t));
232 for (i=0; i<nold; i++)257 nodevector(t) = hashnodecreate(nhash(t));
233 {258 for (i=0; i<nold; i++) {
234 Node *n = vold+i;259 Node *n = vold+i;
235 if (tag(ref(n)) != LUA_T_NIL && tag(val(n)) != LUA_T_NIL)260 if (ttype(ref(n)) != LUA_T_NIL && ttype(val(n)) != LUA_T_NIL)
236 *node(t, present(t, ref(n))) = *n; /* copy old node to new hahs */261 *node(t, present(t, ref(n))) = *n; /* copy old node to new hash */
237 }262 }
238 luaI_free(vold);263 luaI_free(vold);
239}264}
240 265
241/*266/*
242** If the hash node is present, return its pointer, otherwise return267** If the hash node is present, return its pointer, otherwise return
243** null.268** null.
244*/269*/
245Object *lua_hashget (Hash *t, Object *ref)270TObject *lua_hashget (Hash *t, TObject *ref)
246{271{
247 int h = present(t, ref);272 int h = present(t, ref);
248 if (tag(ref(node(t, h))) != LUA_T_NIL) return val(node(t, h));273 if (ttype(ref(node(t, h))) != LUA_T_NIL) return val(node(t, h));
249 else return NULL;274 else return NULL;
250}275}
251 276
@@ -254,25 +279,19 @@ Object *lua_hashget (Hash *t, Object *ref) · 2 unmodified lines
254** If the hash node is present, return its pointer, otherwise create a new279** If the hash node is present, return its pointer, otherwise create a new
255** node for the given reference and also return its pointer.280** node for the given reference and also return its pointer.
256*/281*/
257Object *lua_hashdefine (Hash *t, Object *ref)282TObject *lua_hashdefine (Hash *t, TObject *ref)
258{283{
259 int h;284 Node *n = node(t, present(t, ref));
260 Node *n;285 if (ttype(ref(n)) == LUA_T_NIL) {
261 h = present(t, ref);286 nuse(t)++;
262 n = node(t, h);287 if ((float)nuse(t) > (float)nhash(t)*REHASH_LIMIT) {
263 if (tag(ref(n)) == LUA_T_NIL)288 rehash(t);
264 {289 n = node(t, present(t, ref));
265 nuse(t)++;290 }
266 if ((float)nuse(t) > (float)nhash(t)*REHASH_LIMIT)291 *ref(n) = *ref;
267 {292 ttype(val(n)) = LUA_T_NIL;
268 rehash(t);
269 h = present(t, ref);
270 n = node(t, h);
271 }293 }
272 *ref(n) = *ref;294 return (val(n));
273 tag(val(n)) = LUA_T_NIL;
274 }
275 return (val(n));
276}295}
277 296
278 297
@@ -284,36 +303,30 @@ Object *lua_hashdefine (Hash *t, Object *ref) · 5 unmodified lines
284*/303*/
285static void hashnext (Hash *t, int i)304static void hashnext (Hash *t, int i)
286{305{
287 if (i >= nhash(t))306 Node *n;
288 return;307 int tsize = nhash(t);
289 while (tag(ref(node(t,i))) == LUA_T_NIL || tag(val(node(t,i))) == LUA_T_NIL)308 if (i >= tsize)
290 {309 return;
291 if (++i >= nhash(t))310 n = node(t, i);
292 return;311 while (ttype(ref(n)) == LUA_T_NIL || ttype(val(n)) == LUA_T_NIL) {
293 }312 if (++i >= tsize)
294 luaI_pushobject(ref(node(t,i)));313 return;
295 luaI_pushobject(val(node(t,i)));314 n = node(t, i);
315 }
316 luaI_pushobject(ref(node(t,i)));
317 luaI_pushobject(val(node(t,i)));
296}318}
297 319
298void lua_next (void)320void lua_next (void)
299{321{
300 Hash *t;322 Hash *t;
301 lua_Object o = lua_getparam(1);323 lua_Object o = lua_getparam(1);
302 lua_Object r = lua_getparam(2);324 lua_Object r = lua_getparam(2);
303 if (o == LUA_NOOBJECT || r == LUA_NOOBJECT)325 luaL_arg_check(lua_istable(o), 1, "table expected");
304 lua_error ("too few arguments to function `next'");326 luaL_arg_check(r != LUA_NOOBJECT, 2, "value expected");
305 if (lua_getparam(3) != LUA_NOOBJECT)327 t = avalue(luaI_Address(o));
306 lua_error ("too many arguments to function `next'");328 if (lua_isnil(r))
307 if (!lua_istable(o))329 hashnext(t, 0);
308 lua_error ("first argument of function `next' is not a table");330 else
309 t = avalue(luaI_Address(o));331 hashnext(t, present(t, luaI_Address(r))+1);
310 if (lua_isnil(r))
311 {
312 hashnext(t, 0);
313 }
314 else
315 {
316 int h = present (t, luaI_Address(r));
317 hashnext(t, h+1);
318 }
319}332}
src/hash.h+17−16
@@ -1,7 +1,7 @@
1/*1/*
2** hash.h2** hash.h
3** hash manager for lua3** hash manager for lua
4** $Id: hash.h,v 2.12 1996/05/06 14:30:27 roberto Exp $4** $Id: hash.h,v 2.16 1997/05/14 18:38:29 roberto Exp $
5*/5*/
6 6
7#ifndef hash_h7#ifndef hash_h
@@ -10,29 +10,30 @@ · 2 unmodified lines
10#include "types.h"10#include "types.h"
11#include "opcode.h"11#include "opcode.h"
12 12
13typedef struct node13typedef struct node {
14{14 TObject ref;
15 Object ref;15 TObject val;
16 Object val;
17} Node;16} Node;
18 17
19typedef struct Hash18typedef struct Hash {
20{19 struct Hash *next;
21 struct Hash *next;20 Node *node;
22 Node *node;21 int nhash;
23 int nhash;22 int nuse;
24 int nuse;23 int htag;
25 char mark;24 char mark;
26} Hash;25} Hash;
27 26
28 27
29int lua_equalObj (Object *t1, Object *t2);28int lua_equalObj (TObject *t1, TObject *t2);
30int luaI_redimension (int nhash);29int luaI_redimension (int nhash);
31Hash *lua_createarray (int nhash);30Hash *lua_createarray (int nhash);
32void lua_hashmark (Hash *h);31void lua_hashmark (Hash *h);
33Long lua_hashcollector (void);32Hash *luaI_hashcollector (long *count);
34Object *lua_hashget (Hash *t, Object *ref);33void luaI_hashcallIM (Hash *l);
35Object *lua_hashdefine (Hash *t, Object *ref);34void luaI_hashfree (Hash *frees);
35TObject *lua_hashget (Hash *t, TObject *ref);
36TObject *lua_hashdefine (Hash *t, TObject *ref);
36void lua_next (void);37void lua_next (void);
37 38
38#endif39#endif
src/inout.c+278−170
@@ -5,18 +5,24 @@ · 4 unmodified lines
5** Also provides some predefined lua functions.5** Also provides some predefined lua functions.
6*/6*/
7 7
8char *rcs_inout="$Id: inout.c,v 2.43 1996/09/25 12:57:22 roberto Exp $";8char *rcs_inout="$Id: inout.c,v 2.69 1997/06/27 22:38:49 roberto Exp $";
9 9
10#include <stdio.h>10#include <stdio.h>
11#include <string.h>11#include <string.h>
12 12
13#include "auxlib.h"
14#include "fallback.h"
15#include "hash.h"
16#include "inout.h"
13#include "lex.h"17#include "lex.h"
18#include "lua.h"
19#include "luamem.h"
20#include "luamem.h"
14#include "opcode.h"21#include "opcode.h"
15#include "inout.h"
16#include "table.h"22#include "table.h"
17#include "tree.h"23#include "tree.h"
18#include "lua.h"24#include "undump.h"
19#include "mem.h"25#include "zio.h"
20 26
21 27
22/* Exported variables */28/* Exported variables */
@@ -24,92 +30,93 @@ Word lua_linenumber; · 1 unmodified line
24char *lua_parsedfile;30char *lua_parsedfile;
25 31
26 32
27static FILE *fp;33char *luaI_typenames[] = { /* ORDER LUA_T */
28static char *st;34 "userdata", "line", "cmark", "mark", "function",
35 "function", "table", "string", "number", "nil",
36 NULL
37};
29 38
30/*
31** Function to get the next character from the input file
32*/
33static int fileinput (void)
34{
35 int c = fgetc(fp);
36 return (c == EOF) ? 0 : c;
37}
38 39
39/*40
40** Function to get the next character from the input string41void luaI_setparsedfile (char *name)
41*/
42static int stringinput (void)
43{42{
44 return *st++;43 lua_parsedfile = luaI_createfixedstring(name)->str;
45}44}
46 45
47/*46
48** Function to open a file to be input unit. 47int lua_doFILE (FILE *f, int bin)
49** Return the file.
50*/
51FILE *lua_openfile (char *fn)
52{48{
53 lua_setinput (fileinput);49 ZIO z;
54 if (fn == NULL)50 luaZ_Fopen(&z, f);
55 {51 if (bin)
56 fp = stdin;52 return luaI_undump(&z);
57 fn = "(stdin)";53 else {
58 }54 lua_setinput(&z);
59 else55 return lua_domain();
60 fp = fopen (fn, "r");56 }
61 if (fp == NULL)57}
62 return NULL;
63 lua_parsedfile = luaI_createfixedstring(fn)->str;
64 return fp;
65}
66 58
67/*59
68** Function to close an opened file60int lua_dofile (char *filename)
69*/
70void lua_closefile (void)
71{61{
72 if (fp != NULL && fp != stdin)62 int status;
73 {63 int c;
74 fclose (fp);64 FILE *f = (filename == NULL) ? stdin : fopen(filename, "r");
75 fp = NULL;65 if (f == NULL)
76 }66 return 2;
77}67 luaI_setparsedfile(filename?filename:"(stdin)");
68 c = fgetc(f);
69 ungetc(c, f);
70 if (c == ID_CHUNK) {
71 f = freopen(filename, "rb", f); /* set binary mode */
72 status = lua_doFILE(f, 1);
73 }
74 else {
75 if (c == '#')
76 while ((c=fgetc(f)) != '\n') /* skip first line */;
77 status = lua_doFILE(f, 0);
78 }
79 if (f != stdin)
80 fclose(f);
81 return status;
82}
83
84
78 85
79/*
80** Function to open a string to be input unit
81*/
82#define SIZE_PREF 20 /* size of string prefix to appear in error messages */86#define SIZE_PREF 20 /* size of string prefix to appear in error messages */
83void lua_openstring (char *s)
84{
85 char buff[SIZE_PREF+25];
86 lua_setinput(stringinput);
87 st = s;
88 strcpy(buff, "(dostring) >> ");
89 strncat(buff, s, SIZE_PREF);
90 if (strlen(s) > SIZE_PREF) strcat(buff, "...");
91 lua_parsedfile = luaI_createfixedstring(buff)->str;
92}
93 87
94/*88
95** Function to close an opened string89int lua_dobuffer (char *buff, int size)
96*/
97void lua_closestring (void)
98{90{
91 int status;
92 ZIO z;
93 luaI_setparsedfile("(buffer)");
94 luaZ_mopen(&z, buff, size);
95 status = luaI_undump(&z);
96 return status;
99}97}
100 98
101 99
102static void check_arg (int cond, char *func)100int lua_dostring (char *str)
103{101{
104 if (!cond)102 int status;
105 {103 char buff[SIZE_PREF+25];
106 char buff[100];104 char *temp;
107 sprintf(buff, "incorrect argument to function `%s'", func);105 ZIO z;
108 lua_error(buff);106 if (str == NULL) return 1;
109 }107 sprintf(buff, "(dostring) >> %.20s", str);
108 temp = strchr(buff, '\n');
109 if (temp) *temp = 0; /* end string after first line */
110 luaI_setparsedfile(buff);
111 luaZ_sopen(&z, str);
112 lua_setinput(&z);
113 status = lua_domain();
114 return status;
110}115}
111 116
112 117
118
119
113static int passresults (void)120static int passresults (void)
114{121{
115 int arg = 0;122 int arg = 0;
@@ -118,30 +125,53 @@ static int passresults (void) · 2 unmodified lines
118 lua_pushobject(obj);125 lua_pushobject(obj);
119 return arg-1;126 return arg-1;
120}127}
128
129
130static void packresults (void)
131{
132 int arg = 0;
133 lua_Object obj;
134 lua_Object table = lua_createtable();
135 while ((obj = lua_getresult(++arg)) != LUA_NOOBJECT) {
136 lua_pushobject(table);
137 lua_pushnumber(arg);
138 lua_pushobject(obj);
139 lua_rawsettable();
140 }
141 lua_pushobject(table);
142 lua_pushstring("n");
143 lua_pushnumber(arg-1);
144 lua_rawsettable();
145 lua_pushobject(table); /* final result */
146}
121 147
122/*148/*
123** Internal function: do a string149** Internal function: do a string
124*/150*/
125void lua_internaldostring (void)151static void lua_internaldostring (void)
126{152{
127 lua_Object obj = lua_getparam (1);153 lua_Object err = lua_getparam(2);
128 if (lua_isstring(obj) && lua_dostring(lua_getstring(obj)) == 0)154 if (err != LUA_NOOBJECT) { /* set new error method */
155 luaL_arg_check(lua_isnil(err) || lua_isfunction(err), 2,
156 "must be a valid error handler");
157 lua_pushobject(err);
158 err = lua_seterrormethod();
159 }
160 if (lua_dostring(luaL_check_string(1)) == 0)
129 if (passresults() == 0)161 if (passresults() == 0)
130 lua_pushuserdata(NULL); /* at least one result to signal no errors */162 lua_pushuserdata(NULL); /* at least one result to signal no errors */
163 if (err != LUA_NOOBJECT) { /* restore old error method */
164 lua_pushobject(err);
165 lua_seterrormethod();
166 }
131}167}
132 168
133/*169/*
134** Internal function: do a file170** Internal function: do a file
135*/171*/
136void lua_internaldofile (void)172static void lua_internaldofile (void)
137{173{
138 lua_Object obj = lua_getparam (1);174 char *fname = luaL_opt_string(1, NULL);
139 char *fname = NULL;
140 if (lua_isstring(obj))
141 fname = lua_getstring(obj);
142 else if (obj != LUA_NOOBJECT)
143 lua_error("invalid argument to function `dofile'");
144 /* else fname = NULL */
145 if (lua_dofile(fname) == 0)175 if (lua_dofile(fname) == 0)
146 if (passresults() == 0)176 if (passresults() == 0)
147 lua_pushuserdata(NULL); /* at least one result to signal no errors */177 lua_pushuserdata(NULL); /* at least one result to signal no errors */
@@ -150,36 +180,28 @@ void lua_internaldofile (void) · 2 unmodified lines
150 180
151static char *tostring (lua_Object obj)181static char *tostring (lua_Object obj)
152{182{
153 char *buff = luaI_buffer(20);183 TObject *o = luaI_Address(obj);
154 if (lua_isstring(obj)) /* get strings and numbers */184 switch (ttype(o)) {
155 return lua_getstring(obj);185 case LUA_T_NUMBER: case LUA_T_STRING:
156 else switch(lua_type(obj))186 return lua_getstring(obj);
157 {187 case LUA_T_ARRAY: case LUA_T_FUNCTION:
158 case LUA_T_FUNCTION:188 case LUA_T_CFUNCTION: case LUA_T_NIL:
159 sprintf(buff, "function: %p", (luaI_Address(obj))->value.tf);189 return luaI_typenames[-ttype(o)];
160 break;190 case LUA_T_USERDATA: {
161 case LUA_T_CFUNCTION:191 char *buff = luaI_buffer(30);
162 sprintf(buff, "cfunction: %p", lua_getcfunction(obj));192 sprintf(buff, "userdata: %p", o->value.ts->u.v);
163 break;193 return buff;
164 case LUA_T_ARRAY:194 }
165 sprintf(buff, "table: %p", avalue(luaI_Address(obj)));195 default: return "<unknown object>";
166 break;
167 case LUA_T_NIL:
168 sprintf(buff, "nil");
169 break;
170 default:
171 sprintf(buff, "userdata: %p", lua_getuserdata(obj));
172 break;
173 }196 }
174 return buff;
175}197}
176 198
177void luaI_tostring (void)199static void luaI_tostring (void)
178{200{
179 lua_pushstring(tostring(lua_getparam(1)));201 lua_pushstring(tostring(lua_getparam(1)));
180}202}
181 203
182void luaI_print (void)204static void luaI_print (void)
183{205{
184 int i = 1;206 int i = 1;
185 lua_Object obj;207 lua_Object obj;
@@ -187,45 +209,18 @@ void luaI_print (void) · 1 unmodified line
187 printf("%s\n", tostring(obj));209 printf("%s\n", tostring(obj));
188}210}
189 211
190/*212static void luaI_type (void)
191** Internal function: return an object type.
192*/
193void luaI_type (void)
194{213{
195 lua_Object o = lua_getparam(1);214 lua_Object o = lua_getparam(1);
196 int t;215 luaL_arg_check(o != LUA_NOOBJECT, 1, "no argument");
197 if (o == LUA_NOOBJECT)216 lua_pushstring(luaI_typenames[-ttype(luaI_Address(o))]);
198 lua_error("no parameter to function 'type'");217 lua_pushnumber(lua_tag(o));
199 t = lua_type(o);
200 switch (t)
201 {
202 case LUA_T_NIL :
203 lua_pushliteral("nil");
204 break;
205 case LUA_T_NUMBER :
206 lua_pushliteral("number");
207 break;
208 case LUA_T_STRING :
209 lua_pushliteral("string");
210 break;
211 case LUA_T_ARRAY :
212 lua_pushliteral("table");
213 break;
214 case LUA_T_FUNCTION :
215 case LUA_T_CFUNCTION :
216 lua_pushliteral("function");
217 break;
218 default :
219 lua_pushliteral("userdata");
220 break;
221 }
222 lua_pushnumber(t);
223}218}
224 219
225/*220/*
226** Internal function: convert an object to a number221** Internal function: convert an object to a number
227*/222*/
228void lua_obj2number (void)223static void lua_obj2number (void)
229{224{
230 lua_Object o = lua_getparam(1);225 lua_Object o = lua_getparam(1);
231 if (lua_isnumber(o))226 if (lua_isnumber(o))
@@ -233,68 +228,181 @@ void lua_obj2number (void) · 1 unmodified line
233}228}
234 229
235 230
236void luaI_error (void)231static void luaI_error (void)
237{232{
238 char *s = lua_getstring(lua_getparam(1));233 char *s = lua_getstring(lua_getparam(1));
239 if (s == NULL) s = "(no message)";234 if (s == NULL) s = "(no message)";
240 lua_error(s);235 lua_error(s);
241}236}
242 237
243void luaI_assert (void)238static void luaI_assert (void)
244{239{
245 lua_Object p = lua_getparam(1);240 lua_Object p = lua_getparam(1);
246 if (p == LUA_NOOBJECT || lua_isnil(p))241 if (p == LUA_NOOBJECT || lua_isnil(p))
247 lua_error("assertion failed!");242 lua_error("assertion failed!");
248}243}
249 244
250void luaI_setglobal (void)245static void luaI_setglobal (void)
246{
247 lua_Object value = lua_getparam(2);
248 luaL_arg_check(value != LUA_NOOBJECT, 2, NULL);
249 lua_pushobject(value);
250 lua_setglobal(luaL_check_string(1));
251 lua_pushobject(value); /* return given value */
252}
253
254static void luaI_rawsetglobal (void)
251{255{
252 lua_Object name = lua_getparam(1);
253 lua_Object value = lua_getparam(2);256 lua_Object value = lua_getparam(2);
254 check_arg(lua_isstring(name), "setglobal");257 luaL_arg_check(value != LUA_NOOBJECT, 2, NULL);
255 lua_pushobject(value);258 lua_pushobject(value);
256 lua_storeglobal(lua_getstring(name));259 lua_rawsetglobal(luaL_check_string(1));
257 lua_pushobject(value); /* return given value */260 lua_pushobject(value); /* return given value */
258}261}
259 262
260void luaI_getglobal (void)263static void luaI_getglobal (void)
261{264{
262 lua_Object name = lua_getparam(1);265 lua_pushobject(lua_getglobal(luaL_check_string(1)));
263 check_arg(lua_isstring(name), "getglobal");
264 lua_pushobject(lua_getglobal(lua_getstring(name)));
265}266}
266 267
267#define MAXPARAMS 256268static void luaI_rawgetglobal (void)
268void luaI_call (void)269{
270 lua_pushobject(lua_rawgetglobal(luaL_check_string(1)));
271}
272
273static void luatag (void)
274{
275 lua_pushnumber(lua_tag(lua_getparam(1)));
276}
277
278
279static int getnarg (lua_Object table)
280{
281 lua_Object temp;
282 /* temp = table.n */
283 lua_pushobject(table); lua_pushstring("n"); temp = lua_gettable();
284 return (lua_isnumber(temp) ? lua_getnumber(temp) : MAX_WORD);
285}
286
287static void luaI_call (void)
269{288{
270 lua_Object f = lua_getparam(1);289 lua_Object f = lua_getparam(1);
271 lua_Object arg = lua_getparam(2);290 lua_Object arg = lua_getparam(2);
272 lua_Object temp, params[MAXPARAMS];291 int withtable = (strcmp(luaL_opt_string(3, ""), "pack") == 0);
273 int narg, i;292 int narg, i;
274 check_arg(lua_istable(arg), "call");293 luaL_arg_check(lua_isfunction(f), 1, "function expected");
275 check_arg(lua_isfunction(f), "call");294 luaL_arg_check(lua_istable(arg), 2, "table expected");
276 /* narg = arg.n */295 narg = getnarg(arg);
277 lua_pushobject(arg);296 /* push arg[1...n] */
278 lua_pushstring("n");
279 temp = lua_getsubscript();
280 narg = lua_isnumber(temp) ? lua_getnumber(temp) : MAXPARAMS+1;
281 /* read arg[1...n] */
282 for (i=0; i<narg; i++) {297 for (i=0; i<narg; i++) {
283 if (i>=MAXPARAMS)298 lua_Object temp;
284 lua_error("argument list too long in function `call'");299 /* temp = arg[i+1] */
285 lua_pushobject(arg);300 lua_pushobject(arg); lua_pushnumber(i+1); temp = lua_gettable();
286 lua_pushnumber(i+1);301 if (narg == MAX_WORD && lua_isnil(temp))
287 params[i] = lua_getsubscript();
288 if (narg == MAXPARAMS+1 && lua_isnil(params[i])) {
289 narg = i;
290 break;302 break;
291 }303 lua_pushobject(temp);
292 }304 }
293 /* push parameters and do the call */
294 for (i=0; i<narg; i++)
295 lua_pushobject(params[i]);
296 if (lua_callfunction(f))305 if (lua_callfunction(f))
297 lua_error(NULL);306 lua_error(NULL);
307 else if (withtable)
308 packresults();
298 else309 else
299 passresults();310 passresults();
300}311}
312
313static void luaIl_settag (void)
314{
315 lua_Object o = lua_getparam(1);
316 luaL_arg_check(lua_istable(o), 1, "table expected");
317 lua_pushobject(o);
318 lua_settag(luaL_check_number(2));
319}
320
321static void luaIl_newtag (void)
322{
323 lua_pushnumber(lua_newtag());
324}
325
326static void rawgettable (void)
327{
328 lua_Object t = lua_getparam(1);
329 lua_Object i = lua_getparam(2);
330 luaL_arg_check(t != LUA_NOOBJECT, 1, NULL);
331 luaL_arg_check(i != LUA_NOOBJECT, 2, NULL);
332 lua_pushobject(t);
333 lua_pushobject(i);
334 lua_pushobject(lua_rawgettable());
335}
336
337static void rawsettable (void)
338{
339 lua_Object t = lua_getparam(1);
340 lua_Object i = lua_getparam(2);
341 lua_Object v = lua_getparam(3);
342 luaL_arg_check(t != LUA_NOOBJECT && i != LUA_NOOBJECT && v != LUA_NOOBJECT,
343 0, NULL);
344 lua_pushobject(t);
345 lua_pushobject(i);
346 lua_pushobject(v);
347 lua_rawsettable();
348}
349
350
351static void luaI_collectgarbage (void)
352{
353 lua_pushnumber(lua_collectgarbage(luaL_opt_number(1, 0)));
354}
355
356
357/*
358** Internal functions
359*/
360static struct {
361 char *name;
362 lua_CFunction func;
363} int_funcs[] = {
364 {"assert", luaI_assert},
365 {"call", luaI_call},
366 {"collectgarbage", luaI_collectgarbage},
367 {"dofile", lua_internaldofile},
368 {"dostring", lua_internaldostring},
369 {"error", luaI_error},
370 {"getglobal", luaI_getglobal},
371 {"newtag", luaIl_newtag},
372 {"next", lua_next},
373 {"nextvar", luaI_nextvar},
374 {"print", luaI_print},
375 {"rawgetglobal", luaI_rawgetglobal},
376 {"rawgettable", rawgettable},
377 {"rawsetglobal", luaI_rawsetglobal},
378 {"rawsettable", rawsettable},
379 {"seterrormethod", luaI_seterrormethod},
380#if LUA_COMPAT2_5
381 {"setfallback", luaI_setfallback},
382#endif
383 {"setglobal", luaI_setglobal},
384 {"settagmethod", luaI_settagmethod},
385 {"gettagmethod", luaI_gettagmethod},
386 {"settag", luaIl_settag},
387 {"tonumber", lua_obj2number},
388 {"tostring", luaI_tostring},
389 {"tag", luatag},
390 {"type", luaI_type}
391};
392
393#define INTFUNCSIZE (sizeof(int_funcs)/sizeof(int_funcs[0]))
394
395
396void luaI_predefine (void)
397{
398 int i;
399 Word n;
400 for (i=0; i<INTFUNCSIZE; i++) {
401 n = luaI_findsymbolbyname(int_funcs[i].name);
402 s_ttype(n) = LUA_T_CFUNCTION; s_fvalue(n) = int_funcs[i].func;
403 }
404 n = luaI_findsymbolbyname("_VERSION");
405 s_ttype(n) = LUA_T_STRING; s_tsvalue(n) = lua_createstring(LUA_VERSION);
406}
407
408
src/inout.h+8−17
@@ -1,5 +1,5 @@
1/*1/*
2** $Id: inout.h,v 1.16 1996/05/28 21:07:32 roberto Exp $2** $Id: inout.h,v 1.20 1997/06/19 18:04:34 roberto Exp $
3*/3*/
4 4
5 5
@@ -14,21 +14,12 @@ extern Word lua_linenumber; · 8 unmodified lines
14extern Word lua_debugline;14extern Word lua_debugline;
15extern char *lua_parsedfile;15extern char *lua_parsedfile;
16 16
17FILE *lua_openfile (char *fn);17void luaI_setparsedfile (char *name);
18void lua_closefile (void);18
19void lua_openstring (char *s);19void luaI_predefine (void);
20void lua_closestring (void);20
21 21int lua_dobuffer (char *buff, int size);
22void lua_internaldofile (void);22int lua_doFILE (FILE *f, int bin);
23void lua_internaldostring (void);23
24void luaI_tostring (void);
25void luaI_print (void);
26void luaI_type (void);
27void lua_obj2number (void);
28void luaI_error (void);
29void luaI_assert (void);
30void luaI_setglobal (void);
31void luaI_getglobal (void);
32void luaI_call (void);
33 24
34#endif25#endif
src/lex.c+174−45
@@ -1,10 +1,11 @@
1char *rcs_lex = "$Id: lex.c,v 2.39 1996/11/08 19:08:30 roberto Exp $";1char *rcs_lex = "$Id: lex.c,v 3.5 1997/06/16 16:50:22 roberto Exp $";
2 2
3 3
4#include <ctype.h>4#include <ctype.h>
5#include <string.h>5#include <string.h>
6 6
7#include "mem.h"7#include "auxlib.h"
8#include "luamem.h"
8#include "tree.h"9#include "tree.h"
9#include "table.h"10#include "table.h"
10#include "lex.h"11#include "lex.h"
@@ -12,33 +13,58 @@ char *rcs_lex = "$Id: lex.c,v 2.39 1996/11/08 19:08:30 roberto Exp $"; · 1 unmodified line
12#include "luadebug.h"13#include "luadebug.h"
13#include "parser.h"14#include "parser.h"
14 15
15#define MINBUFF 26016#define MINBUFF 250
16 17
17#define next() (current = input())18static int current; /* look ahead character */
19static ZIO *lex_z;
20
21
22#define next() (current = zgetc(lex_z))
18#define save(x) (yytext[tokensize++] = (x))23#define save(x) (yytext[tokensize++] = (x))
19#define save_and_next() (save(current), next())24#define save_and_next() (save(current), next())
20 25
21 26
22static int current; /* look ahead character */27#define MAX_IFS 5
23static Input input; /* input function */28
29/* "ifstate" keeps the state of each nested $if the lexical is dealing with. */
30
31static struct {
32 int elsepart; /* true if its in the $else part */
33 int condition; /* true if $if condition is true */
34 int skip; /* true if part must be skiped */
35} ifstate[MAX_IFS];
36
37static int iflevel; /* level of nested $if's */
24 38
25 39
26void lua_setinput (Input fn)40void lua_setinput (ZIO *z)
27{41{
28 current = '\n';42 current = '\n';
29 lua_linenumber = 0;43 lua_linenumber = 0;
30 input = fn;44 iflevel = 0;
45 ifstate[0].skip = 0;
46 ifstate[0].elsepart = 1; /* to avoid a free $else */
47 lex_z = z;
31}48}
32 49
33void luaI_syntaxerror (char *s)50
51static void luaI_auxsyntaxerror (char *s)
52{
53 luaL_verror("%s;\n> at line %d in file %s",
54 s, lua_linenumber, lua_parsedfile);
55}
56
57static void luaI_auxsynterrbf (char *s, char *token)
34{58{
35 char msg[256];
36 char *token = luaI_buffer(1);
37 if (token[0] == 0)59 if (token[0] == 0)
38 token = "<eof>";60 token = "<eof>";
39 sprintf (msg,"%s;\n> last token read: \"%s\" at line %d in file %s",61 luaL_verror("%s;\n> last token read: \"%s\" at line %d in file %s",
40 s, token, lua_linenumber, lua_parsedfile);62 s, token, lua_linenumber, lua_parsedfile);
41 lua_error (msg);63}
64
65void luaI_syntaxerror (char *s)
66{
67 luaI_auxsynterrbf(s, luaI_buffer(1));
42}68}
43 69
44 70
@@ -78,26 +104,122 @@ void luaI_addReserved (void) · 33 unmodified lines
78 }104 }
79}105}
80 106
81static int inclinenumber (int pragma_allowed)107
108/*
109** Pragma handling
110*/
111
112#define PRAGMASIZE 20
113
114static void skipspace (void)
115{
116 while (current == ' ' || current == '\t') next();
117}
118
119
120static int checkcond (char *buff)
121{
122 static char *opts[] = {"nil", "1"};
123 int i = luaI_findstring(buff, opts);
124 if (i >= 0) return i;
125 else if (isalpha((unsigned char)buff[0]) || buff[0] == '_')
126 return luaI_globaldefined(buff);
127 else {
128 luaI_auxsynterrbf("invalid $if condition", buff);
129 return 0; /* to avoid warnings */
130 }
131}
132
133
134static void readname (char *buff)
135{
136 int i = 0;
137 skipspace();
138 while (isalnum((unsigned char)current) || current == '_') {
139 if (i >= PRAGMASIZE) {
140 buff[PRAGMASIZE] = 0;
141 luaI_auxsynterrbf("pragma too long", buff);
142 }
143 buff[i++] = current;
144 next();
145 }
146 buff[i] = 0;
147}
148
149
150static void inclinenumber (void);
151
152
153static void ifskip (void)
154{
155 while (ifstate[iflevel].skip) {
156 if (current == '\n')
157 inclinenumber();
158 else if (current == EOZ)
159 luaI_auxsyntaxerror("input ends inside a $if");
160 else next();
161 }
162}
163
164
165static void inclinenumber (void)
82{166{
167 static char *pragmas [] =
168 {"debug", "nodebug", "endinput", "end", "ifnot", "if", "else", NULL};
169 next(); /* skip '\n' */
83 ++lua_linenumber;170 ++lua_linenumber;
84 if (pragma_allowed && current == '$') { /* is a pragma? */171 if (current == '$') { /* is a pragma? */
85 char *buff = luaI_buffer(MINBUFF+1);172 char buff[PRAGMASIZE+1];
86 int i = 0;173 int ifnot = 0;
174 int skip = ifstate[iflevel].skip;
87 next(); /* skip $ */175 next(); /* skip $ */
88 while (isalnum(current)) {176 readname(buff);
89 if (i >= MINBUFF) luaI_syntaxerror("pragma too long");177 switch (luaI_findstring(buff, pragmas)) {
90 buff[i++] = current;178 case 0: /* debug */
91 next();179 if (!skip) lua_debug = 1;
180 break;
181 case 1: /* nodebug */
182 if (!skip) lua_debug = 0;
183 break;
184 case 2: /* endinput */
185 if (!skip) {
186 current = EOZ;
187 iflevel = 0; /* to allow $endinput inside a $if */
188 }
189 break;
190 case 3: /* end */
191 if (iflevel-- == 0)
192 luaI_auxsyntaxerror("unmatched $endif");
193 break;
194 case 4: /* ifnot */
195 ifnot = 1;
196 /* go through */
197 case 5: /* if */
198 if (iflevel == MAX_IFS-1)
199 luaI_auxsyntaxerror("too many nested `$ifs'");
200 readname(buff);
201 iflevel++;
202 ifstate[iflevel].elsepart = 0;
203 ifstate[iflevel].condition = checkcond(buff) ? !ifnot : ifnot;
204 ifstate[iflevel].skip = skip || !ifstate[iflevel].condition;
205 break;
206 case 6: /* else */
207 if (ifstate[iflevel].elsepart)
208 luaI_auxsyntaxerror("unmatched $else");
209 ifstate[iflevel].elsepart = 1;
210 ifstate[iflevel].skip =
211 ifstate[iflevel-1].skip || ifstate[iflevel].condition;
212 break;
213 default:
214 luaI_auxsynterrbf("invalid pragma", buff);
92 }215 }
93 buff[i] = 0;216 skipspace();
94 if (strcmp(buff, "debug") == 0)217 if (current == '\n') /* pragma must end with a '\n' ... */
95 lua_debug = 1;218 inclinenumber();
96 else if (strcmp(buff, "nodebug") == 0)219 else if (current != EOZ) /* or eof */
97 lua_debug = 0;220 luaI_auxsyntaxerror("invalid pragma format");
98 else luaI_syntaxerror("invalid pragma");221 ifskip();
99 }222 }
100 return lua_linenumber;
101}223}
102 224
103static int read_long_string (char *yytext, int buffsize)225static int read_long_string (char *yytext, int buffsize)
@@ -110,7 +232,7 @@ static int read_long_string (char *yytext, int buffsize) · 6 unmodified lines
110 yytext = luaI_buffer(buffsize *= 2);232 yytext = luaI_buffer(buffsize *= 2);
111 switch (current)233 switch (current)
112 {234 {
113 case 0:235 case EOZ:
114 save(0);236 save(0);
115 return WRONGTOKEN;237 return WRONGTOKEN;
116 case '[':238 case '[':
@@ -131,8 +253,8 @@ static int read_long_string (char *yytext, int buffsize) · 14 unmodified lines
131 }253 }
132 continue;254 continue;
133 case '\n':255 case '\n':
134 save_and_next();256 save('\n');
135 inclinenumber(0);257 inclinenumber();
136 continue;258 continue;
137 default:259 default:
138 save_and_next();260 save_and_next();
@@ -162,8 +284,8 @@ int luaY_lex (void) · 23 unmodified lines
162 switch (current)284 switch (current)
163 {285 {
164 case '\n':286 case '\n':
165 next();287 inclinenumber();
166 linelasttoken = inclinenumber(1);288 linelasttoken = lua_linenumber;
167 continue;289 continue;
168 290
169 case ' ': case '\t': case '\r': /* CR: to avoid problems with DOS */291 case ' ': case '\t': case '\r': /* CR: to avoid problems with DOS */
@@ -173,7 +295,7 @@ int luaY_lex (void) · 3 unmodified lines
173 case '-':295 case '-':
174 save_and_next();296 save_and_next();
175 if (current != '-') return '-';297 if (current != '-') return '-';
176 do { next(); } while (current != '\n' && current != 0);298 do { next(); } while (current != '\n' && current != EOZ);
177 continue;299 continue;
178 300
179 case '[':301 case '[':
@@ -216,7 +338,7 @@ int luaY_lex (void) · 36 unmodified lines
216 yytext = luaI_buffer(buffsize *= 2);338 yytext = luaI_buffer(buffsize *= 2);
217 switch (current)339 switch (current)
218 {340 {
219 case 0:341 case EOZ:
220 case '\n':342 case '\n':
221 save(0);343 save(0);
222 return WRONGTOKEN;344 return WRONGTOKEN;
@@ -227,7 +349,7 @@ int luaY_lex (void) · 4 unmodified lines
227 case 'n': save('\n'); next(); break;349 case 'n': save('\n'); next(); break;
228 case 't': save('\t'); next(); break;350 case 't': save('\t'); next(); break;
229 case 'r': save('\r'); next(); break;351 case 'r': save('\r'); next(); break;
230 case '\n': save_and_next(); inclinenumber(0); break;352 case '\n': save('\n'); inclinenumber(); break;
231 default : save_and_next(); break;353 default : save_and_next(); break;
232 }354 }
233 break;355 break;
@@ -258,7 +380,9 @@ int luaY_lex (void) · 24 unmodified lines
258 case '_':380 case '_':
259 {381 {
260 TaggedString *ts;382 TaggedString *ts;
261 do { save_and_next(); } while (isalnum(current) || current == '_');383 do {
384 save_and_next();
385 } while (isalnum((unsigned char)current) || current == '_');
262 save(0);386 save(0);
263 ts = lua_createstring(yytext);387 ts = lua_createstring(yytext);
264 if (ts->marked > 2)388 if (ts->marked > 2)
@@ -280,7 +404,7 @@ int luaY_lex (void) · 15 unmodified lines
280 }404 }
281 else return CONC; /* .. */405 else return CONC; /* .. */
282 }406 }
283 else if (!isdigit(current)) return '.';407 else if (!isdigit((unsigned char)current)) return '.';
284 /* current is a digit: goes through to number */408 /* current is a digit: goes through to number */
285 a=0.0;409 a=0.0;
286 goto fraction;410 goto fraction;
@@ -291,7 +415,7 @@ int luaY_lex (void) · 4 unmodified lines
291 do {415 do {
292 a=10.0*a+(current-'0');416 a=10.0*a+(current-'0');
293 save_and_next();417 save_and_next();
294 } while (isdigit(current));418 } while (isdigit((unsigned char)current));
295 if (current == '.') {419 if (current == '.') {
296 save_and_next();420 save_and_next();
297 if (current == '.')421 if (current == '.')
@@ -300,7 +424,7 @@ int luaY_lex (void) · 2 unmodified lines
300 }424 }
301 fraction:425 fraction:
302 { double da=0.1;426 { double da=0.1;
303 while (isdigit(current))427 while (isdigit((unsigned char)current))
304 {428 {
305 a+=(current-'0')*da;429 a+=(current-'0')*da;
306 da/=10.0;430 da/=10.0;
@@ -314,11 +438,12 @@ int luaY_lex (void) · 7 unmodified lines
314 save_and_next();438 save_and_next();
315 neg=(current=='-');439 neg=(current=='-');
316 if (current == '+' || current == '-') save_and_next();440 if (current == '+' || current == '-') save_and_next();
317 if (!isdigit(current)) { save(0); return WRONGTOKEN; }441 if (!isdigit((unsigned char)current)) {
442 save(0); return WRONGTOKEN; }
318 do {443 do {
319 e=10.0*e+(current-'0');444 e=10.0*e+(current-'0');
320 save_and_next();445 save_and_next();
321 } while (isdigit(current));446 } while (isdigit((unsigned char)current));
322 for (ea=neg?0.1:10.0; e>0; e>>=1)447 for (ea=neg?0.1:10.0; e>0; e>>=1)
323 {448 {
324 if (e & 1) a*=ea;449 if (e & 1) a*=ea;
@@ -330,11 +455,15 @@ int luaY_lex (void) · 5 unmodified lines
330 return NUMBER;455 return NUMBER;
331 }456 }
332 457
333 default: /* also end of program (0) */458 case EOZ:
334 {459 save(0);
460 if (iflevel > 0)
461 luaI_syntaxerror("missing $endif");
462 return 0;
463
464 default:
335 save_and_next();465 save_and_next();
336 return yytext[0];466 return yytext[0];
337 }
338 }467 }
339 }468 }
340}469}
src/lex.h+3−4
@@ -1,16 +1,15 @@
1/*1/*
2** lex.h2** lex.h
3** TecCGraf - PUC-Rio3** TecCGraf - PUC-Rio
4** $Id: lex.h,v 1.3 1996/11/08 12:49:35 roberto Exp $4** $Id: lex.h,v 1.4 1997/06/16 16:50:22 roberto Exp $
5*/5*/
6 6
7#ifndef lex_h7#ifndef lex_h
8#define lex_h8#define lex_h
9 9
10#include "zio.h"
10 11
11typedef int (*Input) (void);12void lua_setinput (ZIO *z);
12
13void lua_setinput (Input fn);
14void luaI_syntaxerror (char *s);13void luaI_syntaxerror (char *s);
15int luaY_lex (void);14int luaY_lex (void);
16void luaI_addReserved (void);15void luaI_addReserved (void);
src/lua.stx+29−34
@@ -1,13 +1,13 @@
1%{1%{
2 2
3char *rcs_luastx = "$Id: lua.stx,v 3.41 1996/11/08 12:49:35 roberto Exp $";3char *rcs_luastx = "$Id: lua.stx,v 3.47 1997/06/19 17:46:12 roberto Exp $";
4 4
5#include <stdio.h>5#include <stdio.h>
6#include <stdlib.h>6#include <stdlib.h>
7#include <string.h>7#include <string.h>
8 8
9#include "luadebug.h"9#include "luadebug.h"
10#include "mem.h"10#include "luamem.h"
11#include "lex.h"11#include "lex.h"
12#include "opcode.h"12#include "opcode.h"
13#include "hash.h"13#include "hash.h"
@@ -50,8 +50,6 @@ static TaggedString *localvar[MAXLOCALS]; /* store local variable names */ · 36 unmodified lines
50static int nlocalvar=0; /* number of local variables */50static int nlocalvar=0; /* number of local variables */
51 51
52#define MAXFIELDS FIELDS_PER_FLUSH*252#define MAXFIELDS FIELDS_PER_FLUSH*2
53static Word fields[MAXFIELDS]; /* fieldnames to be flushed */
54static int nfields=0;
55 53
56int lua_debug = 0;54int lua_debug = 0;
57 55
@@ -103,22 +101,11 @@ static void code_word_at (Byte *p, int n) · 45 unmodified lines
103 memcpy(p, &w, sizeof(Word));101 memcpy(p, &w, sizeof(Word));
104}102}
105 103
106static void push_field (Word name)
107{
108 if (nfields < MAXFIELDS)
109 fields[nfields++] = name;
110 else
111 yyerror ("too many fields in nested constructors");
112}
113
114static void flush_record (int n)104static void flush_record (int n)
115{105{
116 int i;
117 if (n == 0) return;106 if (n == 0) return;
118 code_byte(STORERECORD);107 code_byte(STOREMAP);
119 code_byte(n);108 code_byte(n);
120 for (i=0; i<n; i++)
121 code_word(fields[--nfields]);
122}109}
123 110
124static void flush_list (int m, int n)111static void flush_list (int m, int n)
@@ -161,11 +148,22 @@ static void add_varbuffer (Long var) · 36 unmodified lines
161 yyerror ("variable buffer overflow");148 yyerror ("variable buffer overflow");
162}149}
163 150
151static void code_string (Word w)
152{
153 code_byte(PUSHSTRING);
154 code_word(w);
155}
156
157static void code_constant (TaggedString *s)
158{
159 code_string(luaI_findconstant(s));
160}
161
164static void code_number (float f)162static void code_number (float f)
165{ 163{
166 Word i = (Word)f;164 Word i;
167 if (f == (float)i) /* f has an (short) integer value */165 if (f >= 0 && f <= (float)MAX_WORD && (float)(i=(Word)f) == f) {
168 {166 /* f has an (short) integer value */
169 if (i <= 2) code_byte(PUSH0 + i);167 if (i <= 2) code_byte(PUSH0 + i);
170 else if (i <= 255)168 else if (i <= 255)
171 {169 {
@@ -459,7 +457,7 @@ void lua_parse (TFunc *tf) · 287 unmodified lines
459 457
460%% /* beginning of rules section */458%% /* beginning of rules section */
461 459
462chunk : chunklist ret460chunk : chunklist ret ;
463 461
464chunklist : /* empty */462chunklist : /* empty */
465 | chunklist stat sc463 | chunklist stat sc
@@ -477,8 +475,7 @@ function : FUNCTION funcname body · 11 unmodified lines
477funcname : var { $$ =$1; init_func(); }475funcname : var { $$ =$1; init_func(); }
478 | varexp ':' NAME476 | varexp ':' NAME
479 {477 {
480 code_byte(PUSHSTRING);478 code_constant($3);
481 code_word(luaI_findconstant($3));
482 $$ = 0; /* indexed variable */479 $$ = 0; /* indexed variable */
483 init_func();480 init_func();
484 add_localvar(luaI_createfixedstring("self"));481 add_localvar(luaI_createfixedstring("self"));
@@ -492,7 +489,6 @@ body : '(' parlist ')' block END · 7 unmodified lines
492 luaI_initTFunc($$);489 luaI_initTFunc($$);
493 $$->size = pc;490 $$->size = pc;
494 $$->code = newvector(pc, Byte);491 $$->code = newvector(pc, Byte);
495 $$->fileName = lua_parsedfile;
496 $$->lineDefined = $2;492 $$->lineDefined = $2;
497 memcpy($$->code, basepc, pc*sizeof(Byte));493 memcpy($$->code, basepc, pc*sizeof(Byte));
498 if (lua_debug)494 if (lua_debug)
@@ -540,7 +536,7 @@ stat : IF expr1 THEN PrepJump block PrepJump elsepart END · 41 unmodified lines
540 lua_codeadjust (0);536 lua_codeadjust (0);
541 }537 }
542 } 538 }
543 | functioncall539 | functioncall {;}
544 | LOCAL localdeclist decinit540 | LOCAL localdeclist decinit
545 { nlocalvar += $2;541 { nlocalvar += $2;
546 adjust_mult_assign($2, $3, 0);542 adjust_mult_assign($2, $3, 0);
@@ -605,9 +601,8 @@ expr : '(' expr ')' { $$ = $2; } · 58 unmodified lines
605 | NUMBER { code_number($1); $$ = 0; }601 | NUMBER { code_number($1); $$ = 0; }
606 | STRING602 | STRING
607 {603 {
608 code_byte(PUSHSTRING);604 code_string($1);
609 code_word($1);605 $$ = 0;
610 $$ = 0;
611 }606 }
612 | NIL {code_byte(PUSHNIL); $$ = 0; }607 | NIL {code_byte(PUSHNIL); $$ = 0; }
613 | functioncall { $$ = $1; }608 | functioncall { $$ = $1; }
@@ -723,12 +718,13 @@ ffieldlist1 : ffield {$$=1;} · 109 unmodified lines
723 }718 }
724 ; 719 ;
725 720
726ffield : NAME '=' expr1 721ffield : ffieldkey '=' expr1
727 {
728 push_field(luaI_findconstant($1));
729 }
730 ;722 ;
731 723
724ffieldkey : '[' expr1 ']'
725 | NAME { code_constant($1); }
726 ;
727
732lfieldlist : /* empty */ { $$ = 0; }728lfieldlist : /* empty */ { $$ = 0; }
733 | lfieldlist1 lastcomma { $$ = $1; }729 | lfieldlist1 lastcomma { $$ = $1; }
734 ;730 ;
@@ -762,9 +758,8 @@ var : singlevar { $$ = $1; } · 27 unmodified lines
762 }758 }
763 | varexp '.' NAME759 | varexp '.' NAME
764 {760 {
765 code_byte(PUSHSTRING);761 code_constant($3);
766 code_word(luaI_findconstant($3));762 $$ = 0; /* indexed variable */
767 $$ = 0; /* indexed variable */
768 }763 }
769 ;764 ;
770 765
src/luac/dump.c+11−19
@@ -3,15 +3,13 @@ · 2 unmodified lines
3** thread and save bytecodes to file3** thread and save bytecodes to file
4*/4*/
5 5
6char* rcs_dump="$Id: dump.c,v 1.17 1996/11/18 11:18:29 lhf Exp $";6char* rcs_dump="$Id: dump.c,v 1.20 1997/06/19 14:56:04 lhf Exp $";
7 7
8#include <stdio.h>8#include <stdio.h>
9#include <stdlib.h>9#include <stdlib.h>
10#include <string.h>10#include <string.h>
11#include "luac.h"11#include "luac.h"
12 12
13static TFunc* lastF=NULL; /* list of functions seen in code */
14
15static int SawVar(int i, int at)13static int SawVar(int i, int at)
16{14{
17 int old=VarLoc(i);15 int old=VarLoc(i);
@@ -34,7 +32,7 @@ static void ThreadCode(Byte* code, Byte* end) · 16 unmodified lines
34 for (i=0; i<lua_nconstant; i++) StrLoc(i)=0;32 for (i=0; i<lua_nconstant; i++) StrLoc(i)=0;
35 for (p=code; p!=end;)33 for (p=code; p!=end;)
36 {34 {
37 OpCode op=(OpCode)*p;35 int op=*p;
38 int at=p-code+1;36 int at=p-code+1;
39 switch (op)37 switch (op)
40 {38 {
@@ -89,6 +87,8 @@ static void ThreadCode(Byte* code, Byte* end) · 48 unmodified lines
89 case STORELIST0:87 case STORELIST0:
90 case ADJUST:88 case ADJUST:
91 case RETCODE:89 case RETCODE:
90 case VARARGS:
91 case STOREMAP:
92 p+=2;92 p+=2;
93 break;93 break;
94 case PUSHWORD:94 case PUSHWORD:
@@ -107,8 +107,11 @@ static void ThreadCode(Byte* code, Byte* end) · 12 unmodified lines
107 case PUSHFLOAT:107 case PUSHFLOAT:
108 p+=5; /* assumes sizeof(float)==4 */108 p+=5; /* assumes sizeof(float)==4 */
109 break;109 break;
110 case PUSHSELF:110 case PUSHFUNCTION:
111 p+=sizeof(TFunc*)+1;
112 break;
111 case PUSHSTRING:113 case PUSHSTRING:
114 case PUSHSELF:
112 {115 {
113 Word w;116 Word w;
114 p++;117 p++;
@@ -117,16 +120,6 @@ static void ThreadCode(Byte* code, Byte* end) · 2 unmodified lines
117 memcpy(p-2,&w,sizeof(w));120 memcpy(p-2,&w,sizeof(w));
118 break;121 break;
119 }122 }
120 case PUSHFUNCTION:
121 {
122 TFunc* tf;
123 p++;
124 get_code(tf,p);
125 tf->marked=at;
126 tf->next=NULL; /* TODO: remove? */
127 lastF=lastF->next=tf;
128 break;
129 }
130 case PUSHGLOBAL:123 case PUSHGLOBAL:
131 case STOREGLOBAL:124 case STOREGLOBAL:
132 {125 {
@@ -151,8 +144,8 @@ static void ThreadCode(Byte* code, Byte* end) · 18 unmodified lines
151 }144 }
152 break;145 break;
153 }146 }
154 default:147 default: /* cannot happen */
155 fprintf(stderr,"luac: cannot happen: opcode=%d",*p);148 fprintf(stderr,"luac: bad opcode %d at %d\n",*p,(int)(p-code));
156 exit(1);149 exit(1);
157 break;150 break;
158 }151 }
@@ -186,7 +179,7 @@ static void DumpString(char* s, FILE* D) · 27 unmodified lines
186 int n=strlen(s)+1;179 int n=strlen(s)+1;
187 if ((Word)n != n)180 if ((Word)n != n)
188 {181 {
189 fprintf(stderr,"luac: string too long: \"%.32s...\"\n",s);182 fprintf(stderr,"luac: string too long (%d bytes): \"%.32s...\"\n",n,s);
190 exit(1);183 exit(1);
191 }184 }
192 DumpWord(n,D);185 DumpWord(n,D);
@@ -220,7 +213,6 @@ static void DumpStrings(FILE* D) · 27 unmodified lines
220 213
221void DumpFunction(TFunc* tf, FILE* D)214void DumpFunction(TFunc* tf, FILE* D)
222{215{
223 lastF=tf;
224 ThreadCode(tf->code,tf->code+tf->size);216 ThreadCode(tf->code,tf->code+tf->size);
225 fputc(ID_FUN,D);217 fputc(ID_FUN,D);
226 DumpSize(tf->size,D);218 DumpSize(tf->size,D);
src/luac/luac.c+112−27
@@ -1,25 +1,39 @@
1/*1/*
2** luac.c2** luac.c
3** lua compiler (saves bytecodes to files)3** lua compiler (saves bytecodes to files; also list binary files)
4*/4*/
5 5
6char* rcs_luac="$Id: luac.c,v 1.18 1996/11/16 20:14:23 lhf Exp $";6char* rcs_luac="$Id: luac.c,v 1.23 1997/06/20 20:34:04 lhf Exp $";
7 7
8#include <stdio.h>8#include <stdio.h>
9#include <stdlib.h>9#include <stdlib.h>
10#include <string.h>10#include <string.h>
11#include "luac.h"11#include "luac.h"
12#include "lex.h"
13#include "zio.h"
12 14
13static void compile(char* filename);15static void compile(char* filename);
16static void undump(char* filename);
14 17
15static int listing=0; /* list bytecodes? */18static int listing=0; /* list bytecodes? */
16static int dumping=1; /* dump bytecodes? */19static int dumping=1; /* dump bytecodes? */
20static int undumping=0; /* undump bytecodes? */
17static FILE* D; /* output file */21static FILE* D; /* output file */
18 22
19static void usage(void)23static void usage(void)
20{24{
21 fprintf(stderr,"usage: luac [-dlpv] [-o output] file ...\n");25 fprintf(stderr,
22 exit(0);26 "usage: luac [-c | -u] [-d] [-l] [-p] [-q] [-v] [-o output] file ...\n"
27 " -c\tcompile (default)\n"
28 " -u\tundump\n"
29 " -d\tgenerate debugging information\n"
30 " -l\tlist (default for -u)\n"
31 " -o\toutput file for -c (default \"luac.out\")\n"
32 " -p\tparse only\n"
33 " -q\tquiet (default for -c)\n"
34 " -v\tshow version information\n"
35 );
36 exit(1);
23}37}
24 38
25#define IS(s) (strcmp(argv[i],s)==0)39#define IS(s) (strcmp(argv[i],s)==0)
@@ -34,6 +48,11 @@ int main(int argc, char* argv[]) · 8 unmodified lines
34 break;48 break;
35 else if (IS("-")) /* use stdin */49 else if (IS("-")) /* use stdin */
36 break;50 break;
51 else if (IS("-c")) /* compile (and dump) */
52 {
53 dumping=1;
54 undumping=0;
55 }
37 else if (IS("-d")) /* debug */56 else if (IS("-d")) /* debug */
38 lua_debug=1;57 lua_debug=1;
39 else if (IS("-l")) /* list */58 else if (IS("-l")) /* list */
@@ -42,6 +61,14 @@ int main(int argc, char* argv[]) · 2 unmodified lines
42 d=argv[++i];61 d=argv[++i];
43 else if (IS("-p")) /* parse only (for timing purposes) */62 else if (IS("-p")) /* parse only (for timing purposes) */
44 dumping=0;63 dumping=0;
64 else if (IS("-q")) /* quiet */
65 listing=0;
66 else if (IS("-u")) /* undump */
67 {
68 dumping=0;
69 undumping=1;
70 listing=1;
71 }
45 else if (IS("-v")) /* show version */72 else if (IS("-v")) /* show version */
46 printf("%s %s\n(written by %s)\n\n",LUA_VERSION,LUA_COPYRIGHT,LUA_AUTHORS);73 printf("%s %s\n(written by %s)\n\n",LUA_VERSION,LUA_COPYRIGHT,LUA_AUTHORS);
47 else /* unknown option */74 else /* unknown option */
@@ -50,56 +77,114 @@ int main(int argc, char* argv[]) · 2 unmodified lines
50 --i; /* fake new argv[0] */77 --i; /* fake new argv[0] */
51 argc-=i;78 argc-=i;
52 argv+=i;79 argv+=i;
53 if (argc<2) usage();80 if (dumping)
54 for (i=1; i<argc; i++)81 {
55 if (IS(d))82 if (argc<2) usage();
83 for (i=1; i<argc; i++) /* play safe with output file */
84 if (IS(d))
85 {
86 fprintf(stderr,"luac: will not overwrite input file \"%s\"\n",d);
87 exit(1);
88 }
89 D=fopen(d,"wb"); /* must open in binary mode */
90 if (D==NULL)
56 {91 {
57 fprintf(stderr,"luac: will not overwrite input file \"%s\"\n",d);92 fprintf(stderr,"luac: cannot open ");
93 perror(d);
58 exit(1);94 exit(1);
59 }95 }
60 D=(dumping) ? fopen(d,"wb") : stdout; /* must open in binary mode */96 for (i=1; i<argc; i++) compile(IS("-")? NULL : argv[i]);
61 if (D==NULL)97 fclose(D);
98 }
99 if (undumping)
62 {100 {
63 fprintf(stderr,"luac: cannot open ");101 if (argc<2)
64 perror(d);102 undump("luac.out");
65 exit(1);103 else
104 for (i=1; i<argc; i++) undump(IS("-")? NULL : argv[i]);
66 }105 }
67 for (i=1; i<argc; i++) compile(IS("-")? NULL : argv[i]);
68 fclose(D);
69 return 0;106 return 0;
70}107}
71 108
72static void do_dump(TFunc* tf) /* only for tf==main */109static void do_dump(TFunc* Main)
73{110{
74 if (dumping) DumpHeader(D);111 TFunc* tf;
75 while (tf!=NULL)112 LinkFunctions(Main);
113 if (listing)
114 {
115 for (tf=Main; tf!=NULL; tf=tf->next) PrintFunction(tf,Main);
116 }
117 if (dumping)
76 {118 {
77 TFunc* nf;119 DumpHeader(D);
78 if (listing) PrintFunction(tf);120 for (tf=Main; tf!=NULL; tf=tf->next) DumpFunction(tf,D);
79 if (dumping) DumpFunction(tf,D);121 }
80 nf=tf->next; /* list only built after first main */122 for (tf=Main; tf!=NULL; )
123 {
124 TFunc* nf=tf->next;
81 luaI_freefunc(tf);125 luaI_freefunc(tf);
82 tf=nf;126 tf=nf;
83 }127 }
84}128}
85 129
86static void do_compile(void)130static void do_compile(ZIO* z)
87{131{
88 TFunc* tf=new(TFunc);132 TFunc* tf=new(TFunc);
133 lua_setinput(z);
89 luaI_initTFunc(tf);134 luaI_initTFunc(tf);
90 tf->fileName = lua_parsedfile;135 tf->fileName=lua_parsedfile;
91 lua_parse(tf);136 lua_parse(tf);
92 do_dump(tf);137 do_dump(tf);
93}138}
94 139
95static void compile(char* filename)140static void compile(char* filename)
96{141{
97 if (lua_openfile(filename)==NULL)142 FILE* f= (filename==NULL) ? stdin : fopen(filename, "r");
143 if (f==NULL)
144 {
145 fprintf(stderr,"luac: cannot open ");
146 perror(filename);
147 exit(1);
148 }
149 else
150 {
151 ZIO z;
152 zFopen(&z,f);
153 luaI_setparsedfile(filename?filename:"(stdin)");
154 do_compile(&z);
155 fclose(f);
156 }
157}
158
159static void do_undump(ZIO* z)
160{
161 TFunc* Main;
162 while ((Main=luaI_undump1(z)))
163 {
164 if (listing)
165 {
166 TFunc* tf;
167 for (tf=Main; tf!=NULL; tf=tf->next)
168 PrintFunction(tf,Main);
169 }
170 luaI_freefunc(Main); /* TODO: free others */
171 }
172}
173
174static void undump(char* filename)
175{
176 FILE* f= (filename==NULL) ? stdin : fopen(filename, "rb");
177 if (f==NULL)
98 {178 {
99 fprintf(stderr,"luac: cannot open ");179 fprintf(stderr,"luac: cannot open ");
100 perror(filename);180 perror(filename);
101 exit(1);181 exit(1);
102 }182 }
103 do_compile();183 else
104 lua_closefile();184 {
185 ZIO z;
186 zFopen(&z,f);
187 do_undump(&z);
188 fclose(f);
189 }
105}190}
src/luac/luac.h+6−5
@@ -1,24 +1,25 @@
1/*1/*
2** luac.h2** luac.h
3** definitions for luac compiler3** definitions for luac compiler
4** $Id: luac.h,v 1.5 1996/03/08 21:41:47 lhf Exp $4** $Id: luac.h,v 1.8 1997/06/19 17:32:08 lhf Exp $
5*/5*/
6 6
7#include "inout.h"7#include "inout.h"
8#include "mem.h"8#include "luamem.h"
9#include "opcode.h"9#include "opcode.h"
10#include "table.h"10#include "table.h"
11#include "undump.h"11#include "undump.h"
12 12
13#define VarStr(i) (lua_table[i].varname->str)13#define VarStr(i) (lua_table[i].varname->str)
14#define VarLoc(i) (lua_table[i].varname->varindex)14#define VarLoc(i) (lua_table[i].varname->u.s.varindex)
15#define StrStr(i) (lua_constant[i]->str)15#define StrStr(i) (lua_constant[i]->str)
16#define StrLoc(i) (lua_constant[i]->constindex)16#define StrLoc(i) (lua_constant[i]->u.s.constindex)
17 17
18extern Word lua_ntable;18extern Word lua_ntable;
19extern Word lua_nconstant;19extern Word lua_nconstant;
20extern int lua_debug;20extern int lua_debug;
21 21
22void LinkFunctions(TFunc* tf);
23void PrintFunction(TFunc* tf, TFunc* Main);
22void DumpHeader(FILE* D);24void DumpHeader(FILE* D);
23void DumpFunction(TFunc* tf, FILE* D);25void DumpFunction(TFunc* tf, FILE* D);
24void PrintFunction(TFunc* tf);
src/luac/print.c+213−20
@@ -3,7 +3,7 @@ · 2 unmodified lines
3** print bytecodes3** print bytecodes
4*/4*/
5 5
6char* rcs_print="$Id: print.c,v 1.11 1996/11/18 11:24:16 lhf Exp $";6char* rcs_print="$Id: print.c,v 1.17 1997/06/25 17:07:28 lhf Exp $";
7 7
8#include <stdio.h>8#include <stdio.h>
9#include <stdlib.h>9#include <stdlib.h>
@@ -11,20 +11,134 @@ char* rcs_print="$Id: print.c,v 1.11 1996/11/18 11:24:16 lhf Exp $"; · 1 unmodified line
11#include "luac.h"11#include "luac.h"
12#include "print.h"12#include "print.h"
13 13
14static LocVar* V=NULL;14void LinkFunctions(TFunc* m)
15
16static char* LocStr(int i)
17{15{
18 if (V==NULL) return ""; else return V[i].varname->str;16 static TFunc* lastF; /* list of functions seen in code */
17 Byte* code=m->code;
18 Byte* end=code+m->size;
19 Byte* p;
20 if (IsMain(m)) lastF=m;
21 for (p=code; p!=end;)
22 {
23 int op=*p;
24 int at=p-code+1;
25 switch (op)
26 {
27 case PUSHNIL:
28 case PUSH0:
29 case PUSH1:
30 case PUSH2:
31 case PUSHLOCAL0:
32 case PUSHLOCAL1:
33 case PUSHLOCAL2:
34 case PUSHLOCAL3:
35 case PUSHLOCAL4:
36 case PUSHLOCAL5:
37 case PUSHLOCAL6:
38 case PUSHLOCAL7:
39 case PUSHLOCAL8:
40 case PUSHLOCAL9:
41 case PUSHINDEXED:
42 case STORELOCAL0:
43 case STORELOCAL1:
44 case STORELOCAL2:
45 case STORELOCAL3:
46 case STORELOCAL4:
47 case STORELOCAL5:
48 case STORELOCAL6:
49 case STORELOCAL7:
50 case STORELOCAL8:
51 case STORELOCAL9:
52 case STOREINDEXED0:
53 case ADJUST0:
54 case EQOP:
55 case LTOP:
56 case LEOP:
57 case GTOP:
58 case GEOP:
59 case ADDOP:
60 case SUBOP:
61 case MULTOP:
62 case DIVOP:
63 case POWOP:
64 case CONCOP:
65 case MINUSOP:
66 case NOTOP:
67 case POP:
68 case RETCODE0:
69 p++;
70 break;
71 case PUSHBYTE:
72 case PUSHLOCAL:
73 case STORELOCAL:
74 case STOREINDEXED:
75 case STORELIST0:
76 case ADJUST:
77 case RETCODE:
78 case VARARGS:
79 case STOREMAP:
80 p+=2;
81 break;
82 case PUSHWORD:
83 case PUSHSTRING:
84 case PUSHGLOBAL:
85 case PUSHSELF:
86 case STOREGLOBAL:
87 case CREATEARRAY:
88 case ONTJMP:
89 case ONFJMP:
90 case JMP:
91 case UPJMP:
92 case IFFJMP:
93 case IFFUPJMP:
94 case CALLFUNC:
95 case SETLINE:
96 case STORELIST:
97 p+=3;
98 break;
99 case PUSHFLOAT:
100 p+=5; /* assumes sizeof(float)==4 */
101 break;
102 case PUSHFUNCTION:
103 {
104 TFunc* tf;
105 p++;
106 get_code(tf,p);
107 tf->marked=at;
108 tf->next=NULL; /* TODO: remove? */
109 lastF=lastF->next=tf;
110 break;
111 }
112 case STORERECORD:
113 {
114 int n=*++p;
115 p+=2*n+1;
116 break;
117 }
118 default: /* cannot happen */
119 fprintf(stderr,"luac: bad opcode %d at %d\n",*p,(int)(p-code));
120 exit(1);
121 break;
122 }
123 }
19}124}
20 125
21static void PrintCode(Byte* code, Byte* end)126#define LocStr(i) luaI_getlocalname(tf,i+1,line)
127
128static void PrintCode(TFunc* tf)
22{129{
130 Byte* code=tf->code;
131 Byte* end=code+tf->size;
23 Byte* p;132 Byte* p;
133 int line=0;
24 for (p=code; p!=end;)134 for (p=code; p!=end;)
25 {135 {
26 OpCode op=(OpCode)*p;136 int op=*p;
27 if (op>SETLINE) op=SETLINE+1;137 if (op>=NOPCODES)
138 {
139 fprintf(stderr,"luac: bad opcode %d at %d\n",op,(int)(p-code));
140 exit(1);
141 }
28 printf("%6d\t%s",(int)(p-code),OpCodeName[op]);142 printf("%6d\t%s",(int)(p-code),OpCodeName[op]);
29 switch (op)143 switch (op)
30 {144 {
@@ -64,7 +178,7 @@ static void PrintCode(Byte* code, Byte* end) · 33 unmodified lines
64 case PUSHLOCAL9:178 case PUSHLOCAL9:
65 {179 {
66 int i=op-PUSHLOCAL0;180 int i=op-PUSHLOCAL0;
67 printf("\t%d\t; %s",i,LocStr(i));181 if (tf->locvars) printf("\t\t; %s",LocStr(i));
68 p++;182 p++;
69 break;183 break;
70 }184 }
@@ -80,7 +194,7 @@ static void PrintCode(Byte* code, Byte* end) · 9 unmodified lines
80 case STORELOCAL9:194 case STORELOCAL9:
81 {195 {
82 int i=op-STORELOCAL0;196 int i=op-STORELOCAL0;
83 printf("\t%d\t; %s",i,LocStr(i));197 if (tf->locvars) printf("\t\t; %s",LocStr(i));
84 p++;198 p++;
85 break;199 break;
86 }200 }
@@ -88,7 +202,7 @@ static void PrintCode(Byte* code, Byte* end) · 1 unmodified line
88 case STORELOCAL:202 case STORELOCAL:
89 {203 {
90 int i=*(p+1);204 int i=*(p+1);
91 printf("\t%d\t; %s",i,LocStr(i));205 if (tf->locvars) printf("\t%d\t; %s",i,LocStr(i));
92 p+=2;206 p+=2;
93 break;207 break;
94 }208 }
@@ -97,23 +211,40 @@ static void PrintCode(Byte* code, Byte* end) · 2 unmodified lines
97 case STORELIST0:211 case STORELIST0:
98 case ADJUST:212 case ADJUST:
99 case RETCODE:213 case RETCODE:
214 case VARARGS:
215 case STOREMAP:
100 printf("\t%d",*(p+1));216 printf("\t%d",*(p+1));
101 p+=2;217 p+=2;
102 break;218 break;
103 case PUSHWORD:219 case PUSHWORD:
104 case CREATEARRAY:220 case CREATEARRAY:
221 case SETLINE:
222 {
223 Word w;
224 p++;
225 get_word(w,p);
226 printf("\t%d",w);
227 if (op==SETLINE) line=w;
228 break;
229 }
105 case ONTJMP:230 case ONTJMP:
106 case ONFJMP:231 case ONFJMP:
107 case JMP:232 case JMP:
108 case UPJMP:
109 case IFFJMP:233 case IFFJMP:
234 { /* suggested by Norman Ramsey <nr@cs.virginia.edu> */
235 Word w;
236 p++;
237 get_word(w,p);
238 printf("\t%d\t\t; to %d",w,(int)(p-code)+w);
239 break;
240 }
241 case UPJMP:
110 case IFFUPJMP:242 case IFFUPJMP:
111 case SETLINE:243 { /* suggested by Norman Ramsey <nr@cs.virginia.edu> */
112 {
113 Word w;244 Word w;
114 p++;245 p++;
115 get_word(w,p);246 get_word(w,p);
116 printf("\t%d",w);247 printf("\t%d\t\t; to %d",w,(int)(p-code)-w);
117 break;248 break;
118 }249 }
119 case PUSHFLOAT:250 case PUSHFLOAT:
@@ -170,7 +301,8 @@ static void PrintCode(Byte* code, Byte* end) · 50 unmodified lines
170 break;301 break;
171 }302 }
172 default:303 default:
173 printf("\tcannot happen: opcode=%d",*p);304 printf("\tcannot happen: opcode=%d\n",*p);
305 fprintf(stderr,"luac: bad opcode %d at %d\n",op,(int)(p-code));
174 exit(1);306 exit(1);
175 break;307 break;
176 }308 }
@@ -178,13 +310,74 @@ static void PrintCode(Byte* code, Byte* end) · 1 unmodified line
178 }310 }
179}311}
180 312
181void PrintFunction(TFunc* tf)313#undef LocStr
314
315static void PrintLocals(LocVar* v, int n)
182{316{
317 int i=0;
318 if (v==NULL || v->varname==NULL) return;
319 if (n>0)
320 {
321 printf("parameters:");
322 for (i=0; i<n; v++,i++) printf(" %s[%d@%d]",v->varname->str,i,v->line);
323 printf("\n");
324 }
325 if (v->varname!=NULL)
326 {
327 printf("locals:");
328 for (; v->line>=0; v++)
329 {
330 if (v->varname==NULL)
331#if 0
332 printf(" %s[%d@%d]","*",--i,v->line);
333#else
334 --i;
335#endif
336 else
337 printf(" %s[%d@%d]",v->varname->str,i++,v->line);
338 }
339 printf("\n");
340 }
341}
342
343void PrintFunction(TFunc* tf, TFunc* Main)
344{
345 int n=0;
183 if (IsMain(tf))346 if (IsMain(tf))
184 printf("\nmain of \"%s\" (%d bytes at %p)\n",tf->fileName,tf->size,tf);347 printf("\nmain of \"%s\" (%d bytes at %p)\n",tf->fileName,tf->size,tf);
185 else348 else
186 printf("\nfunction \"%s\":%d (%d bytes at %p); used at main+%d\n",349 {
350 Byte* p;
351 p=tf->code; /* get number of parameters */
352 while (*p==SETLINE) p+=3;
353 if (*p==ADJUST) n=p[1];
354 p=Main->code+tf->marked+sizeof(TFunc*);
355 printf("\nfunction ");
356 switch (*p) /* try to get name */
357 {
358 case STOREGLOBAL:
359 {
360 Word w;
361 p++; get_word(w,p); printf("%s defined at ",VarStr(w));
362 break;
363 }
364 case STOREINDEXED0: /* try method definition */
365 {
366 if (p[-11]==PUSHGLOBAL && p[-8]==PUSHSTRING)
367 {
368 Word w;
369 Byte* op=p;
370 int c=(tf->locvars && n>0 && strcmp(tf->locvars->varname->str,"self")==0)
371 ? ':' : '.';
372 p=op-11; p++; get_word(w,p); printf("%s%c",VarStr(w),c);
373 p=op-8; p++; get_word(w,p); printf("%s defined at ",StrStr(w));
374 }
375 break;
376 }
377 }
378 printf("\"%s\":%d (%d bytes at %p); used at main+%d\n",
187 tf->fileName,tf->lineDefined,tf->size,tf,tf->marked);379 tf->fileName,tf->lineDefined,tf->size,tf,tf->marked);
188 V=tf->locvars;380 }
189 PrintCode(tf->code,tf->code+tf->size);381 PrintLocals(tf->locvars,n);
382 PrintCode(tf);
190}383}
src/luac/print.h+6−3
@@ -1,10 +1,10 @@
1/*1/*
2** print.h2** print.h
3** opcode names3** opcode names
4** $Id: print.h,v 1.1 1996/02/23 19:04:13 lhf Exp $4** $Id: print.h,v 1.3 1997/04/14 14:42:50 lhf Exp $
5*/5*/
6 6
7static char* OpCodeName[]={ /* attention: same order as enum in opcode.h */7static char* OpCodeName[]={ /* ATTENTION: same order as enum in opcode.h */
8 "PUSHNIL",8 "PUSHNIL",
9 "PUSH0",9 "PUSH0",
10 "PUSH1",10 "PUSH1",
@@ -72,5 +72,8 @@ static char* OpCodeName[]={ /* attention: same order as enum in opcode.h */ · 61 unmodified lines
72 "RETCODE0",72 "RETCODE0",
73 "RETCODE",73 "RETCODE",
74 "SETLINE",74 "SETLINE",
75 ""75 "VARARGS",
76 "STOREMAP"
76};77};
78
79#define NOPCODES (sizeof(OpCodeName)/sizeof(OpCodeName[0]))
src/luamem.c+159−0
@@ -0,0 +1,159 @@
1/*
2** mem.c
3** TecCGraf - PUC-Rio
4*/
5
6char *rcs_luamem = "$Id: luamem.c,v 1.16 1997/04/01 21:23:20 roberto Exp $";
7
8#include <stdlib.h>
9
10#include "luamem.h"
11#include "lua.h"
12
13
14#define DEBUG 0
15
16#if !DEBUG
17
18void luaI_free (void *block)
19{
20 if (block)
21 {
22 *((char *)block) = -1; /* to catch errors */
23 free(block);
24 }
25}
26
27
28void *luaI_realloc (void *oldblock, unsigned long size)
29{
30 void *block;
31 size_t s = (size_t)size;
32 if (s != size)
33 lua_error("Allocation Error: Block too big");
34 block = oldblock ? realloc(oldblock, s) : malloc(s);
35 if (block == NULL)
36 lua_error(memEM);
37 return block;
38}
39
40
41int luaI_growvector (void **block, unsigned long nelems, int size,
42 char *errormsg, unsigned long limit)
43{
44 if (nelems >= limit)
45 lua_error(errormsg);
46 nelems = (nelems == 0) ? 20 : nelems*2;
47 if (nelems > limit)
48 nelems = limit;
49 *block = luaI_realloc(*block, nelems*size);
50 return (int)nelems;
51}
52
53
54void* luaI_buffer (unsigned long size)
55{
56 static unsigned long buffsize = 0;
57 static char* buffer = NULL;
58 if (size > buffsize)
59 buffer = luaI_realloc(buffer, buffsize=size);
60 return buffer;
61}
62
63#else
64/* DEBUG */
65
66#include <stdio.h>
67
68# define assert(ex) {if (!(ex)){(void)fprintf(stderr, \
69 "Assertion failed: file \"%s\", line %d\n", __FILE__, __LINE__);exit(1);}}
70
71#define MARK 55
72
73static unsigned long numblocks = 0;
74static unsigned long totalmem = 0;
75
76
77static void message (void)
78{
79#define inrange(x,y) ((x) < (((y)*3)/2) && (x) > (((y)*2)/3))
80 static int count = 0;
81 static unsigned long lastnumblocks = 0;
82 static unsigned long lasttotalmem = 0;
83 if (!inrange(numblocks, lastnumblocks) || !inrange(totalmem, lasttotalmem)
84 || count++ >= 5000)
85 {
86 fprintf(stderr,"blocks = %lu mem = %luK\n", numblocks, totalmem/1000);
87 count = 0;
88 lastnumblocks = numblocks;
89 lasttotalmem = totalmem;
90 }
91}
92
93
94void luaI_free (void *block)
95{
96 if (block)
97 {
98 unsigned long *b = (unsigned long *)block - 1;
99 unsigned long size = *b;
100 assert(*(((char *)b)+size+sizeof(unsigned long)) == MARK);
101 numblocks--;
102 totalmem -= size;
103 free(b);
104 message();
105 }
106}
107
108
109void *luaI_realloc (void *oldblock, unsigned long size)
110{
111 unsigned long *block;
112 unsigned long realsize = sizeof(unsigned long)+size+sizeof(char);
113 if (realsize != (size_t)realsize)
114 lua_error("Allocation Error: Block too big");
115 if (oldblock)
116 {
117 unsigned long *b = (unsigned long *)oldblock - 1;
118 unsigned long oldsize = *b;
119 assert(*(((char *)b)+oldsize+sizeof(unsigned long)) == MARK);
120 totalmem -= oldsize;
121 numblocks--;
122 block = (unsigned long *)realloc(b, realsize);
123 }
124 else
125 block = (unsigned long *)malloc(realsize);
126 if (block == NULL)
127 lua_error("not enough memory");
128 totalmem += size;
129 numblocks++;
130 *block = size;
131 *(((char *)block)+size+sizeof(unsigned long)) = MARK;
132 message();
133 return block+1;
134}
135
136
137int luaI_growvector (void **block, unsigned long nelems, int size,
138 char *errormsg, unsigned long limit)
139{
140 if (nelems >= limit)
141 lua_error(errormsg);
142 nelems = (nelems == 0) ? 20 : nelems*2;
143 if (nelems > limit)
144 nelems = limit;
145 *block = luaI_realloc(*block, nelems*size);
146 return (int)nelems;
147}
148
149
150void* luaI_buffer (unsigned long size)
151{
152 static unsigned long buffsize = 0;
153 static char* buffer = NULL;
154 if (size > buffsize)
155 buffer = luaI_realloc(buffer, buffsize=size);
156 return buffer;
157}
158
159#endif
src/luamem.hrenamed from src/mem.h+3−3
@@ -1,11 +1,11 @@
1/*1/*
2** mem.c2** mem.c
3** memory manager for lua3** memory manager for lua
4** $Id: mem.h,v 1.8 1996/05/24 14:31:10 roberto Exp $4** $Id: luamem.h,v 1.9 1997/03/31 14:10:11 roberto Exp $
5*/5*/
6 6
7#ifndef mem_h7#ifndef luamem_h
8#define mem_h8#define luamem_h
9 9
10#ifndef NULL10#ifndef NULL
11#define NULL 011#define NULL 0
src/mem.c+0−58
@@ -1,58 +0,0 @@
1/*
2** mem.c
3** TecCGraf - PUC-Rio
4*/
5
6char *rcs_mem = "$Id: mem.c,v 1.13 1996/05/24 14:31:10 roberto Exp $";
7
8#include <stdlib.h>
9
10#include "mem.h"
11#include "lua.h"
12
13
14void luaI_free (void *block)
15{
16 if (block)
17 {
18 *((int *)block) = -1; /* to catch errors */
19 free(block);
20 }
21}
22
23
24void *luaI_realloc (void *oldblock, unsigned long size)
25{
26 void *block;
27 size_t s = (size_t)size;
28 if (s != size)
29 lua_error("Allocation Error: Block too big");
30 block = oldblock ? realloc(oldblock, s) : malloc(s);
31 if (block == NULL)
32 lua_error(memEM);
33 return block;
34}
35
36
37int luaI_growvector (void **block, unsigned long nelems, int size,
38 char *errormsg, unsigned long limit)
39{
40 if (nelems >= limit)
41 lua_error(errormsg);
42 nelems = (nelems == 0) ? 20 : nelems*2;
43 if (nelems > limit)
44 nelems = limit;
45 *block = luaI_realloc(*block, nelems*size);
46 return (int)nelems;
47}
48
49
50void* luaI_buffer (unsigned long size)
51{
52 static unsigned long buffsize = 0;
53 static char* buffer = NULL;
54 if (size > buffsize)
55 buffer = luaI_realloc(buffer, buffsize=size);
56 return buffer;
57}
58
src/opcode.c+517−369
@@ -3,7 +3,7 @@ · 2 unmodified lines
3** TecCGraf - PUC-Rio3** TecCGraf - PUC-Rio
4*/4*/
5 5
6char *rcs_opcode="$Id: opcode.c,v 3.77 1996/11/18 13:48:44 roberto Exp $";6char *rcs_opcode="$Id: opcode.c,v 4.15 1997/06/26 21:40:57 roberto Exp $";
7 7
8#include <setjmp.h>8#include <setjmp.h>
9#include <stdio.h>9#include <stdio.h>
@@ -11,17 +11,18 @@ char *rcs_opcode="$Id: opcode.c,v 3.77 1996/11/18 13:48:44 roberto Exp $"; · 1 unmodified line
11#include <stdlib.h>11#include <stdlib.h>
12 12
13#include "luadebug.h"13#include "luadebug.h"
14#include "mem.h"14#include "luamem.h"
15#include "opcode.h"15#include "opcode.h"
16#include "hash.h"16#include "hash.h"
17#include "inout.h"17#include "inout.h"
18#include "table.h"18#include "table.h"
19#include "lua.h"19#include "lua.h"
20#include "fallback.h"20#include "fallback.h"
21#include "undump.h"21#include "auxlib.h"
22#include "lex.h"
22 23
23#define tonumber(o) ((tag(o) != LUA_T_NUMBER) && (lua_tonumber(o) != 0))24#define tonumber(o) ((ttype(o) != LUA_T_NUMBER) && (lua_tonumber(o) != 0))
24#define tostring(o) ((tag(o) != LUA_T_STRING) && (lua_tostring(o) != 0))25#define tostring(o) ((ttype(o) != LUA_T_STRING) && (lua_tostring(o) != 0))
25 26
26 27
27#define STACK_SIZE 12828#define STACK_SIZE 128
@@ -32,14 +33,14 @@ char *rcs_opcode="$Id: opcode.c,v 3.77 1996/11/18 13:48:44 roberto Exp $"; · 4 unmodified lines
32 33
33typedef int StkId; /* index to stack elements */34typedef int StkId; /* index to stack elements */
34 35
35static Object initial_stack;36static TObject initial_stack;
36 37
37static Object *stackLimit = &initial_stack+1;38static TObject *stackLimit = &initial_stack+1;
38static Object *stack = &initial_stack;39static TObject *stack = &initial_stack;
39static Object *top = &initial_stack;40static TObject *top = &initial_stack;
40 41
41 42
42/* macros to convert from lua_Object to (Object *) and back */43/* macros to convert from lua_Object to (TObject *) and back */
43 44
44#define Address(lo) ((lo)+stack-1)45#define Address(lo) ((lo)+stack-1)
45#define Ref(st) ((st)-stack+1)46#define Ref(st) ((st)-stack+1)
@@ -51,13 +52,13 @@ static Object *top = &initial_stack; · 5 unmodified lines
51#define incr_top if (++top >= stackLimit) growstack()52#define incr_top if (++top >= stackLimit) growstack()
52 53
53struct C_Lua_Stack {54struct C_Lua_Stack {
54 StkId base; /* when Lua calls C or C calls Lua, points to */55 StkId base; /* when Lua calls C or C calls Lua, points to */
55 /* the first slot after the last parameter. */56 /* the first slot after the last parameter. */
56 int num; /* when Lua calls C, has the number of parameters; */57 StkId lua2C; /* points to first element of "array" lua2C */
57 /* when C calls Lua, has the number of results. */58 int num; /* size of "array" lua2C */
58};59};
59 60
60static struct C_Lua_Stack CLS_current = {0, 0};61static struct C_Lua_Stack CLS_current = {0, 0, 0};
61 62
62static jmp_buf *errorJmp = NULL; /* current error recover point */63static jmp_buf *errorJmp = NULL; /* current error recover point */
63 64
@@ -72,7 +73,7 @@ static void do_call (StkId base, int nResults); · 8 unmodified lines
72 73
73 74
74 75
75Object *luaI_Address (lua_Object o)76TObject *luaI_Address (lua_Object o)
76{77{
77 return Address(o);78 return Address(o);
78}79}
@@ -84,7 +85,7 @@ Object *luaI_Address (lua_Object o) · 5 unmodified lines
84static void lua_initstack (void)85static void lua_initstack (void)
85{86{
86 Long maxstack = STACK_SIZE;87 Long maxstack = STACK_SIZE;
87 stack = newvector(maxstack, Object);88 stack = newvector(maxstack, TObject);
88 stackLimit = stack+maxstack;89 stackLimit = stack+maxstack;
89 top = stack;90 top = stack;
90 *(top++) = initial_stack;91 *(top++) = initial_stack;
@@ -105,7 +106,7 @@ static void growstack (void) · 14 unmodified lines
105 static int limit = STACK_LIMIT;106 static int limit = STACK_LIMIT;
106 StkId t = top-stack;107 StkId t = top-stack;
107 Long stacksize = stackLimit - stack;108 Long stacksize = stackLimit - stack;
108 stacksize = growvector(&stack, stacksize, Object, stackEM, limit+100);109 stacksize = growvector(&stack, stacksize, TObject, stackEM, limit+100);
109 stackLimit = stack+stacksize;110 stackLimit = stack+stacksize;
110 top = stack + t;111 top = stack + t;
111 if (stacksize >= limit)112 if (stacksize >= limit)
@@ -134,16 +135,16 @@ static char *lua_strconc (char *l, char *r) · 22 unmodified lines
134** Convert, if possible, to a number object.135** Convert, if possible, to a number object.
135** Return 0 if success, not 0 if error.136** Return 0 if success, not 0 if error.
136*/137*/
137static int lua_tonumber (Object *obj)138static int lua_tonumber (TObject *obj)
138{139{
139 float t;140 float t;
140 char c;141 char c;
141 if (tag(obj) != LUA_T_STRING)142 if (ttype(obj) != LUA_T_STRING)
142 return 1;143 return 1;
143 else if (sscanf(svalue(obj), "%f %c",&t, &c) == 1)144 else if (sscanf(svalue(obj), "%f %c",&t, &c) == 1)
144 {145 {
145 nvalue(obj) = t;146 nvalue(obj) = t;
146 tag(obj) = LUA_T_NUMBER;147 ttype(obj) = LUA_T_NUMBER;
147 return 0;148 return 0;
148 }149 }
149 else150 else
@@ -152,39 +153,54 @@ static int lua_tonumber (Object *obj) · 2 unmodified lines
152 153
153 154
154/*155/*
155** Convert, if possible, to a string tag156** Convert, if possible, to a string ttype
156** Return 0 in success or not 0 on error.157** Return 0 in success or not 0 on error.
157*/158*/
158static int lua_tostring (Object *obj)159static int lua_tostring (TObject *obj)
159{160{
160 char s[256];161 if (ttype(obj) != LUA_T_NUMBER)
161 if (tag(obj) != LUA_T_NUMBER)162 return 1;
162 return 1;163 else {
163 if ((int) nvalue(obj) == nvalue(obj))164 char s[60];
164 sprintf (s, "%d", (int) nvalue(obj));165 real f = nvalue(obj);
165 else166 int i;
166 sprintf (s, "%g", nvalue(obj));167 if ((real)(-MAX_INT) <= f && f <= (real)MAX_INT && (real)(i=(int)f) == f)
167 tsvalue(obj) = lua_createstring(s);168 sprintf (s, "%d", i);
168 tag(obj) = LUA_T_STRING;169 else
169 return 0;170 sprintf (s, "%g", nvalue(obj));
171 tsvalue(obj) = lua_createstring(s);
172 ttype(obj) = LUA_T_STRING;
173 return 0;
174 }
170}175}
171 176
172 177
173/*178/*
174** Adjust stack. Set top to the given value, pushing NILs if needed.179** Adjust stack. Set top to the given value, pushing NILs if needed.
175*/180*/
176static void adjust_top (StkId newtop)181static void adjust_top_aux (StkId newtop)
177{182{
178 Object *nt;183 TObject *nt;
179 lua_checkstack(stack+newtop);184 lua_checkstack(stack+newtop);
180 nt = stack+newtop; /* warning: previous call may change stack */185 nt = stack+newtop; /* warning: previous call may change stack */
181 while (top < nt) tag(top++) = LUA_T_NIL;186 while (top < nt) ttype(top++) = LUA_T_NIL;
182 top = nt; /* top could be bigger than newtop */
183}187}
184 188
189
190#define adjust_top(newtop) { if (newtop <= top-stack) \
191 top = stack+newtop; \
192 else adjust_top_aux(newtop); }
193
185#define adjustC(nParams) adjust_top(CLS_current.base+nParams)194#define adjustC(nParams) adjust_top(CLS_current.base+nParams)
186 195
187 196
197static void checkCparams (int nParams)
198{
199 if (top-stack < CLS_current.base+nParams)
200 lua_error("API error - wrong number of arguments in C2lua stack");
201}
202
203
188/*204/*
189** Open a hole below "nelems" from the top.205** Open a hole below "nelems" from the top.
190*/206*/
@@ -197,13 +213,37 @@ static void open_stack (int nelems) · 6 unmodified lines
197}213}
198 214
199 215
216static lua_Object put_luaObject (TObject *o)
217{
218 open_stack((top-stack)-CLS_current.base);
219 stack[CLS_current.base++] = *o;
220 return CLS_current.base; /* this is +1 real position (see Ref) */
221}
222
223
224static lua_Object put_luaObjectonTop (void)
225{
226 open_stack((top-stack)-CLS_current.base);
227 stack[CLS_current.base++] = *(--top);
228 return CLS_current.base; /* this is +1 real position (see Ref) */
229}
230
231
232lua_Object lua_pop (void)
233{
234 checkCparams(1);
235 return put_luaObjectonTop();
236}
237
238
239
200/*240/*
201** call Line hook241** call Line hook
202*/242*/
203static void lineHook (int line)243static void lineHook (int line)
204{244{
205 struct C_Lua_Stack oldCLS = CLS_current;245 struct C_Lua_Stack oldCLS = CLS_current;
206 StkId old_top = CLS_current.base = top-stack;246 StkId old_top = CLS_current.lua2C = CLS_current.base = top-stack;
207 CLS_current.num = 0;247 CLS_current.num = 0;
208 (*lua_linehook)(line);248 (*lua_linehook)(line);
209 top = stack+old_top;249 top = stack+old_top;
@@ -218,13 +258,13 @@ static void lineHook (int line) · 8 unmodified lines
218static void callHook (StkId base, lua_Type type, int isreturn)258static void callHook (StkId base, lua_Type type, int isreturn)
219{259{
220 struct C_Lua_Stack oldCLS = CLS_current;260 struct C_Lua_Stack oldCLS = CLS_current;
221 StkId old_top = CLS_current.base = top-stack;261 StkId old_top = CLS_current.lua2C = CLS_current.base = top-stack;
222 CLS_current.num = 0;262 CLS_current.num = 0;
223 if (isreturn)263 if (isreturn)
224 (*lua_callhook)(LUA_NOOBJECT, "(return)", 0);264 (*lua_callhook)(LUA_NOOBJECT, "(return)", 0);
225 else265 else
226 {266 {
227 Object *f = stack+base-1;267 TObject *f = stack+base-1;
228 if (type == LUA_T_MARK)268 if (type == LUA_T_MARK)
229 (*lua_callhook)(Ref(f), f->value.tf->fileName, f->value.tf->lineDefined);269 (*lua_callhook)(Ref(f), f->value.tf->fileName, f->value.tf->lineDefined);
230 else270 else
@@ -246,6 +286,7 @@ static StkId callC (lua_CFunction func, StkId base) · 15 unmodified lines
246 StkId firstResult;286 StkId firstResult;
247 CLS_current.num = (top-stack) - base;287 CLS_current.num = (top-stack) - base;
248 /* incorporate parameters on the stack */288 /* incorporate parameters on the stack */
289 CLS_current.lua2C = base;
249 CLS_current.base = base+CLS_current.num; /* == top-stack */290 CLS_current.base = base+CLS_current.num; /* == top-stack */
250 if (lua_callhook)291 if (lua_callhook)
251 callHook(base, LUA_T_CMARK, 0);292 callHook(base, LUA_T_CMARK, 0);
@@ -257,15 +298,11 @@ static StkId callC (lua_CFunction func, StkId base) · 5 unmodified lines
257 return firstResult;298 return firstResult;
258}299}
259 300
260/*301static void callIM (TObject *f, int nParams, int nResults)
261** Call the specified fallback, putting it on the stack below its arguments
262*/
263static void callFB (int fb)
264{302{
265 int nParams = luaI_fallBacks[fb].nParams;
266 open_stack(nParams);303 open_stack(nParams);
267 *(top-nParams-1) = luaI_fallBacks[fb].function;304 *(top-nParams-1) = *f;
268 do_call((top-stack)-nParams, luaI_fallBacks[fb].nResults);305 do_call((top-stack)-nParams, nResults);
269}306}
270 307
271 308
@@ -278,28 +315,28 @@ static void callFB (int fb) · 6 unmodified lines
278static void do_call (StkId base, int nResults)315static void do_call (StkId base, int nResults)
279{316{
280 StkId firstResult;317 StkId firstResult;
281 Object *func = stack+base-1;318 TObject *func = stack+base-1;
282 int i;319 int i;
283 if (tag(func) == LUA_T_CFUNCTION)320 if (ttype(func) == LUA_T_CFUNCTION) {
284 {321 ttype(func) = LUA_T_CMARK;
285 tag(func) = LUA_T_CMARK;
286 firstResult = callC(fvalue(func), base);322 firstResult = callC(fvalue(func), base);
287 }323 }
288 else if (tag(func) == LUA_T_FUNCTION)324 else if (ttype(func) == LUA_T_FUNCTION) {
289 {325 ttype(func) = LUA_T_MARK;
290 tag(func) = LUA_T_MARK;
291 firstResult = lua_execute(func->value.tf->code, base);326 firstResult = lua_execute(func->value.tf->code, base);
292 }327 }
293 else328 else { /* func is not a function */
294 { /* func is not a function */329 /* Check the tag method for invalid functions */
295 /* Call the fallback for invalid functions */330 TObject *im = luaI_getimbyObj(func, IM_FUNCTION);
331 if (ttype(im) == LUA_T_NIL)
332 lua_error("call expression not a function");
296 open_stack((top-stack)-(base-1));333 open_stack((top-stack)-(base-1));
297 stack[base-1] = luaI_fallBacks[FB_FUNCTION].function;334 stack[base-1] = *im;
298 do_call(base, nResults);335 do_call(base, nResults);
299 return;336 return;
300 }337 }
301 /* adjust the number of results */338 /* adjust the number of results */
302 if (nResults != MULT_RET && top - (stack+firstResult) != nResults)339 if (nResults != MULT_RET)
303 adjust_top(firstResult+nResults);340 adjust_top(firstResult+nResults);
304 /* move results to base-1 (to erase parameters and function) */341 /* move results to base-1 (to erase parameters and function) */
305 base--;342 base--;
@@ -316,58 +353,110 @@ static void do_call (StkId base, int nResults) · 10 unmodified lines
316*/353*/
317static void pushsubscript (void)354static void pushsubscript (void)
318{355{
319 if (tag(top-2) != LUA_T_ARRAY)356 TObject *im;
320 callFB(FB_GETTABLE);357 if (ttype(top-2) != LUA_T_ARRAY) /* not a table, get "gettable" method */
321 else 358 im = luaI_getimbyObj(top-2, IM_GETTABLE);
322 {359 else { /* object is a table... */
323 Object *h = lua_hashget(avalue(top-2), top-1);360 int tg = (top-2)->value.a->htag;
324 if (h == NULL || tag(h) == LUA_T_NIL)361 im = luaI_getim(tg, IM_GETTABLE);
325 callFB(FB_INDEX);362 if (ttype(im) == LUA_T_NIL) { /* and does not have a "gettable" method */
326 else363 TObject *h = lua_hashget(avalue(top-2), top-1);
327 {364 if (h != NULL && ttype(h) != LUA_T_NIL) {
328 --top;365 --top;
329 *(top-1) = *h;366 *(top-1) = *h;
367 }
368 else if (ttype(im=luaI_getim(tg, IM_INDEX)) != LUA_T_NIL)
369 callIM(im, 2, 1);
370 else {
371 --top;
372 ttype(top-1) = LUA_T_NIL;
373 }
374 return;
330 }375 }
376 /* else it has a "gettable" method, go through to next command */
377 }
378 /* object is not a table, or it has a "gettable" method */
379 if (ttype(im) != LUA_T_NIL)
380 callIM(im, 2, 1);
381 else
382 lua_error("indexed expression not a table");
383}
384
385
386lua_Object lua_rawgettable (void)
387{
388 checkCparams(2);
389 if (ttype(top-2) != LUA_T_ARRAY)
390 lua_error("indexed expression not a table in raw gettable");
391 else {
392 TObject *h = lua_hashget(avalue(top-2), top-1);
393 --top;
394 if (h != NULL)
395 *(top-1) = *h;
396 else
397 ttype(top-1) = LUA_T_NIL;
331 }398 }
399 return put_luaObjectonTop();
332}400}
333 401
334 402
335/*403/*
336** Function to store indexed based on values at the top404** Function to store indexed based on values at the top
405** mode = 0: raw store (without internal methods)
406** mode = 1: normal store (with internal methods)
407** mode = 2: "deep stack" store (with internal methods)
337*/408*/
338static void storesubscript (void)409static void storesubscript (TObject *t, int mode)
339{410{
340 if (tag(top-3) != LUA_T_ARRAY)411 TObject *im = (mode == 0) ? NULL : luaI_getimbyObj(t, IM_SETTABLE);
341 callFB(FB_SETTABLE);412 if (ttype(t) == LUA_T_ARRAY && (im == NULL || ttype(im) == LUA_T_NIL)) {
342 else413 TObject *h = lua_hashdefine(avalue(t), t+1);
343 {414 *h = *(top-1);
344 Object *h = lua_hashdefine (avalue(top-3), top-2);415 top -= (mode == 2) ? 1 : 3;
345 *h = *(top-1);416 }
346 top -= 3;417 else { /* object is not a table, and/or has a specific "settable" method */
347 }418 if (im && ttype(im) != LUA_T_NIL) {
419 if (mode == 2) {
420 lua_checkstack(top+2);
421 *(top+1) = *(top-1);
422 *(top) = *(t+1);
423 *(top-1) = *t;
424 top += 2;
425 }
426 callIM(im, 3, 0);
427 }
428 else
429 lua_error("indexed expression not a table");
430 }
348}431}
349 432
350 433
351static void getglobal (Word n)434static void getglobal (Word n)
352{435{
353 *top = lua_table[n].object;436 TObject *value = &lua_table[n].object;
354 incr_top;437 TObject *im = luaI_getimbyObj(value, IM_GETGLOBAL);
355 if (tag(top-1) == LUA_T_NIL)438 if (ttype(im) == LUA_T_NIL) { /* default behavior */
356 { /* must call getglobal fallback */439 *top = *value;
357 tag(top-1) = LUA_T_STRING;440 incr_top;
358 tsvalue(top-1) = lua_table[n].varname;
359 callFB(FB_GETGLOBAL);
360 }441 }
442 else {
443 ttype(top) = LUA_T_STRING;
444 tsvalue(top) = lua_table[n].varname;
445 incr_top;
446 *top = *value;
447 incr_top;
448 callIM(im, 2, 1);
449 }
361}450}
362 451
363/*452/*
364** Traverse all objects on stack453** Traverse all objects on stack
365*/454*/
366void lua_travstack (int (*fn)(Object *))455void lua_travstack (int (*fn)(TObject *))
367{456{
368 Object *o;457 StkId i;
369 for (o = top-1; o >= stack; o--)458 for (i = (top-1)-stack; i>=0; i--)
370 fn (o);459 fn (stack+i);
371}460}
372 461
373 462
@@ -377,8 +466,11 @@ void lua_travstack (int (*fn)(Object *)) · 3 unmodified lines
377 466
378static void lua_message (char *s)467static void lua_message (char *s)
379{468{
380 lua_pushstring(s);469 TObject *im = luaI_geterrorim();
381 callFB(FB_ERROR);470 if (ttype(im) != LUA_T_NIL) {
471 lua_pushstring(s);
472 callIM(im, 1, 0);
473 }
382}474}
383 475
384/*476/*
@@ -399,25 +491,25 @@ void lua_error (char *s) · 14 unmodified lines
399 491
400lua_Function lua_stackedfunction (int level)492lua_Function lua_stackedfunction (int level)
401{493{
402 Object *p = top;494 StkId i;
403 while (--p >= stack)495 for (i = (top-1)-stack; i>=0; i--)
404 if (p->tag == LUA_T_MARK || p->tag == LUA_T_CMARK)496 if (stack[i].ttype == LUA_T_MARK || stack[i].ttype == LUA_T_CMARK)
405 if (level-- == 0)497 if (level-- == 0)
406 return Ref(p);498 return Ref(stack+i);
407 return LUA_NOOBJECT;499 return LUA_NOOBJECT;
408}500}
409 501
410 502
411int lua_currentline (lua_Function func)503int lua_currentline (lua_Function func)
412{504{
413 Object *f = Address(func);505 TObject *f = Address(func);
414 return (f+1 < top && (f+1)->tag == LUA_T_LINE) ? (f+1)->value.i : -1;506 return (f+1 < top && (f+1)->ttype == LUA_T_LINE) ? (f+1)->value.i : -1;
415}507}
416 508
417 509
418lua_Object lua_getlocal (lua_Function func, int local_number, char **name)510lua_Object lua_getlocal (lua_Function func, int local_number, char **name)
419{511{
420 Object *f = luaI_Address(func);512 TObject *f = luaI_Address(func);
421 *name = luaI_getlocalname(f->value.tf, local_number, lua_currentline(func));513 *name = luaI_getlocalname(f->value.tf, local_number, lua_currentline(func));
422 if (*name)514 if (*name)
423 {515 {
@@ -431,9 +523,9 @@ lua_Object lua_getlocal (lua_Function func, int local_number, char **name) · 7 unmodified lines
431 523
432int lua_setlocal (lua_Function func, int local_number)524int lua_setlocal (lua_Function func, int local_number)
433{525{
434 Object *f = Address(func);526 TObject *f = Address(func);
435 char *name = luaI_getlocalname(f->value.tf, local_number, lua_currentline(func));527 char *name = luaI_getlocalname(f->value.tf, local_number, lua_currentline(func));
436 adjustC(1);528 checkCparams(1);
437 --top;529 --top;
438 if (name)530 if (name)
439 {531 {
@@ -446,6 +538,29 @@ int lua_setlocal (lua_Function func, int local_number) · 6 unmodified lines
446 return 0;538 return 0;
447}539}
448 540
541/*
542** Call the function at CLS_current.base, and incorporate results on
543** the Lua2C structure.
544*/
545static void do_callinc (int nResults)
546{
547 StkId base = CLS_current.base;
548 do_call(base+1, nResults);
549 CLS_current.lua2C = base; /* position of the new results */
550 CLS_current.num = (top-stack) - base; /* number of results */
551 CLS_current.base = base + CLS_current.num; /* incorporate results on stack */
552}
553
554
555static void do_unprotectedrun (lua_CFunction f, int nParams, int nResults)
556{
557 StkId base = (top-stack)-nParams;
558 open_stack(nParams);
559 stack[base].ttype = LUA_T_CFUNCTION;
560 stack[base].value.f = f;
561 do_call(base+1, nResults);
562}
563
449 564
450/*565/*
451** Execute a protected call. Assumes that function is at CLS_current.base and566** Execute a protected call. Assumes that function is at CLS_current.base and
@@ -458,15 +573,11 @@ static int do_protectedrun (int nResults) · 6 unmodified lines
458 struct C_Lua_Stack oldCLS = CLS_current;573 struct C_Lua_Stack oldCLS = CLS_current;
459 jmp_buf *oldErr = errorJmp;574 jmp_buf *oldErr = errorJmp;
460 errorJmp = &myErrorJmp;575 errorJmp = &myErrorJmp;
461 if (setjmp(myErrorJmp) == 0)576 if (setjmp(myErrorJmp) == 0) {
462 {577 do_callinc(nResults);
463 do_call(CLS_current.base+1, nResults);
464 CLS_current.num = (top-stack) - CLS_current.base; /* number of results */
465 CLS_current.base += CLS_current.num; /* incorporate results on the stack */
466 status = 0;578 status = 0;
467 }579 }
468 else580 else { /* an error occurred: restore CLS_current and top */
469 { /* an error occurred: restore CLS_current and top */
470 CLS_current = oldCLS;581 CLS_current = oldCLS;
471 top = stack+CLS_current.base;582 top = stack+CLS_current.base;
472 status = 1;583 status = 1;
@@ -479,13 +590,14 @@ int luaI_dorun (TFunc *tf) · 6 unmodified lines
479{590{
480 int status;591 int status;
481 adjustC(1); /* one slot for the pseudo-function */592 adjustC(1); /* one slot for the pseudo-function */
482 stack[CLS_current.base].tag = LUA_T_FUNCTION;593 stack[CLS_current.base].ttype = LUA_T_FUNCTION;
483 stack[CLS_current.base].value.tf = tf;594 stack[CLS_current.base].value.tf = tf;
484 status = do_protectedrun(MULT_RET);595 status = do_protectedrun(MULT_RET);
485 return status;596 return status;
486}597}
487 598
488static int do_protectedmain (void)599
600int lua_domain (void)
489{601{
490 TFunc tf;602 TFunc tf;
491 int status;603 int status;
@@ -493,23 +605,21 @@ static int do_protectedmain (void) · 1 unmodified line
493 jmp_buf *oldErr = errorJmp;605 jmp_buf *oldErr = errorJmp;
494 errorJmp = &myErrorJmp;606 errorJmp = &myErrorJmp;
495 luaI_initTFunc(&tf);607 luaI_initTFunc(&tf);
496 tf.fileName = lua_parsedfile;608 if (setjmp(myErrorJmp) == 0) {
497 if (setjmp(myErrorJmp) == 0)
498 {
499 lua_parse(&tf);609 lua_parse(&tf);
500 status = luaI_dorun(&tf);610 status = 0;
501 }611 }
502 else612 else {
503 {
504 status = 1;
505 adjustC(0); /* erase extra slot */613 adjustC(0); /* erase extra slot */
614 status = 1;
506 }615 }
616 if (status == 0)
617 status = luaI_dorun(&tf);
507 errorJmp = oldErr;618 errorJmp = oldErr;
508 luaI_free(tf.code);619 luaI_free(tf.code);
509 return status;620 return status;
510}621}
511 622
512
513/*623/*
514** Execute the given lua function. Return 0 on success or 1 on error.624** Execute the given lua function. Return 0 on success or 1 on error.
515*/625*/
@@ -526,71 +636,31 @@ int lua_callfunction (lua_Object function) · 10 unmodified lines
526}636}
527 637
528 638
529int lua_call (char *funcname)639lua_Object lua_gettagmethod (int tag, char *event)
530{640{
531 Word n = luaI_findsymbolbyname(funcname);641 lua_pushnumber(tag);
532 open_stack((top-stack)-CLS_current.base);642 lua_pushstring(event);
533 stack[CLS_current.base] = s_object(n);643 do_unprotectedrun(luaI_gettagmethod, 2, 1);
534 return do_protectedrun(MULT_RET);644 return put_luaObjectonTop();
535}645}
536 646
537 647lua_Object lua_settagmethod (int tag, char *event)
538/*
539** Open file, generate opcode and execute global statement. Return 0 on
540** success or non 0 on error.
541*/
542int lua_dofile (char *filename)
543{648{
544 int status;649 TObject newmethod;
545 int c;650 checkCparams(1);
546 FILE *f = lua_openfile(filename);651 newmethod = *(--top);
547 if (f == NULL)652 lua_pushnumber(tag);
548 return 2;653 lua_pushstring(event);
549 c = fgetc(f);654 *top = newmethod; incr_top;
550 ungetc(c, f);655 do_unprotectedrun(luaI_settagmethod, 3, 1);
551 if (c == ID_CHUNK) {656 return put_luaObjectonTop();
552 f = freopen(filename, "rb", f); /* set binary mode */
553 status = luaI_undump(f);
554 }
555 else {
556 if (c == '#')
557 while ((c=fgetc(f)) != '\n') /* skip first line */;
558 status = do_protectedmain();
559 }
560 lua_closefile();
561 return status;
562}657}
563 658
564/*659lua_Object lua_seterrormethod (void)
565** Generate opcode stored on string and execute global statement. Return 0 on
566** success or non 0 on error.
567*/
568int lua_dostring (char *str)
569{660{
570 int status;661 checkCparams(1);
571 if (str == NULL)662 do_unprotectedrun(luaI_seterrormethod, 1, 1);
572 return 1;663 return put_luaObjectonTop();
573 lua_openstring(str);
574 status = do_protectedmain();
575 lua_closestring();
576 return status;
577}
578
579
580/*
581** API: set a function as a fallback
582*/
583lua_Object lua_setfallback (char *name, lua_CFunction fallback)
584{
585 adjustC(1); /* one slot for the pseudo-function */
586 stack[CLS_current.base].tag = LUA_T_CFUNCTION;
587 stack[CLS_current.base].value.f = luaI_setfallback;
588 lua_pushstring(name);
589 lua_pushcfunction(fallback);
590 if (do_protectedrun(1) == 0)
591 return (Ref(top-1));
592 else
593 return LUA_NOOBJECT;
594}664}
595 665
596 666
@@ -598,12 +668,11 @@ lua_Object lua_setfallback (char *name, lua_CFunction fallback) · 1 unmodified line
598** API: receives on the stack the table and the index.668** API: receives on the stack the table and the index.
599** returns the value.669** returns the value.
600*/670*/
601lua_Object lua_getsubscript (void)671lua_Object lua_gettable (void)
602{672{
603 adjustC(2);673 checkCparams(2);
604 pushsubscript();674 pushsubscript();
605 CLS_current.base++; /* incorporate object in the stack */675 return put_luaObjectonTop();
606 return (Ref(top-1));
607}676}
608 677
609 678
@@ -633,13 +702,25 @@ void lua_endblock (void) · 23 unmodified lines
633 adjustC(0);702 adjustC(0);
634}703}
635 704
705void lua_settag (int tag)
706{
707 checkCparams(1);
708 luaI_settag(tag, --top);
709}
710
636/* 711/*
637** API: receives on the stack the table, the index, and the new value.712** API: receives on the stack the table, the index, and the new value.
638*/713*/
639void lua_storesubscript (void)714void lua_settable (void)
640{715{
641 adjustC(3);716 checkCparams(3);
642 storesubscript();717 storesubscript(top-3, 1);
718}
719
720void lua_rawsettable (void)
721{
722 checkCparams(3);
723 storesubscript(top-3, 0);
643}724}
644 725
645/*726/*
@@ -647,40 +728,59 @@ void lua_storesubscript (void) · 1 unmodified line
647*/728*/
648lua_Object lua_createtable (void)729lua_Object lua_createtable (void)
649{730{
650 adjustC(0);731 TObject o;
651 avalue(top) = lua_createarray(0);732 avalue(&o) = lua_createarray(0);
652 tag(top) = LUA_T_ARRAY;733 ttype(&o) = LUA_T_ARRAY;
653 incr_top;734 return put_luaObject(&o);
654 CLS_current.base++; /* incorporate object in the stack */
655 return Ref(top-1);
656}735}
657 736
658/*737/*
659** Get a parameter, returning the object handle or LUA_NOOBJECT on error.738** Get a parameter, returning the object handle or LUA_NOOBJECT on error.
660** 'number' must be 1 to get the first parameter.739** 'number' must be 1 to get the first parameter.
661*/740*/
662lua_Object lua_getparam (int number)741lua_Object lua_lua2C (int number)
742{
743 if (number <= 0 || number > CLS_current.num) return LUA_NOOBJECT;
744 /* Ref(stack+(CLS_current.lua2C+number-1)) ==
745 stack+(CLS_current.lua2C+number-1)-stack+1 == */
746 return CLS_current.lua2C+number;
747}
748
749int lua_isnil (lua_Object o)
750{
751 return (o!= LUA_NOOBJECT) && (ttype(Address(o)) == LUA_T_NIL);
752}
753
754int lua_istable (lua_Object o)
755{
756 return (o!= LUA_NOOBJECT) && (ttype(Address(o)) == LUA_T_ARRAY);
757}
758
759int lua_isuserdata (lua_Object o)
663{760{
664 if (number <= 0 || number > CLS_current.num) return LUA_NOOBJECT;761 return (o!= LUA_NOOBJECT) && (ttype(Address(o)) == LUA_T_USERDATA);
665 /* Ref(stack+(CLS_current.base-CLS_current.num+number-1)) ==
666 stack+(CLS_current.base-CLS_current.num+number-1)-stack+1 == */
667 return CLS_current.base-CLS_current.num+number;
668}762}
669 763
670int lua_isnumber (lua_Object object)764int lua_iscfunction (lua_Object o)
671{765{
672 return (object != LUA_NOOBJECT) && (tonumber(Address(object)) == 0);766 int t = lua_tag(o);
767 return (t == LUA_T_CMARK) || (t == LUA_T_CFUNCTION);
673}768}
674 769
675int lua_isstring (lua_Object object)770int lua_isnumber (lua_Object o)
676{771{
677 int t = lua_type(object);772 return (o!= LUA_NOOBJECT) && (tonumber(Address(o)) == 0);
773}
774
775int lua_isstring (lua_Object o)
776{
777 int t = lua_tag(o);
678 return (t == LUA_T_STRING) || (t == LUA_T_NUMBER);778 return (t == LUA_T_STRING) || (t == LUA_T_NUMBER);
679}779}
680 780
681int lua_isfunction (lua_Object object)781int lua_isfunction (lua_Object o)
682{782{
683 int t = lua_type(object);783 int t = lua_tag(o);
684 return (t == LUA_T_FUNCTION) || (t == LUA_T_CFUNCTION) ||784 return (t == LUA_T_FUNCTION) || (t == LUA_T_CFUNCTION) ||
685 (t == LUA_T_MARK) || (t == LUA_T_CMARK);785 (t == LUA_T_MARK) || (t == LUA_T_CMARK);
686}786}
@@ -700,57 +800,44 @@ real lua_getnumber (lua_Object object) · 13 unmodified lines
700*/800*/
701char *lua_getstring (lua_Object object)801char *lua_getstring (lua_Object object)
702{802{
703 if (object == LUA_NOOBJECT) return NULL;803 if (object == LUA_NOOBJECT || tostring (Address(object)))
704 if (tostring (Address(object))) return NULL;804 return NULL;
705 else return (svalue(Address(object)));805 else return (svalue(Address(object)));
706}806}
707 807
708/*808
709** Given an object handle, return its cfuntion pointer. On error, return NULL.809void *lua_getuserdata (lua_Object object)
710*/
711lua_CFunction lua_getcfunction (lua_Object object)
712{810{
713 if (object == LUA_NOOBJECT || ((tag(Address(object)) != LUA_T_CFUNCTION) &&811 if (object == LUA_NOOBJECT || ttype(Address(object)) != LUA_T_USERDATA)
714 (tag(Address(object)) != LUA_T_CMARK)))812 return NULL;
715 return NULL;813 else return tsvalue(Address(object))->u.v;
716 else return (fvalue(Address(object)));
717}814}
718 815
816
719/*817/*
720** Given an object handle, return its user data. On error, return NULL.818** Given an object handle, return its cfuntion pointer. On error, return NULL.
721*/819*/
722void *lua_getuserdata (lua_Object object)820lua_CFunction lua_getcfunction (lua_Object object)
723{821{
724 if (object == LUA_NOOBJECT || tag(Address(object)) < LUA_T_USERDATA)822 if (object == LUA_NOOBJECT || ((ttype(Address(object)) != LUA_T_CFUNCTION) &&
823 (ttype(Address(object)) != LUA_T_CMARK)))
725 return NULL;824 return NULL;
726 else return (uvalue(Address(object)));825 else return (fvalue(Address(object)));
727}826}
728 827
729 828
730lua_Object lua_getref (int ref)829lua_Object lua_getref (int ref)
731{830{
732 Object *o = luaI_getref(ref);831 TObject *o = luaI_getref(ref);
733 if (o == NULL)832 if (o == NULL)
734 return LUA_NOOBJECT;833 return LUA_NOOBJECT;
735 adjustC(0);834 return put_luaObject(o);
736 luaI_pushobject(o);
737 CLS_current.base++; /* incorporate object in the stack */
738 return Ref(top-1);
739}
740
741
742void lua_pushref (int ref)
743{
744 Object *o = luaI_getref(ref);
745 if (o == NULL)
746 lua_error("access to invalid (possibly garbage collected) reference");
747 luaI_pushobject(o);
748}835}
749 836
750 837
751int lua_ref (int lock)838int lua_ref (int lock)
752{839{
753 adjustC(1);840 checkCparams(1);
754 return luaI_ref(--top, lock);841 return luaI_ref(--top, lock);
755}842}
756 843
@@ -761,20 +848,50 @@ int lua_ref (int lock) · 4 unmodified lines
761*/848*/
762lua_Object lua_getglobal (char *name)849lua_Object lua_getglobal (char *name)
763{850{
764 adjustC(0);851 getglobal(luaI_findsymbolbyname(name));
765 getglobal(luaI_findsymbolbyname(name));852 return put_luaObjectonTop();
766 CLS_current.base++; /* incorporate object in the stack */853}
767 return Ref(top-1);854
855
856lua_Object lua_rawgetglobal (char *name)
857{
858 return put_luaObject(&lua_table[luaI_findsymbolbyname(name)].object);
768}859}
769 860
861
770/*862/*
771** Store top of the stack at a global variable array field.863** Store top of the stack at a global variable array field.
772*/864*/
773void lua_storeglobal (char *name)865static void setglobal (Word n)
866{
867 TObject *oldvalue = &lua_table[n].object;
868 TObject *im = luaI_getimbyObj(oldvalue, IM_SETGLOBAL);
869 if (ttype(im) == LUA_T_NIL) /* default behavior */
870 s_object(n) = *(--top);
871 else {
872 TObject newvalue = *(top-1);
873 ttype(top-1) = LUA_T_STRING;
874 tsvalue(top-1) = lua_table[n].varname;
875 *top = *oldvalue;
876 incr_top;
877 *top = newvalue;
878 incr_top;
879 callIM(im, 3, 0);
880 }
881}
882
883
884void lua_setglobal (char *name)
774{885{
775 Word n = luaI_findsymbolbyname(name);886 checkCparams(1);
776 adjustC(1);887 setglobal(luaI_findsymbolbyname(name));
777 s_object(n) = *(--top);888}
889
890void lua_rawsetglobal (char *name)
891{
892 Word n = luaI_findsymbolbyname(name);
893 checkCparams(1);
894 s_object(n) = *(--top);
778}895}
779 896
780/*897/*
@@ -782,60 +899,59 @@ void lua_storeglobal (char *name) · 1 unmodified line
782*/899*/
783void lua_pushnil (void)900void lua_pushnil (void)
784{901{
785 tag(top) = LUA_T_NIL;902 ttype(top) = LUA_T_NIL;
786 incr_top;903 incr_top;
787}904}
788 905
789/*906/*
790** Push an object (tag=number) to stack.907** Push an object (ttype=number) to stack.
791*/908*/
792void lua_pushnumber (real n)909void lua_pushnumber (real n)
793{910{
794 tag(top) = LUA_T_NUMBER; nvalue(top) = n;911 ttype(top) = LUA_T_NUMBER; nvalue(top) = n;
795 incr_top;912 incr_top;
796}913}
797 914
798/*915/*
799** Push an object (tag=string) to stack.916** Push an object (ttype=string) to stack.
800*/917*/
801void lua_pushstring (char *s)918void lua_pushstring (char *s)
802{919{
803 if (s == NULL)920 if (s == NULL)
804 tag(top) = LUA_T_NIL;921 ttype(top) = LUA_T_NIL;
805 else922 else
806 {923 {
807 tsvalue(top) = lua_createstring(s);924 tsvalue(top) = lua_createstring(s);
808 tag(top) = LUA_T_STRING;925 ttype(top) = LUA_T_STRING;
809 }926 }
810 incr_top;927 incr_top;
811}928}
812/*>>>>>>>>>#undef lua_pushliteral929
813void lua_pushliteral(char *s) { lua_pushstring(s); }*/
814 930
815/*931/*
816** Push an object (tag=cfunction) to stack.932** Push an object (ttype=cfunction) to stack.
817*/933*/
818void lua_pushcfunction (lua_CFunction fn)934void lua_pushcfunction (lua_CFunction fn)
819{935{
820 tag(top) = LUA_T_CFUNCTION; fvalue(top) = fn;936 ttype(top) = LUA_T_CFUNCTION; fvalue(top) = fn;
821 incr_top;937 incr_top;
822}938}
823 939
824/*940
825** Push an object (tag=userdata) to stack.941
826*/
827void lua_pushusertag (void *u, int tag)942void lua_pushusertag (void *u, int tag)
828{943{
829 if (tag < LUA_T_USERDATA) 944 if (tag < 0 && tag != LUA_ANYTAG)
830 lua_error("invalid tag in `lua_pushusertag'");945 luaI_realtag(tag); /* error if tag is not valid */
831 tag(top) = tag; uvalue(top) = u;946 tsvalue(top) = luaI_createudata(u, tag);
832 incr_top;947 ttype(top) = LUA_T_USERDATA;
948 incr_top;
833}949}
834 950
835/*951/*
836** Push an object on the stack.952** Push an object on the stack.
837*/953*/
838void luaI_pushobject (Object *o)954void luaI_pushobject (TObject *o)
839{955{
840 *top = *o;956 *top = *o;
841 incr_top;957 incr_top;
@@ -847,78 +963,102 @@ void luaI_pushobject (Object *o) · 5 unmodified lines
847void lua_pushobject (lua_Object o)963void lua_pushobject (lua_Object o)
848{964{
849 if (o == LUA_NOOBJECT)965 if (o == LUA_NOOBJECT)
850 lua_error("attempt to push a NOOBJECT");966 lua_error("API error - attempt to push a NOOBJECT");
851 *top = *Address(o);967 *top = *Address(o);
852 if (tag(top) == LUA_T_MARK) tag(top) = LUA_T_FUNCTION;968 if (ttype(top) == LUA_T_MARK) ttype(top) = LUA_T_FUNCTION;
853 else if (tag(top) == LUA_T_CMARK) tag(top) = LUA_T_CFUNCTION;969 else if (ttype(top) == LUA_T_CMARK) ttype(top) = LUA_T_CFUNCTION;
854 incr_top;970 incr_top;
855}971}
856 972
857int lua_type (lua_Object o)973int lua_tag (lua_Object lo)
858{974{
859 if (o == LUA_NOOBJECT)975 if (lo == LUA_NOOBJECT) return LUA_T_NIL;
860 return LUA_T_NIL;976 else {
861 else977 TObject *o = Address(lo);
862 return tag(Address(o));978 lua_Type t = ttype(o);
979 if (t == LUA_T_USERDATA)
980 return o->value.ts->tag;
981 else if (t == LUA_T_ARRAY)
982 return o->value.a->htag;
983 else return t;
984 }
863}985}
864 986
865 987
866void luaI_gcFB (Object *o)988void luaI_gcIM (TObject *o)
867{989{
868 *top = *o;990 TObject *im = luaI_getimbyObj(o, IM_GC);
869 incr_top;991 if (ttype(im) != LUA_T_NIL) {
870 callFB(FB_GC);992 *top = *o;
993 incr_top;
994 callIM(im, 1, 0);
995 }
996}
997
998
999static void call_binTM (IMS event, char *msg)
1000{
1001 TObject *im = luaI_getimbyObj(top-2, event); /* try first operand */
1002 if (ttype(im) == LUA_T_NIL) {
1003 im = luaI_getimbyObj(top-1, event); /* try second operand */
1004 if (ttype(im) == LUA_T_NIL) {
1005 im = luaI_getim(0, event); /* try a 'global' i.m. */
1006 if (ttype(im) == LUA_T_NIL)
1007 lua_error(msg);
1008 }
1009 }
1010 lua_pushstring(luaI_eventname[event]);
1011 callIM(im, 3, 1);
871}1012}
872 1013
873 1014
874static void call_arith (char *op)1015static void call_arith (IMS event)
875{1016{
876 lua_pushstring(op);1017 call_binTM(event, "unexpected type at arithmetic operation");
877 callFB(FB_ARITH);
878}1018}
879 1019
880static void comparison (lua_Type tag_less, lua_Type tag_equal, 1020
881 lua_Type tag_great, char *op)1021static void comparison (lua_Type ttype_less, lua_Type ttype_equal,
1022 lua_Type ttype_great, IMS op)
882{1023{
883 Object *l = top-2;1024 TObject *l = top-2;
884 Object *r = top-1;1025 TObject *r = top-1;
885 int result;1026 int result;
886 if (tag(l) == LUA_T_NUMBER && tag(r) == LUA_T_NUMBER)1027 if (ttype(l) == LUA_T_NUMBER && ttype(r) == LUA_T_NUMBER)
887 result = (nvalue(l) < nvalue(r)) ? -1 : (nvalue(l) == nvalue(r)) ? 0 : 1;1028 result = (nvalue(l) < nvalue(r)) ? -1 : (nvalue(l) == nvalue(r)) ? 0 : 1;
888 else if (tostring(l) || tostring(r))1029 else if (ttype(l) == LUA_T_STRING && ttype(r) == LUA_T_STRING)
889 {1030 result = strcmp(svalue(l), svalue(r));
890 lua_pushstring(op);1031 else {
891 callFB(FB_ORDER);1032 call_binTM(op, "unexpected type at comparison");
892 return;1033 return;
893 }1034 }
894 else
895 result = strcmp(svalue(l), svalue(r));
896 top--;1035 top--;
897 nvalue(top-1) = 1;1036 nvalue(top-1) = 1;
898 tag(top-1) = (result < 0) ? tag_less : (result == 0) ? tag_equal : tag_great;1037 ttype(top-1) = (result < 0) ? ttype_less :
1038 (result == 0) ? ttype_equal : ttype_great;
899}1039}
900 1040
901 1041
902static void adjust_varargs (StkId first_extra_arg)1042static void adjust_varargs (StkId first_extra_arg)
903{1043{
904 Object arg;1044 TObject arg;
905 Object *firstelem = stack+first_extra_arg;1045 TObject *firstelem = stack+first_extra_arg;
906 int nvararg = top-firstelem;1046 int nvararg = top-firstelem;
907 int i;1047 int i;
908 if (nvararg < 0) nvararg = 0;1048 if (nvararg < 0) nvararg = 0;
909 avalue(&arg) = lua_createarray(nvararg+1); /* +1 for field 'n' */1049 avalue(&arg) = lua_createarray(nvararg+1); /* +1 for field 'n' */
910 tag(&arg) = LUA_T_ARRAY;1050 ttype(&arg) = LUA_T_ARRAY;
911 for (i=0; i<nvararg; i++) {1051 for (i=0; i<nvararg; i++) {
912 Object index;1052 TObject index;
913 tag(&index) = LUA_T_NUMBER;1053 ttype(&index) = LUA_T_NUMBER;
914 nvalue(&index) = i+1;1054 nvalue(&index) = i+1;
915 *(lua_hashdefine(avalue(&arg), &index)) = *(firstelem+i);1055 *(lua_hashdefine(avalue(&arg), &index)) = *(firstelem+i);
916 }1056 }
917 /* store counter in field "n" */ {1057 /* store counter in field "n" */ {
918 Object index, extra;1058 TObject index, extra;
919 tag(&index) = LUA_T_STRING;1059 ttype(&index) = LUA_T_STRING;
920 tsvalue(&index) = lua_createstring("n");1060 tsvalue(&index) = lua_createstring("n");
921 tag(&extra) = LUA_T_NUMBER;1061 ttype(&extra) = LUA_T_NUMBER;
922 nvalue(&extra) = nvararg;1062 nvalue(&extra) = nvararg;
923 *(lua_hashdefine(avalue(&arg), &index)) = extra;1063 *(lua_hashdefine(avalue(&arg), &index)) = extra;
924 }1064 }
@@ -942,22 +1082,22 @@ static StkId lua_execute (Byte *pc, StkId base) · 17 unmodified lines
942 OpCode opcode;1082 OpCode opcode;
943 switch (opcode = (OpCode)*pc++)1083 switch (opcode = (OpCode)*pc++)
944 {1084 {
945 case PUSHNIL: tag(top) = LUA_T_NIL; incr_top; break;1085 case PUSHNIL: ttype(top) = LUA_T_NIL; incr_top; break;
946 1086
947 case PUSH0: case PUSH1: case PUSH2:1087 case PUSH0: case PUSH1: case PUSH2:
948 tag(top) = LUA_T_NUMBER;1088 ttype(top) = LUA_T_NUMBER;
949 nvalue(top) = opcode-PUSH0;1089 nvalue(top) = opcode-PUSH0;
950 incr_top;1090 incr_top;
951 break;1091 break;
952 1092
953 case PUSHBYTE: 1093 case PUSHBYTE:
954 tag(top) = LUA_T_NUMBER; nvalue(top) = *pc++; incr_top; break;1094 ttype(top) = LUA_T_NUMBER; nvalue(top) = *pc++; incr_top; break;
955 1095
956 case PUSHWORD:1096 case PUSHWORD:
957 {1097 {
958 Word w;1098 Word w;
959 get_word(w,pc);1099 get_word(w,pc);
960 tag(top) = LUA_T_NUMBER; nvalue(top) = w;1100 ttype(top) = LUA_T_NUMBER; nvalue(top) = w;
961 incr_top;1101 incr_top;
962 }1102 }
963 break;1103 break;
@@ -966,7 +1106,7 @@ static StkId lua_execute (Byte *pc, StkId base) · 2 unmodified lines
966 {1106 {
967 real num;1107 real num;
968 get_float(num,pc);1108 get_float(num,pc);
969 tag(top) = LUA_T_NUMBER; nvalue(top) = num;1109 ttype(top) = LUA_T_NUMBER; nvalue(top) = num;
970 incr_top;1110 incr_top;
971 }1111 }
972 break;1112 break;
@@ -975,7 +1115,7 @@ static StkId lua_execute (Byte *pc, StkId base) · 2 unmodified lines
975 {1115 {
976 Word w;1116 Word w;
977 get_word(w,pc);1117 get_word(w,pc);
978 tag(top) = LUA_T_STRING; tsvalue(top) = lua_constant[w];1118 ttype(top) = LUA_T_STRING; tsvalue(top) = lua_constant[w];
979 incr_top;1119 incr_top;
980 }1120 }
981 break;1121 break;
@@ -985,7 +1125,7 @@ static StkId lua_execute (Byte *pc, StkId base) · 3 unmodified lines
985 TFunc *f;1125 TFunc *f;
986 get_code(f,pc);1126 get_code(f,pc);
987 luaI_insertfunction(f); /* may take part in GC */1127 luaI_insertfunction(f); /* may take part in GC */
988 top->tag = LUA_T_FUNCTION;1128 top->ttype = LUA_T_FUNCTION;
989 top->value.tf = f;1129 top->value.tf = f;
990 incr_top;1130 incr_top;
991 }1131 }
@@ -1013,10 +1153,10 @@ static StkId lua_execute (Byte *pc, StkId base) · 21 unmodified lines
1013 1153
1014 case PUSHSELF:1154 case PUSHSELF:
1015 {1155 {
1016 Object receiver = *(top-1);1156 TObject receiver = *(top-1);
1017 Word w;1157 Word w;
1018 get_word(w,pc);1158 get_word(w,pc);
1019 tag(top) = LUA_T_STRING; tsvalue(top) = lua_constant[w];1159 ttype(top) = LUA_T_STRING; tsvalue(top) = lua_constant[w];
1020 incr_top;1160 incr_top;
1021 pushsubscript();1161 pushsubscript();
1022 *top = receiver;1162 *top = receiver;
@@ -1037,47 +1177,32 @@ static StkId lua_execute (Byte *pc, StkId base) · 14 unmodified lines
1037 {1177 {
1038 Word w;1178 Word w;
1039 get_word(w,pc);1179 get_word(w,pc);
1040 s_object(w) = *(--top);1180 setglobal(w);
1041 }1181 }
1042 break;1182 break;
1043 1183
1044 case STOREINDEXED0:1184 case STOREINDEXED0:
1045 storesubscript();1185 storesubscript(top-3, 1);
1046 break;1186 break;
1047 1187
1048 case STOREINDEXED:1188 case STOREINDEXED: {
1049 {1189 int n = *pc++;
1050 int n = *pc++;1190 storesubscript(top-3-n, 2);
1051 if (tag(top-3-n) != LUA_T_ARRAY)1191 break;
1052 {
1053 lua_checkstack(top+2);
1054 *(top+1) = *(top-1);
1055 *(top) = *(top-2-n);
1056 *(top-1) = *(top-3-n);
1057 top += 2;
1058 callFB(FB_SETTABLE);
1059 }
1060 else
1061 {
1062 Object *h = lua_hashdefine (avalue(top-3-n), top-2-n);
1063 *h = *(top-1);
1064 top--;
1065 }
1066 }1192 }
1067 break;
1068 1193
1069 case STORELIST0:1194 case STORELIST0:
1070 case STORELIST:1195 case STORELIST:
1071 {1196 {
1072 int m, n;1197 int m, n;
1073 Object *arr;1198 TObject *arr;
1074 if (opcode == STORELIST0) m = 0;1199 if (opcode == STORELIST0) m = 0;
1075 else m = *(pc++) * FIELDS_PER_FLUSH;1200 else m = *(pc++) * FIELDS_PER_FLUSH;
1076 n = *(pc++);1201 n = *(pc++);
1077 arr = top-n-1;1202 arr = top-n-1;
1078 while (n)1203 while (n)
1079 {1204 {
1080 tag(top) = LUA_T_NUMBER; nvalue(top) = n+m;1205 ttype(top) = LUA_T_NUMBER; nvalue(top) = n+m;
1081 *(lua_hashdefine (avalue(arr), top)) = *(top-1);1206 *(lua_hashdefine (avalue(arr), top)) = *(top-1);
1082 top--;1207 top--;
1083 n--;1208 n--;
@@ -1085,15 +1210,15 @@ static StkId lua_execute (Byte *pc, StkId base) · 1 unmodified line
1085 }1210 }
1086 break;1211 break;
1087 1212
1088 case STORERECORD:1213 case STORERECORD: /* opcode obsolete: supersed by STOREMAP */
1089 {1214 {
1090 int n = *(pc++);1215 int n = *(pc++);
1091 Object *arr = top-n-1;1216 TObject *arr = top-n-1;
1092 while (n)1217 while (n)
1093 {1218 {
1094 Word w;1219 Word w;
1095 get_word(w,pc);1220 get_word(w,pc);
1096 tag(top) = LUA_T_STRING; tsvalue(top) = lua_constant[w];1221 ttype(top) = LUA_T_STRING; tsvalue(top) = lua_constant[w];
1097 *(lua_hashdefine (avalue(arr), top)) = *(top-1);1222 *(lua_hashdefine (avalue(arr), top)) = *(top-1);
1098 top--;1223 top--;
1099 n--;1224 n--;
@@ -1101,13 +1226,25 @@ static StkId lua_execute (Byte *pc, StkId base) · 1 unmodified line
1101 }1226 }
1102 break;1227 break;
1103 1228
1229 case STOREMAP: {
1230 int n = *(pc++);
1231 TObject *arr = top-(2*n)-1;
1232 while (n--) {
1233 *(lua_hashdefine (avalue(arr), top-2)) = *(top-1);
1234 top-=2;
1235 }
1236 }
1237 break;
1238
1104 case ADJUST0:1239 case ADJUST0:
1105 adjust_top(base);1240 adjust_top(base);
1106 break;1241 break;
1107 1242
1108 case ADJUST:1243 case ADJUST: {
1109 adjust_top(base + *(pc++));1244 StkId newtop = base + *(pc++);
1245 adjust_top(newtop);
1110 break;1246 break;
1247 }
1111 1248
1112 case VARARGS:1249 case VARARGS:
1113 adjust_varargs(base + *(pc++));1250 adjust_varargs(base + *(pc++));
@@ -1118,7 +1255,7 @@ static StkId lua_execute (Byte *pc, StkId base) · 4 unmodified lines
1118 Word size;1255 Word size;
1119 get_word(size,pc);1256 get_word(size,pc);
1120 avalue(top) = lua_createarray(size);1257 avalue(top) = lua_createarray(size);
1121 tag(top) = LUA_T_ARRAY;1258 ttype(top) = LUA_T_ARRAY;
1122 incr_top;1259 incr_top;
1123 }1260 }
1124 break;1261 break;
@@ -1127,33 +1264,33 @@ static StkId lua_execute (Byte *pc, StkId base) · 2 unmodified lines
1127 {1264 {
1128 int res = lua_equalObj(top-2, top-1);1265 int res = lua_equalObj(top-2, top-1);
1129 --top;1266 --top;
1130 tag(top-1) = res ? LUA_T_NUMBER : LUA_T_NIL;1267 ttype(top-1) = res ? LUA_T_NUMBER : LUA_T_NIL;
1131 nvalue(top-1) = 1;1268 nvalue(top-1) = 1;
1132 }1269 }
1133 break;1270 break;
1134 1271
1135 case LTOP:1272 case LTOP:
1136 comparison(LUA_T_NUMBER, LUA_T_NIL, LUA_T_NIL, "lt");1273 comparison(LUA_T_NUMBER, LUA_T_NIL, LUA_T_NIL, IM_LT);
1137 break;1274 break;
1138 1275
1139 case LEOP:1276 case LEOP:
1140 comparison(LUA_T_NUMBER, LUA_T_NUMBER, LUA_T_NIL, "le");1277 comparison(LUA_T_NUMBER, LUA_T_NUMBER, LUA_T_NIL, IM_LE);
1141 break;1278 break;
1142 1279
1143 case GTOP:1280 case GTOP:
1144 comparison(LUA_T_NIL, LUA_T_NIL, LUA_T_NUMBER, "gt");1281 comparison(LUA_T_NIL, LUA_T_NIL, LUA_T_NUMBER, IM_GT);
1145 break;1282 break;
1146 1283
1147 case GEOP:1284 case GEOP:
1148 comparison(LUA_T_NIL, LUA_T_NUMBER, LUA_T_NUMBER, "ge");1285 comparison(LUA_T_NIL, LUA_T_NUMBER, LUA_T_NUMBER, IM_GE);
1149 break;1286 break;
1150 1287
1151 case ADDOP:1288 case ADDOP:
1152 {1289 {
1153 Object *l = top-2;1290 TObject *l = top-2;
1154 Object *r = top-1;1291 TObject *r = top-1;
1155 if (tonumber(r) || tonumber(l))1292 if (tonumber(r) || tonumber(l))
1156 call_arith("add");1293 call_arith(IM_ADD);
1157 else1294 else
1158 {1295 {
1159 nvalue(l) += nvalue(r);1296 nvalue(l) += nvalue(r);
@@ -1164,10 +1301,10 @@ static StkId lua_execute (Byte *pc, StkId base) · 4 unmodified lines
1164 1301
1165 case SUBOP:1302 case SUBOP:
1166 {1303 {
1167 Object *l = top-2;1304 TObject *l = top-2;
1168 Object *r = top-1;1305 TObject *r = top-1;
1169 if (tonumber(r) || tonumber(l))1306 if (tonumber(r) || tonumber(l))
1170 call_arith("sub");1307 call_arith(IM_SUB);
1171 else1308 else
1172 {1309 {
1173 nvalue(l) -= nvalue(r);1310 nvalue(l) -= nvalue(r);
@@ -1178,10 +1315,10 @@ static StkId lua_execute (Byte *pc, StkId base) · 4 unmodified lines
1178 1315
1179 case MULTOP:1316 case MULTOP:
1180 {1317 {
1181 Object *l = top-2;1318 TObject *l = top-2;
1182 Object *r = top-1;1319 TObject *r = top-1;
1183 if (tonumber(r) || tonumber(l))1320 if (tonumber(r) || tonumber(l))
1184 call_arith("mul");1321 call_arith(IM_MUL);
1185 else1322 else
1186 {1323 {
1187 nvalue(l) *= nvalue(r);1324 nvalue(l) *= nvalue(r);
@@ -1192,10 +1329,10 @@ static StkId lua_execute (Byte *pc, StkId base) · 4 unmodified lines
1192 1329
1193 case DIVOP:1330 case DIVOP:
1194 {1331 {
1195 Object *l = top-2;1332 TObject *l = top-2;
1196 Object *r = top-1;1333 TObject *r = top-1;
1197 if (tonumber(r) || tonumber(l))1334 if (tonumber(r) || tonumber(l))
1198 call_arith("div");1335 call_arith(IM_DIV);
1199 else1336 else
1200 {1337 {
1201 nvalue(l) /= nvalue(r);1338 nvalue(l) /= nvalue(r);
@@ -1205,36 +1342,34 @@ static StkId lua_execute (Byte *pc, StkId base) · 3 unmodified lines
1205 break;1342 break;
1206 1343
1207 case POWOP:1344 case POWOP:
1208 call_arith("pow");1345 call_arith(IM_POW);
1209 break;1346 break;
1210 1347
1211 case CONCOP:1348 case CONCOP: {
1212 {1349 TObject *l = top-2;
1213 Object *l = top-2;1350 TObject *r = top-1;
1214 Object *r = top-1;1351 if (tostring(l) || tostring(r))
1215 if (tostring(r) || tostring(l))1352 call_binTM(IM_CONCAT, "unexpected type for concatenation");
1216 callFB(FB_CONCAT);1353 else {
1217 else1354 tsvalue(l) = lua_createstring(lua_strconc(svalue(l),svalue(r)));
1218 {1355 --top;
1219 tsvalue(l) = lua_createstring (lua_strconc(svalue(l),svalue(r)));1356 }
1220 --top;
1221 }
1222 }1357 }
1223 break;1358 break;
1224 1359
1225 case MINUSOP:1360 case MINUSOP:
1226 if (tonumber(top-1))1361 if (tonumber(top-1))
1227 {1362 {
1228 tag(top) = LUA_T_NIL;1363 ttype(top) = LUA_T_NIL;
1229 incr_top;1364 incr_top;
1230 call_arith("unm");1365 call_arith(IM_UNM);
1231 }1366 }
1232 else1367 else
1233 nvalue(top-1) = - nvalue(top-1);1368 nvalue(top-1) = - nvalue(top-1);
1234 break;1369 break;
1235 1370
1236 case NOTOP:1371 case NOTOP:
1237 tag(top-1) = (tag(top-1) == LUA_T_NIL) ? LUA_T_NUMBER : LUA_T_NIL;1372 ttype(top-1) = (ttype(top-1) == LUA_T_NIL) ? LUA_T_NUMBER : LUA_T_NIL;
1238 nvalue(top-1) = 1;1373 nvalue(top-1) = 1;
1239 break;1374 break;
1240 1375
@@ -1242,15 +1377,15 @@ static StkId lua_execute (Byte *pc, StkId base) · 1 unmodified line
1242 {1377 {
1243 Word w;1378 Word w;
1244 get_word(w,pc);1379 get_word(w,pc);
1245 if (tag(top-1) != LUA_T_NIL) pc += w;1380 if (ttype(top-1) != LUA_T_NIL) pc += w;
1246 }1381 }
1247 break;1382 break;
1248 1383
1249 case ONFJMP: 1384 case ONFJMP:
1250 {1385 {
1251 Word w;1386 Word w;
1252 get_word(w,pc);1387 get_word(w,pc);
1253 if (tag(top-1) == LUA_T_NIL) pc += w;1388 if (ttype(top-1) == LUA_T_NIL) pc += w;
1254 }1389 }
1255 break;1390 break;
1256 1391
@@ -1275,7 +1410,7 @@ static StkId lua_execute (Byte *pc, StkId base) · 18 unmodified lines
1275 Word w;1410 Word w;
1276 get_word(w,pc);1411 get_word(w,pc);
1277 top--;1412 top--;
1278 if (tag(top) == LUA_T_NIL) pc += w;1413 if (ttype(top) == LUA_T_NIL) pc += w;
1279 }1414 }
1280 break;1415 break;
1281 1416
@@ -1284,7 +1419,7 @@ static StkId lua_execute (Byte *pc, StkId base) · 2 unmodified lines
1284 Word w;1419 Word w;
1285 get_word(w,pc);1420 get_word(w,pc);
1286 top--;1421 top--;
1287 if (tag(top) == LUA_T_NIL) pc -= w;1422 if (ttype(top) == LUA_T_NIL) pc -= w;
1288 }1423 }
1289 break;1424 break;
1290 1425
@@ -1309,12 +1444,12 @@ static StkId lua_execute (Byte *pc, StkId base) · 18 unmodified lines
1309 {1444 {
1310 Word line;1445 Word line;
1311 get_word(line,pc);1446 get_word(line,pc);
1312 if ((stack+base-1)->tag != LUA_T_LINE)1447 if ((stack+base-1)->ttype != LUA_T_LINE)
1313 {1448 {
1314 /* open space for LINE value */1449 /* open space for LINE value */
1315 open_stack((top-stack)-base);1450 open_stack((top-stack)-base);
1316 base++;1451 base++;
1317 (stack+base-1)->tag = LUA_T_LINE;1452 (stack+base-1)->ttype = LUA_T_LINE;
1318 }1453 }
1319 (stack+base-1)->value.i = line;1454 (stack+base-1)->value.i = line;
1320 if (lua_linehook)1455 if (lua_linehook)
@@ -1328,3 +1463,16 @@ static StkId lua_execute (Byte *pc, StkId base) · 7 unmodified lines
1328 }1463 }
1329}1464}
1330 1465
1466
1467#if COMPAT2_5
1468/*
1469** API: set a function as a fallback
1470*/
1471lua_Object lua_setfallback (char *name, lua_CFunction fallback)
1472{
1473 lua_pushstring(name);
1474 lua_pushcfunction(fallback);
1475 do_unprotectedrun(luaI_setfallback, 2, 1);
1476 return put_luaObjectonTop();
1477}
1478#endif
src/opcode.h+46−25
@@ -1,6 +1,6 @@
1/*1/*
2** TeCGraf - PUC-Rio2** TeCGraf - PUC-Rio
3** $Id: opcode.h,v 3.24 1996/11/01 12:46:59 roberto Exp $3** $Id: opcode.h,v 3.34 1997/06/16 16:50:22 roberto Exp $
4*/4*/
5 5
6#ifndef opcode_h6#ifndef opcode_h
@@ -14,6 +14,28 @@ · 7 unmodified lines
14 14
15#define FIELDS_PER_FLUSH 4015#define FIELDS_PER_FLUSH 40
16 16
17/*
18* WARNING: if you change the order of this enumeration,
19* grep "ORDER LUA_T"
20*/
21typedef enum
22{
23 LUA_T_NIL = -9,
24 LUA_T_NUMBER = -8,
25 LUA_T_STRING = -7,
26 LUA_T_ARRAY = -6, /* array==table */
27 LUA_T_FUNCTION = -5,
28 LUA_T_CFUNCTION= -4,
29 LUA_T_MARK = -3,
30 LUA_T_CMARK = -2,
31 LUA_T_LINE = -1,
32 LUA_T_USERDATA = 0
33} lua_Type;
34
35#define NUM_TYPES 10
36
37
38extern char *luaI_typenames[];
17 39
18typedef enum {40typedef enum {
19/* name parm before after side effect41/* name parm before after side effect
@@ -38,7 +60,7 @@ PUSHLOCAL6,/* - LOC[6] */ · 18 unmodified lines
38PUSHLOCAL7,/* - LOC[7] */60PUSHLOCAL7,/* - LOC[7] */
39PUSHLOCAL8,/* - LOC[8] */61PUSHLOCAL8,/* - LOC[8] */
40PUSHLOCAL9,/* - LOC[9] */62PUSHLOCAL9,/* - LOC[9] */
41PUSHLOCAL,/* w - LOC[w] */63PUSHLOCAL,/* b - LOC[b] */
42PUSHGLOBAL,/* w - VAR[w] */64PUSHGLOBAL,/* w - VAR[w] */
43PUSHINDEXED,/* i t t[i] */65PUSHINDEXED,/* i t t[i] */
44PUSHSELF,/* w t t t[STR[w]] */66PUSHSELF,/* w t t t[STR[w]] */
@@ -52,14 +74,14 @@ STORELOCAL6,/* x - LOC[6]=x */ · 7 unmodified lines
52STORELOCAL7,/* x - LOC[7]=x */74STORELOCAL7,/* x - LOC[7]=x */
53STORELOCAL8,/* x - LOC[8]=x */75STORELOCAL8,/* x - LOC[8]=x */
54STORELOCAL9,/* x - LOC[9]=x */76STORELOCAL9,/* x - LOC[9]=x */
55STORELOCAL,/* w x - LOC[w]=x */77STORELOCAL,/* b x - LOC[b]=x */
56STOREGLOBAL,/* w x - VAR[w]=x */78STOREGLOBAL,/* w x - VAR[w]=x */
57STOREINDEXED0,/* v i t - t[i]=v */79STOREINDEXED0,/* v i t - t[i]=v */
58STOREINDEXED,/* b v a_b...a_1 i t a_b...a_1 i t t[i]=v */80STOREINDEXED,/* b v a_b...a_1 i t a_b...a_1 i t t[i]=v */
59STORELIST0,/* w v_w...v_1 t - t[i]=v_i */81STORELIST0,/* b v_b...v_1 t - t[i]=v_i */
60STORELIST,/* w n v_w...v_1 t - t[i+n*FPF]=v_i */82STORELIST,/* b c v_b...v_1 t - t[i+c*FPF]=v_i */
61STORERECORD,/* n83STORERECORD,/* b
62 w_n...w_1 v_n...v_1 t - t[STR[w_i]]=v_i */84 w_b...w_1 v_b...v_1 t - t[STR[w_i]]=v_i */
63ADJUST0,/* - - TOP=BASE */85ADJUST0,/* - - TOP=BASE */
64ADJUST,/* b - - TOP=BASE+b */86ADJUST,/* b - - TOP=BASE+b */
65CREATEARRAY,/* w - newarray(size = w) */87CREATEARRAY,/* w - newarray(size = w) */
@@ -76,19 +98,19 @@ POWOP,/* y x x^y */ · 10 unmodified lines
76CONCOP,/* y x x..y */98CONCOP,/* y x x..y */
77MINUSOP,/* x -x */99MINUSOP,/* x -x */
78NOTOP,/* x (x==nil)? 1 : nil */100NOTOP,/* x (x==nil)? 1 : nil */
79ONTJMP,/* w x - (x!=nil)? PC+=w */101ONTJMP,/* w x - (x!=nil)? PC+=w */
80ONFJMP,/* w x - (x==nil)? PC+=w */102ONFJMP,/* w x - (x==nil)? PC+=w */
81JMP,/* w - - PC+=w */103JMP,/* w - - PC+=w */
82UPJMP,/* w - - PC-=w */104UPJMP,/* w - - PC-=w */
83IFFJMP,/* w x - (x==nil)? PC+=w */105IFFJMP,/* w x - (x==nil)? PC+=w */
84IFFUPJMP,/* w x - (x==nil)? PC-=w */106IFFUPJMP,/* w x - (x==nil)? PC-=w */
85POP,/* x - */107POP,/* x - */
86CALLFUNC,/* n m v_n...v_1 f r_m...r_1 f(v1,...,v_n) */108CALLFUNC,/* b c v_b...v_1 f r_c...r_1 f(v1,...,v_b) */
87RETCODE0,109RETCODE0,
88RETCODE,/* b - - */110RETCODE,/* b - - */
89SETLINE,/* w - - LINE=w */111SETLINE,/* w - - LINE=w */
90VARARGS/* b v_n...v_1 {v_1...v_n;n=n} */112VARARGS,/* b v_b...v_1 {v_1...v_b;n=b} */
91 113STOREMAP/* b v_b k_b ...v_1 k_1 t - t[k_i]=v_i */
92} OpCode;114} OpCode;
93 115
94 116
@@ -102,29 +124,27 @@ typedef union · 7 unmodified lines
102 TaggedString *ts;124 TaggedString *ts;
103 TFunc *tf;125 TFunc *tf;
104 struct Hash *a;126 struct Hash *a;
105 void *u;
106 int i;127 int i;
107} Value;128} Value;
108 129
109typedef struct Object130typedef struct TObject
110{131{
111 lua_Type tag;132 lua_Type ttype;
112 Value value;133 Value value;
113} Object;134} TObject;
114 135
115 136
116/* Macros to access structure members */137/* Macros to access structure members */
117#define tag(o) ((o)->tag)138#define ttype(o) ((o)->ttype)
118#define nvalue(o) ((o)->value.n)139#define nvalue(o) ((o)->value.n)
119#define svalue(o) ((o)->value.ts->str)140#define svalue(o) ((o)->value.ts->str)
120#define tsvalue(o) ((o)->value.ts)141#define tsvalue(o) ((o)->value.ts)
121#define avalue(o) ((o)->value.a)142#define avalue(o) ((o)->value.a)
122#define fvalue(o) ((o)->value.f)143#define fvalue(o) ((o)->value.f)
123#define uvalue(o) ((o)->value.u)
124 144
125/* Macros to access symbol table */145/* Macros to access symbol table */
126#define s_object(i) (lua_table[i].object)146#define s_object(i) (lua_table[i].object)
127#define s_tag(i) (tag(&s_object(i)))147#define s_ttype(i) (ttype(&s_object(i)))
128#define s_nvalue(i) (nvalue(&s_object(i)))148#define s_nvalue(i) (nvalue(&s_object(i)))
129#define s_svalue(i) (svalue(&s_object(i)))149#define s_svalue(i) (svalue(&s_object(i)))
130#define s_tsvalue(i) (tsvalue(&s_object(i)))150#define s_tsvalue(i) (tsvalue(&s_object(i)))
@@ -141,10 +161,11 @@ typedef struct Object · 10 unmodified lines
141/* Exported functions */161/* Exported functions */
142void lua_parse (TFunc *tf); /* from "lua.stx" module */162void lua_parse (TFunc *tf); /* from "lua.stx" module */
143void luaI_codedebugline (int line); /* from "lua.stx" module */163void luaI_codedebugline (int line); /* from "lua.stx" module */
144void lua_travstack (int (*fn)(Object *));164void lua_travstack (int (*fn)(TObject *));
145Object *luaI_Address (lua_Object o);165TObject *luaI_Address (lua_Object o);
146void luaI_pushobject (Object *o);166void luaI_pushobject (TObject *o);
147void luaI_gcFB (Object *o);167void luaI_gcIM (TObject *o);
148int luaI_dorun (TFunc *tf);168int luaI_dorun (TFunc *tf);
169int lua_domain (void);
149 170
150#endif171#endif
src/parser.c+344−316
@@ -10,14 +10,14 @@ static char luaY_sccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; · 9 unmodified lines
10#define YYPREFIX "luaY_"10#define YYPREFIX "luaY_"
11#line 2 "lua.stx"11#line 2 "lua.stx"
12 12
13char *rcs_luastx = "$Id: parser.c,v 1.1 1996/11/21 16:11:40 lhf Exp $";13char *rcs_luastx = "$Id: parser.c,v 1.1 1997/06/30 18:59:03 lhf Exp $";
14 14
15#include <stdio.h>15#include <stdio.h>
16#include <stdlib.h>16#include <stdlib.h>
17#include <string.h>17#include <string.h>
18 18
19#include "luadebug.h"19#include "luadebug.h"
20#include "mem.h"20#include "luamem.h"
21#include "lex.h"21#include "lex.h"
22#include "opcode.h"22#include "opcode.h"
23#include "hash.h"23#include "hash.h"
@@ -60,8 +60,6 @@ static TaggedString *localvar[MAXLOCALS]; /* store local variable names */ · 36 unmodified lines
60static int nlocalvar=0; /* number of local variables */60static int nlocalvar=0; /* number of local variables */
61 61
62#define MAXFIELDS FIELDS_PER_FLUSH*262#define MAXFIELDS FIELDS_PER_FLUSH*2
63static Word fields[MAXFIELDS]; /* fieldnames to be flushed */
64static int nfields=0;
65 63
66int lua_debug = 0;64int lua_debug = 0;
67 65
@@ -113,22 +111,11 @@ static void code_word_at (Byte *p, int n) · 45 unmodified lines
113 memcpy(p, &w, sizeof(Word));111 memcpy(p, &w, sizeof(Word));
114}112}
115 113
116static void push_field (Word name)
117{
118 if (nfields < MAXFIELDS)
119 fields[nfields++] = name;
120 else
121 luaY_error ("too many fields in nested constructors");
122}
123
124static void flush_record (int n)114static void flush_record (int n)
125{115{
126 int i;
127 if (n == 0) return;116 if (n == 0) return;
128 code_byte(STORERECORD);117 code_byte(STOREMAP);
129 code_byte(n);118 code_byte(n);
130 for (i=0; i<n; i++)
131 code_word(fields[--nfields]);
132}119}
133 120
134static void flush_list (int m, int n)121static void flush_list (int m, int n)
@@ -171,11 +158,22 @@ static void add_varbuffer (Long var) · 36 unmodified lines
171 luaY_error ("variable buffer overflow");158 luaY_error ("variable buffer overflow");
172}159}
173 160
161static void code_string (Word w)
162{
163 code_byte(PUSHSTRING);
164 code_word(w);
165}
166
167static void code_constant (TaggedString *s)
168{
169 code_string(luaI_findconstant(s));
170}
171
174static void code_number (float f)172static void code_number (float f)
175{ 173{
176 Word i = (Word)f;174 Word i;
177 if (f == (float)i) /* f has an (short) integer value */175 if (f >= 0 && f <= (float)MAX_WORD && (float)(i=(Word)f) == f) {
178 {176 /* f has an (short) integer value */
179 if (i <= 2) code_byte(PUSH0 + i);177 if (i <= 2) code_byte(PUSH0 + i);
180 else if (i <= 255)178 else if (i <= 255)
181 {179 {
@@ -418,7 +416,7 @@ void lua_parse (TFunc *tf) · 236 unmodified lines
418}416}
419 417
420 418
421#line 414 "lua.stx"419#line 412 "lua.stx"
422typedef union 420typedef union
423{421{
424 int vInt;422 int vInt;
@@ -429,7 +427,7 @@ typedef union · 4 unmodified lines
429 TFunc *pFunc;427 TFunc *pFunc;
430 TaggedString *pTStr;428 TaggedString *pTStr;
431} YYSTYPE;429} YYSTYPE;
432#line 433 "y.tab.c"430#line 431 "y.tab.c"
433#define WRONGTOKEN 257431#define WRONGTOKEN 257
434#define NIL 258432#define NIL 258
435#define IF 259433#define IF 259
@@ -467,8 +465,9 @@ short luaY_lhs[] = { -1, · 31 unmodified lines
467 38, 5, 39, 5, 40, 37, 4, 8, 8, 7,465 38, 5, 39, 5, 40, 37, 4, 8, 8, 7,
468 7, 2, 2, 3, 41, 3, 17, 17, 18, 18,466 7, 2, 2, 3, 41, 3, 17, 17, 18, 18,
469 19, 19, 42, 9, 9, 14, 14, 43, 43, 12,467 19, 19, 42, 9, 9, 14, 14, 43, 43, 12,
470 12, 13, 13, 44, 15, 15, 16, 16, 6, 6,468 12, 13, 13, 44, 45, 45, 15, 15, 16, 16,
471 20, 20, 20, 21, 29, 10, 10, 11, 11,469 6, 6, 20, 20, 20, 21, 29, 10, 10, 11,
470 11,
472};471};
473short luaY_len[] = { 2,472short luaY_len[] = { 2,
474 2, 0, 3, 2, 3, 1, 3, 5, 0, 3,473 2, 0, 3, 2, 3, 1, 3, 5, 0, 3,
@@ -479,113 +478,114 @@ short luaY_len[] = { 2, · 4 unmodified lines
479 0, 5, 0, 5, 0, 4, 2, 1, 3, 3,478 0, 5, 0, 5, 0, 4, 2, 1, 3, 3,
480 1, 0, 1, 1, 0, 4, 0, 1, 1, 3,479 1, 0, 1, 1, 0, 4, 0, 1, 1, 3,
481 1, 1, 0, 3, 2, 0, 2, 0, 1, 0,480 1, 1, 0, 3, 2, 0, 2, 0, 1, 0,
482 2, 1, 3, 3, 0, 2, 1, 3, 1, 3,481 2, 1, 3, 3, 3, 1, 0, 2, 1, 3,
483 1, 4, 3, 1, 1, 1, 3, 0, 2,482 1, 3, 1, 4, 3, 1, 1, 1, 3, 0,
483 2,
484};484};
485short luaY_defred[] = { 2,485short luaY_defred[] = { 2,
486 0, 0, 0, 14, 16, 0, 0, 0, 94, 19,486 0, 0, 0, 14, 16, 0, 0, 0, 96, 19,
487 0, 0, 0, 91, 1, 0, 4, 0, 48, 46,487 0, 0, 0, 93, 1, 0, 4, 0, 48, 46,
488 47, 0, 0, 0, 49, 29, 95, 0, 0, 44,488 47, 0, 0, 0, 49, 29, 97, 0, 0, 44,
489 0, 0, 24, 0, 0, 0, 0, 96, 0, 0,489 0, 0, 24, 0, 0, 0, 0, 98, 0, 0,
490 0, 0, 0, 0, 0, 57, 61, 12, 3, 0,490 0, 0, 0, 0, 0, 57, 61, 12, 3, 0,
491 0, 0, 0, 0, 0, 28, 28, 28, 0, 0,491 0, 0, 0, 0, 0, 28, 28, 28, 0, 0,
492 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,492 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
493 0, 0, 0, 9, 27, 65, 0, 0, 20, 0,493 0, 0, 0, 9, 27, 65, 0, 0, 20, 0,
494 5, 0, 0, 0, 0, 0, 59, 0, 93, 30,494 5, 0, 0, 0, 0, 0, 59, 0, 95, 30,
495 24, 51, 53, 0, 0, 0, 0, 0, 0, 0,495 24, 51, 53, 0, 0, 0, 0, 0, 0, 0,
496 0, 0, 0, 0, 0, 0, 0, 0, 73, 0,496 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,
497 0, 82, 28, 0, 0, 0, 0, 97, 72, 71,497 0, 0, 82, 0, 28, 0, 0, 0, 0, 99,
498 0, 0, 69, 7, 60, 92, 28, 0, 0, 0,498 72, 71, 0, 0, 69, 7, 60, 94, 28, 0,
499 56, 0, 75, 0, 0, 86, 24, 0, 25, 0,499 0, 0, 56, 0, 75, 0, 0, 88, 0, 24,
500 0, 24, 0, 0, 0, 0, 0, 0, 83, 0,500 0, 25, 0, 0, 24, 0, 0, 0, 0, 85,
501 74, 0, 28, 17, 10, 0, 70, 24, 0, 0,501 86, 83, 0, 74, 0, 0, 28, 17, 10, 0,
502 77, 0, 0, 8, 22, 0, 13, 81, 15, 28,502 70, 24, 0, 0, 77, 0, 0, 8, 22, 0,
503 24, 28, 0, 23,503 13, 81, 15, 28, 24, 28, 0, 23,
504};504};
505short luaY_dgoto[] = { 1,505short luaY_dgoto[] = { 1,
506 91, 34, 35, 25, 26, 11, 46, 12, 107, 39,506 91, 34, 35, 25, 26, 11, 46, 12, 108, 39,
507 79, 161, 108, 151, 109, 110, 121, 122, 123, 27,507 79, 165, 109, 154, 110, 111, 123, 124, 125, 27,
508 14, 41, 81, 2, 15, 16, 49, 17, 28, 73,508 14, 41, 81, 2, 15, 16, 49, 17, 28, 73,
509 115, 37, 160, 32, 33, 74, 30, 128, 129, 31,509 117, 37, 164, 32, 33, 74, 30, 130, 131, 31,
510 116, 134, 133, 112,510 118, 136, 135, 113, 114,
511};511};
512short luaY_sindex[] = { 0,512short luaY_sindex[] = { 0,
513 0, 332, -38, 0, 0, -38, -239, -223, 0, 0,513 0, 288, -34, 0, 0, -34, -238, -223, 0, 0,
514 -23, 17, 0, 0, 0, 3, 0, 137, 0, 0,514 -6, 22, 0, 0, 0, 14, 0, 150, 0, 0,
515 0, -38, -38, -38, 0, 0, 0, 137, 547, 0,515 0, -34, -34, -34, 0, 0, 0, 150, 547, 0,
516 -25, -38, 0, 3, 45, 0, 212, 0, -22, 0,516 -46, -34, 0, 14, 34, 0, 212, 0, -5, 0,
517 52, 140, -38, -223, -38, 0, 0, 0, 0, -166,517 39, 156, -34, -223, -34, 0, 0, 0, 0, -194,
518 -38, -154, 40, 40, 102, 0, 0, 0, -38, -38,518 -34, -193, -4, -4, 48, 0, 0, 0, -34, -34,
519 -38, -38, -38, -38, -38, -38, -38, -38, -38, -38,519 -34, -34, -34, -34, -34, -34, -34, -34, -34, -34,
520 -34, 481, -130, 0, 0, 0, -38, -129, 0, -194,520 -38, 481, -173, 0, 0, 0, -34, -146, 0, -234,
521 0, -123, 45, 0, -17, 103, 0, 753, 0, 0,521 0, -138, 34, 0, -15, 96, 0, 753, 0, 0,
522 0, 0, 0, -30, -30, -30, -30, -30, -30, 95,522 0, 0, 0, -30, -30, -30, -30, -30, -30, -20,
523 11, 11, 40, 40, 40, 97, 41, 123, 0, 124,523 -12, -12, -4, -4, -4, 0, -34, 16, 95, 0,
524 212, 0, 0, -38, -59, -38, 45, 0, 0, 0,524 98, 212, 0, 82, 0, -34, 328, -34, 34, 0,
525 128, 131, 0, 0, 0, 0, 0, -38, -38, -38,525 0, 0, 103, 101, 0, 0, 0, 0, 0, -34,
526 0, -97, 0, 120, -38, 0, 0, 212, 0, 3,526 -34, 1181, 0, -91, 0, 92, -34, 0, -34, 0,
527 0, 0, -194, -183, 118, 118, 212, 97, 0, -97,527 212, 0, 14, 0, 0, -234, -233, 118, 118, 0,
528 0, 212, 0, 0, 0, -85, 0, 0, -38, -82,528 0, 0, -91, 0, 212, 212, 0, 0, 0, -105,
529 0, 123, -80, 0, 0, 1105, 0, 0, 0, 0,529 0, 0, -34, -103, 0, 95, -101, 0, 0, 1105,
530 0, 0, -183, 0,530 0, 0, 0, 0, 0, 0, -233, 0,
531};531};
532short luaY_rindex[] = { 0,532short luaY_rindex[] = { 0,
533 0, 191, 69, 0, 0, 173, 0, 0, 0, 0,533 0, 169, 52, 0, 0, 173, 0, 0, 0, 0,
534 0, 69, 150, 0, 0, 146, 0, -36, 0, 0,534 0, 52, 508, 0, 0, 146, 0, -36, 0, 0,
535 0, 69, 69, 69, 0, 0, 0, 1, 0, 0,535 0, 52, 52, 52, 0, 0, 0, 1, 0, 0,
536 0, 69, 0, 47, 461, 436, 0, 0, 197, 130,536 0, 52, 0, 47, 461, 436, 0, 0, 197, 76,
537 0, 0, 69, 0, -33, 0, 0, 0, 0, 0,537 0, 0, 52, 0, -32, 0, 0, 0, 0, 0,
538 69, 0, 24, 59, 1181, 0, 0, 0, 69, 69,538 52, 0, 24, 59, 1195, 0, 0, 0, 52, 52,
539 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,539 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
540 -50, 0, 0, 0, 0, 0, 69, 0, 0, 152,540 -27, 0, 0, 0, 0, 0, 52, 0, 0, 129,
541 0, 0, 311, -21, 0, 0, 0, 0, 0, 0,541 0, 0, 311, 142, 0, 0, 0, 0, 0, 0,
542 0, 0, 0, 746, 776, 799, 821, 844, 866, 505,542 0, 0, 0, 746, 776, 799, 821, 844, 866, 505,
543 383, 410, 88, 112, 359, 1174, 0, 74, 0, -40,543 383, 410, 88, 112, 359, 1174, 52, 0, 51, 0,
544 -26, 0, 0, 69, -230, 69, 921, 0, 0, 0,544 -40, -10, 0, 0, 0, 52, -153, 52, 921, 0,
545 0, 160, 0, 0, 0, 0, 0, 69, 69, 69,545 0, 0, 0, 144, 0, 0, 0, 0, 0, 52,
546 0, 77, 0, 78, -9, 0, 0, 939, 0, 289,546 52, 0, 0, 62, 0, 64, -26, 0, 52, 0,
547 474, 0, 0, -60, 894, 1137, -16, 0, 0, 89,547 939, 0, 682, 474, 0, 0, -77, 894, 1137, 0,
548 0, -10, 0, 0, 0, 0, 0, 0, 69, 0,548 0, 0, 66, 0, 13, -18, 0, 0, 0, 0,
549 0, 74, 0, 0, 0, 0, 0, 0, 0, 0,549 0, 0, 52, 0, 0, 51, 0, 0, 0, 0,
550 0, 0, -60, 0,550 0, 0, 0, 0, 0, 0, -77, 0,
551};551};
552short luaY_gindex[] = { 0,552short luaY_gindex[] = { 0,
553 -31, 171, 85, -2, 48, 0, 0, 0, 0, 0,553 53, 147, -23, 3, 134, 0, 0, 0, 0, 0,
554 0, 0, 67, 0, 0, 0, 0, 0, 75, 8,554 0, 0, 40, 0, 0, 0, 0, 0, 49, 6,
555 0, 0, 0, 0, 104, 107, -29, 0, 12, -61,555 0, 0, 0, 0, 81, 83, -16, 0, 8, -70,
556 0, 1260, 50, 0, 0, 0, 213, 0, 0, 0,556 0, 1445, 27, 0, 0, 0, 187, 0, 0, 0,
557 0, 0, -107, 94,557 0, 0, -108, 67, 0,
558};558};
559#define YYTABLESIZE 1462559#define YYTABLESIZE 1608
560short luaY_table[] = { 10,560short luaY_table[] = { 107,
561 45, 24, 136, 58, 75, 24, 22, 62, 85, 13,561 45, 24, 138, 58, 10, 24, 22, 13, 62, 18,
562 22, 68, 66, 18, 67, 40, 69, 87, 78, 42,562 22, 68, 66, 40, 67, 42, 69, 75, 78, 83,
563 44, 78, 90, 43, 95, 92, 93, 84, 52, 127,563 129, 68, 66, 43, 67, 84, 69, 162, 163, 68,
564 26, 26, 87, 88, 38, 26, 26, 43, 77, 90,564 52, 87, 79, 89, 69, 38, 121, 44, 78, 122,
565 58, 45, 45, 45, 45, 45, 11, 45, 88, 79,565 58, 45, 45, 45, 45, 45, 11, 45, 89, 84,
566 9, 84, 68, 36, 168, 85, 45, 69, 50, 45,566 9, 85, 107, 119, 43, 77, 90, 172, 50, 45,
567 45, 48, 45, 70, 43, 43, 43, 43, 43, 95,567 45, 45, 45, 70, 43, 43, 43, 43, 43, 157,
568 43, 55, 55, 51, 85, 153, 119, 158, 159, 120,568 43, 90, 48, 70, 160, 51, 71, 76, 80, 87,
569 156, 137, 43, 43, 78, 43, 58, 39, 76, 55,569 89, 70, 43, 43, 78, 43, 58, 39, 90, 70,
570 36, 80, 36, 45, 45, 144, 165, 71, 87, 50,570 55, 169, 116, 45, 45, 55, 55, 87, 79, 50,
571 50, 50, 50, 50, 70, 50, 154, 87, 84, 172,571 50, 50, 50, 50, 176, 50, 84, 26, 26, 92,
572 155, 40, 10, 55, 88, 79, 43, 50, 50, 89,572 93, 40, 26, 26, 89, 6, 43, 50, 50, 10,
573 50, 163, 13, 58, 36, 45, 18, 83, 39, 39,573 50, 97, 13, 58, 18, 45, 159, 120, 39, 39,
574 39, 39, 39, 70, 39, 114, 68, 66, 171, 67,574 39, 39, 39, 97, 39, 126, 127, 90, 134, 36,
575 173, 69, 90, 125, 118, 11, 39, 39, 43, 39,575 133, 137, 139, 145, 146, 11, 39, 39, 43, 39,
576 124, 50, 40, 40, 40, 40, 40, 130, 40, 68,576 153, 50, 40, 40, 40, 40, 40, 55, 40, 68,
577 66, 117, 67, 141, 69, 131, 132, 135, 142, 6,577 66, 168, 67, 171, 69, 173, 97, 140, 26, 67,
578 40, 40, 62, 40, 143, 95, 148, 62, 150, 61,578 40, 40, 62, 40, 55, 78, 36, 62, 36, 61,
579 39, 164, 52, 50, 167, 52, 169, 95, 70, 95,579 39, 147, 151, 50, 68, 92, 79, 97, 76, 21,
580 26, 55, 67, 89, 50, 95, 98, 82, 78, 3,580 80, 86, 166, 158, 161, 52, 100, 142, 47, 143,
581 68, 79, 76, 4, 40, 5, 21, 95, 6, 7,581 152, 52, 92, 178, 40, 0, 0, 50, 0, 167,
582 89, 70, 39, 80, 9, 86, 162, 157, 139, 19,582 36, 70, 39, 82, 0, 0, 0, 0, 0, 19,
583 95, 140, 174, 19, 47, 149, 0, 51, 0, 0,583 0, 0, 0, 19, 0, 0, 175, 0, 177, 0,
584 51, 62, 0, 20, 21, 9, 40, 20, 21, 106,584 0, 62, 97, 20, 21, 106, 40, 20, 21, 9,
585 95, 0, 0, 0, 23, 0, 0, 0, 23, 0,585 51, 0, 0, 0, 23, 0, 51, 0, 23, 0,
586 65, 0, 0, 68, 66, 98, 67, 0, 69, 45,586 65, 144, 0, 68, 66, 100, 67, 0, 69, 45,
587 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,587 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
588 45, 62, 95, 61, 45, 45, 45, 45, 45, 45,588 45, 62, 0, 61, 45, 45, 45, 45, 45, 45,
589 45, 45, 43, 43, 43, 43, 43, 43, 43, 43,589 45, 45, 43, 43, 43, 43, 43, 43, 43, 43,
590 43, 43, 43, 43, 0, 55, 0, 43, 43, 43,590 43, 43, 43, 43, 0, 55, 0, 43, 43, 43,
591 43, 43, 43, 43, 43, 70, 0, 11, 11, 0,591 43, 43, 43, 43, 43, 70, 0, 11, 11, 0,
@@ -603,25 +603,25 @@ short luaY_table[] = { 10, · 11 unmodified lines
603 41, 0, 0, 37, 0, 37, 37, 37, 0, 0,603 41, 0, 0, 37, 0, 37, 37, 37, 0, 0,
604 0, 0, 0, 62, 62, 64, 0, 0, 62, 62,604 0, 0, 0, 62, 62, 64, 0, 0, 62, 62,
605 0, 37, 37, 0, 37, 0, 0, 0, 0, 0,605 0, 37, 37, 0, 37, 0, 0, 0, 0, 0,
606 38, 41, 38, 38, 38, 98, 0, 98, 98, 98,606 38, 41, 38, 38, 38, 100, 0, 100, 100, 100,
607 63, 98, 98, 98, 98, 98, 98, 0, 38, 38,607 63, 100, 100, 100, 100, 100, 100, 0, 38, 38,
608 98, 38, 0, 66, 0, 37, 64, 29, 29, 64,608 100, 38, 0, 66, 0, 37, 64, 29, 29, 64,
609 29, 0, 29, 41, 0, 0, 57, 58, 59, 60,609 29, 0, 29, 41, 0, 0, 57, 58, 59, 60,
610 63, 64, 65, 0, 64, 29, 0, 29, 0, 0,610 63, 64, 65, 0, 64, 29, 0, 29, 0, 0,
611 0, 63, 38, 0, 42, 0, 0, 37, 0, 0,611 0, 63, 38, 0, 42, 0, 0, 37, 0, 0,
612 0, 0, 0, 0, 66, 29, 29, 66, 29, 63,612 0, 0, 0, 0, 66, 29, 29, 66, 29, 63,
613 29, 0, 68, 66, 0, 67, 0, 69, 0, 29,613 29, 0, 68, 66, 0, 67, 0, 69, 0, 29,
614 0, 0, 66, 29, 38, 29, 0, 0, 0, 0,614 0, 0, 66, 29, 38, 29, 0, 0, 0, 0,
615 62, 0, 61, 0, 0, 42, 0, 11, 42, 11,615 62, 0, 61, 0, 0, 42, 3, 97, 42, 0,
616 11, 11, 0, 11, 11, 11, 11, 11, 0, 0,616 4, 91, 5, 97, 0, 6, 7, 8, 0, 0,
617 0, 0, 11, 42, 42, 0, 42, 29, 0, 18,617 0, 9, 0, 42, 42, 97, 42, 29, 91, 18,
618 0, 18, 18, 18, 70, 18, 18, 18, 18, 18,618 0, 18, 18, 18, 70, 18, 18, 18, 18, 18,
619 18, 0, 0, 0, 18, 0, 0, 0, 68, 66,619 18, 0, 0, 0, 18, 0, 3, 0, 68, 66,
620 3, 67, 0, 69, 4, 0, 5, 42, 0, 6,620 4, 67, 5, 69, 0, 6, 7, 42, 97, 0,
621 7, 8, 0, 0, 0, 9, 62, 0, 61, 0,621 0, 9, 0, 0, 0, 0, 62, 0, 61, 0,
622 0, 0, 0, 0, 0, 0, 0, 41, 41, 41,622 0, 0, 0, 0, 0, 0, 0, 41, 41, 41,
623 41, 41, 41, 41, 41, 41, 41, 41, 41, 42,623 41, 41, 41, 41, 41, 41, 41, 41, 41, 42,
624 0, 0, 41, 41, 41, 41, 41, 41, 41, 41,624 97, 0, 41, 41, 41, 41, 41, 41, 41, 41,
625 70, 37, 37, 37, 37, 37, 37, 37, 37, 37,625 70, 37, 37, 37, 37, 37, 37, 37, 37, 37,
626 37, 37, 37, 0, 0, 0, 37, 37, 37, 37,626 37, 37, 37, 0, 0, 0, 37, 37, 37, 37,
627 37, 37, 37, 37, 0, 0, 0, 0, 38, 38,627 37, 37, 37, 37, 0, 0, 0, 0, 38, 38,
@@ -632,7 +632,7 @@ short luaY_table[] = { 10, · 4 unmodified lines
632 29, 29, 29, 29, 29, 29, 29, 0, 0, 0,632 29, 29, 29, 29, 29, 29, 29, 0, 0, 0,
633 0, 63, 63, 0, 0, 0, 63, 63, 0, 0,633 0, 63, 63, 0, 0, 0, 63, 63, 0, 0,
634 0, 0, 66, 0, 66, 66, 66, 0, 66, 66,634 0, 0, 66, 0, 66, 66, 66, 0, 66, 66,
635 66, 66, 66, 66, 113, 31, 0, 66, 29, 29,635 66, 66, 66, 66, 115, 31, 0, 66, 29, 29,
636 29, 29, 29, 29, 29, 57, 58, 59, 60, 63,636 29, 29, 29, 29, 29, 57, 58, 59, 60, 63,
637 64, 65, 0, 42, 42, 42, 42, 42, 42, 42,637 64, 65, 0, 42, 42, 42, 42, 42, 42, 42,
638 42, 42, 42, 42, 42, 34, 0, 0, 42, 42,638 42, 42, 42, 42, 42, 34, 0, 0, 42, 42,
@@ -642,7 +642,7 @@ short luaY_table[] = { 10, · 3 unmodified lines
642 0, 0, 62, 0, 61, 0, 34, 0, 0, 34,642 0, 0, 62, 0, 61, 0, 34, 0, 0, 34,
643 32, 57, 58, 59, 60, 63, 64, 65, 0, 0,643 32, 57, 58, 59, 60, 63, 64, 65, 0, 0,
644 0, 0, 0, 0, 34, 34, 0, 34, 31, 33,644 0, 0, 0, 0, 34, 34, 0, 34, 31, 33,
645 0, 0, 33, 35, 0, 126, 70, 0, 0, 0,645 0, 0, 33, 35, 0, 128, 70, 0, 0, 0,
646 0, 0, 0, 0, 0, 0, 0, 33, 33, 0,646 0, 0, 0, 0, 0, 0, 0, 33, 33, 0,
647 33, 32, 0, 0, 32, 36, 0, 0, 34, 0,647 33, 32, 0, 0, 32, 36, 0, 0, 34, 0,
648 31, 0, 0, 0, 0, 0, 0, 0, 0, 32,648 31, 0, 0, 0, 0, 0, 0, 0, 0, 32,
@@ -650,12 +650,12 @@ short luaY_table[] = { 10, · 1 unmodified line
650 0, 33, 0, 52, 0, 0, 0, 0, 0, 0,650 0, 33, 0, 52, 0, 0, 0, 0, 0, 0,
651 34, 0, 35, 35, 0, 35, 36, 0, 0, 36,651 34, 0, 35, 35, 0, 35, 36, 0, 0, 36,
652 0, 0, 0, 32, 0, 0, 0, 0, 0, 0,652 0, 0, 0, 32, 0, 0, 0, 0, 0, 0,
653 99, 0, 0, 33, 36, 36, 0, 36, 0, 0,653 101, 0, 0, 33, 36, 36, 0, 36, 0, 0,
654 0, 0, 0, 0, 52, 0, 35, 52, 28, 0,654 0, 0, 0, 0, 52, 0, 35, 52, 28, 0,
655 0, 0, 0, 0, 0, 32, 0, 0, 0, 0,655 11, 0, 11, 11, 11, 32, 11, 11, 11, 11,
656 0, 0, 52, 0, 0, 0, 0, 0, 36, 0,656 11, 0, 52, 0, 0, 11, 0, 0, 36, 0,
657 0, 0, 0, 0, 0, 0, 0, 0, 35, 0,657 0, 0, 0, 0, 0, 0, 0, 0, 35, 0,
658 0, 0, 0, 0, 0, 0, 0, 0, 0, 99,658 0, 0, 0, 0, 0, 0, 0, 0, 0, 101,
659 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,659 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,
660 36, 0, 0, 0, 0, 0, 0, 28, 0, 0,660 36, 0, 0, 0, 0, 0, 0, 28, 0, 0,
661 0, 0, 0, 0, 31, 31, 31, 31, 31, 31,661 0, 0, 0, 0, 31, 31, 31, 31, 31, 31,
@@ -675,66 +675,80 @@ short luaY_table[] = { 10, · 13 unmodified lines
675 36, 36, 36, 36, 36, 36, 68, 66, 0, 67,675 36, 36, 36, 36, 36, 36, 68, 66, 0, 67,
676 0, 69, 52, 52, 52, 52, 52, 52, 52, 52,676 0, 69, 52, 52, 52, 52, 52, 52, 52, 52,
677 52, 52, 52, 52, 62, 0, 61, 52, 52, 52,677 52, 52, 52, 52, 62, 0, 61, 52, 52, 52,
678 0, 0, 0, 0, 0, 0, 0, 54, 0, 99,678 0, 0, 0, 0, 0, 0, 0, 54, 0, 101,
679 54, 99, 99, 99, 0, 99, 99, 99, 99, 99,679 54, 101, 101, 101, 0, 101, 101, 101, 101, 101,
680 99, 0, 0, 0, 99, 54, 0, 28, 70, 28,680 101, 0, 0, 0, 101, 54, 0, 28, 70, 28,
681 28, 28, 0, 28, 28, 28, 28, 28, 28, 0,681 28, 28, 0, 28, 28, 28, 28, 28, 28, 0,
682 0, 0, 28, 94, 0, 94, 94, 94, 94, 94,682 0, 0, 28, 96, 0, 96, 96, 96, 96, 96,
683 94, 0, 29, 29, 0, 29, 0, 29, 0, 54,683 96, 0, 68, 66, 0, 67, 0, 69, 0, 54,
684 0, 94, 94, 94, 0, 94, 0, 0, 0, 0,684 0, 96, 96, 96, 86, 96, 29, 29, 0, 29,
685 29, 0, 29, 0, 0, 0, 0, 0, 0, 0,685 62, 29, 61, 0, 0, 0, 0, 0, 0, 0,
686 0, 0, 0, 0, 29, 0, 29, 0, 0, 0,
687 0, 54, 0, 0, 96, 0, 0, 96, 0, 0,
688 0, 0, 0, 150, 70, 0, 0, 0, 0, 0,
689 0, 0, 0, 0, 0, 0, 0, 0, 29, 0,
690 0, 0, 0, 0, 0, 0, 96, 0, 96, 0,
691 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
686 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,692 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
687 0, 54, 29, 0, 94, 0, 0, 94, 0, 0,
688 0, 0, 0, 0, 29, 0, 0, 0, 0, 0,
689 0, 53, 54, 0, 0, 0, 0, 0, 0, 0,
690 0, 72, 0, 0, 0, 0, 94, 0, 94, 0,
691 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,693 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
692 88, 0, 0, 0, 0, 0, 0, 0, 94, 95,
693 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
694 111, 0, 0, 0, 0, 0, 0, 0, 0, 0,
695 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,694 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
696 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,695 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
697 0, 0, 0, 0, 170, 0, 0, 0, 0, 0,696 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
698 0, 0, 0, 138, 0, 0, 0, 0, 0, 57,697 0, 0, 0, 0, 174, 0, 0, 0, 0, 0,
699 58, 59, 60, 63, 64, 65, 0, 145, 146, 147,698 0, 0, 0, 0, 0, 0, 0, 0, 0, 57,
700 0, 0, 0, 0, 152, 54, 54, 54, 54, 54,699 58, 59, 60, 63, 64, 65, 0, 0, 0, 0,
700 0, 0, 0, 0, 0, 54, 54, 54, 54, 54,
701 54, 54, 54, 54, 54, 54, 54, 0, 0, 0,701 54, 54, 54, 54, 54, 54, 54, 0, 0, 0,
702 54, 54, 54, 0, 0, 0, 0, 0, 166, 0,702 54, 54, 54, 0, 0, 0, 0, 0, 0, 0,
703 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
704 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
705 0, 0, 0, 0, 0, 0, 0, 29, 96, 96,
706 96, 96, 96, 96, 96, 57, 58, 59, 60, 63,
707 64, 65, 0, 0, 0, 0, 53, 54, 0, 29,
708 29, 29, 29, 29, 29, 29, 72, 0, 0, 0,
703 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,709 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
710 0, 0, 0, 0, 0, 88, 0, 0, 0, 0,
711 0, 0, 0, 94, 95, 96, 97, 98, 99, 100,
712 101, 102, 103, 104, 105, 112, 0, 0, 0, 0,
704 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,713 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
705 0, 0, 0, 0, 0, 0, 0, 0, 94, 94,714 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
706 94, 94, 94, 94, 94, 29, 29, 29, 29, 29,715 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
707 29, 29,716 0, 132, 0, 0, 0, 0, 0, 0, 0, 0,
717 141, 0, 0, 0, 0, 0, 0, 0, 0, 0,
718 0, 0, 0, 0, 148, 149, 0, 0, 0, 0,
719 0, 155, 0, 156, 0, 0, 0, 0, 0, 0,
720 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
721 0, 0, 0, 0, 0, 0, 0, 170,
708};722};
709short luaY_check[] = { 2,723short luaY_check[] = { 91,
710 0, 40, 110, 40, 34, 40, 45, 41, 59, 2,724 0, 40, 111, 40, 2, 40, 45, 2, 41, 2,
711 45, 42, 43, 2, 45, 8, 47, 44, 59, 8,725 45, 42, 43, 8, 45, 8, 47, 34, 59, 43,
712 44, 44, 44, 0, 46, 57, 58, 44, 46, 91,726 91, 42, 43, 0, 45, 44, 47, 261, 262, 42,
713 261, 262, 59, 44, 274, 266, 267, 61, 61, 61,727 46, 59, 59, 44, 47, 274, 271, 44, 44, 274,
714 40, 41, 42, 43, 44, 45, 0, 47, 59, 59,728 40, 41, 42, 43, 44, 45, 0, 47, 59, 44,
715 274, 44, 42, 6, 162, 44, 40, 47, 0, 59,729 274, 44, 91, 77, 61, 61, 44, 166, 0, 59,
716 60, 59, 62, 94, 41, 42, 43, 44, 45, 91,730 60, 40, 62, 94, 41, 42, 43, 44, 45, 140,
717 47, 24, 123, 91, 125, 137, 271, 261, 262, 274,731 47, 59, 59, 94, 145, 91, 123, 44, 40, 274,
718 142, 113, 59, 60, 125, 62, 123, 0, 44, 123,732 274, 94, 59, 60, 125, 62, 123, 0, 41, 94,
719 43, 40, 45, 93, 94, 127, 158, 123, 125, 41,733 123, 162, 266, 93, 94, 123, 123, 125, 125, 41,
720 42, 43, 44, 45, 94, 47, 138, 274, 125, 171,734 42, 43, 44, 45, 175, 47, 125, 261, 262, 57,
721 140, 0, 115, 123, 125, 125, 93, 59, 60, 274,735 58, 0, 266, 267, 125, 40, 93, 59, 60, 117,
722 62, 153, 115, 123, 77, 125, 115, 43, 41, 42,736 62, 46, 117, 123, 117, 125, 143, 274, 41, 42,
723 43, 44, 45, 94, 47, 266, 42, 43, 170, 45,737 43, 44, 45, 58, 47, 274, 41, 125, 44, 6,
724 172, 47, 41, 41, 274, 0, 59, 60, 125, 62,738 125, 44, 61, 41, 44, 0, 59, 60, 125, 62,
725 274, 93, 41, 42, 43, 44, 45, 61, 47, 42,739 59, 93, 41, 42, 43, 44, 45, 24, 47, 42,
726 43, 77, 45, 116, 47, 125, 44, 44, 41, 40,740 43, 267, 45, 267, 47, 267, 91, 115, 0, 41,
727 59, 60, 0, 62, 44, 46, 274, 60, 59, 62,741 59, 60, 0, 62, 123, 125, 43, 60, 45, 62,
728 93, 267, 46, 125, 267, 46, 267, 58, 94, 40,742 93, 129, 274, 125, 41, 44, 125, 46, 125, 267,
729 0, 123, 41, 44, 58, 46, 0, 58, 125, 259,743 125, 45, 153, 141, 146, 46, 0, 117, 12, 117,
730 41, 125, 125, 263, 93, 265, 267, 58, 268, 269,744 134, 46, 61, 177, 93, -1, -1, 58, -1, 157,
731 61, 94, 125, 125, 274, 45, 150, 143, 115, 258,745 77, 94, 125, 58, -1, -1, -1, -1, -1, 258,
732 91, 115, 173, 258, 12, 132, -1, 91, -1, -1,746 -1, -1, -1, 258, -1, -1, 174, -1, 176, -1,
733 91, 59, -1, 272, 273, 274, 125, 272, 273, 274,747 -1, 59, 91, 272, 273, 274, 125, 272, 273, 274,
734 91, -1, -1, -1, 283, -1, -1, -1, 283, -1,748 91, -1, -1, -1, 283, -1, 91, -1, 283, -1,
735 281, -1, -1, 42, 43, 59, 45, -1, 47, 259,749 281, 118, -1, 42, 43, 59, 45, -1, 47, 259,
736 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,750 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
737 270, 60, 123, 62, 274, 275, 276, 277, 278, 279,751 270, 60, -1, 62, 274, 275, 276, 277, 278, 279,
738 280, 281, 259, 260, 261, 262, 263, 264, 265, 266,752 280, 281, 259, 260, 261, 262, 263, 264, 265, 266,
739 267, 268, 269, 270, -1, 123, -1, 274, 275, 276,753 267, 268, 269, 270, -1, 123, -1, 274, 275, 276,
740 277, 278, 279, 280, 281, 94, -1, 261, 262, -1,754 277, 278, 279, 280, 281, 94, -1, 261, 262, -1,
@@ -761,16 +775,16 @@ short luaY_check[] = { 2, · 20 unmodified lines
761 -1, -1, -1, -1, 41, 42, 43, 44, 45, 59,775 -1, -1, -1, -1, 41, 42, 43, 44, 45, 59,
762 47, -1, 42, 43, -1, 45, -1, 47, -1, 94,776 47, -1, 42, 43, -1, 45, -1, 47, -1, 94,
763 -1, -1, 59, 60, 125, 62, -1, -1, -1, -1,777 -1, -1, 59, 60, 125, 62, -1, -1, -1, -1,
764 60, -1, 62, -1, -1, 41, -1, 259, 44, 261,778 60, -1, 62, -1, -1, 41, 259, 40, 44, -1,
765 262, 263, -1, 265, 266, 267, 268, 269, -1, -1,779 263, 44, 265, 46, -1, 268, 269, 270, -1, -1,
766 -1, -1, 274, 59, 60, -1, 62, 94, -1, 259,780 -1, 274, -1, 59, 60, 58, 62, 94, 61, 259,
767 -1, 261, 262, 263, 94, 265, 266, 267, 268, 269,781 -1, 261, 262, 263, 94, 265, 266, 267, 268, 269,
768 270, -1, -1, -1, 274, -1, -1, -1, 42, 43,782 270, -1, -1, -1, 274, -1, 259, -1, 42, 43,
769 259, 45, -1, 47, 263, -1, 265, 93, -1, 268,783 263, 45, 265, 47, -1, 268, 269, 93, 91, -1,
770 269, 270, -1, -1, -1, 274, 60, -1, 62, -1,784 -1, 274, -1, -1, -1, -1, 60, -1, 62, -1,
771 -1, -1, -1, -1, -1, -1, -1, 259, 260, 261,785 -1, -1, -1, -1, -1, -1, -1, 259, 260, 261,
772 262, 263, 264, 265, 266, 267, 268, 269, 270, 125,786 262, 263, 264, 265, 266, 267, 268, 269, 270, 125,
773 -1, -1, 274, 275, 276, 277, 278, 279, 280, 281,787 123, -1, 274, 275, 276, 277, 278, 279, 280, 281,
774 94, 259, 260, 261, 262, 263, 264, 265, 266, 267,788 94, 259, 260, 261, 262, 263, 264, 265, 266, 267,
775 268, 269, 270, -1, -1, -1, 274, 275, 276, 277,789 268, 269, 270, -1, -1, -1, 274, 275, 276, 277,
776 278, 279, 280, 281, -1, -1, -1, -1, 259, 260,790 278, 279, 280, 281, -1, -1, -1, -1, 259, 260,
@@ -801,8 +815,8 @@ short luaY_check[] = { 2, · 24 unmodified lines
801 -1, -1, -1, 93, -1, -1, -1, -1, -1, -1,815 -1, -1, -1, 93, -1, -1, -1, -1, -1, -1,
802 0, -1, -1, 125, 59, 60, -1, 62, -1, -1,816 0, -1, -1, 125, 59, 60, -1, 62, -1, -1,
803 -1, -1, -1, -1, 41, -1, 93, 44, 0, -1,817 -1, -1, -1, -1, 41, -1, 93, 44, 0, -1,
804 -1, -1, -1, -1, -1, 125, -1, -1, -1, -1,818 259, -1, 261, 262, 263, 125, 265, 266, 267, 268,
805 -1, -1, 59, -1, -1, -1, -1, -1, 93, -1,819 269, -1, 59, -1, -1, 274, -1, -1, 93, -1,
806 -1, -1, -1, -1, -1, -1, -1, -1, 125, -1,820 -1, -1, -1, -1, -1, -1, -1, -1, 125, -1,
807 -1, -1, -1, -1, -1, -1, -1, -1, -1, 59,821 -1, -1, -1, -1, -1, -1, -1, -1, -1, 59,
808 -1, -1, -1, -1, -1, -1, 93, -1, -1, -1,822 -1, -1, -1, -1, -1, -1, 93, -1, -1, -1,
@@ -830,30 +844,44 @@ short luaY_check[] = { 2, · 21 unmodified lines
830 262, 263, -1, 265, 266, 267, 268, 269, 270, -1,844 262, 263, -1, 265, 266, 267, 268, 269, 270, -1,
831 -1, -1, 274, 40, -1, 42, 43, 44, 45, 46,845 -1, -1, 274, 40, -1, 42, 43, 44, 45, 46,
832 47, -1, 42, 43, -1, 45, -1, 47, -1, 93,846 47, -1, 42, 43, -1, 45, -1, 47, -1, 93,
833 -1, 58, 59, 60, -1, 62, -1, -1, -1, -1,847 -1, 58, 59, 60, 61, 62, 42, 43, -1, 45,
834 60, -1, 62, -1, -1, -1, -1, -1, -1, -1,848 60, 47, 62, -1, -1, -1, -1, -1, -1, -1,
849 -1, -1, -1, -1, 60, -1, 62, -1, -1, -1,
850 -1, 125, -1, -1, 91, -1, -1, 94, -1, -1,
851 -1, -1, -1, 93, 94, -1, -1, -1, -1, -1,
852 -1, -1, -1, -1, -1, -1, -1, -1, 94, -1,
853 -1, -1, -1, -1, -1, -1, 123, -1, 125, -1,
854 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
855 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
835 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,856 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
836 -1, 125, 3, -1, 91, -1, -1, 94, -1, -1,
837 -1, -1, -1, -1, 94, -1, -1, -1, -1, -1,
838 -1, 22, 23, -1, -1, -1, -1, -1, -1, -1,
839 -1, 32, -1, -1, -1, -1, 123, -1, 125, -1,
840 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,857 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
841 51, -1, -1, -1, -1, -1, -1, -1, 59, 60,
842 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
843 71, -1, -1, -1, -1, -1, -1, -1, -1, -1,
844 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,858 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
845 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,859 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
846 -1, -1, -1, -1, 260, -1, -1, -1, -1, -1,860 -1, -1, -1, -1, 260, -1, -1, -1, -1, -1,
847 -1, -1, -1, 114, -1, -1, -1, -1, -1, 275,861 -1, -1, -1, -1, -1, -1, -1, -1, -1, 275,
848 276, 277, 278, 279, 280, 281, -1, 128, 129, 130,862 276, 277, 278, 279, 280, 281, -1, -1, -1, -1,
849 -1, -1, -1, -1, 135, 259, 260, 261, 262, 263,863 -1, -1, -1, -1, -1, 259, 260, 261, 262, 263,
850 264, 265, 266, 267, 268, 269, 270, -1, -1, -1,864 264, 265, 266, 267, 268, 269, 270, -1, -1, -1,
851 274, 275, 276, -1, -1, -1, -1, -1, 159, -1,865 274, 275, 276, -1, -1, -1, -1, -1, -1, -1,
852 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,866 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
853 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,867 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
854 -1, -1, -1, -1, -1, -1, -1, -1, 275, 276,868 -1, -1, -1, -1, -1, -1, -1, 3, 275, 276,
855 277, 278, 279, 280, 281, 275, 276, 277, 278, 279,869 277, 278, 279, 280, 281, 275, 276, 277, 278, 279,
856 280, 281,870 280, 281, -1, -1, -1, -1, 22, 23, -1, 275,
871 276, 277, 278, 279, 280, 281, 32, -1, -1, -1,
872 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
873 -1, -1, -1, -1, -1, 51, -1, -1, -1, -1,
874 -1, -1, -1, 59, 60, 61, 62, 63, 64, 65,
875 66, 67, 68, 69, 70, 71, -1, -1, -1, -1,
876 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
877 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
878 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
879 -1, 107, -1, -1, -1, -1, -1, -1, -1, -1,
880 116, -1, -1, -1, -1, -1, -1, -1, -1, -1,
881 -1, -1, -1, -1, 130, 131, -1, -1, -1, -1,
882 -1, 137, -1, 139, -1, -1, -1, -1, -1, -1,
883 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
884 -1, -1, -1, -1, -1, -1, -1, 163,
857};885};
858#define YYFINAL 1886#define YYFINAL 1
859#ifndef YYDEBUG887#ifndef YYDEBUG
@@ -958,7 +986,9 @@ char *luaY_rule[] = { · 98 unmodified lines
958"ffieldlist : ffieldlist1 lastcomma",986"ffieldlist : ffieldlist1 lastcomma",
959"ffieldlist1 : ffield",987"ffieldlist1 : ffield",
960"ffieldlist1 : ffieldlist1 ',' ffield",988"ffieldlist1 : ffieldlist1 ',' ffield",
961"ffield : NAME '=' expr1",989"ffield : ffieldkey '=' expr1",
990"ffieldkey : '[' expr1 ']'",
991"ffieldkey : NAME",
962"lfieldlist :",992"lfieldlist :",
963"lfieldlist : lfieldlist1 lastcomma",993"lfieldlist : lfieldlist1 lastcomma",
964"lfieldlist1 : expr1",994"lfieldlist1 : expr1",
@@ -1139,7 +1169,7 @@ luaY_reduce: · 174 unmodified lines
1139 switch (luaY_n)1169 switch (luaY_n)
1140 {1170 {
1141case 5:1171case 5:
1142#line 470 "lua.stx"1172#line 468 "lua.stx"
1143{ 1173{
1144 code_byte(PUSHFUNCTION);1174 code_byte(PUSHFUNCTION);
1145 code_code(luaY_vsp[0].pFunc);1175 code_code(luaY_vsp[0].pFunc);
@@ -1147,28 +1177,26 @@ case 5: · 1 unmodified line
1147 }1177 }
1148break;1178break;
1149case 6:1179case 6:
1150#line 477 "lua.stx"1180#line 475 "lua.stx"
1151{ luaY_val.vLong =luaY_vsp[0].vLong; init_func(); }1181{ luaY_val.vLong =luaY_vsp[0].vLong; init_func(); }
1152break;1182break;
1153case 7:1183case 7:
1154#line 479 "lua.stx"1184#line 477 "lua.stx"
1155{1185{
1156 code_byte(PUSHSTRING);1186 code_constant(luaY_vsp[0].pTStr);
1157 code_word(luaI_findconstant(luaY_vsp[0].pTStr));
1158 luaY_val.vLong = 0; /* indexed variable */1187 luaY_val.vLong = 0; /* indexed variable */
1159 init_func();1188 init_func();
1160 add_localvar(luaI_createfixedstring("self"));1189 add_localvar(luaI_createfixedstring("self"));
1161 }1190 }
1162break;1191break;
1163case 8:1192case 8:
1164#line 489 "lua.stx"1193#line 486 "lua.stx"
1165{1194{
1166 codereturn();1195 codereturn();
1167 luaY_val.pFunc = new(TFunc);1196 luaY_val.pFunc = new(TFunc);
1168 luaI_initTFunc(luaY_val.pFunc);1197 luaI_initTFunc(luaY_val.pFunc);
1169 luaY_val.pFunc->size = pc;1198 luaY_val.pFunc->size = pc;
1170 luaY_val.pFunc->code = newvector(pc, Byte);1199 luaY_val.pFunc->code = newvector(pc, Byte);
1171 luaY_val.pFunc->fileName = lua_parsedfile;
1172 luaY_val.pFunc->lineDefined = luaY_vsp[-3].vInt;1200 luaY_val.pFunc->lineDefined = luaY_vsp[-3].vInt;
1173 memcpy(luaY_val.pFunc->code, basepc, pc*sizeof(Byte));1201 memcpy(luaY_val.pFunc->code, basepc, pc*sizeof(Byte));
1174 if (lua_debug)1202 if (lua_debug)
@@ -1182,15 +1210,15 @@ case 8: · 7 unmodified lines
1182 }1210 }
1183break;1211break;
1184case 13:1212case 13:
1185#line 516 "lua.stx"1213#line 512 "lua.stx"
1186{ codeIf(luaY_vsp[-4].vLong, luaY_vsp[-2].vLong); }1214{ codeIf(luaY_vsp[-4].vLong, luaY_vsp[-2].vLong); }
1187break;1215break;
1188case 14:1216case 14:
1189#line 518 "lua.stx"1217#line 514 "lua.stx"
1190{luaY_val.vLong=pc;}1218{luaY_val.vLong=pc;}
1191break;1219break;
1192case 15:1220case 15:
1193#line 519 "lua.stx"1221#line 515 "lua.stx"
1194{1222{
1195 basepc[luaY_vsp[-3].vLong] = IFFJMP;1223 basepc[luaY_vsp[-3].vLong] = IFFJMP;
1196 code_word_at(basepc+luaY_vsp[-3].vLong+1, pc - (luaY_vsp[-3].vLong + sizeof(Word)+1));1224 code_word_at(basepc+luaY_vsp[-3].vLong+1, pc - (luaY_vsp[-3].vLong + sizeof(Word)+1));
@@ -1199,18 +1227,18 @@ case 15: · 2 unmodified lines
1199 }1227 }
1200break;1228break;
1201case 16:1229case 16:
1202#line 526 "lua.stx"1230#line 522 "lua.stx"
1203{luaY_val.vLong=pc;}1231{luaY_val.vLong=pc;}
1204break;1232break;
1205case 17:1233case 17:
1206#line 527 "lua.stx"1234#line 523 "lua.stx"
1207{1235{
1208 basepc[luaY_vsp[0].vLong] = IFFUPJMP;1236 basepc[luaY_vsp[0].vLong] = IFFUPJMP;
1209 code_word_at(basepc+luaY_vsp[0].vLong+1, pc - (luaY_vsp[-4].vLong));1237 code_word_at(basepc+luaY_vsp[0].vLong+1, pc - (luaY_vsp[-4].vLong));
1210 }1238 }
1211break;1239break;
1212case 18:1240case 18:
1213#line 533 "lua.stx"1241#line 529 "lua.stx"
1214{1242{
1215 {1243 {
1216 int i;1244 int i;
@@ -1222,22 +1250,26 @@ case 18: · 5 unmodified lines
1222 }1250 }
1223 }1251 }
1224break;1252break;
1253case 19:
1254#line 539 "lua.stx"
1255{;}
1256break;
1225case 20:1257case 20:
1226#line 545 "lua.stx"1258#line 541 "lua.stx"
1227{ nlocalvar += luaY_vsp[-1].vInt;1259{ nlocalvar += luaY_vsp[-1].vInt;
1228 adjust_mult_assign(luaY_vsp[-1].vInt, luaY_vsp[0].vInt, 0);1260 adjust_mult_assign(luaY_vsp[-1].vInt, luaY_vsp[0].vInt, 0);
1229 }1261 }
1230break;1262break;
1231case 23:1263case 23:
1232#line 553 "lua.stx"1264#line 549 "lua.stx"
1233{ codeIf(luaY_vsp[-3].vLong, luaY_vsp[-1].vLong); }1265{ codeIf(luaY_vsp[-3].vLong, luaY_vsp[-1].vLong); }
1234break;1266break;
1235case 24:1267case 24:
1236#line 556 "lua.stx"1268#line 552 "lua.stx"
1237{luaY_val.vInt = nlocalvar;}1269{luaY_val.vInt = nlocalvar;}
1238break;1270break;
1239case 25:1271case 25:
1240#line 557 "lua.stx"1272#line 553 "lua.stx"
1241{1273{
1242 if (nlocalvar != luaY_vsp[-2].vInt)1274 if (nlocalvar != luaY_vsp[-2].vInt)
1243 {1275 {
@@ -1251,14 +1283,14 @@ case 25: · 7 unmodified lines
1251 }1283 }
1252break;1284break;
1253case 27:1285case 27:
1254#line 572 "lua.stx"1286#line 568 "lua.stx"
1255{1287{
1256 adjust_functioncall(luaY_vsp[-1].vLong, MULT_RET);1288 adjust_functioncall(luaY_vsp[-1].vLong, MULT_RET);
1257 codereturn();1289 codereturn();
1258 }1290 }
1259break;1291break;
1260case 28:1292case 28:
1261#line 579 "lua.stx"1293#line 575 "lua.stx"
1262{ 1294{
1263 luaY_val.vLong = pc;1295 luaY_val.vLong = pc;
1264 code_byte(0); /* open space */1296 code_byte(0); /* open space */
@@ -1266,103 +1298,102 @@ case 28: · 1 unmodified line
1266 }1298 }
1267break;1299break;
1268case 29:1300case 29:
1269#line 586 "lua.stx"1301#line 582 "lua.stx"
1270{ adjust_functioncall(luaY_vsp[0].vLong, 1); }1302{ adjust_functioncall(luaY_vsp[0].vLong, 1); }
1271break;1303break;
1272case 30:1304case 30:
1273#line 589 "lua.stx"1305#line 585 "lua.stx"
1274{ luaY_val.vLong = luaY_vsp[-1].vLong; }1306{ luaY_val.vLong = luaY_vsp[-1].vLong; }
1275break;1307break;
1276case 31:1308case 31:
1277#line 590 "lua.stx"1309#line 586 "lua.stx"
1278{ code_byte(EQOP); luaY_val.vLong = 0; }1310{ code_byte(EQOP); luaY_val.vLong = 0; }
1279break;1311break;
1280case 32:1312case 32:
1281#line 591 "lua.stx"1313#line 587 "lua.stx"
1282{ code_byte(LTOP); luaY_val.vLong = 0; }1314{ code_byte(LTOP); luaY_val.vLong = 0; }
1283break;1315break;
1284case 33:1316case 33:
1285#line 592 "lua.stx"1317#line 588 "lua.stx"
1286{ code_byte(GTOP); luaY_val.vLong = 0; }1318{ code_byte(GTOP); luaY_val.vLong = 0; }
1287break;1319break;
1288case 34:1320case 34:
1289#line 593 "lua.stx"1321#line 589 "lua.stx"
1290{ code_byte(EQOP); code_byte(NOTOP); luaY_val.vLong = 0; }1322{ code_byte(EQOP); code_byte(NOTOP); luaY_val.vLong = 0; }
1291break;1323break;
1292case 35:1324case 35:
1293#line 594 "lua.stx"1325#line 590 "lua.stx"
1294{ code_byte(LEOP); luaY_val.vLong = 0; }1326{ code_byte(LEOP); luaY_val.vLong = 0; }
1295break;1327break;
1296case 36:1328case 36:
1297#line 595 "lua.stx"1329#line 591 "lua.stx"
1298{ code_byte(GEOP); luaY_val.vLong = 0; }1330{ code_byte(GEOP); luaY_val.vLong = 0; }
1299break;1331break;
1300case 37:1332case 37:
1301#line 596 "lua.stx"1333#line 592 "lua.stx"
1302{ code_byte(ADDOP); luaY_val.vLong = 0; }1334{ code_byte(ADDOP); luaY_val.vLong = 0; }
1303break;1335break;
1304case 38:1336case 38:
1305#line 597 "lua.stx"1337#line 593 "lua.stx"
1306{ code_byte(SUBOP); luaY_val.vLong = 0; }1338{ code_byte(SUBOP); luaY_val.vLong = 0; }
1307break;1339break;
1308case 39:1340case 39:
1309#line 598 "lua.stx"1341#line 594 "lua.stx"
1310{ code_byte(MULTOP); luaY_val.vLong = 0; }1342{ code_byte(MULTOP); luaY_val.vLong = 0; }
1311break;1343break;
1312case 40:1344case 40:
1313#line 599 "lua.stx"1345#line 595 "lua.stx"
1314{ code_byte(DIVOP); luaY_val.vLong = 0; }1346{ code_byte(DIVOP); luaY_val.vLong = 0; }
1315break;1347break;
1316case 41:1348case 41:
1317#line 600 "lua.stx"1349#line 596 "lua.stx"
1318{ code_byte(POWOP); luaY_val.vLong = 0; }1350{ code_byte(POWOP); luaY_val.vLong = 0; }
1319break;1351break;
1320case 42:1352case 42:
1321#line 601 "lua.stx"1353#line 597 "lua.stx"
1322{ code_byte(CONCOP); luaY_val.vLong = 0; }1354{ code_byte(CONCOP); luaY_val.vLong = 0; }
1323break;1355break;
1324case 43:1356case 43:
1325#line 602 "lua.stx"1357#line 598 "lua.stx"
1326{ code_byte(MINUSOP); luaY_val.vLong = 0;}1358{ code_byte(MINUSOP); luaY_val.vLong = 0;}
1327break;1359break;
1328case 44:1360case 44:
1329#line 603 "lua.stx"1361#line 599 "lua.stx"
1330{ luaY_val.vLong = 0; }1362{ luaY_val.vLong = 0; }
1331break;1363break;
1332case 45:1364case 45:
1333#line 604 "lua.stx"1365#line 600 "lua.stx"
1334{ luaY_val.vLong = 0;}1366{ luaY_val.vLong = 0;}
1335break;1367break;
1336case 46:1368case 46:
1337#line 605 "lua.stx"1369#line 601 "lua.stx"
1338{ code_number(luaY_vsp[0].vFloat); luaY_val.vLong = 0; }1370{ code_number(luaY_vsp[0].vFloat); luaY_val.vLong = 0; }
1339break;1371break;
1340case 47:1372case 47:
1341#line 607 "lua.stx"1373#line 603 "lua.stx"
1342{1374{
1343 code_byte(PUSHSTRING);1375 code_string(luaY_vsp[0].vWord);
1344 code_word(luaY_vsp[0].vWord);1376 luaY_val.vLong = 0;
1345 luaY_val.vLong = 0;
1346 }1377 }
1347break;1378break;
1348case 48:1379case 48:
1349#line 612 "lua.stx"1380#line 607 "lua.stx"
1350{code_byte(PUSHNIL); luaY_val.vLong = 0; }1381{code_byte(PUSHNIL); luaY_val.vLong = 0; }
1351break;1382break;
1352case 49:1383case 49:
1353#line 613 "lua.stx"1384#line 608 "lua.stx"
1354{ luaY_val.vLong = luaY_vsp[0].vLong; }1385{ luaY_val.vLong = luaY_vsp[0].vLong; }
1355break;1386break;
1356case 50:1387case 50:
1357#line 614 "lua.stx"1388#line 609 "lua.stx"
1358{ code_byte(NOTOP); luaY_val.vLong = 0;}1389{ code_byte(NOTOP); luaY_val.vLong = 0;}
1359break;1390break;
1360case 51:1391case 51:
1361#line 615 "lua.stx"1392#line 610 "lua.stx"
1362{code_byte(POP); }1393{code_byte(POP); }
1363break;1394break;
1364case 52:1395case 52:
1365#line 616 "lua.stx"1396#line 611 "lua.stx"
1366{ 1397{
1367 basepc[luaY_vsp[-2].vLong] = ONFJMP;1398 basepc[luaY_vsp[-2].vLong] = ONFJMP;
1368 code_word_at(basepc+luaY_vsp[-2].vLong+1, pc - (luaY_vsp[-2].vLong + sizeof(Word)+1));1399 code_word_at(basepc+luaY_vsp[-2].vLong+1, pc - (luaY_vsp[-2].vLong + sizeof(Word)+1));
@@ -1370,11 +1401,11 @@ case 52: · 1 unmodified line
1370 }1401 }
1371break;1402break;
1372case 53:1403case 53:
1373#line 621 "lua.stx"1404#line 616 "lua.stx"
1374{code_byte(POP); }1405{code_byte(POP); }
1375break;1406break;
1376case 54:1407case 54:
1377#line 622 "lua.stx"1408#line 617 "lua.stx"
1378{ 1409{
1379 basepc[luaY_vsp[-2].vLong] = ONTJMP;1410 basepc[luaY_vsp[-2].vLong] = ONTJMP;
1380 code_word_at(basepc+luaY_vsp[-2].vLong+1, pc - (luaY_vsp[-2].vLong + sizeof(Word)+1));1411 code_word_at(basepc+luaY_vsp[-2].vLong+1, pc - (luaY_vsp[-2].vLong + sizeof(Word)+1));
@@ -1382,20 +1413,20 @@ case 54: · 1 unmodified line
1382 }1413 }
1383break;1414break;
1384case 55:1415case 55:
1385#line 630 "lua.stx"1416#line 625 "lua.stx"
1386{1417{
1387 code_byte(CREATEARRAY);1418 code_byte(CREATEARRAY);
1388 luaY_val.vLong = pc; code_word(0);1419 luaY_val.vLong = pc; code_word(0);
1389 }1420 }
1390break;1421break;
1391case 56:1422case 56:
1392#line 635 "lua.stx"1423#line 630 "lua.stx"
1393{1424{
1394 code_word_at(basepc+luaY_vsp[-3].vLong, luaY_vsp[-1].vInt);1425 code_word_at(basepc+luaY_vsp[-3].vLong, luaY_vsp[-1].vInt);
1395 }1426 }
1396break;1427break;
1397case 57:1428case 57:
1398#line 641 "lua.stx"1429#line 636 "lua.stx"
1399{1430{
1400 code_byte(CALLFUNC);1431 code_byte(CALLFUNC);
1401 code_byte(luaY_vsp[-1].vInt+luaY_vsp[0].vInt);1432 code_byte(luaY_vsp[-1].vInt+luaY_vsp[0].vInt);
@@ -1404,11 +1435,11 @@ case 57: · 2 unmodified lines
1404 }1435 }
1405break;1436break;
1406case 58:1437case 58:
1407#line 649 "lua.stx"1438#line 644 "lua.stx"
1408{ luaY_val.vInt = 0; }1439{ luaY_val.vInt = 0; }
1409break;1440break;
1410case 59:1441case 59:
1411#line 651 "lua.stx"1442#line 646 "lua.stx"
1412{ 1443{
1413 code_byte(PUSHSELF); 1444 code_byte(PUSHSELF);
1414 code_word(luaI_findconstant(luaY_vsp[0].pTStr));1445 code_word(luaI_findconstant(luaY_vsp[0].pTStr));
@@ -1416,31 +1447,31 @@ case 59: · 1 unmodified line
1416 }1447 }
1417break;1448break;
1418case 60:1449case 60:
1419#line 659 "lua.stx"1450#line 654 "lua.stx"
1420{ luaY_val.vInt = adjust_functioncall(luaY_vsp[-1].vLong, 1); }1451{ luaY_val.vInt = adjust_functioncall(luaY_vsp[-1].vLong, 1); }
1421break;1452break;
1422case 61:1453case 61:
1423#line 660 "lua.stx"1454#line 655 "lua.stx"
1424{ luaY_val.vInt = 1; }1455{ luaY_val.vInt = 1; }
1425break;1456break;
1426case 62:1457case 62:
1427#line 663 "lua.stx"1458#line 658 "lua.stx"
1428{ luaY_val.vLong = 0; }1459{ luaY_val.vLong = 0; }
1429break;1460break;
1430case 63:1461case 63:
1431#line 664 "lua.stx"1462#line 659 "lua.stx"
1432{ luaY_val.vLong = luaY_vsp[0].vLong; }1463{ luaY_val.vLong = luaY_vsp[0].vLong; }
1433break;1464break;
1434case 64:1465case 64:
1435#line 667 "lua.stx"1466#line 662 "lua.stx"
1436{ if (luaY_vsp[0].vLong != 0) luaY_val.vLong = luaY_vsp[0].vLong; else luaY_val.vLong = -1; }1467{ if (luaY_vsp[0].vLong != 0) luaY_val.vLong = luaY_vsp[0].vLong; else luaY_val.vLong = -1; }
1437break;1468break;
1438case 65:1469case 65:
1439#line 668 "lua.stx"1470#line 663 "lua.stx"
1440{ luaY_val.vLong = adjust_functioncall(luaY_vsp[-1].vLong, 1); }1471{ luaY_val.vLong = adjust_functioncall(luaY_vsp[-1].vLong, 1); }
1441break;1472break;
1442case 66:1473case 66:
1443#line 669 "lua.stx"1474#line 664 "lua.stx"
1444{1475{
1445 if (luaY_vsp[0].vLong == 0) luaY_val.vLong = -(luaY_vsp[-1].vLong + 1); /* -length */1476 if (luaY_vsp[0].vLong == 0) luaY_val.vLong = -(luaY_vsp[-1].vLong + 1); /* -length */
1446 else1477 else
@@ -1451,19 +1482,19 @@ case 66: · 4 unmodified lines
1451 }1482 }
1452break;1483break;
1453case 67:1484case 67:
1454#line 679 "lua.stx"1485#line 674 "lua.stx"
1455{ luaY_val.vInt = close_parlist(0); }1486{ luaY_val.vInt = close_parlist(0); }
1456break;1487break;
1457case 68:1488case 68:
1458#line 680 "lua.stx"1489#line 675 "lua.stx"
1459{ luaY_val.vInt = close_parlist(luaY_vsp[0].vInt); }1490{ luaY_val.vInt = close_parlist(luaY_vsp[0].vInt); }
1460break;1491break;
1461case 69:1492case 69:
1462#line 683 "lua.stx"1493#line 678 "lua.stx"
1463{ luaY_val.vInt = luaY_vsp[0].vInt; }1494{ luaY_val.vInt = luaY_vsp[0].vInt; }
1464break;1495break;
1465case 70:1496case 70:
1466#line 685 "lua.stx"1497#line 680 "lua.stx"
1467{1498{
1468 if (luaY_vsp[-2].vInt)1499 if (luaY_vsp[-2].vInt)
1469 lua_error("invalid parameter list");1500 lua_error("invalid parameter list");
@@ -1471,113 +1502,110 @@ case 70: · 1 unmodified line
1471 }1502 }
1472break;1503break;
1473case 71:1504case 71:
1474#line 692 "lua.stx"1505#line 687 "lua.stx"
1475{ add_localvar(luaY_vsp[0].pTStr); luaY_val.vInt = 0; }1506{ add_localvar(luaY_vsp[0].pTStr); luaY_val.vInt = 0; }
1476break;1507break;
1477case 72:1508case 72:
1478#line 693 "lua.stx"1509#line 688 "lua.stx"
1479{ luaY_val.vInt = 1; }1510{ luaY_val.vInt = 1; }
1480break;1511break;
1481case 73:1512case 73:
1482#line 697 "lua.stx"1513#line 692 "lua.stx"
1483{ flush_list(luaY_vsp[0].vInt/FIELDS_PER_FLUSH, luaY_vsp[0].vInt%FIELDS_PER_FLUSH); }1514{ flush_list(luaY_vsp[0].vInt/FIELDS_PER_FLUSH, luaY_vsp[0].vInt%FIELDS_PER_FLUSH); }
1484break;1515break;
1485case 74:1516case 74:
1486#line 699 "lua.stx"1517#line 694 "lua.stx"
1487{ luaY_val.vInt = luaY_vsp[-2].vInt+luaY_vsp[0].vInt; }1518{ luaY_val.vInt = luaY_vsp[-2].vInt+luaY_vsp[0].vInt; }
1488break;1519break;
1489case 75:1520case 75:
1490#line 701 "lua.stx"1521#line 696 "lua.stx"
1491{ luaY_val.vInt = luaY_vsp[-1].vInt; flush_record(luaY_vsp[-1].vInt%FIELDS_PER_FLUSH); }1522{ luaY_val.vInt = luaY_vsp[-1].vInt; flush_record(luaY_vsp[-1].vInt%FIELDS_PER_FLUSH); }
1492break;1523break;
1493case 76:1524case 76:
1494#line 705 "lua.stx"1525#line 700 "lua.stx"
1495{ luaY_val.vInt = 0; }1526{ luaY_val.vInt = 0; }
1496break;1527break;
1497case 77:1528case 77:
1498#line 707 "lua.stx"1529#line 702 "lua.stx"
1499{ luaY_val.vInt = luaY_vsp[0].vInt; flush_record(luaY_vsp[0].vInt%FIELDS_PER_FLUSH); }1530{ luaY_val.vInt = luaY_vsp[0].vInt; flush_record(luaY_vsp[0].vInt%FIELDS_PER_FLUSH); }
1500break;1531break;
1501case 80:1532case 80:
1502#line 714 "lua.stx"1533#line 709 "lua.stx"
1503{ luaY_val.vInt = 0; }1534{ luaY_val.vInt = 0; }
1504break;1535break;
1505case 81:1536case 81:
1506#line 715 "lua.stx"1537#line 710 "lua.stx"
1507{ luaY_val.vInt = luaY_vsp[-1].vInt; }1538{ luaY_val.vInt = luaY_vsp[-1].vInt; }
1508break;1539break;
1509case 82:1540case 82:
1510#line 718 "lua.stx"1541#line 713 "lua.stx"
1511{luaY_val.vInt=1;}1542{luaY_val.vInt=1;}
1512break;1543break;
1513case 83:1544case 83:
1514#line 720 "lua.stx"1545#line 715 "lua.stx"
1515{1546{
1516 luaY_val.vInt=luaY_vsp[-2].vInt+1;1547 luaY_val.vInt=luaY_vsp[-2].vInt+1;
1517 if (luaY_val.vInt%FIELDS_PER_FLUSH == 0) flush_record(FIELDS_PER_FLUSH);1548 if (luaY_val.vInt%FIELDS_PER_FLUSH == 0) flush_record(FIELDS_PER_FLUSH);
1518 }1549 }
1519break;1550break;
1520case 84:1551case 86:
1521#line 727 "lua.stx"1552#line 725 "lua.stx"
1522{ 1553{ code_constant(luaY_vsp[0].pTStr); }
1523 push_field(luaI_findconstant(luaY_vsp[-2].pTStr));
1524 }
1525break;1554break;
1526case 85:1555case 87:
1527#line 732 "lua.stx"1556#line 728 "lua.stx"
1528{ luaY_val.vInt = 0; }1557{ luaY_val.vInt = 0; }
1529break;1558break;
1530case 86:1559case 88:
1531#line 733 "lua.stx"1560#line 729 "lua.stx"
1532{ luaY_val.vInt = luaY_vsp[-1].vInt; }1561{ luaY_val.vInt = luaY_vsp[-1].vInt; }
1533break;1562break;
1534case 87:1563case 89:
1535#line 736 "lua.stx"1564#line 732 "lua.stx"
1536{luaY_val.vInt=1;}1565{luaY_val.vInt=1;}
1537break;1566break;
1538case 88:1567case 90:
1539#line 738 "lua.stx"1568#line 734 "lua.stx"
1540{1569{
1541 luaY_val.vInt=luaY_vsp[-2].vInt+1;1570 luaY_val.vInt=luaY_vsp[-2].vInt+1;
1542 if (luaY_val.vInt%FIELDS_PER_FLUSH == 0) 1571 if (luaY_val.vInt%FIELDS_PER_FLUSH == 0)
1543 flush_list(luaY_val.vInt/FIELDS_PER_FLUSH - 1, FIELDS_PER_FLUSH);1572 flush_list(luaY_val.vInt/FIELDS_PER_FLUSH - 1, FIELDS_PER_FLUSH);
1544 }1573 }
1545break;1574break;
1546case 89:1575case 91:
1547#line 746 "lua.stx"1576#line 742 "lua.stx"
1548{1577{
1549 nvarbuffer = 0; 1578 nvarbuffer = 0;
1550 add_varbuffer(luaY_vsp[0].vLong);1579 add_varbuffer(luaY_vsp[0].vLong);
1551 luaY_val.vInt = (luaY_vsp[0].vLong == 0) ? 1 : 0;1580 luaY_val.vInt = (luaY_vsp[0].vLong == 0) ? 1 : 0;
1552 }1581 }
1553break;1582break;
1554case 90:1583case 92:
1555#line 752 "lua.stx"1584#line 748 "lua.stx"
1556{ 1585{
1557 add_varbuffer(luaY_vsp[0].vLong);1586 add_varbuffer(luaY_vsp[0].vLong);
1558 luaY_val.vInt = (luaY_vsp[0].vLong == 0) ? luaY_vsp[-2].vInt + 1 : luaY_vsp[-2].vInt;1587 luaY_val.vInt = (luaY_vsp[0].vLong == 0) ? luaY_vsp[-2].vInt + 1 : luaY_vsp[-2].vInt;
1559 }1588 }
1560break;1589break;
1561case 91:1590case 93:
1562#line 758 "lua.stx"1591#line 754 "lua.stx"
1563{ luaY_val.vLong = luaY_vsp[0].vLong; }1592{ luaY_val.vLong = luaY_vsp[0].vLong; }
1564break;1593break;
1565case 92:1594case 94:
1566#line 760 "lua.stx"1595#line 756 "lua.stx"
1567{1596{
1568 luaY_val.vLong = 0; /* indexed variable */1597 luaY_val.vLong = 0; /* indexed variable */
1569 }1598 }
1570break;1599break;
1571case 93:1600case 95:
1572#line 764 "lua.stx"1601#line 760 "lua.stx"
1573{1602{
1574 code_byte(PUSHSTRING);1603 code_constant(luaY_vsp[0].pTStr);
1575 code_word(luaI_findconstant(luaY_vsp[0].pTStr));1604 luaY_val.vLong = 0; /* indexed variable */
1576 luaY_val.vLong = 0; /* indexed variable */
1577 }1605 }
1578break;1606break;
1579case 94:1607case 96:
1580#line 772 "lua.stx"1608#line 767 "lua.stx"
1581{1609{
1582 int local = lua_localname(luaY_vsp[0].pTStr);1610 int local = lua_localname(luaY_vsp[0].pTStr);
1583 if (local == -1) /* global var */1611 if (local == -1) /* global var */
@@ -1586,30 +1614,30 @@ case 94: · 2 unmodified lines
1586 luaY_val.vLong = -(local+1); /* return negative value */1614 luaY_val.vLong = -(local+1); /* return negative value */
1587 }1615 }
1588break;1616break;
1589case 95:1617case 97:
1590#line 781 "lua.stx"1618#line 776 "lua.stx"
1591{ lua_pushvar(luaY_vsp[0].vLong); }1619{ lua_pushvar(luaY_vsp[0].vLong); }
1592break;1620break;
1593case 96:1621case 98:
1594#line 784 "lua.stx"1622#line 779 "lua.stx"
1595{store_localvar(luaY_vsp[0].pTStr, 0); luaY_val.vInt = 1;}1623{store_localvar(luaY_vsp[0].pTStr, 0); luaY_val.vInt = 1;}
1596break;1624break;
1597case 97:1625case 99:
1598#line 786 "lua.stx"1626#line 781 "lua.stx"
1599{1627{
1600 store_localvar(luaY_vsp[0].pTStr, luaY_vsp[-2].vInt);1628 store_localvar(luaY_vsp[0].pTStr, luaY_vsp[-2].vInt);
1601 luaY_val.vInt = luaY_vsp[-2].vInt+1;1629 luaY_val.vInt = luaY_vsp[-2].vInt+1;
1602 }1630 }
1603break;1631break;
1604case 98:1632case 100:
1605#line 792 "lua.stx"1633#line 787 "lua.stx"
1606{ luaY_val.vInt = 0; }1634{ luaY_val.vInt = 0; }
1607break;1635break;
1608case 99:1636case 101:
1609#line 793 "lua.stx"1637#line 788 "lua.stx"
1610{ luaY_val.vInt = luaY_vsp[0].vLong; }1638{ luaY_val.vInt = luaY_vsp[0].vLong; }
1611break;1639break;
1612#line 1613 "y.tab.c"1640#line 1641 "y.tab.c"
1613 }1641 }
1614 luaY_ssp -= luaY_m;1642 luaY_ssp -= luaY_m;
1615 luaY_state = *luaY_ssp;1643 luaY_state = *luaY_ssp;
src/table.c+84−96
@@ -3,9 +3,11 @@ · 2 unmodified lines
3** Module to control static tables3** Module to control static tables
4*/4*/
5 5
6char *rcs_table="$Id: table.c,v 2.58 1996/11/01 12:47:45 roberto Exp $";6char *rcs_table="$Id: table.c,v 2.72 1997/06/17 18:09:31 roberto Exp $";
7 7
8#include "mem.h"8#include "luamem.h"
9#include "auxlib.h"
10#include "func.h"
9#include "opcode.h"11#include "opcode.h"
10#include "tree.h"12#include "tree.h"
11#include "hash.h"13#include "hash.h"
@@ -27,49 +29,14 @@ Word lua_nconstant = 0; · 15 unmodified lines
27static Long lua_maxconstant = 0;29static Long lua_maxconstant = 0;
28 30
29 31
30#define GARBAGE_BLOCK 5032#define GARBAGE_BLOCK 100
31
32static void lua_nextvar (void);
33
34/*
35** Internal functions
36*/
37static struct {
38 char *name;
39 lua_CFunction func;
40} int_funcs[] = {
41 {"assert", luaI_assert},
42 {"call", luaI_call},
43 {"dofile", lua_internaldofile},
44 {"dostring", lua_internaldostring},
45 {"error", luaI_error},
46 {"getglobal", luaI_getglobal},
47 {"next", lua_next},
48 {"nextvar", lua_nextvar},
49 {"print", luaI_print},
50 {"setfallback", luaI_setfallback},
51 {"setglobal", luaI_setglobal},
52 {"tonumber", lua_obj2number},
53 {"tostring", luaI_tostring},
54 {"type", luaI_type}
55};
56
57#define INTFUNCSIZE (sizeof(int_funcs)/sizeof(int_funcs[0]))
58 33
59 34
60void luaI_initsymbol (void)35void luaI_initsymbol (void)
61{36{
62 int i;
63 Word n;
64 lua_maxsymbol = BUFFER_BLOCK;37 lua_maxsymbol = BUFFER_BLOCK;
65 lua_table = newvector(lua_maxsymbol, Symbol);38 lua_table = newvector(lua_maxsymbol, Symbol);
66 for (i=0; i<INTFUNCSIZE; i++)39 luaI_predefine();
67 {
68 n = luaI_findsymbolbyname(int_funcs[i].name);
69 s_tag(n) = LUA_T_CFUNCTION; s_fvalue(n) = int_funcs[i].func;
70 }
71 n = luaI_findsymbolbyname("_VERSION_");
72 s_tag(n) = LUA_T_STRING; s_tsvalue(n) = lua_createstring(LUA_VERSION);
73}40}
74 41
75 42
@@ -92,17 +59,17 @@ void luaI_initconstant (void) · 16 unmodified lines
92*/59*/
93Word luaI_findsymbol (TaggedString *t)60Word luaI_findsymbol (TaggedString *t)
94{61{
95 if (t->varindex == NOT_USED)62 if (t->u.s.varindex == NOT_USED)
96 {63 {
97 if (lua_ntable == lua_maxsymbol)64 if (lua_ntable == lua_maxsymbol)
98 lua_maxsymbol = growvector(&lua_table, lua_maxsymbol, Symbol,65 lua_maxsymbol = growvector(&lua_table, lua_maxsymbol, Symbol,
99 symbolEM, MAX_WORD);66 symbolEM, MAX_WORD);
100 t->varindex = lua_ntable;67 t->u.s.varindex = lua_ntable;
101 lua_table[lua_ntable].varname = t;68 lua_table[lua_ntable].varname = t;
102 s_tag(lua_ntable) = LUA_T_NIL;69 s_ttype(lua_ntable) = LUA_T_NIL;
103 lua_ntable++;70 lua_ntable++;
104 }71 }
105 return t->varindex;72 return t->u.s.varindex;
106}73}
107 74
108 75
@@ -118,16 +85,16 @@ Word luaI_findsymbolbyname (char *name) · 9 unmodified lines
118*/85*/
119Word luaI_findconstant (TaggedString *t)86Word luaI_findconstant (TaggedString *t)
120{87{
121 if (t->constindex == NOT_USED)88 if (t->u.s.constindex == NOT_USED)
122 {89 {
123 if (lua_nconstant == lua_maxconstant)90 if (lua_nconstant == lua_maxconstant)
124 lua_maxconstant = growvector(&lua_constant, lua_maxconstant, TaggedString *,91 lua_maxconstant = growvector(&lua_constant, lua_maxconstant, TaggedString *,
125 constantEM, MAX_WORD);92 constantEM, MAX_WORD);
126 t->constindex = lua_nconstant;93 t->u.s.constindex = lua_nconstant;
127 lua_constant[lua_nconstant] = t;94 lua_constant[lua_nconstant] = t;
128 lua_nconstant++;95 lua_nconstant++;
129 }96 }
130 return t->constindex;97 return t->u.s.constindex;
131}98}
132 99
133 100
@@ -145,10 +112,16 @@ TaggedString *luaI_createfixedstring (char *name) · 11 unmodified lines
145}112}
146 113
147 114
115int luaI_globaldefined (char *name)
116{
117 return ttype(&lua_table[luaI_findsymbolbyname(name)].object) != LUA_T_NIL;
118}
119
120
148/*121/*
149** Traverse symbol table objects122** Traverse symbol table objects
150*/123*/
151static char *lua_travsymbol (int (*fn)(Object *))124static char *lua_travsymbol (int (*fn)(TObject *))
152{125{
153 Word i;126 Word i;
154 for (i=0; i<lua_ntable; i++)127 for (i=0; i<lua_ntable; i++)
@@ -161,13 +134,14 @@ static char *lua_travsymbol (int (*fn)(Object *)) · 6 unmodified lines
161/*134/*
162** Mark an object if it is a string or a unmarked array.135** Mark an object if it is a string or a unmarked array.
163*/136*/
164int lua_markobject (Object *o)137int lua_markobject (TObject *o)
165{/* if already marked, does not change mark value */138{/* if already marked, does not change mark value */
166 if (tag(o) == LUA_T_STRING && !tsvalue(o)->marked)139 if (ttype(o) == LUA_T_USERDATA ||
140 (ttype(o) == LUA_T_STRING && !tsvalue(o)->marked))
167 tsvalue(o)->marked = 1;141 tsvalue(o)->marked = 1;
168 else if (tag(o) == LUA_T_ARRAY)142 else if (ttype(o) == LUA_T_ARRAY)
169 lua_hashmark (avalue(o));143 lua_hashmark (avalue(o));
170 else if ((o->tag == LUA_T_FUNCTION || o->tag == LUA_T_MARK)144 else if ((o->ttype == LUA_T_FUNCTION || o->ttype == LUA_T_MARK)
171 && !o->value.tf->marked)145 && !o->value.tf->marked)
172 o->value.tf->marked = 1;146 o->value.tf->marked = 1;
173 return 0;147 return 0;
@@ -176,11 +150,11 @@ int lua_markobject (Object *o) · 2 unmodified lines
176/*150/*
177* returns 0 if the object is going to be (garbage) collected151* returns 0 if the object is going to be (garbage) collected
178*/152*/
179int luaI_ismarked (Object *o)153int luaI_ismarked (TObject *o)
180{154{
181 switch (o->tag)155 switch (o->ttype)
182 {156 {
183 case LUA_T_STRING:157 case LUA_T_STRING: case LUA_T_USERDATA:
184 return o->value.ts->marked;158 return o->value.ts->marked;
185 case LUA_T_FUNCTION:159 case LUA_T_FUNCTION:
186 return o->value.tf->marked;160 return o->value.tf->marked;
@@ -192,76 +166,90 @@ int luaI_ismarked (Object *o) · 5 unmodified lines
192}166}
193 167
194 168
169static void call_nilIM (void)
170{ /* signals end of garbage collection */
171 TObject t;
172 ttype(&t) = LUA_T_NIL;
173 luaI_gcIM(&t); /* end of list */
174}
175
195/*176/*
196** Garbage collection. 177** Garbage collection.
197** Delete all unused strings and arrays.178** Delete all unused strings and arrays.
198*/179*/
199Long luaI_collectgarbage (void)180static long gc_block = GARBAGE_BLOCK;
181static long gc_nentity = 0; /* total of strings, arrays, etc */
182
183static void markall (void)
200{184{
201 Long recovered = 0;
202 lua_travstack(lua_markobject); /* mark stack objects */185 lua_travstack(lua_markobject); /* mark stack objects */
203 lua_travsymbol(lua_markobject); /* mark symbol table objects */186 lua_travsymbol(lua_markobject); /* mark symbol table objects */
204 luaI_travlock(lua_markobject); /* mark locked objects */187 luaI_travlock(lua_markobject); /* mark locked objects */
205 luaI_travfallbacks(lua_markobject); /* mark fallbacks */188 luaI_travfallbacks(lua_markobject); /* mark fallbacks */
189}
190
191
192long lua_collectgarbage (long limit)
193{
194 long recovered = 0;
195 Hash *freetable;
196 TaggedString *freestr;
197 TFunc *freefunc;
198 markall();
206 luaI_invalidaterefs();199 luaI_invalidaterefs();
207 recovered += lua_strcollector();200 freetable = luaI_hashcollector(&recovered);
208 recovered += lua_hashcollector();201 freestr = luaI_strcollector(&recovered);
209 recovered += luaI_funccollector();202 freefunc = luaI_funccollector(&recovered);
203 gc_nentity -= recovered;
204 gc_block = (limit == 0) ? 2*(gc_block-recovered) : gc_nentity+limit;
205 luaI_hashcallIM(freetable);
206 luaI_strcallIM(freestr);
207 call_nilIM();
208 luaI_hashfree(freetable);
209 luaI_strfree(freestr);
210 luaI_funcfree(freefunc);
210 return recovered;211 return recovered;
211} 212}
212 213
214
213void lua_pack (void)215void lua_pack (void)
214{216{
215 static unsigned long block = GARBAGE_BLOCK;217 if (++gc_nentity >= gc_block)
216 static unsigned long nentity = 0; /* total of strings, arrays, etc */218 lua_collectgarbage(0);
217 unsigned long recovered = 0;
218 if (nentity++ < block) return;
219 recovered = luaI_collectgarbage();
220 block = 2*(block-recovered);
221 nentity -= recovered;
222} 219}
223 220
224 221
225/*222/*
226** Internal function: return next global variable223** Internal function: return next global variable
227*/224*/
228static void lua_nextvar (void)225void luaI_nextvar (void)
229{226{
230 Word next;227 Word next;
231 lua_Object o = lua_getparam(1);228 if (lua_isnil(lua_getparam(1)))
232 if (o == LUA_NOOBJECT)229 next = 0;
233 lua_error("too few arguments to function `nextvar'");230 else
234 if (lua_getparam(2) != LUA_NOOBJECT)231 next = luaI_findsymbolbyname(luaL_check_string(1)) + 1;
235 lua_error("too many arguments to function `nextvar'");232 while (next < lua_ntable && s_ttype(next) == LUA_T_NIL)
236 if (lua_isnil(o))233 next++;
237 next = 0;234 if (next < lua_ntable) {
238 else if (!lua_isstring(o))235 lua_pushstring(lua_table[next].varname->str);
239 {236 luaI_pushobject(&s_object(next));
240 lua_error("incorrect argument to function `nextvar'"); 237 }
241 return; /* to avoid warnings */
242 }
243 else
244 next = luaI_findsymbolbyname(lua_getstring(o)) + 1;
245 while (next < lua_ntable && s_tag(next) == LUA_T_NIL) next++;
246 if (next < lua_ntable)
247 {
248 lua_pushstring(lua_table[next].varname->str);
249 luaI_pushobject(&s_object(next));
250 }
251}238}
252 239
253 240
254static Object *functofind;241static TObject *functofind;
255static int checkfunc (Object *o)242static int checkfunc (TObject *o)
256{243{
257 if (o->tag == LUA_T_FUNCTION)244 if (o->ttype == LUA_T_FUNCTION)
258 return245 return
259 ((functofind->tag == LUA_T_FUNCTION || functofind->tag == LUA_T_MARK)246 ((functofind->ttype == LUA_T_FUNCTION || functofind->ttype == LUA_T_MARK)
260 && (functofind->value.tf == o->value.tf));247 && (functofind->value.tf == o->value.tf));
261 if (o->tag == LUA_T_CFUNCTION)248 if (o->ttype == LUA_T_CFUNCTION)
262 return249 return
263 ((functofind->tag == LUA_T_CFUNCTION || functofind->tag == LUA_T_CMARK)250 ((functofind->ttype == LUA_T_CFUNCTION ||
264 && (functofind->value.f == o->value.f));251 functofind->ttype == LUA_T_CMARK) &&
252 (functofind->value.f == o->value.f));
265 return 0;253 return 0;
266}254}
267 255
@@ -270,7 +258,7 @@ char *lua_getobjname (lua_Object o, char **name) · 2 unmodified lines
270{ /* try to find a name for given function */258{ /* try to find a name for given function */
271 functofind = luaI_Address(o);259 functofind = luaI_Address(o);
272 if ((*name = luaI_travfallbacks(checkfunc)) != NULL)260 if ((*name = luaI_travfallbacks(checkfunc)) != NULL)
273 return "fallback";261 return "tag-method";
274 else if ((*name = lua_travsymbol(checkfunc)) != NULL)262 else if ((*name = lua_travsymbol(checkfunc)) != NULL)
275 return "global";263 return "global";
276 else return "";264 else return "";
src/table.h+6−5
@@ -1,7 +1,7 @@
1/*1/*
2** Module to control static tables2** Module to control static tables
3** TeCGraf - PUC-Rio3** TeCGraf - PUC-Rio
4** $Id: table.h,v 2.21 1996/04/22 18:00:37 roberto Exp $4** $Id: table.h,v 2.25 1997/05/26 14:42:36 roberto Exp $
5*/5*/
6 6
7#ifndef table_h7#ifndef table_h
@@ -12,7 +12,7 @@ · 4 unmodified lines
12 12
13typedef struct13typedef struct
14{14{
15 Object object;15 TObject object;
16 TaggedString *varname;16 TaggedString *varname;
17} Symbol;17} Symbol;
18 18
@@ -28,10 +28,11 @@ Word luaI_findsymbolbyname (char *name); · 9 unmodified lines
28Word luaI_findsymbol (TaggedString *t);28Word luaI_findsymbol (TaggedString *t);
29Word luaI_findconstant (TaggedString *t);29Word luaI_findconstant (TaggedString *t);
30Word luaI_findconstantbyname (char *name);30Word luaI_findconstantbyname (char *name);
31int luaI_globaldefined (char *name);
32void luaI_nextvar (void);
31TaggedString *luaI_createfixedstring (char *str);33TaggedString *luaI_createfixedstring (char *str);
32int lua_markobject (Object *o);34int lua_markobject (TObject *o);
33int luaI_ismarked (Object *o);35int luaI_ismarked (TObject *o);
34Long luaI_collectgarbage (void);
35void lua_pack (void);36void lua_pack (void);
36 37
37 38
src/tree.c+92−26
@@ -3,17 +3,18 @@ · 2 unmodified lines
3** TecCGraf - PUC-Rio3** TecCGraf - PUC-Rio
4*/4*/
5 5
6char *rcs_tree="$Id: tree.c,v 1.20 1996/03/14 15:56:26 roberto Exp $";6char *rcs_tree="$Id: tree.c,v 1.28 1997/06/11 14:24:40 roberto Exp $";
7 7
8 8
9#include <string.h>9#include <string.h>
10 10
11#include "mem.h"11#include "luamem.h"
12#include "lua.h"12#include "lua.h"
13#include "tree.h"13#include "tree.h"
14#include "lex.h"14#include "lex.h"
15#include "hash.h"15#include "hash.h"
16#include "table.h"16#include "table.h"
17#include "fallback.h"
17 18
18 19
19#define NUM_HASHS 6420#define NUM_HASHS 64
@@ -28,23 +29,43 @@ static int initialized = 0; · 8 unmodified lines
28 29
29static stringtable string_root[NUM_HASHS];30static stringtable string_root[NUM_HASHS];
30 31
31static TaggedString EMPTY = {NOT_USED, NOT_USED, 0, 2, {0}};32static TaggedString EMPTY = {LUA_T_STRING, NULL, {{NOT_USED, NOT_USED}},
33 0, 2, {0}};
32 34
33 35
34static unsigned long hash (char *str)36static unsigned long hash (char *s, int tag)
35{37{
36 unsigned long h = 0;38 unsigned long h;
37 while (*str)39 if (tag != LUA_T_STRING)
38 h = ((h<<5)-h)^(unsigned char)*(str++);40 h = (unsigned long)s;
41 else {
42 h = 0;
43 while (*s)
44 h = ((h<<5)-h)^(unsigned char)*(s++);
45 }
39 return h;46 return h;
40}47}
41 48
49
50static void luaI_inittree (void)
51{
52 int i;
53 for (i=0; i<NUM_HASHS; i++) {
54 string_root[i].size = 0;
55 string_root[i].nuse = 0;
56 string_root[i].hash = NULL;
57 }
58}
59
60
42static void initialize (void)61static void initialize (void)
43{62{
44 initialized = 1;63 initialized = 1;
64 luaI_inittree();
45 luaI_addReserved();65 luaI_addReserved();
46 luaI_initsymbol();66 luaI_initsymbol();
47 luaI_initconstant();67 luaI_initconstant();
68 luaI_initfallbacks();
48}69}
49 70
50 71
@@ -58,8 +79,7 @@ static void grow (stringtable *tb) · 7 unmodified lines
58 /* rehash */79 /* rehash */
59 tb->nuse = 0;80 tb->nuse = 0;
60 for (i=0; i<tb->size; i++)81 for (i=0; i<tb->size; i++)
61 if (tb->hash[i] != NULL && tb->hash[i] != &EMPTY)82 if (tb->hash[i] != NULL && tb->hash[i] != &EMPTY) {
62 {
63 int h = tb->hash[i]->hash%newsize;83 int h = tb->hash[i]->hash%newsize;
64 while (newhash[h])84 while (newhash[h])
65 h = (h+1)%newsize;85 h = (h+1)%newsize;
@@ -71,10 +91,30 @@ static void grow (stringtable *tb) · 5 unmodified lines
71 tb->hash = newhash;91 tb->hash = newhash;
72}92}
73 93
74static TaggedString *insert (char *str, stringtable *tb)94
95static TaggedString *newone(char *buff, int tag, unsigned long h)
96{
97 TaggedString *ts;
98 if (tag == LUA_T_STRING) {
99 ts = (TaggedString *)luaI_malloc(sizeof(TaggedString)+strlen(buff));
100 strcpy(ts->str, buff);
101 ts->u.s.varindex = ts->u.s.constindex = NOT_USED;
102 ts->tag = LUA_T_STRING;
103 }
104 else {
105 ts = (TaggedString *)luaI_malloc(sizeof(TaggedString));
106 ts->u.v = buff;
107 ts->tag = tag == LUA_ANYTAG ? 0 : tag;
108 }
109 ts->marked = 0;
110 ts->hash = h;
111 return ts;
112}
113
114static TaggedString *insert (char *buff, int tag, stringtable *tb)
75{115{
76 TaggedString *ts;116 TaggedString *ts;
77 unsigned long h = hash(str);117 unsigned long h = hash(buff, tag);
78 int i;118 int i;
79 int j = -1;119 int j = -1;
80 if ((Long)tb->nuse*3 >= (Long)tb->size*2)120 if ((Long)tb->nuse*3 >= (Long)tb->size*2)
@@ -84,12 +124,14 @@ static TaggedString *insert (char *str, stringtable *tb) · 3 unmodified lines
84 grow(tb);124 grow(tb);
85 }125 }
86 i = h%tb->size;126 i = h%tb->size;
87 while (tb->hash[i])127 while ((ts = tb->hash[i]) != NULL)
88 {128 {
89 if (tb->hash[i] == &EMPTY)129 if (ts == &EMPTY)
90 j = i;130 j = i;
91 else if (strcmp(str, tb->hash[i]->str) == 0)131 else if ((ts->tag == LUA_T_STRING) ?
92 return tb->hash[i];132 (tag == LUA_T_STRING && (strcmp(buff, ts->str) == 0)) :
133 ((tag == ts->tag || tag == LUA_ANYTAG) && buff == ts->u.v))
134 return ts;
93 i = (i+1)%tb->size;135 i = (i+1)%tb->size;
94 }136 }
95 /* not found */137 /* not found */
@@ -98,27 +140,49 @@ static TaggedString *insert (char *str, stringtable *tb) · 2 unmodified lines
98 i = j;140 i = j;
99 else141 else
100 tb->nuse++;142 tb->nuse++;
101 ts = tb->hash[i] = (TaggedString *)luaI_malloc(sizeof(TaggedString)+strlen(str));143 ts = tb->hash[i] = newone(buff, tag, h);
102 strcpy(ts->str, str);
103 ts->marked = 0;
104 ts->hash = h;
105 ts->varindex = ts->constindex = NOT_USED;
106 return ts;144 return ts;
107}145}
108 146
109TaggedString *lua_createstring (char *str) 147TaggedString *luaI_createudata (void *udata, int tag)
110{148{
111 return insert(str, &string_root[(unsigned)str[0]%NUM_HASHS]);149 return insert(udata, tag, &string_root[(unsigned)udata%NUM_HASHS]);
150}
151
152TaggedString *lua_createstring (char *str)
153{
154 return insert(str, LUA_T_STRING, &string_root[(unsigned)str[0]%NUM_HASHS]);
155}
156
157
158void luaI_strcallIM (TaggedString *l)
159{
160 TObject o;
161 ttype(&o) = LUA_T_USERDATA;
162 for (; l; l=l->next) {
163 tsvalue(&o) = l;
164 luaI_gcIM(&o);
165 }
166}
167
168
169void luaI_strfree (TaggedString *l)
170{
171 while (l) {
172 TaggedString *next = l->next;
173 luaI_free(l);
174 l = next;
175 }
112}176}
113 177
114 178
115/*179/*
116** Garbage collection function.180** Garbage collection function.
117** This function traverse the string list freeing unindexed strings
118*/181*/
119Long lua_strcollector (void)182TaggedString *luaI_strcollector (long *acum)
120{183{
121 Long counter = 0;184 Long counter = 0;
185 TaggedString *frees = NULL;
122 int i;186 int i;
123 for (i=0; i<NUM_HASHS; i++)187 for (i=0; i<NUM_HASHS; i++)
124 {188 {
@@ -133,13 +197,15 @@ Long lua_strcollector (void) · 8 unmodified lines
133 t->marked = 0;197 t->marked = 0;
134 else198 else
135 {199 {
136 luaI_free(t);200 t->next = frees;
201 frees = t;
137 tb->hash[j] = &EMPTY;202 tb->hash[j] = &EMPTY;
138 counter++;203 counter++;
139 }204 }
140 }205 }
141 }206 }
142 }207 }
143 return counter;208 *acum += counter;
209 return frees;
144}210}
145 211
src/tree.h+14−4
@@ -1,7 +1,7 @@
1/*1/*
2** tree.h2** tree.h
3** TecCGraf - PUC-Rio3** TecCGraf - PUC-Rio
4** $Id: tree.h,v 1.14 1996/02/26 17:07:49 roberto Exp $4** $Id: tree.h,v 1.18 1997/06/09 17:28:14 roberto Exp $
5*/5*/
6 6
7#ifndef tree_h7#ifndef tree_h
@@ -14,8 +14,15 @@ · 6 unmodified lines
14 14
15typedef struct TaggedString15typedef struct TaggedString
16{16{
17 Word varindex; /* != NOT_USED if this is a symbol */17 int tag; /* if != LUA_T_STRING, this is a userdata */
18 Word constindex; /* != NOT_USED if this is a constant */18 struct TaggedString *next;
19 union {
20 struct {
21 Word varindex; /* != NOT_USED if this is a symbol */
22 Word constindex; /* != NOT_USED if this is a constant */
23 } s;
24 void *v; /* if this is a userdata, here is its value */
25 } u;
19 unsigned long hash; /* 0 if not initialized */26 unsigned long hash; /* 0 if not initialized */
20 int marked; /* for garbage collection; never collect (nor change) if > 1 */27 int marked; /* for garbage collection; never collect (nor change) if > 1 */
21 char str[1]; /* \0 byte already reserved */28 char str[1]; /* \0 byte already reserved */
@@ -23,6 +30,9 @@ typedef struct TaggedString · 1 unmodified line
23 30
24 31
25TaggedString *lua_createstring (char *str);32TaggedString *lua_createstring (char *str);
26Long lua_strcollector (void);33TaggedString *luaI_createudata (void *udata, int tag);
34TaggedString *luaI_strcollector (long *cont);
35void luaI_strfree (TaggedString *l);
36void luaI_strcallIM (TaggedString *l);
27 37
28#endif38#endif
src/undump.c+71−74
@@ -3,33 +3,28 @@ · 2 unmodified lines
3** load bytecodes from files3** load bytecodes from files
4*/4*/
5 5
6char* rcs_undump="$Id: undump.c,v 1.21 1996/11/18 11:18:29 lhf Exp $";6char* rcs_undump="$Id: undump.c,v 1.24 1997/06/17 18:19:17 roberto Exp $";
7 7
8#include <stdio.h>8#include <stdio.h>
9#include <string.h>9#include <string.h>
10#include "auxlib.h"
10#include "opcode.h"11#include "opcode.h"
11#include "mem.h"12#include "luamem.h"
12#include "table.h"13#include "table.h"
13#include "undump.h"14#include "undump.h"
15#include "zio.h"
14 16
15static int swapword=0;17static int swapword=0;
16static int swapfloat=0;18static int swapfloat=0;
17static TFunc* Main=NULL; /* functions in a chunk */19static TFunc* Main=NULL; /* functions in a chunk */
18static TFunc* lastF=NULL;20static TFunc* lastF=NULL;
19 21
20static void warn(char* s) /* TODO: remove */
21{
22#if 0
23 fprintf(stderr,"undump: %s\n",s);
24#endif
25}
26
27static void FixCode(Byte* code, Byte* end) /* swap words */22static void FixCode(Byte* code, Byte* end) /* swap words */
28{23{
29 Byte* p;24 Byte* p;
30 for (p=code; p!=end;)25 for (p=code; p!=end;)
31 {26 {
32 OpCode op=(OpCode)*p;27 int op=*p;
33 switch (op)28 switch (op)
34 {29 {
35 case PUSHNIL:30 case PUSHNIL:
@@ -83,6 +78,8 @@ static void FixCode(Byte* code, Byte* end) /* swap words */ · 47 unmodified lines
83 case STORELIST0:78 case STORELIST0:
84 case ADJUST:79 case ADJUST:
85 case RETCODE:80 case RETCODE:
81 case VARARGS:
82 case STOREMAP:
86 p+=2;83 p+=2;
87 break;84 break;
88 case STORELIST:85 case STORELIST:
@@ -132,7 +129,8 @@ static void FixCode(Byte* code, Byte* end) /* swap words */ · 43 unmodified lines
132 break;129 break;
133 }130 }
134 default:131 default:
135 lua_error("corrupt binary file");132 luaL_verror("corrupt binary file: bad opcode %d at %d\n",
133 op,(int)(p-code));
136 break;134 break;
137 }135 }
138 }136 }
@@ -150,149 +148,152 @@ static void Unthread(Byte* code, int i, int v) · 11 unmodified lines
150 }148 }
151}149}
152 150
153static int LoadWord(FILE* D)151static int LoadWord(ZIO* Z)
154{152{
155 Word w;153 Word w;
156 fread(&w,sizeof(w),1,D);154 zread(Z,&w,sizeof(w));
157 if (swapword)155 if (swapword)
158 {156 {
159 Byte* p=(Byte*)&w; /* TODO: need union? */157 Byte* p=(Byte*)&w;
160 Byte t;158 Byte t;
161 t=p[0]; p[0]=p[1]; p[1]=t;159 t=p[0]; p[0]=p[1]; p[1]=t;
162 }160 }
163 return w;161 return w;
164}162}
165 163
166static int LoadSize(FILE* D)164static int LoadSize(ZIO* Z)
167{165{
168 Word hi=LoadWord(D);166 Word hi=LoadWord(Z);
169 Word lo=LoadWord(D);167 Word lo=LoadWord(Z);
170 int s=(hi<<16)|lo;168 int s=(hi<<16)|lo;
171 if ((Word)s != s) lua_error("code too long");169 if ((Word)s != s) lua_error("code too long");
172 return s;170 return s;
173}171}
174 172
175static void* LoadBlock(int size, FILE* D)173static void* LoadBlock(int size, ZIO* Z)
176{174{
177 void* b=luaI_malloc(size);175 void* b=luaI_malloc(size);
178 fread(b,size,1,D);176 zread(Z,b,size);
179 return b;177 return b;
180}178}
181 179
182static char* LoadString(FILE* D)180static char* LoadString(ZIO* Z)
183{181{
184 int size=LoadWord(D);182 int size=LoadWord(Z);
185 char *b=luaI_buffer(size);183 char *b=luaI_buffer(size);
186 fread(b,size,1,D);184 zread(Z,b,size);
187 return b;185 return b;
188}186}
189 187
190static char* LoadNewString(FILE* D)188static char* LoadNewString(ZIO* Z)
191{189{
192 return LoadBlock(LoadWord(D),D);190 return LoadBlock(LoadWord(Z),Z);
193}191}
194 192
195static void LoadFunction(FILE* D)193static void LoadFunction(ZIO* Z)
196{194{
197 TFunc* tf=new(TFunc);195 TFunc* tf=new(TFunc);
198 tf->next=NULL;196 tf->next=NULL;
199 tf->locvars=NULL;197 tf->locvars=NULL;
200 tf->size=LoadSize(D);198 tf->size=LoadSize(Z);
201 tf->lineDefined=LoadWord(D);199 tf->lineDefined=LoadWord(Z);
202 if (IsMain(tf)) /* new main */200 if (IsMain(tf)) /* new main */
203 {201 {
204 tf->fileName=LoadNewString(D);202 tf->fileName=LoadNewString(Z);
205 Main=lastF=tf;203 Main=lastF=tf;
206 }204 }
207 else /* fix PUSHFUNCTION */205 else /* fix PUSHFUNCTION */
208 {206 {
209 tf->marked=LoadWord(D);207 tf->marked=LoadWord(Z);
210 tf->fileName=Main->fileName;208 tf->fileName=Main->fileName;
211 memcpy(Main->code+tf->marked,&tf,sizeof(tf));209 memcpy(Main->code+tf->marked,&tf,sizeof(tf));
212 lastF=lastF->next=tf;210 lastF=lastF->next=tf;
213 }211 }
214 tf->code=LoadBlock(tf->size,D);212 tf->code=LoadBlock(tf->size,Z);
215 if (swapword || swapfloat) FixCode(tf->code,tf->code+tf->size);213 if (swapword || swapfloat) FixCode(tf->code,tf->code+tf->size);
216 while (1) /* unthread */214 while (1) /* unthread */
217 {215 {
218 int c=getc(D);216 int c=zgetc(Z);
219 if (c==ID_VAR) /* global var */217 if (c==ID_VAR) /* global var */
220 {218 {
221 int i=LoadWord(D);219 int i=LoadWord(Z);
222 char* s=LoadString(D);220 char* s=LoadString(Z);
223 int v=luaI_findsymbolbyname(s);221 int v=luaI_findsymbolbyname(s);
224 Unthread(tf->code,i,v);222 Unthread(tf->code,i,v);
225 }223 }
226 else if (c==ID_STR) /* constant string */224 else if (c==ID_STR) /* constant string */
227 {225 {
228 int i=LoadWord(D);226 int i=LoadWord(Z);
229 char* s=LoadString(D);227 char* s=LoadString(Z);
230 int v=luaI_findconstantbyname(s);228 int v=luaI_findconstantbyname(s);
231 Unthread(tf->code,i,v);229 Unthread(tf->code,i,v);
232 }230 }
233 else231 else
234 {232 {
235 ungetc(c,D);233 zungetc(Z);
236 break;234 break;
237 }235 }
238 }236 }
239}237}
240 238
241static void LoadSignature(FILE* D)239static void LoadSignature(ZIO* Z)
242{240{
243 char* s=SIGNATURE;241 char* s=SIGNATURE;
244 while (*s!=0 && getc(D)==*s)242 while (*s!=0 && zgetc(Z)==*s)
245 ++s;243 ++s;
246 if (*s!=0) lua_error("bad signature");244 if (*s!=0) lua_error("cannot load binary file: bad signature");
247}245}
248 246
249static void LoadHeader(FILE* D) /* TODO: error handling */247static void LoadHeader(ZIO* Z)
250{248{
251 Word w,tw=TEST_WORD;249 Word w,tw=TEST_WORD;
252 float f,tf=TEST_FLOAT;250 float f,tf=TEST_FLOAT;
253 int version;251 int version;
254 LoadSignature(D);252 LoadSignature(Z);
255 version=getc(D);253 version=zgetc(Z);
256 if (version>0x23) /* after 2.5 */254 if (version>0x23) /* after 2.5 */
257 {255 {
258 int oldsizeofW=getc(D);256 int oldsizeofW=zgetc(Z);
259 int oldsizeofF=getc(D);257 int oldsizeofF=zgetc(Z);
260 int oldsizeofP=getc(D);258 int oldsizeofP=zgetc(Z);
261 if (oldsizeofW!=2)259 if (oldsizeofW!=2)
262 lua_error("cannot load binary file created on machine with sizeof(Word)!=2");260 luaL_verror(
261 "cannot load binary file created on machine with sizeof(Word)=%d; "
262 "expected 2",oldsizeofW);
263 if (oldsizeofF!=4)263 if (oldsizeofF!=4)
264 lua_error("cannot load binary file created on machine with sizeof(float)!=4. not an IEEE machine?");264 luaL_verror(
265 if (oldsizeofP!=sizeof(TFunc*)) /* TODO: pack */265 "cannot load binary file created on machine with sizeof(float)=%d; "
266 lua_error("cannot load binary file: different pointer sizes");266 "expected 4\nnot an IEEE machine?",oldsizeofF);
267 if (oldsizeofP!=sizeof(TFunc*)) /* TODO: pack? */
268 luaL_verror(
269 "cannot load binary file created on machine with sizeof(TFunc*)=%d; "
270 "expected %d",oldsizeofP,(int)sizeof(TFunc*));
267 }271 }
268 fread(&w,sizeof(w),1,D); /* test word */272 zread(Z,&w,sizeof(w)); /* test word */
269 if (w!=tw)273 if (w!=tw)
270 {274 {
271 swapword=1;275 swapword=1;
272 warn("different byte order");
273 }276 }
274 fread(&f,sizeof(f),1,D); /* test float */277 zread(Z,&f,sizeof(f)); /* test float */
275 if (f!=tf)278 if (f!=tf)
276 {279 {
277 Byte* p=(Byte*)&f; /* TODO: need union? */280 Byte* p=(Byte*)&f;
278 Byte t;281 Byte t;
279 swapfloat=1;282 swapfloat=1;
280 t=p[0]; p[0]=p[3]; p[3]=t;283 t=p[0]; p[0]=p[3]; p[3]=t;
281 t=p[1]; p[1]=p[2]; p[2]=t;284 t=p[1]; p[1]=p[2]; p[2]=t;
282 if (f!=tf) /* TODO: try another perm? */285 if (f!=tf) /* TODO: try another perm? */
283 lua_error("different float representation");286 lua_error("cannot load binary file: unknown float representation");
284 else
285 warn("different byte order in floats");
286 }287 }
287}288}
288 289
289static void LoadChunk(FILE* D)290static void LoadChunk(ZIO* Z)
290{291{
291 LoadHeader(D);292 LoadHeader(Z);
292 while (1)293 while (1)
293 {294 {
294 int c=getc(D);295 int c=zgetc(Z);
295 if (c==ID_FUN) LoadFunction(D); else { ungetc(c,D); break; }296 if (c==ID_FUN) LoadFunction(Z); else { zungetc(Z); break; }
296 }297 }
297}298}
298 299
@@ -300,30 +301,26 @@ static void LoadChunk(FILE* D) · 1 unmodified line
300** load one chunk from a file.301** load one chunk from a file.
301** return list of functions found, headed by main, or NULL at EOF.302** return list of functions found, headed by main, or NULL at EOF.
302*/303*/
303TFunc* luaI_undump1(FILE* D)304TFunc* luaI_undump1(ZIO* Z)
304{305{
305 while (1)306 int c=zgetc(Z);
307 if (c==ID_CHUNK)
306 {308 {
307 int c=getc(D);309 LoadChunk(Z);
308 if (c==ID_CHUNK)310 return Main;
309 {
310 LoadChunk(D);
311 return Main;
312 }
313 else if (c==EOF)
314 return NULL;
315 else
316 lua_error("not a lua binary file");
317 }311 }
312 else if (c!=EOZ)
313 lua_error("not a lua binary file");
314 return NULL;
318}315}
319 316
320/*317/*
321** load and run all chunks in a file318** load and run all chunks in a file
322*/319*/
323int luaI_undump(FILE* D)320int luaI_undump(ZIO* Z)
324{321{
325 TFunc* m;322 TFunc* m;
326 while ((m=luaI_undump1(D)))323 while ((m=luaI_undump1(Z)))
327 {324 {
328 int status=luaI_dorun(m);325 int status=luaI_dorun(m);
329 luaI_freefunc(m);326 luaI_freefunc(m);
src/undump.h+11−4
@@ -1,10 +1,14 @@
1/*1/*
2** undump.h2** undump.h
3** definitions for lua decompiler3** definitions for lua decompiler
4** $Id: undump.h,v 1.3 1996/11/14 11:44:34 lhf Exp $4** $Id: undump.h,v 1.6 1997/06/17 18:19:17 roberto Exp $
5*/5*/
6 6
7#ifndef undump_h
8#define undump_h
9
7#include "func.h"10#include "func.h"
11#include "zio.h"
8 12
9#define IsMain(f) (f->lineDefined==0)13#define IsMain(f) (f->lineDefined==0)
10 14
@@ -15,9 +19,12 @@ · 4 unmodified lines
15#define ID_VAR 'V'19#define ID_VAR 'V'
16#define ID_STR 'S'20#define ID_STR 'S'
17#define SIGNATURE "Lua"21#define SIGNATURE "Lua"
18#define VERSION 0x25 /* 2.5 */22#define VERSION 0x25 /* last format change was in 2.5 */
19#define TEST_WORD 0x1234 /* a word for testing byte ordering */23#define TEST_WORD 0x1234 /* a word for testing byte ordering */
20#define TEST_FLOAT 0.123456789e-23 /* a float for testing representation */24#define TEST_FLOAT 0.123456789e-23 /* a float for testing representation */
21 25
22TFunc* luaI_undump1(FILE* D); /* load one chunk */26
23int luaI_undump(FILE* D); /* load all chunks */27TFunc* luaI_undump1(ZIO* Z);
28int luaI_undump(ZIO* Z); /* load all chunks */
29
30#endif
src/zio.c+79−0
@@ -0,0 +1,79 @@
1/*
2* zio.c
3* a generic input stream interface
4* $Id: zio.c,v 1.2 1997/06/20 19:25:54 roberto Exp $
5*/
6
7#include <stdio.h>
8#include <stdlib.h>
9#include <string.h>
10#include "zio.h"
11
12
13/* ----------------------------------------------------- memory buffers --- */
14
15static int zmfilbuf(ZIO* z)
16{
17 return EOZ;
18}
19
20ZIO* zmopen(ZIO* z, char* b, int size)
21{
22 if (b==NULL) return NULL;
23 z->n=size;
24 z->p= (unsigned char *)b;
25 z->filbuf=zmfilbuf;
26 z->u=NULL;
27 return z;
28}
29
30/* ------------------------------------------------------------ strings --- */
31
32ZIO* zsopen(ZIO* z, char* s)
33{
34 if (s==NULL) return NULL;
35 return zmopen(z,s,strlen(s));
36}
37
38/* -------------------------------------------------------------- FILEs --- */
39
40static int zffilbuf(ZIO* z)
41{
42 int n=fread(z->buffer,1,ZBSIZE,z->u);
43 if (n==0) return EOZ;
44 z->n=n-1;
45 z->p=z->buffer;
46 return *(z->p++);
47}
48
49
50ZIO* zFopen(ZIO* z, FILE* f)
51{
52 if (f==NULL) return NULL;
53 z->n=0;
54 z->p=z->buffer;
55 z->filbuf=zffilbuf;
56 z->u=f;
57 return z;
58}
59
60
61/* --------------------------------------------------------------- read --- */
62int zread(ZIO *z, void *b, int n)
63{
64 while (n) {
65 int m;
66 if (z->n == 0) {
67 if (z->filbuf(z) == EOZ)
68 return n; /* retorna quantos faltaram ler */
69 zungetc(z); /* poe o resultado de filbuf no buffer */
70 }
71 m = (n <= z->n) ? n : z->n; /* minimo de n e z->n */
72 memcpy(b, z->p, m);
73 z->n -= m;
74 z->p += m;
75 b = (char *)b + m;
76 n -= m;
77 }
78 return 0;
79}
src/zio.h+48−0
@@ -0,0 +1,48 @@
1/*
2* zio.h
3* a generic input stream interface
4* $Id: zio.h,v 1.5 1997/06/20 19:25:54 roberto Exp $
5*/
6
7#ifndef zio_h
8#define zio_h
9
10#include <stdio.h>
11
12
13
14/* For Lua only */
15#define zFopen luaZ_Fopen
16#define zsopen luaZ_sopen
17#define zmopen luaZ_mopen
18#define zread luaZ_read
19
20#define EOZ (-1) /* end of stream */
21
22typedef struct zio ZIO;
23
24ZIO* zFopen(ZIO* z, FILE* f); /* open FILEs */
25ZIO* zsopen(ZIO* z, char* s); /* string */
26ZIO* zmopen(ZIO* z, char* b, int size); /* memory */
27
28int zread(ZIO* z, void* b, int n); /* read next n bytes */
29
30#define zgetc(z) (--(z)->n>=0 ? ((int)*(z)->p++): (z)->filbuf(z))
31#define zungetc(z) (++(z)->n,--(z)->p)
32
33
34
35/* --------- Private Part ------------------ */
36
37#define ZBSIZE 256 /* buffer size */
38
39struct zio {
40 int n; /* bytes still unread */
41 unsigned char* p; /* current position in buffer */
42 int (*filbuf)(ZIO* z);
43 void* u; /* additional data */
44 unsigned char buffer[ZBSIZE]; /* buffer */
45};
46
47
48#endif
test/README+3−4
@@ -1,7 +1,6 @@
1These are simple tests for Lua. Some of them contain useful code.1These are simple tests for Lua. Some of them contain useful code.
2They are meant to be run to make sure Lua is ok and also to be read, to see2They are meant to be run to make sure Lua is ok and also to be read, to see
3how Lua programs can look like.3how Lua programs can look like.
4In the directory examples/, there is more useful code, such as a library for4
5complex arithmetic (a good example of fallbacks for overloading and redefinition5In the directory examples/, there is more useful code: a library for PostScript
6of primitive functions), and a library for PostScript output. Both libraries6output and a database for a fake web site.
7include simple examples.
test/array.lua+3−3
@@ -2,14 +2,14 @@ $debug · 1 unmodified line
2 2
3a = {}3a = {}
4 4
5i=05local i=0
6while i<10 do6while i<10 do
7 a[i] = i*i7 a[i] = i*i
8 i=i+18 i=i+1
9end9end
10 10
11r,v = next(a,nil)11local r,v = next(a,nil)
12while r ~= nil do12while r ~= nil do
13 print ("array["..r.."] = "..v)13 write ("array[",r,"] = ",v,"\n")
14 r,v = next(a,r)14 r,v = next(a,r)
15end 15end
test/bisect.lua+2−2
@@ -2,7 +2,7 @@ $debug · 1 unmodified line
2-- bisection method for solving non-linear equations2-- bisection method for solving non-linear equations
3 3
4function bisect(f,a,b,fa,fb)4function bisect(f,a,b,fa,fb)
5print(n.." a="..a.." fa="..fa.." b="..b.." fb="..fb)5 write(n," a=",a," fa=",fa," b=",b," fb=",fb,"\n")
6 local c=(a+b)/26 local c=(a+b)/2
7 if abs(a-b)<delta then return c end7 if abs(a-b)<delta then return c end
8 n=n+18 n=n+1
@@ -15,7 +15,7 @@ function solve(f,a,b) · 6 unmodified lines
15 delta=1e-6 -- tolerance15 delta=1e-6 -- tolerance
16 n=016 n=0
17 local z=bisect(f,a,b,f(a),f(b))17 local z=bisect(f,a,b,f(a),f(b))
18 print(format("after %d steps, root is %.10g",n,z))18 write(format("after %d steps, root is %.10g\n",n,z))
19end19end
20 20
21-- our function21-- our function
test/dump.lua+15−11
@@ -1,17 +1,19 @@
1-- dump global environment1-- dump global environment
2 2
3function savevar (n,v)3function savevar (n,v)
4 if v == nil then return end;4 if v == nil then return end
5 if type(v) == "number" then print(n.."="..v) return end5 if type(v)=="userdata" or type(v)=="function" then return end
6 if type(v) == "string" then print(n.."='"..v.."'") return end6 -- if type(v)=="userdata" or type(v)=="function" then write("\t-- ") end
7 if type(v) == "table" then7 write(n,"=")
8 if type(v) == "string" then write(format("%q",v))
9 elseif type(v) == "table" then
8 if v.__visited__ ~= nil then10 if v.__visited__ ~= nil then
9 print(n .. "=" .. v.__visited__);11 write(v.__visited__)
10 else12 else
11 print(n.."={}")13 write("{}\n")
12 v.__visited__ = n;14 v.__visited__ = n
13 local r,f;15 local r,f
14 r,f = next(v,nil);16 r,f = next(v,nil)
15 while r ~= nil do17 while r ~= nil do
16 if r ~= "__visited__" then18 if r ~= "__visited__" then
17 if type(r) == 'string' then19 if type(r) == 'string' then
@@ -23,13 +25,15 @@ function savevar (n,v) · 5 unmodified lines
23 r,f = next(v,r)25 r,f = next(v,r)
24 end26 end
25 end27 end
26 end28 else write(tostring(v)) end
29 write("\n")
27end30end
28 31
29function save ()32function save ()
33 print("\n-- global environment")
30 local n,v = nextvar(nil)34 local n,v = nextvar(nil)
31 while n ~= nil do 35 while n ~= nil do
32 savevar(n,v); 36 savevar(n,v)
33 n,v = nextvar(n)37 n,v = nextvar(n)
34 end38 end
35end39end
test/examples/complex/complex.lua+0−82
@@ -1,82 +0,0 @@
1-- complex.lua
2-- complex arithmetic package for lua
3-- Luiz Henrique de Figueiredo (lhf@csg.uwaterloo.ca)
4-- 24 Oct 95
5$debug
6
7Complex={type="package"}
8
9function complex(x,y)
10 return { re=x, im=y, type="complex" }
11end
12
13function Complex.conj(x,y)
14 return complex(x.re,-x.im)
15end
16
17function Complex.norm2(x)
18 local n=Complex.mul(x,Complex.conj(x))
19 return n.re
20end
21
22function Complex.abs(x)
23 return sqrt(Complex.norm2(x))
24end
25
26function Complex.add(x,y)
27 return complex(x.re+y.re,x.im+y.im)
28end
29
30function Complex.sub(x,y)
31 return complex(x.re-y.re,x.im-y.im)
32end
33
34function Complex.mul(x,y)
35 return complex(x.re*y.re-x.im*y.im,x.re*y.im+x.im*y.re)
36end
37
38function Complex.div(x,y)
39 local z=x*Complex.conj(y)
40 local t=Complex.norm2(y)
41 z.re=z.re/t
42 z.im=z.im/t
43 return z
44end
45
46function Complex.fallback(x,y,op)
47 if type(x)=="number" then x=complex(x,0) end
48 if type(y)=="number" then y=complex(y,0) end
49 if type(x)=="complex" and type(y)=="complex" then
50 return Complex[op](x,y)
51 else
52 return Complex.oldfallback(x,y)
53 end
54end
55
56function Complex.newtype(x)
57 local t=Complex.oldtype(x)
58 if t=="table" and x.type then return x.type else return t end
59end
60
61function Complex.print(x)
62 if type(x)~="complex" then
63 Complex.oldprint(x)
64 else
65 local s
66 if x.im>=0 then s="+" else s="" end
67 Complex.oldprint(x.re..s..x.im.."I")
68 end
69end
70
71function Complex.newabs(x)
72 if type(x)~="complex" then
73 return Complex.oldabs(x)
74 else
75 return Complex.abs(x)
76 end
77end
78
79Complex.oldfallback=setfallback("arith",Complex.fallback)
80Complex.oldtype=type type=Complex.newtype
81Complex.oldprint=print print=Complex.print
82Complex.oldabs=abs abs=Complex.abs
test/examples/complex/mandel.lua+0−25
@@ -1,25 +0,0 @@
1dofile("complex.lua")
2
3xmin=-2 xmax=2 ymin=-2 ymax=2
4d=.125
5
6function level(x,y)
7 local c=complex(x,y)
8 local l=0
9 local z=c
10 repeat
11 z=z*z+c
12 l=l+1
13 until abs(z)>2 or l>255
14 return l-1
15end
16
17x=xmin
18while x<xmax do
19 y=ymin
20 while y<ymax do
21 print(level(x,y))
22 y=y+d
23 end
24 x=x+d
25end
test/examples/www/README+10−0
@@ -0,0 +1,10 @@
1This directory contains a database for a fake web site.
2Standard web page for the persons listed in db.lua are
3creared automatically from template.html with staff.lua.
4(See http://www.cos.ufrj.br for a real web site was created in this way.)
5
6To run, type lua db.lua.
7
8This example is meant to show the power of gsub and Lua declarative constructs,
9which have been combined here into a "mail-merge" application.
10
test/examples/www/db.lua+46−0
@@ -0,0 +1,46 @@
1dofile("staff.lua")
2
3global{
4 ROOT='http://www.tecgraf.puc-rio.br',
5 EMAIL="|LOGIN|@tecgraf.puc-rio.br",
6 WWW="|ROOT|/~|LOGIN|",
7 webmast='|ROOT|/webmaster.html',
8 TECGRAF='<A HREF="http://www.tecgraf.puc-rio.br">TeCGraf</A>',
9 CS='<A HREF="http://www.inf.puc-rio.br">Computer Science Department</A>',
10 PUCRIO='<A HREF="http://www.puc-rio.br">PUC-Rio</A>',
11}
12
13staff{
14DI="inf.puc-rio.br",
15 LOGIN="roberto",
16 NAME="Roberto Ierusalimschy",
17 TITLE="D.Sc., |PUCRIO|, 1990",
18 POSITION="Associate Professor, |CS|, |PUCRIO|",
19 AREAS="Programming Languages, Object Oriented Programming",
20 EMAIL="|LOGIN|@|DI|",
21 WWW="http://www.|DI|/~|LOGIN|",
22}
23
24staff{
25PCG="http://www.graphics.cornell.edu",
26 LOGIN="celes",
27 NAME="Waldemar Celes",
28 TITLE="D.Sc., |PUCRIO|, 1995",
29 POSITION="Postdoctoral Associate at "..
30'<A HREF="|PCG|">Program of Computer Graphics</A>, '..
31'<A HREF="http://www.cornell.edu">Cornell University</A>',
32 WWW="|PCG|/~celes/",
33 AREAS="Image segmentation and 3D reconstruction; "
34.."Physical simulation and educational software;"
35.."Geometric modeling and topological data structures;"
36.."Extension languages and customizable applications"
37}
38
39staff{
40 LOGIN="lhf",
41 NAME="Luiz Henrique de Figueiredo",
42 TITLE='D.Sc., <A HREF="http://www.impa.br">IMPA</A>, 1992',
43 POSITION='Visiting Research fellow at <A HREF="http://www.lncc.br">LNCC</A>; Consultant at |TECGRAF|',
44 AREAS="Geometric modeling; Software tools",
45 WWW="http://www2.lncc.br/~lhf/",
46}
test/examples/www/staff.lua+37−0
@@ -0,0 +1,37 @@
1$debug
2
3readfrom("template.html")
4TEMPLATE=read(".*")
5readfrom()
6
7PAT="|(%a%a*)|"
8
9GLOBAL={
10 DATE=date("%d/%m/%Y %T"),
11}
12
13function get(i)
14 if LOCAL[i] then return LOCAL[i]
15 elseif GLOBAL[i] then return GLOBAL[i]
16 else return "<BLINK>?"..i.."?</BLINK>" end
17end
18
19function global(t)
20 local i,v=next(t,nil)
21 while i do
22 GLOBAL[i]=v
23 i,v=next(t,i)
24 end
25end
26
27function staff(t)
28 LOCAL=t
29 if t.AREAS then t.AREAS=gsub(t.AREAS,"[;,] *","\n<LI>") end
30 local p,n=TEMPLATE
31 if t.WWW=="" then p=gsub(p,'<A HREF="|WWW|">|NAME|</A>',"|NAME|") end
32 repeat p,n=gsub(p,PAT,get) until n==0
33 write(t.LOGIN,"\n")
34 writeto(t.LOGIN..".html")
35 write(p)
36 writeto()
37end
test/examples/www/template.html+29−0
@@ -0,0 +1,29 @@
1<HTML>
2<HEAD>
3<TITLE>
4Imaginary web site:Staff:|LOGIN|
5</TITLE>
6</HEAD>
7
8<BODY>
9<H1><A HREF="|WWW|">|NAME|</A></H1>
10<A HREF="mailto:|EMAIL|">|EMAIL|</A>
11<P>
12
13|POSITION|<BR>
14|TITLE|<P>
15
16<H2>Research areas</H2>
17<UL>
18<LI>|AREAS|
19</UL>
20<P>
21
22<HR>
23Last update in |DATE| by
24<A HREF="|webmast|">websmaster</A>.
25<P>
26
27</BODY>
28
29</HTML>
test/hello.lua+1−1
@@ -1,3 +1,3 @@
1-- the first program in every language1-- the first program in every language
2 2
3print("hello world, from Lua!")3write("hello world, from Lua!\n")
test/loop.lua+0−6
@@ -1,6 +0,0 @@
1$debug
2i=0
3repeat
4 print(i)
5 i=i+1
6until i>10
test/lua+1−0
@@ -0,0 +1 @@
1../bin/lua
test/luac+1−0
@@ -0,0 +1 @@
1../bin/luac
test/sort.lua+1−1
@@ -28,7 +28,7 @@ function selectionsort(a,n) · 27 unmodified lines
28end28end
29 29
30function show(m,x)30function show(m,x)
31 write(m.."\n\t")31 write(m,"\n\t")
32 local i=032 local i=0
33 while x[i] do33 while x[i] do
34 write(x[i])34 write(x[i])
test/split.lua+0−18
@@ -1,18 +0,0 @@
1function split (s)
2 local n = 1
3 local f = strfind(s,"/")
4 while f do
5 n = n+f
6 f = strfind(strsub(s,n),"/")
7 end
8 return strsub(s,1,n-1), strsub(s,n)
9end
10
11
12function test(s)
13 local path, filename = split(s)
14 print(s .. "=[".. path.."]+["..filename.."]")
15end
16
17test("a:/lua/obj/lua.c")
18test("lua.lib")
test/type.lua+0−37
@@ -1,37 +0,0 @@
1$debug
2
3function check (object, class)
4 local v = next(object,nil);
5 while v ~= nil do
6 if class[v] == nil then
7 print("unknown field: " .. v)
8 elseif type(object[v]) ~= class[v].type then
9 print("wrong type for field " .. v)
10 end
11 v = next(object,v);
12 end
13 v = next(class,nil);
14 while v ~= nil do
15 if object[v] == nil then
16 if class[v].default ~= nil then
17 object[v] = class[v].default
18 else
19 print("field "..v.." not initialized")
20 end
21 end
22 v = next(class,v);
23 end
24end
25
26typeblock = {x = {default = 0, type = "number"},
27 y = {default = 0, type = "number"},
28 name = {type = "string"}
29 }
30
31function block(t) check(t,typeblock) end
32
33block{ x = 7, name = "3"}
34block{ x = "7", name = "3"}
35block{ x = 7, name = 3}
36block{ x = 7}
37block{ x = 7, name = "3", bogus=3.14}