chiark / gitweb /
Merge branch 'master' of ijackson@chiark:things/ypp-sc-tools
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 15 Jun 2009 12:32:07 +0000 (13:32 +0100)
committerIan Jackson <Ian.Jackson@eu.citrix.com>
Mon, 15 Jun 2009 12:32:07 +0000 (13:32 +0100)
23 files changed:
pctb/Makefile
pctb/charset-15.txt
pctb/common.c [new file with mode: 0644]
pctb/common.h
pctb/convert.c
pctb/convert.h
pctb/example [new file with mode: 0644]
pctb/getislands-history [new file with mode: 0644]
pctb/ocr.c
pctb/ocr.h
pctb/pages.c
pctb/pixmaps.txt [new file with mode: 0644]
pctb/resolve.c [new file with mode: 0644]
pctb/rgbimage.c [new file with mode: 0644]
pctb/setisland-history [new file with mode: 0644]
pctb/structure.c
pctb/structure.h
pctb/vessel.ppm [new file with mode: 0644]
pctb/yppsc-commod-processor
pctb/yppsc-decode-marketdata
pctb/yppsc-ocr-resolver
pctb/yppsc-ppmlookup [new file with mode: 0755]
pctb/yppsc-resolver-pixoptions [new file with mode: 0755]

index c008d1efff40b6d0ac6c111cbf3615c33f90019a..f798e52aa0e05540b08c2d2e5b8247687fe460eb 100644 (file)
@@ -35,7 +35,7 @@ TARGETS= ypp-commodities
 
 all: $(TARGETS)
 
-CONVERT_OBJS= convert.o ocr.o pages.o structure.o
+CONVERT_OBJS= convert.o ocr.o pages.o structure.o common.o rgbimage.o resolve.o
 
 ypp-commodities: $(CONVERT_OBJS) -lnetpbm -lXtst -lX11
        $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS)
index b87636c32a993f6bde8d1e0bd3a9ea82fd8f8111..0be3d67580a4c7fcb6f227827b9c52f57fa2c711 100644 (file)
@@ -215,17 +215,6 @@ ff8
 fc0
 800
 
-Lower
-In
-ff8
-0
-0
-fe0
-40
-20
-20
-fc0
-
 Lower
 Iron
 ff8
diff --git a/pctb/common.c b/pctb/common.c
new file mode 100644 (file)
index 0000000..3cb4323
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * Utility functions
+ */
+/*
+ *  This is part of ypp-sc-tools, a set of third-party tools for assisting
+ *  players of Yohoho Puzzle Pirates.
+ * 
+ *  Copyright (C) 2009 Ian Jackson <ijackson@chiark.greenend.org.uk>
+ * 
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ * 
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ * 
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * 
+ *  Yohoho and Puzzle Pirates are probably trademarks of Three Rings and
+ *  are used without permission.  This program is not endorsed or
+ *  sponsored by Three Rings.
+ */
+
+#include "common.h"
+
+void *mmalloc(size_t sz) {
+  void *r;
+  if (!sz) return 0;
+  sysassert( r= malloc(sz) );
+  return r;
+}
+void *mrealloc(void *p, size_t sz) {
+  assert(sz);
+  void *r;
+  sysassert( r= realloc(p,sz) );
+  return r;
+}
+
+
+FILE *dbfile;
+static const char *path;
+
+int dbfile_open(const char *tpath) {
+  assert(!dbfile);
+  path= tpath;
+  dbfile= fopen(path,"r");
+  if (dbfile) return 1;
+  sysassert(errno==ENOENT);
+  return 0;
+}  
+
+#define dbassertgl(x) ((x) ? (void)0 : dbfile_assertfail(file,line,#x))
+
+void dbfile_getsline(char *lbuf, size_t lbufsz, const char *file, int line) {
+  errno=0;
+  char *s= fgets(lbuf,lbufsz,dbfile);
+  sysassert(!ferror(dbfile));
+  dbassertgl(!feof(dbfile));
+  assert(s);
+  int l= strlen(lbuf);
+  dbassertgl(l>0);  dbassertgl(lbuf[--l]=='\n');
+  lbuf[l]= 0;
+}
+
+void dbfile_close(void) {
+  if (!dbfile) return;
+  sysassert(!ferror(dbfile));
+  sysassert(!fclose(dbfile));
+  dbfile= 0;
+}
+
+int dbfile_vscanf(const char *fmt, va_list al) {
+  int r= vfscanf(dbfile,fmt,al);
+  sysassert(!ferror(dbfile));
+  return r;
+}
+
+int dbfile_scanf(const char *fmt, ...) {
+  va_list al;
+  va_start(al,fmt);
+  int r= dbfile_vscanf(fmt,al);
+  va_end(al);
+  return r;
+}
+
+void dbfile_assertfail(const char *file, int line, const char *m) {
+  fatal("Error in database file %s at byte %ld:\n"
+       " Requirement not met at %s:%d:\n"
+       " %s",
+       path,(long)ftell(dbfile), file,line, m);
+}
index 8b66cf5e94b416a1a3ce4c1aba9bb1c9cbe135da..47f898f06fecd31519d3bc0f717e0e024c1e41cf 100644 (file)
 #define _GNU_SOURCE
 
 #include <stdarg.h>
-
+#include <stdio.h>
+#include <errno.h>
+#include <assert.h>
+#include <string.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <inttypes.h>
+
+#include <sys/wait.h>
 #include <sys/types.h>
 
 typedef struct {
@@ -51,12 +60,16 @@ typedef struct { /* both inclusive */
   Point br;
 } Rect;
 
+#define RECT_W(r) ((r).br.x - (r).tl.x + 1)
+#define RECT_H(r) ((r).br.y - (r).tl.y + 1)
+
 
 
 #define DEBUG_FLAG_LIST                                \
    DF(findypp)                                 \
    DF(pages)                                   \
    DF(rect)                                    \
+   DF(pixmap)                                  \
    DF(struct)                                  \
    DF(ocr)                                     \
    DF(callout)
@@ -82,6 +95,7 @@ void debug_flush(void);
 const char *get_vardir(void);
 
 #define FMT(f,a) __attribute__((format(printf,f,a)))
+#define SCANFMT(f,a) __attribute__((format(scanf,f,a)))
 #define NORET __attribute__((noreturn))
 
 #define DEFINE_VWRAPPERF(decls, funcf, otherattribs)                   \
@@ -118,4 +132,16 @@ void *mmalloc(size_t sz);
 void *mrealloc(void *p, size_t sz);
 
 
+#define dbassert(x) ((x) ? (void)0 : dbfile_assertfail(__FILE__,__LINE__,#x))
+void dbfile_assertfail(const char *file, int line, const char *m) NORET;
+
+FILE *dbfile;
+void dbfile_getsline(char *lbuf, size_t lbufsz, const char *file, int line);
+int dbfile_open(const char *tpath); /* 0: ENOENT; 1: worked */
+void dbfile_close(void); /* idempotent */
+
+int dbfile_scanf(const char *fmt, ...) SCANFMT(1,2);
+int dbfile_vscanf(const char *fmt, va_list al) SCANFMT(1,0);
+
+
 #endif /*COMMON_H*/
index 75c70804df7b7d4632e9ee9967540f873c21d313..dd7f5d1b426dc32d5315ab37cb11793535f7c526 100644 (file)
@@ -166,6 +166,7 @@ int main(int argc, char **argv) {
     else read_screenshots();
   }
   if (o_mode & mf_analyse) {
+    find_islandname();
     if (o_outputmode)
       run_analysis();
     else
@@ -258,19 +259,6 @@ void sysassert_fail(const char *file, int line, const char *what) {
   _exit(16);
 }
 
-void *mmalloc(size_t sz) {
-  void *r;
-  if (!sz) return 0;
-  sysassert( r= malloc(sz) );
-  return r;
-}
-void *mrealloc(void *p, size_t sz) {
-  assert(sz);
-  void *r;
-  sysassert( r= realloc(p,sz) );
-  return r;
-}
-
 void waitpid_check_exitstatus(pid_t pid, const char *what) { 
   pid_t got;
   int st;
index 8c6efefd7b3c0311eaed52f4320257bbd8eb15a5..b5e9230ec1efb485c2d9d3b0369532f4ccc49a75 100644 (file)
 #include <sys/time.h>
 
 
+/*----- from rgbimage.c -----*/
+
+#define MAXIMGIDENT 100
+
+typedef struct RgbImage {
+  int w, h;
+  unsigned char data[];
+  /* red   = data[ y*w*3 + x*3 + 0 ] = RI_PIXEL(ri,x,y)[0]
+   * green = data[ y*w*3 + x*3 + 1 ] = RI_PIXEL(ri,x,y)[1]
+   * blue  = data[ y*w*3 + x*3 + 2 ] = RI_PIXEL(ri,x,y)[2]
+   */
+} RgbImage;
+
+void identify_rgbimage(const RgbImage *base, Rect portion,
+                      char result[MAXIMGIDENT], const char *what);
+RgbImage *alloc_rgb_image(int w, int h);
+
+#define RI_PIXEL(ri,x,y) ((ri)->data + ((y)*(ri)->w + (x)) * 3)
+
 /*----- from structure.c -----*/
 
-void find_structure(CanonImage *im, int *max_relevant_y_r);
+void find_structure(const CanonImage *im, int *max_relevant_y_r);
+
+void find_islandname(void);
 void check_correct_commodities(void);
 void read_screenshots(void);
 void read_one_screenshot(void);
@@ -73,6 +94,7 @@ void take_one_screenshot(void);
 #define MAX_PAGES 100
 extern CanonImage *page_images[MAX_PAGES];
 extern int npages;
+RgbImage *page0_rgbimage;
 
 extern char *ocean, *pirate;
 
diff --git a/pctb/example b/pctb/example
new file mode 100644 (file)
index 0000000..b11651d
--- /dev/null
@@ -0,0 +1,85 @@
+
+
+
+Version number (3 ascii digits) followed
+by LF (i.e. 0x0A).  Current version is\
+ 005
+
+  0000   30 30 35 0a                                        005.
+
+# of shops/stalls (in ascii)  + LF
+  0000               31 0a                                      1.           
+
+list of shop names in ascii (without the
+possessive part and by specifying the \
+shop type in an abbreviated way which is
+mentioned below).  The shop names are
+separated \ by line feeds (0x0A).  To
+specify the shop type append the "^"
+character and then \ one of the
+following characters depending upon the
+shop type:
+   Apothecary = A
+   Distillery = D
+   Furnisher = F
+   Iron Monger = I
+   Shipyard = S
+   Tailor = T
+   Weavery = W
+
+  0000                     4f 6c  64 20 49 72 6f 6e 73 69         Ol d Ironsi
+  0010   64 65 73 0a                                        des.              
+
+# of buy offers (in binary)
+  0010               05 00                                 
+
+commodIndex offerCount                                       buy 0/5
+  0010                     0a 00  01 00                      Grog x 1
+[shopIndex val amt]                   
+  0010                                  01 00 1d 00 75 00    OI 29 qty 75
+
+commodIndex offerCount                                       buy 1/5
+  0020   0b 00 01 00                                         Fine x 1
+[shopIndex val amt]... (all in binar\ y)
+  0020               01 00 33 00  e9 03                      OI 51 qty 0x3e9
+
+commodIndex offerCount                                       buy 2/5
+  0020                                  0c 00 01 00          Small shot x 1
+[shopIndex val amt]
+  0020                                              01 00    OI
+  0030   0f 00 e9 03                                         15 qty 0x3e9
+
+commodIndex offerCount                                       buy 3/5
+  0030               0d 00 01 00                             Medium shot x 1
+[shopIndex val amt]
+  0030                            01 00 1c 00 e9 03          OI 28 qty 0x3e9
+
+commodIndex offerCount                                       buy 4/5
+  0030                                              0e 00    Large shot
+  0040   01 00                                                          x 1
+[shopIndex val amt]
+  0040         01 00 26 00 e9 03                             OI 38 0x3e9
+
+
+# of sell offers (in binary)
+  0040                            04 00
+
+commodIndex offerCount                                       sell 0/4
+  0040                                  09 00 01 00          Swill x 1
+[shopIndex val amt]
+  0040                                              01 00    OI 
+  0050   17 00 e8 03                                         23 0x3e8
+commodIndex offerCount                                       sell 1/4
+  0050               0a 00 01 00                             Grog x 1
+[shopIndex val amt]
+  0050                            01 00 1e 00 73 03          OI 30 qty 0x373
+commodIndex offerCount                                       sell 2/4
+  0050                                              0c 00    Small shot
+  0060   01 00                                               x 1
+[shopIndex val amt]
+  0060         01 00 10 00 07 00                             OI 16 qty 7
+commodIndex offerCount                                       sell 3/4
+  0060                            0d 00 01 00                Medium shot x 1
+[shopIndex val amt]
+  0060                                        01 00 1e 00    OI 30
+  0070   02 00                                               qty 2
diff --git a/pctb/getislands-history b/pctb/getislands-history
new file mode 100644 (file)
index 0000000..f829914
--- /dev/null
@@ -0,0 +1,11 @@
+    1  cd things/ypp-sc-tools-pctb/pctb/
+    2  ll
+    3  less example 
+    4  curl 'http://pctb.ilk.org/islands.php?oceanName=MIDNIGHT'
+    5  curl 'http://pctb.ilk.org/islands.php?oceanName=MIDNIGHT'; echo
+    6  xmag
+    7  history >getislands-history
+    8  curl 'http://pctb.ilk.org/islands.php?oceanName=SPONG'; echo
+    9  curl 'http://pctb.ilk.org/islands.php?oceanName=MIDNIGHT'; echo
+   10  curl 'http://pctb.ilk.org/oceans.php'; echo
+   11  history >getislands-history
index 78542398abe3edcfdbc2078db667a1d135d01d01..927b93a97894e41949799a773adc0644a298f217 100644 (file)
@@ -75,28 +75,9 @@ struct OcrReader {
   int aresults, nresults;
 };
 
-static FILE *resolver;
-static pid_t resolver_pid;
-static int resolver_done;
-
 DEBUG_DEFINE_DEBUGF(ocr)
 
-#define dbassert(x)                                                    \
-  ((x) ? (void)0 :                                                     \
-     fatal("Error in character set database.\n"                                \
-          " Requirement not met: %s:%d: %s", __FILE__,__LINE__, #x))
-
-static void fgetsline(FILE *f, char *lbuf, size_t lbufsz) {
-  errno=0;
-  char *s= fgets(lbuf,lbufsz,f);
-  sysassert(!ferror(f));
-  dbassert(!feof(f));
-  assert(s);
-  int l= strlen(lbuf);
-  dbassert(l>0);  dbassert(lbuf[--l]='\n');
-  lbuf[l]= 0;
-}
-#define FGETSLINE(f,buf) (fgetsline(f,buf,sizeof(buf)))
+#define FGETSLINE (dbfile_getsline(lbuf,sizeof(lbuf),__FILE__,__LINE__))
 
 static void cleardb_node(DatabaseNode *n) {
   int i;
@@ -110,10 +91,9 @@ static void readdb(OcrReader *rd) {
   DatabaseNode *current, *additional;
   char chrs[MAXGLYPHCHRS+1];
   Pixcol cv;
-  int r,j,ctxi;
+  int j,ctxi;
   int h, endsword;
   char lbuf[100];
-  FILE *db;
 
   for (ctxi=0; ctxi<NCONTEXTS; ctxi++)
     cleardb_node(&rd->contexts[ctxi]);
@@ -122,41 +102,36 @@ static void readdb(OcrReader *rd) {
   asprintf(&dbfname,"%s/charset-%d.txt",get_vardir(),rd->h);
   sysassert(dbfname);
   
-  db= fopen(dbfname,"r");
-  free(dbfname);
-  if (!db) {
-    sysassert(errno==ENOENT);
-    return;
-  }
+  if (!dbfile_open(dbfname))
+    goto x;
 
-  FGETSLINE(db,lbuf);
+  FGETSLINE;
   dbassert(!strcmp(lbuf,"# ypp-sc-tools pctb font v1"));
 
-  r= fscanf(db, "%d", &h);
-  dbassert(r==1);
+  dbassert( dbfile_scanf("%d", &h) == 1);
   dbassert(h==rd->h);
 
   for (;;) {
-    FGETSLINE(db,lbuf);
-    if (!lbuf || lbuf[0]=='#') continue;
+    FGETSLINE;
+    if (!lbuf[0] || lbuf[0]=='#') continue;
     if (!strcmp(lbuf,".")) break;
 
     for (ctxi=0; ctxi<NCONTEXTS; ctxi++)
       if (!strcmp(lbuf,context_names[ctxi]))
        goto found_ctx;
     /* not found, just skip */
-    for (;;) { FGETSLINE(db,lbuf); if (!lbuf[0]) break; }
+    for (;;) { FGETSLINE; if (!lbuf[0]) break; }
     continue;
 
   found_ctx:
     for (nchrs=0;;) {
-      int c= fgetc(db); sysassert(!ferror(db)); dbassert(c!=EOF);
+      int c= fgetc(dbfile); sysassert(!ferror(dbfile)); dbassert(c!=EOF);
       if (c=='\n') { dbassert(nchrs); break; }
       dbassert(nchrs<MAXGLYPHCHRS);
       if (c=='\\') {
        unsigned cr;
-       c= fgetc(db); sysassert(!ferror(db)); dbassert(c=='x');
-       r= fscanf(db, "%2x", &cr); sysassert(!ferror(db)); dbassert(r==1);
+       c= fgetc(dbfile); sysassert(!ferror(dbfile)); dbassert(c=='x');
+       dbassert( dbfile_scanf("%2x", &cr) == 1);
        assert(cr>0 && cr<=255);
        c= cr;
       }
@@ -171,7 +146,7 @@ static void readdb(OcrReader *rd) {
 
     current= &rd->contexts[ctxi];
     for (;;) {
-      FGETSLINE(db,lbuf);
+      FGETSLINE;
       if (!lbuf[0]) { dbassert(current != &rd->contexts[ctxi]); break; }
       char *ep;
       cv= strtoul(lbuf,&ep,16);  dbassert(!*ep);
@@ -205,11 +180,12 @@ static void readdb(OcrReader *rd) {
     strcpy(current->s, chrs);
     current->endsword= endsword;
   }
-  sysassert(!ferror(db));
-  sysassert(!fclose(db));
+ x:
+  dbfile_close();
+  free(dbfname);
 }
 
-static void cu_pr_ctxmap(unsigned ctxmap) {
+static void cu_pr_ctxmap(FILE *resolver, unsigned ctxmap) {
   fprintf(resolver,"{");
   const char *spc="";
   int ctxi;
@@ -223,46 +199,25 @@ static void cu_pr_ctxmap(unsigned ctxmap) {
 
 static void callout_unknown(OcrReader *rd, int w, Pixcol cols[],
                            int unk_l, int unk_r, unsigned unk_ctxmap) {
-  int jobpipe[2],donepipe[2], c,i, x,y;
+  int c,i, x,y;
   const OcrResultGlyph *s;
   const char *p;
-  char cb;
   Pixcol pv;
 
-  if (!o_resolver)
+  FILE *resolver= resolve_start();
+  if (!resolver)
     fatal("OCR failed - unrecognised characters or ligatures.\n"
          "Character set database needs to be updated or augmented.\n"
          "See README.charset.\n");
   
-  if (!resolver) {
-    sysassert(! pipe(jobpipe) );
-    sysassert(! pipe(donepipe) );
-    resolver_pid= fork();
-    sysassert(resolver_pid!=-1);
-    if (!resolver_pid) {
-      sysassert( dup2(jobpipe[0],0) ==0 );
-      sysassert(! close(jobpipe[1]) );
-      sysassert(! close(donepipe[0]) );
-      /* we know donepipe[1] is >= 4 and we have dealt with all the others
-       * so we aren't in any danger of overwriting some other fd 4: */
-      sysassert( dup2(donepipe[1],4) ==4 );
-      execlp(o_resolver, o_resolver,
-            DEBUGP(callout) ? "--debug" : "--noop-arg",
-            "--automatic-1",
-            (char*)0);
-      sysassert(!"execlp ocr-resolver failed");
-    }
-    sysassert(! close(jobpipe[0]) );
-    sysassert(! close(donepipe[1]) );
-    resolver= fdopen(jobpipe[1],"w"); sysassert(resolver);
-    resolver_done= donepipe[0];
-  }
-  fprintf(resolver,"%d %d ",unk_l,unk_r);
-  cu_pr_ctxmap(unk_ctxmap);
+  fprintf(resolver,
+         "char\n"
+         "%d %d ",unk_l,unk_r);
+  cu_pr_ctxmap(resolver,unk_ctxmap);
   for (i=0, s=rd->results; i<rd->nresults; i++, s++) {
     if (!strcmp(s->s," ")) continue;
     fprintf(resolver," %d %d ",s->l,s->r);
-    cu_pr_ctxmap(s->ctxmap);
+    cu_pr_ctxmap(resolver,s->ctxmap);
     fprintf(resolver," ");
     for (p=s->s; (c= *p); p++) {
       if (c=='\\') fprintf(resolver,"\\%c",c);
@@ -287,28 +242,8 @@ static void callout_unknown(OcrReader *rd, int w, Pixcol cols[],
     fputs("\",\n",resolver);
   }
   fputs("};\n",resolver);
-  sysassert(!ferror(resolver));
-  sysassert(!fflush(resolver));
-
-  sysassert(resolver);
-
-  int r;
-  for (;;) {
-    r= read(resolver_done,&cb,1);
-    if (r==-1) { sysassert(errno==EINTR); continue; }
-    break;
-  }
-
-  if (r==0) {
-    waitpid_check_exitstatus(resolver_pid, "character resolver");
-    fclose(resolver);
-    close(resolver_done);
-    resolver= 0;
-  } else {
-    assert(r==1);
-    sysassert(cb==0);
-  }
 
+  resolve_finish();
   readdb(rd);
 }
 
index 69ccbe906be30c179d9b0b311aad353f356e04c5..97a5c66997f16efa2abdf586979e21ffc5c9b1be 100644 (file)
 
 #include "common.h"
 
-#include <string.h>
-#include <stdio.h>
-#include <errno.h>
-#include <assert.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <inttypes.h>
-
-#include <sys/wait.h>
-
 
 typedef uint32_t Pixcol;
 #define PSPIXCOL(priscan) priscan##32
@@ -67,7 +56,11 @@ OcrResultGlyph *ocr(OcrReader *rd, OcrCellType, int w, Pixcol cols[]);
    * array is valid until next call to ocr()
    */
 
+
 extern const char *o_resolver;
 
+FILE *resolve_start(void);
+void resolve_finish(void);
+
 
 #endif /*OCR_H*/
index 1fba5a64fccc2b6ccbacc952bd9efb29daa86c1f..56fb4092b8e35650586c35a4ffd18c3b400e1f70 100644 (file)
@@ -43,6 +43,7 @@
 
 CanonImage *page_images[MAX_PAGES];
 int npages;
+RgbImage *page0_rgbimage;
 
 char *ocean, *pirate;
 
@@ -158,6 +159,19 @@ static void send_key(KeySym sym) {
   XTestFakeKeyEvent(disp, keycode(sym),1, 10);
   XTestFakeKeyEvent(disp, keycode(sym),0, 10);
 }
+static void mouse_1_updown_here(void) {
+  check_not_disturbed();
+  XTestFakeButtonEvent(disp,1,1, 50);
+  XTestFakeButtonEvent(disp,1,0, 50);
+}
+static void mouse_1_updown(int x, int y) {
+  check_not_disturbed();
+  int screen= XScreenNumberOfScreen(attr.screen);
+  int xpos, ypos;
+  translate_coords_toroot(x,y, &xpos,&ypos);
+  XTestFakeMotionEvent(disp, screen, xpos,ypos, 0);
+  mouse_1_updown_here();
+}
 
 static int pgupdown;
 
@@ -365,20 +379,14 @@ static void raise_and_get_details(void) {
   }
 }
 
-static void set_focus(void) {
+static void set_focus_commodity(void) {
   int screen= XScreenNumberOfScreen(attr.screen);
 
   progress("taking control of YPP client window...");
 
   debugf("PAGING set_focus\n");
 
-  int xpos, ypos;
-  translate_coords_toroot(160,160, &xpos,&ypos);
-  XTestFakeMotionEvent(disp,screen, xpos,ypos, 0);
-
-  XTestFakeButtonEvent(disp,1,1, 50);
-  XTestFakeButtonEvent(disp,1,0, 50);
-
+  mouse_1_updown(160,160);
   sync_after_input();
 
   delay(0.5);
@@ -388,6 +396,7 @@ static void set_focus(void) {
                        FocusChangeMask
                        ) );
 
+  int xpos,ypos;
   translate_coords_toroot(10,10, &xpos,&ypos);
   XTestFakeMotionEvent(disp,screen, xpos,ypos, 0);
 
@@ -420,7 +429,7 @@ static void compute_shift_mask(ShMask *sm, unsigned long ximage_mask) {
   assert(sm->rshift < LONG_BIT);
 }
 
-static CanonImage *convert_page(Snapshot *sn) {
+static CanonImage *convert_page(Snapshot *sn, RgbImage *ri) {
   ShMask shiftmasks[3];
   CanonImage *im;
 
@@ -447,6 +456,8 @@ static CanonImage *convert_page(Snapshot *sn) {
       rgb |= sample;
       fputc(sample, screenshot_file);
     }
+    if (ri)
+      CANONIMG_ALSO_STORERGB(ri);
   });
 
   sysassert(!ferror(screenshot_file));
@@ -455,20 +466,38 @@ static CanonImage *convert_page(Snapshot *sn) {
   return im;
 }
 
-void take_screenshots(void) {
-  Snapshot *current=0, *last=0;
+static void prepare_ypp_client(void) {
   CanonImage *test;
-
+  Snapshot *current=0;
+  
   /* find the window and check it's on the right kind of screen */
   raise_and_get_details();
   wait_for_stability(&current,0,0, "checking current YPP client screen...");
-  test= convert_page(current);
+  test= convert_page(current, 0);
   find_structure(test, &max_relevant_y);
   check_correct_commodities();
   free(test);
+  free_snapshot(&current);
+
+  progress("requesting status information...");
+  mouse_1_updown(250, wheight-10);
+  mouse_1_updown_here();
+  mouse_1_updown_here();
+  XSync(disp,False);
+  check_not_disturbed();
+  send_key(XK_slash);
+  send_key(XK_w);
+  send_key(XK_Return);
+  sync_after_input();
+}
 
+void take_screenshots(void) {
+  Snapshot *current=0, *last=0;
+
+  prepare_ypp_client();
+  
   /* page to the top - keep pressing page up until the image stops changing */
-  set_focus();
+  set_focus_commodity();
   wait_for_stability(&current,0, send_pgup_many,
                     "paging up to top of commodity list...");
 
@@ -480,7 +509,7 @@ void take_screenshots(void) {
       fatal("Paging down seems to generate too many pages - max is %d.",
            MAX_PAGES);
     
-    page_images[npages]= convert_page(current);
+    page_images[npages]= convert_page(current, 0);
     free_snapshot(&last); last=current; current=0;
 
     debugf("PAGING page %d converted\n",npages);
@@ -507,11 +536,11 @@ void take_screenshots(void) {
 
 void take_one_screenshot(void) {
   Snapshot *current=0;
-  
-  raise_and_get_details();
-  sync_after_input();
+
+  prepare_ypp_client();
   wait_for_stability(&current,0,0, "taking screenshot...");
-  page_images[0]= convert_page(current);
+  page0_rgbimage= alloc_rgb_image(current->width, current->height);
+  page_images[0]= convert_page(current, 0);
   npages= 1;
   progress_log("collected single screenshot.");
 }
diff --git a/pctb/pixmaps.txt b/pctb/pixmaps.txt
new file mode 100644 (file)
index 0000000..b5c8166
--- /dev/null
@@ -0,0 +1,55 @@
+# ypp-sc-tools pctb pixmaps v1
+
+Land - Shoppe
+P3
+152 47
+255
+   78 116 156   78 116 155   78 116 155   78 116 155   78 116 155   73 109 146   73 109 146   68 101 136   57  84 113   48  71  95   33  56  84   26  38  52   19  28  38   11  17  22    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    0   0   0    9  13  18   19  28  38   26  38  52   33  56  84   33  56  84   48  71  95   57  84 113   57  84 113   68 101 136   73 109 146   78 116 155   78 116 155   78 116 155   78 116 156
+   78 116 156   78 116 155   78 116 155   78 116 155   73 109 146   68 101 136   57  84 113   33  56  84   11  17  22   26  22   6   59  55  21   96  93  42  146 137  56  179 166  71  238 220  94  239 220 106  234 211  91  234 211  91  234 211  91  234 211  91  234 211  91  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  234 208  79  238 220  94  242 227 125   65  61  37  132 124  24  155 138  13  174 161  59  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  177 174  98   41  37  17  131 117   9  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  174 161  59  146 137  56  113 109  47   81  77  32   49  45  20   18  14   7    9  13  18   26  38  52   33  56  84   48  71  95   57  84 113   68 101 136   73 109 146   78 116 155   78 116 156
+   78 116 156   78 116 155   78 116 155   73 109 146   57  84 113   26  38  52   34  27   3   87  82  20  191 160  42  233 204  67  231 200  54  228 192  32  231 181  16  229 176   8  229 176   8  229 176   8  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  224 162   1  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  225 168   2  228 192  32  239 220 106  199 184 128   29  26  16  117 105   7  148 130   9  167 151  39  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  160 132  32  169 155  53  169 155  53  105  96  24   59  49   4  150 133  10  156 129   6  158 118   4  158 118   4  158 118   4  158 118   4  160 113   2  160 113   2  160 113   2  160 113   2  160 113   2  160 113   2  160 113   2  160 113   2  160 113   2  160 113   2  160 113   2  160 113   2  160 113   2  160 113   2  160 113   2  160 113   2  160 113   2  160 113   2  160 113   2  160 113   2  161 108   0  161 108   0  161 108   0  161 108   0  161 108   0  161 108   0  161 108   0  161 108   0  161 108   0  160 113   2  165 124  10  173 131  16  163 146  29  174 161  59  146 137  56   81  77  32   29  26  16   19  28  38   33  56  84   48  71  95   57  84 113   73 109 146   77 115 154
+   79 117 156   78 116 155   73 109 146   42  64  86   34  27   3  124 113  27  213 184  31  231 181  16  225 168   2  224 162   1  224 162   1  225 168   2  222 180   5  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  222 180   5  222 180   5  222 180   5  222 180   5  222 180   5  222 180   5  222 180   5  222 180   5  222 180   5  222 180   5  222 180   5  222 180   5  222 180   5  222 180   5  222 180   5  222 180   5  222 180   5  222 180   5  222 180   5  222 180   5  222 180   5  222 180   5  226 176   3  226 176   3  226 176   3  226 176   3  225 168   2  233 204  67  243 230 138  149 145  88   70  67  25  117 105   7  130 105   5  142 112   6  148 130   9  148 130   9  148 130   9  148 130   9  148 130   9  148 130   9  148 130   9  148 130   9  148 130   9  150 133  10  148 130   9  140 124   9  138 117   8  138 117   8  138 117   8  145 123   8  150 133  10  148 130   9  140 124   9  138 117   8  138 117   8  138 117   8  145 123   8  148 130   9  148 130   9  148 130   9  148 130   9  148 130   9  148 130   9  148 130   9  148 130   9  148 130   9  148 130   9  148 130   9  148 130   9  148 130   9  148 130   9  148 130   9  148 130   9  148 130   9  148 130   9  142 112   6  149 132  24  139 129  30   14  10   2  126 112   8  155 131   8  160 113   2  157 124   5  157 124   5  157 124   5  157 124   5  156 129   6  155 131   8  155 131   8  155 131   8  155 131   8  155 131   8  155 131   8  155 131   8  155 131   8  155 131   8  155 131   8  155 131   8  155 131   8  155 131   8  155 131   8  155 131   8  155 131   8  155 131   8  155 131   8  155 131   8  155 135   9  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  155 131   8  157 124   5  160 113   2  160 113   2  165 124  10  170 139  22  168 160  66  104 102  60   29  26  16   26  38  52   42  64  86   57  84 113   72 107 144
+   81 118 158   73 109 146   33  56  84   77  65   5  172 147   5  225 168   2  224 162   1  225 168   2  226 176   3  222 180   5  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 185   8  225 188   6  226 176   3  229 176   8  238 220  94  243 230 138   29  26  16   96  86   8  126 112   8  131  91   4  150 133  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  158 142  22  158 142  22  135 121   9  108  98   7  108  98   7  117 105   7  140 124   9  158 142  22  158 142  22  135 121   9  108  98   7  108  98   7  117 105   7  140 124   9  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  148 122   5  142 112   6  151 143  32   68  56   4   77  65   5  153 136  10  160 113   2  157 124   5  155 138  13  154 137  11  148 130   9  140 124   9  140 124   9  140 124   9  140 124   9  140 124   9  148 130   9  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  155 135   9  157 124   5  158 118   4  160 113   2  173 131  16  146 137  56   65  61  37   19  28  38   42  64  86   61  91 122
+   89 125 161   48  71  95   88  74   4  201 166   5  225 168   2  225 168   2  223 184   6  223 185   8  223 184   6  213 177   5  201 166   5  201 166   5  201 166   5  201 166   5  213 177   5  223 184   6  204 174   5  201 166   5  213 177   5  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 185   8  223 185   8  225 188   6  225 188   6  225 168   2  230 195  43  242 227 125  173 163 117   49  45  20  108  98   7  130 105   5  134 112   5  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  167 151  39  179 166  71  186 180 119  186 180 119  146 137  56  105  88   5  131 117   9  158 142  22  169 155  53  185 177 109  186 180 119  150 143  72  126 112   8  140 124   9  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  150 133  10  142 112   6  149 132  24  124 113  27   43  35   3  150 133  10  157 124   5  160 113   2  154 137  10  158 142  22  158 142  22  135 121   9  108  98   7  108  98   7  108  98   7  108  98   7  108  98   7  135 121   9  148 130   9  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  155 135   9  158 118   4  165 124  10  164 154  76   84  83  49   19  28  38   48  71  95
+   87 114 142   34  27   3  162 133   4  226 176   3  225 168   2  223 184   6  223 185   8  224 187  16  223 185   8  201 166   5  171 140   4  162 133   4  156 129   6  164 140   6  204 174   5  223 185   8  194 154   4  156 129   6  201 166   5  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  225 188   6  225 188   6  225 188   6  225 188   6  223 184   6  229 176   8  234 208  79  243 230 138   92  93  56   87  82  20  117 105   7  131  91   4  148 130   9  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  167 151  39  181 171  85  185 177 109  186 180 119  175 173 100   87  82  20  117 105   7  158 139  17  179 166  71  186 180 119  175 173 100  131 117   9  135 121   9  148 130   9  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  142 112   6  149 132  24  151 143  32   34  27   3  105  88   5  150 133  10  160 113   2  155 131   8  154 137  10  167 151  39  174 161  59  177 174  98  171 163  85  171 163  85  171 163  85  164 154  76  115 105  29  108  98   7  131 117   9  148 130   9  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 136  10  160 113   2  162 130  12  146 137  56   29  26  16   33  50  67
+   60  76  91   88  74   4  201 166   5  224 162   1  222 180   5  223 184   6  224 187  16  228 192  32  184 161  25   92  93  56   18  48  94   55  71  75   68  78  61  131 117   9  213 177   5  202 170  30   55  71  75  105  96  24  194 154   4  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 185   8  223 185   8  225 188   6  225 188   6  225 188   6  225 188   6  225 188   6  226 176   3  232 187  12  239 220 106  220 207 130   29  26  16  108  98   7  130 105   5  130 105   5  154 136  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  163 146  29  174 161  59  186 179  94  185 177 109  186 180 119  164 154  76  117 105   7  158 142  22  185 177 109  183 177 113  132 124  24  140 124   9  150 133  10  150 133  10  143 127   9  140 124   9  140 124   9  140 124   9  148 130   9  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  145 123   8  142 112   6  151 143  32   87  82  20   68  56   4  150 133  10  158 118   4  158 118   4  154 137  10  154 137  10  167 151  39  181 171  85  182 174  95  186 180 119  171 163  85  181 174 105  186 180 119  186 180 119  113 109  47  108  98   7  140 124   9  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  11  154 137  11  153 136  10  148 130   9  150 133  10  153 136  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  155 135   9  160 113   2  163 146  29   84  83  49   20  29  39
+   21  25  30  148 122   5  209 156   2  225 168   2  223 184   6  223 184   6  228 192  32  231 200  54   91 102  85   33  56  84  127 123  64   72  86  78   18  48  94  115 105  29  226 189  24   91 102  85   18  48  94  105  96  24  194 154   4  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 185   8  225 188   6  225 188   6  225 188   6  225 188   6  225 188   6  225 188   6  225 188   6  225 188   6  226 176   3  233 204  67  243 230 138  149 145  88   70  67  25  117 105   7  130 105   5  140 119   3  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  158 139  17  167 151  39  179 166  71  193 183 105  186 180 119  186 180 119  139 129  30  181 171  85  186 180 119  131 124  45  135 121   9  150 133  10  150 133  10  148 130   9  126 112   8  108  98   7  105  88   5  108  98   7  135 121   9  148 130   9  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  153 136  10  142 112   6  149 132  24  132 124  24    9   5   1  131 117   9  156 129   6  160 113   2  155 135   9  154 137  10  154 137  10  167 151  39  179 166  71  182 174  95  186 180 119  151 143  32  174 161  59  181 171  85  186 180 119  150 143  72  108  98   7  135 121   9  154 137  11  155 138  13  153 136  10  143 127   9  140 124   9  148 130   9  153 136  10  154 137  10  154 137  11  155 138  13  153 136  10  143 127   9  140 124   9  148 130   9  154 137  10  155 138  13  154 137  11  148 130   9  131 117   9  131 117   9  143 127   9  148 130   9  140 124   9  140 124   9  150 133  10  153 136  10  143 127   9  140 124   9  148 130   9  154 137  10  154 137  10  154 137  10  157 124   5  165 124  10  150 143  72    7  10  13
+    0   0   0  171 140   4  204 138   1  222 180   5  223 184   6  223 184   6  230 195  43  234 211  91   18  48  94   55  71  75  194 154   4  231 200  54   65  79  71  139 129  30  230 195  43  182 174  95   18  48  94  105  96  24  194 154   4  201 166   5  201 166   5  213 177   5  223 184   6  223 185   8  223 184   6  213 177   5  201 166   5  201 166   5  213 177   5  223 185   8  223 184   6  213 177   5  201 166   5  201 166   5  201 166   5  201 166   5  213 177   5  223 185   8  223 184   6  213 177   5  201 166   5  201 166   5  201 166   5  204 174   5  213 177   5  225 188   6  225 188   6  225 188   6  213 177   5  204 174   5  204 174   5  213 177   5  222 180   5  231 181  16  238 220  94  243 230 138   29  26  16   96  86   8  117 105   7  131  91   4  150 133  10  154 137  10  154 137  10  154 137  10  154 137  10  153 136  10  153 136  10  158 142  22  167 151  39  179 166  71  183 179 101  186 180 119  186 180 119  186 180 119  150 143  72  126 112   8  148 130   9  158 142  22  158 142  22  169 155  53  181 174 105  183 177 113  171 163  85  105  96  24  105  88   5  135 121   9  153 136  10  153 136  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  145 116  12  145 116  12  151 143  32   59  49   4   88  74   4  150 133  10  160 113   2  156 127   7  154 137  10  154 137  10  154 137  10  167 151  39  179 166  71  182 174  95  186 180 119  131 124  45  155 138  13  171 163  85  186 180 119  146 137  56  126 112   8  143 127   9  154 137  11  150 133  10  150 133  10  126 112   8  108  98   7  131 117   9  140 124   9  150 133  10  154 137  11  150 133  10  150 133  10  126 112   8  108  98   7  131 117   9  143 127   9  154 137  11  158 139  17  167 151  39  131 124  45  105  88   5  131 117   9  140 124   9  117 105   7  117 105   7  143 127   9  153 136  10  131 117   9  117 105   7  140 124   9  154 137  10  154 137  10  154 137  10  155 135   9  160 113   2  179 166  71    0   0   0
+    0   0   0  171 140   4  204 138   1  223 184   6  223 184   6  223 184   6  228 192  32  234 211  91   48  71  95   18  48  94   96  93  42  201 166   5  201 166   5  194 154   4  226 189  24  181 171  85   18  48  94  115 105  29  171 140   4  156 127   7  156 129   6  194 154   4  213 177   5  223 185   8  223 185   8  201 166   5  162 133   4  162 133   4  194 154   4  213 177   5  223 184   6  201 166   5  183 150   5  172 147   5  156 129   6  162 133   4  201 166   5  222 180   5  223 185   8  201 166   5  171 140   4  172 147   5  156 129   6  164 140   6  201 166   5  213 177   5  225 188   6  225 188   6  204 174   5  164 140   6  164 140   6  183 150   5  204 174   5  226 176   3  230 195  43  242 227 125  199 184 128   41  37  17  108  98   7  130 105   5  134 112   5  154 137  10  154 137  10  153 136  10  153 136  10  154 137  10  154 137  10  154 136  10  158 142  22  167 151  39  181 171  85  185 177 109  186 180 119  181 174 105  105  88   5  131 117   9  158 142  22  169 155  53  179 166  71  183 177 113  167 151  39  174 161  59  186 180 119  175 173 100  108  98   7  131 117   9  154 136  10  154 137  10  153 136  10  153 136  10  154 137  10  154 137  10  154 137  10  148 130   9  130 105   5  151 143  32  115 105  29   53  43   3  150 133  10  157 124   5  158 118   4  154 137  10  154 137  10  154 137  10  154 137  10  167 151  39  179 166  71  182 174  95  186 180 119  146 137  56  185 177 109  186 180 119  164 159  94  108  98   7  126 112   8  148 130   9  155 138  13  150 133  10  146 137  56  164 159  94  131 124  45  105  88   5  108  98   7  148 130   9  158 142  22  150 133  10  146 137  56  164 159  94  131 124  45  108  98   7  117 105   7  158 142  22  181 171  85  183 177 113  164 159  94  146 137  56  149 132  24  168 160  66  146 137  56  115 105  29  153 136  10  169 155  53  150 143  72  105  96  24  131 117   9  154 137  10  154 137  10  154 137  10  154 137  10  161 108   0  174 161  59    0   0   0
+    0   0   0  171 140   4  204 138   1  223 184   6  223 184   6  223 184   6  228 192  32  234 208  79  149 145  88   33  56  84   18  48  94   55  71  75  117 105   7  156 129   6  223 185   8  181 171  85   18  48  94   92  93  56   65  79  71   55  71  75   96  93  42  156 127   7  204 174   5  224 187  16  176 151  24   92  93  56   65  79  71  105  96  24  148 122   5  194 154   4  226 189  24  104 102  60   92  93  56   68  78  61   65  79  71  105  96  24  162 133   4  222 180   5  202 170  30   72  86  78   92  93  56   65  79  71   68  78  61  117 105   7  156 129   6  213 177   5  227 193  15  176 151  24   72  86  78   68  78  61   96  93  42  149 131   6  183 150   5  213 177   5  229 176   8  237 216  71  243 230 138  104 102  60   87  82  20  117 105   7  131  91   4  145 123   8  153 136  10  154 137  10  154 136  10  154 136   9  154 136   9  154 136   9  154 137  10  163 146  29  174 161  59  183 179 101  186 180 119  164 159  94   96  86   8  138 117   8  167 151  39  181 171  85  183 177 113  171 163  85  150 143  72  183 177 113  183 177 113  164 154  76  117 105   7  135 121   9  155 135   9  155 135   9  154 136   9  154 136  10  154 136  10  154 136  10  154 136  10  142 112   6  149 132  24  151 143  32   26  22   6  108  98   7  155 135   9  160 113   2  155 135   9  154 137  10  154 137  10  154 137  10  154 137  10  167 151  39  179 166  71  182 174  95  186 180 119  169 155  53  185 177 109  186 180 119  183 177 113  131 124  45  108  98   7  153 136  10  167 151  39  186 180 119  177 174  98  185 177 109  186 180 119  183 177 113   96  86   8  143 127   9  169 155  53  183 177 113  181 174 105  185 177 109  186 180 119  183 177 113  115 105  29  153 136  10  182 174  95  186 180 119  171 163  85  150 143  72  167 151  39  186 180 119  186 180 119  108  98   7  158 142  22  181 171  85  183 177 113  108  98   7  131 117   9  154 137  10  154 137  10  154 137  10  154 137  10  161 108   0  174 161  59    0   0   0
+    0   0   0  171 140   4  204 138   1  223 184   6  223 184   6  223 184   6  224 187  16  230 195  43  233 204  67  186 179  94   48  71  95   18  48  94   33  56  84  105  96  24  201 166   5  179 166  71   18  48  94   65  79  71  127 123  64   72  86  78   18  48  94  126 112   8  223 184   6  146 137  56   33  56  84  104 102  60   33  56  84   18  48  94   68  78  61  172 147   5  150 143  72   18  48  94   33  56  84  104 102  60   33  56  84   18  48  94  105  96  24  204 174   5   91 102  85   18  48  94   42  64  86   91 102  85   18  48  94   18  48  94  138 117   8  222 180   5  146 137  56   18  48  94  114 113  72  104 102  60   18  48  94   96  93  42  164 140   6  204 174   5  231 188   2  234 196  15  239 220 106  220 207 130   29  26  16  108  98   7  117 105   7  130 105   5  155 137  10  156 138   9  156 138   9  155 139  10  156 138   9  156 138   9  155 139  10  163 144  17  167 151  39  186 179  94  186 180 119  164 159  94   88  74   4  131 117   9  167 151  39  186 179  94  186 180 119  186 180 119  171 163  85  169 155  53  167 151  39  143 127   9  105  88   5  135 121   9  156 138   9  156 138   9  156 138   9  156 138   9  156 138   9  154 138  10  145 123   8  142 112   6  151 143  32   87  82  20   68  56   4  155 139  10  158 118   4  157 124   5  155 137  10  154 137  10  154 137  10  154 137  10  154 137  10  167 151  39  179 166  71  182 174  95  186 180 119  139 129  30  174 161  59  182 174  95  186 180 119  186 180 119  108  98   7  158 142  22  182 174  95  181 174 105  135 121   9  174 161  59  183 179 101  186 180 119  131 124  45  131 117   9  181 171  85  183 177 113  140 124   9  169 155  53  182 174  95  186 180 119  150 143  72  126 112   8  179 166  71  186 180 119  150 143  72  126 112   8  169 155  53  185 177 109  186 180 119  146 137  56  158 139  17  183 177 113  150 143  72  117 105   7  135 121   9  154 137  10  154 137  10  154 137  10  154 137  10  161 108   0  174 161  59    0   0   0
+    0   0   0  171 140   4  204 138   1  223 184   6  223 184   6  223 184   6  223 185   8  224 187  16  226 189  24  231 200  54  215 195  75   91 102  85   18  48  94   68  78  61  171 140   4  179 166  71   18  48  94  132 124  24  230 195  43  164 159  94   18  48  94  115 105  29  230 195  43   91 102  85   92  93  56  201 166   5  215 195  75   48  71  95   33  56  84  171 140   4  233 204  67   18  48  94  104 102  60  223 185   8  215 195  75   33  56  84   55  71  75  201 166   5  181 171  85   18  48  94  149 132  24  230 195  43  164 154  76   18  48  94   96  93  42  227 193  15   72  86  78   72  86  78  131 124  45   55  71  75   18  48  94   92  93  56  173 151   6  204 174   5  227 195   6  231 188   2  233 215  55  243 230 138  164 159  94   70  67  25  117 105   7  130 105   5  140 119   3  156 138   9  156 138   9  155 139  10  156 138   9  156 138   9  157 137   8  163 144  17  167 151  39  181 171  85  186 180 119  164 159  94   88  74   4  131 117   9  167 151  39  190 175  80  185 177 109  186 180 119  139 129  30  126 112   8  151 143  32  183 177 113  124 113  27  140 124   9  157 137   8  157 137   8  157 137   8  156 138   9  156 138   9  155 131   8  142 112   6  158 142  22  132 124  24    9   5   1  143 127   9  155 131   8  160 113   2  154 138  10  155 139  10  155 137  10  154 137  10  154 137  10  154 137  10  167 151  39  179 166  71  182 174  95  186 180 119  124 113  27  154 137  10  179 166  71  181 174 105  186 180 119  131 124  45  174 161  59  183 177 113  181 174 105  105  88   5  155 138  13  181 171  85  183 177 113  164 159  94  150 133  10  185 177 109  186 180 119  115 105  29  148 130   9  181 171  85  183 177 113  183 177 113  117 105   7  179 166  71  186 180 119  146 137  56  126 112   8  158 142  22  181 171  85  183 177 113  181 174 105  168 160  66  183 177 113  126 112   8  131 117   9  148 130   9  154 137  10  154 137  10  154 137  10  154 137  10  161 108   0  174 161  59    0   0   0
+    0   0   0  171 140   4  204 138   1  223 184   6  223 184   6  223 184   6  224 187  16  213 184  31  158 142  22  183 150   5  230 195  43  215 195  75   18  48  94   55  71  75  171 140   4  179 166  71   18  48  94  115 105  29  224 187  16  181 171  85   18  48  94  124 113  27  233 204  67   18  48  94   55  71  75  156 127   7  230 195  43  149 145  88   18  48  94  124 113  27  233 204  67   18  48  94   84  83  49  172 147   5  233 204  67   91 102  85   33  56  84  171 140   4  179 166  71   18  48  94  115 105  29  213 177   5  234 208  79   33  56  84   84  83  49  231 200  54   18  48  94   18  48  94   42  64  86  146 137  56  213 184  31  212 186   4  164 140   6  204 174   5  229 202   5  227 195   6  231 188   2  238 220  94  243 230 138   29  26  16   96  86   8  126 112   8  130 105   5  155 135   9  158 141   9  158 141   9  156 138   9  158 141   9  158 141   9  167 151  39  174 161  59  182 174  95  186 180 119  181 174 105  124 113  27  140 124   9  167 151  39  179 166  71  186 179  94  185 177 109  186 180 119  186 180 119  186 180 119  167 151  39  131 117   9  149 131   6  158 141   9  158 141   9  158 141   9  158 141   9  158 141   9  142 112   6  155 131   8  151 143  32   53  43   3   88  74   4  155 135   9  160 113   2  157 135   6  155 139  10  155 139  10  155 139  10  154 137  10  154 137  10  154 137  10  167 151  39  179 166  71  182 174  95  186 180 119  115 105  29  117 105   7  167 151  39  183 177 113  186 180 119  117 105   7  174 161  59  185 177 109  186 180 119  146 137  56  117 105   7  158 142  22  183 177 113  146 137  56  167 151  39  183 179 101  186 180 119  150 143  72  117 105   7  158 142  22  181 174 105  164 154  76  135 121   9  179 166  71  186 180 119  146 137  56  105  88   5  126 112   8  174 161  59  193 183 105  186 180 119  186 180 119  150 143  72  126 112   8  140 124   9  153 136  10  154 137  10  154 137  10  154 137  10  154 137  10  161 108   0  174 161  59    0   0   0
+    0   0   0  171 140   4  204 138   1  223 184   6  223 184   6  223 184   6  228 192  32  198 179  67   18  48  94  115 105  29  183 150   5  191 160  42   18  48  94   68  78  61  201 166   5  179 166  71   18  48  94  105  96  24  201 166   5  179 166  71   18  48  94  115 105  29  230 195  43   91 102  85   18  48  94   96  93  42  194 154   4  131 124  45   42  64  86  183 150   5  233 204  67   18  48  94   47  66  78  148 122   5  223 185   8   72  86  78   68  78  61  201 166   5  179 166  71   18  48  94   84  83  49  171 140   4  213 184  31   18  48  94  115 105  29  231 200  54   91 102  85   33  56  84  158 139  17  183 150   5  158 142  22   92  93  56  173 151   6  204 174   5  229 202   5  229 202   5  231 188   2  235 208  26  242 227 125  199 184 128   41  37  17  108  98   7  130 105   5  142 112   6  158 141   9  161 141   8  161 141   8  161 141   8  161 141   8  167 151  39  174 161  59  181 171  85  179 166  71  167 151  39  148 130   9  155 131   8  163 144  17  167 151  39  179 166  71  179 166  71  179 166  71  179 166  71  163 146  29  155 135   9  155 131   8  157 137   8  161 141   8  161 141   8  161 141   8  161 141   8  156 129   6  142 112   6  158 142  22  115 105  29   59  49   4  156 138   9  162 123   4  162 123   4  158 141   9  158 141   9  155 139  10  155 139  10  155 137  10  154 137  10  154 137  10  167 151  39  179 166  71  182 174  95  186 180 119  175 173 100  181 174 105  186 180 119  186 180 119  164 154  76  131 117   9  167 151  39  186 179  94  186 180 119  186 180 119  181 174 105  181 174 105  183 177 113  131 117   9  158 142  22  186 179  94  186 180 119  186 180 119  183 177 113  177 174  98  183 177 113  132 124  24  155 138  13  181 171  85  186 180 119  181 174 105  164 154  76  126 112   8  163 146  29  181 171  85  183 177 113  181 174 105  131 117   9  135 121   9  148 130   9  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  161 108   0  174 161  59    0   0   0
+    0   0   0  171 140   4  204 138   1  223 184   6  223 184   6  223 184   6  228 192  32  234 211  91   42  64  86   18  48  94   33  56  84   18  48  94   18  48  94  158 142  22  226 189  24  127 126  80   18  48  94   92  93  56  213 177   5  127 126  80   18  48  94   96  93  42  224 187  16  181 171  85   33  56  84   18  48  94   33  56  84   18  48  94  131 124  45  222 180   5  234 208  79   18  48  94   18  48  94   42  64  86   55  71  75   33  56  84  158 139  17  224 187  16  181 171  85   18  48  94   18  48  94   65  79  71   42  64  86   55  71  75  194 154   4  231 200  54  182 174  95   33  56  84   18  48  94   65  79  71   18  48  94  163 146  29  204 174   5  212 186   4  229 202   5  229 202   5  229 202   5  231 188   2  237 216  71  243 230 138  114 113  72   87  82  20  126 112   8  131  91   4  156 129   6  161 141   8  161 141   8  161 141   8  161 141   8  163 144  17  176 151  24  176 151  24  176 151  24  163 144  17  164 140   6  161 141   8  164 140   6  163 144  17  176 151  24  176 151  24  176 151  24  176 151  24  163 144  17  161 141   8  161 141   8  161 141   8  161 141   8  161 141   8  161 141   8  161 141   8  142 112   6  158 142  22  151 143  32   20  15   1  117 105   7  157 137   8  167 118   3  157 137   8  155 139  10  158 141   9  156 138   9  155 139  10  155 139  10  155 137  10  154 137  10  167 151  39  181 171  85  182 174  95  181 171  85  181 171  85  181 171  85  179 166  71  169 155  53  150 133  10  150 133  10  158 142  22  179 166  71  181 171  85  182 174  95  182 174  95  169 155  53  150 133  10  143 127   9  158 142  22  179 166  71  181 171  85  181 171  85  182 174  95  169 155  53  155 138  13  143 127   9  158 142  22  181 171  85  183 179 101  182 174  95  151 143  32  140 124   9  163 146  29  181 171  85  186 180 119  131 124  45  131 117   9  150 133  10  153 136  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  161 108   0  174 161  59    0   0   0
+    0   0   0  171 140   4  204 138   1  223 184   6  223 184   6  223 184   6  228 192  32  234 208  79  150 143  72  174 161  59  127 126  80  131 124  45  201 166   5  213 177   5  230 195  43  149 145  88  127 123  64  131 124  45  226 189  24  149 145  88  127 123  64  131 124  45  213 177   5  233 204  67  234 208  79  150 143  72  127 123  64  208 174  13  213 177   5  226 189  24  234 208  79   18  48  94   72  86  78  113 109  47  146 137  56  208 174  13  213 177   5  228 192  32  181 171  85   18  48  94  104 102  60  127 123  64  167 151  39  225 188   6  213 177   5  228 197  24  234 208  79  211 204  83  150 143  72  146 137  56  184 161  25  212 186   4  218 193   4  227 195   6  229 202   5  229 202   5  229 202   5  233 197   2  234 196  15  239 220 106  243 230 138   29  26  16  108  98   7  126 112   8  147 102   2  164 140   6  161 141   8  164 140   6  164 140   6  164 140   6  163 144   8  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  163 144   8  163 144   8  164 140   6  163 144   8  163 144   8  163 144   8  163 144   8  163 144   8  163 144   8  148 122   5  156 127   7  167 151  39   77  65   5   77  65   5  158 141   9  167 118   3  162 133   4  158 141   9  158 141   9  158 141   9  158 141   9  155 139  10  155 139  10  155 139  10  154 137  10  167 151  39  174 161  59  169 155  53  167 151  39  167 151  39  167 151  39  163 146  29  154 137  11  155 138  13  153 136  10  158 139  17  163 146  29  169 155  53  174 161  59  167 151  39  154 137  11  154 137  11  153 136  10  158 139  17  163 146  29  167 151  39  179 166  71  167 151  39  153 136  10  154 137  11  153 136  10  158 139  17  167 151  39  179 166  71  167 151  39  155 138  13  163 146  29  167 151  39  183 177 113  171 163  85  117 105   7  140 124   9  153 136  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  161 108   0  174 161  59    0   0   0
+    0   0   0  171 140   4  204 138   1  222 180   5  223 184   6  223 184   6  224 187  16  230 195  43  228 192  32  230 195  43  230 195  43  224 187  16  223 184   6  223 185   8  230 195  43  231 200  54  228 192  32  222 180   5  226 189  24  231 200  54  228 192  32  222 180   5  223 184   6  226 189  24  230 195  43  230 195  43  226 189  24  223 184   6  223 185   8  228 192  32  233 204  67   18  48  94   92  93  56  171 140   4  213 177   5  223 185   8  224 187  16  228 192  32  179 166  71   18  48  94  132 124  24  194 154   4  213 177   5  227 195   6  225 188   6  227 193  15  228 197  24  231 200  54  232 207  38  229 201  13  227 195   6  227 195   6  227 195   6  229 202   5  229 202   5  229 202   5  229 202   5  235 205   2  233 197   2  239 217  40  243 230 138  173 163 117   59  55  21  117 105   7  130 105   5  148 122   5  163 144   8  163 144   8  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  162 133   4  148 113   4  163 146  29  132 124  24   34  27   3  156 138   9  162 133   4  167 118   3  161 141   8  158 141   9  158 141   9  158 141   9  158 141   9  156 138   9  155 139  10  155 139  10  155 137  10  158 142  22  163 146  29  163 146  29  163 146  29  163 146  29  163 146  29  158 142  22  153 136  10  153 136  10  154 137  10  154 137  10  154 137  11  158 142  22  163 146  29  158 142  22  154 137  10  153 136  10  153 136  10  154 137  10  154 137  10  158 142  22  163 146  29  158 142  22  154 137  10  153 136  10  153 136  10  154 137  10  158 142  22  163 146  29  158 142  22  163 146  29  179 166  71  186 180 119  185 177 109  135 121   9  131 117   9  148 130   9  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  155 135   9  161 108   0  174 161  59    0   0   0
+    0   0   0  179 135   3  204 138   1  209 156   2  224 162   1  225 168   2  225 168   2  222 174  11  231 181  16  226 189  24  226 189  24  224 187  16  223 184   6  223 184   6  224 187  16  226 189  24  226 189  24  223 184   6  224 187  16  226 189  24  226 189  24  223 184   6  223 184   6  223 184   6  224 187  16  226 189  24  224 187  16  223 184   6  226 189  24  230 195  43  149 145  88   18  48  94   33  56  84  172 147   5  201 166   5  223 185   8  228 192  32  231 200  54   91 102  85   18  48  94   68  78  61  183 150   5  204 174   5  225 188   6  227 195   6  227 195   6  227 193  15  228 197  24  228 197  24  229 201  13  227 195   6  227 195   6  229 202   5  229 202   5  229 202   5  229 202   5  229 202   5  234 210   4  235 205   2  233 197   2  243 230  87  243 230 138   68  78  61   96  86   8  126 112   8  130 105   5  164 140   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  164 140   6  162 133   4  162 133   4  164 140   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  167 144   6  148 113   4  170 139  22  151 143  32   43  35   3  105  88   5  164 140   6  167 118   3  164 140   6  163 144   8  161 141   8  158 141   9  158 141   9  158 141   9  158 141   9  156 138   9  155 139  10  155 139  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  167 151  39  179 166  71  179 166  71  158 142  22  148 130   9  150 133  10  153 136  10  154 136  10  155 131   8  157 124   5  158 118   4  160 113   2  161 108   0  160 113   2  157 124   5  167 151  39    0   0   0
+    0   0   0   34  27   3  105  88   5  153 111   3  187 143  14  201 166   5  201 166   5  209 156   2  209 156   2  224 162   1  224 162   1  224 162   1  224 162   1  225 168   2  226 176   3  226 176   3  222 180   5  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  226 189  24  231 200  54  233 204  67  233 204  67  224 187  16  201 166   5  213 177   5  225 188   6  228 192  32  233 204  67  233 204  67  231 200  54  227 193  15  204 174   5  212 186   4  227 195   6  227 195   6  227 195   6  227 195   6  227 195   6  227 195   6  229 202   5  229 202   5  229 202   5  229 202   5  229 202   5  229 202   5  235 205   2  234 210   4  234 210   4  234 210   4  235 205   2  234 206  16  242 227 125  220 207 130   41  37  17  117 105   7  134 112   5  148 113   4  167 144   6  164 140   6  162 133   4  162 133   4  157 124   5  158 118   4  153 111   3  153 111   3  158 118   4  158 118   4  158 118   4  158 118   4  153 111   3  160 113   2  157 124   5  156 129   6  162 133   4  171 140   4  172 147   5  172 147   5  156 129   6  157 124   5  167 151  39  105  96  24   68  56   4  163 144   8  169 130   4  169 130   4  163 144   8  163 144   8  163 144   8  158 141   9  158 141   9  158 141   9  158 141   9  158 141   9  155 139  10  155 139  10  155 139  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  158 142  22  163 146  29  163 146  29  158 139  17  157 124   5  158 118   4  160 113   2  161 108   0  160 113   2  158 118   4  157 124   5  156 127   7  148 130   9  148 130   9  131 117   9   77  65   5    0   0   0
+    0   0   0  124 113  27   81  77  32   49  45  20    9   5   1   34  27   3   59  49   4   88  74   4  147 102   2  179 135   3  194 154   4  201 166   5  201 166   5  209 156   2  209 156   2  224 162   1  224 162   1  224 162   1  225 168   2  225 168   2  226 176   3  222 180   5  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  223 184   6  224 187  16  226 189  24  226 189  24  226 189  24  224 187  16  223 185   8  223 184   6  225 188   6  227 193  15  228 197  24  228 197  24  228 197  24  227 193  15  225 188   6  225 188   6  227 195   6  227 195   6  227 195   6  227 195   6  227 195   6  229 202   5  229 202   5  229 202   5  229 202   5  229 202   5  229 202   5  229 202   5  235 205   2  234 210   4  234 210   4  234 210   4  234 210   4  235 205   2  240 220  56  243 230 138  127 126  80   87  82  20  126 112   8  147 102   2  153 111   3  160 113   2  158 118   4  162 123   4  156 127   7  156 129   6  162 133   4  162 133   4  162 133   4  157 135   6  162 133   4  162 133   4  162 133   4  156 129   6  157 124   5  158 118   4  153 111   3  153 111   3  153 111   3  158 118   4  160 113   2  176 151  24  151 143  32   14  10   2  131 117   9  171 140   4  171 124   2  167 144   6  163 144   8  163 144   8  163 144   8  161 141   8  158 141   9  158 141   9  158 141   9  158 141   9  156 138   9  155 139  10  155 139  10  155 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  155 131   8  156 127   7  158 118   4  158 118   4  160 113   2  160 113   2  158 118   4  157 124   5  156 127   7  148 130   9  148 130   9  143 127   9  143 127   9  131 117   9  105  88   5   77  65   5   53  43   3   20  15   1   96  93  42    0   0   0
+    0   0   0  126 120   3  169 155  53  183 179 101  183 179 101  149 145  88  127 123  64   96  93  42   59  55  21   20  15   1   20  15   1   53  43   3   88  74   4  131  91   4  171 124   2  194 154   4  201 166   5  201 166   5  209 156   2  209 156   2  224 162   1  224 162   1  224 162   1  225 168   2  225 168   2  226 176   3  222 180   5  223 184   6  223 184   6  223 184   6  223 185   8  223 185   8  225 188   6  225 188   6  225 188   6  225 188   6  225 188   6  225 188   6  225 188   6  225 188   6  225 188   6  227 195   6  227 195   6  227 195   6  227 195   6  227 195   6  227 195   6  229 202   5  229 202   5  229 202   5  229 202   5  229 202   5  229 202   5  229 202   5  235 205   2  234 210   4  234 210   4  234 210   4  234 210   4  234 210   4  234 210   4  234 210   4  243 230  87  243 230 138   26  22   6  108  98   7  140 119   3  164 140   6  172 147   5  167 144   6  156 127   7  153 111   3  148  94   1  156  86  11  147  68   5  147  68   5  147  68   5  147  68   5  147  68   5  147  68   5  156  86  11  148  94   1  147 102   2  148 122   5  157 135   6  164 140   6  162 133   4  171 139  13  167 151  39   77  65   5   88  74   4  167 144   6  171 124   2  171 140   4  167 144   6  167 144   6  163 144   8  163 144   8  163 144   8  161 141   8  158 141   9  158 141   9  158 141   9  158 141   9  154 138  10  155 139  10  155 139  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  155 135   9  156 129   6  157 124   5  158 118   4  160 113   2  161 108   0  160 113   2  158 118   4  157 124   5  156 129   6  148 130   9  148 130   9  143 127   9  143 127   9  126 112   8   96  86   8   68  56   4   43  35   3   20  15   1   18  14   7   49  45  20   81  77  32  113 109  47  146 137  56  181 171  85    0   0   0
+    0   0   0  126 112   8  150 133  10  176 139  27  178 152  46  182 155  55  181 171  85  182 174  95  183 179 101  183 179 101  164 159  94  127 126  80  104 102  60   70  67  25   34  27   3   14  10   2   43  35   3   68  56   4  105  88   5  153 111   3  194 154   4  201 166   5  201 166   5  209 156   2  209 156   2  224 162   1  224 162   1  224 162   1  224 162   1  225 168   2  226 176   3  222 180   5  223 184   6  225 188   6  225 188   6  225 188   6  225 188   6  225 188   6  225 188   6  225 188   6  225 188   6  227 195   6  227 195   6  227 195   6  227 195   6  227 195   6  229 202   5  229 202   5  229 202   5  229 202   5  229 202   5  229 202   5  229 202   5  235 205   2  234 210   4  234 210   4  234 210   4  234 210   4  234 210   4  234 210   4  234 210   4  235 205   2  239 217  40  243 230 138  183 177 113   59  55  21  126 120   3  148 122   5  153 111   3  156  86  11  160  94  16  179 128  28  191 160  42  204 177  50  218 198  56  240 220  56  239 234  68  239 234  68  240 220  56  218 198  56  204 177  50  191 160  42  179 128  28  160  94  16  156  86  11  147 102   2  148 122   5  158 141   9  132 124  24   43  35   3  167 144   6  179 135   3  178 128   2  167 148   8  167 148   8  167 144   6  163 144   8  163 144   8  163 144   8  163 144   8  158 141   9  158 141   9  158 141   9  158 141   9  158 141   9  155 139  10  155 139  10  155 139  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  155 135   9  156 127   7  157 124   5  158 118   4  160 113   2  161 108   0  160 113   2  158 118   4  156 127   7  156 129   6  150 133  10  143 127   9  143 127   9  143 127   9  117 105   7   88  74   4   59  49   4   34  27   3    9   5   1   26  22   6   59  55  21   96  93  42  113 109  47  146 137  56  168 160  66  168 160  66  168 160  66  169 155  53  179 166  71  193 183 105    0   0   0
+    0   0   0  126 112   8  140 119   3  160 113   2  162 130  12  162 130  12  171 124  10  170 139  22  181 142  38  182 155  55  179 166  71  181 171  85  182 174  95  186 179  94  183 179 101  175 173 100  149 145  88  113 109  47   81  77  32   49  45  20    0   0   0   34  27   3   68  56   4   88  74   4  147 102   2  179 135   3  194 154   4  201 166   5  201 166   5  212 168   4  212 168   4  225 168   2  225 168   2  225 168   2  225 168   2  226 176   3  222 180   5  225 188   6  225 188   6  225 188   6  227 195   6  227 195   6  227 195   6  227 195   6  227 195   6  227 195   6  229 202   5  229 202   5  229 202   5  229 202   5  229 202   5  229 202   5  229 202   5  234 210   4  234 210   4  234 210   4  234 210   4  234 210   4  234 210   4  234 210   4  234 210   4  235 205   2  234 210   4  243 230  87  243 230 138  114 113  72  149 110  23  156  86  11  176 139  27  204 177  50  227 222  74  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  227 222  74  204 177  50  176 139  27  156  86  11  162 123   4   53  43   3  105  88   5  167 144   6  179 135   3  178 128   2  172 147   5  167 148   8  167 148   8  167 144   6  163 144   8  163 144   8  163 144   8  161 141   8  158 141   9  158 141   9  158 141   9  158 141   9  156 138   9  155 139  10  155 139  10  155 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 136  10  155 131   8  157 124   5  158 118   4  160 113   2  161 108   0  160 113   2  158 118   4  157 124   5  156 127   7  148 130   9  148 130   9  143 127   9  143 127   9  135 121   9  108  98   7   77  65   5   53  43   3   26  22   6    0   0   0   41  37  17   70  67  25   96  93  42  131 124  45  150 143  72  168 160  66  168 160  66  174 161  59  169 155  53  167 151  39  176 139  27  173 131  16  165 124  10  167 118   3  174 161  59  193 183 105    0   0   0
+    0   0   0  126 112   8  142 112   6  158 118   4  154 137  10  154 137  10  155 131   8  157 124   5  158 118   4  158 118   4  167 118   3  171 124  10  173 131  16  176 139  27  178 152  46  174 161  59  181 171  85  182 174  95  182 174  95  183 179 101  183 179 101  149 145  88  127 123  64   96  93  42   59  55  21   18  14   7   20  15   1   53  43   3   88  74   4  131  91   4  171 124   2  194 154   4  201 166   5  201 166   5  212 168   4  212 168   4  225 168   2  226 176   3  225 168   2  226 176   3  222 180   5  223 184   6  225 188   6  227 195   6  227 195   6  229 202   5  229 202   5  229 202   5  229 202   5  229 202   5  229 202   5  229 202   5  234 210   4  234 210   4  234 210   4  234 210   4  234 210   4  234 210   4  234 210   4  234 210   4  234 210   4  235 205   2  238 216  13  238 216  13  202 170  30  156  86  11  181 142  38  218 198  56  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  239 234  68  218 198  56  181 142  38  156  86  11  147 102   2  157 135   6  167 144   6  178 128   2  171 140   4  172 147   5  167 148   8  167 148   8  167 144   6  163 144   8  163 144   8  163 144   8  161 141   8  158 141   9  158 141   9  158 141   9  158 141   9  155 139  10  155 139  10  155 139  10  154 137  10  155 135   9  156 129   6  157 124   5  158 118   4  160 113   2  161 108   0  160 113   2  158 118   4  157 124   5  155 131   8  150 133  10  148 130   9  143 127   9  143 127   9  126 112   8   96  86   8   68  56   4   43  35   3   20  15   1   14  10   2   49  45  20   81  77  32  113 109  47  131 124  45  168 160  66  168 160  66  168 160  66  174 161  59  167 151  39  163 146  29  170 139  22  173 131  16  167 118   3  160 113   2  160 113   2  158 118   4  157 124   5  155 131   8  158 118   4  178 152  46  193 183 105    0   0   0
+    0   0   0  126 112   8  142 112   6  158 118   4  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  155 135   9  156 129   6  157 124   5  158 118   4  167 118   3  167 118   3  171 124  10  176 139  27  181 142  38  182 155  55  179 166  71  181 171  85  182 174  95  183 179 101  183 179 101  164 159  94  127 123  64   96  93  42   70  67  25   34  27   3   14  10   2   43  35   3   77  65   5  105  88   5  158 118   4  194 154   4  204 174   5  204 174   5  212 168   4  212 168   4  226 176   3  222 180   5  226 176   3  226 176   3  231 188   2  231 188   2  227 195   6  229 202   5  229 202   5  229 202   5  235 205   2  234 210   4  234 210   4  234 210   4  234 210   4  234 210   4  234 210   4  234 210   4  234 210   4  235 205   2  238 216  13  218 193   4  178 128   2  179 128  28  210 190  66  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  210 190  66  179 128  28  148  94   1  148 122   5  162 133   4  171 124   2  171 140   4  172 147   5  167 148   8  167 144   6  163 144   8  163 144   8  163 144   8  163 144   8  158 141   9  158 141   9  158 141   9  157 135   6  156 129   6  157 124   5  158 118   4  160 113   2  160 113   2  158 118   4  157 124   5  156 127   7  155 131   8  150 133  10  148 130   9  143 127   9  143 127   9  117 105   7   88  74   4   59  49   4   34  27   3   14  10   2   26  22   6   59  55  21   87  82  20  113 109  47  146 137  56  168 160  66  168 160  66  174 161  59  169 155  53  167 151  39  176 139  27  173 131  16  171 124  10  167 118   3  158 118   4  158 118   4  157 124   5  156 129   6  155 135   9  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  158 118   4  178 152  46  193 183 105    0   0   0
+    0   0   0  126 112   8  142 112   6  158 118   4  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  155 138  13  154 137  11  148 130   9  140 124   9  140 124   9  143 127   9  150 133  10  155 131   8  156 127   7  157 124   5  158 118   4  167 118   3  171 124  10  173 131  16  176 139  27  178 152  46  174 161  59  181 171  85  182 174  95  186 179  94  183 179 101  175 173 100  150 143  72  113 109  47   81  77  32   41  37  17    0   0   0   34  27   3   68  56   4  105  88   5  148 113   4  194 154   4  204 174   5  204 174   5  213 177   5  213 177   5  223 184   6  225 188   6  231 188   2  231 188   2  231 188   2  233 197   2  229 202   5  235 205   2  234 210   4  234 210   4  234 210   4  234 210   4  234 210   4  235 205   2  234 210   4  213 177   5  156  86  11  191 160  42  227 222  74  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  227 222  74  191 160  42  156  86  11  148 113   4  162 123   4  171 124   2  172 147   5  172 147   5  167 148   8  167 144   6  163 144   8  164 140   6  169 130   4  162 123   4  167 118   3  161 108   0  160 113   2  162 123   4  157 124   5  155 131   8  150 133  10  148 130   9  143 127   9  143 127   9  140 124   9  108  98   7   77  65   5   59  49   4   26  22   6    0   0   0   41  37  17   70  67  25   96  93  42  131 124  45  150 143  72  168 160  66  168 160  66  174 161  59  178 152  46  176 139  27  170 139  22  173 131  16  167 118   3  167 118   3  158 118   4  157 124   5  156 127   7  155 131   8  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  158 118   4  178 152  46  193 183 105    0   0   0
+    0   0   0  126 112   8  142 112   6  158 118   4  154 137  10  154 137  10  154 137  10  154 137  10  155 138  13  154 137  11  150 133  10  150 133  10  140 124   9  126 112   8  117 105   7  126 112   8  135 121   9  140 124   9  148 130   9  154 137  10  154 137  10  154 137  10  154 136  10  155 131   8  157 124   5  157 124   5  165 124  10  171 124  10  171 124  10  176 139  27  181 142  38  182 155  55  179 166  71  181 171  85  182 174  95  183 179 101  183 179 101  149 145  88  127 123  64   96  93  42   59  55  21   14  10   2   26  22   6   59  49   4   88  74   4  142 112   6  183 150   5  204 174   5  212 186   4  212 186   4  212 186   4  225 188   6  227 195   6  233 197   2  233 197   2  233 197   2  235 205   2  235 205   2  235 205   2  234 210   4  213 177   5  160  94  16  204 177  50  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  233 229  70  204 177  50  160  94  16  142 112   6  158 118   4  171 124   2  169 130   4  178 128   2  171 124   2  167 118   3  171 124   2  169 130   4  162 133   4  162 133   4  155 139  10  150 133  10  148 130   9  148 130   9  126 112   8  105  88   5   77  65   5   43  35   3   20  15   1    9   5   1   49  45  20   81  77  32   96  93  42  131 124  45  168 160  66  168 160  66  168 160  66  169 155  53  167 151  39  176 139  27  173 131  16  171 124  10  167 118   3  158 118   4  158 118   4  157 124   5  155 131   8  154 136  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  158 118   4  178 152  46  193 183 105    0   0   0
+    0   0   0  126 112   8  142 112   6  158 118   4  154 137  10  154 137  10  154 137  10  155 138  13  158 139  17  154 137  11  150 133  10  149 132  24  150 143  72  146 137  56  146 137  56  124 113  27  115 105  29  108  98   7  140 124   9  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  155 135   9  156 129   6  156 127   7  165 124  10  165 124  10  171 124  10  173 131  16  176 139  27  178 152  46  179 166  71  181 171  85  186 179  94  183 179 101  183 179 101  164 159  94  127 126  80   96  93  42   70  67  25   34  27   3   20  15   1   53  43   3   88  74   4  130 105   5  171 140   4  212 186   4  212 186   4  218 193   4  218 193   4  227 195   6  229 202   5  235 205   2  213 177   5  163 101  23  204 177  50  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  204 177  50  163 101  23  148 113   4  162 123   4  179 135   3  171 140   4  164 140   6  161 141   8  154 136   9  155 131   8  149 131   6  126 112   8   96  86   8   68  56   4   43  35   3   14  10   2   26  22   6   59  55  21   81  77  32  113 109  47  146 137  56  168 160  66  168 160  66  169 155  53  178 152  46  176 139  27  170 139  22  173 131  16  171 124  10  162 123   4  162 123   4  157 124   5  156 129   6  155 135   9  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  158 118   4  178 152  46  193 183 105    0   0   0
+    0   0   0  126 112   8  142 112   6  158 118   4  154 137  10  154 137  10  154 137  10  158 142  22  163 146  29  163 146  29  168 160  66  181 174 105  181 174 105  181 171  85  181 174 105  181 174 105  181 174 105  105  96  24  131 117   9  153 136  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  155 135   9  156 127   7  162 130  12  162 130  12  173 131  16  178 128   2  176 139  27  178 152  46  191 160  42  190 172  60  190 175  80  186 179  94  193 183 105  175 173 100  150 143  72  113 109  47   81  77  32   49  45  20    9   5   1   43  35   3   77  65   5  130 105   5  171 140   4  194 154   4  204 174   5  160  94  16  204 177  50  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  204 177  50  160  94  16  148 113   4  157 135   6  126 112   8  117 105   7   88  74   4   59  49   4   34  27   3    9   5   1   34  27   3   70  67  25   96  93  42  131 124  45  150 143  72  168 160  66  168 160  66  178 152  46  178 152  46  176 139  27  165 124  10  160 113   2  153 111   3  158 118   4  157 124   5  156 127   7  155 135   9  153 136  10  143 127   9  140 124   9  148 130   9  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  155 138  13  154 137  11  148 130   9  140 124   9  140 124   9  140 124   9  148 113   4  178 152  46  193 183 105    0   0   0
+    0   0   0  126 112   8  142 112   6  158 118   4  154 137  10  154 137  10  154 137  11  167 151  39  169 155  53  179 166  71  181 174 105  164 154  76  158 142  22  169 155  53  174 161  59  181 171  85  181 174 105  131 124  45  131 117   9  153 136  10  154 137  10  154 137  11  154 137  11  153 136  10  150 133  10  153 136  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  155 137  10  155 139  10  155 139  10  158 141   9  158 141   9  157 137   8  162 133   4  171 139  13  171 139  13  179 135   3  187 143  14  176 151  24  191 160  42  190 172  60  190 175  80  195 188  89  195 188  89  193 183 105  164 154  76  127 123  64   96  93  42   59  55  21   59  49   4  147  68   5  191 160  42  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  227 222  74  191 160  42  147  68   5   26  22   6   41  37  17   49  45  20   70  67  25   96  93  42  131 124  45  168 160  66  168 160  66  169 155  53  178 152  46  176 139  27  173 131  16  171 124  10  171 124  10  165 124  10  160 132  32  162 130  12  143 127   9  131 124  45  108  98   7  135 121   9  148 130   9  155 138  13  158 142  22  153 136  10  132 124  24  108  98   7  140 124   9  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  158 142  22  158 142  22  149 132  24  139 129  30  124 113  27  108  98   7  142 112   6  178 152  46  193 183 105    0   0   0
+    0   0   0  126 112   8  142 112   6  158 118   4  154 137  10  154 137  10  155 138  13  167 151  39  179 166  71  181 174 105  175 173 100  117 105   7  143 127   9  158 142  22  167 151  39  179 166  71  168 160  66  149 132  24  148 130   9  153 136  10  148 130   9  143 127   9  148 130   9  135 121   9  131 117   9  150 133  10  153 136  10  148 130   9  140 124   9  140 124   9  140 124   9  143 127   9  150 133  10  148 130   9  140 124   9  140 124   9  150 133  10  155 139  10  150 133  10  143 127   9  143 127   9  155 139  10  158 141   9  152 137   8  148 130   9  152 137   8  161 141   8  171 139  13  171 139  13  187 143  14  187 143  14  187 143  14  191 160  42  204 177  50  198 179  67  195 188  89  195 188  89  177 139  60  174 128  42  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  174 128  42  131  91   4  151 143  32  168 160  66  178 152  46  181 142  38  176 139  27  173 131  16  171 124  10  171 124  10  165 124  10  156 127   7  155 131   8  155 135   9  154 137  10  154 137  11  167 151  39  169 155  53  168 160  66  186 180 119  115 105  29  105  88   5  140 124   9  158 142  22  167 151  39  168 160  66  183 177 113  115 105  29  131 117   9  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  167 151  39  169 155  53  181 171  85  186 180 119  150 143  72  108  98   7  130 105   5  178 152  46  193 183 105    0   0   0
+    0   0   0  126 112   8  142 112   6  158 118   4  154 137  10  154 137  10  158 142  22  167 151  39  181 171  85  181 174 105  146 137  56  108  98   7  135 121   9  153 136  10  158 142  22  167 151  39  163 146  29  153 136  10  158 139  17  158 142  22  135 121   9  132 124  24  126 112   8  131 124  45  108  98   7  135 121   9  153 136  10  131 117   9  124 113  27  124 113  27  105  88   5  117 105   7  150 133  10  149 132  24  124 113  27  108  98   7  143 127   9  158 142  22  151 143  32  124 113  27  108  98   7  148 130   9  163 144  17  151 143  32  124 113  27  131 117   9  152 137   8  167 148   8  167 148   8  167 148   8  173 151   6  173 151   6  173 151   6  187 143  14  187 143  14  190 172  60  182 155  55  163 101  23  210 190  66  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  221 215  78  210 190  66  163 101  23  148 113   4  164 140   6  171 124  10  171 124  10  162 130  12  157 135   6  157 137   8  157 137   8  154 136   9  154 136   9  154 137  10  154 136   9  154 137  10  158 139  17  167 151  39  179 166  71  186 180 119  186 180 119  164 159  94   96  86   8  131 117   9  158 142  22  174 161  59  183 179 101  186 180 119  115 105  29  131 117   9  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  167 151  39  179 166  71  183 179 101  186 180 119  150 143  72  117 105   7  147 102   2  178 152  46  193 183 105    0   0   0
+    0   0   0  126 112   8  142 112   6  158 118   4  154 137  10  154 137  10  167 151  39  174 161  59  181 171  85  181 174 105  146 137  56  108  98   7  131 117   9  154 137  10  154 137  10  158 139  17  155 138  13  143 127   9  155 138  13  174 161  59  181 171  85  181 174 105  171 163  85  181 174 105  146 137  56  153 136  10  169 155  53  175 173 100  175 173 100  181 174 105  175 173 100  105  96  24  158 139  17  181 174 105  175 173 100  105  88   5  150 133  10  169 155  53  181 174 105  171 163  85  105  88   5  154 138  10  169 155  53  181 174 105  146 137  56  135 121   9  152 137   8  167 148   8  167 148   8  167 148   8  173 151   6  173 151   6  173 151   6  179 135   3  183 150   5  184 161  25  166 113  27  178 152  46  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  178 152  46  131  91   4  148 122   5  157 124   5  160 113   2  157 135   6  157 137   8  157 137   8  157 137   8  154 136   9  154 136   9  154 136   9  154 136   9  154 137  11  163 146  29  169 155  53  181 171  85  186 180 119  183 177 113  186 180 119  105  96  24  108  98   7  154 137  10  179 166  71  183 179 101  186 180 119  115 105  29  131 117   9  140 124   9  140 124   9  140 124   9  148 130   9  155 138  13  154 137  11  148 130   9  140 124   9  140 124   9  140 124   9  143 127   9  150 133  10  148 130   9  140 124   9  140 124   9  148 130   9  150 133  10  148 130   9  148 130   9  163 146  29  186 179  94  186 180 119  124 113  27  131 117   9  148 113   4  178 152  46  193 183 105    0   0   0
+    0   0   0  126 112   8  142 112   6  158 118   4  154 137  10  154 137  10  167 151  39  179 166  71  182 174  95  181 174 105  146 137  56   96  86   8  131 117   9  148 130   9  155 138  13  158 139  17  154 137  11  135 121   9  135 121   9  181 171  85  181 174 105  181 174 105  146 137  56  163 146  29  163 146  29  169 155  53  181 174 105  168 160  66  158 139  17  168 160  66  181 174 105  171 163  85  167 151  39  182 174  95  181 174 105  124 113  27  150 133  10  181 171  85  181 174 105  181 174 105  105  96  24  153 136  10  181 171  85  175 173 100  126 112   8  140 124   9  158 141   9  167 148   8  167 148   8  167 148   8  173 151   6  173 151   6  173 151   6  178 128   2  183 150   5  181 142  38  163 101  23  215 195  75  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  217 211  80  215 195  75  163 101  23  147 102   2  156 129   6  161 108   0  162 133   4  157 135   6  157 137   8  157 137   8  157 137   8  154 136   9  154 136   9  154 136   9  155 138  13  167 151  39  174 161  59  183 177 113  181 171  85  179 166  71  186 180 119  150 143  72   96  86   8  135 121   9  167 151  39  183 179 101  186 180 119  115 105  29  108  98   7  124 113  27  105  88   5  108  98   7  135 121   9  153 136  10  155 138  13  140 124   9  124 113  27  108  98   7  108  98   7  126 112   8  148 130   9  140 124   9  108  98   7  108  98   7  131 117   9  153 136  10  135 121   9  108  98   7  131 117   9  181 171  85  186 180 119  115 105  29  135 121   9  158 118   4  178 152  46  193 183 105    0   0   0
+    0   0   0  126 112   8  142 112   6  158 118   4  154 137  10  154 137  10  167 151  39  179 166  71  186 179  94  181 174 105  171 163  85   88  74   4  108  98   7  135 121   9  148 130   9  158 139  17  158 142  22  150 143  72  132 124  24  179 166  71  182 174  95  181 174 105  105  88   5  150 133  10  169 155  53  182 174  95  181 174 105  164 154  76  181 174 105  177 174  98  168 160  66  149 132  24  163 146  29  182 174  95  181 174 105  150 143  72  148 130   9  181 174 105  179 166  71  181 174 105  150 143  72  154 137  10  181 174 105  146 137  56  131 117   9  148 130   9  163 144   8  167 148   8  167 148   8  167 148   8  173 151   6  173 151   6  179 135   3  179 135   3  184 161  25  166 113  27  181 142  38  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  181 142  38  131  91   4  145 123   8  158 118   4  162 123   4  157 135   6  157 137   8  157 137   8  157 137   8  154 136   9  154 136   9  154 136   9  158 142  22  169 155  53  181 171  85  186 180 119  146 137  56  179 166  71  186 180 119  183 177 113   96  86   8  117 105   7  158 142  22  183 179 101  186 180 119  171 163  85  186 180 119  186 180 119  175 173 100  105  88   5  126 112   8  154 137  11  167 151  39  171 163  85  186 180 119  183 177 113  150 143  72  108  98   7  150 133  10  182 174  95  186 180 119  131 124  45  126 112   8  169 155  53  186 180 119  164 154  76  143 127   9  181 171  85  186 180 119  115 105  29  131 117   9  158 118   4  178 152  46  193 183 105    0   0   0
+    0   0   0  126 112   8  142 112   6  158 118   4  154 137  10  154 137  10  158 142  22  169 155  53  186 179  94  181 174 105  181 174 105  150 143  72   96  86   8  117 105   7  131 117   9  143 127   9  168 160  66  181 174 105  139 129  30  179 166  71  182 174  95  181 174 105   96  86   8  140 124   9  169 155  53  183 179 101  181 174 105  171 163  85  149 132  24  158 142  22  148 130   9  124 113  27  131 117   9  179 166  71  182 174  95  181 174 105  169 155  53  175 173 100  163 146  29  182 174  95  181 174 105  169 155  53  175 173 100  117 105   7  140 124   9  156 138   9  167 148   8  167 148   8  167 148   8  167 148   8  173 151   6  173 151   6  179 135   3  172 147   5  184 161  25  147  68   5  198 179  67  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  211 204  83  198 179  67  147  68   5  142 112   6  162 123   4  167 118   3  157 135   6  157 137   8  157 137   8  157 137   8  154 136   9  154 136   9  156 137  12  163 146  29  174 161  59  185 177 109  183 177 113  124 113  27  167 151  39  182 174  95  186 180 119  146 137  56   96  86   8  154 137  11  183 179 101  186 180 119  164 154  76  169 155  53  182 174  95  186 180 119  146 137  56  131 117   9  163 146  29  185 177 109  171 163  85  179 166  71  185 177 109  186 180 119  150 143  72  140 124   9  182 174  95  186 180 119  150 143  72  126 112   8  179 166  71  186 180 119  124 113  27  153 136  10  186 179  94  186 180 119   88  74   4  131 117   9  158 118   4  178 152  46  193 183 105    0   0   0
+    0   0   0  126 112   8  142 112   6  158 118   4  154 137  10  154 137  10  154 137  10  167 151  39  181 171  85  183 179 101  181 174 105  181 174 105  171 163  85  146 137  56  164 154  76  175 173 100  181 174 105  146 137  56  153 136  10  182 174  95  182 174  95  181 174 105   88  74   4  126 112   8  163 146  29  186 179  94  181 174 105  175 173 100  146 137  56  151 143  32  171 163  85  150 143  72  135 121   9  169 155  53  186 179  94  181 174 105  181 174 105  150 143  72  158 141   9  182 174  95  181 174 105  181 174 105  164 154  76  126 112   8  148 130   9  163 144   8  167 148   8  167 148   8  167 148   8  167 148   8  173 151   6  173 151   6  178 128   2  183 150   5  181 142  38  163 101  23  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  163 101  23  147 102   2  157 124   5  160 113   2  157 135   6  157 135   6  157 137   8  157 137   8  154 136   9  154 136   9  158 142  22  167 151  39  179 166  71  186 180 119  186 180 119  186 180 119  186 180 119  186 180 119  186 180 119  175 173 100   88  74   4  148 130   9  182 174  95  186 180 119  124 113  27  158 142  22  186 179  94  186 180 119  146 137  56  135 121   9  181 171  85  186 180 119  131 124  45  158 142  22  181 171  85  183 177 113  183 177 113  117 105   7  179 166  71  185 177 109  186 180 119  132 124  24  182 174  95  171 163  85  117 105   7  158 142  22  186 179  94  186 180 119   88  74   4  131 117   9  158 118   4  178 152  46  193 183 105    0   0   0
+    0   0   0  126 112   8  142 112   6  158 118   4  154 137  10  154 137  10  154 137  10  158 142  22  167 151  39  179 166  71  186 179  94  182 174  95  181 174 105  181 174 105  181 174 105  181 171  85  151 143  32  140 124   9  163 146  29  186 179  94  181 174 105  181 174 105  146 137  56  126 112   8  158 139  17  181 171  85  186 179  94  181 171  85  181 174 105  177 174  98  168 160  66  135 121   9  143 127   9  167 151  39  182 174  95  182 174  95  181 174 105  132 124  24  163 144  17  190 175  80  182 174  95  181 174 105  149 132  24  143 127   9  155 139  10  163 144   8  167 148   8  167 148   8  167 148   8  173 151   6  173 151   6  173 151   6  178 128   2  184 161  25  174 128  42  174 128  42  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  204 197  86  174 128  42  148  94   1  148 122   5  161 108   0  157 135   6  157 135   6  157 137   8  157 137   8  154 136   9  156 137  12  163 146  29  169 155  53  181 174 105  183 177 113  151 143  32  174 161  59  179 166  71  182 174  95  185 177 109  186 180 119  131 124  45  126 112   8  181 171  85  186 180 119  115 105  29  153 136  10  181 171  85  186 180 119  146 137  56  140 124   9  182 174  95  186 180 119  146 137  56  117 105   7  169 155  53  182 174  95  186 180 119  115 105  29  169 155  53  193 183 105  186 180 119  177 174  98  186 180 119  124 113  27  126 112   8  163 146  29  186 179  94  177 174  98   88  74   4  131 117   9  158 118   4  178 152  46  193 183 105    0   0   0
+    0   0   0  126 112   8  142 112   6  158 118   4  154 137  10  154 137  10  154 137  10  154 137  10  158 142  22  167 151  39  179 166  71  179 166  71  174 161  59  169 155  53  169 155  53  158 142  22  148 130   9  150 133  10  163 146  29  179 166  71  179 166  71  163 146  29  153 136  10  148 130   9  155 138  13  167 151  39  179 166  71  179 166  71  174 161  59  167 151  39  158 139  17  150 133  10  150 133  10  163 146  29  179 166  71  179 166  71  158 142  22  148 130   9  163 146  29  179 166  71  179 166  71  163 144  17  152 137   8  155 139  10  163 144   8  163 144   8  167 148   8  167 148   8  167 148   8  173 151   6  173 151   6  173 151   6  178 128   2  184 161  25  166 113  27  182 155  55  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  182 155  55  156  86  11  148 122   5  161 108   0  157 135   6  157 135   6  157 137   8  157 137   8  154 136   9  158 142  22  167 151  39  179 166  71  186 180 119  164 154  76  108  98   7  148 130   9  167 151  39  179 166  71  183 179 101  186 180 119  175 173 100  108  98   7  179 166  71  186 180 119  113 109  47  126 112   8  179 166  71  186 180 119  150 143  72  126 112   8  179 166  71  186 180 119  183 177 113  146 137  56  151 143  32  181 174 105  164 154  76  117 105   7  158 142  22  186 179  94  185 177 109  186 180 119  164 159  94  117 105   7  140 124   9  167 151  39  186 179  94  181 174 105  105  96  24  126 112   8  158 118   4  178 152  46  193 183 105    0   0   0
+    0   0   0  126 112   8  142 112   6  158 118   4  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  158 142  22  163 146  29  163 146  29  163 146  29  163 146  29  163 146  29  158 142  22  153 136  10  153 136  10  158 142  22  163 146  29  163 146  29  158 142  22  158 139  17  153 136  10  153 136  10  158 142  22  163 146  29  163 146  29  163 146  29  163 146  29  158 142  22  153 136  10  153 136  10  158 142  22  163 146  29  163 146  29  158 142  22  155 139  10  163 144  17  167 151  39  167 151  39  163 146  29  158 141   9  161 141   8  163 144   8  163 144   8  167 148   8  167 148   8  167 148   8  173 151   6  173 151   6  173 151   6  178 128   2  191 160  42  160  94  16  179 166  71  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  179 166  71  147  68   5  148 122   5  161 108   0  157 135   6  157 135   6  157 137   8  157 137   8  154 136   9  163 146  29  174 161  59  181 174 105  186 180 119  164 154  76  117 105   7  135 121   9  158 142  22  169 155  53  183 179 101  186 180 119  186 180 119  169 155  53  182 174  95  186 180 119  171 163  85  140 124   9  181 171  85  186 180 119  183 177 113  131 117   9  174 161  59  183 179 101  185 177 109  186 180 119  186 180 119  181 171  85  139 129  30  135 121   9  158 142  22  179 166  71  182 174  95  186 180 119  124 113  27  126 112   8  150 133  10  167 151  39  183 179 101  186 180 119  131 124  45  135 121   9  158 118   4  178 152  46  193 183 105    0   0   0
+    0   0   0  126 112   8  142 112   6  158 118   4  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  155 137  10  155 139  10  155 139  10  158 141   9  158 141   9  158 141   9  158 141   9  161 141   8  163 144   8  163 144   8  163 144   8  163 144   8  167 148   8  167 148   8  167 148   8  173 151   6  173 151   6  173 151   6  178 128   2  190 172  60  156  86  11  190 175  80  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  195 188  89  190 175  80  147  68   5  148 122   5  161 108   0  162 133   4  157 135   6  157 137   8  157 137   8  154 136   9  163 146  29  179 166  71  179 166  71  169 155  53  158 139  17  143 127   9  148 130   9  155 138  13  167 151  39  179 166  71  179 166  71  163 146  29  167 151  39  174 161  59  174 161  59  158 142  22  158 139  17  179 166  71  179 166  71  158 142  22  148 130   9  163 146  29  179 166  71  179 166  71  174 161  59  174 161  59  158 142  22  150 133  10  154 137  10  158 142  22  169 155  53  183 177 113  150 143  72  126 112   8  140 124   9  154 137  11  167 151  39  179 166  71  169 155  53  143 127   9  148 130   9  158 118   4  178 152  46  193 183 105    0   0   0
+    0   0   0  126 112   8  142 112   6  158 118   4  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  155 137  10  155 139  10  155 139  10  158 141   9  158 141   9  158 141   9  158 141   9  161 141   8  163 144   8  163 144   8  163 144   8  167 148   8  167 148   8  167 148   8  167 148   8  173 151   6  173 151   6  172 147   5  178 128   2  190 172  60  147  68   5  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  147  68   5  148 122   5  161 108   0  156 129   6  157 135   6  157 137   8  157 137   8  154 136   9  158 142  22  163 146  29  163 146  29  163 146  29  158 142  22  153 136  10  153 136  10  154 137  10  158 142  22  163 146  29  163 146  29  158 142  22  163 146  29  163 146  29  163 146  29  158 142  22  158 142  22  163 146  29  163 146  29  158 142  22  153 136  10  158 139  17  163 146  29  163 146  29  163 146  29  163 146  29  158 142  22  158 142  22  163 146  29  169 155  53  185 177 109  177 174  98  135 121   9  135 121   9  148 130   9  154 137  10  158 142  22  163 146  29  158 142  22  153 136  10  153 136  10  158 118   4  178 152  46  193 183 105    0   0   0
+    0   0   0  126 112   8  142 112   6  158 118   4  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  155 137  10  155 139  10  155 139  10  158 141   9  158 141   9  158 141   9  158 141   9  161 141   8  163 144   8  163 144   8  163 144   8  167 148   8  167 148   8  167 148   8  167 148   8  173 151   6  173 151   6  172 147   5  179 135   3  190 172  60  147  68   5  182 174  95  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  182 174  95  147  68   5  145 123   8  160 113   2  156 129   6  157 135   6  157 137   8  157 137   8  154 136   9  154 136   9  154 136   9  154 136   9  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  167 151  39  169 155  53  181 171  85  181 171  85  149 132  24  140 124   9  150 133  10  153 136  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  154 137  10  158 118   4  178 152  46  193 183 105    0   0   0
+    0   0   0  131 117   9  138 117   8  148  94   1  148  94   1  148  94   1  148  94   1  148  94   1  148  94   1  148  94   1  148  94   1  148  94   1  148  94   1  148  94   1  148  94   1  148  94   1  148  94   1  148  94   1  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  153 111   3  153 111   3  153 111   3  153 111   3  153 111   3  153 111   3  158 118   4  158 118   4  158 118   4  162 123   4  162 123   4  158 118   4  162 123   4  173 151   6  147  68   5  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  186 179  94  147  68   5  145 123   8  153 111   3  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  147 102   2  166 113  27  169 132  54  174 128  42  147 102   2  148  94   1  148  94   1  148  94   1  148  94   1  148  94   1  148  94   1  148  94   1  148  94   1  148  94   1  148  94   1  148  94   1  155 131   8  181 171  85    0   0   0
+    0   0   0  131 117   9  131 117   9  126 112   8  126 112   8  126 112   8  126 112   8  126 112   8  126 112   8  126 112   8  126 112   8  126 112   8  126 112   8  126 112   8  126 112   8  126 112   8  126 112   8  126 112   8  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  134 112   5  134 112   5  134 112   5  134 112   5  134 112   5  134 112   5  134 112   5  138 117   8  138 117   8  142 112   6  142 112   6  142 112   6  142 112   6  142 112   6  148 113   4  145 123   8  157 135   6  147  68   5  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  177 174  98  147  68   5  138 117   8  140 119   3  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  130 105   5  126 112   8  126 112   8  126 112   8  126 112   8  126 112   8  126 112   8  126 112   8  126 112   8  126 112   8  126 112   8  126 112   8  126 112   8  126 112   8  135 121   9  153 136  10    0   0   0
+
+.
diff --git a/pctb/resolve.c b/pctb/resolve.c
new file mode 100644 (file)
index 0000000..052ec32
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * IPC to external resolver program
+ */
+/*
+ *  This is part of ypp-sc-tools, a set of third-party tools for assisting
+ *  players of Yohoho Puzzle Pirates.
+ * 
+ *  Copyright (C) 2009 Ian Jackson <ijackson@chiark.greenend.org.uk>
+ * 
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ * 
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ * 
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * 
+ *  Yohoho and Puzzle Pirates are probably trademarks of Three Rings and
+ *  are used without permission.  This program is not endorsed or
+ *  sponsored by Three Rings.
+ */
+
+#include "ocr.h"
+
+static FILE *resolver;
+static pid_t resolver_pid;
+static int resolver_done;
+
+FILE *resolve_start(void) {
+  int jobpipe[2],donepipe[2];
+
+  if (!o_resolver) return 0;
+
+  if (!resolver) {
+    sysassert(! pipe(jobpipe) );
+    sysassert(! pipe(donepipe) );
+    resolver_pid= fork();
+    sysassert(resolver_pid!=-1);
+    if (!resolver_pid) {
+      sysassert( dup2(jobpipe[0],0) ==0 );
+      sysassert(! close(jobpipe[1]) );
+      sysassert(! close(donepipe[0]) );
+      /* we know donepipe[1] is >= 4 and we have dealt with all the others
+       * so we aren't in any danger of overwriting some other fd 4: */
+      sysassert( dup2(donepipe[1],4) ==4 );
+      execlp(o_resolver, o_resolver,
+            DEBUGP(callout) ? "--debug" : "--noop-arg",
+            "--automatic-1",
+            (char*)0);
+      sysassert(!"execlp ocr-resolver failed");
+    }
+    sysassert(! close(jobpipe[0]) );
+    sysassert(! close(donepipe[1]) );
+    resolver= fdopen(jobpipe[1],"w"); sysassert(resolver);
+    resolver_done= donepipe[0];
+  }
+  return resolver;
+}
+
+void resolve_finish(void) {
+  char cb;
+  
+  sysassert(!ferror(resolver));
+  sysassert(!fflush(resolver));
+
+  sysassert(resolver);
+
+  int r;
+  for (;;) {
+    r= read(resolver_done,&cb,1);
+    if (r==-1) { sysassert(errno==EINTR); continue; }
+    break;
+  }
+
+  if (r==0) {
+    waitpid_check_exitstatus(resolver_pid, "character resolver");
+    fclose(resolver);
+    close(resolver_done);
+    resolver= 0;
+  } else {
+    assert(r==1);
+    sysassert(cb==0);
+  }
+}
diff --git a/pctb/rgbimage.c b/pctb/rgbimage.c
new file mode 100644 (file)
index 0000000..798a104
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+ * Handling of colour (RGB) images
+ */
+/*
+ *  This is part of ypp-sc-tools, a set of third-party tools for assisting
+ *  players of Yohoho Puzzle Pirates.
+ * 
+ *  Copyright (C) 2009 Ian Jackson <ijackson@chiark.greenend.org.uk>
+ * 
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ * 
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ * 
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * 
+ *  Yohoho and Puzzle Pirates are probably trademarks of Three Rings and
+ *  are used without permission.  This program is not endorsed or
+ *  sponsored by Three Rings.
+ */
+
+#include "convert.h"
+
+/*
+ *
+ *
+ * widgets.txt
+ * format
+ *
+ *  <magic>
+ *
+ *  <context>
+ *  <string>
+ *  ppmnoraw depth 8
+ *
+ *  <context>
+ *  <string>
+ *  ppmnoraw depth 8
+ *  .
+ *
+ */
+
+#include "convert.h"
+
+static int identify(const RgbImage *base, Rect portion,
+                   char result[MAXIMGIDENT], const char *what) {
+  sysassert( dbfile_open("pixmaps.txt") );
+
+#define FGETSLINE (dbfile_getsline(result,MAXIMGIDENT,__FILE__,__LINE__))
+
+  FGETSLINE;
+  dbassert(!strcmp(result,"# ypp-sc-tools pctb pixmaps v1"));
+  
+  void *row= 0;
+  size_t rowa= 0;
+  
+  for (;;) {
+    FGETSLINE;
+    if (!result[0] || result[0]=='#') continue;
+    if (!strcmp(result,".")) break;
+
+    char magic[10];
+    dbfile_getsline(magic,sizeof(magic),__FILE__,__LINE__);
+
+    dbassert(!strcmp(magic,"P3"));
+    int w,h,maxval;
+    dbassert( dbfile_scanf("%d %d %d",&w,&h,&maxval) == 3);
+    dbassert(w>0); dbassert(h>0); dbassert(maxval==255);
+
+    if (rowa < w) {
+      rowa= w;
+      row= mrealloc(row, rowa*3);
+    }
+    int diff= w != RECT_W(portion) || h != RECT_H(portion);
+
+    int x,y,i;
+    for (y=0; y<h; y++) {
+      for (x=0; x<w; x++) {
+       for (i=0; i<3; i++) {
+         int c;
+         dbassert( dbfile_scanf("%d",&c) == 1);
+         dbassert(c>=0 && c<=255);
+         diff |= (c != RI_PIXEL(base, portion.tl.x + x, portion.tl.y + y)[i]);
+       }
+      }
+    }
+    if (!diff) {
+      progress_log("Identified %s image: %s.",what,result);
+      goto found;
+    }
+  }
+  result[0]= 0;
+
+found:
+  dbfile_close();
+  return !!result[0];
+}
+
+static void fwrite_ppm(FILE *f, const RgbImage *base, Rect portion) {
+  int x,y,i;
+  fprintf(f,"P3\n%d %d\n255\n", RECT_W(portion), RECT_H(portion));
+  for (y=portion.tl.y; y<=portion.br.y; y++) {
+    for (x=portion.tl.x; x<=portion.br.x; x++) {
+      putc(' ',f);
+      for (i=0; i<3; i++)
+       fprintf(f," %3d", RI_PIXEL(base,x,y)[i]);
+    }
+    putc('\n',f);
+  }
+  sysassert(!ferror(f));
+  sysassert(!fflush(f));
+}
+
+void identify_rgbimage(const RgbImage *base, Rect portion,
+                      char result[MAXIMGIDENT], const char *what) {
+  for (;;) {
+    int ok= identify(base, portion, result, what);
+    if (ok) return;
+    
+    if (DEBUGP(pixmap))
+      fwrite_ppm(stderr,base,portion);
+
+    FILE *resolver= resolve_start();
+    if (!resolver)
+       fatal("Image recognition failed - unrecognised island.\n"
+             "See FIXME.FIXME\n");
+
+    fprintf(resolver, "pixmap\n" "%s\n", what);
+    fwrite_ppm(resolver, base, portion);
+    putc('\n',resolver);
+
+    resolve_finish();
+  }
+}
+
+RgbImage *alloc_rgb_image(int w, int h) {
+  RgbImage *ri;
+  ri= mmalloc(sizeof(*ri) + w*h*3);
+  ri->w= w;
+  ri->h= h;
+  return ri;
+}
diff --git a/pctb/setisland-history b/pctb/setisland-history
new file mode 100644 (file)
index 0000000..4935a94
--- /dev/null
@@ -0,0 +1,28 @@
+    1  cd things/ypp-sc-tools-pctb/pctb/
+    2  curl 'file:///home/ian/things/ypp-sc-tools-pctb/pctb/upload.php?topisland=560&ocean=2&island=48&action=setisland&forcereload=1244747001&filename=FMa4qY'
+    3  curl 'http://pctb.ilk.org/pctb/upload.php?topisland=560&ocean=2&island=48&action=setisland&forcereload=1244747001&filename=FMa4qY' >v.html
+    4  less v.html 
+    5  curl 'http://pctb.ilk.org/upload.php?topisland=560&ocean=2&island=48&action=setisland&forcereload=1244747001&filename=FMa4qY' >v.html
+    6  less v.html 
+    7  curl 'http://pctb.ilk.org/upload.php?topisland=560&ocean=2&island=48&action=setisland&forcereload=1244748679&filename=PFayDW' >v.html 
+    8  less v.html 
+    9  less raw.tsv
+   10  less v.html 
+   11  git-status 
+   12  git-diff
+   13  git-branch 
+   14  git-checkout -b temp.marketdata-examples
+   15  git-add raw.tsv u v.html  marketdata.gz marketdata-example marketdata-example2 
+   16  rm commodmap.php 
+   17  git-add capture.dat 
+   18  git-status 
+   19  git-commit -m 'Various example files'
+   20  git-commit -m 'First upload stage' yppsc-commod-processor
+   21  git-status 
+   22  git-checkout master
+   23  display \#pages.c# 
+   24  display \#pages#.ppm 
+   25  bg
+   26  display \#pages-market#.ppm 
+   27  history |less
+   28  history >setisland-history
index 0fbfb40e6eb076b5dd7081635362e1dabc1fead7..5a21f0cc4a94b8488ebca7892f8dd1a2e2d5c95b 100644 (file)
@@ -27,7 +27,7 @@
 
 #include "structure.h"
 
-static CanonImage *cim;
+static const CanonImage *cim;
 
 static inline char get(int x, int y) { return cim->d[y * cim->w + x]; }
 static inline char get_p(Point p) { return get(p.x,p.y); }
@@ -46,10 +46,15 @@ static int colrightx[INTERESTING_COLUMNS];
 static int text_h=-1, columns=-1;
 static OcrReader *rd;
 
+#define OTHERCOORD_x y
+#define OTHERCOORD_y x
+
 const CanonColourInfo canoncolourinfos[]= {
   { 0x475A5E, '*' }, /* edge */
   { 0x2C5F7A, '*' }, /* edge just under box heading shadow */
-  { 0xC5C7Ae, '*' }, /* blank area of partial commodities list */
+  { 0xC5C7AE, '*' }, /* blank area of partial commodities list */
+  { 0x6B828C, '*' }, /* background of ship status meter area */
+  { 0x934405, '*' }, /* border of ship meter area */
   { 0x7D9094, '+' }, /* interbox */
 
   { 0xBDC5BF, ' ' }, /* background - pale  Sugar cane, etc. */
@@ -88,7 +93,8 @@ static void mustfail1(const char *file, int line, const char *what) {
          " Check that your client is logged in has the correct display.\n"
          " If that isn't the problem, please report this as a fault.\n\n"
          "Technical details:"
-         " %s:%d: requirement failed: %s\n",
+         " %s:%d: requirement failed:\n"
+         " %s\n",
          file, line, what);
 }
 static void mustfail2(void) NORET;
@@ -163,11 +169,39 @@ static void debug_rect(const char *what, int whati, Rect rr) {
          );                                            \
   }while(0)
 
-void find_structure(CanonImage *im, int *max_relevant_y_r) {
+#define ADJUST_BOX(search,insidechrs,want, lim,LIMIT_MUST, TLBR,XY,increm) \
+  for (;;) {                                                              \
+    LIMIT_MUST( (search).tl.XY != (search).br.XY &&                       \
+               (search).tl.XY != (lim),                                   \
+               MR((search));MSB(#TLBR);MSB(#XY) );                        \
+    int got=0;                                                            \
+    Point p=(search).tl;                                                  \
+    for (p.XY=(search).TLBR.XY;                                                   \
+        p.OTHERCOORD_##XY <= (search).br.OTHERCOORD_##XY;                 \
+        p.OTHERCOORD_##XY++)                                              \
+      got += !!strchr(insidechrs, get_p(p));                              \
+    if (got >= (want))                                                    \
+      break;                                                              \
+    (search).TLBR.XY += increm;                                                   \
+  }
+
+void find_structure(const CanonImage *im, int *max_relevant_y_r) {
   cim= im;
   
   Rect whole = { {0,0}, {cim->w-1,cim->h-1} };
 
+  if (DEBUGP(rect)) {
+    int xscaleunit, y,x;
+    for (y=0, xscaleunit=1; y<4; y++, xscaleunit*=10) {
+      fprintf(debug,"     ");
+      for (x=0; x<=cim->w; x++) {
+       if (x % xscaleunit) fputc(' ',debug);
+       else fprintf(debug,"%d",(x / xscaleunit)%10);
+      }
+      fputc('\n',debug);
+    }
+  }
+
   WALK_UNTIL_MUST(mainr.tl, x,-1, whole.tl.x, '*');
   WALK_UNTIL_MUST(mainr.tl, y,-1, whole.tl.y, '*');
   WALK_UNTIL_MUST(mainr.br, x,+1, whole.br.x, '*');
@@ -209,18 +243,6 @@ void find_structure(CanonImage *im, int *max_relevant_y_r) {
   down.y++;
   WALK_UNTIL_MUST(down, y,+1, mainr.br.y, '+');
 
-  if (DEBUGP(rect)) {
-    int xscaleunit, y,x;
-    for (y=0, xscaleunit=1; y<4; y++, xscaleunit*=10) {
-      fprintf(debug,"     ");
-      for (x=0; x<=cim->w; x++) {
-       if (x % xscaleunit) fputc(' ',debug);
-       else fprintf(debug,"%d",(x / xscaleunit)%10);
-      }
-      fputc('\n',debug);
-    }
-  }
-
   commbasey= up.y;
   comminty= down.y - up.y + 2;
 
@@ -261,19 +283,8 @@ void find_structure(CanonImage *im, int *max_relevant_y_r) {
 void check_correct_commodities(void) {
   Rect search= { { 50,39 }, { 130,59 } };
 
-#define SEARCH_UPDOWN(this,increm)                             \
-  for (;;) {                                                   \
-    MUST( search.tl.y != search.br.y, MR(search);MSB(#this); );        \
-    int x, got=0;                                              \
-    for (x=search.tl.x; x<=search.br.x; x++)                   \
-      got += (get(x,this.y) == '_');                           \
-    if (got > 10)                                              \
-      break;                                                   \
-    this.y += increm;                                          \
-  }
-    
-  SEARCH_UPDOWN(search.tl, +1);
-  SEARCH_UPDOWN(search.br, -1);
+  ADJUST_BOX(search,"_",10, cim->h, MUST, tl,y,+1);
+  ADJUST_BOX(search,"_",10, 0,      MUST, br,y,-1);
 
   debug_rect("commodselr",1, search);
 
@@ -332,6 +343,7 @@ static void file_read_image_ppm(FILE *f) {
   struct pam inpam;
   unsigned char rgb_buf[3];
   CanonImage *im;
+  RgbImage *ri=0;
 
   pnm_readpaminit(f, &inpam, sizeof(inpam));
   if (!(inpam.maxval == 255 &&
@@ -339,6 +351,9 @@ static void file_read_image_ppm(FILE *f) {
        inpam.format == RPPM_FORMAT))
     fatal("PNM screenshot(s) file must be 8bpp 1 byte per sample RGB");
 
+  if (!npages)
+    page0_rgbimage= ri= alloc_rgb_image(inpam.width, inpam.height);
+
   CANONICALISE_IMAGE(im, inpam.width, inpam.height, {
     int r= fread(&rgb_buf,1,3,f);
     sysassert(!ferror(f));
@@ -348,6 +363,9 @@ static void file_read_image_ppm(FILE *f) {
        ((unsigned long)rgb_buf[0]<<16) |
        ((unsigned long)rgb_buf[1]<<8) |
                       (rgb_buf[2]);
+
+    if (ri)
+      CANONIMG_ALSO_STORERGB(ri);
   });
 
   sysassert(!ferror(screenshot_file));
@@ -473,3 +491,63 @@ void analyse(FILE *tsv_output) {
     }
   }
 }
+
+//static Rect islandnamer;
+
+void find_islandname(void) {
+  Rect sunshiner;
+  char sunshine[MAXIMGIDENT];
+  const RgbImage *ri= page0_rgbimage;
+
+  cim= page_images[0];
+  
+  sunshiner.tl.x= cim->w - 1034 +  885;
+  sunshiner.br.x= cim->w - 1034 + 1020;
+  sunshiner.tl.y= 227;
+  sunshiner.br.y= 228;
+
+  ADJUST_BOX(sunshiner,"o*",30, 100,MUST, tl,y,-1);
+  ADJUST_BOX(sunshiner,"o*",30, 100,MUST, br,y,+1);
+  debug_rect("sunshiner",0, sunshiner);
+
+  MUST(sunshiner.br.y - sunshiner.tl.y > 20, MR(sunshiner));
+  sunshiner.br.y--;
+
+  ADJUST_BOX(sunshiner,"o",20, (cim->w - 1034 + 700), MUST, tl,x,-1);
+  ADJUST_BOX(sunshiner,"o",20,  cim->w,               MUST, br,x,+1);
+  debug_rect("sunshiner",1, sunshiner);
+
+  identify_rgbimage(ri, sunshiner, sunshine, "sunshine widget");
+  fprintf(stderr,"sunshine: `%s'",sunshine);
+  
+#if 0
+
+
+  islandnamer.tl.x= cim->w - 1034 +  885;
+  islandnamer.br.x= cim->w - 1034 + 1020;
+  islandnamer.tl.y=                 128;
+  islandnamer.br.y=                 156;
+
+#define IR_VSHRINK_MUST(CONDMUST,PRWHY) \
+  do{ if (!(CONDMUST)) goto not_in_radar; }while(0)
+
+  ADJUST_BOX(islandnamer,"o",5, IR_VSHRINK_MUST, tl,y,+1);
+  ADJUST_BOX(islandnamer,"o",5, IR_VSHRINK_MUST, br,y,-1);
+
+  debug_rect("islandnamer",0, islandnamer);
+  static int larger_islandnamebry= islandname.tl.y + 25;
+  if (islandnamer.br.y < larger_islandnamebry)
+    goto not_in_radar;
+  islandnamer.br.y = larger_islandnamebry;
+  debug_rect("islandnamer",1, islandnamer);
+
+  debug_ppmrect("islandnamer",2, islandnamer,ri);
+  
+ not_in_radar:
+  
+
+  
+  abort();
+
+#endif
+}
index e8ea9f9804a654f66e26e8c2aec3b97dc220b3c0..0ad92a618e62386844f2ac50ebf652ac981ce754 100644 (file)
@@ -77,4 +77,13 @@ CanonImage *alloc_canon_image(int w, int h);
   }while(0)
 
 
+#define CANONIMG_ALSO_STORERGB(ri)             \
+  do{                                          \
+    unsigned char *rip= RI_PIXEL((ri),x,y);    \
+    rip[0]= rgb >> 16;                         \
+    rip[1]= rgb >> 8;                          \
+    rip[2]= rgb;                               \
+  }while(0)
+
+
 #endif /*STRUCTURE_H*/
diff --git a/pctb/vessel.ppm b/pctb/vessel.ppm
new file mode 100644 (file)
index 0000000..9d26d65
--- /dev/null
@@ -0,0 +1,25909 @@
+P3
+# CREATOR: The GIMP's PNM Filter Version 1.0
+157 55
+255
+94
+129
+165
+130
+157
+185
+147
+171
+195
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+135
+161
+188
+89
+125
+162
+91
+126
+163
+76
+112
+151
+104
+136
+170
+143
+167
+192
+83
+120
+159
+94
+129
+165
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+102
+135
+170
+89
+125
+162
+87
+123
+161
+79
+117
+156
+106
+138
+172
+143
+167
+192
+78
+116
+156
+78
+116
+156
+78
+116
+156
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+155
+73
+109
+146
+73
+109
+146
+73
+109
+146
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+68
+101
+136
+73
+109
+146
+73
+109
+146
+73
+109
+146
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+156
+78
+116
+156
+106
+138
+172
+143
+167
+192
+78
+116
+156
+78
+116
+156
+78
+116
+156
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+155
+73
+109
+146
+68
+101
+136
+68
+101
+136
+68
+101
+136
+57
+84
+113
+57
+84
+113
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+48
+71
+95
+57
+84
+113
+57
+84
+113
+68
+101
+136
+68
+101
+136
+73
+109
+146
+73
+109
+146
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+156
+78
+116
+156
+106
+138
+172
+143
+167
+192
+78
+116
+156
+78
+116
+156
+78
+116
+156
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+155
+73
+109
+146
+73
+109
+146
+68
+101
+136
+57
+84
+113
+48
+71
+95
+33
+56
+84
+26
+38
+52
+19
+28
+38
+11
+17
+22
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+9
+13
+18
+19
+28
+38
+26
+38
+52
+33
+56
+84
+33
+56
+84
+48
+71
+95
+57
+84
+113
+57
+84
+113
+68
+101
+136
+73
+109
+146
+78
+116
+155
+78
+116
+155
+78
+116
+155
+78
+116
+156
+78
+116
+156
+106
+138
+172
+143
+167
+192
+78
+116
+156
+78
+116
+156
+78
+116
+156
+78
+116
+155
+78
+116
+155
+78
+116
+155
+73
+109
+146
+68
+101
+136
+57
+84
+113
+33
+56
+84
+11
+17
+22
+26
+22
+6
+59
+55
+21
+96
+93
+42
+146
+137
+56
+179
+166
+71
+238
+220
+94
+239
+220
+106
+234
+211
+91
+234
+211
+91
+234
+211
+91
+234
+211
+91
+234
+211
+91
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+234
+208
+79
+238
+220
+94
+242
+227
+125
+65
+61
+37
+132
+124
+24
+155
+138
+13
+174
+161
+59
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+177
+174
+98
+41
+37
+17
+131
+117
+9
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+174
+161
+59
+146
+137
+56
+113
+109
+47
+81
+77
+32
+49
+45
+20
+18
+14
+7
+9
+13
+18
+26
+38
+52
+33
+56
+84
+48
+71
+95
+57
+84
+113
+68
+101
+136
+73
+109
+146
+78
+116
+155
+78
+116
+156
+78
+116
+156
+106
+138
+172
+143
+167
+192
+78
+116
+156
+78
+116
+156
+78
+116
+156
+78
+116
+155
+78
+116
+155
+73
+109
+146
+57
+84
+113
+26
+38
+52
+34
+27
+3
+87
+82
+20
+191
+160
+42
+233
+204
+67
+231
+200
+54
+228
+192
+32
+231
+181
+16
+229
+176
+8
+229
+176
+8
+229
+176
+8
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+224
+162
+1
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+228
+192
+32
+239
+220
+106
+199
+184
+128
+29
+26
+16
+117
+105
+7
+148
+130
+9
+167
+151
+39
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+160
+132
+32
+169
+155
+53
+169
+155
+53
+105
+96
+24
+59
+49
+4
+150
+133
+10
+156
+129
+6
+158
+118
+4
+158
+118
+4
+158
+118
+4
+158
+118
+4
+160
+113
+2
+160
+113
+2
+160
+113
+2
+160
+113
+2
+160
+113
+2
+160
+113
+2
+160
+113
+2
+160
+113
+2
+160
+113
+2
+160
+113
+2
+160
+113
+2
+160
+113
+2
+160
+113
+2
+160
+113
+2
+160
+113
+2
+160
+113
+2
+160
+113
+2
+160
+113
+2
+160
+113
+2
+160
+113
+2
+161
+108
+0
+161
+108
+0
+161
+108
+0
+161
+108
+0
+161
+108
+0
+161
+108
+0
+161
+108
+0
+161
+108
+0
+161
+108
+0
+160
+113
+2
+165
+124
+10
+173
+131
+16
+163
+146
+29
+174
+161
+59
+146
+137
+56
+81
+77
+32
+29
+26
+16
+19
+28
+38
+33
+56
+84
+48
+71
+95
+57
+84
+113
+73
+109
+146
+77
+115
+154
+78
+116
+156
+106
+138
+172
+143
+167
+192
+78
+116
+156
+78
+116
+156
+79
+117
+156
+78
+116
+155
+73
+109
+146
+42
+64
+86
+34
+27
+3
+124
+113
+27
+213
+184
+31
+231
+181
+16
+225
+168
+2
+224
+162
+1
+224
+162
+1
+225
+168
+2
+222
+180
+5
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+222
+180
+5
+222
+180
+5
+222
+180
+5
+222
+180
+5
+222
+180
+5
+222
+180
+5
+222
+180
+5
+222
+180
+5
+222
+180
+5
+222
+180
+5
+222
+180
+5
+222
+180
+5
+222
+180
+5
+222
+180
+5
+222
+180
+5
+222
+180
+5
+222
+180
+5
+222
+180
+5
+222
+180
+5
+222
+180
+5
+222
+180
+5
+222
+180
+5
+226
+176
+3
+226
+176
+3
+226
+176
+3
+226
+176
+3
+225
+168
+2
+233
+204
+67
+243
+230
+138
+149
+145
+88
+70
+67
+25
+117
+105
+7
+130
+105
+5
+142
+112
+6
+148
+130
+9
+148
+130
+9
+148
+130
+9
+148
+130
+9
+148
+130
+9
+148
+130
+9
+148
+130
+9
+148
+130
+9
+148
+130
+9
+150
+133
+10
+148
+130
+9
+140
+124
+9
+138
+117
+8
+138
+117
+8
+138
+117
+8
+145
+123
+8
+150
+133
+10
+148
+130
+9
+140
+124
+9
+138
+117
+8
+138
+117
+8
+138
+117
+8
+145
+123
+8
+148
+130
+9
+148
+130
+9
+148
+130
+9
+148
+130
+9
+148
+130
+9
+148
+130
+9
+148
+130
+9
+148
+130
+9
+148
+130
+9
+148
+130
+9
+148
+130
+9
+148
+130
+9
+148
+130
+9
+148
+130
+9
+148
+130
+9
+148
+130
+9
+148
+130
+9
+148
+130
+9
+142
+112
+6
+149
+132
+24
+139
+129
+30
+14
+10
+2
+126
+112
+8
+155
+131
+8
+160
+113
+2
+157
+124
+5
+157
+124
+5
+157
+124
+5
+157
+124
+5
+156
+129
+6
+155
+131
+8
+155
+131
+8
+155
+131
+8
+155
+131
+8
+155
+131
+8
+155
+131
+8
+155
+131
+8
+155
+131
+8
+155
+131
+8
+155
+131
+8
+155
+131
+8
+155
+131
+8
+155
+131
+8
+155
+131
+8
+155
+131
+8
+155
+131
+8
+155
+131
+8
+155
+131
+8
+155
+131
+8
+155
+135
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+155
+131
+8
+157
+124
+5
+160
+113
+2
+160
+113
+2
+165
+124
+10
+170
+139
+22
+168
+160
+66
+104
+102
+60
+29
+26
+16
+26
+38
+52
+42
+64
+86
+57
+84
+113
+72
+107
+144
+77
+115
+155
+106
+138
+172
+143
+167
+192
+78
+116
+156
+79
+117
+156
+81
+118
+158
+73
+109
+146
+33
+56
+84
+77
+65
+5
+172
+147
+5
+225
+168
+2
+224
+162
+1
+225
+168
+2
+226
+176
+3
+222
+180
+5
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+185
+8
+225
+188
+6
+226
+176
+3
+229
+176
+8
+238
+220
+94
+243
+230
+138
+29
+26
+16
+96
+86
+8
+126
+112
+8
+131
+91
+4
+150
+133
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+158
+142
+22
+158
+142
+22
+135
+121
+9
+108
+98
+7
+108
+98
+7
+117
+105
+7
+140
+124
+9
+158
+142
+22
+158
+142
+22
+135
+121
+9
+108
+98
+7
+108
+98
+7
+117
+105
+7
+140
+124
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+148
+122
+5
+142
+112
+6
+151
+143
+32
+68
+56
+4
+77
+65
+5
+153
+136
+10
+160
+113
+2
+157
+124
+5
+155
+138
+13
+154
+137
+11
+148
+130
+9
+140
+124
+9
+140
+124
+9
+140
+124
+9
+140
+124
+9
+140
+124
+9
+148
+130
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+155
+135
+9
+157
+124
+5
+158
+118
+4
+160
+113
+2
+173
+131
+16
+146
+137
+56
+65
+61
+37
+19
+28
+38
+42
+64
+86
+61
+91
+122
+74
+110
+147
+105
+137
+171
+143
+167
+192
+79
+117
+156
+84
+120
+159
+89
+125
+161
+48
+71
+95
+88
+74
+4
+201
+166
+5
+225
+168
+2
+225
+168
+2
+223
+184
+6
+223
+184
+6
+213
+177
+5
+201
+166
+5
+201
+166
+5
+201
+166
+5
+213
+177
+5
+223
+184
+6
+223
+185
+8
+223
+184
+6
+213
+177
+5
+201
+166
+5
+201
+166
+5
+213
+177
+5
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+185
+8
+223
+185
+8
+213
+177
+5
+201
+166
+5
+204
+174
+5
+213
+177
+5
+225
+168
+2
+230
+195
+43
+242
+227
+125
+173
+163
+117
+49
+45
+20
+108
+98
+7
+130
+105
+5
+134
+112
+5
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+167
+151
+39
+179
+166
+71
+186
+180
+119
+186
+180
+119
+146
+137
+56
+105
+88
+5
+131
+117
+9
+158
+142
+22
+169
+155
+53
+185
+177
+109
+186
+180
+119
+150
+143
+72
+126
+112
+8
+140
+124
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+150
+133
+10
+142
+112
+6
+149
+132
+24
+124
+113
+27
+43
+35
+3
+150
+133
+10
+157
+124
+5
+160
+113
+2
+154
+137
+10
+158
+142
+22
+158
+142
+22
+135
+121
+9
+108
+98
+7
+108
+98
+7
+108
+98
+7
+108
+98
+7
+108
+98
+7
+135
+121
+9
+148
+130
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+155
+135
+9
+158
+118
+4
+165
+124
+10
+164
+154
+76
+84
+83
+49
+19
+28
+38
+48
+71
+95
+67
+100
+134
+102
+135
+169
+143
+167
+192
+81
+118
+158
+94
+129
+165
+87
+114
+142
+34
+27
+3
+162
+133
+4
+226
+176
+3
+225
+168
+2
+223
+184
+6
+224
+187
+16
+226
+189
+24
+201
+166
+5
+162
+133
+4
+148
+122
+5
+156
+129
+6
+201
+166
+5
+223
+184
+6
+224
+187
+16
+226
+189
+24
+201
+166
+5
+148
+122
+5
+156
+129
+6
+201
+166
+5
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+185
+8
+224
+187
+16
+223
+185
+8
+201
+166
+5
+162
+133
+4
+172
+147
+5
+201
+166
+5
+223
+184
+6
+229
+176
+8
+234
+208
+79
+243
+230
+138
+92
+93
+56
+87
+82
+20
+117
+105
+7
+131
+91
+4
+148
+130
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+167
+151
+39
+181
+171
+85
+185
+177
+109
+186
+180
+119
+175
+173
+100
+87
+82
+20
+117
+105
+7
+158
+139
+17
+179
+166
+71
+186
+180
+119
+175
+173
+100
+131
+117
+9
+135
+121
+9
+148
+130
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+142
+112
+6
+149
+132
+24
+151
+143
+32
+34
+27
+3
+105
+88
+5
+150
+133
+10
+160
+113
+2
+155
+131
+8
+154
+137
+10
+167
+151
+39
+174
+161
+59
+177
+174
+98
+171
+163
+85
+171
+163
+85
+171
+163
+85
+164
+154
+76
+115
+105
+29
+108
+98
+7
+131
+117
+9
+148
+130
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+136
+10
+160
+113
+2
+162
+130
+12
+146
+137
+56
+29
+26
+16
+33
+50
+67
+58
+86
+116
+95
+130
+166
+143
+167
+192
+87
+123
+161
+109
+140
+173
+60
+76
+91
+88
+74
+4
+201
+166
+5
+224
+162
+1
+222
+180
+5
+223
+184
+6
+228
+192
+32
+231
+200
+54
+33
+56
+84
+18
+48
+94
+33
+56
+84
+134
+112
+5
+194
+154
+4
+223
+185
+8
+226
+189
+24
+190
+172
+60
+18
+48
+94
+18
+48
+94
+115
+105
+29
+194
+154
+4
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+224
+187
+16
+228
+192
+32
+202
+170
+30
+72
+86
+78
+92
+93
+56
+162
+133
+4
+201
+166
+5
+225
+188
+6
+226
+176
+3
+232
+187
+12
+239
+220
+106
+220
+207
+130
+29
+26
+16
+108
+98
+7
+130
+105
+5
+130
+105
+5
+154
+136
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+163
+146
+29
+174
+161
+59
+186
+179
+94
+185
+177
+109
+186
+180
+119
+164
+154
+76
+117
+105
+7
+158
+142
+22
+185
+177
+109
+183
+177
+113
+132
+124
+24
+140
+124
+9
+150
+133
+10
+150
+133
+10
+143
+127
+9
+140
+124
+9
+140
+124
+9
+140
+124
+9
+148
+130
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+145
+123
+8
+142
+112
+6
+151
+143
+32
+87
+82
+20
+68
+56
+4
+150
+133
+10
+158
+118
+4
+158
+118
+4
+154
+137
+10
+154
+137
+10
+167
+151
+39
+181
+171
+85
+182
+174
+95
+186
+180
+119
+171
+163
+85
+181
+174
+105
+186
+180
+119
+186
+180
+119
+113
+109
+47
+108
+98
+7
+140
+124
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+11
+154
+137
+11
+153
+136
+10
+148
+130
+9
+150
+133
+10
+153
+136
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+155
+135
+9
+160
+113
+2
+163
+146
+29
+84
+83
+49
+20
+29
+39
+51
+76
+102
+87
+123
+161
+143
+167
+192
+95
+129
+165
+123
+151
+181
+21
+25
+30
+148
+122
+5
+209
+156
+2
+225
+168
+2
+223
+184
+6
+223
+184
+6
+228
+192
+32
+234
+208
+79
+149
+145
+88
+18
+48
+94
+55
+71
+75
+130
+105
+5
+183
+150
+5
+223
+184
+6
+228
+192
+32
+198
+179
+67
+18
+48
+94
+65
+79
+71
+162
+133
+4
+201
+166
+5
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+228
+192
+32
+231
+200
+54
+91
+102
+85
+18
+48
+94
+92
+93
+56
+162
+133
+4
+201
+166
+5
+225
+188
+6
+225
+188
+6
+226
+176
+3
+233
+204
+67
+243
+230
+138
+149
+145
+88
+70
+67
+25
+117
+105
+7
+130
+105
+5
+140
+119
+3
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+158
+139
+17
+167
+151
+39
+179
+166
+71
+193
+183
+105
+186
+180
+119
+186
+180
+119
+139
+129
+30
+181
+171
+85
+186
+180
+119
+131
+124
+45
+135
+121
+9
+150
+133
+10
+150
+133
+10
+148
+130
+9
+126
+112
+8
+108
+98
+7
+105
+88
+5
+108
+98
+7
+135
+121
+9
+148
+130
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+153
+136
+10
+142
+112
+6
+149
+132
+24
+132
+124
+24
+9
+5
+1
+131
+117
+9
+156
+129
+6
+160
+113
+2
+155
+135
+9
+154
+137
+10
+154
+137
+10
+167
+151
+39
+179
+166
+71
+182
+174
+95
+186
+180
+119
+151
+143
+32
+174
+161
+59
+181
+171
+85
+186
+180
+119
+150
+143
+72
+108
+98
+7
+135
+121
+9
+154
+137
+11
+155
+138
+13
+153
+136
+10
+143
+127
+9
+140
+124
+9
+148
+130
+9
+153
+136
+10
+154
+137
+10
+154
+137
+11
+155
+138
+13
+153
+136
+10
+143
+127
+9
+140
+124
+9
+148
+130
+9
+154
+137
+10
+155
+138
+13
+154
+137
+11
+148
+130
+9
+131
+117
+9
+131
+117
+9
+143
+127
+9
+148
+130
+9
+140
+124
+9
+140
+124
+9
+150
+133
+10
+153
+136
+10
+143
+127
+9
+140
+124
+9
+148
+130
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+157
+124
+5
+165
+124
+10
+150
+143
+72
+7
+10
+13
+46
+69
+92
+81
+118
+158
+143
+167
+192
+102
+135
+169
+153
+171
+189
+0
+0
+0
+171
+140
+4
+204
+138
+1
+222
+180
+5
+223
+184
+6
+223
+184
+6
+224
+187
+16
+231
+200
+54
+234
+211
+91
+33
+56
+84
+18
+48
+94
+105
+96
+24
+162
+133
+4
+223
+184
+6
+231
+200
+54
+91
+102
+85
+18
+48
+94
+124
+113
+27
+194
+154
+4
+213
+177
+5
+213
+177
+5
+201
+166
+5
+201
+166
+5
+213
+177
+5
+223
+184
+6
+223
+184
+6
+213
+177
+5
+201
+166
+5
+201
+166
+5
+201
+166
+5
+213
+177
+5
+223
+184
+6
+213
+177
+5
+201
+166
+5
+201
+166
+5
+201
+166
+5
+201
+166
+5
+213
+177
+5
+223
+185
+8
+223
+184
+6
+213
+177
+5
+201
+166
+5
+204
+174
+5
+226
+189
+24
+233
+204
+67
+182
+174
+95
+18
+48
+94
+92
+93
+56
+162
+133
+4
+201
+166
+5
+225
+188
+6
+227
+195
+6
+223
+184
+6
+231
+181
+16
+238
+220
+94
+243
+230
+138
+29
+26
+16
+96
+86
+8
+117
+105
+7
+131
+91
+4
+150
+133
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+153
+136
+10
+153
+136
+10
+158
+142
+22
+167
+151
+39
+179
+166
+71
+183
+179
+101
+186
+180
+119
+186
+180
+119
+186
+180
+119
+150
+143
+72
+126
+112
+8
+148
+130
+9
+158
+142
+22
+158
+142
+22
+169
+155
+53
+181
+174
+105
+183
+177
+113
+171
+163
+85
+105
+96
+24
+105
+88
+5
+135
+121
+9
+153
+136
+10
+153
+136
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+145
+116
+12
+145
+116
+12
+151
+143
+32
+59
+49
+4
+88
+74
+4
+150
+133
+10
+160
+113
+2
+156
+127
+7
+154
+137
+10
+154
+137
+10
+154
+137
+10
+167
+151
+39
+179
+166
+71
+182
+174
+95
+186
+180
+119
+131
+124
+45
+155
+138
+13
+171
+163
+85
+186
+180
+119
+146
+137
+56
+126
+112
+8
+143
+127
+9
+154
+137
+11
+150
+133
+10
+150
+133
+10
+126
+112
+8
+108
+98
+7
+131
+117
+9
+140
+124
+9
+150
+133
+10
+154
+137
+11
+150
+133
+10
+150
+133
+10
+126
+112
+8
+108
+98
+7
+131
+117
+9
+143
+127
+9
+154
+137
+11
+158
+139
+17
+167
+151
+39
+131
+124
+45
+105
+88
+5
+131
+117
+9
+140
+124
+9
+117
+105
+7
+117
+105
+7
+143
+127
+9
+153
+136
+10
+131
+117
+9
+117
+105
+7
+140
+124
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+155
+135
+9
+160
+113
+2
+179
+166
+71
+0
+0
+0
+45
+67
+90
+79
+117
+156
+143
+167
+192
+105
+137
+171
+158
+175
+193
+0
+0
+0
+171
+140
+4
+204
+138
+1
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+228
+192
+32
+234
+208
+79
+127
+126
+80
+18
+48
+94
+68
+78
+61
+148
+122
+5
+223
+184
+6
+215
+195
+75
+33
+56
+84
+47
+66
+78
+171
+140
+4
+204
+174
+5
+213
+177
+5
+194
+154
+4
+156
+129
+6
+162
+133
+4
+194
+154
+4
+213
+177
+5
+223
+184
+6
+201
+166
+5
+172
+147
+5
+156
+127
+7
+156
+129
+6
+201
+166
+5
+223
+184
+6
+204
+174
+5
+172
+147
+5
+162
+133
+4
+156
+129
+6
+172
+147
+5
+201
+166
+5
+222
+180
+5
+213
+177
+5
+194
+154
+4
+156
+129
+6
+162
+133
+4
+201
+166
+5
+228
+192
+32
+181
+171
+85
+18
+48
+94
+92
+93
+56
+162
+133
+4
+201
+166
+5
+225
+188
+6
+227
+195
+6
+227
+195
+6
+222
+180
+5
+230
+195
+43
+242
+227
+125
+199
+184
+128
+41
+37
+17
+108
+98
+7
+130
+105
+5
+134
+112
+5
+154
+137
+10
+154
+137
+10
+153
+136
+10
+153
+136
+10
+154
+137
+10
+154
+137
+10
+154
+136
+10
+158
+142
+22
+167
+151
+39
+181
+171
+85
+185
+177
+109
+186
+180
+119
+181
+174
+105
+105
+88
+5
+131
+117
+9
+158
+142
+22
+169
+155
+53
+179
+166
+71
+183
+177
+113
+167
+151
+39
+174
+161
+59
+186
+180
+119
+175
+173
+100
+108
+98
+7
+131
+117
+9
+154
+136
+10
+154
+137
+10
+153
+136
+10
+153
+136
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+148
+130
+9
+130
+105
+5
+151
+143
+32
+115
+105
+29
+53
+43
+3
+150
+133
+10
+157
+124
+5
+158
+118
+4
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+167
+151
+39
+179
+166
+71
+182
+174
+95
+186
+180
+119
+146
+137
+56
+185
+177
+109
+186
+180
+119
+164
+159
+94
+108
+98
+7
+126
+112
+8
+148
+130
+9
+155
+138
+13
+150
+133
+10
+146
+137
+56
+164
+159
+94
+131
+124
+45
+105
+88
+5
+108
+98
+7
+148
+130
+9
+158
+142
+22
+150
+133
+10
+146
+137
+56
+164
+159
+94
+131
+124
+45
+108
+98
+7
+117
+105
+7
+158
+142
+22
+181
+171
+85
+183
+177
+113
+164
+159
+94
+146
+137
+56
+149
+132
+24
+168
+160
+66
+146
+137
+56
+115
+105
+29
+153
+136
+10
+169
+155
+53
+150
+143
+72
+105
+96
+24
+131
+117
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+161
+108
+0
+174
+161
+59
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+171
+140
+4
+204
+138
+1
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+228
+192
+32
+233
+204
+67
+207
+189
+88
+18
+48
+94
+18
+48
+94
+134
+112
+5
+213
+177
+5
+127
+126
+80
+18
+48
+94
+115
+105
+29
+201
+166
+5
+201
+166
+5
+131
+124
+45
+65
+79
+71
+68
+78
+61
+96
+93
+42
+156
+127
+7
+204
+174
+5
+213
+184
+31
+104
+102
+60
+65
+79
+71
+55
+71
+75
+105
+96
+24
+194
+154
+4
+226
+189
+24
+127
+123
+64
+65
+79
+71
+65
+79
+71
+92
+93
+56
+156
+127
+7
+204
+174
+5
+213
+177
+5
+131
+124
+45
+65
+79
+71
+68
+78
+61
+96
+93
+42
+148
+122
+5
+213
+177
+5
+181
+171
+85
+18
+48
+94
+92
+93
+56
+162
+133
+4
+201
+166
+5
+227
+195
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+229
+176
+8
+237
+216
+71
+243
+230
+138
+104
+102
+60
+87
+82
+20
+117
+105
+7
+131
+91
+4
+145
+123
+8
+153
+136
+10
+154
+137
+10
+154
+136
+10
+154
+136
+9
+154
+136
+9
+154
+136
+9
+154
+137
+10
+163
+146
+29
+174
+161
+59
+183
+179
+101
+186
+180
+119
+164
+159
+94
+96
+86
+8
+138
+117
+8
+167
+151
+39
+181
+171
+85
+183
+177
+113
+171
+163
+85
+150
+143
+72
+183
+177
+113
+183
+177
+113
+164
+154
+76
+117
+105
+7
+135
+121
+9
+155
+135
+9
+155
+135
+9
+154
+136
+9
+154
+136
+10
+154
+136
+10
+154
+136
+10
+154
+136
+10
+142
+112
+6
+149
+132
+24
+151
+143
+32
+26
+22
+6
+108
+98
+7
+155
+135
+9
+160
+113
+2
+155
+135
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+167
+151
+39
+179
+166
+71
+182
+174
+95
+186
+180
+119
+169
+155
+53
+185
+177
+109
+186
+180
+119
+183
+177
+113
+131
+124
+45
+108
+98
+7
+153
+136
+10
+167
+151
+39
+186
+180
+119
+177
+174
+98
+185
+177
+109
+186
+180
+119
+183
+177
+113
+96
+86
+8
+143
+127
+9
+169
+155
+53
+183
+177
+113
+181
+174
+105
+185
+177
+109
+186
+180
+119
+183
+177
+113
+115
+105
+29
+153
+136
+10
+182
+174
+95
+186
+180
+119
+171
+163
+85
+150
+143
+72
+167
+151
+39
+186
+180
+119
+186
+180
+119
+108
+98
+7
+158
+142
+22
+181
+171
+85
+183
+177
+113
+108
+98
+7
+131
+117
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+161
+108
+0
+174
+161
+59
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+171
+140
+4
+204
+138
+1
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+224
+187
+16
+230
+195
+43
+234
+208
+79
+91
+102
+85
+18
+48
+94
+84
+83
+49
+213
+177
+5
+42
+64
+86
+33
+56
+84
+171
+140
+4
+228
+192
+32
+55
+71
+75
+42
+64
+86
+127
+123
+64
+72
+86
+78
+18
+48
+94
+96
+93
+42
+204
+174
+5
+127
+126
+80
+18
+48
+94
+139
+129
+30
+92
+93
+56
+104
+102
+60
+213
+177
+5
+164
+154
+76
+18
+48
+94
+113
+109
+47
+131
+124
+45
+65
+79
+71
+194
+154
+4
+230
+195
+43
+72
+86
+78
+42
+64
+86
+127
+123
+64
+92
+93
+56
+18
+48
+94
+84
+83
+49
+194
+154
+4
+179
+166
+71
+18
+48
+94
+92
+93
+56
+157
+135
+6
+201
+166
+5
+227
+195
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+231
+188
+2
+234
+196
+15
+239
+220
+106
+220
+207
+130
+29
+26
+16
+108
+98
+7
+117
+105
+7
+130
+105
+5
+155
+137
+10
+156
+138
+9
+156
+138
+9
+155
+139
+10
+156
+138
+9
+156
+138
+9
+155
+139
+10
+163
+144
+17
+167
+151
+39
+186
+179
+94
+186
+180
+119
+164
+159
+94
+88
+74
+4
+131
+117
+9
+167
+151
+39
+186
+179
+94
+186
+180
+119
+186
+180
+119
+171
+163
+85
+169
+155
+53
+167
+151
+39
+143
+127
+9
+105
+88
+5
+135
+121
+9
+156
+138
+9
+156
+138
+9
+156
+138
+9
+156
+138
+9
+156
+138
+9
+154
+138
+10
+145
+123
+8
+142
+112
+6
+151
+143
+32
+87
+82
+20
+68
+56
+4
+155
+139
+10
+158
+118
+4
+157
+124
+5
+155
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+167
+151
+39
+179
+166
+71
+182
+174
+95
+186
+180
+119
+139
+129
+30
+174
+161
+59
+182
+174
+95
+186
+180
+119
+186
+180
+119
+108
+98
+7
+158
+142
+22
+182
+174
+95
+181
+174
+105
+135
+121
+9
+174
+161
+59
+183
+179
+101
+186
+180
+119
+131
+124
+45
+131
+117
+9
+181
+171
+85
+183
+177
+113
+140
+124
+9
+169
+155
+53
+182
+174
+95
+186
+180
+119
+150
+143
+72
+126
+112
+8
+179
+166
+71
+186
+180
+119
+150
+143
+72
+126
+112
+8
+169
+155
+53
+185
+177
+109
+186
+180
+119
+146
+137
+56
+158
+139
+17
+183
+177
+113
+150
+143
+72
+117
+105
+7
+135
+121
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+161
+108
+0
+174
+161
+59
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+171
+140
+4
+204
+138
+1
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+228
+192
+32
+233
+204
+67
+186
+179
+94
+18
+48
+94
+33
+56
+84
+149
+132
+24
+18
+48
+94
+92
+93
+56
+204
+174
+5
+190
+175
+80
+18
+48
+94
+113
+109
+47
+104
+102
+60
+42
+64
+86
+33
+56
+84
+92
+93
+56
+226
+189
+24
+127
+126
+80
+18
+48
+94
+55
+71
+75
+158
+139
+17
+172
+147
+5
+223
+184
+6
+149
+145
+88
+18
+48
+94
+33
+56
+84
+149
+132
+24
+194
+154
+4
+204
+174
+5
+198
+179
+67
+18
+48
+94
+113
+109
+47
+113
+109
+47
+42
+64
+86
+33
+56
+84
+92
+93
+56
+213
+177
+5
+181
+171
+85
+18
+48
+94
+92
+93
+56
+157
+135
+6
+201
+166
+5
+227
+195
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+231
+188
+2
+233
+215
+55
+243
+230
+138
+164
+159
+94
+70
+67
+25
+117
+105
+7
+130
+105
+5
+140
+119
+3
+156
+138
+9
+156
+138
+9
+155
+139
+10
+156
+138
+9
+156
+138
+9
+157
+137
+8
+163
+144
+17
+167
+151
+39
+181
+171
+85
+186
+180
+119
+164
+159
+94
+88
+74
+4
+131
+117
+9
+167
+151
+39
+190
+175
+80
+185
+177
+109
+186
+180
+119
+139
+129
+30
+126
+112
+8
+151
+143
+32
+183
+177
+113
+124
+113
+27
+140
+124
+9
+157
+137
+8
+157
+137
+8
+157
+137
+8
+156
+138
+9
+156
+138
+9
+155
+131
+8
+142
+112
+6
+158
+142
+22
+132
+124
+24
+9
+5
+1
+143
+127
+9
+155
+131
+8
+160
+113
+2
+154
+138
+10
+155
+139
+10
+155
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+167
+151
+39
+179
+166
+71
+182
+174
+95
+186
+180
+119
+124
+113
+27
+154
+137
+10
+179
+166
+71
+181
+174
+105
+186
+180
+119
+131
+124
+45
+174
+161
+59
+183
+177
+113
+181
+174
+105
+105
+88
+5
+155
+138
+13
+181
+171
+85
+183
+177
+113
+164
+159
+94
+150
+133
+10
+185
+177
+109
+186
+180
+119
+115
+105
+29
+148
+130
+9
+181
+171
+85
+183
+177
+113
+183
+177
+113
+117
+105
+7
+179
+166
+71
+186
+180
+119
+146
+137
+56
+126
+112
+8
+158
+142
+22
+181
+171
+85
+183
+177
+113
+181
+174
+105
+168
+160
+66
+183
+177
+113
+126
+112
+8
+131
+117
+9
+148
+130
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+161
+108
+0
+174
+161
+59
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+171
+140
+4
+204
+138
+1
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+224
+187
+16
+230
+195
+43
+234
+211
+91
+72
+86
+78
+18
+48
+94
+33
+56
+84
+18
+48
+94
+145
+123
+8
+224
+187
+16
+149
+145
+88
+18
+48
+94
+18
+48
+94
+65
+79
+71
+146
+137
+56
+213
+184
+31
+201
+166
+5
+213
+177
+5
+210
+190
+66
+91
+102
+85
+18
+48
+94
+33
+56
+84
+96
+93
+42
+194
+154
+4
+233
+204
+67
+114
+113
+72
+18
+48
+94
+18
+48
+94
+96
+93
+42
+194
+154
+4
+150
+143
+72
+18
+48
+94
+18
+48
+94
+65
+79
+71
+146
+137
+56
+213
+184
+31
+213
+177
+5
+201
+166
+5
+179
+166
+71
+18
+48
+94
+92
+93
+56
+157
+135
+6
+201
+166
+5
+227
+195
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+229
+202
+5
+227
+195
+6
+231
+188
+2
+238
+220
+94
+243
+230
+138
+29
+26
+16
+96
+86
+8
+126
+112
+8
+130
+105
+5
+155
+135
+9
+158
+141
+9
+158
+141
+9
+156
+138
+9
+158
+141
+9
+158
+141
+9
+167
+151
+39
+174
+161
+59
+182
+174
+95
+186
+180
+119
+181
+174
+105
+124
+113
+27
+140
+124
+9
+167
+151
+39
+179
+166
+71
+186
+179
+94
+185
+177
+109
+186
+180
+119
+186
+180
+119
+186
+180
+119
+167
+151
+39
+131
+117
+9
+149
+131
+6
+158
+141
+9
+158
+141
+9
+158
+141
+9
+158
+141
+9
+158
+141
+9
+142
+112
+6
+155
+131
+8
+151
+143
+32
+53
+43
+3
+88
+74
+4
+155
+135
+9
+160
+113
+2
+157
+135
+6
+155
+139
+10
+155
+139
+10
+155
+139
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+167
+151
+39
+179
+166
+71
+182
+174
+95
+186
+180
+119
+115
+105
+29
+117
+105
+7
+167
+151
+39
+183
+177
+113
+186
+180
+119
+117
+105
+7
+174
+161
+59
+185
+177
+109
+186
+180
+119
+146
+137
+56
+117
+105
+7
+158
+142
+22
+183
+177
+113
+146
+137
+56
+167
+151
+39
+183
+179
+101
+186
+180
+119
+150
+143
+72
+117
+105
+7
+158
+142
+22
+181
+174
+105
+164
+154
+76
+135
+121
+9
+179
+166
+71
+186
+180
+119
+146
+137
+56
+105
+88
+5
+126
+112
+8
+174
+161
+59
+193
+183
+105
+186
+180
+119
+186
+180
+119
+150
+143
+72
+126
+112
+8
+140
+124
+9
+153
+136
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+161
+108
+0
+174
+161
+59
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+171
+140
+4
+204
+138
+1
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+228
+192
+32
+234
+208
+79
+149
+145
+88
+18
+48
+94
+18
+48
+94
+68
+78
+61
+183
+150
+5
+228
+192
+32
+207
+189
+88
+18
+48
+94
+65
+79
+71
+172
+147
+5
+183
+150
+5
+132
+124
+24
+84
+83
+49
+213
+177
+5
+146
+137
+56
+213
+184
+31
+146
+137
+56
+18
+48
+94
+33
+56
+84
+172
+147
+5
+178
+152
+46
+191
+160
+42
+191
+160
+42
+33
+56
+84
+18
+48
+94
+172
+147
+5
+215
+195
+75
+18
+48
+94
+65
+79
+71
+172
+147
+5
+183
+150
+5
+158
+142
+22
+84
+83
+49
+213
+177
+5
+179
+166
+71
+18
+48
+94
+92
+93
+56
+148
+122
+5
+201
+166
+5
+227
+195
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+229
+202
+5
+229
+202
+5
+231
+188
+2
+235
+208
+26
+242
+227
+125
+199
+184
+128
+41
+37
+17
+108
+98
+7
+130
+105
+5
+142
+112
+6
+158
+141
+9
+161
+141
+8
+161
+141
+8
+161
+141
+8
+161
+141
+8
+167
+151
+39
+174
+161
+59
+181
+171
+85
+179
+166
+71
+167
+151
+39
+148
+130
+9
+155
+131
+8
+163
+144
+17
+167
+151
+39
+179
+166
+71
+179
+166
+71
+179
+166
+71
+179
+166
+71
+163
+146
+29
+155
+135
+9
+155
+131
+8
+157
+137
+8
+161
+141
+8
+161
+141
+8
+161
+141
+8
+161
+141
+8
+156
+129
+6
+142
+112
+6
+158
+142
+22
+115
+105
+29
+59
+49
+4
+156
+138
+9
+162
+123
+4
+162
+123
+4
+158
+141
+9
+158
+141
+9
+155
+139
+10
+155
+139
+10
+155
+137
+10
+154
+137
+10
+154
+137
+10
+167
+151
+39
+179
+166
+71
+182
+174
+95
+186
+180
+119
+175
+173
+100
+181
+174
+105
+186
+180
+119
+186
+180
+119
+164
+154
+76
+131
+117
+9
+167
+151
+39
+186
+179
+94
+186
+180
+119
+186
+180
+119
+181
+174
+105
+181
+174
+105
+183
+177
+113
+131
+117
+9
+158
+142
+22
+186
+179
+94
+186
+180
+119
+186
+180
+119
+183
+177
+113
+177
+174
+98
+183
+177
+113
+132
+124
+24
+155
+138
+13
+181
+171
+85
+186
+180
+119
+181
+174
+105
+164
+154
+76
+126
+112
+8
+163
+146
+29
+181
+171
+85
+183
+177
+113
+181
+174
+105
+131
+117
+9
+135
+121
+9
+148
+130
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+161
+108
+0
+174
+161
+59
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+171
+140
+4
+204
+138
+1
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+224
+187
+16
+231
+200
+54
+234
+211
+91
+48
+71
+95
+18
+48
+94
+132
+124
+24
+201
+166
+5
+226
+189
+24
+234
+208
+79
+114
+113
+72
+18
+48
+94
+33
+56
+84
+55
+71
+75
+33
+56
+84
+176
+151
+24
+228
+192
+32
+114
+113
+72
+42
+64
+86
+127
+123
+64
+33
+56
+84
+92
+93
+56
+204
+174
+5
+127
+123
+64
+33
+56
+84
+114
+113
+72
+42
+64
+86
+65
+79
+71
+194
+154
+4
+233
+204
+67
+114
+113
+72
+18
+48
+94
+33
+56
+84
+55
+71
+75
+33
+56
+84
+176
+151
+24
+227
+193
+15
+149
+145
+88
+18
+48
+94
+65
+79
+71
+149
+131
+6
+201
+166
+5
+227
+195
+6
+227
+195
+6
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+231
+188
+2
+237
+216
+71
+243
+230
+138
+114
+113
+72
+87
+82
+20
+126
+112
+8
+131
+91
+4
+156
+129
+6
+161
+141
+8
+161
+141
+8
+161
+141
+8
+161
+141
+8
+163
+144
+17
+176
+151
+24
+176
+151
+24
+176
+151
+24
+163
+144
+17
+164
+140
+6
+161
+141
+8
+164
+140
+6
+163
+144
+17
+176
+151
+24
+176
+151
+24
+176
+151
+24
+176
+151
+24
+163
+144
+17
+161
+141
+8
+161
+141
+8
+161
+141
+8
+161
+141
+8
+161
+141
+8
+161
+141
+8
+161
+141
+8
+142
+112
+6
+158
+142
+22
+151
+143
+32
+20
+15
+1
+117
+105
+7
+157
+137
+8
+167
+118
+3
+157
+137
+8
+155
+139
+10
+158
+141
+9
+156
+138
+9
+155
+139
+10
+155
+139
+10
+155
+137
+10
+154
+137
+10
+167
+151
+39
+181
+171
+85
+182
+174
+95
+181
+171
+85
+181
+171
+85
+181
+171
+85
+179
+166
+71
+169
+155
+53
+150
+133
+10
+150
+133
+10
+158
+142
+22
+179
+166
+71
+181
+171
+85
+182
+174
+95
+182
+174
+95
+169
+155
+53
+150
+133
+10
+143
+127
+9
+158
+142
+22
+179
+166
+71
+181
+171
+85
+181
+171
+85
+182
+174
+95
+169
+155
+53
+155
+138
+13
+143
+127
+9
+158
+142
+22
+181
+171
+85
+183
+179
+101
+182
+174
+95
+151
+143
+32
+140
+124
+9
+163
+146
+29
+181
+171
+85
+186
+180
+119
+131
+124
+45
+131
+117
+9
+150
+133
+10
+153
+136
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+161
+108
+0
+174
+161
+59
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+171
+140
+4
+204
+138
+1
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+228
+192
+32
+233
+204
+67
+181
+171
+85
+131
+124
+45
+194
+154
+4
+204
+174
+5
+226
+189
+24
+231
+200
+54
+233
+204
+67
+198
+179
+67
+127
+126
+80
+131
+124
+45
+184
+161
+25
+222
+180
+5
+231
+200
+54
+190
+175
+80
+127
+123
+64
+127
+123
+64
+167
+151
+39
+208
+174
+13
+228
+192
+32
+215
+195
+75
+127
+126
+80
+127
+123
+64
+146
+137
+56
+184
+161
+25
+223
+184
+6
+231
+200
+54
+233
+204
+67
+210
+190
+66
+127
+126
+80
+131
+124
+45
+176
+151
+24
+212
+186
+4
+231
+200
+54
+149
+145
+88
+127
+126
+80
+113
+109
+47
+173
+151
+6
+204
+174
+5
+227
+195
+6
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+233
+197
+2
+234
+196
+15
+239
+220
+106
+243
+230
+138
+29
+26
+16
+108
+98
+7
+126
+112
+8
+147
+102
+2
+164
+140
+6
+161
+141
+8
+164
+140
+6
+164
+140
+6
+164
+140
+6
+163
+144
+8
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+163
+144
+8
+163
+144
+8
+164
+140
+6
+163
+144
+8
+163
+144
+8
+163
+144
+8
+163
+144
+8
+163
+144
+8
+163
+144
+8
+148
+122
+5
+156
+127
+7
+167
+151
+39
+77
+65
+5
+77
+65
+5
+158
+141
+9
+167
+118
+3
+162
+133
+4
+158
+141
+9
+158
+141
+9
+158
+141
+9
+158
+141
+9
+155
+139
+10
+155
+139
+10
+155
+139
+10
+154
+137
+10
+167
+151
+39
+174
+161
+59
+169
+155
+53
+167
+151
+39
+167
+151
+39
+167
+151
+39
+163
+146
+29
+154
+137
+11
+155
+138
+13
+153
+136
+10
+158
+139
+17
+163
+146
+29
+169
+155
+53
+174
+161
+59
+167
+151
+39
+154
+137
+11
+154
+137
+11
+153
+136
+10
+158
+139
+17
+163
+146
+29
+167
+151
+39
+179
+166
+71
+167
+151
+39
+153
+136
+10
+154
+137
+11
+153
+136
+10
+158
+139
+17
+167
+151
+39
+179
+166
+71
+167
+151
+39
+155
+138
+13
+163
+146
+29
+167
+151
+39
+183
+177
+113
+171
+163
+85
+117
+105
+7
+140
+124
+9
+153
+136
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+161
+108
+0
+174
+161
+59
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+171
+140
+4
+204
+138
+1
+222
+180
+5
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+224
+187
+16
+228
+192
+32
+230
+195
+43
+226
+189
+24
+213
+177
+5
+213
+177
+5
+224
+187
+16
+226
+189
+24
+228
+192
+32
+231
+200
+54
+230
+195
+43
+224
+187
+16
+223
+184
+6
+223
+185
+8
+228
+192
+32
+231
+200
+54
+231
+200
+54
+226
+189
+24
+223
+184
+6
+223
+185
+8
+226
+189
+24
+231
+200
+54
+231
+200
+54
+226
+189
+24
+223
+185
+8
+223
+185
+8
+224
+187
+16
+226
+189
+24
+228
+192
+32
+231
+200
+54
+230
+195
+43
+227
+193
+15
+225
+188
+6
+227
+193
+15
+230
+195
+43
+231
+200
+54
+231
+200
+54
+228
+197
+24
+212
+186
+4
+212
+186
+4
+227
+195
+6
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+235
+205
+2
+233
+197
+2
+239
+217
+40
+243
+230
+138
+173
+163
+117
+59
+55
+21
+117
+105
+7
+130
+105
+5
+148
+122
+5
+163
+144
+8
+163
+144
+8
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+162
+133
+4
+148
+113
+4
+163
+146
+29
+132
+124
+24
+34
+27
+3
+156
+138
+9
+162
+133
+4
+167
+118
+3
+161
+141
+8
+158
+141
+9
+158
+141
+9
+158
+141
+9
+158
+141
+9
+156
+138
+9
+155
+139
+10
+155
+139
+10
+155
+137
+10
+158
+142
+22
+163
+146
+29
+163
+146
+29
+163
+146
+29
+163
+146
+29
+163
+146
+29
+158
+142
+22
+153
+136
+10
+153
+136
+10
+154
+137
+10
+154
+137
+10
+154
+137
+11
+158
+142
+22
+163
+146
+29
+158
+142
+22
+154
+137
+10
+153
+136
+10
+153
+136
+10
+154
+137
+10
+154
+137
+10
+158
+142
+22
+163
+146
+29
+158
+142
+22
+154
+137
+10
+153
+136
+10
+153
+136
+10
+154
+137
+10
+158
+142
+22
+163
+146
+29
+158
+142
+22
+163
+146
+29
+179
+166
+71
+186
+180
+119
+185
+177
+109
+135
+121
+9
+131
+117
+9
+148
+130
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+155
+135
+9
+161
+108
+0
+174
+161
+59
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+179
+135
+3
+204
+138
+1
+209
+156
+2
+224
+162
+1
+225
+168
+2
+225
+168
+2
+225
+168
+2
+226
+176
+3
+223
+184
+6
+223
+184
+6
+224
+187
+16
+226
+189
+24
+224
+187
+16
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+224
+187
+16
+226
+189
+24
+226
+189
+24
+224
+187
+16
+223
+184
+6
+223
+184
+6
+224
+187
+16
+226
+189
+24
+226
+189
+24
+224
+187
+16
+223
+184
+6
+222
+180
+5
+224
+187
+16
+226
+189
+24
+226
+189
+24
+224
+187
+16
+223
+185
+8
+223
+185
+8
+223
+185
+8
+225
+188
+6
+227
+193
+15
+228
+197
+24
+226
+189
+24
+227
+193
+15
+225
+188
+6
+225
+188
+6
+227
+193
+15
+228
+197
+24
+228
+197
+24
+229
+201
+13
+227
+195
+6
+227
+195
+6
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+234
+210
+4
+235
+205
+2
+233
+197
+2
+243
+230
+87
+243
+230
+138
+68
+78
+61
+96
+86
+8
+126
+112
+8
+130
+105
+5
+164
+140
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+164
+140
+6
+162
+133
+4
+162
+133
+4
+164
+140
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+167
+144
+6
+148
+113
+4
+170
+139
+22
+151
+143
+32
+43
+35
+3
+105
+88
+5
+164
+140
+6
+167
+118
+3
+164
+140
+6
+163
+144
+8
+161
+141
+8
+158
+141
+9
+158
+141
+9
+158
+141
+9
+158
+141
+9
+156
+138
+9
+155
+139
+10
+155
+139
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+167
+151
+39
+179
+166
+71
+179
+166
+71
+158
+142
+22
+148
+130
+9
+150
+133
+10
+153
+136
+10
+154
+136
+10
+155
+131
+8
+157
+124
+5
+158
+118
+4
+160
+113
+2
+161
+108
+0
+160
+113
+2
+157
+124
+5
+167
+151
+39
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+34
+27
+3
+105
+88
+5
+153
+111
+3
+187
+143
+14
+201
+166
+5
+201
+166
+5
+209
+156
+2
+209
+156
+2
+224
+162
+1
+224
+162
+1
+224
+162
+1
+224
+162
+1
+225
+168
+2
+226
+176
+3
+226
+176
+3
+222
+180
+5
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+185
+8
+223
+185
+8
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+235
+205
+2
+234
+210
+4
+234
+210
+4
+234
+210
+4
+235
+205
+2
+234
+206
+16
+242
+227
+125
+220
+207
+130
+41
+37
+17
+117
+105
+7
+134
+112
+5
+148
+113
+4
+167
+144
+6
+164
+140
+6
+162
+133
+4
+162
+133
+4
+157
+124
+5
+158
+118
+4
+153
+111
+3
+153
+111
+3
+158
+118
+4
+158
+118
+4
+158
+118
+4
+158
+118
+4
+153
+111
+3
+160
+113
+2
+157
+124
+5
+156
+129
+6
+162
+133
+4
+171
+140
+4
+172
+147
+5
+172
+147
+5
+156
+129
+6
+157
+124
+5
+167
+151
+39
+105
+96
+24
+68
+56
+4
+163
+144
+8
+169
+130
+4
+169
+130
+4
+163
+144
+8
+163
+144
+8
+163
+144
+8
+158
+141
+9
+158
+141
+9
+158
+141
+9
+158
+141
+9
+158
+141
+9
+155
+139
+10
+155
+139
+10
+155
+139
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+158
+142
+22
+163
+146
+29
+163
+146
+29
+158
+139
+17
+157
+124
+5
+158
+118
+4
+160
+113
+2
+161
+108
+0
+160
+113
+2
+158
+118
+4
+157
+124
+5
+156
+127
+7
+148
+130
+9
+148
+130
+9
+131
+117
+9
+77
+65
+5
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+124
+113
+27
+81
+77
+32
+49
+45
+20
+9
+5
+1
+34
+27
+3
+59
+49
+4
+88
+74
+4
+147
+102
+2
+179
+135
+3
+194
+154
+4
+201
+166
+5
+201
+166
+5
+209
+156
+2
+209
+156
+2
+224
+162
+1
+224
+162
+1
+224
+162
+1
+225
+168
+2
+225
+168
+2
+226
+176
+3
+222
+180
+5
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+184
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+235
+205
+2
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+235
+205
+2
+240
+220
+56
+243
+230
+138
+127
+126
+80
+87
+82
+20
+126
+112
+8
+147
+102
+2
+153
+111
+3
+160
+113
+2
+158
+118
+4
+162
+123
+4
+156
+127
+7
+156
+129
+6
+162
+133
+4
+162
+133
+4
+162
+133
+4
+157
+135
+6
+162
+133
+4
+162
+133
+4
+162
+133
+4
+156
+129
+6
+157
+124
+5
+158
+118
+4
+153
+111
+3
+153
+111
+3
+153
+111
+3
+158
+118
+4
+160
+113
+2
+176
+151
+24
+151
+143
+32
+14
+10
+2
+131
+117
+9
+171
+140
+4
+171
+124
+2
+167
+144
+6
+163
+144
+8
+163
+144
+8
+163
+144
+8
+161
+141
+8
+158
+141
+9
+158
+141
+9
+158
+141
+9
+158
+141
+9
+156
+138
+9
+155
+139
+10
+155
+139
+10
+155
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+155
+131
+8
+156
+127
+7
+158
+118
+4
+158
+118
+4
+160
+113
+2
+160
+113
+2
+158
+118
+4
+157
+124
+5
+156
+127
+7
+148
+130
+9
+148
+130
+9
+143
+127
+9
+143
+127
+9
+131
+117
+9
+105
+88
+5
+77
+65
+5
+53
+43
+3
+20
+15
+1
+96
+93
+42
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+120
+3
+169
+155
+53
+183
+179
+101
+183
+179
+101
+149
+145
+88
+127
+123
+64
+96
+93
+42
+59
+55
+21
+20
+15
+1
+20
+15
+1
+53
+43
+3
+88
+74
+4
+131
+91
+4
+171
+124
+2
+194
+154
+4
+201
+166
+5
+201
+166
+5
+209
+156
+2
+209
+156
+2
+224
+162
+1
+224
+162
+1
+224
+162
+1
+225
+168
+2
+225
+168
+2
+226
+176
+3
+222
+180
+5
+223
+184
+6
+223
+184
+6
+223
+184
+6
+223
+185
+8
+223
+185
+8
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+235
+205
+2
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+243
+230
+87
+243
+230
+138
+26
+22
+6
+108
+98
+7
+140
+119
+3
+164
+140
+6
+172
+147
+5
+167
+144
+6
+156
+127
+7
+153
+111
+3
+148
+94
+1
+156
+86
+11
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+156
+86
+11
+148
+94
+1
+147
+102
+2
+148
+122
+5
+157
+135
+6
+164
+140
+6
+162
+133
+4
+171
+139
+13
+167
+151
+39
+77
+65
+5
+88
+74
+4
+167
+144
+6
+171
+124
+2
+171
+140
+4
+167
+144
+6
+167
+144
+6
+163
+144
+8
+163
+144
+8
+163
+144
+8
+161
+141
+8
+158
+141
+9
+158
+141
+9
+158
+141
+9
+158
+141
+9
+154
+138
+10
+155
+139
+10
+155
+139
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+155
+135
+9
+156
+129
+6
+157
+124
+5
+158
+118
+4
+160
+113
+2
+161
+108
+0
+160
+113
+2
+158
+118
+4
+157
+124
+5
+156
+129
+6
+148
+130
+9
+148
+130
+9
+143
+127
+9
+143
+127
+9
+126
+112
+8
+96
+86
+8
+68
+56
+4
+43
+35
+3
+20
+15
+1
+18
+14
+7
+49
+45
+20
+81
+77
+32
+113
+109
+47
+146
+137
+56
+181
+171
+85
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+150
+133
+10
+176
+139
+27
+178
+152
+46
+182
+155
+55
+181
+171
+85
+182
+174
+95
+183
+179
+101
+183
+179
+101
+164
+159
+94
+127
+126
+80
+104
+102
+60
+70
+67
+25
+34
+27
+3
+14
+10
+2
+43
+35
+3
+68
+56
+4
+105
+88
+5
+153
+111
+3
+194
+154
+4
+201
+166
+5
+201
+166
+5
+209
+156
+2
+209
+156
+2
+224
+162
+1
+224
+162
+1
+224
+162
+1
+224
+162
+1
+225
+168
+2
+226
+176
+3
+222
+180
+5
+223
+184
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+225
+188
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+235
+205
+2
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+235
+205
+2
+239
+217
+40
+243
+230
+138
+183
+177
+113
+59
+55
+21
+126
+120
+3
+148
+122
+5
+153
+111
+3
+156
+86
+11
+160
+94
+16
+179
+128
+28
+191
+160
+42
+204
+177
+50
+218
+198
+56
+240
+220
+56
+239
+234
+68
+239
+234
+68
+240
+220
+56
+218
+198
+56
+204
+177
+50
+191
+160
+42
+179
+128
+28
+160
+94
+16
+156
+86
+11
+147
+102
+2
+148
+122
+5
+158
+141
+9
+132
+124
+24
+43
+35
+3
+167
+144
+6
+179
+135
+3
+178
+128
+2
+167
+148
+8
+167
+148
+8
+167
+144
+6
+163
+144
+8
+163
+144
+8
+163
+144
+8
+163
+144
+8
+158
+141
+9
+158
+141
+9
+158
+141
+9
+158
+141
+9
+158
+141
+9
+155
+139
+10
+155
+139
+10
+155
+139
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+155
+135
+9
+156
+127
+7
+157
+124
+5
+158
+118
+4
+160
+113
+2
+161
+108
+0
+160
+113
+2
+158
+118
+4
+156
+127
+7
+156
+129
+6
+150
+133
+10
+143
+127
+9
+143
+127
+9
+143
+127
+9
+117
+105
+7
+88
+74
+4
+59
+49
+4
+34
+27
+3
+9
+5
+1
+26
+22
+6
+59
+55
+21
+96
+93
+42
+113
+109
+47
+146
+137
+56
+168
+160
+66
+168
+160
+66
+168
+160
+66
+169
+155
+53
+179
+166
+71
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+140
+119
+3
+160
+113
+2
+162
+130
+12
+162
+130
+12
+171
+124
+10
+170
+139
+22
+181
+142
+38
+182
+155
+55
+179
+166
+71
+181
+171
+85
+182
+174
+95
+186
+179
+94
+183
+179
+101
+175
+173
+100
+149
+145
+88
+113
+109
+47
+81
+77
+32
+49
+45
+20
+0
+0
+0
+34
+27
+3
+68
+56
+4
+88
+74
+4
+147
+102
+2
+179
+135
+3
+194
+154
+4
+201
+166
+5
+201
+166
+5
+212
+168
+4
+212
+168
+4
+225
+168
+2
+225
+168
+2
+225
+168
+2
+225
+168
+2
+226
+176
+3
+222
+180
+5
+225
+188
+6
+225
+188
+6
+225
+188
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+227
+195
+6
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+235
+205
+2
+234
+210
+4
+243
+230
+87
+243
+230
+138
+114
+113
+72
+149
+110
+23
+156
+86
+11
+176
+139
+27
+204
+177
+50
+227
+222
+74
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+227
+222
+74
+204
+177
+50
+176
+139
+27
+156
+86
+11
+162
+123
+4
+53
+43
+3
+105
+88
+5
+167
+144
+6
+179
+135
+3
+178
+128
+2
+172
+147
+5
+167
+148
+8
+167
+148
+8
+167
+144
+6
+163
+144
+8
+163
+144
+8
+163
+144
+8
+161
+141
+8
+158
+141
+9
+158
+141
+9
+158
+141
+9
+158
+141
+9
+156
+138
+9
+155
+139
+10
+155
+139
+10
+155
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+136
+10
+155
+131
+8
+157
+124
+5
+158
+118
+4
+160
+113
+2
+161
+108
+0
+160
+113
+2
+158
+118
+4
+157
+124
+5
+156
+127
+7
+148
+130
+9
+148
+130
+9
+143
+127
+9
+143
+127
+9
+135
+121
+9
+108
+98
+7
+77
+65
+5
+53
+43
+3
+26
+22
+6
+0
+0
+0
+41
+37
+17
+70
+67
+25
+96
+93
+42
+131
+124
+45
+150
+143
+72
+168
+160
+66
+168
+160
+66
+174
+161
+59
+169
+155
+53
+167
+151
+39
+176
+139
+27
+173
+131
+16
+165
+124
+10
+167
+118
+3
+174
+161
+59
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+142
+112
+6
+158
+118
+4
+154
+137
+10
+154
+137
+10
+155
+131
+8
+157
+124
+5
+158
+118
+4
+158
+118
+4
+167
+118
+3
+171
+124
+10
+173
+131
+16
+176
+139
+27
+178
+152
+46
+174
+161
+59
+181
+171
+85
+182
+174
+95
+182
+174
+95
+183
+179
+101
+183
+179
+101
+149
+145
+88
+127
+123
+64
+96
+93
+42
+59
+55
+21
+18
+14
+7
+20
+15
+1
+53
+43
+3
+88
+74
+4
+131
+91
+4
+171
+124
+2
+194
+154
+4
+201
+166
+5
+201
+166
+5
+212
+168
+4
+212
+168
+4
+225
+168
+2
+226
+176
+3
+225
+168
+2
+226
+176
+3
+222
+180
+5
+223
+184
+6
+225
+188
+6
+227
+195
+6
+227
+195
+6
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+229
+202
+5
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+235
+205
+2
+238
+216
+13
+238
+216
+13
+202
+170
+30
+156
+86
+11
+181
+142
+38
+218
+198
+56
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+239
+234
+68
+218
+198
+56
+181
+142
+38
+156
+86
+11
+147
+102
+2
+157
+135
+6
+167
+144
+6
+178
+128
+2
+171
+140
+4
+172
+147
+5
+167
+148
+8
+167
+148
+8
+167
+144
+6
+163
+144
+8
+163
+144
+8
+163
+144
+8
+161
+141
+8
+158
+141
+9
+158
+141
+9
+158
+141
+9
+158
+141
+9
+155
+139
+10
+155
+139
+10
+155
+139
+10
+154
+137
+10
+155
+135
+9
+156
+129
+6
+157
+124
+5
+158
+118
+4
+160
+113
+2
+161
+108
+0
+160
+113
+2
+158
+118
+4
+157
+124
+5
+155
+131
+8
+150
+133
+10
+148
+130
+9
+143
+127
+9
+143
+127
+9
+126
+112
+8
+96
+86
+8
+68
+56
+4
+43
+35
+3
+20
+15
+1
+14
+10
+2
+49
+45
+20
+81
+77
+32
+113
+109
+47
+131
+124
+45
+168
+160
+66
+168
+160
+66
+168
+160
+66
+174
+161
+59
+167
+151
+39
+163
+146
+29
+170
+139
+22
+173
+131
+16
+167
+118
+3
+160
+113
+2
+160
+113
+2
+158
+118
+4
+157
+124
+5
+155
+131
+8
+158
+118
+4
+178
+152
+46
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+142
+112
+6
+158
+118
+4
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+155
+135
+9
+156
+129
+6
+157
+124
+5
+158
+118
+4
+167
+118
+3
+167
+118
+3
+171
+124
+10
+176
+139
+27
+181
+142
+38
+182
+155
+55
+179
+166
+71
+181
+171
+85
+182
+174
+95
+183
+179
+101
+183
+179
+101
+164
+159
+94
+127
+123
+64
+96
+93
+42
+70
+67
+25
+34
+27
+3
+14
+10
+2
+43
+35
+3
+77
+65
+5
+105
+88
+5
+158
+118
+4
+194
+154
+4
+204
+174
+5
+204
+174
+5
+212
+168
+4
+212
+168
+4
+226
+176
+3
+222
+180
+5
+226
+176
+3
+226
+176
+3
+231
+188
+2
+231
+188
+2
+227
+195
+6
+229
+202
+5
+229
+202
+5
+229
+202
+5
+235
+205
+2
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+235
+205
+2
+238
+216
+13
+218
+193
+4
+178
+128
+2
+179
+128
+28
+210
+190
+66
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+210
+190
+66
+179
+128
+28
+148
+94
+1
+148
+122
+5
+162
+133
+4
+171
+124
+2
+171
+140
+4
+172
+147
+5
+167
+148
+8
+167
+144
+6
+163
+144
+8
+163
+144
+8
+163
+144
+8
+163
+144
+8
+158
+141
+9
+158
+141
+9
+158
+141
+9
+157
+135
+6
+156
+129
+6
+157
+124
+5
+158
+118
+4
+160
+113
+2
+160
+113
+2
+158
+118
+4
+157
+124
+5
+156
+127
+7
+155
+131
+8
+150
+133
+10
+148
+130
+9
+143
+127
+9
+143
+127
+9
+117
+105
+7
+88
+74
+4
+59
+49
+4
+34
+27
+3
+14
+10
+2
+26
+22
+6
+59
+55
+21
+87
+82
+20
+113
+109
+47
+146
+137
+56
+168
+160
+66
+168
+160
+66
+174
+161
+59
+169
+155
+53
+167
+151
+39
+176
+139
+27
+173
+131
+16
+171
+124
+10
+167
+118
+3
+158
+118
+4
+158
+118
+4
+157
+124
+5
+156
+129
+6
+155
+135
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+158
+118
+4
+178
+152
+46
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+142
+112
+6
+158
+118
+4
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+155
+138
+13
+154
+137
+11
+148
+130
+9
+140
+124
+9
+140
+124
+9
+143
+127
+9
+150
+133
+10
+155
+131
+8
+156
+127
+7
+157
+124
+5
+158
+118
+4
+167
+118
+3
+171
+124
+10
+173
+131
+16
+176
+139
+27
+178
+152
+46
+174
+161
+59
+181
+171
+85
+182
+174
+95
+186
+179
+94
+183
+179
+101
+175
+173
+100
+150
+143
+72
+113
+109
+47
+81
+77
+32
+41
+37
+17
+0
+0
+0
+34
+27
+3
+68
+56
+4
+105
+88
+5
+148
+113
+4
+194
+154
+4
+204
+174
+5
+204
+174
+5
+213
+177
+5
+213
+177
+5
+223
+184
+6
+225
+188
+6
+231
+188
+2
+231
+188
+2
+231
+188
+2
+233
+197
+2
+229
+202
+5
+235
+205
+2
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+234
+210
+4
+235
+205
+2
+234
+210
+4
+213
+177
+5
+156
+86
+11
+191
+160
+42
+227
+222
+74
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+227
+222
+74
+191
+160
+42
+156
+86
+11
+148
+113
+4
+162
+123
+4
+171
+124
+2
+172
+147
+5
+172
+147
+5
+167
+148
+8
+167
+144
+6
+163
+144
+8
+164
+140
+6
+169
+130
+4
+162
+123
+4
+167
+118
+3
+161
+108
+0
+160
+113
+2
+162
+123
+4
+157
+124
+5
+155
+131
+8
+150
+133
+10
+148
+130
+9
+143
+127
+9
+143
+127
+9
+140
+124
+9
+108
+98
+7
+77
+65
+5
+59
+49
+4
+26
+22
+6
+0
+0
+0
+41
+37
+17
+70
+67
+25
+96
+93
+42
+131
+124
+45
+150
+143
+72
+168
+160
+66
+168
+160
+66
+174
+161
+59
+178
+152
+46
+176
+139
+27
+170
+139
+22
+173
+131
+16
+167
+118
+3
+167
+118
+3
+158
+118
+4
+157
+124
+5
+156
+127
+7
+155
+131
+8
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+158
+118
+4
+178
+152
+46
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+142
+112
+6
+158
+118
+4
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+155
+138
+13
+154
+137
+11
+150
+133
+10
+150
+133
+10
+140
+124
+9
+126
+112
+8
+117
+105
+7
+126
+112
+8
+135
+121
+9
+140
+124
+9
+148
+130
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+136
+10
+155
+131
+8
+157
+124
+5
+157
+124
+5
+165
+124
+10
+171
+124
+10
+171
+124
+10
+176
+139
+27
+181
+142
+38
+182
+155
+55
+179
+166
+71
+181
+171
+85
+182
+174
+95
+183
+179
+101
+183
+179
+101
+149
+145
+88
+127
+123
+64
+96
+93
+42
+59
+55
+21
+14
+10
+2
+26
+22
+6
+59
+49
+4
+88
+74
+4
+142
+112
+6
+183
+150
+5
+204
+174
+5
+212
+186
+4
+212
+186
+4
+212
+186
+4
+225
+188
+6
+227
+195
+6
+233
+197
+2
+233
+197
+2
+233
+197
+2
+235
+205
+2
+235
+205
+2
+235
+205
+2
+234
+210
+4
+213
+177
+5
+160
+94
+16
+204
+177
+50
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+233
+229
+70
+204
+177
+50
+160
+94
+16
+142
+112
+6
+158
+118
+4
+171
+124
+2
+169
+130
+4
+178
+128
+2
+171
+124
+2
+167
+118
+3
+171
+124
+2
+169
+130
+4
+162
+133
+4
+162
+133
+4
+155
+139
+10
+150
+133
+10
+148
+130
+9
+148
+130
+9
+126
+112
+8
+105
+88
+5
+77
+65
+5
+43
+35
+3
+20
+15
+1
+9
+5
+1
+49
+45
+20
+81
+77
+32
+96
+93
+42
+131
+124
+45
+168
+160
+66
+168
+160
+66
+168
+160
+66
+169
+155
+53
+167
+151
+39
+176
+139
+27
+173
+131
+16
+171
+124
+10
+167
+118
+3
+158
+118
+4
+158
+118
+4
+157
+124
+5
+155
+131
+8
+154
+136
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+158
+118
+4
+178
+152
+46
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+142
+112
+6
+158
+118
+4
+154
+137
+10
+154
+137
+10
+154
+137
+10
+155
+138
+13
+158
+139
+17
+154
+137
+11
+150
+133
+10
+149
+132
+24
+150
+143
+72
+146
+137
+56
+146
+137
+56
+124
+113
+27
+115
+105
+29
+108
+98
+7
+140
+124
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+155
+135
+9
+156
+129
+6
+156
+127
+7
+165
+124
+10
+165
+124
+10
+171
+124
+10
+173
+131
+16
+176
+139
+27
+178
+152
+46
+179
+166
+71
+181
+171
+85
+186
+179
+94
+183
+179
+101
+183
+179
+101
+164
+159
+94
+127
+126
+80
+96
+93
+42
+70
+67
+25
+34
+27
+3
+20
+15
+1
+53
+43
+3
+88
+74
+4
+130
+105
+5
+171
+140
+4
+212
+186
+4
+212
+186
+4
+218
+193
+4
+218
+193
+4
+227
+195
+6
+229
+202
+5
+235
+205
+2
+213
+177
+5
+163
+101
+23
+204
+177
+50
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+204
+177
+50
+163
+101
+23
+148
+113
+4
+162
+123
+4
+179
+135
+3
+171
+140
+4
+164
+140
+6
+161
+141
+8
+154
+136
+9
+155
+131
+8
+149
+131
+6
+126
+112
+8
+96
+86
+8
+68
+56
+4
+43
+35
+3
+14
+10
+2
+26
+22
+6
+59
+55
+21
+81
+77
+32
+113
+109
+47
+146
+137
+56
+168
+160
+66
+168
+160
+66
+169
+155
+53
+178
+152
+46
+176
+139
+27
+170
+139
+22
+173
+131
+16
+171
+124
+10
+162
+123
+4
+162
+123
+4
+157
+124
+5
+156
+129
+6
+155
+135
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+158
+118
+4
+178
+152
+46
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+142
+112
+6
+158
+118
+4
+154
+137
+10
+154
+137
+10
+154
+137
+10
+158
+142
+22
+163
+146
+29
+163
+146
+29
+168
+160
+66
+181
+174
+105
+181
+174
+105
+181
+171
+85
+181
+174
+105
+181
+174
+105
+181
+174
+105
+105
+96
+24
+131
+117
+9
+153
+136
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+155
+135
+9
+156
+127
+7
+162
+130
+12
+162
+130
+12
+173
+131
+16
+178
+128
+2
+176
+139
+27
+178
+152
+46
+191
+160
+42
+190
+172
+60
+190
+175
+80
+186
+179
+94
+193
+183
+105
+175
+173
+100
+150
+143
+72
+113
+109
+47
+81
+77
+32
+49
+45
+20
+9
+5
+1
+43
+35
+3
+77
+65
+5
+130
+105
+5
+171
+140
+4
+194
+154
+4
+204
+174
+5
+160
+94
+16
+204
+177
+50
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+204
+177
+50
+160
+94
+16
+148
+113
+4
+157
+135
+6
+126
+112
+8
+117
+105
+7
+88
+74
+4
+59
+49
+4
+34
+27
+3
+9
+5
+1
+34
+27
+3
+70
+67
+25
+96
+93
+42
+131
+124
+45
+150
+143
+72
+168
+160
+66
+168
+160
+66
+178
+152
+46
+178
+152
+46
+176
+139
+27
+165
+124
+10
+160
+113
+2
+153
+111
+3
+158
+118
+4
+157
+124
+5
+156
+127
+7
+155
+135
+9
+153
+136
+10
+143
+127
+9
+140
+124
+9
+148
+130
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+155
+138
+13
+154
+137
+11
+148
+130
+9
+140
+124
+9
+140
+124
+9
+140
+124
+9
+148
+113
+4
+178
+152
+46
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+142
+112
+6
+158
+118
+4
+154
+137
+10
+154
+137
+10
+154
+137
+11
+167
+151
+39
+169
+155
+53
+179
+166
+71
+181
+174
+105
+164
+154
+76
+158
+142
+22
+169
+155
+53
+174
+161
+59
+181
+171
+85
+181
+174
+105
+131
+124
+45
+131
+117
+9
+153
+136
+10
+154
+137
+10
+154
+137
+11
+154
+137
+11
+153
+136
+10
+150
+133
+10
+153
+136
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+155
+137
+10
+155
+139
+10
+155
+139
+10
+158
+141
+9
+158
+141
+9
+157
+137
+8
+162
+133
+4
+171
+139
+13
+171
+139
+13
+179
+135
+3
+187
+143
+14
+176
+151
+24
+191
+160
+42
+190
+172
+60
+190
+175
+80
+195
+188
+89
+195
+188
+89
+193
+183
+105
+164
+154
+76
+127
+123
+64
+96
+93
+42
+59
+55
+21
+59
+49
+4
+147
+68
+5
+191
+160
+42
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+227
+222
+74
+191
+160
+42
+147
+68
+5
+26
+22
+6
+41
+37
+17
+49
+45
+20
+70
+67
+25
+96
+93
+42
+131
+124
+45
+168
+160
+66
+168
+160
+66
+169
+155
+53
+178
+152
+46
+176
+139
+27
+173
+131
+16
+171
+124
+10
+171
+124
+10
+165
+124
+10
+160
+132
+32
+162
+130
+12
+143
+127
+9
+131
+124
+45
+108
+98
+7
+135
+121
+9
+148
+130
+9
+155
+138
+13
+158
+142
+22
+153
+136
+10
+132
+124
+24
+108
+98
+7
+140
+124
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+158
+142
+22
+158
+142
+22
+149
+132
+24
+139
+129
+30
+124
+113
+27
+108
+98
+7
+142
+112
+6
+178
+152
+46
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+142
+112
+6
+158
+118
+4
+154
+137
+10
+154
+137
+10
+155
+138
+13
+167
+151
+39
+179
+166
+71
+181
+174
+105
+175
+173
+100
+117
+105
+7
+143
+127
+9
+158
+142
+22
+167
+151
+39
+179
+166
+71
+168
+160
+66
+149
+132
+24
+148
+130
+9
+153
+136
+10
+148
+130
+9
+143
+127
+9
+148
+130
+9
+135
+121
+9
+131
+117
+9
+150
+133
+10
+153
+136
+10
+148
+130
+9
+140
+124
+9
+140
+124
+9
+140
+124
+9
+143
+127
+9
+150
+133
+10
+148
+130
+9
+140
+124
+9
+140
+124
+9
+150
+133
+10
+155
+139
+10
+150
+133
+10
+143
+127
+9
+143
+127
+9
+155
+139
+10
+158
+141
+9
+152
+137
+8
+148
+130
+9
+152
+137
+8
+161
+141
+8
+171
+139
+13
+171
+139
+13
+187
+143
+14
+187
+143
+14
+187
+143
+14
+191
+160
+42
+204
+177
+50
+198
+179
+67
+195
+188
+89
+195
+188
+89
+177
+139
+60
+174
+128
+42
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+174
+128
+42
+131
+91
+4
+151
+143
+32
+168
+160
+66
+178
+152
+46
+181
+142
+38
+176
+139
+27
+173
+131
+16
+171
+124
+10
+171
+124
+10
+165
+124
+10
+156
+127
+7
+155
+131
+8
+155
+135
+9
+154
+137
+10
+154
+137
+11
+167
+151
+39
+169
+155
+53
+168
+160
+66
+186
+180
+119
+115
+105
+29
+105
+88
+5
+140
+124
+9
+158
+142
+22
+167
+151
+39
+168
+160
+66
+183
+177
+113
+115
+105
+29
+131
+117
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+167
+151
+39
+169
+155
+53
+181
+171
+85
+186
+180
+119
+150
+143
+72
+108
+98
+7
+130
+105
+5
+178
+152
+46
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+142
+112
+6
+158
+118
+4
+154
+137
+10
+154
+137
+10
+158
+142
+22
+167
+151
+39
+181
+171
+85
+181
+174
+105
+146
+137
+56
+108
+98
+7
+135
+121
+9
+153
+136
+10
+158
+142
+22
+167
+151
+39
+163
+146
+29
+153
+136
+10
+158
+139
+17
+158
+142
+22
+135
+121
+9
+132
+124
+24
+126
+112
+8
+131
+124
+45
+108
+98
+7
+135
+121
+9
+153
+136
+10
+131
+117
+9
+124
+113
+27
+124
+113
+27
+105
+88
+5
+117
+105
+7
+150
+133
+10
+149
+132
+24
+124
+113
+27
+108
+98
+7
+143
+127
+9
+158
+142
+22
+151
+143
+32
+124
+113
+27
+108
+98
+7
+148
+130
+9
+163
+144
+17
+151
+143
+32
+124
+113
+27
+131
+117
+9
+152
+137
+8
+167
+148
+8
+167
+148
+8
+167
+148
+8
+173
+151
+6
+173
+151
+6
+173
+151
+6
+187
+143
+14
+187
+143
+14
+190
+172
+60
+182
+155
+55
+163
+101
+23
+210
+190
+66
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+221
+215
+78
+210
+190
+66
+163
+101
+23
+148
+113
+4
+164
+140
+6
+171
+124
+10
+171
+124
+10
+162
+130
+12
+157
+135
+6
+157
+137
+8
+157
+137
+8
+154
+136
+9
+154
+136
+9
+154
+137
+10
+154
+136
+9
+154
+137
+10
+158
+139
+17
+167
+151
+39
+179
+166
+71
+186
+180
+119
+186
+180
+119
+164
+159
+94
+96
+86
+8
+131
+117
+9
+158
+142
+22
+174
+161
+59
+183
+179
+101
+186
+180
+119
+115
+105
+29
+131
+117
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+167
+151
+39
+179
+166
+71
+183
+179
+101
+186
+180
+119
+150
+143
+72
+117
+105
+7
+147
+102
+2
+178
+152
+46
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+142
+112
+6
+158
+118
+4
+154
+137
+10
+154
+137
+10
+167
+151
+39
+174
+161
+59
+181
+171
+85
+181
+174
+105
+146
+137
+56
+108
+98
+7
+131
+117
+9
+154
+137
+10
+154
+137
+10
+158
+139
+17
+155
+138
+13
+143
+127
+9
+155
+138
+13
+174
+161
+59
+181
+171
+85
+181
+174
+105
+171
+163
+85
+181
+174
+105
+146
+137
+56
+153
+136
+10
+169
+155
+53
+175
+173
+100
+175
+173
+100
+181
+174
+105
+175
+173
+100
+105
+96
+24
+158
+139
+17
+181
+174
+105
+175
+173
+100
+105
+88
+5
+150
+133
+10
+169
+155
+53
+181
+174
+105
+171
+163
+85
+105
+88
+5
+154
+138
+10
+169
+155
+53
+181
+174
+105
+146
+137
+56
+135
+121
+9
+152
+137
+8
+167
+148
+8
+167
+148
+8
+167
+148
+8
+173
+151
+6
+173
+151
+6
+173
+151
+6
+179
+135
+3
+183
+150
+5
+184
+161
+25
+166
+113
+27
+178
+152
+46
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+178
+152
+46
+131
+91
+4
+148
+122
+5
+157
+124
+5
+160
+113
+2
+157
+135
+6
+157
+137
+8
+157
+137
+8
+157
+137
+8
+154
+136
+9
+154
+136
+9
+154
+136
+9
+154
+136
+9
+154
+137
+11
+163
+146
+29
+169
+155
+53
+181
+171
+85
+186
+180
+119
+183
+177
+113
+186
+180
+119
+105
+96
+24
+108
+98
+7
+154
+137
+10
+179
+166
+71
+183
+179
+101
+186
+180
+119
+115
+105
+29
+131
+117
+9
+140
+124
+9
+140
+124
+9
+140
+124
+9
+148
+130
+9
+155
+138
+13
+154
+137
+11
+148
+130
+9
+140
+124
+9
+140
+124
+9
+140
+124
+9
+143
+127
+9
+150
+133
+10
+148
+130
+9
+140
+124
+9
+140
+124
+9
+148
+130
+9
+150
+133
+10
+148
+130
+9
+148
+130
+9
+163
+146
+29
+186
+179
+94
+186
+180
+119
+124
+113
+27
+131
+117
+9
+148
+113
+4
+178
+152
+46
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+142
+112
+6
+158
+118
+4
+154
+137
+10
+154
+137
+10
+167
+151
+39
+179
+166
+71
+182
+174
+95
+181
+174
+105
+146
+137
+56
+96
+86
+8
+131
+117
+9
+148
+130
+9
+155
+138
+13
+158
+139
+17
+154
+137
+11
+135
+121
+9
+135
+121
+9
+181
+171
+85
+181
+174
+105
+181
+174
+105
+146
+137
+56
+163
+146
+29
+163
+146
+29
+169
+155
+53
+181
+174
+105
+168
+160
+66
+158
+139
+17
+168
+160
+66
+181
+174
+105
+171
+163
+85
+167
+151
+39
+182
+174
+95
+181
+174
+105
+124
+113
+27
+150
+133
+10
+181
+171
+85
+181
+174
+105
+181
+174
+105
+105
+96
+24
+153
+136
+10
+181
+171
+85
+175
+173
+100
+126
+112
+8
+140
+124
+9
+158
+141
+9
+167
+148
+8
+167
+148
+8
+167
+148
+8
+173
+151
+6
+173
+151
+6
+173
+151
+6
+178
+128
+2
+183
+150
+5
+181
+142
+38
+163
+101
+23
+215
+195
+75
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+217
+211
+80
+215
+195
+75
+163
+101
+23
+147
+102
+2
+156
+129
+6
+161
+108
+0
+162
+133
+4
+157
+135
+6
+157
+137
+8
+157
+137
+8
+157
+137
+8
+154
+136
+9
+154
+136
+9
+154
+136
+9
+155
+138
+13
+167
+151
+39
+174
+161
+59
+183
+177
+113
+181
+171
+85
+179
+166
+71
+186
+180
+119
+150
+143
+72
+96
+86
+8
+135
+121
+9
+167
+151
+39
+183
+179
+101
+186
+180
+119
+115
+105
+29
+108
+98
+7
+124
+113
+27
+105
+88
+5
+108
+98
+7
+135
+121
+9
+153
+136
+10
+155
+138
+13
+140
+124
+9
+124
+113
+27
+108
+98
+7
+108
+98
+7
+126
+112
+8
+148
+130
+9
+140
+124
+9
+108
+98
+7
+108
+98
+7
+131
+117
+9
+153
+136
+10
+135
+121
+9
+108
+98
+7
+131
+117
+9
+181
+171
+85
+186
+180
+119
+115
+105
+29
+135
+121
+9
+158
+118
+4
+178
+152
+46
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+142
+112
+6
+158
+118
+4
+154
+137
+10
+154
+137
+10
+167
+151
+39
+179
+166
+71
+186
+179
+94
+181
+174
+105
+171
+163
+85
+88
+74
+4
+108
+98
+7
+135
+121
+9
+148
+130
+9
+158
+139
+17
+158
+142
+22
+150
+143
+72
+132
+124
+24
+179
+166
+71
+182
+174
+95
+181
+174
+105
+105
+88
+5
+150
+133
+10
+169
+155
+53
+182
+174
+95
+181
+174
+105
+164
+154
+76
+181
+174
+105
+177
+174
+98
+168
+160
+66
+149
+132
+24
+163
+146
+29
+182
+174
+95
+181
+174
+105
+150
+143
+72
+148
+130
+9
+181
+174
+105
+179
+166
+71
+181
+174
+105
+150
+143
+72
+154
+137
+10
+181
+174
+105
+146
+137
+56
+131
+117
+9
+148
+130
+9
+163
+144
+8
+167
+148
+8
+167
+148
+8
+167
+148
+8
+173
+151
+6
+173
+151
+6
+179
+135
+3
+179
+135
+3
+184
+161
+25
+166
+113
+27
+181
+142
+38
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+181
+142
+38
+131
+91
+4
+145
+123
+8
+158
+118
+4
+162
+123
+4
+157
+135
+6
+157
+137
+8
+157
+137
+8
+157
+137
+8
+154
+136
+9
+154
+136
+9
+154
+136
+9
+158
+142
+22
+169
+155
+53
+181
+171
+85
+186
+180
+119
+146
+137
+56
+179
+166
+71
+186
+180
+119
+183
+177
+113
+96
+86
+8
+117
+105
+7
+158
+142
+22
+183
+179
+101
+186
+180
+119
+171
+163
+85
+186
+180
+119
+186
+180
+119
+175
+173
+100
+105
+88
+5
+126
+112
+8
+154
+137
+11
+167
+151
+39
+171
+163
+85
+186
+180
+119
+183
+177
+113
+150
+143
+72
+108
+98
+7
+150
+133
+10
+182
+174
+95
+186
+180
+119
+131
+124
+45
+126
+112
+8
+169
+155
+53
+186
+180
+119
+164
+154
+76
+143
+127
+9
+181
+171
+85
+186
+180
+119
+115
+105
+29
+131
+117
+9
+158
+118
+4
+178
+152
+46
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+142
+112
+6
+158
+118
+4
+154
+137
+10
+154
+137
+10
+158
+142
+22
+169
+155
+53
+186
+179
+94
+181
+174
+105
+181
+174
+105
+150
+143
+72
+96
+86
+8
+117
+105
+7
+131
+117
+9
+143
+127
+9
+168
+160
+66
+181
+174
+105
+139
+129
+30
+179
+166
+71
+182
+174
+95
+181
+174
+105
+96
+86
+8
+140
+124
+9
+169
+155
+53
+183
+179
+101
+181
+174
+105
+171
+163
+85
+149
+132
+24
+158
+142
+22
+148
+130
+9
+124
+113
+27
+131
+117
+9
+179
+166
+71
+182
+174
+95
+181
+174
+105
+169
+155
+53
+175
+173
+100
+163
+146
+29
+182
+174
+95
+181
+174
+105
+169
+155
+53
+175
+173
+100
+117
+105
+7
+140
+124
+9
+156
+138
+9
+167
+148
+8
+167
+148
+8
+167
+148
+8
+167
+148
+8
+173
+151
+6
+173
+151
+6
+179
+135
+3
+172
+147
+5
+184
+161
+25
+147
+68
+5
+198
+179
+67
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+211
+204
+83
+198
+179
+67
+147
+68
+5
+142
+112
+6
+162
+123
+4
+167
+118
+3
+157
+135
+6
+157
+137
+8
+157
+137
+8
+157
+137
+8
+154
+136
+9
+154
+136
+9
+156
+137
+12
+163
+146
+29
+174
+161
+59
+185
+177
+109
+183
+177
+113
+124
+113
+27
+167
+151
+39
+182
+174
+95
+186
+180
+119
+146
+137
+56
+96
+86
+8
+154
+137
+11
+183
+179
+101
+186
+180
+119
+164
+154
+76
+169
+155
+53
+182
+174
+95
+186
+180
+119
+146
+137
+56
+131
+117
+9
+163
+146
+29
+185
+177
+109
+171
+163
+85
+179
+166
+71
+185
+177
+109
+186
+180
+119
+150
+143
+72
+140
+124
+9
+182
+174
+95
+186
+180
+119
+150
+143
+72
+126
+112
+8
+179
+166
+71
+186
+180
+119
+124
+113
+27
+153
+136
+10
+186
+179
+94
+186
+180
+119
+88
+74
+4
+131
+117
+9
+158
+118
+4
+178
+152
+46
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+142
+112
+6
+158
+118
+4
+154
+137
+10
+154
+137
+10
+154
+137
+10
+167
+151
+39
+181
+171
+85
+183
+179
+101
+181
+174
+105
+181
+174
+105
+171
+163
+85
+146
+137
+56
+164
+154
+76
+175
+173
+100
+181
+174
+105
+146
+137
+56
+153
+136
+10
+182
+174
+95
+182
+174
+95
+181
+174
+105
+88
+74
+4
+126
+112
+8
+163
+146
+29
+186
+179
+94
+181
+174
+105
+175
+173
+100
+146
+137
+56
+151
+143
+32
+171
+163
+85
+150
+143
+72
+135
+121
+9
+169
+155
+53
+186
+179
+94
+181
+174
+105
+181
+174
+105
+150
+143
+72
+158
+141
+9
+182
+174
+95
+181
+174
+105
+181
+174
+105
+164
+154
+76
+126
+112
+8
+148
+130
+9
+163
+144
+8
+167
+148
+8
+167
+148
+8
+167
+148
+8
+167
+148
+8
+173
+151
+6
+173
+151
+6
+178
+128
+2
+183
+150
+5
+181
+142
+38
+163
+101
+23
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+163
+101
+23
+147
+102
+2
+157
+124
+5
+160
+113
+2
+157
+135
+6
+157
+135
+6
+157
+137
+8
+157
+137
+8
+154
+136
+9
+154
+136
+9
+158
+142
+22
+167
+151
+39
+179
+166
+71
+186
+180
+119
+186
+180
+119
+186
+180
+119
+186
+180
+119
+186
+180
+119
+186
+180
+119
+175
+173
+100
+88
+74
+4
+148
+130
+9
+182
+174
+95
+186
+180
+119
+124
+113
+27
+158
+142
+22
+186
+179
+94
+186
+180
+119
+146
+137
+56
+135
+121
+9
+181
+171
+85
+186
+180
+119
+131
+124
+45
+158
+142
+22
+181
+171
+85
+183
+177
+113
+183
+177
+113
+117
+105
+7
+179
+166
+71
+185
+177
+109
+186
+180
+119
+132
+124
+24
+182
+174
+95
+171
+163
+85
+117
+105
+7
+158
+142
+22
+186
+179
+94
+186
+180
+119
+88
+74
+4
+131
+117
+9
+158
+118
+4
+178
+152
+46
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+142
+112
+6
+158
+118
+4
+154
+137
+10
+154
+137
+10
+154
+137
+10
+158
+142
+22
+167
+151
+39
+179
+166
+71
+186
+179
+94
+182
+174
+95
+181
+174
+105
+181
+174
+105
+181
+174
+105
+181
+171
+85
+151
+143
+32
+140
+124
+9
+163
+146
+29
+186
+179
+94
+181
+174
+105
+181
+174
+105
+146
+137
+56
+126
+112
+8
+158
+139
+17
+181
+171
+85
+186
+179
+94
+181
+171
+85
+181
+174
+105
+177
+174
+98
+168
+160
+66
+135
+121
+9
+143
+127
+9
+167
+151
+39
+182
+174
+95
+182
+174
+95
+181
+174
+105
+132
+124
+24
+163
+144
+17
+190
+175
+80
+182
+174
+95
+181
+174
+105
+149
+132
+24
+143
+127
+9
+155
+139
+10
+163
+144
+8
+167
+148
+8
+167
+148
+8
+167
+148
+8
+173
+151
+6
+173
+151
+6
+173
+151
+6
+178
+128
+2
+184
+161
+25
+174
+128
+42
+174
+128
+42
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+204
+197
+86
+174
+128
+42
+148
+94
+1
+148
+122
+5
+161
+108
+0
+157
+135
+6
+157
+135
+6
+157
+137
+8
+157
+137
+8
+154
+136
+9
+156
+137
+12
+163
+146
+29
+169
+155
+53
+181
+174
+105
+183
+177
+113
+151
+143
+32
+174
+161
+59
+179
+166
+71
+182
+174
+95
+185
+177
+109
+186
+180
+119
+131
+124
+45
+126
+112
+8
+181
+171
+85
+186
+180
+119
+115
+105
+29
+153
+136
+10
+181
+171
+85
+186
+180
+119
+146
+137
+56
+140
+124
+9
+182
+174
+95
+186
+180
+119
+146
+137
+56
+117
+105
+7
+169
+155
+53
+182
+174
+95
+186
+180
+119
+115
+105
+29
+169
+155
+53
+193
+183
+105
+186
+180
+119
+177
+174
+98
+186
+180
+119
+124
+113
+27
+126
+112
+8
+163
+146
+29
+186
+179
+94
+177
+174
+98
+88
+74
+4
+131
+117
+9
+158
+118
+4
+178
+152
+46
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+142
+112
+6
+158
+118
+4
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+158
+142
+22
+167
+151
+39
+179
+166
+71
+179
+166
+71
+174
+161
+59
+169
+155
+53
+169
+155
+53
+158
+142
+22
+148
+130
+9
+150
+133
+10
+163
+146
+29
+179
+166
+71
+179
+166
+71
+163
+146
+29
+153
+136
+10
+148
+130
+9
+155
+138
+13
+167
+151
+39
+179
+166
+71
+179
+166
+71
+174
+161
+59
+167
+151
+39
+158
+139
+17
+150
+133
+10
+150
+133
+10
+163
+146
+29
+179
+166
+71
+179
+166
+71
+158
+142
+22
+148
+130
+9
+163
+146
+29
+179
+166
+71
+179
+166
+71
+163
+144
+17
+152
+137
+8
+155
+139
+10
+163
+144
+8
+163
+144
+8
+167
+148
+8
+167
+148
+8
+167
+148
+8
+173
+151
+6
+173
+151
+6
+173
+151
+6
+178
+128
+2
+184
+161
+25
+166
+113
+27
+182
+155
+55
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+182
+155
+55
+156
+86
+11
+148
+122
+5
+161
+108
+0
+157
+135
+6
+157
+135
+6
+157
+137
+8
+157
+137
+8
+154
+136
+9
+158
+142
+22
+167
+151
+39
+179
+166
+71
+186
+180
+119
+164
+154
+76
+108
+98
+7
+148
+130
+9
+167
+151
+39
+179
+166
+71
+183
+179
+101
+186
+180
+119
+175
+173
+100
+108
+98
+7
+179
+166
+71
+186
+180
+119
+113
+109
+47
+126
+112
+8
+179
+166
+71
+186
+180
+119
+150
+143
+72
+126
+112
+8
+179
+166
+71
+186
+180
+119
+183
+177
+113
+146
+137
+56
+151
+143
+32
+181
+174
+105
+164
+154
+76
+117
+105
+7
+158
+142
+22
+186
+179
+94
+185
+177
+109
+186
+180
+119
+164
+159
+94
+117
+105
+7
+140
+124
+9
+167
+151
+39
+186
+179
+94
+181
+174
+105
+105
+96
+24
+126
+112
+8
+158
+118
+4
+178
+152
+46
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+142
+112
+6
+158
+118
+4
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+158
+142
+22
+163
+146
+29
+163
+146
+29
+163
+146
+29
+163
+146
+29
+163
+146
+29
+158
+142
+22
+153
+136
+10
+153
+136
+10
+158
+142
+22
+163
+146
+29
+163
+146
+29
+158
+142
+22
+158
+139
+17
+153
+136
+10
+153
+136
+10
+158
+142
+22
+163
+146
+29
+163
+146
+29
+163
+146
+29
+163
+146
+29
+158
+142
+22
+153
+136
+10
+153
+136
+10
+158
+142
+22
+163
+146
+29
+163
+146
+29
+158
+142
+22
+155
+139
+10
+163
+144
+17
+167
+151
+39
+167
+151
+39
+163
+146
+29
+158
+141
+9
+161
+141
+8
+163
+144
+8
+163
+144
+8
+167
+148
+8
+167
+148
+8
+167
+148
+8
+173
+151
+6
+173
+151
+6
+173
+151
+6
+178
+128
+2
+191
+160
+42
+160
+94
+16
+179
+166
+71
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+179
+166
+71
+147
+68
+5
+148
+122
+5
+161
+108
+0
+157
+135
+6
+157
+135
+6
+157
+137
+8
+157
+137
+8
+154
+136
+9
+163
+146
+29
+174
+161
+59
+181
+174
+105
+186
+180
+119
+164
+154
+76
+117
+105
+7
+135
+121
+9
+158
+142
+22
+169
+155
+53
+183
+179
+101
+186
+180
+119
+186
+180
+119
+169
+155
+53
+182
+174
+95
+186
+180
+119
+171
+163
+85
+140
+124
+9
+181
+171
+85
+186
+180
+119
+183
+177
+113
+131
+117
+9
+174
+161
+59
+183
+179
+101
+185
+177
+109
+186
+180
+119
+186
+180
+119
+181
+171
+85
+139
+129
+30
+135
+121
+9
+158
+142
+22
+179
+166
+71
+182
+174
+95
+186
+180
+119
+124
+113
+27
+126
+112
+8
+150
+133
+10
+167
+151
+39
+183
+179
+101
+186
+180
+119
+131
+124
+45
+135
+121
+9
+158
+118
+4
+178
+152
+46
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+142
+112
+6
+158
+118
+4
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+155
+137
+10
+155
+139
+10
+155
+139
+10
+158
+141
+9
+158
+141
+9
+158
+141
+9
+158
+141
+9
+161
+141
+8
+163
+144
+8
+163
+144
+8
+163
+144
+8
+163
+144
+8
+167
+148
+8
+167
+148
+8
+167
+148
+8
+173
+151
+6
+173
+151
+6
+173
+151
+6
+178
+128
+2
+190
+172
+60
+156
+86
+11
+190
+175
+80
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+195
+188
+89
+190
+175
+80
+147
+68
+5
+148
+122
+5
+161
+108
+0
+162
+133
+4
+157
+135
+6
+157
+137
+8
+157
+137
+8
+154
+136
+9
+163
+146
+29
+179
+166
+71
+179
+166
+71
+169
+155
+53
+158
+139
+17
+143
+127
+9
+148
+130
+9
+155
+138
+13
+167
+151
+39
+179
+166
+71
+179
+166
+71
+163
+146
+29
+167
+151
+39
+174
+161
+59
+174
+161
+59
+158
+142
+22
+158
+139
+17
+179
+166
+71
+179
+166
+71
+158
+142
+22
+148
+130
+9
+163
+146
+29
+179
+166
+71
+179
+166
+71
+174
+161
+59
+174
+161
+59
+158
+142
+22
+150
+133
+10
+154
+137
+10
+158
+142
+22
+169
+155
+53
+183
+177
+113
+150
+143
+72
+126
+112
+8
+140
+124
+9
+154
+137
+11
+167
+151
+39
+179
+166
+71
+169
+155
+53
+143
+127
+9
+148
+130
+9
+158
+118
+4
+178
+152
+46
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+142
+112
+6
+158
+118
+4
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+155
+137
+10
+155
+139
+10
+155
+139
+10
+158
+141
+9
+158
+141
+9
+158
+141
+9
+158
+141
+9
+161
+141
+8
+163
+144
+8
+163
+144
+8
+163
+144
+8
+167
+148
+8
+167
+148
+8
+167
+148
+8
+167
+148
+8
+173
+151
+6
+173
+151
+6
+172
+147
+5
+178
+128
+2
+190
+172
+60
+147
+68
+5
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+147
+68
+5
+148
+122
+5
+161
+108
+0
+156
+129
+6
+157
+135
+6
+157
+137
+8
+157
+137
+8
+154
+136
+9
+158
+142
+22
+163
+146
+29
+163
+146
+29
+163
+146
+29
+158
+142
+22
+153
+136
+10
+153
+136
+10
+154
+137
+10
+158
+142
+22
+163
+146
+29
+163
+146
+29
+158
+142
+22
+163
+146
+29
+163
+146
+29
+163
+146
+29
+158
+142
+22
+158
+142
+22
+163
+146
+29
+163
+146
+29
+158
+142
+22
+153
+136
+10
+158
+139
+17
+163
+146
+29
+163
+146
+29
+163
+146
+29
+163
+146
+29
+158
+142
+22
+158
+142
+22
+163
+146
+29
+169
+155
+53
+185
+177
+109
+177
+174
+98
+135
+121
+9
+135
+121
+9
+148
+130
+9
+154
+137
+10
+158
+142
+22
+163
+146
+29
+158
+142
+22
+153
+136
+10
+153
+136
+10
+158
+118
+4
+178
+152
+46
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+126
+112
+8
+142
+112
+6
+158
+118
+4
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+155
+137
+10
+155
+139
+10
+155
+139
+10
+158
+141
+9
+158
+141
+9
+158
+141
+9
+158
+141
+9
+161
+141
+8
+163
+144
+8
+163
+144
+8
+163
+144
+8
+167
+148
+8
+167
+148
+8
+167
+148
+8
+167
+148
+8
+173
+151
+6
+173
+151
+6
+172
+147
+5
+179
+135
+3
+190
+172
+60
+147
+68
+5
+182
+174
+95
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+182
+174
+95
+147
+68
+5
+145
+123
+8
+160
+113
+2
+156
+129
+6
+157
+135
+6
+157
+137
+8
+157
+137
+8
+154
+136
+9
+154
+136
+9
+154
+136
+9
+154
+136
+9
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+167
+151
+39
+169
+155
+53
+181
+171
+85
+181
+171
+85
+149
+132
+24
+140
+124
+9
+150
+133
+10
+153
+136
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+154
+137
+10
+158
+118
+4
+178
+152
+46
+193
+183
+105
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+131
+117
+9
+138
+117
+8
+148
+94
+1
+148
+94
+1
+148
+94
+1
+148
+94
+1
+148
+94
+1
+148
+94
+1
+148
+94
+1
+148
+94
+1
+148
+94
+1
+148
+94
+1
+148
+94
+1
+148
+94
+1
+148
+94
+1
+148
+94
+1
+148
+94
+1
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+153
+111
+3
+153
+111
+3
+153
+111
+3
+153
+111
+3
+153
+111
+3
+153
+111
+3
+158
+118
+4
+158
+118
+4
+158
+118
+4
+162
+123
+4
+162
+123
+4
+158
+118
+4
+162
+123
+4
+173
+151
+6
+147
+68
+5
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+186
+179
+94
+147
+68
+5
+145
+123
+8
+153
+111
+3
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+147
+102
+2
+166
+113
+27
+169
+132
+54
+174
+128
+42
+147
+102
+2
+148
+94
+1
+148
+94
+1
+148
+94
+1
+148
+94
+1
+148
+94
+1
+148
+94
+1
+148
+94
+1
+148
+94
+1
+148
+94
+1
+148
+94
+1
+148
+94
+1
+155
+131
+8
+181
+171
+85
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+0
+0
+0
+131
+117
+9
+131
+117
+9
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+134
+112
+5
+134
+112
+5
+134
+112
+5
+134
+112
+5
+134
+112
+5
+134
+112
+5
+134
+112
+5
+138
+117
+8
+138
+117
+8
+142
+112
+6
+142
+112
+6
+142
+112
+6
+142
+112
+6
+142
+112
+6
+148
+113
+4
+145
+123
+8
+157
+135
+6
+147
+68
+5
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+147
+68
+5
+138
+117
+8
+140
+119
+3
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+130
+105
+5
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+126
+112
+8
+135
+121
+9
+153
+136
+10
+0
+0
+0
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+86
+40
+3
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+164
+154
+76
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+164
+154
+76
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+147
+68
+5
+86
+40
+3
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+147
+68
+5
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+177
+174
+98
+147
+68
+5
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+147
+68
+5
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+147
+68
+5
+45
+67
+90
+78
+116
+156
+143
+167
+192
+106
+138
+172
+159
+176
+193
+147
+68
+5
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+175
+173
+100
+147
+68
+5
+45
+67
+90
+78
+116
+156
+143
+167
+192
index 0e1a7d0d0399a81d7502cf29d6099b2ee0797cbb..01db528889af367558bb6add9f82f08e7ade862e 100755 (executable)
 
 
 use strict (qw(vars));
-use Data::Dumper;
+use HTTP::Request;
+use IO::File;
+use POSIX;
+use LWP::UserAgent;
+use XML::Parser;
 
 # $commod{'Hemp'}{Buy|Sell}{'stall'}{Stall}
 # $commod{'Hemp'}{Buy|Sell}{'stall'}{Price}
@@ -88,8 +92,6 @@ sub bs_p_bestprice ($) {
     }
 }
 
-our $arbitrage_only= 0;
-
 sub main__arbitrage () {
     my @arbs= ();
     foreach $commod (sort keys %commod) {
@@ -182,8 +184,6 @@ sub main__bestprices () {
        $current= $commod{$commod};
        my $buys=  bs_p($commod,Buy, -1);
        my $sells= bs_p($commod,Sell,+1);
-       if ($arbitrage_only) {
-       }
        printf("%-15.15s", $commod) or die $!;
        bs_p_bestprice($buys);
        bs_p_bestprice($sells);
@@ -216,10 +216,171 @@ sub main__tsv () {
     }
 }
 
+
+our (%commodmap);
+our ($pctb) = 'http://pctb.ilk.org/';
+our ($ua)= LWP::UserAgent->new;
+
+sub load_commodmap() {
+    undef %commodmap;
+    my $c= new IO::File "#commodmap#.tsv";
+    if (!$c) { $!==&ENOENT or die $!; return; }
+    while (<$c>) {
+       m/^(\S.*\S)\t(\d+)\n$/ or die "$_";
+       $commodmap{$1}= $2;
+    }
+    $c->error and die $!;
+    close $c;
+}
+
+sub refresh_commodmap() {
+    my $resp= $ua->get("$pctb/commodmap.php?version=2");
+    die $resp->status_line unless $resp->is_success;
+
+    my $cdata='';
+    my $incommodmap=0;
+    my $intag='';
+    my %got;
+    my $o= new IO::File "#commodmap#.tsv.new",'w' or die $!;
+    undef %commodmap;
+
+    my $xp= new XML::Parser
+       (Handlers =>
+        {
+            Start => sub {
+                $_=$_[1];
+#print STDERR "START [$_] intag=$intag icm=$incommodmap\n";
+                if (m/^commodmap$/i) {
+                    $incommodmap++;
+                    undef %got;
+                } elsif (m/^(?:name|index)$/i) {
+                    $cdata='';
+                    $intag=lc($_) if $incommodmap;
+#print STDERR "START RECOGNISED $intag icm=$incommodmap\n";
+#               } else {
+#print STDERR "START UNRECOGNISED\n";
+                }
+            },
+            End => sub {
+                $_=$_[1];
+#print STDERR "END [$_] intag=$intag icm=$incommodmap\n";
+                if (m/^commodmap$/i) {
+                    $incommodmap--;
+                    die unless exists $got{'name'};
+                    die unless exists $got{'index'};
+                    die unless $got{'index'} =~ m/^\s*([1-9]\d{0,3})\s*$/;
+                    my $index= $1;
+                    $_= $got{'name'};
+                    s/^\s+//; s/\s+$//; s/\n/ /g; s/\s+/ /;
+                    die "$_ ?" if exists $commodmap{$_};
+                    $commodmap{$_}= $index;
+                    print $o "$_\t$index\n" or die $!;
+                } elsif (lc $_ eq $intag) {
+                    $got{$intag}= $cdata;
+                }
+            },
+            Char => sub {
+#print STDERR "CHAR [$_[1]] intag=$intag icm=$incommodmap\n";
+                $cdata .= $_[1];
+            }
+        }) or die;
+    my $content= $resp->content;
+
+#    print STDERR "[[[$content]]]\n";
+    $xp->parse($content);
+    close $o or die $!;
+    rename "#commodmap#.tsv.new","#commodmap#.tsv" or die $!;
+}
+
+our (%stallmap, @stallmap);
+
+sub bs_gen_md ($$) {
+    my ($bs,$sortmul) = @_;
+    my $count= 0;
+    my $o= '';
+    
+    foreach $commod (sort {
+       $commodmap{$a} <=> $commodmap{$b}
+    } keys %commod) {
+#print STDERR "COMMOD $commod\n";
+        $current= $commod{$commod};
+       my $l= bs_p($commod,$bs,$sortmul);
+       next unless @$l;
+#print STDERR "COMMOD $commod  has ".scalar(@$l)."\n";
+       $o .= writeint($commodmap{$commod});
+       $o .= writeint(scalar @$l);
+       foreach my $cs (@$l) {
+           $stall= $cs->{Stall};
+           my $stallix= $stallmap{$stall};
+           if (!defined $stallix) {
+               push @stallmap, $stall;
+               $stallmap{$stall}= $stallix= @stallmap;
+#print STDERR "STALL DEF $stallix $stall\n";
+           }
+           my $qty= $cs->{Qty};
+           $qty =~ s/^\>\s*//;
+           $o .= writeint($stallix, $cs->{Price}, $qty+0);
+           $count++;
+       }
+    }
+#print STDERR "COMMOD $commod COUNT WAS $count\n";
+    return
+       writeint($count).$o;
+}
+
+sub writeint { return pack 'v*', @_; }
+
+sub genmarketdata () {
+    our $version= '005b';
+
+    load_commodmap();
+    my @missing= grep { !exists $commodmap{$_} } keys %commod;
+    if (@missing) {
+       refresh_commodmap();
+       my $missing=0;
+       foreach $commod (sort keys %commod) {
+           next if exists $commodmap{$commod};
+           printf STDERR "Unknown commodity \`%s'!\n", $commod;
+           $missing++;
+       }
+       die "$missing unknown commoditi(es).  OCR failure?\n"
+           if $missing;
+    }    
+
+    my $ob='';
+    $ob .= bs_gen_md(Buy, -1);
+    $ob .= bs_gen_md(Sell,+1);
+
+    my $ot= sprintf("$version\n".
+                   "%d\n",
+                   scalar(@stallmap));
+    foreach $stall (@stallmap) { $ot .= "$stall\n"; }
+    return $ot.$ob;
+}
+
+sub main__genmarketdata () {
+    my $o= genmarketdata();
+    print $o or die $!;
+}
+
 sub main__upload () {
-    die "\nUploading not yet implemented, sorry.\n";
+    my $o= genmarketdata();
+    my $url= "$pctb/upload.php";
+    $url= "http://www.chiark.greenend.org.uk/ucgi/~ijackson/check/upload.php";
+    my $content= {
+       'marketdata' => [ undef, "marketdata.gz",
+                         Content_Type => 'application/gzip',
+                         Content => $o
+                         ]
+                     };
+    my $resp= $ua->post("$url", Content => $content,
+                       Content_Type => 'form-data');
+    die $resp->status_line unless $resp->is_success;
+
+    print "[[ ",$resp->content," ]]\n";
 }
 
+
 $mode =~ s/\-//;
 &{"main__$mode"};
 close(STDOUT) or die $!;
index e8f0ef0b3df447ba306e2ca90871a317f7914936..d798aad03a1e8de8bc274e5de9837c5635801848 100755 (executable)
@@ -2,9 +2,10 @@
 
 use IO::Handle;
 
+open CM, "#commodmap#.tsv" or die $!;
+
 $debug=1 if @ARGV;
 
-open CM, "commodmap" or die $!;
 while (<CM>) {
     m/^(\S.*\S)\t(\d+)$/ or die;
     $commodmap[$2]= $1;
index bb55d3d3901e21e8e4a068cc8b2a05c9a620fe1e..a733e734a28b17f247e1cf0fe770f9b37f66198f 100755 (executable)
@@ -82,8 +82,12 @@ static unsigned char csr_bits[] = {
 
     frame .d.mi.csr_0 -bg white -width 1
     frame .d.mi.csr_1 -bg white -width 1
+    frame .d.pe
+    frame .d.pe.grid
+    button .d.pe.ok -text OK
+    pack .d.pe.grid .d.pe.ok -side left
 
-    pack .d.csr .d.mi .d.got .d.ctx -side top
+    pack .d.mi .d.got .d.ctx -side top
     pack .d
 
     frame .help
@@ -101,31 +105,25 @@ proc show_context {maxhv x ctxs} {
     if {$wh > $maxh} { set maxh $wh }
 }
 
-proc resize_widgets {} {
+proc resize_widgets_core {} {
     global mulcols mulrows csrh gotsh ctxh glyphsdone
     global unk_l unk_contexts
     
     foreach w {.d.csr .d.got .d.ctx} {
        $w configure -width $mulcols
     }
-    #.d configure -height [expr {$csrh+$mulrows+$gotsh+$ctxh}]
-    foreach w {0 1} {
-       .d.mi.csr_$w configure -height $mulrows
-    }
 
     eval destroy [winfo children .d.ctx]
-
-    set maxh 0
-    foreach {min max contexts got} $glyphsdone {
-       show_context maxh $min $contexts
-    }
-    show_context maxh $unk_l $unk_contexts
-    .d.ctx configure -height $maxh
 }
 
 
 #---------- xpm input processor ----------
 
+proc must_gets {f lvar} {
+    upvar 1 $lvar l
+    if {[gets $f l] < 0} { error "huh?" }
+}
+
 proc read_xpm {f} {
     global glyphsdone mul inter rhsmost_max unk_l unk_r mulcols mulrows
     global cols rows wordmap
@@ -133,7 +131,7 @@ proc read_xpm {f} {
     set o {}
     set y -3
     while 1 {
-       if {[gets $f l] < 0} { error "huh? "}
+       must_gets $f l
        if {![regexp {^"(.*)",$} $l dummy l]} {
            append o "$l\n"
            if {[regexp {^\}\;$} $l]} break
@@ -255,7 +253,6 @@ proc startup_cursor {} {
 
     set cur_0 $unk_l
     set cur_1 [expr {$unk_r+1}]
-    set last_ht {}
 
     recursor
 }
@@ -263,6 +260,8 @@ proc startup_cursor {} {
 
 #---------- runtime display and keystroke handling ----------
 
+set last_ht {}
+
 proc helptext {t} {
     global last_ht
     if {![string compare $t $last_ht]} return
@@ -520,47 +519,137 @@ proc RETURN_RESULT {how what} {
 proc main/default {} {
     puts stderr "Do not run this program directly."
     exit 12
-    
-    global glyphsdone unk_l unk_r unk_contexts
-
-    set glyphsdone {
-       7 11 1 M
-       13 17 0 a
-       19 23 0 n
-    }
-    set unk_l 25
-    set unk_r 29
-    set unk_contexts Test
-
-    set f [open text.xpm]
-    read_xpm $f
-    close $f
-
-    read_database
-    resize_widgets
-    draw_glyphsdone
-    startup_cursor
 }
 proc done/default {} {
 }
 
 proc required {} {
     global glyphsdone unk_l unk_r unk_contexts
+
+    fileevent stdin readable {}
+    fconfigure stdin -blocking yes
     
     if {[gets stdin l]<0} {
        if {[eof stdin]} { fconfigure stdin -blocking yes; exit 0 }
        return
     }
     init_widgets
+
+    required/$l
+}
+
+
+proc foreach_pixmap_col {var body} {
+    global alloptions
+    upvar 1 $var col
+    for {set col 0} {$col < [llength $alloptions]/3} {incr col} {
+       uplevel 1 $body
+    }
+}
+
+proc pixmap_select {ncol} {
+    global alloptions
+    debug "PIX SELECT $ncol [llength $alloptions]"
+    foreach_pixmap_col col {
+       if {$col==$ncol} continue
+       .d.pe.grid.l$col selection clear 0 end
+    }
+    pixmap_maybe_ok
+}
+proc pixmap_maybe_ok {} {
+    global alloptions pixmap_selcol pixmap_selrow
+    set nsel 0
+    foreach_pixmap_col col {
+       set cs [.d.pe.grid.l$col curselection]
+       incr nsel [llength $cs]
+       set pixmap_selcol $col
+       set pixmap_selrow [lindex $cs 0]
+    }
+    if {$nsel==1} {
+       .d.pe.ok configure -state normal -command pixmap_ok
+    } else {
+       .d.pe.ok configure -state disabled -command {}
+    }
+}
+proc pixmap_ok {} {
+    foreach_pixmap_col col {
+       .d.pe.grid.l$col configure -state disabled
+    }
+    .d.pe.ok configure -state disabled
+    helptext {{{ Processing }}}
+}
+
+proc required/pixmap {} {
+    global unk_what ppm mulcols alloptions
+    must_gets stdin unk_what
+    debug "GOT pixmap $unk_what"
+    set ppm {}
+    while 1 {
+       must_gets stdin ppml
+       if {![string length $ppml]} break
+       append ppm $ppml "\n"
+    }
+    set data [exec pnmscale 2 << $ppm]
+    image create photo image/main -data $data
+
+    set alloptions [exec ./yppsc-resolver-pixoptions $unk_what]
+
+    #read_database_pixmaps
+
+    set mulcols [image width image/main]
+    set mulrows [image height image/main]
+    resize_widgets_core
+    place forget .d.mi.csr_0
+    place forget .d.mi.csr_1
+    .d.ctx configure -height 0
+    pack forget .d.csr
+    pack .d.pe -side top -before .d.mi -pady 10
+
+    eval destroy [winfo children .d.pe.grid]
+    set col 0; foreach {colname coldesc rows} $alloptions {
+       debug "INIT $col $colname \"$coldesc\""
+       label .d.pe.grid.t$col -text $colname
+       listbox .d.pe.grid.l$col
+       foreach {rowname rowdesc} $rows {
+           debug "INIT $col $colname \"$coldesc\" $rowname \"$rowdesc\""
+           .d.pe.grid.l$col insert end $rowdesc
+       }
+       bind .d.pe.grid.l$col <<ListboxSelect>> [list pixmap_select $col]
+       grid .d.pe.grid.t$col -column $col -row 0
+       grid .d.pe.grid.l$col -column $col -row 1
+       incr col
+    }
+    pixmap_maybe_ok
+    
+    helptext {
+       {{Indicate the correct parse of this image, and click OK.}}
+    }
+}
+
+proc required/char {} {
+    global mulrows
+    
+    must_gets stdin l
+
     manyset [lrange $l 0 3] unk_l unk_r unk_contexts
     set glyphsdone [lrange $l 3 end]
     debug "GOT $l"
 
-    fileevent stdin readable {}
-    fconfigure stdin -blocking yes
-
     read_xpm stdin
-    resize_widgets
+
+    resize_widgets_core
+    foreach w {0 1} {
+       .d.mi.csr_$w configure -height $mulrows
+    }
+    set maxh 0
+    foreach {min max contexts got} $glyphsdone {
+       show_context maxh $min $contexts
+    }
+    show_context maxh $unk_l $unk_contexts
+    .d.ctx configure -height $maxh
+    pack forget .d.pe
+    pack .d.csr -side top -before .d.mi
+
     read_database
     draw_glyphsdone
     startup_cursor
diff --git a/pctb/yppsc-ppmlookup b/pctb/yppsc-ppmlookup
new file mode 100755 (executable)
index 0000000..efb785d
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/sh
+set -ex
+
+needle=$(pnmnoraw)
+
+exec 3<database.ppm
+
+while true; do
+       read <&3 title
+       if [ x"$title" = x. ]; then
+               exit 0
+       fi
+       straw=$(pnmnoraw <&3)
+       if [ x"$straw" = x"$needle" ]; then
+               printf "%s\n" "$title"
+               exit 0
+       fi
+done
diff --git a/pctb/yppsc-resolver-pixoptions b/pctb/yppsc-resolver-pixoptions
new file mode 100755 (executable)
index 0000000..eff5b02
--- /dev/null
@@ -0,0 +1,118 @@
+#!/usr/bin/perl -w
+
+# helper program for determining pixmap resolution options
+
+# This is part of ypp-sc-tools, a set of third-party tools for assisting
+# players of Yohoho Puzzle Pirates.
+#
+# Copyright (C) 2009 Ian Jackson <ijackson@chiark.greenend.org.uk>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# Yohoho and Puzzle Pirates are probably trademarks of Three Rings and
+# are used without permission.  This program is not endorsed or
+# sponsored by Three Rings.
+
+use strict (qw(vars));
+use LWP::UserAgent;
+use JSON;
+#use Data::Dumper;
+
+@ARGV==1 or die "You probably don't want to run this program directly.\n";
+our ($which) = shift @ARGV;
+
+$which =~ s/\W//g;
+
+our ($pctb)= 'http://pctb.ilk.org/';
+our ($ua)= LWP::UserAgent->new;
+our $jsonresp;
+
+sub jparsetable ($$) {
+    my ($jobj,$wh) = @_;
+    my $jtab= $jobj->{$wh};
+    die "$jsonresp $wh ?" unless defined $jtab;
+    my $cns= $jtab->{'colNames'};  die "$jsonresp $wh ?" unless defined $cns;
+    my $ad= $jtab->{'arrayData'};  die "$jsonresp $wh ?" unless defined $ad;
+    my @o=();
+    foreach my $ai (@$ad) {
+       @$ai == @$cns or die "$jsonresp $wh ".scalar(@o)."?";
+       my $v= { };
+       for (my $i=0; $i<@$cns; $i++) {
+           $v->{$cns->[$i]} = $ai->[$i];
+       }
+       push @o, $v;
+    }
+    return @o;
+}
+sub sort_by_name {
+    sort {
+       $a->{'name'} cmp $b->{'name'};
+    } @_;
+}
+
+sub p ($) { print $_[0] or die $!; }
+sub ptcl ($) {
+    local ($_) = @_;
+    die "$_ $& ?" if m/[^-+'"# 0-9a-z]/i;
+    p("{$_[0]}");
+}
+    
+sub main__island () {
+    my $url= "$pctb/islands.php?oceanName=MIDNIGHT";
+    my $resp= $ua->get($url);
+    die $resp->status_line unless $resp->is_success;
+    $jsonresp= $resp->content;
+    my $jobj= jsonToObj($resp->content);
+    my @arches= jparsetable($jobj, 'arches');
+    my @islands= jparsetable($jobj, 'islands');
+#    print Dumper(\@arches, \@islands);
+    my $islands_done=0;
+    foreach my $arch (sort_by_name(@arches)) {
+#      print Dumper($arch);
+       my $aname= $arch->{'name'};
+       die "$jsonresp ?" unless defined $aname;
+       ptcl($aname); p(' '); ptcl($aname); p(" {\n");
+       foreach my $island (sort_by_name(@islands)) {
+           my $iname= $island->{'name'};
+           die "$jsonresp $aname ?" unless defined $iname;
+           next unless $arch->{'id'} == $island->{'arch'};
+           p('    '); ptcl($iname); p(' '); ptcl($iname); p("\n");
+           $islands_done++;
+       }
+       p("}\n");
+    }
+    die "$jsonresp $islands_done ?" unless $islands_done == @islands;
+}
+
+sub main__sunshinewidget () {
+    print <<END
+Land {On land} {
+    Crew   Crew
+    Shoppe Shoppe
+    Ye     Ye
+    Booty  Booty
+    Ahoy!  Ahoy!
+}
+Ship {On board a ship} {
+    Crew   Crew
+    Vessel Vessel
+    Ye     Ye
+    Booty  Booty
+    Ahoy!  Ahoy!
+}
+END
+    or die $!;
+}
+
+&{"main__$which"}();